{"version":3,"file":"assets/chunk.360f4d9a9fed3e37d6d1.js","mappings":"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AM,UACN,GAAM,YACN,GAAM,QACN,GAAM,cACN,GAAM,SACN,GAAM,UACN,GAAM,SACN,GAAM,QACN,GAAM,qBACN,GAAM,oBACN,GAAM,SACN,GAAM,cACN,GAAM,aACN,GAAM,2BACN,GAAM,yBACN,GAAM,6BACN,GAAM,kBACN,GAAM,sBACN,GAAM,gBACN,GAAM,cACN,GAAM,uBACN,GAAM,qBACN,GAAM,mBACN,GAAM,mBACN,GAAM,mBACN,GAAM,cACN,GAAM,mBACN,GAAM,kBACN,GAAM,gBACN,GAAM,eACN,GAAM,wBACN,IAAO,sBACP,IAAO,eACP,IAAO,cACP,IAAO,kBACP,IAAO,iBACP,IAAO,kBACP,IAAO,eACP,IAAO,eACP,IAAO,oBACP,IAAO,gBACP,IAAO,iBACP,IAAO,WACP,IAAO,kBACP,IAAO,oBACP,IAAO,QACP,IAAO,MACP,IAAO,kBACP,IAAO,YACP,IAAO,kBACP,IAAO,oBACP,IAAO,UACP,IAAO,gBACP,IAAO,SACP,IAAO,SACP,IAAO,UACP,IAAO,SACP,IAAO,MACP,IAAO,QACP,IAAO,cACP,IAAO,YACP,IAAO,QACP,IAAO,aACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,WACP,IAAO,cACP,IAAO,kBACP,IAAO,mBACP,IAAO,mBACP,IAAO,WACP,IAAO,eACP,IAAO,mBACP,IAAO,iBACP,IAAO,YACP,IAAO,oBACP,IAAO,YACP,IAAO,WACP,IAAO,wBACP,IAAO,0BACP,IAAO,4BACP,IAAO,sBACP,IAAO,oBACP,IAAO,sBACP,IAAO,sBACP,IAAO,SACP,IAAO,iBACP,IAAO,gBACP,IAAO,iBACP,IAAO,gBACP,IAAO,iBACP,IAAO,qBACP,IAAO,eACP,IAAO,cACP,IAAO,OACP,IAAO,gBACP,IAAO,cACP,IAAO,eACP,IAAO,kBACP,IAAO,oBACP,IAAO,oBACP,IAAO,qBACP,IAAO,YACP,IAAO,OACP,IAAO,cACP,IAAO,UACP,IAAO,cACP,IAAO,uBACP,IAAO,YACP,IAAO,aACP,IAAO,yBACP,IAAO,OACP,IAAO,eACP,IAAO,QACP,IAAO,QACP,IAAO,YACP,IAAO,gBACP,IAAO,qBACP,IAAO,mBACP,IAAO,oBACP,IAAO,QACP,IAAO,aACP,IAAO,eACP,IAAO,UACP,IAAO,eACP,IAAO,SACP,IAAO,aACP,IAAO,gBACP,IAAO,gBACP,IAAO,iBACP,IAAO,wBACP,IAAO,WACP,IAAO,kBACP,IAAO,OACP,IAAO,eACP,IAAO,kBACP,IAAO,kBACP,IAAO,qBACP,IAAO,oBACP,IAAO,qBACP,IAAO,eACP,IAAO,qBACP,IAAO,cACP,IAAO,uBACP,IAAO,OACP,IAAO,QACP,IAAO,oBACP,IAAO,sBACP,IAAO,mBACP,IAAO,iBACP,IAAO,wBACP,IAAO,gBACP,IAAO,oBACP,IAAO,YACP,IAAO,gBACP,IAAO,qBACP,IAAO,0BACP,IAAO,yBACP,IAAO,iBACP,IAAO,eACP,IAAO,OACP,IAAO,mBACP,IAAO,qBACP,IAAO,kBACP,IAAO,gBACP,IAAO,mBACP,IAAO,iBACP,IAAO,mBACP,IAAO,oBACP,IAAO,kBACP,IAAO,iBACP,IAAO,kBACP,IAAO,SACP,IAAO,eACP,IAAO,QACP,IAAO,SACP,IAAO,YACP,IAAO,uBACP,IAAO,iBACP,IAAO,SACP,IAAO,kBACP,IAAO,cACP,IAAO,QACP,IAAO,YACP,IAAO,aACP,IAAO,YACP,IAAO,sBACP,IAAO,QACP,IAAO,YACP,IAAO,WACP,IAAO,YACP,IAAO,YACP,IAAO,sBACP,IAAO,oBACP,IAAO,uBACP,IAAO,aACP,IAAO,QACP,IAAO,eACP,IAAO,iBACP,IAAO,mBACP,IAAO,mBACP,IAAO,aACP,IAAO,QACP,IAAO,YACP,IAAO,gBACP,IAAO,OACP,IAAO,KACP,IAAO,wBACP,IAAO,OACP,IAAO,WACP,IAAO,cACP,IAAO,gBACP,IAAO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ACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,KAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,G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Oz5d,UAAUwnb,KAAO,WACpB,GAAInob,KAAK46d,QACL,OAAO,KAEX,IAAIt4c,EAAOtiB,KAAKmnZ,OACZjnR,EAASlgI,KAAKkgI,SACd4gW,EAAW9ge,KAAK22C,QAAQuoJ,WAAWh/D,GAAU59G,GAAQ,MAAU,EAAI,IACvE,OAAOw+c,QAA2CA,EAAW,IACjE,EACO1G,CACX,CA/yB4B,GAszB5B,SAASY,GAASoB,GACd,OAASA,GAAa,IAAMA,GAAa,KACpCA,GAAa,IAAMA,GAAa,EACzC,CA8BA,SAASlC,GAAcx6Z,GACnB,OAASA,GAAK,GAAUA,GAAK,IACnB,KAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,CACR,CAKA,SAASy6Z,GAAiBz6Z,GACtB,OAASA,GAAK,IAAUA,GAAK,IACnB,KAANA,GACCA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACCA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,KAAUA,GAAK,KACf,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAU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","sources":["./alerts-issues/index/template.hbs","./alerts-issues/service-appointments/index/template.hbs","./alerts-issues/service-appointments/service-appointment/index/template.hbs","./alerts-issues/service-appointments/service-appointment/reasons/index/template.hbs","./alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/template.hbs","./alerts-issues/service-appointments/service-appointment/timeframe/select-date/template.hbs","./alerts-issues/service-appointments/service-appointment/timeframe/select-times/template.hbs","./alerts-issues/trouble-condition/template.hbs","./alerts-issues/water-leak-alert/template.hbs","./app-error/template.hbs","./components/app/app-nav/personal-safety-nav/notes/index.hbs","./components/app/app-nav/personal-safety-nav/notes/index.ts","./components/app/app-nav/personal-safety-nav/index.hbs","./components/app/app-nav/personal-safety-nav/index.ts","./components/contextual-info/property-notes/property-note-block/index.hbs","./components/contextual-info/property-notes/property-note-block/index.ts","./components/contextual-info/property-notes/index.hbs","./components/contextual-info/property-notes/index.ts","./components/contextual-info/person-on-site/index.hbs","./components/contextual-info/person-on-site/index.ts","./components/contextual-info/unexpected-events/index.hbs","./components/contextual-info/unexpected-events/index.ts","./components/contextual-info/additional-information/geo-devices/index.hbs","./components/contextual-info/additional-information/geo-devices/index.ts","./components/contextual-info/additional-information/index.hbs","./components/contextual-info/additional-information/index.ts","./components/contextual-info/index.hbs","./components/contextual-info/index.ts","./components/property-actions/custom-controls/warning-sound-group/index.hbs","./components/property-actions/custom-controls/warning-sound-group/index.ts","./components/modals/sfg-modal/index.hbs","./components/modals/sfg-modal/index.ts","./components/property-actions/action-switch/multi-action-switch.hbs","./components/property-actions/action-switch/multi-action-switch.ts","./components/property-actions/action-switch/switch.hbs","./components/property-actions/action-switch/switch.ts","./components/property-actions/action-switch/index.hbs","./components/property-actions/action-switch/index.ts","./components/property-actions/index.hbs","./components/property-actions/index.ts","./components/app/app-nav/alarm-response-nav/index.hbs","./components/app/app-nav/alarm-response-nav/index.ts","./components/app/group-link/index.hbs","./components/app/group-link/index.ts","./components/app/app-profile/index.hbs","./components/app/app-profile/index.ts","./components/app/app-nav/customer-nav/index.hbs","./components/app/app-nav/customer-nav/index.js","./components/app/app-nav/index.hbs","./components/app/app-nav/index.js","./components/app/system-and-group-name/index.hbs","./components/app/system-and-group-name/index.ts","./components/app/app-header/header-buttons/index.hbs","./components/app/app-header/header-buttons/index.ts","./components/app/app-header/header-tabs/index.hbs","./components/app/app-header/header-tabs/index.ts","./components/app/app-header/index.hbs","./components/app/app-header/index.ts","./components/route-announcer/index.hbs","./components/route-announcer/index.ts","./components/app/app-footer/index.hbs","./components/app/app-footer/index.ts","./application/template.hbs","./builder-trial-account-expiration-warning/template.hbs","./classes/users/edit/contact-information/template.hbs","./components/users/item/new-user-add-contact-information/contact-type/index.hbs","./components/users/item/new-user-add-contact-information/contact-type/index.ts","./helpers/is-pointcentral.ts","./components/users/item/new-user-add-contact-information/index.hbs","./components/users/item/new-user-add-contact-information/index.ts","./classes/users/edit/new-user-add-contact-information/template.hbs","./components/marketing/hero.hbs","./components/marketing/hero.ts","./customer-shop/item/template.hbs","./dashboards/thermostats/index/template.hbs","./dashboards/thermostats/thermostat/comfort/template.hbs","./dashboards/thermostats/thermostat/cycle/template.hbs","./dashboards/thermostats/thermostat/efficiency/template.hbs","./components/dashboard-cards/severity-status/index.hbs","./components/dashboard-cards/severity-status/index.ts","./dashboards/thermostats/thermostat/index/template.hbs","./dashboards/thermostats/thermostat/runtime/template.hbs","./components/dashboards/thermostats/mode-toggle.hbs","./components/dashboards/thermostats/mode-toggle.ts","./dashboards/thermostats/thermostat/template.hbs","./external-page/template.hbs","./info/template.hbs","./legacy-page/template.hbs","./mobile/help/contact/template.hbs","./mobile/help/index/template.hbs","./news-and-updates/template.hbs","./not-found/template.hbs","./notifications/manage-devices/edit/template.hbs","./notifications/manage-devices/index/template.hbs","./components/smart-coverage/error-message/index.hbs","./components/smart-coverage/error-message/index.ts","./components/smart-coverage/policy-selection/index.hbs","./components/smart-coverage/policy-selection/index.ts","./smart-coverage/index/template.hbs","./smart-coverage/select-properties/template.hbs","./wizard-launch/template.hbs","engines/add-device-engine/_app_/categories/devices/default-notifications/template.hbs","engines/add-device-engine/categories/devices/already-linked/template.hbs","engines/add-device-engine/categories/devices/link-complete/template.hbs","engines/add-device-engine/categories/devices/link-congratulations/template.hbs","engines/add-device-engine/categories/devices/link-in-progress/template.hbs","engines/add-device-engine/categories/devices/link-start/template.hbs","engines/add-device-engine/categories/devices/link-unsuccessful/template.hbs","engines/add-device-engine/categories/devices/mount/template.hbs","engines/add-device-engine/categories/devices/start-info/template.hbs","engines/add-device-engine/categories/devices/troubleshoot/template.hbs","engines/add-device-engine/choose-device/delete-device/template.hbs","engines/add-device-engine/choose-device/index/template.hbs","engines/add-device-engine/choose-device/troubleshoot-missing/template.hbs","engines/add-device-engine/components/button-sign-in-google/template.hbs","engines/login-setup-engine/account-information/template.hbs","engines/login-setup-engine/arming-reminder/template.hbs","engines/login-setup-engine/communication-preferences/template.hbs","engines/login-setup-engine/components/recognized-device-list-item/template.hbs","engines/login-setup-engine/email-verification/template.hbs","engines/login-setup-engine/login-name-confirmation/template.hbs","engines/login-setup-engine/outside-working-hours/template.hbs","engines/login-setup-engine/password/template.hbs","engines/login-setup-engine/property-information/template.hbs","engines/login-setup-engine/push-migration/template.hbs","engines/login-setup-engine/recognized-devices/device-link-request/template.hbs","engines/login-setup-engine/recognized-devices/index/template.hbs","engines/login-setup-engine/security-question/template.hbs","engines/login-setup-engine/system-information/template.hbs","engines/network-config-engine/wifi-setup/template.hbs","./access-control/badge-management/controller.js","./access-control/users/user-groups/base-user-group-edit-route.js","./adapters/application.js","./adapters/automation/presence-state/base-presence-state-adapter.ts","./adapters/automation/presence-state/current-presence-state.ts","./adapters/automation/presence-state/presence-state-display.ts","./adapters/automation/presence-state/presence-state-explainer-display.ts","./adapters/automation/presence-state/presence-state-settings-display.ts","./adapters/automation/recording-status.js","./adapters/automation/rules/rule.js","./adapters/customer-site-json-api-content-adapter.ts","./adapters/discover/base-discover-adapter.ts","./adapters/discover/get-discover-article-content-result.ts","./adapters/discover/get-discover-dashboard-result.ts","./adapters/normalize-error-response-helper.ts","./adapters/settings/account-management/account-information/account-information.js","./adapters/settings/account-management/account-information/marketing-communication/marketing-communication.js","./adapters/settings/account-management/country-address-resource.js","./adapters/settings/everbridge-integration/base-mass-notifications-adapter.ts","./adapters/settings/everbridge-integration/everbridge-configuration.ts","./adapters/settings/everbridge-integration/everbridge-template.ts","./adapters/settings/manage-devices/device-catalog.ts","./adapters/settings/manage-devices/managed-device.ts","./adapters/upsell/get-upsell-shopping-cart-result.ts","./adapters/video/dewarp-config.js","./adapters/video/download-format.js","./adapters/video/familiar-targets/familiar-target-enrollment-image.js","./adapters/video/intercom/base-intercom-adapter.ts","./adapters/video/intercom/intercom-apartment.ts","./adapters/video/intercom/intercom-contact.ts","./adapters/video/intercom/intercom-directory-list.ts","./adapters/video/intercom/intercom-directory.ts","./adapters/video/intercom/intercom-paired-unit.ts","./adapters/video/intercom/intercom-qr-code.ts","./adapters/video/ov-rule.js","./adapters/video/snapshot.js","./adapters/video/svr-usage-info.js","./adapters/video/video-sources/live-video-highest-res-source.ts","./adapters/video/video-sources/live-video-source.ts","./adapters/video/video-sources/svr-video-source.js","./adapters/visual-verification-base-adapter.ts","./adapters/visual-verification/alarm.ts","./adapters/visual-verification/event.ts","./adapters/visual-verification/page-feature.ts","./adapters/visual-verification/person-on-site/indicator.ts","./adapters/visual-verification/property-note.ts","./adapters/visual-verification/session-device-link.ts","./adapters/visual-verification/session.ts","./adapters/visual-verification/unexpected-events/prediction.ts","./adapters/visual-verification/visual-verification-event-id-list.ts","./adapters/visual-verification/visual-verification-event-id.ts","./components/modals/trouble-conditions/camera-not-responding/index.hbs","./components/modals/trouble-conditions/camera-not-responding/index.ts","./components/modals/trouble-conditions/image-sensor-low-battery/index.hbs","./components/modals/trouble-conditions/image-sensor-low-battery/index.ts","./alerts-issues/base-tc-controller.ts","./alerts-issues/index/controller.ts","./alerts-issues/index/route.ts","./alerts-issues/service-appointments/index/controller.ts","./alerts-issues/service-appointments/index/route.ts","./alerts-issues/service-appointments/service-appointment/index/controller.ts","./alerts-issues/service-appointments/service-appointment/index/route.ts","./alerts-issues/service-appointments/service-appointment/reasons/index/controller.ts","./alerts-issues/service-appointments/service-appointment/reasons/index/route.ts","./alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/controller.ts","./alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/route.ts","./alerts-issues/service-appointments/service-appointment/route.ts","./alerts-issues/service-appointments/service-appointment/timeframe/index/route.ts","./alerts-issues/service-appointments/service-appointment/timeframe/route.ts","./alerts-issues/service-appointments/service-appointment/timeframe/select-date/controller.ts","./alerts-issues/service-appointments/service-appointment/timeframe/select-date/route.ts","./alerts-issues/service-appointments/service-appointment/timeframe/select-times/controller.ts","./alerts-issues/service-appointments/service-appointment/timeframe/select-times/route.ts","./alerts-issues/trouble-condition/controller.ts","./alerts-issues/trouble-condition/route.ts","./alerts-issues/water-leak-alert/controller.ts","./alerts-issues/water-leak-alert/route.ts","./app-error/controller.ts","./app-error/route.ts","./app.ts","./application/controller.js","./application/route.js","./assets/customer-site.js","./assets/dealer-branding.ts","./automation/base-automation-controller.ts","./automation/base-automation-route.ts","./automation/rules/builder/base-feature-controller.ts","./automation/rules/builder/base-feature-details-controller.ts","./automation/rules/builder/base-feature-details-index-route.ts","./automation/rules/builder/base-feature-details-route.js","./automation/rules/builder/filter-controller.ts","./breakpoints.js","./builder-trial-account-expiration-warning/route.ts","./classes/access-control/access-plans/base-access-plan-edit-route.ts","./classes/access-control/access-plans/base-index-route.ts","./classes/access-control/access-plans/filter-results-controller.ts","./classes/access-control/access-plans/filtering-controller.ts","./classes/access-control/access-plans/filtering-route.ts","./classes/access-control/access-plans/helpers/filter-manager.ts","./classes/access-control/access-points/base-index-route.ts","./classes/access-control/access-points/filtering-controller.ts","./classes/access-control/access-points/filtering-route.ts","./classes/access-control/access-points/helpers/filter-manager.ts","./classes/access-control/scrolling-list-select/scrolling-list-select-item.ts","./classes/access-control/users/base-index-controller.ts","./classes/access-control/users/base-index-route.ts","./classes/access-control/users/filtering-controller.ts","./classes/access-control/users/filtering-route.ts","./classes/access-control/users/helpers/filter-manager.ts","./classes/access-control/users/promote-user/base-promote-user-route.ts","./classes/activity/event-history/activity-list-controller.ts","./classes/activity/event-history/activity-list-route.ts","./classes/activity/event-history/base-image-event-controller.ts","./classes/activity/event-history/base-image-event-route.ts","./components/modals/activity/event-history/delete-media/index.hbs","./components/modals/activity/event-history/delete-media/index.ts","./classes/activity/event-history/base-media-event-controller.ts","./classes/activity/event-history/base-media-event-route.ts","./classes/activity/event-history/base-video-event-route.ts","./classes/activity/event-history/extended-controller.js","./classes/activity/event-history/extended-route.js","./classes/activity/event-history/filter-results-controller.ts","./classes/activity/event-history/filter-results-route.ts","./classes/activity/event-history/filtering-controller.ts","./classes/activity/event-history/filtering-route.ts","./classes/activity/event-history/helpers/activity-group.ts","./classes/activity/event-history/helpers/activity-item.ts","./classes/activity/event-history/helpers/activity-location.ts","./classes/activity/event-history/helpers/base-collection.ts","./classes/activity/event-history/helpers/filter-manager.ts","./classes/base-category-route.js","./classes/base-route.js","./classes/base-settings-route.js","./classes/commercial/reports/edit/base-report-edit-controller.ts","./classes/commercial/reports/edit/base-report-edit-route.ts","./classes/commercial/reports/edit/extra-data-route.ts","./classes/credentials/base-user-credential-manager.ts","./classes/date-range.ts","./classes/enterprise/groups/user-access-helper.ts","./classes/enterprise/logins/add-enterprise-logins-options/route.ts","./classes/enterprise/logins/base-login/controller.ts","./classes/enterprise/logins/edit/edit-scheduled-device-login/controller.ts","./components/enterprise/groups/location-role-row.ts","./components/enterprise/groups/group-role-row.js","./classes/enterprise/logins/edit/multi-group-login/controller.ts","./classes/enterprise/logins/edit/multi-group-login/route.ts","./classes/enterprise/logins/index/controller.ts","./classes/enterprise/logins/index/route.ts","./classes/enterprise/users/filter-manager.ts","./classes/fleet/filter-manager.ts","./classes/fleet/filtering-controller.ts","./classes/helpers/filter-manager.ts","./classes/helpers/filters/base-filter.ts","./classes/helpers/filters/checklist-filter.ts","./classes/helpers/filters/date-filter.ts","./classes/helpers/filters/date-range-filter.ts","./classes/helpers/filters/date-time-filter.ts","./classes/helpers/filters/dropdown-filter.ts","./classes/helpers/filters/search-filter.ts","./classes/helpers/pointcentral.ts","./classes/helpers/settings-helper.js","./classes/logins/edit/controller.ts","./classes/logins/index/controller.ts","./classes/settings/base-managed-account-access-route.ts","./classes/users/base-merge-users-preview-route.ts","./classes/users/edit/add-contact/route.ts","./classes/users/edit/base-user-edit-controller.ts","./classes/users/edit/base-user-edit-route.ts","./classes/users/edit/contact-information/controller.ts","./classes/users/edit/contact-information/route.ts","./classes/users/edit/device-access/base-device-access-route.ts","./components/modals/access-control/five-button-duplicate/index.hbs","./components/modals/access-control/five-button-duplicate/index.ts","./classes/users/edit/index/controller.js","./classes/users/edit/language/route.ts","./classes/users/edit/link-login/controller.ts","./classes/users/edit/link-login/route.ts","./classes/users/edit/new-user-add-contact-information/controller.ts","./classes/users/edit/new-user-add-contact-information/route.ts","./classes/users/edit/user-attributes/edit/route.js","./classes/users/edit/user-attributes/index/route.js","./classes/users/edit/user-information/controller.ts","./classes/users/edit/user-information/route.ts","./classes/users/index/base-controller.ts","./classes/users/merge-preview-manager.ts","./classes/video/advanced-video-search/helpers.js","./classes/video/advanced-video-search/motion-mask-coord.ts","./classes/video/advanced-video-search/motion-mask.ts","./classes/video/advanced-video-search/motion-search-filter-manager.ts","./classes/video/advanced-video-search/object-search-config.ts","./classes/video/advanced-video-search/object-search-params.ts","./classes/video/advanced-video-search/object-search-result.ts","./classes/video/advanced-video-search/shapes.ts","./components/ui/filter-button/index.hbs","./components/ui/filter-button/index.ts","./components/video/clips/main-toolbar/index.hbs","./components/video/clips/main-toolbar/index.ts","./classes/video/clips/filter-results-controller.js","./classes/video/clips/filter-results-route.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subYears/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addYears/index.js","./classes/video/clips/filtering-controller.ts","./classes/video/clips/filtering-route.js","./classes/video/clips/helpers/base-clips-tour.js","./components/video/clips/donate-clip/index.hbs","./components/video/clips/donate-clip/index.ts","./components/modals/video/donate-clip/index.hbs","./components/modals/video/donate-clip/index.js","./classes/video/clips/helpers/clip-management.ts","./classes/video/clips/helpers/clips-tour.js","./classes/video/clips/helpers/filter-manager.ts","./classes/video/clips/helpers/other-detection-tour.js","./classes/video/clips/helpers/video-resolution-helper.ts","./classes/video/gallery/filter-video-media-results-controller.ts","./classes/video/gallery/filter-video-media-results-route.ts","./classes/video/gallery/filtering-video-media-controller.ts","./classes/video/gallery/filtering-video-media-route.ts","./classes/video/rules/classification-filter.ts","./classes/visual-verification/visual-verification-item.ts","./commercial/reports/catalog/base-catalog-route.ts","./commercial/reports/index/base-reports-controller.ts","./commercial/reports/index/base-reports-route.ts","./commercial/temperatures/base-temperature-controller.ts","./components/access-control/access-plans/item/access-plan-details-compact/index.hbs","./components/access-control/access-plans/item/access-plan-details-compact/index.ts","./components/access-control/access-plans/item/access-plan-details/index.hbs","./components/access-control/access-plans/item/access-plan-details/index.ts","./components/access-control/access-plans/item/base-access-plan-details/index.ts","./components/access-control/access-plans/item/card/header/details/index.hbs","./components/access-control/access-plans/item/card/header/details/index.ts","./components/settings/restricted-access-settings/popover/index.hbs","./components/settings/restricted-access-settings/popover/index.ts","./components/access-control/access-plans/item/card/header/secondary/index.hbs","./components/access-control/access-plans/item/card/header/secondary/index.ts","./components/access-control/access-plans/item/card/header/index.hbs","./components/access-control/access-plans/item/card/header/index.ts","./components/access-control/access-plans/row/access-plan-scrolling-row/index.hbs","./components/access-control/access-plans/row/access-plan-scrolling-row/index.ts","./components/access-control/access-plans/list/access-plan-scrolling-list/index.hbs","./components/access-control/access-plans/list/access-plan-scrolling-list/index.ts","./components/access-control/access-plans/row/access-plan/index.hbs","./components/access-control/access-plans/row/access-plan/index.ts","./components/access-control/access-plans/row/base-access-plan/index.ts","./components/modals/access-control/emergency-lockdown/index.hbs","./components/modals/access-control/emergency-lockdown/index.js","./components/access-control/lockdown/emergency-lockdown-btn/index.hbs","./components/access-control/lockdown/emergency-lockdown-btn/index.js","./components/app/app-nav-link/index.hbs","./components/app/app-nav-link/index.ts","./components/app/app-system-select/index.hbs","./components/app/app-system-select/index.ts","./components/app/language-select/index.hbs","./components/app/language-select/index.ts","./components/app/legacy-page-iframe/index.hbs","./components/app/legacy-page-iframe/index.js","./components/app/loading-indicator/index.hbs","./components/app/loading-indicator/index.ts","./components/app/trouble-conditions/list/contact-support/index.hbs","./components/app/trouble-conditions/list/contact-support/index.ts","./components/app/trouble-conditions/list/item/index.hbs","./components/app/trouble-conditions/list/item/index.ts","./components/app/trouble-conditions/list/index.hbs","./components/app/trouble-conditions/list/index.ts","./components/app/trouble-conditions/list/item/tools/index.hbs","./components/app/trouble-conditions/list/item/tools/index.ts","./components/app/trouble-conditions/system-ok/index.hbs","./components/app/trouble-conditions/system-ok/index.ts","./components/automation/rules/rule-collection/pause-bar/index.hbs","./components/automation/rules/rule-collection/pause-bar/index.ts","./components/commercial/arming-schedules/schedule-card/index.hbs","./components/commercial/arming-schedules/schedule-card/index.ts","./components/dashboard-cards/active-card-tab-index.ts","./components/dashboard-cards/card-toolbar/button-popup/index.hbs","./components/dashboard-cards/card-toolbar/button-popup/index.ts","./components/dashboard-cards/card-toolbar/buttons/index.hbs","./components/dashboard-cards/card-toolbar/buttons/index.ts","./components/dashboard-cards/card-toolbar/index.hbs","./components/dashboard-cards/card-toolbar/index.ts","./components/dashboard-cards/container-card/index.hbs","./components/dashboard-cards/container-card/index.ts","./components/dashboard-cards/devices/access-control-access-point-devices-card/index.hbs","./components/dashboard-cards/devices/access-control-access-point-devices-card/index.ts","./components/dashboard-cards/devices/access-point-card/index.ts","./components/dashboard-cards/devices/base-card.ts","./components/dashboard-cards/devices/base-device-view.ts","./components/dashboard-cards/devices/device-icons/index.hbs","./components/dashboard-cards/devices/device-icons/index.ts","./components/dashboard-cards/devices/device-list/index.hbs","./components/dashboard-cards/devices/device-list/index.ts","./components/dashboard-cards/devices/device-list/row/index.hbs","./components/dashboard-cards/devices/device-list/row/index.ts","./components/dashboard-cards/devices/edit-state/index.hbs","./components/dashboard-cards/devices/edit-state/index.ts","./components/dashboard-cards/devices/garage-card/index.hbs","./components/dashboard-cards/devices/garage-card/index.ts","./components/dashboard-cards/devices/hidden-edit-state/index.hbs","./components/dashboard-cards/devices/hidden-edit-state/index.ts","./components/dashboard-cards/devices/lock-card/index.hbs","./components/dashboard-cards/devices/lock-card/index.ts","./components/dashboard-cards/devices/partition-card/bypass-modal/index.hbs","./components/dashboard-cards/devices/partition-card/bypass-modal/index.ts","./components/dashboard-cards/devices/partition-card/issues-overlay/index.hbs","./components/dashboard-cards/devices/partition-card/issues-overlay/index.ts","./components/dashboard-cards/devices/partition-hidden-edit-state/index.hbs","./components/dashboard-cards/devices/partition-hidden-edit-state/index.ts","./components/dashboard-cards/devices/partition-card/index.hbs","./components/dashboard-cards/devices/partition-card/index.ts","./components/dashboard-cards/devices/prompt-card/index.hbs","./components/dashboard-cards/devices/prompt-card/index.ts","./components/dashboard-cards/labelledby-span/index.hbs","./components/dashboard-cards/labelledby-span/index.ts","./components/dashboards/thermostats/comfort-slider/index.hbs","./components/dashboards/thermostats/comfort-slider/index.ts","./components/dashboards/thermostats/comfort-view/index.hbs","./components/dashboards/thermostats/comfort-view/index.ts","./components/dashboards/thermostats/highlight-statistic/cycling-highlight-statistic/index.hbs","./components/dashboards/thermostats/highlight-statistic/cycling-highlight-statistic/index.ts","./components/dashboards/thermostats/cycle-view/index.hbs","./components/dashboards/thermostats/cycle-view/index.ts","./components/dashboards/thermostats/detail-view/index.hbs","./components/dashboards/thermostats/detail-view/index.ts","./components/dashboards/thermostats/detail-view-container.hbs","./components/dashboards/thermostats/detail-view-container.ts","./components/dashboards/thermostats/efficiency-view/index.hbs","./components/dashboards/thermostats/efficiency-view/index.ts","./components/dashboards/thermostats/highlight-statistic/hour-minute-highlight-statistic/index.hbs","./components/dashboards/thermostats/highlight-statistic/hour-minute-highlight-statistic/index.ts","./components/dashboards/thermostats/highlight-statistic/index.hbs","./components/dashboards/thermostats/highlight-statistic/index.ts","./components/dashboards/thermostats/runtime-view/index.hbs","./components/dashboards/thermostats/runtime-view/index.ts","./components/modals/enterprise/groups/rename-system-group/index.hbs","./components/modals/enterprise/groups/rename-system-group/index.js","./components/enterprise/groups/base-item-row.js","./components/filters/date-time-range-filter/index.hbs","./components/filters/date-time-range-filter/index.ts","./components/filters/date-time-filter/index.hbs","./components/filters/date-time-filter/index.ts","./components/filters/filter-panel/index.hbs","./components/filters/filter-panel/index.ts","./components/modals/help-tour/index.hbs","./components/modals/help-tour/index.ts","./components/help-tour/index.hbs","./components/help-tour/index.ts","./components/help-tour/step-content.ts","./components/help-tour/step.ts","./components/help-tour/tour.ts","./modifiers/draw-chart.ts","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/getTimezoneOffset/index.js","./components/highcharts/simple-chart/index.hbs","./components/highcharts/simple-chart/index.ts","./components/icons/circles/circle-fill/index.hbs","./components/icons/circles/circle-fill/index.ts","./components/icons/circles/device-status/index.hbs","./components/icons/circles/device-status/index.ts","./components/modals/automation/rules/new-rules.ts","./components/modals/automation/rules/new-video-schedule/index.hbs","./components/modals/automation/rules/new-video-schedule/index.ts","./components/modals/enterprise/groups/base-manage-groups-modal-wrapper/index.hbs","./components/modals/enterprise/groups/base-manage-groups-modal-wrapper/index.ts","./components/modals/video/calibration-snapshot-info/index.hbs","./components/modals/video/calibration-snapshot-info/index.ts","./components/modals/video/download-options/index.hbs","./components/modals/video/download-options/index.ts","./components/news-updates/index.hbs","./components/news-updates/index.js","./components/service-appointments/header/index.hbs","./components/service-appointments/header/index.ts","./components/service-appointments/appt-card/index.hbs","./components/service-appointments/appt-card/index.ts","./components/service-appointments/request-list/index.hbs","./components/service-appointments/request-list/index.ts","./components/settings/monitoring-station/property-notes-simple-list/index.hbs","./components/settings/monitoring-station/property-notes-simple-list/index.ts","./components/smart-coverage/discount-card/index.hbs","./components/smart-coverage/discount-card/index.ts","./components/smart-coverage/redirect-notification-button/index.hbs","./components/smart-coverage/redirect-notification-button/index.ts","./components/timezones/timezone-selector/index.hbs","./components/timezones/timezone-selector/index.js","./components/ui/actionable-card/index.hbs","./components/ui/actionable-card/index.ts","./components/ui/badge-label/index.hbs","./components/ui/badge-label/index.ts","./components/ui/blue-dot/index.hbs","./components/ui/blue-dot/index.ts","./components/ui/circle-gauge/index.hbs","./components/ui/circle-gauge/index.js","./components/ui/colored-icon/index.hbs","./components/ui/colored-icon/index.ts","./components/ui/horizontal-list/index.hbs","./components/ui/horizontal-list/index.ts","./components/ui/icon-tooltip/index.hbs","./components/ui/icon-tooltip/index.ts","./components/ui/images/state-image/index.hbs","./components/ui/images/state-image/index.js","./components/ui/images/stateless-image/index.hbs","./components/ui/images/stateless-image/index.js","./components/ui/progress-bar/index.hbs","./components/ui/progress-bar/index.ts","./components/users/item/edit-contact-information/index.hbs","./components/users/item/edit-contact-information/index.js","./components/users/item/user-avatar/index.hbs","./components/users/item/user-avatar/index.ts","./components/users/list/base-user-item/index.hbs","./components/users/list/base-user-item/index.js","./components/users/loading-spinner/index.hbs","./components/users/loading-spinner/index.ts","./components/video/clips/action-menu/index.hbs","./components/video/clips/action-menu/index.ts","./components/video/clips/action-toolbar/index.hbs","./components/video/clips/action-toolbar/index.ts","./components/video/clips/analytics-icon/index.hbs","./components/video/clips/analytics-icon/index.ts","./components/video/clips/multi-player/index.hbs","./components/video/clips/multi-player/index.ts","./components/video/clips/saved-clip/info/index.hbs","./components/video/clips/saved-clip/info/index.ts","./components/video/clips/saved-clip/index.hbs","./components/video/clips/saved-clip/index.ts","./components/video/clips/video-modal/index.hbs","./components/video/clips/video-modal/index.ts","./components/video/rules/draw-window/players/snapshot/index.hbs","./components/video/rules/draw-window/players/snapshot/index.js","./components/video/rules/draw-window/index.hbs","./components/video/rules/draw-window/index.js","./components/video/rules/draw-window/players/analytics-live-view-player/index.hbs","./components/video/rules/draw-window/players/analytics-live-view-player/index.js","./components/video/rules/draw-window/players/player-info/index.hbs","./components/video/rules/draw-window/players/player-info/index.ts","./components/video/utils/players-control.js","./components/video/video-player/base-live-player/index.js","./components/video/video-player/base-video-player.ts","./components/video/video-player/overlay/base-overlay.ts","./components/video/video-player/overlay/index.hbs","./components/video/video-player/overlay/index.ts","./components/modals/video/webrtc-streaming-details/index.hbs","./components/modals/video/webrtc-streaming-details/index.ts","./components/video/video-player/overlay/player-buttons/arrow-button/index.hbs","./components/video/video-player/overlay/player-buttons/arrow-button/index.ts","./components/video/video-player/overlay/player-buttons/index.hbs","./components/video/video-player/overlay/player-buttons/index.ts","./components/video/video-streaming/video-streaming-features/camera-items.ts","./components/video/video-streaming/video-streaming-features/layout-control.ts","./components/video/video-streaming/video-streaming-features/index.ts","./config/environment.js","./customer-shop/item/controller.ts","./customer-shop/item/route.ts","./dashboards/thermostats/index/route.ts","./dashboards/thermostats/thermostat/base-hvac-dashboard-detail-controller.ts","./dashboards/thermostats/thermostat/comfort/controller.ts","./dashboards/thermostats/thermostat/comfort/route.ts","./dashboards/thermostats/thermostat/cycle/controller.ts","./dashboards/thermostats/thermostat/cycle/route.ts","./dashboards/thermostats/thermostat/efficiency/controller.ts","./dashboards/thermostats/thermostat/efficiency/route.ts","./dashboards/thermostats/thermostat/route.ts","./dashboards/thermostats/thermostat/runtime/controller.ts","./dashboards/thermostats/thermostat/runtime/route.ts","./default-notification-redirect/route.js","./enterprise/groups/base-new-group-route.js","./enterprise/locations/base-locations-subroute-controller.ts","./enterprise/locations/base-locations-subroute-route.ts","./enterprise/locations/helper-objects/location-access-point-info.js","./enterprise/locations/helper-objects/location-device-access-info.js","./enterprise/locations/helper-objects/location-fleet-info.ts","./enterprise/locations/helper-objects/location-info.ts","./enterprise/locations/helper-objects/location-occupancy-info.js","./enterprise/locations/helper-objects/location-personal-safety-info.js","./enterprise/locations/helper-objects/location-summary-info.js","./enterprise/locations/helper-objects/location-temperatures-info.js","./enterprise/locations/helper-objects/location-thermostats-info.ts","./enterprise/locations/helper-objects/location-video-info.js","./enterprise/locations/helper-objects/pointcentral-thermostat-row.js","./enterprise/locations/helper-objects/thermostat-row.js","./enterprise/locations/helpers/filters.ts","./enterprise/locations/helpers/thermostats.js","./enterprise/settings/active-directory-setup/index/controller.ts","./enterprise/settings/helpers/file-upload-functions.ts","./enterprise/settings/helpers/filter-functions.js","./enterprise/users/quick-filters-tour/tour.js","./enums/AIDeterrenceLanguageType.ts","./enums/AIDeterrenceMessageType.ts","./enums/AIDeterrenceVoiceType.ts","./enums/AIPerimeterGuardType.ts","./enums/AOIActions.ts","./enums/AcPowerCheckResult.ts","./enums/AccessCheckResult.ts","./enums/AccessControlSystemMode.ts","./enums/AccessPlanAccessStatus.ts","./enums/AccessPlanPropertyEdit.ts","./enums/AccessPlanType.ts","./enums/AccessPointCollectionType.ts","./enums/AccessPointUserCodeStatus.ts","./enums/AccessPointUserType.ts","./enums/AccessPointWifiFrequency.ts","./enums/AccessPointWifiGroup.ts","./enums/AccessStatus.ts","./enums/AccountType.ts","./enums/ActionSetType.ts","./enums/ActionType.ts","./enums/ActivityFilterOptionsCategoryEnum.ts","./enums/AddDeviceCategory.ts","./enums/AddDeviceResource.ts","./enums/AelWiFiSecurityProtocol.ts","./enums/AlarmsIssuesReportOptions.ts","./enums/ApexCpuArchitectureEnum.ts","./enums/ArmingOption.ts","./enums/ArmingState.ts","./enums/AttributeSearch.ts","./enums/AvailableSystemItemsFilteringEnum.ts","./enums/BatteryLevels.ts","./enums/Browser.ts","./enums/BuildVersionInfo.ts","./enums/CDQLEventCategoryEnums.ts","./enums/CDQLSessionDeviceLinkEnums.ts","./enums/CalibrationStatus.ts","./enums/CameraConnectionProtocol.ts","./enums/CameraGroupType.ts","./enums/CameraSirenStatus.ts","./enums/CardReaderState.ts","./enums/CardType.ts","./enums/ChimeLevel.ts","./enums/ClassificationCategoryType.ts","./enums/Classifications.ts","./enums/ClipDescriptorType.ts","./enums/ClipExportType.ts","./enums/ClipQualityResource.ts","./enums/ClipResolutionResource.ts","./enums/ColorSource.ts","./enums/CommandState.ts","./enums/ConnectedClientType.ts","./enums/ConnectionState.ts","./enums/ConnectionStatus.ts","./enums/ContactAddressRole.ts","./enums/ContactAttribute.ts","./enums/ContactUserType.ts","./enums/ContentBlockSubType.ts","./enums/ContentBlockType.ts","./enums/ContentType.ts","./enums/ControlPointRelayStatus.ts","./enums/ControlPointType.ts","./enums/Country.ts","./enums/CreditCardType.ts","./enums/Culture.ts","./enums/CustomerEventHistoryDeviceFilter.ts","./enums/CustomerEventHistoryEventFilter.ts","./enums/CustomerKnowledgeBase.ts","./enums/CustomerNotificationType.ts","./enums/CustomerPageUrl.ts","./enums/CustomerRole.ts","./enums/DefaultView.ts","./enums/DestinationPage.ts","./enums/DeviceConnectionStatusEnum.ts","./enums/DeviceProperty.ts","./enums/DeviceRole.ts","./enums/DeviceType.ts","./enums/DigitalPtzErrorEnum.ts","./enums/DirectoryViewTypeEnum.ts","./enums/DiscoverActionType.ts","./enums/DisplayModeFeature.ts","./enums/DoorbellChimeType.ts","./enums/DoorbellWedge.ts","./enums/DrawShape.ts","./enums/ElevatorFloorState.ts","./enums/EmailSendingFormat.ts","./enums/ErbStatus.ts","./enums/EventTriggerType.ts","./enums/EventType.ts","./enums/EventTypeMap.ts","./enums/ExtendedActivityHistoryRequestStatus.ts","./enums/FamiliarObjectType.ts","./enums/FamiliarSubjectSettingsLinkType.ts","./enums/FamiliarTargetReviewType.ts","./enums/FamiliarTargetStatus.ts","./enums/FeatureCategory.ts","./enums/FeaturePermissionCategory.ts","./enums/FieldOfView.ts","./enums/Filter.ts","./enums/FloodPirDurationOption.ts","./enums/FloodPirRange.ts","./enums/ForcedStreamingMethod.ts","./enums/FrequencyBand.ts","./enums/GarageDoorStatus.ts","./enums/GateStatus.ts","./enums/GenericDevicePairingType.ts","./enums/GenericInputType.ts","./enums/HelpTourType.ts","./enums/IRSwitchSensitivity.ts","./enums/Icon.ts","./enums/IconMap.ts","./enums/ImageQuality.ts","./enums/ImageSensorDisplayRuleType.ts","./enums/InitialSetupStep.ts","./enums/KeepAliveStatus.ts","./enums/LightAlertOption.ts","./enums/LightColorFormat.ts","./enums/LightGroupType.ts","./enums/LightStatus.ts","./enums/LocationDataType.ts","./enums/LockStatus.ts","./enums/LoginFeature.ts","./enums/LoginFeatureAccessLevel.ts","./enums/LoginFlag.ts","./enums/LoginRole.ts","./enums/LoginTemplateType.ts","./enums/LuxTrigger.ts","./enums/ManageDevicesCategory.ts","./enums/ManageDevicesPropertyFilter.ts","./enums/Managed247AccessRole.ts","./enums/ManagedDeviceType.ts","./enums/ManuallyTriggeredLightsDuration.ts","./enums/MercuryControllerOperatingMode.ts","./enums/MessageType.ts","./enums/MobileCredentialInvitationStatus.ts","./enums/MobileDeviceType.ts","./enums/ModifiableOccupancyState.ts","./enums/ModuleInstallStatus.ts","./enums/MotionDetectionType.ts","./enums/MotionDetectionVersionEnum.ts","./enums/MotionThreshold.ts","./enums/MpersDeviceStatus.ts","./enums/NativeBridgeFeature.ts","./enums/NewUserType.ts","./enums/OnvifCameraAudioCapabilitiesEnum.ts","./enums/OnvifCameraStreamMap.ts","./enums/OnvifCredentialsType.ts","./enums/OnvifSettingError.ts","./enums/Operator.ts","./enums/OvlRuleType.ts","./enums/PanelType.ts","./enums/PerimeterGuardAudioOption.ts","./enums/PhoneType.ts","./enums/PointCentralUserType.ts","./enums/PowerCheckSourceType.ts","./enums/PowerCheckState.ts","./enums/PresenceState.ts","./enums/ProgrammingCodeState.ts","./enums/ProjectedVideoQuotaStatus.ts","./enums/PropertyType.ts","./enums/QolsysHostCategory.ts","./enums/ReadyStatus.ts","./enums/RecognizedDeviceType.ts","./enums/RecordingException.ts","./enums/RecordingIntervalType.ts","./enums/RecordingRulePauseReasonType.ts","./enums/RelativeDirection.ts","./enums/RemoteTemperatureSensorStatus.ts","./enums/RentalPropertyLengthType.ts","./enums/ReportAttachmentSelection.ts","./enums/ReportTimeframeType.ts","./enums/ReportValidationIssue.ts","./enums/Resolution.ts","./enums/ResolutionQualityItemType.ts","./enums/RestrictionType.ts","./enums/RuleArmingStatusEnum.ts","./enums/RuleCatalogItemType.ts","./enums/RuleDisplayType.ts","./enums/RuleFilter.ts","./enums/SFGDeviceStatus.ts","./enums/SavedClipFilterOption.ts","./enums/SceneButtonKeyAttributeEnumType.ts","./enums/SceneStatus.ts","./enums/ScheduleType.ts","./enums/SdCardRecordingStatus.ts","./enums/SdRecordingQuality.ts","./enums/SelectionType.ts","./enums/SensorNamingFormat.ts","./enums/SensorReadingType.ts","./enums/SensorStatus.ts","./enums/ServiceRequestIssueCategory.ts","./enums/ServiceRequestIssueCategoryMap.ts","./enums/SeverityStatus.ts","./enums/ShadeStatus.ts","./enums/SignalStrength.ts","./enums/SmartCoverageDiscountType.ts","./enums/SmartCoveragePolicyType.ts","./enums/SmartSchedulesState.ts","./enums/SmartSchedulesTimeline.ts","./enums/SmrfImageCountThresholds.ts","./enums/SmrfMatchingResult.ts","./enums/SourceOfCustomer.ts","./enums/SourceOfCustomerMap.ts","./enums/StreamUsage.ts","./enums/SumpPumpStatus.ts","./enums/TemperatureDeviceType.ts","./enums/TemperatureUnit.ts","./enums/TenantTurnoverStatus.ts","./enums/ThermostatDiagnosticType.ts","./enums/ThermostatFanMode.ts","./enums/ThermostatLock.ts","./enums/ThermostatProgrammingMode.ts","./enums/ThermostatSetpointType.ts","./enums/ThermostatStatus.ts","./enums/ThermostatStatusMap.ts","./enums/ThirdPartyEventType.ts","./enums/TrackedEvent.ts","./enums/TriggerType.ts","./enums/TripwireDirection.ts","./enums/TroubleConditionDetailsReportCategories.ts","./enums/TroubleConditionDetailsReportDataColumns.ts","./enums/TroubleConditionDetailsReportFrequency.ts","./enums/TroubleConditionMutedOption.ts","./enums/TroubleConditionReportOptions.ts","./enums/TroubleConditionSeverity.ts","./enums/TroubleConditionSubType.ts","./enums/TroubleConditionType.ts","./enums/TroubleConditionTypeEnum.ts","./enums/TwoFactorAuthenticationType.ts","./enums/UpsellCampaignHardware.ts","./enums/UserAccess.ts","./enums/UserExperienceEventSubType.ts","./enums/UserExperienceEventType.ts","./enums/UserSummaryReportOptions.ts","./enums/UserTypeAccessLevel.ts","./enums/UsersFilterAccessPeriod.ts","./enums/UsersFilterContactInformation.ts","./enums/UsersFilterCredential.ts","./enums/UsersFilterUserStatus.ts","./enums/VideoClipFormat.ts","./enums/VideoDownloadProgress.ts","./enums/VideoHealthReportExtraData.ts","./enums/VideoNotificationFormat.ts","./enums/VideoPlayerStateEnum.ts","./enums/VideoQualityEnum.ts","./enums/VideoRuleToggledBy.ts","./enums/VideoSettingsFeatureSupport.ts","./enums/VideoSourceError.ts","./enums/VoiceAccessLevel.ts","./enums/VolumeUnits.ts","./enums/W115CChimeSounds.ts","./enums/WaterMeterStatus.ts","./enums/WaterMeterTemplateType.ts","./enums/WaterValveStatus.ts","./enums/WebDeviceType.ts","./enums/WebReportType.ts","./enums/WebStreamType.ts","./enums/WebStreamingPlayer.ts","./enums/WebrtcPreloadingSupport.ts","./enums/WebrtcStreamConnectionResult.ts","./enums/WiFiEncryptionAlgorithm.ts","./enums/WiFiEncryptionType.ts","./enums/WifiClientGroup.ts","./enums/WizardUrl.ts","./enums/legacyScheduleConversionType.ts","./external-page/controller.js","./external-page/route.js","./formats.js","./generic-wizard-deep-link-landing/controller.ts","./generic-wizard-deep-link-landing/route.ts","./helpers/get-static-resource-path.ts","./helpers/is-enterprise.ts","./helpers/is-mobile-app.ts","./helpers/knowledge-base-link.ts","./helpers/navigate-to-route-id.ts","./helpers/navigate-to-route-name.ts","./home/base-device-details-controller.ts","./home/base-home-to-automation-route.ts","./home/base-reports-route.ts","./home/edit-device-route.ts","./index/route.ts","./info/route.js","./initializers/setup-pikaday.js","./initializers/setup-route-view.js","./instance-initializers/env-settings.js","./legacy-page/controller.ts","./components/modals/app/legacy-page/index.hbs","./components/modals/app/legacy-page/index.ts","./legacy-page/route.js","./mobile/help/contact/route.js","./mobile/help/index/controller.js","./mobile/help/index/route.js","./mobile/help/route.js","./models/access-control/access-control-access-group.ts","./models/access-control/access-control-access-plan.ts","./models/access-control/access-control-access-point.ts","./models/access-control/access-control-common-plan-user-type.ts","./models/access-control/access-control-elevator.ts","./models/access-control/access-control-holiday.ts","./models/access-control/access-control-permissions-collection.ts","./models/access-control/access-control-timetable.ts","./models/access-control/access-control-user-type.ts","./models/access-control/access-control-user.ts","./models/access-control/access-plan-limit-issue.ts","./models/access-control/access-plan-pending-change-collection.ts","./models/access-control/access-plan-pending-change.ts","./models/access-control/base-access-control-generic-user-type.ts","./models/access-control/credentials/access-card-credential.ts","./models/access-control/credentials/access-control-credential-conflict.ts","./models/access-control/credentials/base-credential.ts","./models/access-control/credentials/pin-code-credential.ts","./models/access-control/lock-user.ts","./models/active-directory-user-management/active-directory-group.ts","./models/active-directory-user-management/active-directory-user.ts","./models/activity/activity-day.ts","./models/activity/activity-filter-catalog.ts","./models/activity/activity-filter-category.ts","./models/activity/activity-filter-option.ts","./models/activity/activity-filter-subsection.ts","./models/activity/activity-permission.ts","./models/activity/alarm-recap.ts","./models/activity/base-activity-search.ts","./models/activity/daily-summary/event.ts","./models/activity/daily-summary/playlist.ts","./models/activity/energy-goal.ts","./models/activity/extended-activity-history/request.ts","./models/activity/heat-map-metric.ts","./models/activity/history-device-id-filter.ts","./models/activity/history-device-type-filter.ts","./models/activity/history-event-filter.ts","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInDays/index.js","./models/activity/history-event.ts","./models/activity/history-location-filter.ts","./models/activity/history-sub-location-filter.ts","./models/activity/history-user-filter.ts","./models/activity/history-user-type-filter.ts","./models/activity/meter-usage-generation.ts","./models/activity/quick-filter.ts","./models/activity/record.ts","./models/app-store.ts","./models/automation/base-automation-item.ts","./models/automation/boiler-control-system.ts","./models/automation/peak-protect-tariff.ts","./models/automation/peak-protect-utility.ts","./models/automation/peak-protect.ts","./models/automation/permission.ts","./models/automation/presence-state/current-presence-state.ts","./models/automation/presence-state/presence-state-display.ts","./models/automation/presence-state/presence-state-dropdown-item.ts","./models/automation/presence-state/presence-state-explainer-display.ts","./models/automation/presence-state/presence-state-sensor-trigger-option.ts","./models/automation/presence-state/presence-state-settings-display.ts","./models/automation/presence-state/presence-state-trigger-device-suboption.ts","./models/automation/presence-state/presence-state-trigger-option.ts","./models/automation/recording-status.ts","./models/automation/rules-builder/action-type.ts","./models/automation/rules-builder/base-rule-creator.ts","./models/automation/rules-builder/base-rule-feature-type.ts","./models/automation/rules-builder/device.ts","./models/automation/rules-builder/event.ts","./models/automation/rules-builder/extra-data/extra-action-chime.ts","./models/automation/rules-builder/extra-data/extra-action-light.ts","./models/automation/rules-builder/extra-data/extra-action-scene.ts","./models/automation/rules-builder/extra-data/extra-action.ts","./models/automation/rules-builder/extra-data/extra-data-access-control.ts","./models/automation/rules-builder/extra-data/extra-data-geo-location.ts","./models/automation/rules-builder/extra-data/extra-data-schedule.ts","./models/automation/rules-builder/extra-device-option-detail.ts","./models/automation/rules-builder/extra-device-option.ts","./models/automation/rules-builder/extra-rule-option-item.ts","./models/automation/rules-builder/extra-rule-option.ts","./models/automation/rules-builder/message-group.ts","./models/automation/rules-builder/message.ts","./models/automation/rules-builder/notification/contact-address.ts","./models/automation/rules-builder/notification/email.ts","./models/automation/rules-builder/notification/group-option.ts","./models/automation/rules-builder/notification/group.ts","./models/automation/rules-builder/notification/mobile.ts","./models/automation/rules-builder/notification/new-contact.ts","./models/automation/rules-builder/restrictions/base-restriction.ts","./models/automation/rules-builder/restrictions/schedule-restriction.ts","./models/automation/rules-builder/rule.ts","./models/automation/rules-builder/template.ts","./models/automation/rules-builder/trigger-type.ts","./models/automation/rules/rule-suggestion.ts","./models/automation/rules/rule.ts","./models/automation/scene-rule-display.ts","./models/automation/scene.ts","./models/automation/schedule-builder/additional-option-item.ts","./models/automation/schedule-builder/followup-option.ts","./models/automation/schedule-builder/occurrence-type.ts","./models/automation/schedule-builder/schedule-builder.ts","./models/automation/schedule-builder/schedule-event.ts","./models/automation/schedule-builder/template.ts","./models/automation/schedule-builder/time-type.ts","./models/automation/schedules/detailed-schedule.ts","./models/automation/schedules/schedule.ts","./models/automation/schedules/wifi-detailed-schedule.ts","./models/builder-trial-account-expiration-warning/content.ts","./models/commercial/schedules/arming-schedule.ts","./models/commercial/schedules/days-of-week-selection.ts","./models/commercial/single-system-filter-count.ts","./models/commercial/single-system-filter.ts","./models/connected-car/alarm.ts","./models/dashboards/comfort-diagnostic.ts","./models/dashboards/cycle-diagnostic.ts","./models/dashboards/efficiency-diagnostic.ts","./models/dashboards/runtime-diagnostic.ts","./models/dashboards/thermostat-diagnostic.ts","./models/dealers/dealer.ts","./models/devices/access-control-access-point-device.ts","./models/devices/access-control-elevator-device.ts","./models/devices/audio-device.ts","./models/devices/base-device.ts","./models/devices/base-light.ts","./models/devices/base-managed-device.ts","./models/devices/bluetooth-arming-device.ts","./models/devices/camera-light.ts","./models/devices/car-monitor.ts","./models/devices/chime.ts","./models/devices/commercial-temperature-sensor.ts","./models/devices/device-resource-info.ts","./models/devices/elevator-floor-device.ts","./models/devices/energy-meter.ts","./models/devices/garage-door.ts","./models/devices/gate.ts","./models/devices/generic-zwave-device.ts","./models/devices/gun-shot-sensor.ts","./models/devices/iq-router.ts","./models/devices/light-group.ts","./models/devices/light.ts","./components/modals/devices/temporary-access-code.hbs","./components/modals/devices/temporary-access-code.ts","./components/modals/locks/request-a-code/index.hbs","./components/modals/locks/request-a-code/index.ts","./models/devices/lock.ts","./models/devices/mobile-device.ts","./models/devices/motion-camera.ts","./models/devices/mpers-device.ts","./models/devices/noise-sensor.ts","./models/devices/partition.ts","./models/devices/permissions/smart-chime-permission.ts","./models/devices/remote-temperature-sensor.ts","./models/devices/remote.ts","./models/devices/security-fog-generator.ts","./models/devices/sensor-threshold.ts","./models/devices/sensor.ts","./models/devices/shade.ts","./models/devices/siren.ts","./models/devices/smart-chime-device.ts","./models/devices/smart-gateway.ts","./models/devices/state-info.ts","./models/devices/sump-pump.ts","./models/devices/switch.ts","./models/devices/temperature-device.ts","./models/devices/thermostat-rule-suggestions-info.ts","./models/devices/thermostat.ts","./models/devices/valve-switch.ts","./models/devices/video-device.ts","./models/devices/voice-assistance-device.ts","./models/devices/water-meter.ts","./models/devices/water-sensor.ts","./models/devices/water-valve.ts","./models/devices/x10light.ts","./models/discover/discover-article-group-item.ts","./models/discover/discover-article-item.ts","./models/discover/discover-content-action.ts","./models/discover/discover-content-block.ts","./models/discover/get-discover-article-content-result.ts","./models/discover/get-discover-dashboard-result.ts","./models/enterprise/locations/enterprise-trouble-issues-info.ts","./models/enterprise/locations/filter-count.ts","./models/enterprise/locations/filter.ts","./models/enterprise/locations/location-user-info.ts","./models/enterprise/locations/location.ts","./models/enterprise/locations/occupancy-state.ts","./models/enterprise/locations/sub-filter.ts","./models/enterprise/locations/summary-page-device-info.ts","./models/enterprise/locations/tenant.ts","./models/enterprise/locations/unattended-showing-setting.ts","./models/enterprise/settings/auto-relock.ts","./models/enterprise/settings/automatic-panel-arming.ts","./models/enterprise/settings/automatically-enable-background-capture.ts","./models/enterprise/settings/backup-code.ts","./models/enterprise/settings/base-customer-logo.ts","./models/enterprise/settings/base-support-phone.ts","./models/enterprise/settings/business-hour-template.ts","./models/enterprise/settings/company-logo.ts","./models/enterprise/settings/company-name.ts","./models/enterprise/settings/customer-relationship-management-integration.ts","./models/enterprise/settings/customize-welcome-email.ts","./models/enterprise/settings/delete-expired-user.ts","./models/enterprise/settings/delete-inactive-user.ts","./models/enterprise/settings/energy-saver-rule.ts","./models/enterprise/settings/guest-login-access.ts","./models/enterprise/settings/house-ready-early.ts","./models/enterprise/settings/login-template.ts","./models/enterprise/settings/login-templates-for-group-with-role.ts","./models/enterprise/settings/login-templates-for-group.ts","./models/enterprise/settings/mobile-badge.ts","./models/enterprise/settings/noise-monitor-settings-template.ts","./models/enterprise/settings/occupancy-based-pool-controller-rule.ts","./models/enterprise/settings/occupancy-based-thermostat-rule.ts","./models/enterprise/settings/pool-control-filter-pump-schedule-template.ts","./models/enterprise/settings/preloaded-codes-for-user-creation.ts","./models/enterprise/settings/property-management-integration.ts","./models/enterprise/settings/property-management-resident.ts","./models/enterprise/settings/schedule-email.ts","./models/enterprise/settings/schedule-welcome-message.ts","./models/enterprise/settings/self-guided-tours-appointment-length.ts","./models/enterprise/settings/self-guided-tours-cc-verification.ts","./models/enterprise/settings/self-guided-tours-checkpoint-id.ts","./models/enterprise/settings/self-guided-tours-community-site-map.ts","./models/enterprise/settings/self-guided-tours-configure-funnel-crm.ts","./models/enterprise/settings/self-guided-tours-configure-knock-crm.ts","./models/enterprise/settings/self-guided-tours-custom-url.ts","./models/enterprise/settings/self-guided-tours-customer-logo.ts","./models/enterprise/settings/self-guided-tours-gate-code.ts","./models/enterprise/settings/self-guided-tours-geofence.ts","./models/enterprise/settings/self-guided-tours-hours-of-operation.ts","./models/enterprise/settings/self-guided-tours-support-phone.ts","./models/enterprise/settings/self-guided-tours-terms-and-condition.ts","./models/enterprise/settings/self-guided-tours-web-primary-color.ts","./models/enterprise/settings/send-email-by-default.ts","./models/enterprise/settings/send-follow-up-text.ts","./models/enterprise/settings/support-phone.ts","./models/enterprise/settings/temporary-access-code-availability-schedule.ts","./models/enterprise/settings/temporary-access-code-duration.ts","./models/enterprise/settings/temporary-access-code.ts","./models/enterprise/settings/thermostat-schedule-template.ts","./models/enterprise/settings/thermostat-settings-template.ts","./models/enterprise/settings/user-code-time.ts","./models/enterprise/settings/water-meter-configuration-template.ts","./models/enterprise/settings/water-meter-configuration.ts","./models/enterprise/settings/welcome-email.ts","./models/enterprise/settings/welcome-message.ts","./models/enterprise/template.ts","./models/escalated-events/escalated-events-event.ts","./models/feature-suggestions/base-feature.ts","./models/feature-suggestions/feature-category.ts","./models/feature-suggestions/feature-suggestion.ts","./models/feature-suggestions/feature-task.ts","./models/filter/base-filter-count.ts","./models/filter/base-filter-model.ts","./models/filter/base-sub-filter.ts","./models/fleet/base-alert-item.ts","./models/fleet/car-issue-item.ts","./models/fleet/fleet-filter-count.ts","./models/fleet/fleet-filter.ts","./models/fleet/fleet-trip-day.ts","./models/fleet/fleet-trip.ts","./models/fleet/fleet-vehicle.ts","./models/fleet/trip-alert-item.ts","./models/geolocation/fence.ts","./models/geolocation/geo-device.ts","./models/home/temperatures/temperature-sensor-group.ts","./models/identity.ts","./models/image-sensor/image-sensor-image.ts","./models/image-sensor/image-sensor.ts","./models/image-sensor/upload-clip-permission.ts","./models/logins/base-login.ts","./models/logins/customer-login.ts","./models/logins/login-permissions-collection.ts","./models/logins/non-group-login.ts","./models/logins/system-group-login.ts","./models/navigation/route-item-relationship.ts","./models/navigation/route-item.ts","./models/notifications/base-notification.ts","./models/notifications/notification-type.ts","./models/notifications/reports/base-report.ts","./models/notifications/reports/report-catalog-item.ts","./models/notifications/reports/report-view.ts","./models/personal-safety/alarm-link.ts","./models/personal-safety/alarm.ts","./models/personal-safety/emergency-contact.ts","./models/personal-safety/location.ts","./models/personal-safety/session.ts","./models/personal-safety/user-profile.ts","./models/point-central-identity.ts","./models/point-central/community/display-field.ts","./models/point-central/community/group-structure.ts","./models/point-central/community/long-term-rental-community.ts","./models/point-central/manage-residents/resident-info.ts","./models/point-central/manage-residents/resident-move-info.ts","./models/programming-code/lock-programming-code.ts","./models/safety-button/customer-profile.ts","./models/safety-button/note.ts","./models/safety-button/session.ts","./models/schedules/rts-preset.ts","./models/schedules/schedule-preset-time-frame.ts","./models/schedules/smart-schedules-audit.ts","./models/schedules/transition-event.ts","./models/service-appointments/reason.ts","./models/service-appointments/request.ts","./models/service-appointments/scheduled-appointment.ts","./models/service-appointments/start-and-end-time.ts","./models/service-appointments/timeframe.ts","./models/settings/access-point-wifi/access-point-panel-signal-strength.ts","./models/settings/access-point-wifi/access-point-wifi-setting.ts","./models/settings/account-management/move-portal-survey/customer-moving-form-result.ts","./models/settings/account-management/move-portal-survey/dealer-customer-app-promotion.ts","./models/settings/active-directory-setup/active-directory-client-identifier.ts","./models/settings/active-directory-setup/group-to-access-plan-mapping.ts","./models/settings/active-directory-setup/group-to-enterprise-login-mapping.ts","./models/settings/control-panel-settings/sensor-row-info.ts","./models/settings/everbridge-integration/everbridge-configuration.ts","./models/settings/everbridge-integration/everbridge-template.ts","./models/settings/manage-devices/device-catalog.ts","./models/settings/manage-devices/managed-device-category.ts","./models/settings/manage-devices/zwave-device-catalog.ts","./models/settings/managed-access-request.ts","./models/settings/monitoring-station/monitoring-certificate.ts","./models/settings/monitoring-station/property-action-category.ts","./models/settings/monitoring-station/property-action-device.ts","./models/settings/monitoring-station/property-action.ts","./models/settings/monitoring-station/property-note.ts","./models/settings/monitoring-station/video.ts","./models/settings/monitoring-station/visual-verification-device.ts","./models/settings/panel-bluetooth/bluetooth-disarming-setting.ts","./models/settings/panel-wifi/wifi-network.ts","./models/settings/panel-wifi/wifi-setting.ts","./models/settings/restricted-access-setting.ts","./models/settings/threshold.ts","./models/settings/voice/voice-access-level-setting-item.ts","./models/settings/voice/voice-control-device-setting.ts","./models/settings/voice/voice-settings-pin.ts","./models/smart-coverage/property.ts","./models/support/feedback.ts","./models/systems/available-system-item.ts","./models/systems/configuration.ts","./models/systems/msa-associated-system.ts","./models/systems/system-group-cache-datum.ts","./models/systems/system-group.ts","./models/systems/system.ts","./models/trouble-conditions/trouble-condition-extra-data-collection.ts","./models/trouble-conditions/trouble-condition-mute.ts","./models/trouble-conditions/trouble-condition.ts","./models/ui/color.ts","./models/ui/footer.ts","./models/ui/home-card.ts","./models/upsell/get-upsell-shopping-cart-result.ts","./models/upsell/upsell-campaign.ts","./models/users/access/access-point-collection.ts","./models/users/access/access-point-collections-summary.ts","./models/users/access/access-point-item.ts","./models/users/access/device-access.ts","./models/users/access/unassigned-user-code.ts","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInMonths/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isLastDayOfMonth/index.js","./models/users/base-permissions-collection.ts","./models/users/base-user.ts","./models/users/contact-address.ts","./models/users/country-mobile-carrier.ts","./models/users/email-address.ts","./models/users/mobile-address.ts","./models/users/monitoring-station-address.ts","./models/users/permissions-collection.ts","./models/users/push-device-address.ts","./models/users/quick-filter.ts","./models/users/smrf-status.ts","./models/users/user-attributes/user-attribute-collection.ts","./models/users/user-attributes/user-attribute-field.ts","./models/users/user.ts","./models/users/voice-address.ts","./models/video/aggregated-video-events-summary.ts","./models/video/ai-deterrence-usage.ts","./models/video/alert-format.ts","./models/video/analytics-snapshot-event.ts","./models/video/base-analytics-rule.ts","./models/video/base-media-event.ts","./models/video/cached-days-of-recorded-video.ts","./models/video/calibration/bounding-box.ts","./models/video/calibration/snapshot.ts","./models/video/calibration/status.ts","./models/video/camera-group.ts","./models/video/camera-light-setting.ts","./models/video/camera-link-info.ts","./models/video/camera-password.ts","./models/video/camera-pir-setting.ts","./models/video/camera-siren.ts","./models/video/clip-donation-agreement.ts","./models/video/devices/base-analytics-camera.ts","./models/video/devices/base-camera-collection.ts","./models/video/devices/base-camera.ts","./models/video/devices/camera.ts","./models/video/devices/digital-fov-camera.ts","./models/video/devices/ov-ready-camera.ts","./models/video/devices/sd-card-camera.ts","./models/video/devices/svr.ts","./models/video/devices/third-party-analytics-camera.ts","./models/video/devices/varifocal-fov-camera.ts","./models/video/dewarp-config.ts","./models/video/digital-ptz-position.ts","./models/video/doorbell-button-press-event.ts","./models/video/familiar-targets/familiar-subject-camera-context.ts","./models/video/familiar-targets/familiar-target-cluster-profile.ts","./models/video/familiar-targets/familiar-target-enrollment-cluster-review.ts","./models/video/familiar-targets/familiar-target-enrollment-cluster.ts","./models/video/familiar-targets/familiar-target-enrollment-image.ts","./models/video/familiar-targets/familiar-target-enrollment.ts","./models/video/familiar-targets/familiar-target-feedback-event.ts","./models/video/intercom/intercom-apartment.ts","./models/video/intercom/intercom-call-rule.ts","./models/video/intercom/intercom-contact.ts","./models/video/intercom/intercom-directory-list.ts","./models/video/intercom/intercom-directory.ts","./models/video/intercom/intercom-paired-unit.ts","./models/video/intercom/intercom-qr-code.ts","./models/video/interval.ts","./models/video/intervals-group.ts","./models/video/onvif-camera-discovery-result.ts","./models/video/onvif-camera-rename-result.ts","./models/video/onvif-camera-stream.ts","./models/video/onvif-ptz-preset.ts","./models/video/ov-event.ts","./models/video/ov-rule-group.ts","./models/video/ov-rule-snapshot.ts","./models/video/ov-rule.ts","./models/video/ov2-event.ts","./models/video/parcel-detection-rule.ts","./models/video/perimeter-guard-config.ts","./models/video/permissions/associated-devices-permission.ts","./models/video/permissions/clips-usage-report-permission.ts","./models/video/permissions/onboard-permission.ts","./models/video/permissions/ov-rule-permission.ts","./models/video/permissions/saved-clip-permission.ts","./models/video/permissions/video-settings-permission.ts","./models/video/permissions/video-streaming-permissions-collection.ts","./models/video/post-install/qualitative-power-check.ts","./models/video/privacy-zone.ts","./models/video/privacy-zones-setting.ts","./models/video/rule-usage.ts","./models/video/schedules/base-video-schedule.ts","./models/video/schedules/sd-card-recording-schedule.ts","./models/video/sd-card-camera-usage-info.ts","./models/video/sd-card-thumbnail-endpoint.ts","./models/video/sd-card.ts","./models/video/settings/alerts-setting.ts","./models/video/settings/audio-setting.ts","./models/video/settings/base-video-setting.ts","./models/video/settings/chime-tone-setting.ts","./models/video/settings/device-status-history-item.ts","./models/video/settings/device-status-history-list.ts","./models/video/settings/device-status-info.ts","./models/video/settings/doorbell-notification-setting.ts","./models/video/settings/doorbell-video-config.ts","./models/video/settings/general-setting.ts","./models/video/settings/image-setting.ts","./models/video/settings/infrared-setting.ts","./models/video/settings/intercom/associated-device-select.ts","./models/video/settings/intercom/device-select.ts","./models/video/settings/intercom/intercom-concierge.ts","./models/video/settings/intercom/intercom-customer-apartment-info.ts","./models/video/settings/intercom/intercom-login.ts","./models/video/settings/intercom/intercom-logo.ts","./models/video/settings/intercom/intercom-unit-login-pairing.ts","./models/video/settings/intercom/video-device-select.ts","./models/video/settings/led-light-setting.ts","./models/video/settings/live-video-config.ts","./models/video/settings/microphone-speaker-setting.ts","./models/video/settings/motion-configuration-setting.ts","./models/video/settings/pir-video-config.ts","./models/video/settings/saved-video-setting.ts","./models/video/settings/video-config.ts","./models/video/settings/video-settings-overview.ts","./models/video/signal-strength-history-item.ts","./models/video/signal-strength-info.ts","./models/video/smrf-image.ts","./models/video/smrf-legal-text.ts","./models/video/smrf-permission.ts","./models/video/snapshot-event.ts","./models/video/snapshot.ts","./models/video/stream-logs/oe-stream-log.ts","./models/video/stream-logs/oe-stream-update-log.ts","./models/video/stream-logs/webrtc-stream-log.ts","./models/video/stream-logs/webrtc-stream-update-log.ts","./models/video/stream-logs/webrtc-wavefront-report-message.ts","./models/video/stream-options-collection.ts","./models/video/stream-setting.ts","./models/video/stream-video-to-panel-info.ts","./models/video/svr-state-info.ts","./models/video/svr-thumbnail-endpoint.ts","./models/video/svr-usage-info.ts","./models/video/third-party-analytics-event-type.ts","./models/video/third-party-analytics-event.ts","./models/video/third-party-analytics-rule.ts","./models/video/touchless-ring-rule.ts","./models/video/video-event.ts","./models/video/video-sources/analytics-video-source.ts","./models/video/video-sources/apex-connection-info.ts","./models/video/video-sources/base-live-video-source.ts","./models/video/video-sources/end-to-end-webrtc-connection-info.ts","./models/video/video-sources/live-video-highest-res-source.ts","./models/video/video-sources/live-video-source.ts","./models/video/video-sources/proxy-webrtc-connection-info.ts","./models/video/video-sources/sd-card-video-source.ts","./models/video/video-sources/svr-video-source.ts","./models/video/video-sources/video-source.ts","./models/video/video-sources/webrtc-stream-quality-message.ts","./models/video/video-usage.ts","./models/visual-verification/alarm.ts","./models/visual-verification/event.ts","./models/visual-verification/page-feature.ts","./models/visual-verification/person-on-site/indicator.ts","./models/visual-verification/property-note.ts","./models/visual-verification/session-device-link.ts","./models/visual-verification/session.ts","./models/visual-verification/unexpected-events/prediction.ts","./models/visual-verification/visual-verification-event-id-list.ts","./models/visual-verification/visual-verification-event-id.ts","./models/weather/forecast.ts","./models/wifi/client.ts","./models/wifi/device-category.ts","./models/wifi/device-profile.ts","./models/wifi/device.ts","./models/wifi/network.ts","./models/wifi/port-forwarding-rule.ts","./models/wifi/static-lease.ts","./news-and-updates/route.ts","./not-found/route.js","./notifications/manage-devices/edit/controller.ts","./notifications/manage-devices/edit/route.ts","./notifications/manage-devices/index/controller.ts","./notifications/manage-devices/index/route.ts","../rewritten-packages/@ember/test-waiters.d540532b/node_modules/@ember/test-waiters/waiter-manager.js","../rewritten-packages/@ember/test-waiters.d540532b/node_modules/@ember/test-waiters/build-waiter.js","../src/index.ts","../rewritten-packages/@ember/test-waiters.d540532b/node_modules/@ember/test-waiters/wait-for-promise.js","../rewritten-packages/@ember/test-waiters.d540532b/node_modules/@ember/test-waiters/wait-for.js","./router.ts","./serializers/access-control/access-control-user.js","./serializers/access-control/access-plan-pending-change-collection.js","./serializers/activity/extended-activity-history/request.js","./serializers/application.js","./serializers/automation/presence-state/presence-state-sensor-trigger-option.ts","./serializers/automation/presence-state/presence-state-settings-display.ts","./serializers/automation/presence-state/presence-state-trigger-device-suboption.ts","./serializers/automation/presence-state/presence-state-trigger-option.ts","./serializers/automation/rules-builder/notification/new-contact.ts","./serializers/automation/rules-builder/restrictions/restriction.js","./serializers/automation/rules-builder/rule.js","./serializers/automation/schedule-builder/schedule-builder.js","./serializers/automation/schedule-builder/schedule-event.ts","./serializers/commercial/schedules/arming-schedule.ts","./serializers/devices/car-monitor.js","./serializers/devices/commercial-temperature-sensor.js","./serializers/discover/discover-article-group-item.ts","./serializers/discover/get-discover-article-content-result.ts","./serializers/discover/get-discover-dashboard-result.ts","./serializers/enterprise/locations/location.js","./serializers/enterprise/settings/noise-monitor-settings-template.js","./serializers/enterprise/settings/pool-control-filter-pump-schedule-template.js","./serializers/enterprise/settings/thermostat-settings-template.js","./serializers/enterprise/settings/water-meter-configuration-template.js","./serializers/identity.js","./serializers/service-appointments/request.js","./serializers/service-appointments/timeframe.js","./serializers/settings/everbridge-integration/everbridge-configuration.ts","./serializers/settings/manage-devices/device-catalog.ts","./serializers/settings/manage-devices/managed-device-category.ts","./serializers/settings/monitoring-station/property-action.ts","./serializers/settings/monitoring-station/video.ts","./serializers/settings/voice/voice-control-device-setting.js","./serializers/systems/system-group.js","./serializers/users/access/access-point-collection.js","./serializers/users/access/access-point-collections-summary.js","./serializers/users/access/device-access.js","./serializers/users/user.js","./serializers/video/familiar-targets/familiar-target-enrollment-cluster-review.js","./serializers/video/familiar-targets/familiar-target-enrollment-cluster.js","./serializers/video/familiar-targets/familiar-target-enrollment-image.js","./serializers/video/familiar-targets/familiar-target-feedback-event.js","./serializers/video/intercom/intercom-call-rule.ts","./serializers/video/ov-rule.ts","./serializers/video/settings/audio-setting.js","./serializers/video/settings/general-setting.js","./serializers/video/settings/image-setting.ts","./serializers/video/settings/video-config.js","./serializers/wifi/device-profile.ts","./services/adc-gtm.ts","./services/ajax.ts","./services/announcer.ts","./services/ble-network-setup.ts","./components/app/tour-onboarding/card-preview/partitions-card/index.hbs","./components/app/tour-onboarding/card-preview/partitions-card/index.ts","./components/app/tour-onboarding/card-preview/index.hbs","./components/app/tour-onboarding/card-preview/index.ts","./components/app/tour-onboarding/tour.js","./services/context-manager.js","./services/engine-config.ts","./services/error-reporting.ts","./services/help-tour.ts","./services/homepage-manager.ts","./components/modals/app/inactivity-warning/index.hbs","./components/modals/app/inactivity-warning/index.ts","./components/modals/initial-setup/base-step.js","./components/modals/initial-setup/agreements/index.hbs","./components/modals/initial-setup/agreements/index.js","./components/modals/initial-setup/ambient-download-app/index.hbs","./components/modals/initial-setup/ambient-download-app/index.js","./components/modals/initial-setup/dtc-billing-information/index.hbs","./components/modals/initial-setup/dtc-billing-information/index.js","./components/modals/initial-setup/email-verification/index.hbs","./components/modals/initial-setup/email-verification/index.js","./components/modals/initial-setup/messages/index.hbs","./components/modals/initial-setup/messages/index.js","./components/modals/initial-setup/news-updates/index.hbs","./components/modals/initial-setup/news-updates/index.js","./components/modals/initial-setup/security-question/index.hbs","./components/modals/initial-setup/security-question/index.js","./components/modals/initial-setup/update-password/index.hbs","./components/modals/initial-setup/update-password/index.js","./components/modals/initial-setup/index.hbs","./components/modals/initial-setup/index.js","./services/identity-manager.ts","./services/install-manager.js","./services/intl.js","./services/navigation.ts","./services/personal-safety.ts","./services/screen-recording.ts","./services/stats.ts","./services/system-groups-manager.ts","./services/trouble-conditions.ts","./services/user-activity.ts","./services/users/pointcentral-share-user.ts","./services/users/share-user.ts","./services/ux-events.ts","./services/video/analytics-firmware-manager.ts","./services/video/clip-downloader.ts","./services/video/clip-exporter.ts","./services/video/clip-uploader.ts","./services/video/draw-window-event-bus.ts","./services/video/onvif-ptz-preset-manager.ts","./services/video/playback-info-cache-manager.ts","./services/video/privacy-zones-manager.ts","./services/video/snapshot-poller.ts","./services/video/video-preloader.ts","./services/video/warning-sound.ts","./services/visual-verification.ts","./services/wizard-manager.ts","./settings/control-panel-settings/base-controller.ts","./settings/control-panel-settings/base-route.ts","./settings/login-information/base-controller.ts","./settings/login-information/base-route.ts","./settings/panel-wifi/base-route.ts","./smart-coverage/index/controller.ts","./smart-coverage/index/route.ts","./smart-coverage/route.ts","./smart-coverage/select-properties/controller.ts","./smart-coverage/select-properties/route.ts","./sso/base-sso-route.ts","./transforms/access-control-schedule.ts","./transforms/arming-schedule-day-time.ts","./transforms/complex-icon-data.ts","./transforms/fisheye-mode.ts","./transforms/heat-map-parameter.js","./transforms/icon-data.ts","./transforms/login-temporary-schedule.ts","./transforms/pan-tilt-preset-list.ts","./transforms/rule-extra-data.ts","./transforms/rule-group-info-list.ts","./transforms/rule-id-info-list.ts","./transforms/system-group-login-roles-list.ts","./transforms/temporary-schedule.ts","./transforms/weekly-schedule.ts","./utils/access-control-access-point.js","./utils/analytics-shape-validation.ts","./utils/camera-lights.ts","./utils/canvas.ts","./utils/colors.ts","./utils/contact-addresses.ts","./utils/container-object.js","./utils/datetime.js","./utils/device-state.ts","./utils/device-wifi.ts","./utils/device.js","./utils/dimmer-switch.ts","./utils/dom.js","./utils/ember.ts","./utils/fleet.ts","./utils/form-elements.js","./utils/garages.ts","./utils/gates.ts","./utils/general.js","./utils/highcharts/line.ts","./utils/highcharts/vertical-bar-chart.ts","./utils/highcharts/xrange-chart.ts","./utils/json.ts","./utils/lights.ts","./utils/locks.ts","./utils/math-methods.ts","./utils/mpers-devices.ts","./utils/partitions.ts","./utils/point-central.ts","./utils/properties-observe.js","./utils/scene-rule-display.ts","./utils/sensors.ts","./utils/severity-status.js","./utils/sfg-devices.ts","./utils/shades.ts","./utils/slider.ts","./utils/strings.js","./utils/style.js","./utils/sump-pumps.ts","./utils/switch.ts","./utils/thermostats.ts","./utils/transforms-objects/base-transform.ts","./utils/transforms-objects/complex-icon-data.ts","./utils/transforms-objects/icon-data.ts","./utils/transforms-objects/login-temporary-schedule.ts","./utils/transforms-objects/temporary-schedule.ts","./utils/transforms-objects/weekly-schedule.ts","./utils/unused-cookies-prefixes.js","./utils/url.js","./utils/users.js","./utils/video/cookies.js","./utils/video/doorbell.ts","./utils/video/general.ts","./utils/video/rule-transition.ts","./utils/video/rule.ts","./utils/video/rules-edit-transition.ts","./utils/video/rules-stats.ts","./utils/video/settings/familiar-subject.ts","./utils/video/settings/light-alert-options.ts","./utils/video/settings/perimeter-guard-audio-options.ts","./utils/video/streaming.ts","./utils/video/video-preloader-detail.ts","./utils/video/wavefront-stats.ts","./utils/water-meters.js","./utils/water-sensors.ts","./utils/water-valves.js","./utils/wifi-validation.ts","./utils/zwave-generic.ts","./video/base-playback-controller.ts","./video/base-playback-route.ts","./video/base-video-automation-route.ts","./video/camera-groups/base-objects/base-camera-group-edit-route.ts","./video/camera-groups/base-objects/base-camera-groups-controller.ts","./video/camera-groups/base-objects/base-camera-groups-route.ts","./video/cameras/camera/base-analytics-camera-route.ts","./video/cameras/camera/calibrate/base-controller.ts","./video/cameras/camera/calibrate/base-route.ts","./video/cameras/camera/post-install/base-controller.ts","./video/cameras/camera/post-install/base-route.ts","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachHourOfInterval/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameHour/index.js","./video/clips-usage-report/series-formatters.ts","./video/install-overview/base-install-overview-controller.ts","./video/install-overview/base-install-overview-route.ts","./video/live-view/base-live-view-controller.ts","./video/live-view/base-live-view-route.ts","./video/onvif-install/base-onvif-installation-controller.ts","./video/onvif-install/base-onvif-installation-route.ts","./video/onvif-install/naming/base-onvif-installation-naming-route.ts","./video/rules/analytics/base-analytics-route.ts","./video/rules/analytics/base-editable-analytics-route.ts","./components/video/rules/rvm-rule-filters-modal/index.hbs","./components/video/rules/rvm-rule-filters-modal/index.ts","./video/rules/analytics/draw/draw-base-controller.ts","./video/rules/analytics/draw/draw-base-route.ts","./video/rules/help-tour/tour.js","./video/settings/camera/base-settings-route.ts","./video/settings/camera/video-config/base-video-config-controller.ts","./video/settings/camera/video-config/third-party-stream/base-third-party-stream-controller.ts","./video/settings/familiar-subject/camera-access-base-route.ts","./video/settings/familiar-subject/faq-terms-base-route.ts","./video/settings/familiar-subject/feature-management-base-route.ts","./video/settings/familiar-subject/incorrect-photos-base-route.ts","./video/settings/familiar-subject/recent-images-base-route.ts","./video/settings/intercom/add-logins-to-intercom.ts","./video/settings/intercom/ajax-request-utils/base-request-body.ts","./video/settings/intercom/ajax-request-utils/intercom-add-logins-request-body.ts","./video/settings/intercom/ajax-request-utils/intercom-bulk-insert-contacts-request-body.ts","./video/settings/intercom/ajax-request-utils/intercom-create-call-forwarding-rules-request-body.ts","./video/settings/intercom/ajax-request-utils/intercom-remove-logins-request-body.ts","./video/settings/intercom/base-intercom-route.ts","./video/settings/intercom/base-intercom-settings-controller.ts","./video/settings/intercom/remove-logins-from-intercoms.ts","./video/settings/motion-configuration/controller.ts","./video/svr-timeline/route.ts","./video/video-streaming-features-route.js","./visual-verification/base-controller.ts","./visual-verification/base-route.ts","./websockets/handlers.ts","./websockets/handlers/access-control-access-points.ts","./websockets/handlers/base-sensors.ts","./websockets/handlers/base.ts","./websockets/handlers/camera-lights.ts","./websockets/handlers/fleet-filter-counts.ts","./websockets/handlers/fleet-vehicles.ts","./websockets/handlers/garage-doors.ts","./websockets/handlers/gates.ts","./websockets/handlers/iq-routers.ts","./websockets/handlers/lights.ts","./websockets/handlers/locks.ts","./websockets/handlers/mpers-device.ts","./websockets/handlers/networks.ts","./websockets/handlers/partitions.ts","./websockets/handlers/safety-button-location.ts","./websockets/handlers/sensors.ts","./websockets/handlers/shades.ts","./websockets/handlers/sump-pumps.ts","./websockets/handlers/thermostats.ts","./websockets/handlers/warning-sounds.ts","./websockets/handlers/water-sensors.ts","./websockets/handlers/water-valves.ts","./websockets/handlers/wifi-hosts.ts","./websockets/handlers/wifi-profiles.ts","./wizard-launch/controller.ts","./wizard-launch/route.js","@adc/add-device-engine/categories/base-controller.ts","@adc/add-device-engine/categories/base-index-route.ts","@adc/add-device-engine/categories/devices/already-linked/controller.ts","@adc/add-device-engine/categories/devices/already-linked/route.ts","@adc/add-device-engine/categories/devices/base-devices-controller.ts","@adc/add-device-engine/categories/devices/base-devices-route.ts","@adc/add-device-engine/categories/devices/base-exit-process-controller.ts","@adc/add-device-engine/categories/devices/base-exit-process-route.ts","@adc/add-device-engine/categories/devices/complete/controller.ts","@adc/add-device-engine/categories/devices/complete/route.ts","@adc/add-device-engine/categories/devices/default-notifications/controller.ts","@adc/add-device-engine/categories/devices/default-notifications/route.ts","@adc/add-device-engine/categories/devices/different-accounts/controller.ts","@adc/add-device-engine/categories/devices/different-accounts/route.ts","@adc/add-device-engine/categories/devices/index/controller.ts","@adc/add-device-engine/categories/devices/index/route.ts","@adc/add-device-engine/categories/devices/link-complete/route.ts","@adc/add-device-engine/categories/devices/link-congratulations/route.ts","@adc/add-device-engine/categories/devices/link-in-progress/route.ts","@adc/add-device-engine/categories/devices/link-start/route.ts","@adc/add-device-engine/categories/devices/link-unsuccessful/controller.ts","@adc/add-device-engine/categories/devices/link-unsuccessful/route.ts","@adc/add-device-engine/categories/devices/mount/controller.ts","@adc/add-device-engine/categories/devices/mount/route.ts","@adc/add-device-engine/categories/devices/name/controller.ts","@adc/add-device-engine/categories/devices/name/route.ts","@adc/add-device-engine/categories/devices/start-info/route.ts","@adc/add-device-engine/categories/devices/start/controller.ts","@adc/add-device-engine/categories/devices/start/route.ts","@adc/add-device-engine/categories/devices/troubleshoot/controller.ts","@adc/add-device-engine/categories/devices/troubleshoot/route.ts","@adc/add-device-engine/categories/index/controller.ts","@adc/add-device-engine/categories/index/route.ts","@adc/add-device-engine/choose-device/delete-device/controller.ts","@adc/add-device-engine/choose-device/delete-device/route.ts","@adc/add-device-engine/choose-device/index/controller.ts","@adc/add-device-engine/choose-device/index/route.ts","@adc/add-device-engine/choose-device/troubleshoot-missing/controller.ts","@adc/add-device-engine/choose-device/troubleshoot-missing/route.ts","@adc/add-device-engine/components/button-sign-in-google/component.ts","@adc/add-device-engine/modifiers/on-view-page.ts","@adc/add-device-engine/routes.js","@adc/add-device-engine/utils/add-device-config-helper.ts","@adc/add-device-engine/utils/add-device-navigation-url-helper.ts","@adc/customer-wizard-engine/routes.js","@adc/customer-wizard-engine/v1/controller.js","@adc/customer-wizard-engine/v1/route.js","@adc/login-setup-engine/account-information/controller.ts","@adc/login-setup-engine/account-information/route.ts","@adc/login-setup-engine/base-controller.ts","@adc/login-setup-engine/base-route.ts","@adc/login-setup-engine/business-hours/controller.ts","@adc/login-setup-engine/business-hours/route.ts","@adc/login-setup-engine/communication-preferences/controller.ts","@adc/login-setup-engine/communication-preferences/route.ts","@adc/login-setup-engine/components/recognized-device-list-item/component.ts","@adc/login-setup-engine/email-verification/controller.ts","@adc/login-setup-engine/email-verification/route.ts","@adc/login-setup-engine/enums/RecognizedDeviceType.ts","@adc/login-setup-engine/login-name-confirmation/controller.ts","@adc/login-setup-engine/login-name-confirmation/route.ts","@adc/login-setup-engine/outside-working-hours/controller.ts","@adc/login-setup-engine/outside-working-hours/route.ts","@adc/login-setup-engine/password/controller.ts","@adc/login-setup-engine/password/route.ts","@adc/login-setup-engine/property-information/controller.ts","@adc/login-setup-engine/property-information/route.ts","@adc/login-setup-engine/push-migration/controller.ts","@adc/login-setup-engine/recognized-devices/device-link-request/controller.ts","@adc/login-setup-engine/recognized-devices/device-link-request/route.ts","@adc/login-setup-engine/recognized-devices/index/controller.ts","@adc/login-setup-engine/recognized-devices/index/route.js","@adc/login-setup-engine/routes.js","@adc/login-setup-engine/security-question/controller.ts","@adc/login-setup-engine/security-question/route.ts","@adc/login-setup-engine/system-information/controller.js","@adc/login-setup-engine/system-information/route.js","@adc/login-setup-engine/two-factor-authentication/base-route.ts","@adc/login-setup-engine/two-factor-authentication/index/controller.ts","@adc/login-setup-engine/two-factor-authentication/index/route.js","@adc/login-setup-engine/two-factor-authentication/overview/controller.ts","@adc/login-setup-engine/two-factor-authentication/overview/route.js","engines/login-setup-engine/components/two-factor-setup/authenticator/index.hbs","@adc/login-setup-engine/components/two-factor-setup/authenticator/index.ts","engines/login-setup-engine/components/two-factor-setup/email/index.hbs","@adc/login-setup-engine/components/two-factor-setup/email/index.ts","engines/login-setup-engine/components/two-factor-setup/mobile-number/index.hbs","@adc/login-setup-engine/components/two-factor-setup/mobile-number/index.ts","engines/login-setup-engine/components/two-factor-setup/trust-device/index.hbs","@adc/login-setup-engine/components/two-factor-setup/trust-device/index.ts","engines/login-setup-engine/components/two-factor-setup/verify-device/index.hbs","@adc/login-setup-engine/components/two-factor-setup/verify-device/index.ts","@adc/login-setup-engine/two-factor-authentication/setup/controller.ts","@adc/login-setup-engine/two-factor-authentication/setup/route.js","@adc/login-setup-engine/two-factor-authentication/two-factor-challenge-flow/controller.ts","@adc/login-setup-engine/two-factor-authentication/two-factor-challenge-flow/route.js","@adc/login-setup-engine/utils/PropertyType.ts","@adc/login-setup-engine/utils/transition-utils.ts","@adc/network-config-engine/constants/resource-paths.ts","@adc/network-config-engine/constants/routes.ts","@adc/network-config-engine/enums/WiFiEncryptionAlgorithm.ts","@adc/network-config-engine/enums/WiFiEncryptionType.ts","@adc/network-config-engine/routes.js","@adc/network-config-engine/utils/environment-utils.ts","@adc/network-config-engine/utils/transition-utils.ts","@adc/network-config-engine/wifi-setup/base-wifi-setup-controller.ts","@adc/network-config-engine/wifi-setup/index/controller.ts","@adc/network-config-engine/wifi-setup/manual-setup/controller.ts","@adc/network-config-engine/wifi-setup/manual-setup/route.ts","@adc/network-config-engine/wifi-setup/route.ts","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/utils/parse-response-headers.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/utils/determine-body-promise.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/utils/continue-on-reject.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/utils/serialize-query-params.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/utils/fetch.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/build-url-mixin.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/-private/utils/serialize-into-hash.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/error.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/index.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/json-api.js","../rewritten-packages/@ember-data/adapter.8c6a2bf1/node_modules/@ember-data/adapter/rest.js","../rewritten-packages/@ember-data/debug.d79ffbc1/node_modules/@ember-data/debug/index.js","../rewritten-packages/@ember-data/debug.d79ffbc1/node_modules/@ember-data/debug/setup.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/util.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/attr.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/errors.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/legacy-data-utils.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/legacy-data-fetch.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/diff-array.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/many-array.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/promise-belongs-to.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/promise-many-array.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/references/belongs-to.js","../rewritten-packages/ember-cached-decorator-polyfill.9e7651c3/node_modules/ember-cached-decorator-polyfill/index.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/references/has-many.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/legacy-relationships-support.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/record-state.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/notify-changes.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/model.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/relationship-meta.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/belongs-to.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/has-many.js","../rewritten-packages/@ember-data/model.aebb5837/node_modules/@ember-data/model/-private/model-for-mixin.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/coerce-id.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/-utils.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/relationships/state/belongs-to.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/-state.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/relationships/state/has-many.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/relationships/state/implicit.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/-edge-definition.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/operations/replace-related-records.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/operations/add-to-related-records.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/operations/remove-from-related-records.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/normalize-link.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/index.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/operations/update-relationship.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/graph/operations/replace-related-record.js","../rewritten-packages/@ember-data/record-data.68d786d3/node_modules/@ember-data/record-data/-private/record-data.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/embedded-records-mixin.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/utils.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/transforms/transform.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/transforms/boolean.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/transforms/date.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/transforms/number.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/-private/transforms/string.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/index.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/json-api.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/json.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/rest.js","../rewritten-packages/@ember-data/serializer.16f69675/node_modules/@ember-data/serializer/transform.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/backburner.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/coerce-id.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/common.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/errors-utils.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/request-cache.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/serializer-response.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/snapshot.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/identifer-debug-consts.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/weak-cache.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/fetch-manager.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/finders.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/normalize-model-name.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/utils/is-non-empty-string.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/identifier-cache.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/model/internal-model.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/internal-model-map.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/identity-map.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/utils/construct-resource.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/internal-model-factory.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/record-notification-manager.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/model/record-reference.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/record-data-for.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/record-data-store-wrapper.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/instance-cache.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/model/shim-model-class.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/promise-proxy-base.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/promise-proxies.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/snapshot-record-array.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/record-arrays/record-array.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/record-arrays/adapter-populated-record-array.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/record-array-manager.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/schema-definition-service.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/core-store.js","../rewritten-packages/@ember-data/store.d86a0ee2/node_modules/@ember-data/store/-private/utils/promise-record.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/_internals.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/checkbox.hbs","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/checkbox.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/link-to.hbs","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/link-to.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/_has-dom.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/text-field.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/templates/empty.hbs","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/textarea.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/index.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/mixins/_target_action_support.js","../rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/mixins/text-support.js","../rewritten-packages/@ember/render-modifiers.436a303b/node_modules/@ember/render-modifiers/modifiers/did-insert.js","../rewritten-packages/@ember/render-modifiers.436a303b/node_modules/@ember/render-modifiers/modifiers/did-update.js","../rewritten-packages/@ember/render-modifiers.436a303b/node_modules/@ember/render-modifiers/modifiers/will-destroy.js","../rewritten-packages/@ember/string.4a242b9a/node_modules/@ember/string/cache.js","../rewritten-packages/@ember/string.4a242b9a/node_modules/@ember/string/index.js","../rewritten-packages/@embroider/util.9c5279df/node_modules/@embroider/util/services/ensure-registered.js","../rewritten-packages/@embroider/util.9c5279df/node_modules/@embroider/util/ember-private-api.js","../rewritten-packages/@embroider/util.9c5279df/node_modules/@embroider/util/index.js","../rewritten-packages/@glimmer/component.b3400e67/node_modules/@glimmer/component/-private/component.js","../rewritten-packages/@glimmer/component.b3400e67/node_modules/@glimmer/component/-private/destroyables.js","../rewritten-packages/@glimmer/component.b3400e67/node_modules/@glimmer/component/-private/ember-component-manager.js","../rewritten-packages/@glimmer/component.b3400e67/node_modules/@glimmer/component/-private/base-component-manager.js","../rewritten-packages/@glimmer/component.b3400e67/node_modules/@glimmer/component/index.js","../rewritten-packages/@glimmer/tracking.0f52e106/node_modules/@glimmer/tracking/index.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/components/vertical-collection/template.hbs","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/ember-internals/key-for-item.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/ember-internals/identity.js","../rewritten-packages/ember-raf-scheduler.4fc2f97f/node_modules/ember-raf-scheduler/index.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/utils/document-shim.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/elements/virtual-component.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/elements/occluded-content.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/utils/insert-range-before.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/utils/object-at.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/utils/round-to.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/utils/supports-passive.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/utils/scroll-handler.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/viewport-container.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/utils/element/closest.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/utils/element/estimate-element-height.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/utils/element/get-scaled-client-rect.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/radar/radar.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/utils/mutation-checkers.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/skip-list.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/radar/dynamic-radar.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/-private/data-view/radar/static-radar.js","../rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/components/vertical-collection/component.js","../rewritten-packages/@sentry/ember.1bea4619/node_modules/@sentry/ember/instance-initializers/sentry-performance.js","src/dsn.ts","src/envelope.ts","src/error.ts","src/api.ts","src/baseclient.ts","src/metrics/envelope.ts","src/metrics/utils.ts","src/client.ts","src/env.ts","src/userfeedback.ts","src/clientreport.ts","src/stack-parsers.ts","src/ratelimit.ts","src/transports/base.ts","src/promisebuffer.ts","src/transports/utils.ts","src/transports/fetch.ts","src/transports/xhr.ts","src/sdk.ts","../rewritten-packages/@sentry/ember.1bea4619/node_modules/@sentry/ember/index.js","webpack://customer-site/../../src/sdk.ts?4061","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/errors/load.js","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/errors/asset-load.js","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/errors/bundle-load.js","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/loaders/utilities.js","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/loaders/js.js","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/loaders/css.js","../rewritten-packages/ember-asset-loader.df43afff/node_modules/ember-asset-loader/services/asset-loader.js","../rewritten-packages/ember-cli-app-version.924df200/node_modules/ember-cli-app-version/initializer-factory.js","../rewritten-packages/ember-cli-app-version.924df200/node_modules/ember-cli-app-version/_app_/initializers/app-version.js","../rewritten-packages/ember-cli-string-helpers.7aab1772/node_modules/ember-cli-string-helpers/utils/titleize.js","../rewritten-packages/ember-modifier.9c93520b/node_modules/ember-modifier/-private/compat.js","../rewritten-packages/ember-modifier.9c93520b/node_modules/ember-modifier/-private/class/modifier-manager.js","../rewritten-packages/ember-modifier.9c93520b/node_modules/ember-modifier/-private/class/modifier.js","../rewritten-packages/ember-modifier.9c93520b/node_modules/ember-modifier/-private/function-based/modifier-manager.js","../rewritten-packages/ember-modifier.9c93520b/node_modules/ember-modifier/-private/function-based/modifier.js","../rewritten-packages/ember-click-outside.ccf54f40/node_modules/ember-click-outside/-private/matches-selector.js","../rewritten-packages/ember-click-outside.ccf54f40/node_modules/ember-click-outside/utils.js","../rewritten-packages/ember-click-outside.ccf54f40/node_modules/ember-click-outside/modifier.js","../rewritten-packages/ember-data.8959dcf6/node_modules/ember-data/_app_/initializers/ember-data.js","../rewritten-packages/ember-data.8959dcf6/node_modules/ember-data/_app_/instance-initializers/ember-data.js","../rewritten-packages/ember-data.8959dcf6/node_modules/ember-data/version.js","../rewritten-packages/ember-data.8959dcf6/node_modules/ember-data/-private/core.js","../rewritten-packages/ember-data.8959dcf6/node_modules/ember-data/index.js","../rewritten-packages/ember-data.8959dcf6/node_modules/ember-data/setup-container.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/-private/route-ext.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/components/link-to-external.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/-private/engine-ext.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/-private/engine-instance-ext.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/initializers/engines.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/-private/controller-ext.js","../rewritten-packages/ember-engines.97ede049/node_modules/ember-engines/routes.js","../rewritten-packages/ember-event-helpers.6762ce70/node_modules/ember-event-helpers/helpers/prevent-default.js","../rewritten-packages/ember-event-helpers.6762ce70/node_modules/ember-event-helpers/helpers/stop-propagation.js","../rewritten-packages/ember-get-config.867fe42e/node_modules/ember-get-config/index.js","../rewritten-packages/ember-href-to.757a6976/node_modules/ember-href-to/href-to.js","../rewritten-packages/ember-href-to.757a6976/node_modules/ember-href-to/_app_/instance-initializers/ember-href-to.js","../rewritten-packages/ember-inflector.4956360c/node_modules/ember-inflector/lib/system/inflections.js","../rewritten-packages/ember-inflector.4956360c/node_modules/ember-inflector/lib/system/inflector.js","../rewritten-packages/ember-inflector.4956360c/node_modules/ember-inflector/lib/system/string.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/helpers/t.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/missing-message.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","../../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.2/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","../../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.2/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","../../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.2/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","../../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","../../../../../node_modules/.pnpm/@formatjs+fast-memoize@2.2.0/node_modules/@formatjs/fast-memoize/lib/index.js","../../../../../node_modules/.pnpm/intl-messageformat@10.5.14/node_modules/intl-messageformat/lib/src/error.js","../../../../../node_modules/.pnpm/intl-messageformat@10.5.14/node_modules/intl-messageformat/lib/src/formatters.js","../../../../../node_modules/.pnpm/intl-messageformat@10.5.14/node_modules/intl-messageformat/lib/src/core.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/utils.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/number.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/relativeTime.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/dateTime.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/plural.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/message.js","../../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@2.0.0/node_modules/@formatjs/ecma402-abstract/lib/utils.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/list.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/displayName.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/create-intl.js","../../../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/-base.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/format-date.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/format-list.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/format-message.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/format-number.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/format-relative.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/formatters/format-time.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/empty-object.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/flatten.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/translations.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/normalize-locale.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/services/intl.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/is-array-equal.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/hydrate.js","../rewritten-packages/ember-intl.4169306b/node_modules/ember-intl/-private/utils/get-dom.js","../rewritten-packages/ember-load-initializers.dd92ac3a/node_modules/ember-load-initializers/index.js","../rewritten-packages/ember-metrics.267359ad/node_modules/ember-metrics/-private/utils/object-transforms.js","../rewritten-packages/ember-metrics.267359ad/node_modules/ember-metrics/metrics-adapters/pendo.js","../rewritten-packages/ember-metrics.267359ad/node_modules/ember-metrics/-private/utils/remove-from-dom.js","../rewritten-packages/ember-metrics.267359ad/node_modules/ember-metrics/services/metrics.js","../rewritten-packages/ember-metrics.267359ad/node_modules/ember-metrics/metrics-adapters/base.js","../rewritten-packages/ember-noop.ed8e325e/node_modules/ember-noop/helpers/noop.js","../rewritten-packages/ember-page-title.f657d8fd/node_modules/ember-page-title/services/page-title-list.js","../rewritten-packages/ember-page-title.f657d8fd/node_modules/ember-page-title/services/page-title.js","../rewritten-packages/ember-promise-helpers.93906283/node_modules/ember-promise-helpers/helpers/is-fulfilled.js","../rewritten-packages/ember-promise-helpers.93906283/node_modules/ember-promise-helpers/helpers/is-pending.js","../rewritten-packages/ember-promise-helpers.93906283/node_modules/ember-promise-helpers/helpers/await.js","../rewritten-packages/ember-resolver.ee2dc081/node_modules/ember-resolver/resolvers/classic/container-debug-adapter.js","../rewritten-packages/ember-resolver.ee2dc081/node_modules/ember-resolver/_app_/initializers/container-debug-adapter.js","../rewritten-packages/ember-resolver.ee2dc081/node_modules/ember-resolver/resolvers/classic/index.js","../rewritten-packages/ember-resolver.ee2dc081/node_modules/ember-resolver/utils/class-factory.js","../rewritten-packages/ember-responsive.2275ab5c/node_modules/ember-responsive/helpers/media.js","../rewritten-packages/ember-responsive.2275ab5c/node_modules/ember-responsive/initializers/responsive.js","../rewritten-packages/ember-responsive.2275ab5c/node_modules/ember-responsive/_app_/initializers/ember-responsive-breakpoints.js","../rewritten-packages/ember-responsive.2275ab5c/node_modules/ember-responsive/null-match-media.js","../rewritten-packages/ember-responsive.2275ab5c/node_modules/ember-responsive/_app_/services/media.js","../rewritten-packages/ember-responsive.2275ab5c/node_modules/ember-responsive/services/media.js","../../../../../node_modules/.pnpm/@embroider+macros@1.16.5_@glint+template@1.4.0/node_modules/@embroider/macros/src/addon/es-compat2.js","../../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.3.3/node_modules/@formatjs/intl/lib/src/error.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/modules/client/defs.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/defs.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/navigatorservice.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/trackinfo.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/isom/isomutils.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/isom/boxwriter.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/osp/ospformat.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/fisheyedefs.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/displayutils.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/displaypane.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/util/createdefaultnvrinfo.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/displaymanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/advanceddisplaymanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/streamstats.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/isom/isombuffer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/isom/h26xutil.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/isom/isom.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/isom/mp4writer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/htmlelementfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/html5mediasourcefactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/mediautils.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/html5mediastate.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/html5rendercontroller.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/liverendertimingstrategy.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/multivideoplayer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/renderclock.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/rendertimingmanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/nonliverendertimingstrategy.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/rendertimingstrategyfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/streamcontroller.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/mediasample.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/osp/ospconnection.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/osp/ospconnectclient.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/ospstreamretriever.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/audioospbackchannelconnector.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/httpstreamtokencache.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/httpstreamtokenmanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/httpstreamtokenrequester.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/httpbearertokenrequester.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/audiorendercontroller.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/audiocontextfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/audioplaybackprocessorworkletfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/oscar-audio-playback-processor.worklet.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/ptz/ptzcontroller.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/ptz/fisheyeptzcontroller.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/cachingstreamretriever.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/dynamicstreamtransport.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/dynamicstreamtransportfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/mediastreamelement.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/audiostreamer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/audioresampler.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/audiorecorder.js","src/guards/message-port.ts","src/helpers/port-map.ts","src/module.ts","src/helpers/extend-broker-implementation.ts","src/worker/worker.ts","src/factories/blob-event-factory.ts","src/factories/invalid-modification-error.ts","src/factories/not-supported-error.ts","../../source/symbols.ts","../../source/to-observer.ts","src/factories/video-frame.ts","src/functions/emit-not-supported-error.ts","src/factories/window.ts","src/factories/wrap-subscribe-function.ts","../../source/patch.ts","src/factories/mutations.ts","src/factories/map-subscribable-thing.ts","src/factories/prepend-subscribable-thing.ts","src/factories/on.ts","src/helpers/extend-worker-implementation.ts","src/factories/recorder-audio-worklet-node-factory.ts","src/factories/add-recorder-audio-worklet-module.ts","src/worklet/worklet.ts","src/factories/listener.ts","src/factories/post-message-factory.ts","src/functions/validate-state.ts","src/factories/abort-error.ts","src/globals.ts","src/helpers/is-constructible.ts","src/helpers/split-import-statements.ts","src/factories/add-audio-worklet-module.ts","src/helpers/get-value-for-key.ts","src/helpers/pick-element-from-set.ts","src/helpers/delete-passive-input-connection-to-audio-node.ts","src/helpers/get-event-listeners-of-audio-node.ts","src/helpers/set-internal-state-to-active.ts","src/guards/audio-worklet-node.ts","src/helpers/set-internal-state-to-passive.ts","src/helpers/set-internal-state-to-passive-when-necessary.ts","src/factories/analyser-node-constructor.ts","src/helpers/is-owned-by-context.ts","src/helpers/test-audio-buffer-copy-channel-methods-out-of-bounds-support.ts","src/factories/index-size-error.ts","src/helpers/wrap-audio-buffer-get-channel-data-method.ts","src/factories/audio-buffer-constructor.ts","src/constants.ts","src/helpers/is-active-audio-node.ts","src/factories/audio-buffer-source-node-constructor.ts","src/helpers/get-audio-node-connections.ts","src/helpers/get-audio-param-connections.ts","src/helpers/deactivate-active-audio-node-input-connections.ts","src/guards/audio-buffer-source-node.ts","src/guards/biquad-filter-node.ts","src/guards/constant-source-node.ts","src/guards/gain-node.ts","src/guards/oscillator-node.ts","src/guards/stereo-panner-node.ts","src/guards/audio-node.ts","src/guards/audio-node-output-connection.ts","src/helpers/insert-element-in-set.ts","src/helpers/add-active-input-connection-to-audio-param.ts","src/helpers/add-passive-input-connection-to-audio-param.ts","src/guards/native-audio-node-faker.ts","src/helpers/connect-native-audio-node-to-native-audio-node.ts","src/helpers/delete-active-input-connection.ts","src/helpers/delete-event-listeners-of-audio-node.ts","src/helpers/delete-passive-input-connection-to-audio-param.ts","src/helpers/disconnect-native-audio-node-from-native-audio-node.ts","src/helpers/get-native-audio-node.ts","src/helpers/get-native-audio-param.ts","src/helpers/is-part-of-a-cycle.ts","src/helpers/is-passive-audio-node.ts","src/helpers/test-audio-node-disconnect-method-support.ts","src/helpers/visit-each-audio-node-once.ts","src/guards/native-audio-node.ts","src/helpers/wrap-audio-node-disconnect-method.ts","src/factories/audio-node-constructor.ts","src/read-only-map.ts","src/factories/audio-worklet-node-constructor.ts","src/helpers/copy-from-channel.ts","src/helpers/copy-to-channel.ts","src/helpers/create-nested-arrays.ts","src/factories/audio-worklet-node-renderer-factory.ts","src/helpers/get-audio-worklet-processor.ts","src/factories/biquad-filter-node-constructor.ts","src/factories/channel-merger-node-constructor.ts","src/factories/channel-splitter-node-constructor.ts","src/factories/constant-source-node-constructor.ts","src/factories/convolver-node-constructor.ts","src/helpers/detach-array-buffer.ts","src/factories/delay-node-constructor.ts","src/factories/disconnect-multiple-outputs.ts","src/factories/dynamics-compressor-node-constructor.ts","src/factories/gain-node-constructor.ts","src/factories/invalid-state-error.ts","src/factories/invalid-access-error.ts","src/factories/iir-filter-node-constructor.ts","src/helpers/filter-buffer.ts","src/factories/media-stream-audio-destination-node-constructor.ts","src/helpers/test-promise-support.ts","src/factories/minimal-offline-audio-context-constructor.ts","src/helpers/assign-native-audio-node-option.ts","src/helpers/assign-native-audio-node-options.ts","src/helpers/test-analyser-node-get-float-time-domain-data-method-support.ts","src/helpers/assign-native-audio-node-audio-param-value.ts","src/helpers/wrap-audio-scheduled-source-node-start-method-negative-parameters.ts","src/helpers/wrap-audio-scheduled-source-node-stop-method-negative-parameters.ts","src/factories/native-audio-worklet-node-factory.ts","src/helpers/compute-buffer-size.ts","src/factories/native-audio-worklet-node-faker-factory.ts","src/factories/native-biquad-filter-node.ts","src/factories/native-channel-splitter-node.ts","src/helpers/wrap-channel-splitter-node.ts","src/helpers/intercept-connections.ts","src/factories/native-constant-source-node-faker-factory.ts","src/factories/native-delay-node.ts","src/factories/native-gain-node.ts","src/factories/native-iir-filter-node-faker-factory.ts","src/factories/native-panner-node-faker-factory.ts","src/factories/native-script-processor-node.ts","src/factories/native-stereo-panner-node-faker-factory.ts","src/factories/native-wave-shaper-node-faker-factory.ts","src/factories/oscillator-node-constructor.ts","src/factories/panner-node-constructor.ts","src/factories/periodic-wave-constructor.ts","src/factories/stereo-panner-node-constructor.ts","src/factories/unknown-error.ts","src/factories/wave-shaper-node-constructor.ts","src/helpers/get-first-sample.ts","src/helpers/is-dc-curve.ts","src/helpers/overwrite-accessors.ts","src/helpers/sanitize-periodic-wave-options.ts","src/helpers/set-value-at-time-until-possible.ts","src/helpers/test-audio-scheduled-source-node-start-method-negative-parameters-support.ts","src/helpers/test-audio-scheduled-source-node-stop-method-consecutive-calls-support.ts","src/helpers/test-audio-scheduled-source-node-stop-method-negative-parameters-support.ts","src/helpers/wrap-audio-scheduled-source-node-stop-method-consecutive-calls.ts","src/helpers/wrap-event-listener.ts","src/factories/add-active-input-connection-to-audio-node.ts","src/factories/add-passive-input-connection-to-audio-node.ts","src/factories/delete-active-input-connection-to-audio-node.ts","src/factories/get-audio-node-tail-time.ts","src/factories/cache-test-result.ts","src/factories/native-analyser-node-factory.ts","src/helpers/wrap-analyser-node-get-float-time-domain-data-method.ts","src/factories/get-audio-node-renderer.ts","src/factories/render-inputs-of-audio-node.ts","src/factories/analyser-node-renderer-factory.ts","src/factories/get-native-context.ts","src/factories/native-offline-audio-context-constructor.ts","src/factories/is-native-offline-audio-context.ts","src/factories/event-target-constructor.ts","src/factories/native-audio-context-constructor.ts","src/factories/is-native-audio-context.ts","src/factories/is-native-audio-node.ts","src/factories/is-native-audio-param.ts","src/factories/native-audio-worklet-node-constructor.ts","src/helpers/delete-active-input-connection-to-audio-param.ts","src/factories/add-audio-node-connections.ts","src/factories/add-connection-to-audio-node.ts","src/factories/increment-cycle-counter-factory.ts","src/factories/decrement-cycle-counter.ts","src/factories/detect-cycles.ts","src/guards/delay-node.ts","src/factories/native-audio-buffer-constructor.ts","src/factories/convert-number-to-unsigned-long.ts","src/factories/wrap-audio-buffer-copy-channel-methods.ts","src/factories/wrap-audio-buffer-copy-channel-methods-out-of-bounds.ts","src/factories/test-audio-buffer-constructor-support.ts","src/factories/add-silent-connection.ts","src/factories/render-inputs-of-audio-param.ts","src/factories/connect-audio-param.ts","src/factories/native-audio-buffer-source-node-factory.ts","src/helpers/wrap-audio-buffer-source-node-start-method-consecutive-calls.ts","src/helpers/wrap-audio-buffer-source-node-start-method-offset-clamping.ts","src/helpers/test-audio-buffer-source-node-start-method-consecutive-calls-support.ts","src/helpers/test-audio-buffer-source-node-start-method-offset-clamping-support.ts","src/helpers/test-audio-buffer-source-node-stop-method-nullified-buffer-support.ts","src/factories/wrap-audio-buffer-source-node-stop-method-nullified-buffer.ts","src/factories/render-automation.ts","src/factories/get-audio-param-renderer.ts","src/factories/audio-buffer-source-node-renderer-factory.ts","src/factories/audio-param-factory.ts","src/factories/audio-param-renderer.ts","src/factories/add-audio-param-connections.ts","src/factories/audio-destination-node-constructor.ts","src/factories/audio-destination-node-renderer-factory.ts","src/factories/native-audio-destination-node.ts","src/factories/biquad-filter-node-renderer-factory.ts","src/factories/set-audio-node-tail-time.ts","src/factories/monitor-connections.ts","src/factories/wrap-channel-merger-node.ts","src/factories/native-channel-merger-node-factory.ts","src/factories/channel-merger-node-renderer-factory.ts","src/factories/channel-splitter-node-renderer-factory.ts","src/helpers/sanitize-channel-splitter-options.ts","src/factories/native-constant-source-node-factory.ts","src/factories/constant-source-node-renderer-factory.ts","src/factories/native-convolver-node-factory.ts","src/factories/convolver-node-renderer-factory.ts","src/factories/delay-node-renderer-factory.ts","src/factories/native-dynamics-compressor-node-factory.ts","src/factories/dynamics-compressor-node-renderer-factory.ts","src/factories/gain-node-renderer-factory.ts","src/factories/render-native-offline-audio-context.ts","src/factories/test-offline-audio-context-current-time-support.ts","src/factories/iir-filter-node-renderer-factory.ts","src/factories/native-iir-filter-node-factory.ts","src/helpers/wrap-iir-filter-node-get-frequency-response-method.ts","src/factories/audio-listener-factory.ts","src/factories/minimal-base-audio-context-constructor.ts","src/factories/native-oscillator-node-factory.ts","src/factories/oscillator-node-renderer-factory.ts","src/factories/connected-native-audio-buffer-source-node-factory.ts","src/factories/native-wave-shaper-node-factory.ts","src/factories/native-panner-node-factory.ts","src/factories/panner-node-renderer-factory.ts","src/factories/native-periodic-wave-factory.ts","src/factories/native-stereo-panner-node-factory.ts","src/factories/stereo-panner-node-renderer-factory.ts","src/factories/wave-shaper-node-renderer-factory.ts","src/factories/is-secure-context.ts","src/factories/expose-current-frame-and-current-time.ts","src/factories/get-or-create-backup-offline-audio-context.ts","src/factories/evaluate-source.ts","src/factories/fetch-source.ts","src/factories/test-audio-worklet-processor-post-message-support.ts","src/factories/is-native-context.ts","src/factories/decode-audio-data.ts","src/factories/data-clone-error.ts","src/factories/encoding-error.ts","src/factories/base-audio-context-constructor.ts","src/factories/media-element-audio-source-node-constructor.ts","src/factories/native-media-element-audio-source-node.ts","src/factories/native-media-stream-audio-destination-node.ts","src/factories/media-stream-audio-source-node-constructor.ts","src/factories/native-media-stream-audio-source-node.ts","src/factories/native-media-stream-track-audio-source-node-factory.ts","src/factories/media-stream-track-audio-source-node-constructor.ts","src/factories/get-unrendered-audio-worklet-nodes.ts","src/factories/add-unrendered-audio-worklet-node.ts","src/factories/connect-multiple-outputs.ts","src/factories/delete-unrendered-audio-worklet-node.ts","src/factories/get-active-audio-worklet-node-inputs.ts","src/helpers/create-audio-worklet-processor.ts","src/helpers/create-audio-worklet-processor-promise.ts","src/helpers/clone-audio-worklet-node-options.ts","src/helpers/test-clonability-of-audio-worklet-node-options.ts","src/factories/get-backup-offline-audio-context.ts","src/factories/set-active-audio-worklet-node-inputs.ts","src/helpers/sanitize-audio-worklet-node-options.ts","src/helpers/test-audio-worklet-node-options-clonability.ts","src/factories/minimal-audio-context-constructor.ts","src/helpers/is-valid-latency-hint.ts","src/helpers/deactivate-audio-graph.ts","src/factories/web-audio-media-recorder.ts","src/factories/create-native-offline-audio-context.ts","src/factories/start-rendering.ts","src/factories/webm-pcm-media-recorder.ts","src/functions/read-variable-size-integer-length.ts","src/factories/native-blob-event-constructor.ts","src/factories/read-variable-size-integer.ts","src/factories/read-element-content.ts","src/factories/read-element-type.ts","src/factories/decode-web-m-chunk.ts","src/factories/event-target-factory.ts","src/factories/native-media-recorder-constructor.ts","src/factories/native-media-recorder.ts","src/factories/media-recorder-constructor.ts","src/functions/wrap-event-listener.ts","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/mediarecorderfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/remotehttpstreamtokenrequester.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/util/queue.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/media/analyticsdata.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/metadatacontroller.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/fisheye/fisheyeutils.js","../../../../../node_modules/.pnpm/gl-matrix@3.4.3/node_modules/gl-matrix/esm/common.js","../../../../../node_modules/.pnpm/gl-matrix@3.4.3/node_modules/gl-matrix/esm/vec3.js","../../../../../node_modules/.pnpm/gl-matrix@3.4.3/node_modules/gl-matrix/esm/mat4.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/fisheye/fisheyeptzrenderer.js","../../../../../node_modules/.pnpm/gl-matrix@3.4.3/node_modules/gl-matrix/esm/quat.js","../../../../../node_modules/.pnpm/gl-matrix@3.4.3/node_modules/gl-matrix/esm/vec4.js","../../../../../node_modules/.pnpm/gl-matrix@3.4.3/node_modules/gl-matrix/esm/mat3.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/fisheye/fisheyepanoramarenderer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/fisheye/shaders.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/display/videopresenter.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/html5audiorenderer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/webaudiorenderer.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/audiorendererfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/websocketstreamtransport.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/websocketstreamtransportfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/webrtcconnection.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/webrtcconnectionmanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/webrtcstreamtransportidqueue.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/webrtcstreamtransport.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/streaming/webrtcstreamtransportfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/playback/oscarfactory.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/timeline/eventspansubscription.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/util/objecturlmanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/util/priorityqueue.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/nvrmanager/nvrmanager.js","../../../../../node_modules/.pnpm/@oecommon+oscar-js@2.5.95_@oecommon+plasma-js@2.1.19/node_modules/@oecommon/oscar-js/src/client/nvrmanager/adcnvrconnection.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/events/basicevent.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/events/dataevent.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/events/eventtarget.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/time/timedefs.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/time/duration.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/time/calendardate.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/time/instant.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/exec/simpletimeprovider.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/exec/simplereactor.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/exec/timer.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/exec/promisesource.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/exec/cancellationerror.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/logdefs.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/logutil.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/loggernode.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/logregistry.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/writers/consolelogwriter.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/writers/websocketlogwriter.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/logconfig.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/log/logger.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/net/websocketfactory.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/util/binreader.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/util/binwriter.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/util/movingaverage.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/util/movingaveragewithvariance.js","../../../../../node_modules/.pnpm/@oecommon+plasma-js@2.1.19/node_modules/@oecommon/plasma-js/src/util/rangeutils.js","src/debug-build.ts","src/eventbuilder.ts","src/helpers.ts","webpack://customer-site/../../src/eventbuilder.ts?e994","webpack://customer-site/../../../src/integrations/linkederrors.ts?b42c","src/utils/hasTracingEnabled.ts","src/tracing/trace.ts","src/tracing/span.ts","src/semanticAttributes.ts","src/tracing/transaction.ts","src/tracing/idletransaction.ts","src/tracing/utils.ts","src/tracing/errors.ts","src/tracing/sampling.ts","src/tracing/hubextensions.ts","src/common/debug-build.ts","src/browser/types.ts","src/browser/web-vitals/lib/bindReporter.ts","src/browser/web-vitals/lib/getNavigationEntry.ts","src/browser/web-vitals/lib/getActivationStart.ts","src/browser/web-vitals/lib/initMetric.ts","src/browser/web-vitals/lib/generateUniqueID.ts","src/browser/web-vitals/lib/observe.ts","src/browser/web-vitals/lib/onHidden.ts","src/browser/web-vitals/getCLS.ts","src/browser/web-vitals/lib/getVisibilityWatcher.ts","src/browser/web-vitals/getFID.ts","src/browser/web-vitals/getLCP.ts","src/browser/instrument.ts","src/browser/metrics/utils.ts","src/browser/metrics/index.ts","src/browser/request.ts","src/common/fetch.ts","src/browser/browsertracing.ts","src/browser/router.ts","src/browser/backgroundtab.ts","src/index.ts","src/instrument/dom.ts","src/url.ts","src/integrations/breadcrumbs.ts","src/integrations/dedupe.ts","src/integrations/globalhandlers.ts","src/integrations/httpcontext.ts","src/integrations/linkederrors.ts","src/integrations/trycatch.ts","webpack://customer-site/../../src/debug-build.ts?3afa","src/eventProcessors.ts","src/exports.ts","src/hub.ts","src/integration.ts","src/integrations/functiontostring.ts","src/integrations/inboundfilters.ts","src/scope.ts","src/session.ts","src/tracing/dynamicSamplingContext.ts","src/utils/applyScopeDataToEvent.ts","src/utils/prepareEvent.ts","src/utils/spanUtils.ts","src/version.ts","src/captureconsole.ts","src/aggregate-errors.ts","src/baggage.ts","src/browser.ts","src/instrument/_handlers.ts","src/instrument/console.ts","src/instrument/fetch.ts","src/instrument/globalError.ts","src/instrument/globalUnhandledRejection.ts","src/vendor/supportsHistory.ts","src/instrument/history.ts","src/instrument/xhr.ts","src/is.ts","src/logger.ts","src/misc.ts","src/normalize.ts","src/memo.ts","src/object.ts","src/severity.ts","src/stacktrace.ts","src/string.ts","src/supports.ts","src/syncpromise.ts","src/time.ts","src/tracing.ts","src/worldwide.ts","../../../../../node_modules/.pnpm/automation-events@7.0.8/node_modules/automation-events/build/es5/bundle.js","../../../../../node_modules/.pnpm/bowser@2.11.0/node_modules/bowser/es5.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/addLeadingZeros/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/assign/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/cloneObject/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/defaultLocale/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/defaultOptions/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/format/formatters/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/format/lightFormatters/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/format/longFormatters/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/getUTCDayOfYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/getUTCISOWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/getUTCISOWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/getUTCWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/getUTCWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/protectedTokens/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/requiredArgs/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/startOfUTCISOWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/startOfUTCISOWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/startOfUTCWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/startOfUTCWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/_lib/toInteger/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/addMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/defaultLocale/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/defaultOptions/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/protectedTokens/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/roundingMethods/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/toInteger/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addDays/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addHours/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addMinutes/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addMonths/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/compareAsc/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/constants/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInCalendarDays/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInCalendarMonths/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInHours/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInMinutes/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInSeconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfDay/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfMonth/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/format/formatters/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/format/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getDate/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isAfter/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isBefore/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isDate/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isEqual/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isValid/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/max/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/min/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/assign/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setDate/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setDay/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setMinutes/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setMonth/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getDaysInMonth/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setSeconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfDay/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfHour/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfYear/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subHours/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMinutes/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/toDate/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/format/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/isDate/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/isValid/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/_lib/buildFormatLongFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/_lib/buildLocalizeFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/_lib/buildMatchFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/_lib/buildMatchPatternFn/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/en-US/_lib/formatDistance/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/en-US/_lib/formatLong/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/en-US/_lib/formatRelative/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/en-US/_lib/localize/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/en-US/_lib/match/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/locale/en-US/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/subMilliseconds/index.js","../../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/toDate/index.js","../../../../../node_modules/.pnpm/deepmerge@4.2.2/node_modules/deepmerge/dist/cjs.js","../../../../../node_modules/.pnpm/detect-browser@5.3.0/node_modules/detect-browser/es/index.js","src/-private/ember-environment.js","src/-private/external/environment.js","src/-private/external/scheduler/policies/bounded-policy.js","src/-private/external/scheduler/policies/drop-policy.js","src/-private/external/scheduler/policies/enqueued-policy.js","src/-private/external/scheduler/policies/execution-states.js","src/-private/external/scheduler/policies/keep-latest-policy.js","src/-private/external/scheduler/policies/restartable-policy.js","src/-private/external/scheduler/refresh.js","src/-private/external/scheduler/state-tracker/state.js","src/-private/external/scheduler/state-tracker/state-tracker.js","src/-private/external/scheduler/state-tracker/null-state-tracker.js","src/-private/external/scheduler/state-tracker/null-state.js","src/-private/external/scheduler/scheduler.js","src/-private/external/scheduler/policies/unbounded-policy.js","src/-private/external/task-factory.js","src/-private/external/task-instance/cancelation.js","src/-private/external/task-instance/completion-states.js","src/-private/external/generator-state.js","src/-private/external/task-instance/executor.js","src/-private/external/task-instance/initial-state.js","src/-private/external/task/default-state.js","src/-private/external/task/task-group.js","src/-private/external/task/task.js","src/-private/external/task/taskable.js","src/-private/external/yieldables.js","src/-private/helpers.js","src/-private/scheduler/ember-scheduler.js","src/-private/task-factory.js","src/-private/task-group.js","src/-private/external/task-instance/base.js","src/-private/task-instance.js","src/-private/task-properties.js","src/-private/task.js","src/-private/taskable-mixin.js","src/-private/tracked-state.js","src/helpers/perform.ts","src/-private/async-arrow-runtime.js","src/-private/utils.js","src/-private/external/task-decorators.js","src/-private/task-decorators.js","src/-private/task-public-api.js","src/-private/cancelable-promise-helpers.js","src/-private/wait-for.js","../src/index.js","../index.js","../../../../../node_modules/.pnpm/ember-focus-trap@1.1.1_ember-source@4.12.4_@babel+core@7.24.9_@glimmer+component@1.1.2_@babel_vvuia6snx5ae3hcxo6zlbkc3w4/node_modules/ember-focus-trap/dist/modifiers/focus-trap.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/utils/get-task.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/cancel-task.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/run-task.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/schedule-task.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/throttle-task.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/poll-task.js","../../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@3.1.0_@glint+template@1.4.0_ember-source@4.12.4_@bab_gwthlkopk5nm4tapzqbuz2i52i/node_modules/ember-lifeline/dist/debounce-task.js","../src/-private/class-based/modifier-manager.ts","../src/-private/class-based/modifier.ts","../src/-private/function-based/modifier.ts","../src/-private/function-based/modifier-manager.ts","../../../../../node_modules/.pnpm/es5-ext@0.10.64/node_modules/es5-ext/global.js","../../../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../../../../../node_modules/.pnpm/fast-unique-numbers@9.0.8/node_modules/fast-unique-numbers/build/es5/bundle.js","../../../../../node_modules/.pnpm/mic-check@1.1.0/node_modules/mic-check/lib/index.js","../../../../../node_modules/.pnpm/mic-check@1.1.0/node_modules/mic-check/lib/requestMediaPermissions.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/af.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-dz.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-kw.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-ly.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-ma.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-ps.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-sa.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar-tn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ar.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/az.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/be.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/bg.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/bm.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/bn-bd.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/bn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/bo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/br.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/bs.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ca.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/cs.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/cv.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/cy.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/da.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/de-at.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/de-ch.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/de.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/dv.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/el.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-au.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-ca.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-gb.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-ie.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-il.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-in.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-nz.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/en-sg.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/eo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/es-do.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/es-mx.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/es-us.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/es.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/et.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/eu.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fa.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fi.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fil.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fr-ca.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fr-ch.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fr.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/fy.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ga.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/gd.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/gl.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/gom-deva.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/gom-latn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/gu.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/he.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/hi.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/hr.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/hu.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/hy-am.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/id.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/is.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/it-ch.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/it.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ja.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/jv.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ka.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/kk.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/km.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/kn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ko.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ku-kmr.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ku.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ky.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/lb.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/lo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/lt.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/lv.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/me.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/mi.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/mk.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ml.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/mn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/mr.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ms-my.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ms.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/mt.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/my.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/nb.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ne.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/nl-be.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/nl.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/nn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/oc-lnc.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/pa-in.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/pl.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/pt-br.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/pt.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ro.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ru.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sd.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/se.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/si.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sk.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sl.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sq.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sr-cyrl.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sr.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ss.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sv.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/sw.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ta.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/te.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tet.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tg.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/th.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tk.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tl-ph.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tlh.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tr.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tzl.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tzm-latn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/tzm.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ug-cn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/uk.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/ur.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/uz-latn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/uz.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/vi.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/x-pseudo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/yo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/zh-cn.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/zh-hk.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/zh-mo.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/locale/zh-tw.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js","../../../../../node_modules/.pnpm/multi-buffer-data-view@5.0.14/node_modules/multi-buffer-data-view/build/es5/bundle.js","../../../../../node_modules/.pnpm/pikaday@1.8.2/node_modules/pikaday/pikaday.js","src/utils/isBrowser.js","src/utils/debounce.js","src/utils/isFunction.js","src/utils/getStyleComputedProperty.js","src/utils/getParentNode.js","src/utils/getScrollParent.js","src/utils/getReferenceNode.js","src/utils/isIE.js","src/utils/getOffsetParent.js","src/utils/getRoot.js","src/utils/findCommonOffsetParent.js","src/utils/isOffsetContainer.js","src/utils/getScroll.js","src/utils/getBordersSize.js","src/utils/getWindowSizes.js","src/utils/getClientRect.js","src/utils/getBoundingClientRect.js","src/utils/getOffsetRectRelativeToArbitraryNode.js","src/utils/includeScroll.js","src/utils/isFixed.js","src/utils/getFixedPositionOffsetParent.js","src/utils/getBoundaries.js","src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","src/utils/computeAutoPlacement.js","src/utils/getReferenceOffsets.js","src/utils/getOuterSizes.js","src/utils/getOppositePlacement.js","src/utils/getPopperOffsets.js","src/utils/find.js","src/utils/runModifiers.js","src/utils/findIndex.js","src/methods/update.js","src/utils/isModifierEnabled.js","src/utils/getSupportedPropertyName.js","src/methods/destroy.js","src/utils/getWindow.js","src/utils/setupEventListeners.js","src/methods/enableEventListeners.js","src/methods/disableEventListeners.js","src/utils/removeEventListeners.js","src/utils/isNumeric.js","src/utils/setStyles.js","src/modifiers/computeStyle.js","src/utils/isModifierRequired.js","src/methods/placements.js","src/utils/clockwise.js","src/modifiers/index.js","src/methods/defaults.js","src/modifiers/shift.js","src/modifiers/offset.js","src/modifiers/preventOverflow.js","src/modifiers/keepTogether.js","src/modifiers/arrow.js","src/modifiers/flip.js","src/utils/getOppositeVariation.js","src/modifiers/inner.js","src/modifiers/hide.js","src/utils/getRoundedOffsets.js","src/modifiers/applyStyle.js","src/utils/setAttributes.js","src/index.js","../rewritten-packages/ember-tracked-storage-polyfill.6202876e/node_modules/ember-tracked-storage-polyfill/index.js","src/-private/map.ts","src/-private/set.ts","../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","src/-private/array.ts","../../../../../node_modules/.pnpm/websocket@1.0.35/node_modules/websocket/lib/browser.js","../../../../../node_modules/.pnpm/websocket@1.0.35/node_modules/websocket/lib/version.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/classCallCheck.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/createClass.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/nonIterableRest.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/slicedToArray.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/toPrimitive.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/toPropertyKey.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/typeof.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/classCallCheck.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/createClass.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/nonIterableRest.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/slicedToArray.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/toPrimitive.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/toPropertyKey.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/typeof.js","../../../../../node_modules/.pnpm/@babel+runtime@7.25.4/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/OverloadYield.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/bind.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/utils.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/AxiosError.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/toFormData.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/buildURL.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/InterceptorManager.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/defaults/transitional.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/platform/browser/index.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/platform/browser/classes/FormData.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/platform/browser/classes/Blob.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/platform/common/utils.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/platform/index.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/formDataToJSON.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/defaults/index.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/parseHeaders.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/AxiosHeaders.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/transformData.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/cancel/isCancel.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/cancel/CanceledError.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/settle.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/speedometer.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/progressEventReducer.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/throttle.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/cookies.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/buildFullPath.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/combineURLs.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/mergeConfig.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/resolveConfig.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/adapters/xhr.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/parseProtocol.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/composeSignals.js","../../../../../node_modules/.pnpm/@babel+runtime@7.23.9/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/trackStream.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/adapters/fetch.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/adapters/adapters.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/null.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/dispatchRequest.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/env/data.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/validator.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/core/Axios.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/cancel/CancelToken.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/HttpStatusCode.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/axios.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/spread.js","../../../../../node_modules/.pnpm/axios@1.7.5/node_modules/axios/lib/helpers/isAxiosError.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/_lib/newDateUTC/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/_lib/tzTokenizeDate/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/_lib/tzParseTimezone/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/_lib/tzPattern/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/_lib/tzIntlTimeZoneName/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/format/formatters/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/format/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/toDate/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/utcToZonedTime/index.js","../../../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.29.3/node_modules/date-fns-tz/esm/zonedTimeToUtc/index.js","../src/runtime.ts","../../../../../node_modules/.pnpm/tslib@2.6.3/node_modules/tslib/tslib.es6.mjs"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |PageViewContainer|>\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n <:default>\\n {{#unless this.troubleConditions.troubles.length}}\\n \\n {{else}}\\n \\n <:header>\\n \\n \\n \\n\\n \\n {{/unless}}\\n \\n <:error as |PageViewError|>\\n \\n \\n \\n {{#if this.mutes}}\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n <:default>\\n \\n \\n <:error as |PageViewError|>\\n \\n \\n \\n {{/if}}\\n \\n\",{ moduleName: \"customer-site/alerts-issues/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n \\n \\n\\n <:error as |PageViewError|>\\n \\n \\n \\n\",{ moduleName: \"customer-site/alerts-issues/service-appointments/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n
\\n {{#each data.request.requestedTimes as |timeframe|}}\\n
\\n \\n\\n

\\n

{{timeframe.formattedLocalStartTime}}
\\n
{{timeframe.formattedDurations}}
\\n

\\n\\n {{#if this.moreThanOneTimeframe}}\\n \\n {{/if}}\\n\\n \\n
\\n {{/each}}\\n\\n \\n\\n {{#unless (await this.onlyOtherReasonAvailable)}}\\n

{{t \\'components.service-appointments.appt-card.issues\\'}}

\\n {{#each data.request.requestedReasons as |reason|}}\\n
\\n \\n

{{reason.description}}

\\n
\\n {{/each}}\\n {{/unless}}\\n\\n

{{t \\'components.service-appointments.appt-card.note\\'}}

\\n
\\n \\n
\\n
\\n\",{ moduleName: \"customer-site/alerts-issues/service-appointments/service-appointment/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n
\\n

{{tc this \\'requestReasonsPrompt\\'}}

\\n\\n \\n \\n {{#if item.props.troubleConditions}}\\n \\n {{/if}}\\n

{{item.label}}

\\n \\n\\n
\\n \\n {{#if this.displayNoteSection}}\\n \\n {{/if}}\\n
\\n
\\n\",{ moduleName: \"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default>\\n
\\n

{{tc this \\'redirectingMessage\\'}}

\\n \\n
\\n \\n
\",{ moduleName: \"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |data|>\\n \\n\\n
\\n

{{tc this \\'datePrompt\\'}}

\\n\\n \\n {{#let item.props.date as |d|}}\\n
{{format-date-tz d month=\\\"short\\\"}}
\\n
{{format-date-tz d day=\\\"numeric\\\"}}
\\n
{{format-date-tz d weekday=\\\"short\\\"}}
\\n {{/let}}\\n \\n\\n \\n
\\n \\n\\n\",{ moduleName: \"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |data|>\\n \\n\\n
\\n

{{tc this \\'timesPrompt\\'}}

\\n \\n
\\n \\n\\n\",{ moduleName: \"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |PageViewContainer|>\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n <:default>\\n {{#if (this.isTroubleCondition this.item.model)}}\\n {{#if this.item.model.extraData.iconData.hasIcon}}\\n \\n {{/if}}\\n
\\n
{{this.item.model.description}}
\\n

{{this.item.model.extraData.description}}

\\n {{#if this.showKnowledgeBaseAsLink }}\\n

\\n \\n

\\n {{/if}}\\n
\\n\\n
\\n \\n\\n \\n
\\n {{/if}}\\n \\n <:error as |PageViewError|>\\n \\n \\n \\n \\n
\",{ moduleName: \"customer-site/alerts-issues/trouble-condition/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n
\\n
\\n {{tc this (if data.extraData.isBuzzing \\'descriptionWithPausingMeterOption\\' \\'descriptionWithDismissOnly\\')}}\\n
\\n
\\n\\n
\\n {{#if data.extraData.isBuzzing}}\\n \\n {{/if}}\\n\\n \\n
\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"customer-site/alerts-issues/water-leak-alert/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n {{!-- The mobile app handles the UI via NativeBridge --}}\\n {{#unless (is-mobile-app)}}\\n
\\n

{{tc this \\'messageHeading\\'}}

\\n

{{tc this \\'messageBody\\'}}

\\n {{#if this.contextManager.urlAfterError}}\\n \\n {{/if}}\\n
\\n {{/unless}}\\n
\\n
\\n\",{ moduleName: \"customer-site/app-error/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @notes}}\\n \\n {{#each this.renderedNotes as |note|}}\\n \\n

{{format-date-tz note.updatedAt format=\\\"shortDateTimeFormat\\\"}}

\\n

{{note.content}}

\\n
\\n {{/each}}\\n\\n {{#if this.isExpandable}}\\n \\n {{t \\'generic.showMore\\'}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/app/app-nav/personal-safety-nav/notes/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { UiActionableCardSignature } from 'customer-site/components/ui/actionable-card';\nimport type PersonalSafetyNote from 'customer-site/models/safety-button/note';\n\nconst NOTES_BATCH = 5;\n\ninterface AlarmSafetyNavNotesSignature {\n Element: UiActionableCardSignature['Element'];\n Args: UiActionableCardSignature['Args'] & {\n notes?: PersonalSafetyNote[];\n };\n}\n\n/**\n * @classdesc\n * Component for the personal safety navigation notes\n */\nexport default class PersonalSafetyNavNotes extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * The notes to be rendered\n */\n @tracked\n renderedNotes: PersonalSafetyNote[] = this.args.notes?.slice(0, NOTES_BATCH) ?? [];\n\n /**\n * Checks if the notes can be expanded\n */\n get isExpandable(): boolean {\n return (this.args.notes?.length ?? 0) > this.renderedNotes.length;\n }\n\n /**\n * Shows more notes from the available list\n */\n @action\n showMore(): void {\n const renderedNotesLength = this.renderedNotes.length;\n\n this.renderedNotes = this.args.notes?.slice(0, renderedNotesLength + NOTES_BATCH) ?? [];\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppNav::PersonalSafetyNav::Notes': typeof PersonalSafetyNavNotes;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n\",{ moduleName: \"customer-site/components/app/app-nav/personal-safety-nav/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { NoteType } from 'customer-site/models/safety-button/note';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type PersonalSafetyNote from 'customer-site/models/safety-button/note';\nimport type PersonalSafetyService from 'customer-site/services/personal-safety';\n\n/**\n * @classdesc\n * Component for the personal safety navigation\n */\nexport default class PersonalSafetyNav extends Component {\n @service declare personalSafety: PersonalSafetyService;\n @service declare modals: ModalService;\n @service declare intl: ADCIntlService;\n\n @alias('personalSafety.alarm')\n declare alarm: PersonalSafetyService['alarm'];\n\n /**\n * Gets the recent notes from the personal safety service\n */\n get recentNotes(): PersonalSafetyNote[] | undefined {\n return this.personalSafety.notes?.filter((note) => note.noteType === NoteType.NONE);\n }\n\n /**\n * Gets the important notes from the personal safety service\n */\n get importantNotes(): PersonalSafetyNote[] | undefined {\n return this.personalSafety.notes?.filter((note) => note.noteType === NoteType.IMPORTANT);\n }\n\n /**\n * Gets the alarm notes from the personal safety service\n */\n get alarmPsapContacted(): boolean {\n return this.alarm?.isPSAPContacted === true;\n }\n\n /**\n * Sets the alarm notes from the personal safety service\n */\n set alarmPsapContacted(value: boolean) {\n const { alarm } = this;\n assert('[PersonalSafetyNav] this.alarm must be defined', alarm);\n alarm.isPSAPContacted = value;\n }\n\n /**\n * Gets the alarm notes from the personal safety service\n */\n get alarmFalseAlarm(): boolean {\n return this.alarm?.isCanceled === true;\n }\n\n /**\n * Sets the alarm notes from the personal safety service\n */\n set alarmFalseAlarm(value: boolean) {\n const { alarm } = this;\n assert('[PersonalSafetyNav] this.alarm must be defined', alarm);\n alarm.isCanceled = value;\n if (value && this.personalSafety.customerProfile?.phoneNumber) {\n alarm.canceledBy = this.personalSafety.customerProfile.phoneNumber;\n }\n }\n\n /**\n * Saves the alarm notes from the personal safety service\n */\n async saveAlarm(): Promise {\n const { alarm } = this;\n assert('[PersonalSafetyNav] this.alarm must be defined', alarm);\n await alarm.save();\n }\n\n /**\n * Opens a modal with a promise to save the alarm notes\n */\n openModal(title: string, promiseFn: () => Promise, cancelOnClickFunction: () => void): void {\n this.modals.showPromiseModal({\n title,\n promiseFn,\n stepConfirm: {\n bodyText: title,\n buttonText: this.intl.t('generic.confirm'),\n buttonCss: 'btn-color-primary',\n displayCancel: true\n },\n stepPromise: {\n bodyText: '',\n displayCancel: true,\n cancelOnClickFunction\n },\n stepSuccess: {\n bodyText: this.intl.t('generic.savedSuccessfully'),\n buttonText: this.intl.t('generic.ok'),\n buttonCss: 'btn-color-primary',\n successOnClickFunction: () => {\n this.modals.closeModal();\n }\n },\n stepFailure: {\n bodyText: this.intl.t('generic.errorSaving'),\n buttonText: this.intl.t('generic.retry'),\n buttonCss: 'btn-color-primary',\n showError: false,\n allowRetry: true,\n displayCancel: true,\n cancelOnClickFunction\n },\n css: 'confirmation-modal'\n });\n }\n\n /**\n * Opens a modal to confirm the PSAP contacted action\n */\n @action openPsapContactedModal(): void {\n this.openModal(\n this.intl.t('operator.confirmPsapContactedAction'),\n async () => {\n this.alarmPsapContacted = true;\n\n await this.saveAlarm();\n },\n () => {\n this.alarmPsapContacted = false;\n }\n );\n }\n\n /**\n * Opens a modal to confirm the false alarm action\n */\n @action openFalseAlarmModal(): void {\n this.openModal(\n this.intl.t('operator.confirmFalseAlarmAction'),\n async () => {\n this.alarmFalseAlarm = true;\n\n await this.saveAlarm();\n },\n () => {\n this.alarmFalseAlarm = false;\n }\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppNav::PersonalSafetyNav': typeof PersonalSafetyNav;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n
\\n \\n

{{this.notesCategoryTitle}}

\\n
\\n \\n
\\n
\\n \\n \\n <:detail>\\n \\n {{#unless this.isPermanent}}\\n
\\n {{format-date-tz note.expirationDate month=\\\"2-digit\\\" day=\\\"2-digit\\\" year=\\\"numeric\\\"}}\\n
\\n {{/unless}}\\n \\n
\\n
\\n {{#if this.moreThanTwoNotes}}\\n \\n {{/if}}\\n
\\n
\\n\",{ moduleName: \"customer-site/components/contextual-info/property-notes/property-note-block/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { gt } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { PERMANENT_ICON, TEMPORARY_ICON } from '../../../settings/monitoring-station/property-notes-simple-list/index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ArrayProxy from '@ember/array/proxy';\nimport type OperatorPropertyNote from 'customer-site/models/visual-verification/property-note';\nimport './_style.scss';\n\ninterface OperatorPropertyNotesSimpleListSignature {\n Args: {\n items: OperatorPropertyNote[] | ArrayProxy;\n };\n}\n\n@intlPath({ path: 'contextual-info/property-notes/property-note-block' })\nexport default class OperatorPropertyNoteBlock extends Component {\n @service declare intl: ADCIntlService;\n\n @tracked expandNotes = true;\n @tracked showAllNotes = false;\n\n /**\n * Action to trigger whether to expand property notes or not.\n */\n @action\n toggleExpand(): void {\n this.expandNotes = !this.expandNotes;\n }\n\n /**\n * Action to show all available notes\n */\n @action\n triggerShowNotes(): void {\n this.showAllNotes = !this.showAllNotes;\n }\n\n /**\n * Check if 'args.items' containt more than 2 property notes\n */\n @gt('args.items.length', 2)\n declare moreThanTwoNotes: boolean;\n\n /**\n * Notes to be rendered; show maximum 2 by default, show all if \"Show more\" button is clicked\n */\n @computed('args.items', 'moreThanTwoNotes', 'showAllNotes')\n get notesToBeRendered(): OperatorPropertyNote[] | ArrayProxy {\n const {\n args: { items }\n } = this;\n if (this.moreThanTwoNotes) {\n return this.showAllNotes ? items : items.slice(0, 2);\n }\n\n return items;\n }\n\n /**\n * Get text for Show More / Show Less button\n */\n get expandButtonText(): string {\n return this.intl.t(this.showAllNotes ? 'generic.showLess' : 'generic.showMore');\n }\n\n /**\n * Check if 'args.items' contain PERMANENT property notes\n */\n @computed('args.items.expirationDateUtc')\n get isPermanent(): boolean {\n return !(this.args.items as OperatorPropertyNote[])[0]?.expirationDate;\n }\n\n /**\n * Notes category icon\n */\n @computed('isPermanent')\n get notesCategoryIcon(): string {\n return this.isPermanent ? PERMANENT_ICON : TEMPORARY_ICON;\n }\n\n /**\n * Notes category title\n */\n @computed('isPermanent')\n get notesCategoryTitle(): string {\n return this.intl.tc(this, this.isPermanent ? 'permanent' : 'temporary');\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ContextualInfo::PropertyNotes::PropertyNoteBlock': typeof OperatorPropertyNoteBlock;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if (or this.temporaryPropertyNotes.length this.permanentPropertyNotes.length)}}\\n
\\n

{{tc this \\'propertyNotes\\'}}

\\n {{#if this.temporaryPropertyNotes.length}}\\n \\n {{/if}}\\n {{#if this.permanentPropertyNotes.length}}\\n \\n {{/if}}\\n
\\n{{/if}}\\n\",{ moduleName: \"customer-site/components/contextual-info/property-notes/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type Store from '@ember-data/store';\nimport type ArrayProxy from '@ember/array/proxy';\nimport type OperatorPropertyNote from 'customer-site/models/visual-verification/property-note';\nimport './_style.scss';\n\n@intlPath({ path: 'contextual-info/property-notes' })\nexport default class OperatorPropertyNotes extends Component {\n @service declare store: Store;\n\n constructor(owner: unknown, args: any) {\n super(owner, args);\n\n this.populatePropertyNotes.perform();\n }\n\n @tracked temporaryPropertyNotes: OperatorPropertyNote[] | ArrayProxy = [];\n @tracked permanentPropertyNotes: OperatorPropertyNote[] | ArrayProxy = [];\n\n /**\n * Task fetching available property notes\n */\n populatePropertyNotes = task({ drop: true }, async () => {\n const propertyNotes = await this.store.findAll('visual-verification/property-note').then((res) => res);\n this.temporaryPropertyNotes = propertyNotes.filter((note: OperatorPropertyNote) => {\n return note.expirationDate;\n });\n this.permanentPropertyNotes = propertyNotes.filter((note: OperatorPropertyNote) => {\n return !note.expirationDate;\n });\n });\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ContextualInfo::PropertyNotes': typeof OperatorPropertyNotes;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n

{{tc this \\'personOnsiteLikelihood\\'}}

\\n {{#if this.personOnsiteProcessedIndicators}}\\n
\\n \\n
\\n

{{tc this \\'personLikelyOnsite\\'}}

\\n
    \\n {{#each this.personOnsiteProcessedIndicators as |personOnsiteLabel|}}\\n
  • \\n

    {{personOnsiteLabel.time}}

    \\n {{personOnsiteLabel.label}}\\n
  • \\n {{/each}}\\n
\\n
\\n
\\n {{else}}\\n
\\n

{{tc this \\'noPersonOnsite\\'}}

\\n
\\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/contextual-info/person-on-site/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport {\n Camera,\n Partition,\n ZwaveLock,\n AccessCardReader,\n Motion,\n GarageDoor,\n Glassbreak,\n Contact,\n OriginWirelessDevice\n} from '../../../enums/DeviceType';\nimport {\n VideoCameraTriggered,\n VideoEventTriggered,\n VideoAnalyticsDetection,\n VideoAnalytics2Detection,\n Disarmed,\n ArmedStay,\n ArmedAway,\n DoorUnlocked,\n DoorLocked,\n DoorAccessed,\n BadLockUserCode,\n DoorAccessedDoubleSwipe,\n DoorFailedAccess,\n UnknownCardFormatRead,\n DoorHeldOpen,\n DoorForcedOpen,\n ExitButtonPressed,\n AccessControlDoorAccessGranted,\n Alarm,\n Opened,\n Closed,\n Tamper,\n WrongPinCode,\n KeypadTamperAlarm,\n ThirdPartyAnalyticEvent\n} from '../../../enums/EventType';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type PersonOnSiteIndicator from 'customer-site/models/visual-verification/person-on-site/indicator';\nimport type VisualVerification from 'customer-site/services/visual-verification';\nimport './_style.scss';\n\ninterface PersonOnSiteArgs {\n personOnsiteIndicators: PersonOnSiteIndicator[];\n newPersonOnsiteIndicators: PersonOnSiteIndicator[];\n}\n\ntype OnsiteLabels = {\n label: string;\n newLabel: boolean;\n time: string;\n tooltip: string;\n};\n\ntype PersonOnsiteLabels = {\n [key: number]: {\n [key: number]: string[];\n };\n};\n\ntype TOptions = Parameters[2];\n\n@intlPath({ path: 'contextual-info/person-on-site' })\nexport default class PersonOnSite extends Component {\n @service declare intl: ADCIntlService;\n @service declare visualVerification: VisualVerification;\n\n // Labels object used to map Person On-Site labels.\n buildPersonOnsiteLabelsObject(\n deviceType: number,\n eventType: number,\n args: TOptions,\n newLabel: boolean,\n timestamp: Date,\n tooltip = ''\n ): OnsiteLabels {\n const fnGetItem = (key: string, formatMap: TOptions, tooltip: string): OnsiteLabels => ({\n label: String(key === '' ? '' : this.intl.tc(this, key, formatMap)),\n newLabel,\n time: this.visualVerification.convertTime(timestamp),\n tooltip\n });\n const labelKeyMap: PersonOnsiteLabels = {\n [Camera]: {\n [VideoCameraTriggered]: ['personDetectedOnVideo'],\n [VideoEventTriggered]: ['personDetectedOnVideo'],\n [VideoAnalytics2Detection]: ['personDetectedOnVideo'],\n [VideoAnalyticsDetection]: ['personDetectedOnVideo'],\n [Opened]: ['personDetectedOnVideo'],\n [ThirdPartyAnalyticEvent]: ['personDetectedOnVideo']\n },\n [Partition]: {\n [VideoAnalyticsDetection]: ['personDetectedOnVideo'],\n [VideoAnalytics2Detection]: ['personDetectedOnVideo'],\n [Disarmed]: ['acceptedCodeEnteredAtPanel'],\n [ArmedStay]: ['acceptedCodeEnteredAtPanel'],\n [ArmedAway]: ['acceptedCodeEnteredAtPanel'],\n [WrongPinCode]: ['incorrectCodeEnteredAtThePanel'],\n [KeypadTamperAlarm]: ['incorrectCodeEnteredAtThePanel']\n },\n [ZwaveLock]: {\n [DoorUnlocked]: ['acceptedCodeEnteredAtLock', 'lockUnlocked'],\n [DoorLocked]: ['acceptedCodeEnteredAtLock'],\n [DoorAccessed]: ['acceptedCodeEnteredAtLock'],\n [BadLockUserCode]: ['incorrectCodeEnteredAtLock']\n },\n [AccessCardReader]: {\n [DoorAccessed]: ['keyCardDoorAccessedSuccessfully'],\n [DoorAccessedDoubleSwipe]: ['keyCardDoorAccessedSuccessfully'],\n [DoorFailedAccess]: ['keyCardDoorAccessAttemptFailed'],\n [UnknownCardFormatRead]: ['keyCardDoorAccessAttemptFailed'],\n [DoorHeldOpen]: ['accessControlDoorHeldOpen'],\n [DoorForcedOpen]: ['accessControlDoorForcedOpen'],\n [ExitButtonPressed]: ['accessControlDoorExitButtonPushed'],\n [AccessControlDoorAccessGranted]: ['accessControlDoorAccessGranted']\n },\n [Contact]: {\n [Opened]: ['doorContactSensorTripped'],\n [Closed]: ['doorContactSensorTripped'],\n [Alarm]: ['doorContactSensorTripped']\n },\n [Motion]: {\n [Alarm]: ['motionSensorTripped'],\n [Opened]: ['motionSensorTripped']\n },\n [GarageDoor]: {\n [Opened]: ['garageOpened']\n },\n [Glassbreak]: {\n [Alarm]: ['glassBreakDetected'],\n [Tamper]: ['glassBreakDetected']\n },\n [OriginWirelessDevice]: {\n [Opened]: ['wifiMotionDetected']\n }\n };\n return fnGetItem(labelKeyMap[deviceType]?.[eventType][0] ?? '', args, tooltip);\n }\n\n /**\n * Read 'personOnsiteIndicators'\n */\n @reads('args.personOnsiteIndicators')\n declare personOnsiteIndicators: PersonOnSiteIndicator[];\n\n /**\n * Read 'newPersonOnsiteIndicators'\n */\n @reads('args.newPersonOnsiteIndicators')\n declare newPersonOnsiteIndicators: PersonOnSiteIndicator[];\n\n /**\n * Process 'personOnsiteIndicators' and return the labels that need to be rendered\n * by Person On-Site\n */\n @computed('newPersonOnsiteIndicators', 'personOnsiteIndicators')\n get personOnsiteProcessedIndicators(): OnsiteLabels[] {\n const filterIndicators = (\n oldIndicators: PersonOnSiteIndicator[],\n newIndicators: PersonOnSiteIndicator[],\n returnNew = true\n ): PersonOnSiteIndicator[] => {\n return newIndicators?.filter((label) => {\n const checkIfExists = oldIndicators?.some((item) => {\n return item?.labelId === label?.labelId;\n });\n return returnNew ? !checkIfExists : checkIfExists;\n });\n };\n\n if (!this.personOnsiteIndicators && !this.newPersonOnsiteIndicators) {\n return [];\n }\n\n const oldIndicators = filterIndicators(this.personOnsiteIndicators, this.newPersonOnsiteIndicators, false);\n const newIndicators = filterIndicators(this.personOnsiteIndicators, this.newPersonOnsiteIndicators, true);\n const oldLabels = oldIndicators\n .sort((a, b) => (a.eventDateUtc < b.eventDateUtc ? -1 : 1))\n .map(({ deviceType, eventType, deviceName, eventDateUtc }) =>\n this.buildPersonOnsiteLabelsObject(\n deviceType,\n eventType,\n { deviceName: deviceName },\n false,\n eventDateUtc\n )\n )\n .filter(Boolean)\n .flat();\n const newLabels = newIndicators\n .sort((a, b) => (a.eventDateUtc < b.eventDateUtc ? -1 : 1))\n .map(({ deviceType, eventType, deviceName, eventDateUtc }) =>\n this.buildPersonOnsiteLabelsObject(\n deviceType,\n eventType,\n { deviceName: deviceName },\n true,\n eventDateUtc\n )\n )\n .filter(Boolean)\n .flat();\n\n return [...oldLabels, ...newLabels];\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ContextualInfo::PersonOnSite': typeof PersonOnSite;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n

{{tc this \\'unexpectedEventsLikelihood\\'}}

\\n {{#if this.predictionsLoading}}\\n \\n {{else}}\\n {{#if this.unexpectedEventsProcessedIndicators}}\\n
\\n \\n
\\n

{{tc this \\'unexpectedEventsLikely\\'}}

\\n
    \\n {{#each this.unexpectedEventsProcessedIndicators as | unexpectedEventLabel |}}\\n
  • {{unexpectedEventLabel}}
  • \\n {{/each}}\\n
\\n
\\n
\\n {{else}}\\n

{{tc this \\'noUnexpectedEvents\\'}}

\\n {{/if}}\\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/contextual-info/unexpected-events/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type UnexpectedEventsIndicator from 'customer-site/models/visual-verification/unexpected-events/prediction';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport './_style.scss';\n\n@intlPath({ path: 'contextual-info/unexpected-events' })\nexport default class UnexpectedEventsComponent extends Component {\n @service declare store: Store;\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare envSettings: EnvSettingsService;\n\n @tracked unexpectedEventsData?: UnexpectedEventsIndicator;\n @tracked predictionsLoading = true;\n\n constructor(owner: unknown, args: any) {\n super(owner, args);\n this.pullUnexpectedEventsData.perform();\n }\n\n // Populate 'unexpectedEventsData' variable with data.\n pullUnexpectedEventsData = task({ drop: true }, async () => {\n const unitId = this.contextManager.getContextId();\n while (unitId) {\n this.predictionsLoading = true;\n this.unexpectedEventsData = await this.store\n .findAll('visual-verification/unexpected-events/prediction')\n .then((res) => res.firstObject);\n this.predictionsLoading = false;\n // The below IF is needed in order to avoid a loop while running the test\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n await timeout(15000);\n }\n });\n\n // Process 'unexpectedEventsData' and return the labels that need to be rendered by Unexpected Events\n get unexpectedEventsProcessedIndicators(): string[] {\n return (\n Object.entries(this.unexpectedEventsData?.serialize() ?? {})\n // This is a bit hacky as we are including the full model seralization here which has an id & type. This should be refactored\n .filter(([k, v]) => v !== null && k !== 'id' && k !== 'type')\n .map(([k]) => this.intl.tc(this, k))\n .compact()\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ContextualInfo::UnexpectedEvents': typeof UnexpectedEventsComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n \\n
\\n

{{tc this \\'mobileDeviceInGeoFence\\'}}

\\n

{{tc this \\'mobileDeviceWithin1Mi\\'}}

\\n
    \\n {{#if (or this.geoFenceLabels.homeFenceCrossedBeforeAlarm this.newGeoFenceLabels.homeFenceCrossedBeforeAlarm)}}\\n
  • \\n

    \\n {{format-date-tz this.geoFenceLabels.homeFenceCrossedBeforeAlarmUtc format=\\\"longTimeFormat\\\"}}\\n

    \\n {{tc this \\'enteredGeoFence5MinsBeforeAlarm\\'}}\\n
  • \\n {{/if}}\\n {{#if (or this.geoFenceLabels.homeFenceCrossedDuringAlarm this.newGeoFenceLabels.homeFenceCrossedDuringAlarm)}}\\n
  • \\n

    \\n {{format-date-tz this.geoFenceLabels.homeFenceCrossedAfterAlarmUtc format=\\\"longTimeFormat\\\"}}\\n

    \\n {{tc this \\'enteredGeoFenceAfterAlarm\\'}}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n
\",{ moduleName: \"customer-site/components/contextual-info/additional-information/geo-devices/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type { GeoFenceData } from '../../index';\nimport './_style.scss';\n\ntype GeoFenceLabels = {\n fenceCrossedBeforeAlarm: boolean;\n fenceCrossedDuringAlarm: boolean;\n};\n\ninterface GeoDevicesSignature {\n Args: {\n geoFenceLabels: GeoFenceData;\n newGeoFenceLabels: GeoFenceData;\n };\n}\n\n@intlPath({ path: 'contextual-info/additional-information/geo-devices' })\nexport default class GeoDevices extends Component {\n /**\n * Read 'geoFenceLabels'\n */\n @reads('args.geoFenceLabels')\n declare geoFenceLabels: GeoFenceData;\n\n /**\n * Read 'newGeoFenceLabels'\n */\n @reads('args.newGeoFenceLabels')\n declare newGeoFenceLabels: GeoFenceData;\n\n /**\n * Check if the label is new\n */\n @computed(\n 'geoFenceLabels.{homeFenceCrossedBeforeAlarm,homeFenceCrossedDuringAlarm}',\n 'newGeoFenceLabels.{homeFenceCrossedBeforeAlarm,homeFenceCrossedDuringAlarm}'\n )\n get labelIsNew(): GeoFenceLabels {\n return {\n fenceCrossedBeforeAlarm: this.geoFenceLabels.homeFenceCrossedBeforeAlarm\n ? false\n : !!this.newGeoFenceLabels.homeFenceCrossedBeforeAlarm,\n fenceCrossedDuringAlarm: this.geoFenceLabels.homeFenceCrossedDuringAlarm\n ? false\n : !!this.newGeoFenceLabels.homeFenceCrossedDuringAlarm\n };\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ContextualInfo::AdditionalInformation::GeoDevices': typeof GeoDevices;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if (or @geoFenceLabels.homeFenceCrossedBeforeAlarm @geoFenceLabels.homeFenceCrossedDuringAlarm @newGeoFenceLabels.homeFenceCrossedBeforeAlarm @newGeoFenceLabels.homeFenceCrossedDuringAlarm)}}\\n \\n
\\n

{{tc this \\'additionalInformation\\'}}

\\n \\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n\",{ moduleName: \"customer-site/components/contextual-info/additional-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type { GeoFenceData } from '../index';\nimport './_style.scss';\n\ninterface AdditionalInformationSignature {\n Args: {\n geoFenceLabels: GeoFenceData;\n newGeoFenceLabels: GeoFenceData;\n };\n}\n\n@intlPath({ path: 'contextual-info/additional-information' })\nexport default class AdditionalInformation extends Component {\n @tracked expandInfo = false;\n\n /**\n * Action to trigger whether to expand additional information or not.\n */\n @action\n toggleExpand(): void {\n this.expandInfo = !this.expandInfo;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ContextualInfo::AdditionalInformation': typeof AdditionalInformation;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n {{#if @arpFeatures.renderPropertyNotes}}\\n \\n {{/if}}\\n \\n {{#if (and @arpFeatures.renderUnexpectedEvents this.onVVOrLatestSession)}}\\n \\n {{/if}}\\n {{#if @arpFeatures.renderGeoFencePanel}}\\n \\n {{/if}}\\n \\n
\",{ moduleName: \"customer-site/components/contextual-info/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\n\nimport './_style.scss';\nimport type Store from '@ember-data/store';\nimport type AlarmEvents from 'customer-site/models/visual-verification/alarm';\nimport type PageFeature from 'customer-site/models/visual-verification/page-feature';\nimport type PersonOnSiteIndicator from 'customer-site/models/visual-verification/person-on-site/indicator';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type VisualVerification from 'customer-site/services/visual-verification';\n\ninterface ContextualInfoSignature {\n Args: {\n arpFeatures: PageFeature;\n };\n}\n\nexport type GeoFenceData = {\n homeFenceCrossedBeforeAlarm?: boolean;\n homeFenceCrossedDuringAlarm?: boolean;\n homeFenceCrossedBeforeAlarmUtc?: Date;\n homeFenceCrossedAfterAlarmUtc?: Date;\n};\n\nexport default class ContextualInfo extends Component {\n @service declare store: Store;\n @service declare ajax: AjaxService;\n @service declare visualVerification: VisualVerification;\n @service declare identityManager: IdentityManager;\n\n // The below tracked variable is needed by the task so we can pull the data every 15 seconds\n @tracked toggleRefreshData = false;\n\n @tracked personOnsiteIndicators: PersonOnSiteIndicator[] = [];\n @tracked newPersonOnsiteIndicators: PersonOnSiteIndicator[] = [];\n @tracked geoFenceLabels: GeoFenceData = {};\n @tracked newGeoFenceLabels: GeoFenceData = {};\n\n constructor(owner: unknown, args: ContextualInfoSignature['Args']) {\n super(owner, args);\n this.pullDataTask.perform();\n this.checkSessionValidityTask.perform();\n }\n\n /**\n * This function updates old and new 'personOnSiteindicators' labels\n */\n async pullIndicatorsDataFunction(alarmDate: string, freshRender?: boolean): Promise {\n const indicators = (\n await this.store.query('visual-verification/person-on-site/indicator', {\n unitId: await this.unitId,\n alarmDateUtc: alarmDate\n })\n ).toArray();\n this.personOnsiteIndicators = freshRender ? indicators : this.newPersonOnsiteIndicators;\n this.newPersonOnsiteIndicators = indicators;\n }\n\n /**\n * This function updates old and new 'geoFenceData' labels\n */\n async pullGeoFenceDataFunction(alarmDate: string, freshRender?: boolean): Promise {\n const geoFenceData = await this.ajax.apiRequestForValue(\n `visualverification/geofence?unitId=${await this.unitId}&alarmDateUtc=${alarmDate}`,\n this.visualVerification.headerWithCID()\n );\n this.geoFenceLabels = freshRender ? geoFenceData : this.newGeoFenceLabels;\n this.newGeoFenceLabels = geoFenceData;\n }\n\n /**\n * Return 'eventDateUtc' property of the first alarm and call 'pullIndicatorsDataFunction'\n */\n @computed('visualVerification.alarms.@each.eventDateUtc')\n get firstAlarmEventDate(): string {\n const alarms = this.visualVerification.alarms?.lastObject ?? ({} as AlarmEvents),\n firstAlarmDate = alarms.eventDateUtc;\n if (firstAlarmDate) {\n this.pullIndicatorsDataFunction(firstAlarmDate, true);\n this.pullGeoFenceDataFunction(firstAlarmDate, true);\n }\n return firstAlarmDate;\n }\n\n /**\n * Return the current 'unitId'\n */\n @computed('identityManager.getSelectedSystem().unitId')\n get unitId(): Promise {\n return (async () => {\n return (await this.identityManager.getSelectedSystem())?.unitId ?? 0;\n })();\n }\n\n /**\n * Return the current 'unitId'\n */\n @computed('args.arpFeatures.enableCDQL', 'visualVerification.sessionNumber')\n get onVVOrLatestSession(): boolean {\n return !this.args.arpFeatures.enableCDQL || this.visualVerification.sessionNumber === 1;\n }\n\n /**\n * Task checking operator session validity\n */\n checkSessionValidityTask = task({ drop: true }, async () => {\n while (await this.unitId) {\n const sessionError = await this.ajax.apiRequest(\n 'visualverification/sessions/valid',\n this.visualVerification.headerWithCID()\n );\n\n if (sessionError.length) {\n window.location.replace(window.location.origin + sessionError);\n break;\n }\n\n await timeout(5000);\n }\n });\n\n /**\n * Task which triggers the data for Person On-Site / Additional Information (geo-fence)\n * to be pulled.\n */\n pullDataTask = task({ drop: true }, async () => {\n if (this.firstAlarmEventDate) {\n while (await this.unitId) {\n // While CDQL is enabled, refresh 'personOnsiteIndicators' and 'geoFenceData'\n // only if user is on the latest session\n if (\n !this.args.arpFeatures.enableCDQL ||\n (this.args.arpFeatures.enableCDQL && this.visualVerification.sessionNumber === 1)\n ) {\n this.pullIndicatorsDataFunction(this.firstAlarmEventDate);\n this.pullGeoFenceDataFunction(this.firstAlarmEventDate);\n this.toggleRefreshData = !this.toggleRefreshData;\n }\n await timeout(15000);\n }\n }\n });\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n ContextualInfo: typeof ContextualInfo;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n

{{@label}}

\\n
\\n
\\n \\n <:description>\\n

\\n {{tc this \\'warningSounds\\'}}\\n

\\n \\n <:state-text>\\n {{#if this.hasActiveWarningSounds}}\\n

\\n {{tc this \\'activeWarningSounds\\' count=this.activeWarningSounds.length}}\\n

\\n {{/if}}\\n \\n \\n
\\n
\\n {{#if this.hasActiveWarningSounds}}\\n \\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n
\",{ moduleName: \"customer-site/components/property-actions/custom-controls/warning-sound-group/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport ArrayProxy from '@ember/array/proxy';\nimport { action, computed } from '@ember/object';\nimport { gt } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { task, timeout } from 'ember-concurrency';\nimport IconData from 'customer-site/utils/transforms-objects/icon-data';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type CameraSiren from 'customer-site/models/video/camera-siren';\n\nexport interface WarningSoundGroupSignature {\n Args: {\n label: string;\n };\n}\n\n@intlPath({ path: 'property-actions/custom-controls/warning-sound-group' })\nexport default class WarningSoundGroup extends Component {\n @service declare store: ServiceRegistry['store'];\n @service('video.warning-sound') declare warningSound: ServiceRegistry['video/warning-sound'];\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare modals: ServiceRegistry['modals'];\n\n constructor(owner: unknown, args: WarningSoundGroupSignature['Args']) {\n super(owner, args);\n this.pullWarningSoundData.perform();\n }\n\n deviceIcon: IconData = new IconData({\n icon: 'alarm'\n });\n\n cancelWarningSoundPromiseResolver?: (result?: number) => void;\n\n /**\n * Array of warning sounds currently in the store\n */\n @tracked\n warningSounds: ArrayProxy = new ArrayProxy();\n\n /**\n * Array of warning sounds that are currently active\n */\n @tracked\n activeWarningSounds: CameraSiren[] = [];\n\n @gt('activeWarningSounds.length', 0)\n declare hasActiveWarningSounds: boolean;\n\n /**\n * Recomputes whenever relevant information in the store changes, and returns the same warning sound array\n */\n @computed('warningSounds.{[],@each.timestampEndUtc}')\n get allWarningSounds(): CameraSiren[] {\n return this.warningSounds.slice();\n }\n\n @computed('hasActiveWarningSounds')\n get css(): string {\n return this.hasActiveWarningSounds ? '' : 'no-state';\n }\n\n @action async cancelAllWarningSounds() {\n const promise = new Promise((resolve) => {\n this.cancelWarningSoundPromiseResolver = resolve;\n });\n\n // The first await finishes when the request is sent to CDN and the cancellation request is delagated to ADVRS\n // The second await finishes when ADVRS performs all cancellations and finishes relaying the results back via websockets\n // The second await will resolve when the active siren count hits 0\n await this.warningSound.cancelAll();\n await promise;\n\n this.cancelWarningSoundPromiseResolver = undefined;\n }\n\n @action async triggerAllWarningSounds() {\n await this.modals.showConfirmationDialog(\n this.intl.tc(this, 'triggerAllWarningSoundsTitle'),\n htmlSafe(this.intl.tc(this, 'triggerAllWarningSoundsText')),\n {\n text: this.intl.t('generic.ok'),\n action: async () => {\n await this.warningSound.triggerAll();\n }\n },\n {\n text: this.intl.t('generic.cancel'),\n action: () => {\n return;\n }\n }\n );\n }\n\n /**\n * Updates the active warning sounds\n */\n updateActiveWarningSounds = task({ restartable: true }, async () => {\n const warningSounds = this.allWarningSounds.filter((warningSound) => warningSound.isActive);\n this.activeWarningSounds = warningSounds;\n\n // Disable this for tests.\n // Creating the timeouts causes tests to not terminate until they've all been resolved.\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n\n const now = Date.now();\n await Promise.all(\n this.allWarningSounds.map(async (warningSound) => {\n await timeout((warningSound.timestampEndUtc?.getTime() ?? now) - now);\n this.activeWarningSounds.removeObject(warningSound);\n })\n );\n\n this.cancelWarningSoundPromiseResolver?.();\n });\n\n pullWarningSoundData = task({ drop: true }, async () => {\n const warningSounds = await this.store.findAll('video/camera-siren');\n this.warningSounds = warningSounds;\n });\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'PropertyActions::/CustomControls::WarningSoundGroup': typeof WarningSoundGroup;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default>\\n
\\n {{#if @model.troubleConditions}}\\n {{!-- @glint-expect-error We should be comparing `@model.devices.length` with 1 --}}\\n

{{tc this (if (math \\'gt\\' @model.devices 1) \\'massTroubleConditionsMessage\\' \\'troubleConditionsMessage\\')}}

\\n
    \\n {{#each @model.troubleConditions as |troubleCondition|}}\\n
  • \\n \\n

    {{troubleCondition.description}}

    \\n
  • \\n {{/each}}\\n
\\n {{/if}}\\n
\\n \\n\\n\",{ moduleName: \"customer-site/components/modals/sfg-modal/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type { PromiseDialogSignature } from '@adc/ui-components/components/modals/dialog-modals/promise/promise-dialog';\nimport type SfgModel from 'customer-site/models/devices/security-fog-generator';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\n\ninterface SfgModalSignature {\n Args: {\n model: PromiseDialogSignature['Args']['model'] & {\n troubleConditions?: TroubleCondition[];\n devices: SfgModel[];\n };\n };\n}\n\n/**\n * @classdesc\n * The component for the Security Fog Generator device promise modal\n */\n@intlPath({ path: 'modals/sfg-modal' })\nexport default class SfgModal extends Component {}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::SfgModal': typeof SfgModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @options}}\\n
\\n {{#each @filteredActionSwitch as |actionSwitch|}}\\n {{#let actionSwitch.value actionSwitch.key as |value actionKey|}}\\n
\\n \\n
\\n {{/let}}\\n {{/each}}\\n \\n
\\n{{else}}\\n {{#each @filteredActionSwitch as |actionSwitch|}}\\n \\n {{/each}}\\n{{/if}}\",{ moduleName: \"customer-site/components/property-actions/action-switch/multi-action-switch.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './multi-action-switch.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { ButtonIconSignature } from '@adc/ui-components/components/button/icon';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type { Task } from 'ember-concurrency';\n\ninterface MultiActionSwitchSignature {\n Args: {\n // If you are familiar with the code, please supply types for these arguments.\n options: any[];\n filteredActionSwitch: any[];\n device: BaseDevice;\n devices: BaseDevice[];\n revealOptions: ButtonIconSignature['Args']['buttonAction'];\n shouldRevealOptions?: boolean;\n deviceAction: Task;\n };\n}\n\nconst MultiActionSwitch = templateOnlyComponent();\nexport default MultiActionSwitch;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'property-actions/action-switch/multi-action-switch': typeof MultiActionSwitch;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#each @filteredActionSwitch as |actionSwitch|}}\\n \\n{{/each}}\",{ moduleName: \"customer-site/components/property-actions/action-switch/switch.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './switch.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type { Task } from 'ember-concurrency';\n\ninterface ActionSwitchSignature {\n Args: {\n // If you are familiar with the code, please supply types for these arguments.\n filteredActionSwitch: any[];\n device: BaseDevice;\n devices: BaseDevice[];\n deviceAction: Task;\n };\n}\n\nconst ActionSwitchSwitch = templateOnlyComponent();\nexport default ActionSwitchSwitch;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'property-actions/action-switch/switch': typeof ActionSwitchSwitch;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: Glint is never going to like this componentToRender, please find a different way to do this. }}\\n\",{ moduleName: \"customer-site/components/property-actions/action-switch/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport SfgModal from 'customer-site/components/modals/sfg-modal/index';\nimport MultiActionSwitch from 'customer-site/components/property-actions/action-switch/multi-action-switch';\nimport SwitchComponent from 'customer-site/components/property-actions/action-switch/switch';\nimport { Buzz } from 'customer-site/enums/CardReaderState';\nimport {\n Lock,\n Light as LightDeviceType,\n GarageDoor,\n WaterValve,\n Thermostat,\n Partition\n} from 'customer-site/enums/ManagedDeviceType';\nimport { Closed, Open } from 'customer-site/enums/SensorStatus';\nimport AccessControlAccessPointDevice from 'customer-site/models/devices/access-control-access-point-device';\nimport GarageModel from 'customer-site/models/devices/garage-door';\nimport Light from 'customer-site/models/devices/light';\nimport LockModel from 'customer-site/models/devices/lock';\nimport PartitionModel from 'customer-site/models/devices/partition';\nimport SfgModel from 'customer-site/models/devices/security-fog-generator';\nimport ThermostatModel from 'customer-site/models/devices/thermostat';\nimport WaterValveModel from 'customer-site/models/devices/water-valve';\nimport { getGarageStateCSS } from 'customer-site/utils/garages';\nimport { getLightStateCSS } from 'customer-site/utils/lights';\nimport { getLockStateCSS } from 'customer-site/utils/locks';\nimport { getPartitionStateCSS } from 'customer-site/utils/partitions';\nimport { getThermostatStateCSS } from 'customer-site/utils/thermostats';\nimport { getWaterValveStateCSS } from 'customer-site/utils/water-valves';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\n\ntype ActionSwitchItem = {\n key: string;\n value: string;\n btnCss: string;\n};\n\ninterface ActionSwitchSignature {\n Args: {\n key: string;\n device: DeviceType;\n actionList: ActionSwitchItem;\n devices?: SfgModel[];\n };\n}\n\ninterface DeviceType {\n getMassFilteredTroubleConditions(devices: SfgModel[]): Promise;\n id: string;\n state: number;\n managedDeviceType: number;\n deployDevices(device: SfgModel[]): Promise;\n deployedDevices: number[];\n failedDeploys: number[];\n}\n\nconst ARMAWAY = 'away',\n ARMSTAY = 'stay',\n BUZZ = 'buzz',\n ARM = 'arm',\n DISARM = 'disarm',\n UNLOCK = 'unlock',\n LOCK = 'lock',\n OPEN = 'open',\n CLOSE = 'close',\n ON = 'on',\n OFF = 'off',\n AUTO = 'auto',\n DEPLOY = 'deploy',\n REFRESH = 'refresh';\n\n/**\n * @classdesc\n * The switch component for Property-Actions\n */\n@intlPath({ path: 'property-actions/action-switch' })\nexport default class ActionSwitch extends Component {\n @service declare modals: ModalService;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n\n @tracked options = false;\n\n get componentToRender(): typeof MultiActionSwitch | typeof SwitchComponent {\n if (this.args.key === 'multi-action-switch') {\n return MultiActionSwitch;\n }\n\n return SwitchComponent;\n }\n\n private getActionsSubset(keys: string[], isReject: boolean): ActionSwitchItem[] {\n const device = this.args.device;\n return Object.entries(this.args.actionList)\n .filter(([key]) => {\n const included = keys.includes(key);\n return isReject ? !included : included;\n })\n .map(([key, value]) => ({ key, value, btnCss: this.buttonCss(device) }));\n }\n\n filteredActions(): ActionSwitchItem[] {\n return this.getActionsSubset([ARMAWAY, ARMSTAY, BUZZ, UNLOCK, DEPLOY], false);\n }\n\n filteredOffSwitch(): ActionSwitchItem[] {\n return this.getActionsSubset([DISARM, OFF, CLOSE, UNLOCK], false);\n }\n\n filteredOnSwitch(): ActionSwitchItem[] {\n return this.getActionsSubset([LOCK, ON, OPEN, AUTO, ARM, DEPLOY], false);\n }\n\n refreshSwitch(): ActionSwitchItem[] {\n return this.getActionsSubset([REFRESH], false);\n }\n\n get filteredActionSwitch(): ActionSwitchItem[] | null {\n const { device } = this.args,\n { state } = device;\n\n if (state === 0 || (device instanceof Light && state === 1)) {\n return this.refreshSwitch();\n }\n\n if (device instanceof LockModel || device instanceof GarageModel) {\n return state === 1 ? this.filteredOffSwitch() : this.filteredOnSwitch();\n }\n\n if (device instanceof ThermostatModel || device instanceof WaterValveModel) {\n return state === 1 ? this.filteredOnSwitch() : this.filteredOffSwitch();\n }\n\n if (device instanceof PartitionModel) {\n return state === 1\n ? this.options\n ? this.filteredActions()\n : this.filteredOnSwitch()\n : this.filteredOffSwitch();\n }\n\n if (device instanceof AccessControlAccessPointDevice) {\n return state === 2\n ? this.options\n ? this.filteredActions()\n : this.filteredOffSwitch()\n : this.filteredOnSwitch();\n }\n\n if (device instanceof Light) {\n return state === 2 ? this.filteredOffSwitch() : this.filteredOnSwitch();\n }\n\n if (device instanceof SfgModel) {\n return state === null ? this.filteredActions() : this.filteredOnSwitch();\n }\n\n return null;\n }\n\n get shouldRevealOptions(): boolean {\n const { device } = this.args;\n return (\n (device.state === 1 && device instanceof PartitionModel) ||\n (device.state === 2 && device instanceof AccessControlAccessPointDevice)\n );\n }\n\n @action\n revealOptions(): void {\n this.options = !this.options;\n }\n\n @action\n async openPromiseDialog(devices: SfgModel[]): Promise {\n const { device } = this.args;\n this.modals.showModal(SfgModal, {\n title: this.intl.t('generic.devices.sfgDevices'),\n promiseFn: () => {\n return new Promise((resolve, reject) => {\n device.deployDevices(devices).then(() => {\n const deployed = device.deployedDevices.length,\n failed = device.failedDeploys.length;\n if (deployed > 0 && failed === 0) {\n resolve();\n this.notificationManager.addSuccess(this.intl.tc(this, 'deploySuccess'));\n return;\n }\n if (failed > 0 && deployed > 0) {\n resolve();\n this.notificationManager.addNotification(\n this.intl.tc(this, 'deployPartialSuccess'),\n 'warning'\n );\n return;\n }\n reject();\n this.notificationManager.addNotification(this.intl.tc(this, 'failedToDeploy'), 'warning');\n });\n });\n },\n stepConfirm: {\n bodyText: this.intl.tc(this, 'sfgModalMessage'),\n buttonText: this.intl.t('generic.deploy'),\n buttonCss: 'btn-color-primary',\n displayCancel: true,\n cancelOnClickFunction: () => {\n this.modals.closeModal();\n return false;\n }\n },\n stepPromise: {\n bodyText: this.intl.t('generic.deploying'),\n cancelOnClickFunction: () => {\n return false;\n }\n },\n stepSuccess: {\n bodyText: this.intl.t('generic.deployed'),\n buttonText: this.intl.t('generic.close'),\n buttonCss: 'btn-color-primary',\n successOnClickFunction: () => {\n this.modals.closeModal();\n return false;\n }\n },\n stepFailure: {\n bodyText: this.intl.t('generic.deployFailed'),\n buttonText: this.intl.t('generic.retry'),\n buttonCss: 'btn-color-primary',\n showError: true,\n allowRetry: true,\n displayCancel: true\n },\n devices: devices,\n troubleConditions: await device.getMassFilteredTroubleConditions(devices)\n });\n }\n\n deviceAction = task(async (device: BaseDevice, devices: SfgModel[], actionKey: string) => {\n const { state } = device,\n refreshDevice = (): OptionalAsyncModelPayload => device.refreshState();\n\n if (!(device instanceof PartitionModel)) {\n if (device instanceof LockModel) {\n await (state === 2 ? device.lock(false) : state === 1 ? device.unlock(false) : refreshDevice());\n return;\n }\n if (device instanceof GarageModel) {\n await (state === 2 ? device.open(false) : state === 1 ? device.close(false) : refreshDevice());\n return;\n }\n if (device instanceof WaterValveModel) {\n await (state === 2 ? device.close(false) : state === 1 ? device.open(false) : refreshDevice());\n return;\n }\n if (device instanceof Light) {\n await (state === 3 ? device.turnOn() : state === 1 ? refreshDevice() : device.turnOff());\n return;\n }\n if (device instanceof ThermostatModel) {\n await (state === 4 ? device.setMode(1) : state === 0 ? refreshDevice() : device.setMode(4));\n return;\n }\n if (device instanceof SfgModel) {\n await (state === null ? this.openPromiseDialog(devices) : refreshDevice());\n return;\n }\n }\n\n if (state === 0) {\n await refreshDevice();\n return;\n }\n\n if (state === 1) {\n if (device instanceof PartitionModel) {\n if (actionKey === ARMAWAY) {\n await device.armAway({}, false);\n this.options = false;\n } else if (actionKey === ARMSTAY) {\n await device.armStay({}, false);\n this.options = false;\n }\n\n return;\n }\n if (device instanceof AccessControlAccessPointDevice) {\n await device.executeStateChange(Open, false);\n }\n }\n\n if (state === 2 || state === 3 || state === 4) {\n if (device instanceof AccessControlAccessPointDevice && this.options) {\n if (actionKey === UNLOCK) {\n await device.executeStateChange(Closed, false);\n this.options = false;\n }\n\n if (actionKey === BUZZ) {\n await device.executeStateChange(Buzz, false);\n this.options = false;\n }\n return;\n }\n await device.executeStateChange(1, false);\n this.options = false;\n }\n });\n\n private buttonCss(device: DeviceType): string {\n const fn = (label: string, fnCss: (state: number) => string): string => `btn-${label}-${fnCss(device.state)}`;\n\n switch (device.managedDeviceType) {\n case Lock:\n return fn('lock', getLockStateCSS);\n case LightDeviceType:\n return fn('light', getLightStateCSS);\n case GarageDoor:\n return fn('garage', getGarageStateCSS);\n case WaterValve:\n return fn('waterValve', getWaterValveStateCSS);\n case Thermostat:\n return fn('thermostat', getThermostatStateCSS);\n case Partition:\n return fn('arming', getPartitionStateCSS);\n default:\n return 'btn-unknown-unknown';\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'PropertyActions::ActionSwitch': typeof ActionSwitch;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: Glint is never going to like this customComponent, please find a different way to do this. }}\\n
\\n {{#each this.allDevices as |deviceType|}}\\n {{#if deviceType.customComponent}}\\n \\n {{else if deviceType.devices.data}}\\n {{#if (eq deviceType.label this.allLabels.sfgDevices)}}\\n {{#let deviceType.devices.data as |sfgDevice|}}\\n
\\n \\n <:description>\\n

\\n {{this.allLabels.sfgDevices}}\\n

\\n \\n \\n \\n
\\n {{/let}}\\n {{else}}\\n {{#if (eq deviceType.label this.allLabels.partitions)}}\\n

{{this.panelLabel}}

\\n {{else}}\\n

{{deviceType.label}}

\\n {{/if}}\\n {{#each deviceType.devices.data as |device|}}\\n
\\n
\\n \\n <:description>\\n

\\n {{device.description}}\\n

\\n \\n <:state>\\n

\\n {{device.stateText}}\\n

\\n \\n \\n
\\n \\n
\\n {{/each}}\\n {{/if}}\\n {{/if}}\\n {{/each}}\\n
\",{ moduleName: \"customer-site/components/property-actions/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport WarningSoundGroup from 'customer-site/components/property-actions/custom-controls/warning-sound-group';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type System from 'customer-site/models/systems/system';\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type PageFeature from 'customer-site/models/visual-verification/page-feature';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport interface Device {\n label: string;\n key: string;\n devices: {\n data: ADCAsyncStoreFindAll;\n };\n actions: Record;\n customComponent: string;\n}\n\ninterface PropertyActionSignature {\n Args: {\n arpFeatures: PageFeature;\n };\n}\n\n/**\n * @classdesc\n * The component for Property-Actions\n */\n@intlPath({ path: 'property-actions' })\nexport default class PropertyActions extends Component {\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n @tracked allDevices: Device[] = [];\n\n constructor(owner: unknown, args: PropertyActionSignature['Args']) {\n super(owner, args);\n this.allDevicesTask.perform();\n }\n\n get panelLabel(): string {\n return this.intl.t('generic.security');\n }\n\n get allLabels(): Record {\n return [\n 'locks',\n 'partitions',\n 'lights',\n 'garageDoors',\n 'waterValves',\n 'thermostats',\n 'accessPoints',\n 'sfgDevices',\n 'cameras'\n ].reduce(\n (labels, key) => ({\n ...labels,\n [key]: this.intl.t(`generic.devices.${key}`)\n }),\n {}\n );\n }\n\n allDevicesTask = task(async () => {\n const system = await this.identityManager.getSelectedSystem();\n this.allDevices = [\n ['warningSound', 'cameras', [], null, WarningSoundGroup, 'renderWarningSounds'],\n [\n 'partitions',\n null,\n ['away', 'stay', 'disarm', 'arm', 'refresh'],\n 'multi-action-switch',\n null,\n 'renderPropertyActions'\n ],\n ['sfgDevices', null, ['deploy', 'refresh'], 'switch', null, 'renderPropertyActions'],\n ['locks', null, ['lock', 'unlock', 'refresh'], 'switch', null, 'renderPropertyActions'],\n [\n 'accessControlAccessPointDevices',\n 'accessPoints',\n ['lock', 'unlock', 'buzz', 'refresh'],\n 'multi-action-switch',\n null,\n 'renderPropertyActions'\n ],\n ['garageDoors', null, ['open', 'close', 'refresh'], 'switch', null, 'renderPropertyActions'],\n ['thermostats', null, ['auto', 'off', 'refresh'], 'switch', null, 'renderPropertyActions'],\n ['lights', null, ['on', 'off', 'refresh'], 'switch', null, 'renderPropertyActions'],\n ['waterValves', null, ['open', 'close', 'refresh'], 'switch', null, 'renderPropertyActions']\n ].reduce(\n (\n result: Device[],\n [key, translationKey, actions, switchKey, customComponent, requiredPermission]: [\n string,\n string,\n string[],\n string,\n string,\n string\n ]\n ) => {\n if (this.args.arpFeatures[requiredPermission as keyof PageFeature]) {\n return [\n ...result,\n {\n label: this.allLabels[translationKey ?? key],\n key: switchKey,\n devices: {\n data: system?.[key as keyof System] as ADCAsyncStoreFindAll\n },\n actions: actions.reduce(\n (actions, key) => ({\n ...actions,\n [key]: this.intl.t(`generic.${key}`)\n }),\n {}\n ),\n customComponent: customComponent\n }\n ];\n }\n return result;\n },\n []\n );\n });\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n PropertyActions: typeof PropertyActions;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.showToggleButtons}}\\n
\\n \\n \\n
\\n {{/if}}\\n
\\n {{#if this.contextualInfo}}\\n \\n {{/if}}\\n {{#if this.propertyActions}}\\n \\n {{/if}}\\n
\\n
\",{ moduleName: \"customer-site/components/app/app-nav/alarm-response-nav/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type PageFeature from 'customer-site/models/visual-verification/page-feature';\n\ninterface AlarmResponseNavArgs {\n arpFeatures: PageFeature;\n}\n\n@intlPath({ path: 'app/app-nav/alarm-response-nav' })\nexport default class AlarmResponseNav extends Component {\n constructor(owner: unknown, args: AlarmResponseNavArgs) {\n super(owner, args);\n const { arpFeatures } = args,\n { enableContextualInfo } = arpFeatures;\n\n this.contextualInfo = enableContextualInfo;\n this.propertyActions = enableContextualInfo\n ? false\n : arpFeatures.renderPropertyActions || arpFeatures.renderWarningSounds;\n }\n\n @tracked contextualInfo: boolean;\n @tracked propertyActions: boolean;\n\n @computed('args.arpFeatures.{enableContextualInfo,renderPropertyActions,renderWarningSounds}')\n get showToggleButtons(): boolean {\n return (\n this.args.arpFeatures.enableContextualInfo &&\n (this.args.arpFeatures.renderPropertyActions || this.args.arpFeatures.renderWarningSounds)\n );\n }\n\n @action\n showContextualInfo() {\n Object.assign(this, {\n contextualInfo: true,\n propertyActions: false\n });\n }\n @action\n showPropertyActions() {\n Object.assign(this, {\n contextualInfo: false,\n propertyActions: true\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppNav::AlarmResponseNav': typeof AlarmResponseNav;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/app/group-link/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { getOwner } from '@ember/owner';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { task } from 'ember-concurrency';\nimport { AVAILABLE_SYSTEMS_CHANGED_KEY } from 'customer-site/components/app/app-system-select/index';\n\nimport type DomService from '@adc/ember-utils/services/dom';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type EnterpriseLocationsController from 'customer-site/enterprise/locations/controller';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type AvailableSystemItem from 'customer-site/models/systems/available-system-item';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport interface GroupLinkSignature {\n Element: HTMLAnchorElement;\n Args: {\n model: IdentityModel;\n };\n}\n\n/**\n * @classdesc\n * This component is a \"Back to {Group Name}\" link that appears above the MSA dropdown\n * that changes the context to the group when on a single system in a group with a\n * login that has access to the group\n */\nexport default class GroupLink extends Component {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare store: Store;\n @service declare dom: DomService;\n @service declare intl: ADCIntlService;\n\n /**\n * Should the Back to Group Link be shown?\n */\n @tracked showGroupLink = false;\n\n /**\n * Text to appear on the back to link\n */\n @tracked backToText = '';\n\n /**\n * Should the Back to Group Link be shown?\n */\n @tracked systemGroup?: AvailableSystemItem;\n\n /**\n * Switch context to the system's system group.\n */\n @action changeContextToGroup(): void {\n const group = this.systemGroup;\n\n if (group) {\n const routeName = this.contextManager.currentRouteData?.routeName;\n if (this.identityManager.isEnterprise && (routeName?.includes('enterprise.locations') ?? false)) {\n const locationsController = getOwner(this)?.lookup(\n 'controller:enterprise/locations'\n ) as unknown as EnterpriseLocationsController;\n locationsController.searchLocations('');\n }\n\n this.identityManager.switchContext(group);\n }\n }\n\n @action changeDescription(_element: HTMLElement, [isInitialSetupRequired]: Array): void {\n if (!isInitialSetupRequired) {\n this.setDescription.perform();\n }\n }\n\n /**\n * Sets the description for the currently selected system or system group.\n */\n setDescription = task(async () => {\n const systemItems = await this.store.findAll('systems/available-system-item');\n\n this.systemGroup = systemItems.find((item) => item.get('subItems').find((si: any) => si.isSelected));\n this.showGroupLink = !isEmpty(this.systemGroup);\n\n this.backToText = this.showGroupLink\n ? this.intl.t('generic.backTo', {\n destination: this.systemGroup?.name\n })\n : '';\n });\n\n /**\n * Attaches listener for when this.contextManager.refreshAvailableSystems() is called\n */\n @action attachWindowListener(): void {\n // Create a DOM listener so the legacy site can tell the component to refresh the available systems.\n this.dom.addListener(this, window, AVAILABLE_SYSTEMS_CHANGED_KEY, () => this.setDescription.perform());\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::GroupLink': typeof GroupLink;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.identityManager.isManagedAccessAccount}}\\n
\\n

{{tc this \\'managedAccessEnabled\\'}}

\\n

{{tc this \\'manageAccessSettings\\'}}

\\n
\\n {{/if}}\\n\\n \\n\\n \\n
\\n\",{ moduleName: \"customer-site/components/app/app-profile/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { not } from '@ember/object/computed';\nimport { debounce } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport {\n EmberLoginInformation,\n EmberSettingsManagedAccountAccess,\n EmberGroupSettingsManagedAccountAccess\n} from '../../../enums/CustomerPageUrl';\n\nimport './_style.scss';\nimport type AccessibilityService from '@adc/ui-components/services/accessibility';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type RouteItem from 'customer-site/models/navigation/route-item';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface ProfileSignature {\n Args: {\n model: IdentityModel;\n isHidden: boolean;\n };\n}\n\n/**\n * @classdesc Component that displays the profile section of the main navigation\n */\n@intlPath({ path: 'app/app-profile' })\nexport default class Profile extends Component {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare navigation: NavigationService;\n @service declare accessibility: AccessibilityService;\n\n /**\n * Determines if the hover state for the avatar should be shown.\n */\n @tracked showHoverState = false;\n\n /**\n * Route item to which the user should be transitioned to upon clicking.\n */\n get profileRouteItem(): RouteItem | undefined {\n // Default to the legacy page if they don't have permission for the new version.\n return this.navigation.getRouteItem(EmberLoginInformation);\n }\n\n /**\n * Does the profile link have no action?\n */\n @not('profileRouteItem')\n declare hasNoAction: boolean;\n\n /**\n * Redirect the user to the logout page\n */\n @action logout(): void {\n this.contextManager.logout(false);\n }\n\n /**\n * Opens the login information settings modal.\n */\n @action openLoginInfo(): void {\n const { profileRouteItem, hasNoAction } = this;\n\n this.accessibility.saveFocusedElement();\n\n if (!hasNoAction && profileRouteItem) {\n this.navigation.transitionToRoute(profileRouteItem).then(() => this.contextManager.focusOnAppContent());\n }\n }\n\n /**\n * Sets the showHoverState property to the given value.\n */\n @action toggleHoverState(showHoverState: boolean): void {\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline debounceTask.\n // eslint-disable-next-line ember/no-runloop\n debounce(this, this.updateHoverState, showHoverState, 150);\n }\n\n /**\n * Navigates to the 24/7 Managed Access Settings Page.\n */\n @action manageAccessSettings(): void {\n this.navigation.transitionToRouteId(\n this.identityManager.isEnterprise\n ? EmberGroupSettingsManagedAccountAccess\n : EmberSettingsManagedAccountAccess\n );\n }\n\n /**\n * Named method used for the debounced action of updating the hover state.\n */\n private updateHoverState(value: boolean): void {\n // Do not change hover if the profile has no action.\n if (this.hasNoAction) {\n return;\n }\n\n this.showHoverState = value;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppProfile': typeof Profile;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n
\",{ moduleName: \"customer-site/components/app/app-nav/customer-nav/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { EmberHome } from '../../../../enums/CustomerPageUrl';\n\nimport './_style.scss';\n\nexport default class Navigation extends Component {\n @service contextManager;\n\n /**\n * The identity model this navigation is based on.\n *\n * @type {models.Identity}\n */\n model = null;\n\n /**\n * The navigation items to show.\n *\n * @type {Array}\n */\n @alias('args.model.navigation')\n navigation;\n\n /**\n * Id of the current root route item.\n *\n * @type {String}\n */\n @computed('args.visitedRoutesStack.firstObject.routeItem')\n get currentRootRouteItemId() {\n const routeItem = this.args.visitedRoutesStack?.firstObject?.routeItem;\n\n if (!routeItem) {\n return undefined;\n }\n\n // Either return the id of the rootItem or the current id.\n // Root item will work if the current rout is part of a group, otherwise just current id.\n\n return routeItem.get('rootItem.id') || routeItem.get('id');\n }\n\n /**\n * The URL address for the logo.\n *\n * @type {String}\n */\n @alias('args.model.logoSource')\n logoSource;\n\n /**\n * The alternate text for the logo.\n *\n * @type {String}\n */\n @alias('args.model.logoName')\n logoAlt;\n\n /**\n * Returns the routeId for the home route.\n *\n * @type {number}\n */\n @computed()\n get homeRouteId() {\n return EmberHome;\n }\n\n /**\n * Indicates that the home screen configuration button can be shown.\n *\n * @type {boolean}\n */\n @computed('args.{visitedRoutesStack.lastObject.routeItem,hideHomeScreenEditButton}')\n get showConfigureHomeButton() {\n const [routeId, hideHomeScreenEditButton] = getObjProperties(\n this,\n 'args.visitedRoutesStack.lastObject.routeItem.routeId',\n 'args.hideHomeScreenEditButton'\n );\n\n // Show the configure button if NOT mobile AND the current route is the home route AND we are NOT editing already.\n\n return !isMobileBrowser() && routeId === EmberHome && !hideHomeScreenEditButton;\n }\n\n /**\n * Enters home screen configuration mode.\n */\n @action editHomeScreenAction() {\n if (this.showConfigureHomeButton) {\n this.args.editHomeScreen();\n }\n }\n\n /**\n * Clears the route stack and transitions to the index route.\n */\n @action transitionToIndex() {\n this.contextManager.resetToIndex();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/app/app-nav/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { isTabCode, getFocusableElements } from '@adc/ember-utils/utils/a11y';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { action, set } from '@ember/object';\nimport { or, not } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport ENV from 'customer-site/config/environment';\n\nimport './_style.scss';\n\n/**\n * Left hand side navigation structure\n *\n * @class Navigation\n * @extends Ember.Component\n * @memberof components.app\n */\nexport default class Navigation extends Component {\n tagName = '';\n\n @service accessibility;\n @service media;\n @service dom;\n\n /**\n * Is the nav panel open?\n * Note: Only applies to mobile and tablet sizes.\n *\n * @type {boolean}\n */\n isOpen = false;\n\n /**\n * Is the navigation visible?\n *\n * @type {boolean}\n */\n @or('isOpen', 'media.{isDesktop,isDesktopLarge,isDesktopGiant}')\n shouldBeVisible;\n\n /**\n * Is the navigation hidden?\n *\n * @type {boolean}\n */\n @not('shouldBeVisible')\n isHidden;\n\n /**\n * Observer that creates/destroys DOM elements and listeners for the nav panel and backdrop when nav is open/closed.\n *\n */\n @action openCloseNav() {\n // Constants used to find the first and the last focusable element in the nav\n const focusableElements = getFocusableElements(document.getElementById('app-nav')),\n [firstNavElement] = focusableElements,\n [lastNavElement] = focusableElements.slice(-1);\n\n // Remove backdrop if nav is closed.\n if (!this.isOpen) {\n const backdropElementPointer = document.getElementById('nav-backdrop');\n\n backdropElementPointer?.parentNode.removeChild(backdropElementPointer);\n\n // Remove event listeners\n this.dom.removeListener(this, this.windowResizeListener);\n this.dom.removeListener(this, this.navCloseListener);\n this.dom.removeListener(this, this.navKeydownCloseListener);\n\n return;\n }\n\n firstNavElement?.focus();\n\n // Constants used to specify which DOM elements will close the nav when clicked.\n const backdropElement = document.createElement('div'),\n elAppPage = document.getElementById('app-page'),\n dropdownTriggerParents = Array.from(\n document.getElementById('app-nav').getElementsByClassName('dropdown-toggle')\n ).map((el) => el.parentNode),\n excludedClassNames = ['dropdown-toggle', 'dropdown-backdrop', 'search-wrapper'],\n operatorNavExists = !!document.getElementsByClassName('alarm-response-navigation').length;\n\n // Set id for backdrop element.\n backdropElement.setAttribute('id', 'nav-backdrop');\n\n // Open the nav with backdrop and create event listeners for closing the nav.\n elAppPage.appendChild(backdropElement);\n\n // Add a resize event listener that closes the nav when the screen size is desktop or larger.\n set(\n this,\n 'windowResizeListener',\n this.dom.addListener(this, window, 'resize', () => {\n if (window.innerWidth <= ENV.screenBreakpoints.tabletMax) {\n return;\n }\n\n // Close nav bar.\n set(this, 'isOpen', false);\n })\n );\n\n // Add a click event listener that closes the nav specified areas of the page are clicked.\n set(\n this,\n 'navCloseListener',\n this.dom.addListener(this, elAppPage, 'click', ({ target }) => {\n if (\n target &&\n (excludedClassNames.some((className) => target.classList.contains(className)) ||\n dropdownTriggerParents.some((parent) => parent.contains(target)))\n ) {\n return;\n }\n\n // Do not close response portal nav when the nav itself is clicked.\n if (operatorNavExists && target.closest('#app-nav')) {\n return;\n }\n\n // Close nav bar\n set(this, 'isOpen', false);\n })\n );\n\n // Add a keydown event listener that closes the nav when the focus is out of it.\n set(\n this,\n 'navKeydownCloseListener',\n this.dom.addListener(this, elAppPage, 'keydown', (evt) => {\n if (!elAppPage.classList.contains('media-desktop-giant')) {\n const { code, target } = evt;\n const buttonMenu = document.getElementById('btn-menu');\n\n if (isTabCode(code)) {\n if (evt.shiftKey) {\n if (target == firstNavElement) {\n evt.preventDefault();\n set(this, 'isOpen', false);\n buttonMenu?.focus();\n }\n }\n\n if (target == lastNavElement) {\n set(this, 'isOpen', false);\n }\n }\n }\n })\n );\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\",{ moduleName: \"customer-site/components/app/system-and-group-name/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface SystemAndGroupNameSignature {\n Element: HTMLDivElement;\n}\n\n/**\n * @classdesc\n * This component is the system and group name that we will show in the header\n * when viewing a single system in a group with a login that has access to the group.\n */\nexport default class SystemAndGroupName extends Component {\n @service declare contextManager: ContextManager;\n\n @tracked systemName = '';\n @tracked groupName = '';\n\n /**\n * Set header texts.\n */\n setHeader = task({ restartable: true }, async () => {\n // Get the system and group name.\n const selectedSystem = await this.contextManager.identityModel.selectedSystem;\n\n const { description, systemGroupName } = selectedSystem ?? {};\n\n if (description !== undefined && systemGroupName !== undefined) {\n this.systemName = description;\n this.groupName = systemGroupName;\n }\n });\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::SystemAndGroupName': typeof SystemAndGroupName;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#each this.buttons as |button|}}\\n \\n {{/each}}\\n\\n {{#if (await this.showHelpMenu)}}\\n \\n \\n \\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/app/app-header/header-buttons/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport {\n EmberSupport,\n EmberNewsAndUpdates,\n ReferAFriend,\n SupportCenter,\n EmberHome,\n EmberOperatorPersonalSafety,\n EmberVisualVerificationFlagging,\n EmberVisualVerificationLiveView,\n EmberVisualVerificationResponder,\n EmberVisualVerificationSD,\n EmberVisualVerificationSVR,\n EmberOperatorSelectAlarm\n} from '../../../../enums/CustomerPageUrl';\nimport { RefreshHeaderButtonClicked } from '../../../../enums/UserExperienceEventSubType';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DealerModel from 'customer-site/models/dealers/dealer';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type UxEventsService from 'customer-site/services/ux-events';\n\ntype ButtonAction = () => void | Promise;\n\ninterface ButtonConfig {\n action: ButtonAction;\n iconName: string;\n iconTitle: string;\n cssClass: string;\n}\n\nconst fnGetButton = (action: ButtonAction, iconName: string, iconTitle: string, cssClass = iconName): ButtonConfig => ({\n action,\n iconName,\n iconTitle,\n cssClass\n});\n\nexport interface HeaderButtonsSignature {\n Element: HTMLDivElement;\n}\n\n/**\n * @classdesc\n * Icons to display in the header.\n */\n@intlPath({ path: 'app/app-header/header-buttons' })\nexport default class HeaderButtonsComponent extends Component {\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n @service declare intl: ADCIntlService;\n @service declare uxEvents: UxEventsService;\n\n /**\n * Alias for identity model.\n */\n @alias('contextManager.identityModel')\n declare identityModel: IdentityModel;\n\n /**\n * Login name of the currently logged in login.\n */\n @alias('identityModel.loginName')\n declare loginName: string;\n\n /**\n * Alias for dealer model.\n */\n @computed('contextManager.isLoading', 'identityModel.dealer')\n get dealer(): Promise | undefined {\n // Is the application context reloading?\n if (this.contextManager.isLoading) {\n // No dealer.\n return;\n }\n\n // Wrap dealer in promise and return.\n return (async () => await this.identityModel.dealer)();\n }\n\n /**\n * Should the help menu be shown?\n */\n @computed('dealer')\n get showHelpMenu(): Promise {\n return (async () => {\n const dealer = await this.dealer;\n return !!(dealer && dealer.showHelpMenu);\n })();\n }\n\n /**\n * The buttons to show in the header.\n *\n * @todo We should figure out how often the \"refresh\" button is clicked and potentially get rid of it.\n * Users should not be using it. If they are, we should figure out why and fix the underlying issue.\n */\n get buttons(): ButtonConfig[] {\n const buttonList: ButtonConfig[] = [\n fnGetButton(\n async () => {\n await this.uxEvents.recordActionOnPageEvent(RefreshHeaderButtonClicked);\n return this.contextManager.refreshApplication(true);\n },\n 'refresh',\n this.intl.tc(this, 'refresh')\n )\n ];\n\n const OperatorRoutes = [\n EmberOperatorPersonalSafety,\n EmberOperatorSelectAlarm,\n EmberVisualVerificationFlagging,\n EmberVisualVerificationLiveView,\n EmberVisualVerificationResponder,\n EmberVisualVerificationSD,\n EmberVisualVerificationSVR\n ];\n\n // VV and EE do not have a sidebar with a logout button, so we provide one in the top header.\n if (this.contextManager.isCurrentRoute(...OperatorRoutes)) {\n buttonList.push(\n fnGetButton(\n async () => {\n return this.contextManager.logout(false);\n },\n 'logout',\n this.intl.t('generic.logout')\n )\n );\n }\n\n return buttonList.filter((item) => item !== undefined && item !== null);\n }\n\n /**\n * The help button to show in the header.\n */\n get helpButton(): ButtonConfig {\n return fnGetButton(() => {}, 'question-circle', this.intl.tc(this, 'help'), 'help');\n }\n\n /**\n * The links to show in the question-mark icon's dropdown.\n */\n @computed('dealer', 'identityModel')\n get helpLinks(): Promise {\n return (async () => {\n const { contextManager, intl } = this,\n dealer = await this.dealer;\n\n if (!dealer) {\n return [];\n }\n\n const { supportPhone, externalSupportWebsite, hasSupportCenter, helpDocumentationUrl } = dealer;\n\n const helpLinks = [\n [supportPhone, `tel:${supportPhone}`, 'callSupport', 'phone'],\n [dealer.hasNewsAndUpdatesAccess, EmberNewsAndUpdates, 'newsAndUpdates', 'feature-dealernews'],\n // Support/Issues/Issue_Summary.aspx [ NOT FrontPoint AND has IssueSummary permission ]\n [hasSupportCenter, SupportCenter, 'supportCenter'],\n // External support website [ NO SupportCenter AND dealer has external support website ]\n [!hasSupportCenter && externalSupportWebsite, externalSupportWebsite, 'supportCenter', 'desktop'],\n // /system/support page [ NOT FrontPoint AND NO SupportCenter AND NO dealer branding external link ]\n [dealer.hasContactUs, EmberSupport],\n // Note: The knowledge base content should open in a new window, which is why we are using the URL.\n [!!helpDocumentationUrl, helpDocumentationUrl, 'helpDocumentation', 'contact-ok']\n ]\n .map(\n ([test, routeOrUrl, key = 'contactUs', icon = 'email']: [\n string | boolean,\n string,\n string,\n string\n ]) =>\n test\n ? DropdownActionItem.create({\n name: intl.tc(this, key),\n icon,\n action: () => this.transitionToRoute(routeOrUrl)\n })\n : undefined\n )\n .compact();\n\n if (!this.identityModel.belongsTo('selectedSystemGroup').id()) {\n // Add showing of onboarding for non-enterprise.\n helpLinks.push(\n DropdownActionItem.create({\n name: intl.tc(this, 'tour'),\n icon: 'presentation',\n action: () => {\n this.navigation.transitionToRouteId(EmberHome)?.then(() => {\n contextManager.startOnboardingTour(true);\n });\n }\n })\n );\n }\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n if (contextManager.getRouteItem(ReferAFriend)) {\n helpLinks.push(\n DropdownActionItem.create({\n name: intl.tc(this, 'referAFriend'),\n icon: 'user-add',\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n action: () => contextManager.transitionToRouteId(ReferAFriend)\n })\n );\n }\n\n return helpLinks;\n })();\n }\n\n /**\n * Transition to the desired routeId or external URL.\n */\n @action transitionToRoute(routeOrUrl: number | string): void {\n // If the param is a string, we want to open a new window and open the url there.\n if (typeof routeOrUrl === 'string') {\n window.open(\n routeOrUrl,\n 'contact_us_window',\n // NOTE: Most modern browsers open in a new tab, not a new window. Keeping this here in case\n // some other browsers operate differently. Don't expect this to always open a new window.\n 'scrollbars=yes,menubar=no,height=650,width=710,resizable=yes,toolbar=no,location=no,status=no'\n );\n\n return;\n }\n\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(routeOrUrl);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppHeader::HeaderButtons': typeof HeaderButtonsComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{#if (media \\'isMobile\\')}}\\n \\n {{@currentRouteData.pageTitle}}\\n \\n {{#if this.subNavVisible}}\\n {{#each @model as |link|}}\\n \\n {{link.pageTitle}}\\n \\n {{/each}}\\n
    \\n {{/if}}\\n {{else}}\\n {{#each @model as |link|}}\\n \\n {{link.pageTitle}}\\n \\n {{/each}}\\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/app/app-header/header-tabs/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isEnterOrSpaceCode } from '@adc/ember-utils/utils/a11y';\nimport { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type RouteItem from 'customer-site/models/navigation/route-item';\n\nexport interface AppHeaderTabsSignature {\n Element: HTMLUListElement;\n Args: {\n model: RouteItem[];\n currentRouteData: {\n routeName: string;\n pageTitle: string;\n routeItem: RouteItem;\n };\n };\n}\n\n/**\n * @classdesc\n * A view for displaying sub-navigational tabs below the main application header.\n */\n@intlPath({ path: 'app/app-header/header-tabs' })\nexport default class HeaderTabs extends Component {\n /**\n * Is the sub navigation menu visible?\n */\n @tracked subNavVisible = false;\n\n /**\n * Toggle the visibility of the sub navigation menu.\n */\n @action toggleSubNav(): void {\n this.subNavVisible = !this.subNavVisible;\n }\n\n /**\n * Toggle the visibility of the sub navigation menu.\n */\n @action toggleSubNavKeyPressed(evt: KeyboardEvent): void {\n if (isEnterOrSpaceCode(evt.code)) {\n this.subNavVisible = !this.subNavVisible;\n }\n }\n\n /**\n * Close sub navigation menu.\n */\n @action closeSubNav(): void {\n this.subNavVisible = false;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppHeader::HeaderTabs': typeof HeaderTabs;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#unless (is-mobile-app)}}\\n {{#if this.showMenuButton}}\\n \\n \\n \\n {{/if}}\\n\\n
\\n {{#if this.showBackArrow}}\\n \\n {{/if}}\\n\\n {{#if @showGroupSystemName}}\\n \\n {{/if}}\\n\\n {{#unless this.hideBackButtonText}}\\n {{@backButtonText}}\\n {{/unless}}\\n\\n {{#if @headerText}}\\n

{{@headerText}}

\\n {{/if}}\\n\\n {{#unless @isInitialSetupRequired}}\\n \\n {{/unless}}\\n
\\n {{/unless}}\\n\\n {{#if this.showHeaderTabs}}\\n
\\n \\n
\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/app/app-header/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { or, not, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { EmberOperatorSelectAlarm } from 'customer-site/enums/CustomerPageUrl';\nimport { OperatorPortalRoutes } from 'customer-site/enums/Operator';\n\nimport './_style.scss';\nimport type AccessibilityService from '@adc/ui-components/services/accessibility';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { AppHeaderTabsSignature } from './header-tabs';\n\ninterface AppHeaderComponentSignature {\n Element: HTMLElement;\n Args: {\n /** Title of the current page to be displayed in the center. */\n headerText: string;\n /** Title of the previous page to be displayed next to the back button. */\n backButtonText: string;\n /** Suppress the back button. */\n hideBackArrowWeb: boolean;\n isHeaderControl: boolean;\n isInitialSetupRequired: boolean;\n openNavPanel: () => void;\n subRoutes: AppHeaderTabsSignature['Args']['model'];\n showGroupSystemName: boolean;\n /** Indicates the application is on an operator page (visual verification or Remote Video Monitoring Console) */\n isOperatorSite: boolean;\n enableSidebar: boolean;\n currentRouteData: AppHeaderTabsSignature['Args']['currentRouteData'];\n isAlarmResponsePortal?: boolean;\n isAlarmSafetyButtonPortal?: boolean;\n };\n}\n\n/**\n * @classdesc\n * Header display\n */\nexport default class AppHeaderComponent extends Component {\n @service declare accessibility: AccessibilityService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare media: ADCResponsiveMediaService;\n\n /**\n * Should we hide the subroutes navigation from the app-header?\n */\n @reads('identityManager.identityModel.hideSubNav')\n declare hideSubNav: boolean;\n\n /**\n * Indicates if this is a mobile or tablet device.\n */\n @or('media.isMobile', 'media.isTablet')\n declare isMobileOrTablet: boolean;\n\n /**\n * Check if we are on Visual Verification Live View, SD Timeline or SVR Timeline page\n */\n @computed('args.currentRouteData')\n get isVVRoute(): boolean {\n const { currentRouteData } = this.args;\n return [\n 'visual-verification.live-view',\n 'visual-verification.svr-timeline',\n 'visual-verification.onboard-timeline',\n ...OperatorPortalRoutes\n ].includes(currentRouteData?.routeName);\n }\n\n @computed('args.currentRouteData')\n get defaultPageIfStackIsEmpty(): number | undefined {\n const { currentRouteData } = this.args;\n if (OperatorPortalRoutes.includes(currentRouteData?.routeName)) {\n return EmberOperatorSelectAlarm;\n }\n\n return undefined;\n }\n\n /**\n * Indicates if the back arrow should be shown.\n *\n * @note Back button should be shown if we have a previous route title.\n */\n @computed('args.{backButtonText,hideBackArrowWeb}', 'isVVRoute')\n get showBackArrow(): boolean {\n if (this.isVVRoute) {\n return true;\n }\n\n return !!this.args.backButtonText && !this.args.hideBackArrowWeb;\n }\n\n /**\n * Indicates if the hamburger menu button should be shown.\n */\n @computed('isMobileOrTablet', 'showBackArrow', 'args.{isOperatorSite,enableSidebar}')\n get showMenuButton(): boolean {\n const { isMobileOrTablet, showBackArrow } = this,\n { isOperatorSite } = this.args;\n\n // Show the button if this is a mobile/tablet device, we are not on an operator page,\n // and we either have the VV sidebar enabled or we are not showing the back arrow.\n if (isOperatorSite && !this.args.enableSidebar) {\n return false;\n }\n\n return isMobileOrTablet && !showBackArrow;\n }\n\n /**\n * Determines if the skip to main content button should be shown.\n */\n @not('isMobileOrTablet')\n declare showSkipButton: boolean;\n\n /**\n * Determines if the main title should be hidden.\n *\n * @note This should only happen when a mobile device is viewing a sub-route, or if the system and group name is being shown on the home page.\n */\n @computed('args.showGroupSystemName', 'isMobileOrTablet', 'showBackArrow')\n get hideBackButtonText(): boolean {\n const { isMobileOrTablet, showBackArrow } = this,\n { showGroupSystemName } = this.args;\n\n return !showBackArrow || showGroupSystemName || isMobileOrTablet;\n }\n\n /**\n * Should the header tabs be displayed?\n */\n @computed('args.isHeaderControl', 'hideSubNav')\n get showHeaderTabs(): boolean {\n return this.args.isHeaderControl && !this.hideSubNav;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppHeader': typeof AppHeaderComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{this.message}} \\n
\\n\",{ moduleName: \"customer-site/components/route-announcer/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport type Announcer from 'customer-site/services/announcer';\nimport './_style.scss';\n\nexport default class RouteAnnouncer extends Component {\n @service declare announcer: Announcer;\n\n @reads('announcer.announceTone')\n declare tone: string;\n\n @reads('announcer.announceMessage')\n message?: string;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n RouteAnnouncer: typeof RouteAnnouncer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if @model.footer.poweredByPath}}\\n
\\n {{tc\\n
\\n {{/if}}\\n\\n
    \\n {{#if @model.footer.copyrightInfo}}\\n
  • {{@model.footer.copyrightInfo}}
  • \\n {{/if}}\\n\\n {{#each this.footerLinks as |item|}}\\n
  • \\n {{#if item.ext}}\\n {{tc this item.link}}\\n {{else}}\\n \\n {{tc this item.link}}\\n \\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\",{ moduleName: \"customer-site/components/app/app-footer/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type IdentityModel from 'customer-site/models/identity';\n\ninterface AppFooterSignature {\n Element: HTMLElement;\n Args: {\n model: IdentityModel;\n };\n}\n\ntype FooterLink = {\n link: string;\n url?: string;\n ext: boolean;\n};\n\n/**\n * The main application footer.\n */\n@intlPath({ path: 'app/app-footer' })\nexport default class AppFooter extends Component {\n /**\n * The links that appear in the footer.\n */\n @computed(\n 'args.model.footer.{externalPrivacyPolicy,externalTerms,shouldHidePrivacyPolicyLink,shouldHideTermsAndConditionsLink}'\n )\n get footerLinks(): FooterLink[] {\n const { footer } = this.args.model,\n fnGetItem = (hide: boolean, link: string, url: string): FooterLink | undefined =>\n hide\n ? undefined\n : {\n link,\n url,\n ext: !!url\n };\n\n return [\n fnGetItem(footer.shouldHideTermsAndConditionsLink, 'terms', footer.externalTerms),\n fnGetItem(footer.shouldHidePrivacyPolicyLink, 'privacy', footer.externalPrivacyPolicy)\n ].filter((item): item is FooterLink => !!item);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppFooter': typeof AppFooter;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#unless (is-mobile-app)}}\\n \\n{{/unless}}\\n\\n\\n\\n\\n\\n{{#if this.showLoadingIndicator}}\\n \\n{{/if}}\\n\\n
\\n {{#unless this.hideElements}}\\n \\n {{/unless}}\\n\\n {{#unless this.hideHeader}}\\n \\n {{/unless}}\\n\\n
\\n
\\n {{!-- This also serves for rebinding of the template on refresh. --}}\\n {{#unless this.isInactive}}\\n {{#unless (is-mobile-app)}}\\n \\n {{/unless}}\\n {{outlet}}\\n {{/unless}}\\n
\\n\\n {{#unless this.hideElements}}\\n \\n {{/unless}}\\n\\n
\\n
\\n
\\n\\n\\n\\n\\n\\n\",{ moduleName: \"customer-site/application/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\",{ moduleName: \"customer-site/builder-trial-account-expiration-warning/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: Controller needs model defined and need to convert to PageView to get type safe. }}\\n\\n \\n \\n \\n\",{ moduleName: \"customer-site/classes/users/edit/contact-information/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n

{{t (this.getTranslationKey @titleKey)}}

\\n {{#each @addresses as |contact|}}\\n
\\n
\\n \\n \\n
\\n
\\n {{!-- @glint-expect-error: Please convert this component to TS. --}}\\n \\n \\n
\\n
\\n {{/each}}\\n\\n {{#if @addText}}\\n \\n {{/if}}\\n\\n {{#if (and @checkboxLabel @checkboxDetails)}}\\n \\n \\n \\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/new-user-add-contact-information/contact-type/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nimport './_style.scss';\nimport type Model from '@ember-data/model';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\n\nexport interface NewUserContactInformationContactTypeSignature {\n Element: HTMLDivElement;\n Args: {\n permissions: BasePermissionsCollection;\n addresses: AsyncHasMany;\n titleKey: string;\n icon: string;\n addText?: string;\n add: VoidFunction;\n checkboxLabel?: string;\n checkboxDetails?: string;\n checkboxSelected: boolean;\n toggleCheckbox: VoidFunction;\n checkboxErrorTooltipKey?: string;\n };\n}\n\n/**\n * @classdesc\n * Allows us to add email and mobile contact addresses easily during user creation.\n */\nexport default class NewUserContactInformationContactType extends Component {\n getTranslationKey = (key: string): string => `classes.users.edit.new-user-add-contact-information.${key}`;\n\n /**\n * Delete the contact.\n */\n @action\n deleteContact(address: Model): void {\n address.destroyRecord();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::NewUserAddContactInformation::ContactType': typeof NewUserContactInformationContactType;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\nexport interface IsPointCentralSignature {\n Return: boolean;\n}\n\n/**\n * Indicates if the app is running within a PointCentral user context.\n */\nexport default class IsPointCentral extends Helper {\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n compute(): IsPointCentralSignature['Return'] {\n return this.identityManager.isPointCentral ?? false;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'is-pointcentral': typeof IsPointCentral;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n\\n \\n
\\n\",{ moduleName: \"customer-site/components/users/item/new-user-add-contact-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action, computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Guest } from 'customer-site/enums/AccessPointUserType';\nimport { Guest as PointCentralGuest } from 'customer-site/enums/PointCentralUserType';\n\nimport './_style.scss';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type User from 'customer-site/models/users/user';\n\nexport interface NewUserContactInformationComponentSignature {\n Args: {\n /** The user we are viewing. */\n user: User;\n /** The permissions that determine possible actions in the component. */\n permissions: BasePermissionsCollection;\n /**\n * Should the send welcome email checkbox error tooltip be visible?\n * Note: This tooltip should be visible when the user tries to continue to the next step of\n * user creation with the 'Send welcome email by default' checkbox checked but not email\n * addresses listed.\n */\n openSendWelcomeEmailErrorToolTip: boolean;\n /**\n * Should the send welcome text checkbox error tooltip be visible?\n * Note: This tooltip should be visible when the user tries to continue to the next step of\n * user creation with the 'Send welcome text by default' checkbox checked but no mobile\n * addresses listed.\n */\n openSendWelcomeTextErrorToolTip: boolean;\n };\n}\n\n/**\n * @classdesc\n * Allows us to add email and mobile contact addresses easily during user creation.\n */\nexport default class NewUserContactInformationComponent extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare store: ServiceRegistry['store'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n constructor(owner: unknown, args: NewUserContactInformationComponentSignature['Args']) {\n super(owner, args);\n\n assert('A user must be passed to the new user contact information component.', args.user);\n assert('Permissions must be passed to the new user contact information component.', args.permissions);\n }\n\n // region Computed Properties\n\n @tracked _openSendWelcomeEmailErrorToolTip = false;\n get openSendWelcomeEmailErrorToolTip(): boolean {\n return this._openSendWelcomeEmailErrorToolTip || this.args.openSendWelcomeEmailErrorToolTip;\n }\n set openSendWelcomeEmailErrorToolTip(value: boolean) {\n this._openSendWelcomeEmailErrorToolTip = value;\n }\n\n @tracked _openSendWelcomeTextErrorToolTip = false;\n get openSendWelcomeTextErrorToolTip(): boolean {\n return this._openSendWelcomeTextErrorToolTip || this.args.openSendWelcomeTextErrorToolTip;\n }\n set openSendWelcomeTextErrorToolTip(value: boolean) {\n this._openSendWelcomeTextErrorToolTip = value;\n }\n\n /**\n * Are we viewing a guest user?\n */\n @computed('args.user.deviceAccess.{userType,pointCentralUserType}')\n get isGuestUser(): Promise {\n return this.args.user.deviceAccess.then(\n ({ pointCentralUserType, userType }) => pointCentralUserType === PointCentralGuest || userType === Guest\n );\n }\n\n @computed('args.{user.emailAddresses.length,permissions.maxEmailAddresses}')\n get canAddMoreEmail(): boolean {\n return this.args.user.hasMany('emailAddresses').ids().length < this.args.permissions.maxEmailAddresses;\n }\n\n @computed('args.{user.mobileAddresses.length,permissions.maxMobileAddresses}')\n get canAddMoreText(): boolean {\n return this.args.user.hasMany('mobileAddresses').ids().length < this.args.permissions.maxMobileAddresses;\n }\n\n @computed('args.user.{scheduleWelcomeEmail,welcomeEmailDaysOffset}')\n get checkboxText(): { email: string; emailDescription: string; text: string; textDescription: string } {\n const fnTranslation = (key: string): string => `classes.users.edit.new-user-add-contact-information.${key}`,\n fn = (scheduleKey: string, defaultKey: string) => {\n const { intl } = this;\n if (this.args.user.scheduleWelcomeEmail) {\n return intl.t(fnTranslation(scheduleKey), {\n numDays: this.args.user.welcomeEmailDaysOffset\n });\n }\n\n return intl.t(fnTranslation(defaultKey));\n };\n\n return {\n email: fn('sendWelcomeEmailOnSchedule', 'sendWelcomeEmailByDefault'),\n emailDescription: fn('sendWelcomeEmailOnScheduleDescription', 'sendWelcomeEmailByDefaultDescription'),\n text: fn('sendWelcomeTextOnSchedule', 'sendWelcomeTextByDefault'),\n textDescription: fn('sendWelcomeTextOnScheduleDescription', 'sendWelcomeTextByDefaultDescription')\n };\n }\n\n /**\n * Should the option to send welcome messages by default be shown?\n */\n @computed('args.user.deviceAccess.{userType,pointCentralUserType}', 'identityManager.isPointCentral')\n get showSendWelcomeMessagesByDefaultCheckboxes(): boolean | Promise {\n return (async () => {\n const deviceAccess = await this.args.user.deviceAccess;\n\n // We don't want PointCentral Notification Only Users to have the option to send welcome message by default since they don't have user codes.\n return !(this.identityManager.isPointCentral && deviceAccess.isNotificationOnlyUser);\n })();\n }\n\n // endregion\n\n // region Actions\n\n private async toggleByDefault(guest: keyof User, nonGuest: keyof User, v: boolean): Promise {\n set(this.args.user, (await this.isGuestUser) ? guest : nonGuest, v);\n }\n\n /**\n * Toggle the 'Send welcome email by default' feature.\n */\n @action\n toggleWelcomeEmailByDefault(): void {\n this.openSendWelcomeEmailErrorToolTip = false;\n this.toggleByDefault(\n 'sendGuestWelcomeEmailByDefault',\n 'sendNonGuestWelcomeEmailByDefault',\n !this.args.user.shouldSendWelcomeEmailByDefault\n );\n }\n\n /**\n * Toggle the 'Send welcome text by default' feature.\n */\n @action\n toggleWelcomeTextByDefault(): void {\n this.openSendWelcomeTextErrorToolTip = false;\n this.toggleByDefault(\n 'sendGuestWelcomeTextByDefault',\n 'sendNonGuestWelcomeTextByDefault',\n !this.args.user.shouldSendWelcomeTextByDefault\n );\n }\n\n /**\n * Add another email address to this user.\n */\n @action\n addEmailAddress(): void {\n this.openSendWelcomeEmailErrorToolTip = false;\n this.store.createRecord('users/email-address', {\n user: this.args.user\n });\n }\n\n /**\n * Add another mobile address to this user.\n */\n @action\n addMobileAddress(): void {\n this.openSendWelcomeTextErrorToolTip = false;\n this.store.createRecord('users/mobile-address', {\n user: this.args.user\n });\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::NewUserAddContactInformation': typeof NewUserContactInformationComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n

\\n {{t \\'classes.users.edit.new-user-add-contact-information.newUserAddContactInformationPageHeader\\'}}\\n

\\n
\\n \\n
\\n
\\n\\n\",{ moduleName: \"customer-site/classes/users/edit/new-user-add-contact-information/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if @image}}\\n
\\n
\\n \\n {{@imageAlt}}\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n
\\n
\\n {{#if @subheading}}\\n \\n {{@subheading}}\\n \\n {{/if}}\\n\\n {{#if @heading}}\\n

\\n {{ @heading }}\\n

\\n {{/if}}\\n\\n {{#if @text}}\\n
\\n {{ @text }}\\n
\\n {{/if}}\\n
\\n
\\n
\\n
\\n
\",{ moduleName: \"customer-site/components/marketing/hero.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './hero.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_hero.scss';\n\ninterface MarketingHeroSignature {\n Args: {\n image?: string;\n imageAlt?: string;\n subheading?: string;\n heading?: string;\n text?: string;\n };\n}\n\nconst MarketingHero = templateOnlyComponent();\nexport default MarketingHero;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Marketing::Hero': typeof MarketingHero;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n

{{@model.itemName}}

\\n\\n

{{safe-html this.priceText}}

\\n\\n {{#if this.isOrderable}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n\\n \\n\\n \\n
\\n
\\n
\\n

{{@model.sectionOneHeader}}

\\n

{{@model.sectionOneText}}

\\n
\\n {{tc\\n
\\n\\n {{#if @model.keyFeatures}}\\n
\\n
\\n
\\n

{{tc this \\'keyFeatures\\'}}

\\n {{#if @model.doKeyFeaturesVaryByModel}}\\n

{{tc this \\'varyByModel\\'}}

\\n {{/if}}\\n
\\n
    \\n {{#each @model.keyFeatures as |feature|}}\\n
  • {{feature}}
  • \\n {{/each}}\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if (and this.isSolar @model.solarIntegrationUrl)}}\\n
\\n

{{tc this \\'interestedInSolar\\'}}

\\n \\n {{!-- Commented out until Legal adds the subtext to the spec\\n

{{tc this \\'solarLegalSubtext\\'}}

--}}\\n

{{tc this \\'alreadyHaveSolar\\'}}

\\n
\\n {{/if}}\\n\\n
\\n {{tc\\n
\\n

{{@model.itemName}}

\\n

{{safe-html this.priceText}}

\\n
\\n {{#if this.isOrderable}}\\n \\n {{/if}}\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n\",{ moduleName: \"customer-site/customer-shop/item/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n

{{tc this \\'selectThermostat\\'}}

\\n\\n
    \\n {{!-- @glint-expect-error: Please convert this to PageView for type safety. --}}\\n {{#each thermostats as |thermostat|}}\\n {{#if thermostat.supportsHvacAnalytics}}\\n
  • \\n \\n

    {{thermostat.description}}

    \\n \\n
    \\n
  • \\n {{/if}}\\n {{/each}}\\n
\\n
\\n\\n \\n\\n \\n \\n
\\n\",{ moduleName: \"customer-site/dashboards/thermostats/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n\",{ moduleName: \"customer-site/dashboards/thermostats/thermostat/comfort/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n\",{ moduleName: \"customer-site/dashboards/thermostats/thermostat/cycle/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n\",{ moduleName: \"customer-site/dashboards/thermostats/thermostat/efficiency/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:card-toolbar>\\n \\n

{{@title}}

\\n
\\n \\n\\n <:card-body>\\n {{yield}}\\n \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/severity-status/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { A } from '@ember/array';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n createToolbarButton,\n getDrillToDetailsButton\n} from 'customer-site/components/dashboard-cards/card-toolbar/index';\nimport { Unknown, Ok } from 'customer-site/enums/SeverityStatus';\nimport { getSeverityStatusIcon, getSeverityStatusTranslation } from 'customer-site/utils/severity-status';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { ToolbarButton } from 'customer-site/components/dashboard-cards/card-toolbar/index';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface DashboardCardsSeverityStatusSignature {\n Args: {\n cardId: string;\n title: string;\n status?: number;\n transitionRouteId?: number;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default class DashboardCardsSeverityStatus extends Component {\n @service declare navigation: NavigationService;\n @service declare intl: ADCIntlService;\n\n get buttons(): ToolbarButton[] {\n const { intl, args } = this,\n { status = Unknown } = args;\n\n return A([\n status === Ok\n ? undefined\n : createToolbarButton(\n getSeverityStatusTranslation(status, (k: string) => intl.t(k)),\n getSeverityStatusIcon(status),\n {\n fn: this.goToDetails\n }\n ),\n args.transitionRouteId ? getDrillToDetailsButton(intl, this.goToDetails) : undefined\n ]).compact();\n }\n\n @action private goToDetails(): void {\n const { transitionRouteId } = this.args;\n if (transitionRouteId) {\n this.navigation.transitionToRouteId(transitionRouteId);\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::SeverityStatus': typeof DashboardCardsSeverityStatus;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n

\\n \\n {{!-- @glint-expect-error Please convert to PageView for type safety. --}}\\n {{get data.filteredDiagnostics \\\"0.thermostatDescription\\\"}}\\n \\n \\n {{t \\'dashboards.thermostats.thermostat.lastTwentyFourHours\\'}}\\n \\n

\\n\\n
\\n {{!-- @glint-expect-error Please convert to PageView for type safety. --}}\\n {{#each data.filteredDiagnostics as |diagnostic idx|}}\\n \\n \\n \\n {{/each}}\\n
\\n
\\n\\n \\n \\n
\\n\",{ moduleName: \"customer-site/dashboards/thermostats/thermostat/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n\",{ moduleName: \"customer-site/dashboards/thermostats/thermostat/runtime/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n \\n
\\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/mode-toggle.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './mode-toggle.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { ThermostatDiagnosticsModel } from 'customer-site/dashboards/thermostats/thermostat/route';\n\nexport interface DashboardsThermostatsModeToggleSignature {\n Element: HTMLDivElement;\n Args: {\n model: ThermostatDiagnosticsModel;\n };\n}\n\nconst DashboardsThermostatsModeToggle = templateOnlyComponent();\nexport default DashboardsThermostatsModeToggle;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::ModeToggle': typeof DashboardsThermostatsModeToggle;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: Convert to PageView for type safe and figure out how to type meta data }}\\n\\n \\n \\n\\n \\n
\\n {{#let\\n data.meta.supportsHeatAndCool\\n data.meta.serviceRequestEligible\\n (media \\'isMobile\\')\\n as |showToggle serviceRequestEligible isMobile|}}\\n {{#if (or (and showToggle (not isMobile)) serviceRequestEligible)}}\\n \\n {{#if (and showToggle (not isMobile))}}\\n \\n {{/if}}\\n\\n {{#if serviceRequestEligible}}\\n \\n {{tc this \\'requestService\\'}}\\n \\n {{/if}}\\n \\n {{/if}}\\n\\n {{outlet}}\\n\\n {{#if (and showToggle isMobile)}}\\n \\n {{/if}}\\n {{/let}}\\n
\\n
\\n\\n \\n \\n
\\n\",{ moduleName: \"customer-site/dashboards/thermostats/thermostat/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/external-page/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n {{safe-html data.html}}\\n \\n\\n \\n \\n\\n\",{ moduleName: \"customer-site/info/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- @glint-expect-error The showInModal property doesn\\'t seem to exist, please fix this. --}}\\n{{#unless this.showInModal}}\\n {{#if this.showModalOverlay}}\\n {{#in-element this.overlayDestination insertBefore=null}}\\n
\\n
\\n
\\n {{/in-element}}\\n {{/if}}\\n\\n\\n {{!-- The wrapping div element is important because setIframeHeight in components/app/legacy-page-iframe/component.ts\\n manipulates the parent node of the iframe\\'s height attribute. We don\\'t want some random element\\'s height to be changed,\\n as that can cause UI bugs and side-effects. --}}\\n
\\n {{!-- @glint-expect-error Please convert this component to TS. --}}\\n \\n
\\n{{/unless}}\",{ moduleName: \"customer-site/legacy-page/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n

{{t \\'mobile.help.welcome\\' dealerName=data.dealer.name}}

\\n\\n {{#each (await @model.contacts) as |link|}}\\n \\n {{/each}}\\n
\\n\\n \\n \\n
\",{ moduleName: \"customer-site/mobile/help/contact/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n

{{t \\'mobile.help.welcome\\' dealerName=data.dealer.name}}

\\n\\n {{#each (await this.links) as |link|}}\\n \\n {{/each}}\\n
\\n\\n \\n \\n
\",{ moduleName: \"customer-site/mobile/help/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{!-- @glint-expect-error Please convert to PageView. --}}\\n \\n\\n {{!-- @glint-expect-error Please convert this component to TS. --}}\\n \\n\\n \\n\\n\",{ moduleName: \"customer-site/news-and-updates/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"

\\n {{tc this \\'pageText\\'}}\\n

\\n\",{ moduleName: \"customer-site/not-found/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |data|>\\n
\\n \\n\\n
\\n \\n
\\n\\n
\\n \\n
\\n
\\n \\n\\n\",{ moduleName: \"customer-site/notifications/manage-devices/edit/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |data|>\\n

{{tc this \\'description\\'}}

\\n
\\n \\n {{#each data.devices as |device|}}\\n \\n {{/each}}\\n
\\n
\\n \\n
\\n \\n\\n\",{ moduleName: \"customer-site/notifications/manage-devices/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n {{tc\\n
\\n

{{tc this \\'notEligibile\\' htmlSafe=true}}

\\n

{{tc this \\'reasonsNotEligible\\'}}

\\n
    \\n {{#each (array \\'One\\' \\'Two\\' \\'Three\\' \\'Four\\' \\'Five\\') as |number|}}\\n
  1. {{tc this (concat \\'notEligibleReason\\' number)}}

  2. \\n {{/each}}\\n
\\n

{{tc this \\'forMoreInfo\\'}}

\\n
    \\n
  • {{this.coverageArea}}

  • \\n
  • {{this.readFaqs}}

  • \\n
\\n

{{this.contactUsEmail}}

\\n
\",{ moduleName: \"customer-site/components/smart-coverage/error-message/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { SafeString } from '@ember/template';\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\ninterface SmartCoverageErrorMessageSignature {\n Args: {\n imagePath: string;\n };\n}\n\n@intlPath({ path: 'smart-coverage/error-message' })\nexport default class SmartCoverageErrorMessage extends Component {\n @service declare intl: ADCIntlService;\n @service declare identityManager: IdentityManager;\n\n /**\n * Returns text from the resource file with the email being a link to open in a email client.\n * @returns An HTML safe string\n */\n get contactUsEmail(): SafeString {\n return htmlSafe(\n this.intl.tc(this, 'contactUs', {\n contactAnchor: this.anchorHtml('mailto:contact@smartcoverage.com', 'emailContact')\n })\n );\n }\n\n /**\n * Returns text from the resource file with a link to the smart coverage coverage area.\n * @returns An HTML safe string\n */\n get coverageArea(): SafeString {\n return htmlSafe(\n this.anchorHtml('https://smartcoverage.com/about-us/?OpenExternally=true#coverage-area', 'coverageArea')\n );\n }\n\n /**\n * Returns text from the resource file with a link to the smart coverage coverage FAQs.\n * @returns An HTML safe string\n */\n get readFaqs(): SafeString {\n return htmlSafe(this.anchorHtml('https://smartcoverage.com/about-us/?OpenExternally=true#faq', 'readFaqs'));\n }\n\n /**\n * Helper function to generate the anchor tags displayed on the page\n * @param {String} href - The URL the navigate to\n * @param {String} resourceKey - The resource key to use for the link's text\n * @returns An HTML anchor element as a string\n */\n anchorHtml(href: string, resourceKey: string): string {\n return `${this.intl.tc(this, resourceKey)}`;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'SmartCoverage::ErrorMessage': typeof SmartCoverageErrorMessage;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n {{tc\\n
\\n
\\n

{{tc this \\'policySelectionTitle\\'}}

\\n\\n
\\n \\n \\n

{{tc this \\'homeAutoTitle\\'}}

\\n \\n\\n \\n \\n

{{tc this \\'businessInsuranceTitle\\'}}

\\n \\n
\\n
\\n
\",{ moduleName: \"customer-site/components/smart-coverage/policy-selection/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\n\ninterface SmartCoveragePolicySelectionSignature {\n Args: {\n setTargetPolicyType: (policyType: SmartCoveragePolicyType) => void;\n imagePath: string;\n };\n}\n\n@intlPath({ path: 'smart-coverage/policy-selection' })\nexport default class SmartCoveragePolicySelection extends Component {\n policyTypeEnum = SmartCoveragePolicyType;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'SmartCoverage::PolicySelection': typeof SmartCoveragePolicySelection;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |PageViewContainer|>\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data.showErrorPage}}\\n \\n {{else if this.displayPolicySelection}}\\n \\n {{else}}\\n
\\n {{tc\\n
\\n
\\n

{{this.title}}

\\n

{{this.subTitle}}

\\n

{{tc this \\'tapGetQuote\\'}}

\\n \\n
\\n\\n
\\n
\\n \\n

\\n {{this.termsAndPrivacyDescription}}\\n

\\n
\\n
\\n\\n
\\n \\n
\\n\\n {{#if this.learnMoreClick}}\\n
\\n

{{tc this \\'aboutSmartCoverage\\'}}

\\n
\\n\\n
\\n {{tc\\n
\\n\\n
\\n

{{this.aboutDescription}}

\\n
\\n

{{tc this \\'nextSteps\\'}}

\\n
\\n
{{tc this \\'one\\'}}
\\n

{{this.stepOne}}

\\n
\\n
\\n
{{tc this \\'two\\'}}
\\n

{{tc this \\'stepTwoText\\'}}

\\n
\\n
\\n
{{tc this \\'three\\'}}
\\n

{{this.stepThree}}

\\n
\\n
\\n
\\n

\\n {{tc this \\'alreadyHaveInsurance\\'}}\\n {{tc this \\'switchingIsEasy\\'}}\\n

\\n
\\n
\\n \\n

{{tc this \\\"threeMinutesOrLess\\\"}}

\\n
\\n \\n

{{this.termsAndPrivacyDescription}}

\\n
\\n {{tc\\n
\\n
\\n {{/if}}\\n {{/if}}\\n \\n <:error as |PageViewError|>\\n \\n \\n
\\n \\n
\\n\",{ moduleName: \"customer-site/smart-coverage/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |PageViewContainer|>\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n <:default as |data|>\\n
\\n {{tc\\n
\\n\\n
\\n

{{tc this \\'chooseLocations\\'}}

\\n

{{this.multiLocationMessage}}

\\n
\\n \\n
\\n {{#if this.isMultiSelect}}\\n \\n {{/if}}\\n\\n {{#each this.filteredLocations as |property|}}\\n
\\n \\n

{{property.name}}

\\n

{{property.address}}

\\n \\n \\n
\\n {{/each}}\\n
\\n \\n
\\n
\\n \\n <:error as |PageViewError|>\\n \\n \\n
\\n \\n
\",{ moduleName: \"customer-site/smart-coverage/select-properties/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n\\n\",{ moduleName: \"customer-site/wizard-launch/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"export { default } from \\'@adc/add-device-engine/categories/devices/default-notifications/template\\';\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/_app_/categories/devices/default-notifications/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n
\\n {{#if this.isNest}}\\n {{data.device.longName}}\\n {{else}}\\n {{#if data.device.additionalImage}}\\n {{data.device.longName}}/\\n {{else}}\\n {{data.device.longName}}\\n {{/if}}\\n {{/if}}\\n
\\n {{#unless this.showAlreadyLinkedText}}\\n

{{tc this \\'title\\'}}

\\n

\\n {{tc this \\'description\\' manufacturerName=data.device.manufacturerName}}\\n

\\n
\\n {{#if data.device.linkDevicesUrl}}\\n \\n {{/if}}\\n {{/unless}}\\n\\n

{{tc this \\'manageTitle\\'}}

\\n {{#if this.isNest}}\\n

{{tc this \\'nestManageDescription\\'}}

\\n
\\n \\n
\\n {{else if this.isOAuth}}\\n

{{tc this \\'unlinkDescription\\' manufacturerName=data.device.manufacturerName}}

\\n {{/if}}\\n\\n {{#if this.isOAuth}}\\n \\n {{else}}\\n

{{tc this \\'manageDescription\\'}}

\\n
\\n \\n
\\n {{/if}}\\n\\n {{#if (and this.isMobile (await this.supportsDeepLinkDeviceAddition))}}\\n
\\n {{#if this.showConfigureDevices}}\\n

{{tc this \\'reconfigureTitle\\'}}

\\n

{{tc this \\'reconfigureDescription\\' integrationName=data.device.manufacturerName}}

\\n \\n {{/if}}\\n\\n {{#if this.showUpdateWifi}}\\n

{{tc this \\'wifiSettingsTitle\\'}}

\\n

{{tc this \\'wifiSettingsDescription\\' integrationName=data.device.manufacturerName}}

\\n
    \\n
  • {{tc this \\'wifiSettingsNamePw\\'}}
  • \\n
  • {{tc this \\'wifiSettingsThirdPartyApp\\' integrationName=data.device.manufacturerName}}
  • \\n
\\n \\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/already-linked/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n
\\n {{#if data.device.additionalImage}}\\n {{data.device.longName}}/\\n {{else}}\\n {{data.device.longName}}\\n {{/if}}\\n
\\n\\n

{{tc this \\'heading\\'}}

\\n\\n {{#if data.hasNVI}}\\n {{! Show list steps for nest video }}\\n

{{tc this \\'googleAppNextStepNoDevices\\'}}

\\n
    \\n
  1. {{tc this \\'nestDevicesAndServices\\'}}
  2. \\n
  3. {{tc this \\'adtControlApp\\'}}
  4. \\n
\\n\\n
\\n \\n {{#if this.showVisibilityListener}}\\n \\n {{/if}}\\n
\\n {{else}}\\n {{! nest integration (thermostat) and nest aware resale (doorbell) view only shows a single step }}\\n

{{tc this \\'googleAppNextStep\\'}}

\\n\\n
\\n \\n {{#if this.showVisibilityListener}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/link-complete/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n
\\n \\n
\\n

{{tc this \\'header\\'}}

\\n

\\n {{tc this \\'subtext\\'}}\\n

\\n\\n
\\n \\n
\\n {{#if this.showAddMoreDevices}}\\n
\\n\\n

{{tc this \\'additionalDevices\\'}}

\\n\\n
\\n \\n
\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/link-congratulations/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n
\\n

{{tc this \\'heading\\'}}

\\n
\\n\\n

{{tc this \\'accessAllow\\'}}

\\n

{{tc this \\'nextStep\\'}}

\\n\\n
\\n \\n
\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/link-in-progress/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n
\\n

{{tc this \\'heading\\'}}

\\n
\\n\\n {{#if this.nestResaleFlow}}\\n

{{tc this \\'nestAwareAccess\\'}}

\\n

{{tc this \\'nestAwareNextStep\\'}}

\\n {{else}}\\n

{{tc this \\'accessDisclaimer\\'}}

\\n

{{tc this \\'accessExplanation\\'}}

\\n

{{tc this \\'nextStep\\'}}

\\n {{/if}}\\n\\n
\\n \\n
\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/link-start/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n \\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/link-unsuccessful/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n

{{tc this \\'heading\\'}}

\\n\\n

\\n {{tc this \\'descriptionText\\'}}\\n

\\n
\\n \\n
\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/mount/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n
\\n \\n
\\n\\n

{{tc this \\'heading\\'}}

\\n\\n {{#unless this.isNestResaleFlow}}\\n

\\n {{tc this (if data.hasNVI \\'subheadingCamera\\' \\'subheadingThermostat\\')}}\\n

\\n {{/unless}}\\n\\n
    \\n {{#each this.StepDescriptions as |step|}}\\n
  1. {{step}}
  2. \\n {{/each}}\\n
\\n\\n
\\n \\n
\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/start-info/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n {{#if this.deviceAdded}}\\n

{{tc this \\'deviceAdded\\' deviceName=data.device.displayName}}

\\n\\n

{{tc this \\'testFailContactUs\\'}}

\\n\\n
\\n {{data.dealer.supportPhone}}\\n {{data.dealer.supportEmail}}\\n
\\n {{else}}\\n
\\n

{{tc this \\'prompt\\'}}

\\n
\\n {{/if}}\\n\\n
\\n
\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/categories/devices/troubleshoot/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#if data}}\\n
\\n

{{tc this \\'deleteTitle\\'}}

\\n\\n

{{tc this \\'deleteMessage\\'}}

\\n\\n

{{tc this \\'prePairedListTitle\\'}}

\\n\\n \\n <:label as |item|>\\n \\n \\n \\n
\\n\\n \\n {{/if}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/choose-device/delete-device/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n {{#let (eq data.length 0) as |noDevices|}}\\n
\\n

\\n {{this.getTranslation (if noDevices \\'devicesTitle\\' \\'chooseDeviceMessage\\')}}\\n

\\n\\n
\\n {{#if noDevices}}\\n

{{this.getTranslation \\'noDevicesInstalledMessage\\'}}

\\n {{else}}\\n
\\n {{#each data as |device|}}\\n \\n {{/each}}\\n
\\n {{/if}}\\n \\n
\\n
\\n
\\n {{#if this.allSetUpsComplete}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n {{/let}}\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/choose-device/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n
\\n

{{tc this \\'troubleshootingTitle\\'}}

\\n\\n

{{tc this \\'troubleshootingMessage\\'}}

\\n\\n \\n
\\n\\n
\\n \\n \\n
\\n
\\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/choose-device/troubleshoot-missing/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n\\n\\n\\n\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/add-device-engine.eeb53bff/node_modules/@adc/add-device-engine/components/button-sign-in-google/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n
\\n
\\n

{{tc this \\'accountInformationHeader\\'}}

\\n {{#if this.accountInformation.canEditAccountInformation}}\\n {{#if this.editMode}}\\n

{{tc this \\'requiredFieldsNotice\\'}}

\\n {{else}}\\n \\n {{/if}}\\n {{/if}}\\n

{{tc this \\'mustEnableEditMode\\'}}

\\n
\\n\\n
\\n
\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n
\\n\\n
\\n {{#if this.accountInformation.isBusiness}}\\n \\n \\n \\n\\n {{else}}\\n
\\n {{/if}}\\n\\n \\n \\n \\n\\n \\n \\n \\n
\\n
\\n\\n {{!-- Mailing address section --}}\\n
\\n {{#unless this.isSystemInstall}}\\n

{{tc this \\'mailingAddressHeader\\'}}

\\n {{ tc this \\'mailingAddressNotShownNotice\\'}}\\n {{else}}\\n

{{tc this \\'AddressHeader\\'}}

\\n {{/unless}}\\n
\\n\\n \\n
\\n
\\n \\n \\n \\n\\n {{#if countryAddressResources.shouldShowStreet1}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if countryAddressResources.shouldShowCity}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if countryAddressResources.shouldShowSubCity}}\\n \\n \\n \\n {{/if}}\\n
\\n\\n
\\n {{#if countryAddressResources.shouldShowPostalCode}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if countryAddressResources.shouldShowStreet2}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if countryAddressResources.shouldShowRegion}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if countryAddressResources.shouldShowSubRegion}}\\n \\n \\n \\n {{/if}}\\n
\\n
\\n
\\n\\n {{#unless this.isSystemInstall}}\\n
\\n \\n {{ tc this \\'mailingAddressDifferentNotice\\'}}\\n
\\n {{/unless}}\\n\\n {{#if this.editMode }}\\n {{#unless this.accountInformation.canEditEmailPreferences}}\\n {{#if this.isSystemInstall}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n\\n \\n
\\n {{/if}}\\n {{/unless}}\\n {{/if}}\\n
\\n
\\n \\n \\n\\n\\n {{#if this.accountInformation.canEditEmailPreferences}}\\n \\n \\n
\\n

{{tc this \\'emailPreference\\'}}

\\n

{{tc this \\'emailPreferenceText\\'}}

\\n\\n

{{tc this \\'marketingCommunications\\'}}

\\n
\\n {{#each this.marketingCommunications as |marketingCommunication|}}\\n \\n
\\n {{marketingCommunication.name}}\\n {{marketingCommunication.description}}\\n
\\n {{/each}}\\n
\\n\\n {{#if this.editMode }}\\n {{#if this.isSystemInstall}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n \\n {{/if}}\\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/account-information/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |PageViewContainer|>\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default>\\n
\\n {{#if this.canShowAccountSetupHeaderText}}\\n

{{tc this \\'pageTitle\\'}}

\\n {{/if}}\\n

{{tc this \\'description\\'}}

\\n
\\n
\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n {{#if this.isCustomSchedule}}\\n \\n {{/if}}\\n \\n
\\n
\\n \\n \\n <:content as |item|>{{item.props.iconDesc}}\\n \\n
\\n \\n \\n \\n
\\n \\n\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/arming-reminder/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n {{#if this.isSystemInstall}}\\n

{{t \\'@adc/login-setup-engine.communication-preferences.pageTitle\\'}}

\\n {{/if}}\\n

{{t \\'@adc/login-setup-engine.communication-preferences.communicationsPreferencesMessage\\'}}

\\n\\n {{#each (await this.categoryPreferences) as |category|}}\\n \\n

{{category.categoryName}}

\\n\\n {{#each category.communicationMethods as |method|}}\\n {{#if method.isVisible}}\\n \\n {{/if}}\\n {{/each}}\\n
\\n {{/each}}\\n\\n {{#if this.isSystemInstall}}\\n
\\n \\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/communication-preferences/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n {{#if @device.isCurrentDevice}}\\n
\\n \\n
\\n {{/if}}\\n\\n
\\n

{{coalesce @device.customDeviceName @device.name}}

\\n\\n

\\n {{#if @device.isCurrentDevice}}\\n

{{t \\'@adc/login-setup-engine.recognized-devices.index.thisDevice\\'}}

\\n {{else if @device.isVoiceDevice}}\\n {{t \\'@adc/login-setup-engine.recognized-devices.index.linkedOn\\'\\n linkDate=@device.formattedFirstDateTime}}\\n {{else}}\\n {{t \\'@adc/login-setup-engine.recognized-devices.index.lastLogin\\'\\n lastLogin=@device.formattedLastDateTime}}\\n {{/if}}\\n\\n {{#if @device.location}}\\n {{t \\'@adc/login-setup-engine.recognized-devices.index.location\\'\\n location=@device.location}}\\n {{/if}}\\n

\\n
\\n
\\n\\n
\\n {{#if (and @is2FAEnabled (not @device.isTrustedDevice))}}\\n \\n {{/if}}\\n\\n {{#if (and @isEnrollingIn2FA @device.isTrustedDevice \\n (not (and @device.isCurrentDevice this.isMobileApp this.isSystemInstall))\\n )}}\\n \\n {{/if}}\\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/components/recognized-device-list-item/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n {{#if this.canShowAccountSetupHeaderText}}\\n

{{t \\'@adc/login-setup-engine.email-verification.pageTitle\\'}}

\\n {{/if}}\\n \\\"\\\"\\n
{{t \\'@adc/login-setup-engine.email-verification.emailVerificationHeader\\'}}
\\n\\n \\n \\n \\n\\n
\\n \\n
\\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/email-verification/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n {{#if this.canShowAccountSetupHeaderText}}\\n

{{t \\'@adc/login-setup-engine.login-name-confirmation.pageTitle\\'}}

\\n {{/if}}\\n
{{t \\'@adc/login-setup-engine.login-name-confirmation.loginNameHeader\\'}}
\\n\\n \\n \\n \\n\\n
\\n \\n
\\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/login-name-confirmation/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n

{{tc this \\'information\\'}}

\\n\\n {{tc\\n\\n
\\n\\n

{{tc this \\'next-available-workings-hours\\'}}

\\n \\n

{{this.nextActiveWindowText}}

\\n\\n {{#if (await this.displayDashboardButton)}}\\n \\n {{/if}}\\n\\n \\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/outside-working-hours/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n \\n {{#if this.canShowAccountSetupHeaderText}}\\n

{{tc this \\'pageTitle\\'}}

\\n {{/if}}\\n\\n \\n\\n {{#if (await this.showLogOutOfAllDevices)}}\\n \\n \\n\\n {{#if (and this.contextManager.isAdcInternalDevDealer this.smartSavedLoginDevices.length)}}\\n \\n {{/if}}\\n \\n {{#if this.devices}}\\n {{#unless this.isSystemInstall}}\\n \\n {{/unless}}\\n {{/if}}\\n {{/if}}\\n\\n {{#unless this.isSystemInstall}}\\n \\n {{/unless}}\\n\\n {{#if this.isSystemInstall}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/password/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n
\\n {{#if this.isSystemInstall}}\\n

{{tc this \\'propertyInformationHeader\\'}}

\\n {{/if}}\\n

{{tc this \\'propertyInformationInstructions\\'}}

\\n \\n \\n \\n \\n\\n {{#if this.isBusiness}}\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n\\n {{#if this.hideSubtypes}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n
\\n {{#let (unique-id) as |whoLivesId|}}\\n \\n \\n \\n \\n \\n \\n \\n {{/let}}\\n
\\n {{/if}}\\n\\n \\n \\n \\n\\n {{#if this.resolvedModel.electricityProviders}}\\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/property-information/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |PageViewContainer|>\\n \\n <:loading as |PageViewLoading|>\\n \\n \\n\\n <:default as |data|>\\n \\n \\n

{{tc this \\'promptText\\'}}

\\n

{{tc this \\'migrateNotificationSettings\\' phoneNumber=data.phoneNumber deviceName=data.pushDeviceName htmlSafe=true}}

\\n\\n \\n {{tc this \\'learnMore\\'}}\\n \\n\\n {{#if this.expandLearnMoreSection}}\\n
\\n

{{tc this \\'whatIsAPush\\'}}

\\n

{{tc this \\'whatIsAPushText\\'}}

\\n\\n

{{tc this \\'whatArePushBenefits\\'}}

\\n\\n {{#each this.learnMoreSectionGroups as |group|}}\\n

{{group.title}}

\\n
    \\n {{#each group.bulletPoints as |item|}}\\n
  • {{item}}
  • \\n {{/each}}\\n
\\n {{/each}}\\n
\\n {{/if}}\\n
\\n\\n
\\n \\n {{#if data.showRemindMeLater}}\\n \\n {{/if}}\\n \\n
\\n \\n\\n <:error as |PageViewError|>\\n \\n \\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/push-migration/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n

{{t \\'@adc/login-setup-engine.recognized-devices.device-link-request.deviceLinkRequestDescription\\'}}

\\n\\n
\\n \\n \\n \\n
\\n\\n
\\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/recognized-devices/device-link-request/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n {{#if this.isSystemInstall}}\\n

{{t \\'@adc/login-setup-engine.recognized-devices.index.pageTitle\\'}}

\\n {{/if}}\\n \\n
\\n {{#if this.is2FAEnabled}}\\n

{{t \\'@adc/login-setup-engine.recognized-devices.index.trustedDevicesTitle\\'}}

\\n\\n {{#each this.trustedDevices as |device|}}\\n \\n {{else}}\\n

{{t \\'@adc/login-setup-engine.recognized-devices.index.trustedDevicesEmpty\\'}}

\\n {{/each}}\\n {{/if}}\\n\\n

{{t \\'@adc/login-setup-engine.recognized-devices.index.title\\'}}

\\n\\n {{#each this.untrustedDevices as |device|}}\\n \\n {{else}}\\n

{{t \\'@adc/login-setup-engine.recognized-devices.index.otherDevicesEmpty\\'}}

\\n {{/each}}\\n
\\n\\n {{#unless this.model.isEnrollingIn2FA}}\\n \\n \\n {{/unless}}\\n\\n {{#if this.model.isEnrollingIn2FA}}\\n
\\n \\n
\\n {{/if}}\\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/recognized-devices/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n {{#if this.canShowAccountSetupHeaderText}}\\n

{{tc this \\'pageTitle\\'}}

\\n {{/if}}\\n

{{tc this \\'changeSecurityQuestionDescription\\'}}

\\n\\n
\\n \\n \\n \\n
\\n\\n
\\n \\n \\n \\n
\\n\\n {{#unless this.isSystemInstall}}\\n
\\n \\n \\n \\n
\\n\\n

{{tc this \\'passwordRequiredHelpText\\'}}

\\n\\n {{/unless}}\\n\\n {{#if this.isSystemInstall}}\\n
\\n \\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n
\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/security-question/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n
\\n {{#if this.canShowAccountSetupHeaderText}}\\n

{{tc this \\'pageTitle\\'}}

\\n {{/if}}\\n\\n {{#unless this.isSystemInstall}}\\n

{{tc this \\'systemInformationInstructions\\'}}

\\n {{#if @model.systemInformation.hasAddressWritePermission}}\\n \\n {{else if @model.systemInformation.phoneNumber}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/unless}}\\n\\n
\\n \\n \\n \\n
\\n\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n {{#if this.isSystemInstall}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n
\\n {{/if}}\\n
\\n
\\n \\n
\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/system-information/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{outlet}}\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/network-config-engine.3e00f700/node_modules/@adc/network-config-engine/wifi-setup/template.hbs\" })","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { action, set } from '@ember/object';\n\nexport function unassignCredential(accessCard) {\n set(accessCard, 'user', undefined);\n return accessCard.save();\n}\n\nexport default class BadgeManagementController extends Controller {\n @tracked isAssignCardActive = false;\n\n @action addCredential(credential) {\n return credential\n .save()\n .then(() => (this.isAssignCardActive = false))\n .catch(() => credential.deleteRecord());\n }\n}\n","import { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport AdcBaseRoute from '../../../classes/base-route';\n\n/**\n * @classdesc\n *\n * The base class that holds common properties and functionality that both the \"edit\" and \"new\" user-group routes utilize.\n *\n * @class access-control.users.user-groups.BaseUserGroupEditRoute\n * @extends classes.BaseRoute\n * @memberof user-groups\n */\nexport default class BaseUserGroupEditRoute extends AdcBaseRoute {\n /**\n * Returns the UserGroup model to edit.\n *\n * @abstract\n *\n * @param {number} groupId - The ID of the user group that should be edited.\n *\n * @returns {DS.PromiseObject}\n */\n // eslint-disable-next-line no-unused-vars\n getUserGroupModel(groupId) {\n logMissingAbstractMember(this, 'getUserModel');\n\n return undefined;\n }\n\n /**\n *\n * @param {Object} params\n *\n * @returns {{\n * userGroup: Promise\n * }}\n */\n model(params) {\n return {\n userGroup: this.getUserGroupModel(params.group_id)\n };\n }\n}\n","import { next } from '@adc/ember-utils/utils/runloop';\nimport { isArray } from '@ember/array';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport {\n isProcessingErrorStatusCode,\n isServerProcessingErrorStatusCode,\n isInvalidSessionStatusCode,\n isNoPermissionsForApplicationStatusCode\n} from '@adc/ajax/utils/status-codes';\nimport BaseAdapter from '@adc/app-infrastructure/adapters/base-adapter';\nimport { normalizeErrorResponseHelper } from './normalize-error-response-helper';\n\n/**\n * Processes new records and cleans up the store.\n *\n * @private\n * @memberof adapters.Application\n *\n * @param {RSVP.Promise} freshDataCall\n * @param {DS.Store} store\n * @param {DS.Model} type\n * @param {Function} recordOperationAsync\n *\n * @returns {Promise<*>}\n */\nasync function processStoreData(freshDataCall, store, type, recordOperationAsync) {\n // Get the list of records currently in the Ember Data store.\n const oldData = store.peekAll(type.modelName) || [],\n freshData = await freshDataCall;\n\n // Check if data from the server was formatted correctly.\n if (!freshData || !isArray(freshData.data)) {\n return {\n data: [],\n included: [],\n meta: {}\n };\n }\n\n // Ids of the records returned from the server.\n const freshIds = freshData.data.map((record) => record.id.toString()),\n // Simple method to check if the specified record is in the new record ids.\n isOldRecordInFreshData = (oldRecord) => {\n return freshIds.includes(oldRecord.id);\n };\n\n // Process all operations on all records in parallel if they are async.\n await Promise.all(oldData.map((oldRecord) => recordOperationAsync(oldRecord, isOldRecordInFreshData(oldRecord))));\n\n // Let Ember breathe.\n await next(() => {});\n\n return freshData;\n}\n\n/**\n * @classdesc\n *\n * Sets up properties for communicating with the backend.\n *\n * Does not do background reloading because that provides strange behavior. It might be useful for some\n * models, but in general it is not desired.\n *\n * @class adapters.Application\n * @extends BaseAdapter\n */\nexport default class Application extends BaseAdapter {\n @service contextManager;\n @service nativeBridge;\n @service notificationManager;\n @service intl;\n @service store;\n\n // region properties for communication with backend\n\n namespace = 'web/api';\n\n /** @override */\n ajaxOptions(url, type, options) {\n return {\n ...super.ajaxOptions(url, type, options),\n credentials: 'same-origin'\n };\n }\n\n // endregion\n\n // region loading/reloading properties\n\n /**\n * True to never reload already loaded records.\n *\n * @type {boolean}\n */\n doNotReloadRecords = false;\n\n /**\n * Overriding findAll so that we can remove records that do not exist on the server so that the client and server will be synced up.\n *\n * @note If we wanted to do this in the Serializer, we would override normalizeFindAllResponse method\n *\n * @param {DS.Store} store\n * @param {DS.Model} type\n *\n * @returns {Promise}\n */\n findAll(store, type) {\n return processStoreData(super.findAll(...arguments), store, type, (oldRecord, isOldRecordInFreshData) => {\n // TODO: Is rolling back good enough? It does not roll back relationships.\n // If old record is not in the new response, then get rid of it from the store.\n return isOldRecordInFreshData ? oldRecord.rollbackAttributes() : store.unloadRecord(oldRecord);\n });\n }\n\n /**\n * Overriding query so that records that are retrieved from the server get rolled back on the client first.\n *\n * @param {DS.Store} store\n * @param {DS.Model} type\n *\n * @returns {Promise}\n */\n query(store, type) {\n return processStoreData(super.query(...arguments), store, type, (oldRecord, isOldRecordInFreshData) => {\n // TODO: Is rolling back good enough? It does not roll back relationship.\n return isOldRecordInFreshData ? oldRecord.rollbackAttributes() : undefined;\n });\n }\n\n /**\n * Handle case when we want to get a record by id but not retain it in the store.\n *\n * @override\n */\n urlForQueryRecord(query, modelName) {\n const url = [this.buildURL(modelName)];\n\n // If there is a slug defined, treat this as a findRecord url with additional options.\n if (query && query.slug) {\n url.push(encodeURIComponent(query.slug));\n\n // Remove slug from the query.\n delete query.slug;\n }\n\n return url.join('/');\n }\n\n /**\n * Override so that we always rollback the record on the client so it does not keep stale data.\n *\n * @note This is causing issues when we unload a record that is part of relationship and the relationship does not get recreated.\n *\n * @param {DS.Store} store\n * @param {DS.Model} type\n * @param {String} id\n * @param {DS.Snapshot} snapshot\n *\n * @returns {RSVP.Promise}\n */\n async findRecord(store, type, id, snapshot) {\n const freshDataCall = super.findRecord(...arguments);\n\n const old = store.peekRecord(snapshot.modelName, id);\n\n if (old) {\n const { isSaving, isLoading } = old;\n\n // Rollback this model unless it is being currently saved or loaded from somewhere else.\n if (!isSaving && !isLoading) {\n // TODO: Should we unload here and not rollback? Rolling back does not change the relationships.\n old.rollbackAttributes();\n }\n }\n\n return freshDataCall;\n }\n\n /**\n * Do not background reload by default, it provides a weird behaviour\n *\n * @returns {boolean}\n */\n shouldBackgroundReloadAll() {\n return false;\n }\n\n /**\n * Do not background reload by default, it provides a weird behaviour\n *\n * @returns {boolean}\n */\n shouldBackgroundReloadRecord() {\n return false;\n }\n\n /**\n * Always reload records, unless specified.\n *\n * @todo Once we have SignalR, we do not have to do this, because all devices will fresh\n *\n * @returns {boolean}\n */\n shouldReloadAll(store, snapshotRecordArray) {\n if (this.doNotReloadRecords) {\n return isEmpty(snapshotRecordArray);\n }\n\n return true;\n }\n\n /**\n * Always reload record\n *\n * We always need fresh data from the server\n *\n * @todo Once we have SignalR, we do not have to do this, because all devices will fresh\n *\n * @returns {boolean}\n */ // eslint-disable-next-line no-unused-vars\n shouldReloadRecord(store, snapshot) {\n return true;\n }\n\n // endregion\n\n // region normalizing responses\n\n /**\n * @param {number} status\n * @param {Object} headers\n * @param {{Message: String, errors: Object}=} payload\n *\n * @returns {Array} errors payload\n */\n normalizeErrorResponse(status, headers, payload) {\n // I need to do this here because otherwise the method does not correctly return.\n payload = payload || {};\n\n let errors = payload.errors || [];\n\n const { contextManager, notificationManager } = this,\n fnEnsureErrorsWithStatus = (errors, errorStatus) => {\n // If there is no error, create one object so that we can pass on the status.\n if (!errors.length) {\n errors.push({});\n }\n\n errors.forEach((error) => {\n error.status = errorStatus.toString();\n });\n\n return errors;\n };\n\n // Is the session invalid?\n if (isInvalidSessionStatusCode(status)) {\n // todo We have to be smarter here about localizing, because there is a good chance localizations have not been loaded up.\n // todo In that case we should try to use the browser culture and show message based on that.\n notificationManager.addSessionEnded(\"Your login expired, let's fix that.\");\n\n if (contextManager.handleSessionExpiration()) {\n return [];\n }\n\n return fnEnsureErrorsWithStatus(errors, status);\n }\n\n // Can the logged in user not view the application version?\n if (isNoPermissionsForApplicationStatusCode(status)) {\n contextManager.redirectFromApp();\n\n return fnEnsureErrorsWithStatus(errors, status);\n }\n\n // Is this a processing/server processing error?\n if (isProcessingErrorStatusCode(status) || isServerProcessingErrorStatusCode(status)) {\n return normalizeErrorResponseHelper(errors, notificationManager, this.intl);\n }\n\n // otherwise return the default\n return super.normalizeErrorResponse(status, headers, payload);\n }\n\n // endregion\n}\n","import BaseMicroApiAdapter from '@adc/app-infrastructure/adapters/base-micro-api-adapter';\nimport { PresenceStateApi } from '@adc/app-infrastructure/enums/MicroApi';\n\nexport default class BasePresenceStateAdapter extends BaseMicroApiAdapter {\n /** @override */\n microApiEnum = PresenceStateApi;\n\n /** @override */\n namespace = 'api/v1';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'automation/presence-state/base-presence-state-adapter': BasePresenceStateAdapter;\n }\n}\n","import BasePresenceStateAdapter from './base-presence-state-adapter';\n\nexport default class CurrentPresenceStateAdapter extends BasePresenceStateAdapter {\n /** @override */\n microApiEndpointPath = 'presence-state';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'automation/presence-state/current-presence-state': CurrentPresenceStateAdapter;\n }\n}\n","import BasePresenceStateAdapter from './base-presence-state-adapter';\n\nexport default class PresenceStateDisplayAdapter extends BasePresenceStateAdapter {\n /** @override */\n microApiEndpointPath = 'presence-state/display';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'automation/presence-state/presence-state-display': PresenceStateDisplayAdapter;\n }\n}\n","import BasePresenceStateAdapter from './base-presence-state-adapter';\n\nexport default class PresenceStateExplainerDisplayAdapter extends BasePresenceStateAdapter {\n /** @override */\n microApiEndpointPath = 'presence-state/explainer';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'automation/presence-state/presence-state-explainer-display': PresenceStateExplainerDisplayAdapter;\n }\n}\n","import BasePresenceStateAdapter from './base-presence-state-adapter';\n\nexport default class PresenceStateSettingsDisplayAdapter extends BasePresenceStateAdapter {\n /** @override */\n microApiEndpointPath = 'presence-settings';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'automation/presence-state/presence-state-settings-display': PresenceStateSettingsDisplayAdapter;\n }\n}\n","import ApplicationAdapter from '../application';\n\n/**\n * @classdesc\n * Recording Status adapter so that each source is checked individually.\n *\n * @class adapters.automation.RecordingStatus\n */\nexport default class RecordingStatus extends ApplicationAdapter {\n /**\n * Prevent bundling of multiple Recording Status requests.\n * We want to force the server side to make a separate GET request for each ID.\n * This will return each Live Video Source in a truly asynchronous fashion.\n *\n * @override\n */\n coalesceFindRequests = false;\n}\n","import CustomerSiteJsonApiContentAdapter from '../../customer-site-json-api-content-adapter';\n\n/**\n * @classdesc\n * Custom Adapter for rule model\n */\nexport default class Rule extends CustomerSiteJsonApiContentAdapter {\n /**\n * Overriding the deleteRecord behavior for rule model so that it optionally redirects to a different deletion route.\n * @override\n */\n deleteRecord(store, type, snapshot) {\n const { record } = snapshot;\n if (record.overrideDeletionApiRoute) {\n return this.ajax(`${record.overrideDeletionApiRoute}/${snapshot.id}`, 'DELETE', {});\n }\n\n return super.deleteRecord(store, type, snapshot);\n }\n}\n","import Application from './application';\n\n/**\n * @class adapters.JsonApiContentAdapter\n */\nexport default class CustomerSiteJsonApiContentAdapter extends Application {\n /** @override */\n get headers() {\n return {\n ...super.headers,\n 'content-type': 'application/vnd.api+json'\n };\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'customer-site-json-api-content-adapter': CustomerSiteJsonApiContentAdapter;\n }\n}\n","import BaseMicroApiAdapter from '@adc/app-infrastructure/adapters/base-micro-api-adapter';\nimport { DiscoverApi } from '@adc/app-infrastructure/enums/MicroApi';\n\nexport default class BaseDiscoverAdapter extends BaseMicroApiAdapter {\n /** @override */\n microApiEnum = DiscoverApi;\n\n /** @override */\n namespace = 'api/v1/DiscoverDocumentGroups';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'discover/base-discover-adapter': BaseDiscoverAdapter;\n }\n}\n","import BaseMicroApiAdapter from '@adc/app-infrastructure/adapters/base-micro-api-adapter';\nimport { DiscoverApi } from '@adc/app-infrastructure/enums/MicroApi';\n\nexport default class GetDiscoverArticleContentResult extends BaseMicroApiAdapter {\n /** @override */\n microApiEnum = DiscoverApi;\n\n /** @override */\n namespace = 'api/v1/DiscoverDocumentContents';\n\n /** @override */\n microApiEndpointPath = 'GetDocumentContent';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'discover/get-discover-article-content-result': GetDiscoverArticleContentResult;\n }\n}\n","import BaseDiscoverAdapter from './base-discover-adapter';\n\nexport default class GetDiscoverDashboardResultAdapter extends BaseDiscoverAdapter {\n /** @override */\n microApiEndpointPath = 'GetDocumentGroups';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'discover/get-discover-dashboard-result': GetDiscoverDashboardResultAdapter;\n }\n}\n","import { getProcessingErrorStatusCode, getServerProcessingErrorStatusCode } from '@adc/ajax/utils/status-codes';\n\nimport type { Error } from '@adc/app-infrastructure/utils/error';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\n\nexport function normalizeErrorResponseHelper(\n errors: Error[],\n notificationManager: NotificationManager,\n intl: ADCIntlService\n): Error[] {\n const codes = [getProcessingErrorStatusCode(), getServerProcessingErrorStatusCode()];\n const defaultText = intl.t('generic.processingError');\n\n if (!errors.length) {\n errors.push({\n detail: defaultText,\n code: codes[0]\n });\n }\n\n errors.forEach((error) => {\n error.detail = error.detail || defaultText;\n });\n\n errors.filter(({ code }) => codes.includes(code)).forEach(({ detail }) => notificationManager.addError(detail));\n\n return errors;\n}\n","import ApplicationAdapter from '../../../application';\n\n/**\n * @classdesc\n * Custom Adapter for account information model\n * @class adapters.AccountInformation\n */\nexport default class AccountInformationAdapter extends ApplicationAdapter {\n /** @override */\n namespace = 'web/api';\n}\n","import ApplicationAdapter from '../../../../application';\n\n/**\n * @classdesc\n * Custom Adapter for marketing communication model\n * @class adapters.MarketingCommunication\n */\nexport default class MarketingCommunicationAdapter extends ApplicationAdapter {\n /** @override */\n namespace = 'web/api';\n}\n","import ApplicationAdapter from '../../application';\n\n/**\n * @classdesc\n * Custom Adapter for country address resource model\n * @class adapters.CountryAddressResource\n */\nexport default class CountryAddressResourceAdapter extends ApplicationAdapter {\n /** @override */\n namespace = 'web/api';\n}\n","import { inject as service } from '@ember/service';\nimport { normalizeErrorResponseHelper } from 'customer-site/adapters/normalize-error-response-helper';\nimport { isProcessingErrorStatusCode, isServerProcessingErrorStatusCode } from '@adc/ajax/utils/status-codes';\nimport BaseMicroApiAdapter from '@adc/app-infrastructure/adapters/base-micro-api-adapter';\nimport { MassNotificationsApi } from '@adc/app-infrastructure/enums/MicroApi';\n\nimport type { Error } from '@adc/app-infrastructure/utils/error';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\n\nexport default class BaseMassNotificationsAdapter extends BaseMicroApiAdapter {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /** @override */\n microApiEnum = MassNotificationsApi;\n\n /** @override */\n namespace = 'api/v1/MassNotifications';\n\n normalizeErrorResponse(\n status: number,\n _headers: object,\n payload: { Message: string; errors: Error[] }\n ): Error[] | null {\n payload = payload || {};\n\n const { notificationManager, intl } = this,\n errors: Error[] = payload.errors || [];\n if (isProcessingErrorStatusCode(status) || isServerProcessingErrorStatusCode(status)) {\n return normalizeErrorResponseHelper(errors, notificationManager, intl);\n }\n\n return null;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'settings/everbridge-integration/base-mass-notifications-adapter': BaseMassNotificationsAdapter;\n }\n}\n","import BaseMassNotificationsAdapter from './base-mass-notifications-adapter';\n\nexport default class EverbridgeConfigurationAdapter extends BaseMassNotificationsAdapter {\n /** @override */\n microApiEndpointPath = 'massNotificationsConfiguration';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'settings/everbridge-integration/everbridge-configuration': EverbridgeConfigurationAdapter;\n }\n}\n","import BaseMassNotificationsAdapter from './base-mass-notifications-adapter';\n\nexport default class EverbridgeTemplateAdapter extends BaseMassNotificationsAdapter {\n /** @override */\n microApiEndpointPath = 'everbridgeTemplate';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'settings/everbridge-integration/everbridge-template': EverbridgeTemplateAdapter;\n }\n}\n","import CustomerSiteJsonApiContentAdapter from '../../customer-site-json-api-content-adapter';\n\n/**\n * @classdesc\n * Custom Adapter for device-catalog model\n * @class settings.manage-devices.deviceCatalogAdapter\n * @extends adapters.JsonApiContentAdapter\n */\nexport default class DeviceCatalogAdapter extends CustomerSiteJsonApiContentAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'settings/manage-devices/device-catalog': DeviceCatalogAdapter;\n }\n}\n","import CustomerSiteJsonApiContentAdapter from '../../customer-site-json-api-content-adapter';\n\nimport type Store from '@ember-data/store';\n/* eslint-disable ember/use-ember-data-rfc-395-imports */\nimport type DS from 'ember-data';\nimport type ModelRegistry from 'ember-data/types/registries/model';\nimport type RSVP from 'rsvp';\n\n/**\n * @classdesc\n * Custom Adapter for manage-device model\n * @class settings.manage-devices.managedDeviceAdapter\n * @extends adapters.JsonApiContentAdapter\n */\nexport default class ManagedDeviceAdapter extends CustomerSiteJsonApiContentAdapter {\n /**\n * Overriding the deleteRecord behavior for managed-device model so that it also passes the model in the request.\n * @override\n */\n deleteRecord(\n store: Store,\n type: ModelRegistry[K],\n snapshot: DS.Snapshot\n ): RSVP.Promise {\n const id = snapshot.id;\n const data = {};\n const serializer = store.serializerFor(type.modelName);\n\n serializer.serializeIntoHash(data, type, snapshot);\n\n return this.ajax(this.buildURL(type.modelName, id, snapshot, 'deleteRecord'), 'DELETE', {\n data\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'settings/manage-devices/managed-device': ManagedDeviceAdapter;\n }\n}\n","import BaseMicroApiAdapter from '@adc/app-infrastructure/adapters/base-micro-api-adapter';\nimport { DiscoverApi } from '@adc/app-infrastructure/enums/MicroApi';\n\nexport default class GetUpsellShoppingCartResultAdapter extends BaseMicroApiAdapter {\n /** @override */\n microApiEnum = DiscoverApi;\n\n /** @override */\n namespace = 'api/v1/UpsellCampaignShoppingCart';\n\n /** @override */\n microApiEndpointPath = 'GetShoppingCart';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'upsell/get-upsell-shopping-cart-result': GetUpsellShoppingCartResultAdapter;\n }\n}\n","import ApplicationAdapter from '../application';\n\n/**\n * Custom Adapter for DewarpConfig model.\n */\nexport default class DewarpConfigAdapter extends ApplicationAdapter {\n updateRecord(store, type, snapshot) {\n const data = {},\n serializer = store.serializerFor(type.modelName);\n\n serializer.serializeIntoHash(data, type, snapshot, { includeId: true });\n\n let url = this.buildURL(type.modelName, snapshot.id, snapshot, 'updateRecord');\n if (snapshot.adapterOptions?.failGracefully) {\n url += `?failGracefully=${snapshot.adapterOptions.failGracefully}`;\n }\n\n return this.ajax(url.toString(), 'PUT', { data });\n }\n}\n","import ApplicationAdapter from '../application';\n\n/**\n * @class adapters.video.DownloadFormat\n */\nexport default class DownloadFormat extends ApplicationAdapter {\n /** override */\n doNotReloadRecords = true;\n}\n","import ApplicationAdapter from '../../application';\n\n/**\n * @classdesc\n * Custom Adapter for Familiar Target Enrollment Image model\n * @class adapters.FamiliarTargetEnrollmentImage\n */\nexport default class FamiliarTargetEnrollmentImage extends ApplicationAdapter {\n /**\n * Overriding the updateRecord behavior for the familiar target image model\n * to use PATCH if the image is being moved to a different cluster\n * @override\n */\n updateRecord(store, type, image) {\n const { id } = image,\n imageModel = {},\n adapterOptions = image.adapterOptions ?? {},\n { moveImage } = adapterOptions,\n serializer = store.serializerFor(type.modelName);\n\n serializer.serializeIntoHash(imageModel, type, image);\n\n // NOTE: it is IMPERATIVE that the data that we send is an object with a property 'data' { data: STUFF }\n if (moveImage) {\n return this.ajax(this.buildURL(type.modelName, id, image, 'updateRecord'), 'PATCH', { data: imageModel });\n }\n\n return this.ajax(this.buildURL(type.modelName, id, image, 'updateRecord'), 'PUT', { data: imageModel });\n }\n}\n","import BaseMicroApiAdapter from '@adc/app-infrastructure/adapters/base-micro-api-adapter';\nimport { IntercomApi } from '@adc/app-infrastructure/enums/MicroApi';\n\nexport default class BaseIntercomAdapter extends BaseMicroApiAdapter {\n /** @override */\n microApiEnum = IntercomApi;\n\n /** @override */\n namespace = 'api/v1';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/base-intercom-adapter': BaseIntercomAdapter;\n }\n}\n","import BaseIntercomAdapter from './base-intercom-adapter';\n\nexport default class IntercomApartmentAdapter extends BaseIntercomAdapter {\n /** @override */\n microApiEndpointPath = 'Apartment';\n\n /**\n * Patch apartments in bulk.\n * @param request\n */\n async bulkUpdateApartments(request: Map>): Promise {\n this.ensureEndpointAndToken();\n const url = `${this.buildURL('intercom-apartment')}`;\n await this.ajax(url, 'PATCH', { data: Object.fromEntries(request) });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/intercom-apartment': IntercomApartmentAdapter;\n }\n}\n","import BaseIntercomAdapter from './base-intercom-adapter';\n\nimport type IntercomBulkInsertContactsRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/intercom-bulk-insert-contacts-request-body';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport type ModelRegistry from 'ember-data/types/registries/model';\n\n/**\n * Query parameters for intercom contacts\n */\ninterface ContactQueryParams {\n slug?: string;\n}\n\nexport default class IntercomContactAdapter extends BaseIntercomAdapter {\n /** @override */\n microApiEndpointPath = 'Contact';\n\n /**\n * Override the URL for store queries to add a slug to query requests.\n * The slug must be the \"slug\" property in the query params\n *\n * @override\n */\n urlForQuery(query: ContactQueryParams, modelName: keyof ModelRegistry): string {\n const url = [this.buildURL(modelName)];\n\n // If there is a slug defined, treat this as a findRecord url with additional options.\n if (query && query.slug) {\n url.push(encodeURIComponent(query.slug));\n\n // Remove slug from the query.\n delete query.slug;\n }\n\n return url.join('/');\n }\n\n /**\n * Insert contacts in bulk.\n * @param request\n */\n async bulkInsertContacts(request: IntercomBulkInsertContactsRequestBody): Promise {\n this.ensureEndpointAndToken();\n const url = `${this.buildURL('intercom-contact')}/bulkInsertContacts`;\n await this.ajax(url, 'POST', { data: request.serialize() });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/intercom-contact': IntercomContactAdapter;\n }\n}\n","import BaseIntercomAdapter from './base-intercom-adapter';\n\nexport default class IntercomDirectoryListAdapter extends BaseIntercomAdapter {\n /** @override */\n microApiEndpointPath = 'DirectoryList';\n\n /**\n * Make a POST request to rename a directory list.\n * @param id\n * @param name\n */\n async renameDirectoryList(id: number, name: string): Promise {\n this.ensureEndpointAndToken();\n const queryParams = { name: name };\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${this.buildURL('intercom-directory-list')}/rename/${id}?${queryString}`;\n await this.ajax(url, 'POST');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/intercom-directory-list': IntercomDirectoryListAdapter;\n }\n}\n","import BaseIntercomAdapter from './base-intercom-adapter';\n\nexport default class IntercomDirectoryAdapter extends BaseIntercomAdapter {\n /** @override */\n microApiEndpointPath = 'Directory';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/intercom-directory': IntercomDirectoryAdapter;\n }\n}\n","import BaseIntercomAdapter from './base-intercom-adapter';\n\nexport default class IntercomPairedUnitAdapter extends BaseIntercomAdapter {\n /** @override */\n microApiEndpointPath = 'Contact/contactUnitIds';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/intercom-paired-unit': IntercomPairedUnitAdapter;\n }\n}\n","import BaseIntercomAdapter from './base-intercom-adapter';\n\nexport default class IntercomQrCodeAdapter extends BaseIntercomAdapter {\n /** @override */\n microApiEndpointPath = 'QrCode';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/intercom/intercom-qr-code': IntercomQrCodeAdapter;\n }\n}\n","import ApplicationAdapter from '../application';\n\n/**\n * @classdesc\n * Custom Adapter for ov rule model\n */\nexport default class OvRule extends ApplicationAdapter {\n /**\n * Overriding the findRecord behavior for ov rule model to include extra parameters if given.\n *\n * @override\n */\n findRecord(store, type, id, snapshot) {\n if (snapshot.adapterOptions) {\n const url = this.buildURL(type.modelName, id, snapshot, 'findRecord'),\n { createIfDoesNotExist } = snapshot.adapterOptions;\n return this.ajax(url, 'GET', { data: { createIfDoesNotExist } });\n }\n\n return super.findRecord(...arguments);\n }\n\n /**\n * Overriding the updateRecord behavior for ov rule model to include extra parameters if given.\n * @override\n */\n updateRecord(store, type, snapshot) {\n const { id } = snapshot,\n { creatingNew } = snapshot.record,\n profileModel = {},\n serializer = store.serializerFor(type.modelName);\n\n serializer.serializeIntoHash(profileModel, type, snapshot);\n\n // NOTE: it is IMPERATIVE that the data that we send is an object with a property 'data' { data: STUFF}\n if (creatingNew) {\n return this.ajax(this.buildURL(type.modelName, id, snapshot, 'createRecord'), 'POST', {\n data: profileModel\n });\n }\n\n return this.ajax(this.buildURL(type.modelName, id, snapshot, 'updateRecord'), 'PUT', {\n data: profileModel\n });\n }\n}\n","import ApplicationAdapter from '../application';\n\n/**\n * @classdesc\n * Camera snapshot adapter so that all snapshots are requested individually.\n *\n * @class adapters.video.Snapshot\n */\nexport default class Snapshot extends ApplicationAdapter {\n /**\n * Prevent bundling of multiple Snapshot requests.\n * We want to force the server side to make a separate GET request for each ID.\n * This will return each Snapshot Image in a truly asynchronous fashion.\n *\n * @override\n */\n coalesceFindRequests = false;\n}\n","import ApplicationAdapter from '../application';\n\n/**\n * @classdesc\n * Prevent bundled requests when getting SVR Usage Info.\n *\n * @class SvrUsageInfo\n * @extends adapters.Application\n * @memberof adapters.video\n */\nexport default class SvrUsageInfo extends ApplicationAdapter {\n /**\n * Prevent bundling of multiple SvrUsageInfo requests.\n * This is because some SVRs will be slow to connect to (or will time out),\n * and we don't want slow down the return of all data while waiting for those.\n *\n * @override\n */\n coalesceFindRequests = false;\n}\n","import LiveVideoSourceAdapter from './live-video-source';\n\n/**\n * @classdesc\n * Live Video Highest Res Source adapter so that all video sources are requested individually.\n */\nexport default class LiveVideoHighestResSource extends LiveVideoSourceAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/video-sources/live-video-highest-res-source': LiveVideoHighestResSource;\n }\n}\n","import ApplicationAdapter from '../../application';\n\n/**\n * @classdesc\n * Live Video Source adapter.\n */\nexport default class LiveVideoSourceAdapter extends ApplicationAdapter {\n /**\n * Prevent bundling of multiple Live Video Source requests.\n * We want to force the server side to make a separate GET request for each ID.\n * This will return each Live Video Source in a truly asynchronous fashion.\n */\n coalesceFindRequests = false;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'video/video-sources/live-video-source': LiveVideoSourceAdapter;\n }\n}\n","import ApplicationAdapter from '../../application';\n\n/**\n * @classdesc\n * SVR Video Source adapter so that all video sources are requested individually.\n *\n * @class adapters.video.videoSources.SvrVideoSourceAdapter\n */\nexport default class SvrVideoSourceAdapter extends ApplicationAdapter {\n /**\n * Prevent bundling of multiple SVR Video Source requests.\n * We want to force the server side to make a separate GET request for each ID.\n * This will return each SVR Video Source in a truly asynchronous fashion.\n *\n * @override\n */\n coalesceFindRequests = false;\n}\n","import { readOnly } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport Application from './application';\n\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport const X_VV_CUSTOMER = 'X-Vv-Customer';\n\nexport default class VisualVerificationAdapter extends Application {\n @service declare identityManager: IdentityManager;\n\n /**\n * Retreaving Customer ID\n */\n @readOnly('identityManager.identityModel.selectedSystem.id')\n customerId?: string;\n\n /** @override */\n get headers(): Application['headers'] & {\n [X_VV_CUSTOMER]: string;\n } {\n return {\n ...super.headers,\n [X_VV_CUSTOMER]: this.customerId ?? ''\n };\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification': VisualVerificationAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class VisualVerificationAlarmAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/alarm': VisualVerificationAlarmAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class VisualVerificationEventAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/event': VisualVerificationEventAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class PageFeatureAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/page-feature': PageFeatureAdapter;\n }\n}\n","import VisualVerificationAdapter from '../../visual-verification-base-adapter';\n\nexport default class PersonOnSiteindicator extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/person-on-site/indicator': PersonOnSiteindicator;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class PropertyNoteAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/property-note': PropertyNoteAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class SessionDeviceLinkAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/session-device-link': SessionDeviceLinkAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class SessionsAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/session': SessionsAdapter;\n }\n}\n","import VisualVerificationAdapter from '../../visual-verification-base-adapter';\n\nexport default class UnexpectedEventsIndicatorAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/unexpected-events/prediction': UnexpectedEventsIndicatorAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class VisualVerificationEventIdListAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/visual-verification-event-id-list': VisualVerificationEventIdListAdapter;\n }\n}\n","import VisualVerificationAdapter from '../visual-verification-base-adapter';\n\nexport default class VisualVerificationEventIdAdapter extends VisualVerificationAdapter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your adapters.\ndeclare module 'ember-data/types/registries/adapter' {\n export default interface AdapterRegistry {\n 'visual-verification/visual-verification-event-id': VisualVerificationEventIdAdapter;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n

{{tc this \\'syncWithNetwork\\'}}

\\n
    \\n {{#each (array 1 2 3) as |idx|}}\\n
  • {{tc this (concat \\'syncWithNetworkCheck\\' idx)}}
  • \\n {{/each}}\\n
\\n
\\n\\n

{{tc this \\'connectVideoDevice\\'}}

\\n
    \\n {{#each (array 1 2 3 4) as |idx|}}\\n
  1. {{tc this (concat \\'connectVideoDeviceStep\\' idx)}}
  2. \\n {{/each}}\\n
\\n
\\n\",{ moduleName: \"customer-site/components/modals/trouble-conditions/camera-not-responding/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { VideoWirelessNetworkSettings } from '../../../../enums/CustomerPageUrl';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface CameraNotRespondingModalArgs {\n model: {\n deviceId: number;\n };\n}\n\n/**\n * @classdesc\n * Modal for displaying extra information about a \"Camera Not Responding\" trouble condition.\n */\n@intlPath({ path: 'modals/trouble-conditions/camera-not-responding' })\nexport default class CameraNotRespondingModal extends Component {\n @service declare contextManager: ContextManager;\n\n @action viewDeviceSettings(): void {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(VideoWirelessNetworkSettings, {\n search: `?deviceId=${this.args.model.deviceId}`\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::TroubleConditions::CameraNotResponding': typeof CameraNotRespondingModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n
    \\n {{#each (array 1 2) as |idx|}}\\n
  1. {{t (concat \\'components.modals.trouble-conditions.image-sensor-low-battery.replaceBatteriesStep\\' idx)}}
  2. \\n {{/each}}\\n
\\n\\n \\n\\n \\n
\\n\",{ moduleName: \"customer-site/components/modals/trouble-conditions/image-sensor-low-battery/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface VoiceAccessLevelDialogModalSignature {\n Args: {\n model: {\n manufacturer: string;\n device: string;\n };\n };\n}\n\nconst VoiceAccessLevelDialogModal = templateOnlyComponent();\nexport default VoiceAccessLevelDialogModal;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n VoiceAccessLevelDialogModal: typeof VoiceAccessLevelDialogModal;\n }\n}\n","import Controller from '@ember/controller';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport CameraNotRespondingModal from 'customer-site/components/modals/trouble-conditions/camera-not-responding/index';\nimport ImageSensorLowBatteryModal from 'customer-site/components/modals/trouble-conditions/image-sensor-low-battery/index';\nimport TroubleConditionMutedOptionEnum from 'customer-site/enums/TroubleConditionMutedOption';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport { EmberSupportCreateIssue } from '../enums/CustomerPageUrl';\nimport {\n CameraNotReachable,\n SensorLowBattery,\n SmokeSensorReset,\n AlarmInMemory,\n SensorMalfunction,\n DeviceMispositioned\n} from '../enums/TroubleConditionType';\n\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type { ModalComponent } from '@adc/ui-components/services/modals';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport type TroubleConditionMute from 'customer-site/models/trouble-conditions/trouble-condition-mute';\n\nexport type TCItem = {\n model: TroubleCondition | TroubleConditionMute;\n actions?: DropdownActionItem[];\n buttons?: DropdownActionItem[];\n};\n\nconst tcPath = 'alerts-issues.index';\n\n// Helper function to get the translation key for the dismiss option.\nfunction getDismissOptionTranslationKey(tcOption: TroubleConditionMutedOptionEnum): string {\n switch (tcOption) {\n case TroubleConditionMutedOptionEnum.OneDay:\n return 'dismissOneDay';\n case TroubleConditionMutedOptionEnum.SevenDays:\n return 'dismissOneWeek';\n case TroubleConditionMutedOptionEnum.FourteenDays:\n return 'dismissTwoWeeks';\n case TroubleConditionMutedOptionEnum.UntilNextOccurrence:\n return 'dismissUntilNextOccurence';\n default:\n return '';\n }\n}\n\n/**\n * @classdesc\n * Alerts & Issues controller.\n */\nexport default class AlertsAndIssueBaseController extends Controller {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare troubleConditions: ServiceRegistry['trouble-conditions'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare nativeBridge: NativeBridgeService;\n\n /**\n * Returns the dismiss options for the passed trouble condition.\n */\n protected getDismissActions(tc: TroubleCondition): DropdownActionItem[] {\n return tc.troubleConditionDismissActions.map((option: TroubleConditionMutedOptionEnum) =>\n DropdownActionItem.create({\n name: this.intl.t(`${tcPath}.${getDismissOptionTranslationKey(option)}`),\n action: () => this.dismiss(tc, option)\n })\n );\n }\n\n /**\n * Computes the list of action items for the passed trouble condition.\n */\n protected getActionItems(tc: TroubleCondition): DropdownActionItem[] {\n const actionItems: DropdownActionItem[] = [],\n { extraData } = tc,\n fnPushItem = (name: string, action: () => unknown): number =>\n actionItems.push(DropdownActionItem.create({ name, action }));\n\n if (extraData == null) {\n return actionItems;\n }\n\n // Has button text?\n if (extraData.buttonText) {\n fnPushItem(extraData.buttonText, () => this.troubleConditionAction(tc));\n }\n\n // Has a Knowledge Base article (and is a Sensor Malfunction trouble condition?)\n if (\n extraData.knowledgeBaseLinkText &&\n (tc.troubleConditionType === SensorMalfunction || tc.troubleConditionType === DeviceMispositioned)\n ) {\n fnPushItem(extraData.knowledgeBaseLinkText, () => this.knowledgeBaseLinkAction(tc));\n }\n\n // Has YouTube link?\n if (extraData.youTubeButton) {\n fnPushItem(extraData.youTubeButton, () => this.watchTutorial(tc));\n }\n\n // Has external link?\n if (extraData.externalLinkButton) {\n fnPushItem(extraData.externalLinkButton, () => this.externalLinkAction(tc));\n }\n\n return actionItems;\n }\n\n /**\n * Maps the passed trouble conditions into TC Items for rendering.\n */\n protected getTCItems(items: TroubleCondition[] = []): TCItem[] {\n return items.map((tc) => {\n const dismissActions = this.getDismissActions(tc),\n actionItems = this.getActionItems(tc),\n item: TCItem = {\n model: tc\n };\n\n if (actionItems.length > 0) {\n item.buttons = [actionItems.splice(0, 1)[0]];\n }\n\n item.actions = [...actionItems, ...dismissActions];\n\n return item;\n });\n }\n\n /**\n * Dismisses the trouble condition for the desired amount of time.\n *\n * @abstract\n */ // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected dismiss(_tc: TroubleCondition, _enumVal: TroubleConditionMutedOptionEnum): void {\n assert(`${this.toString()} must implement the \"dismiss\" method.`);\n }\n\n /**\n * Opens youTube video.\n *\n * @abstract\n */ // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected watchTutorial(_tc: TroubleCondition): void {\n assert(`${this.toString()} must implement the \"watchTutorial\" method.`);\n }\n\n /**\n * Opens an external link.\n *\n * @abstract\n */ // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected externalLinkAction(_tc: TroubleCondition): void {\n assert(`${this.toString()} must implement the \"externalLinkAction\" method.`);\n }\n\n /**\n * Awaits the trouble condition resolution and show common responses.\n */\n private async handleTroubleResolution(\n action: Promise,\n successKey: string,\n failureKey: string\n ): Promise {\n const { intl } = this;\n\n try {\n await action;\n this.troubleConditions.refresh();\n this.notificationManager.addSuccess(intl.t(`${tcPath}.${successKey}`));\n } catch (ex) {\n // Did the AJAX adapter NOT already notify the user of the error?\n if (!ex.isAdapterError) {\n // Report failure.\n this.notificationManager.addError(intl.t(`${tcPath}.${failureKey}`));\n }\n }\n }\n\n /**\n * Given a trouble condition, returns the corresponding modal model containing the information needed to display in the modal.\n *\n * @note Returns undefined if this type of trouble condition does not have a modal with extra information.\n */\n private getModalConfig(tc: TroubleCondition): { type: ModalComponent; model?: { deviceId: number } } | undefined {\n const { troubleConditionType: type } = tc;\n\n if (type === SensorLowBattery) {\n return {\n type: ImageSensorLowBatteryModal\n };\n }\n\n if (type === CameraNotReachable) {\n return {\n type: CameraNotRespondingModal,\n model: {\n deviceId: tc.deviceId\n }\n };\n }\n\n return undefined;\n }\n\n /**\n * Based on the type of trouble condition, executes a specific action (e.g. showing a modal with more information).\n */\n private troubleConditionAction(tc: TroubleCondition): void {\n const { navigation, nativeBridge } = this,\n { redirectEnum, redirectIncludesTCId, redirectQueryParams, redirectNativeViewEnum } = tc.extraData;\n\n // Was a redirect specified?\n if (redirectEnum) {\n const routeArgs = [];\n\n if (redirectIncludesTCId) {\n routeArgs.push(tc.id);\n }\n\n if (redirectQueryParams) {\n routeArgs.push({ queryParams: redirectQueryParams });\n }\n\n navigation.transitionToRouteId(redirectEnum, ...routeArgs);\n return;\n }\n\n if (\n redirectNativeViewEnum &&\n nativeBridge.doesSupportTransitionToNativeViewWithId(redirectNativeViewEnum) &&\n this.identityManager.isMobileApp\n ) {\n nativeBridge.transitionToNativeView(redirectNativeViewEnum, redirectQueryParams);\n return;\n }\n\n const { redirectUrl } = tc.extraData;\n if (redirectUrl) {\n window.location.assign(redirectUrl);\n return;\n }\n\n // Should a modal with extra information be shown?\n const modalConfig = this.getModalConfig(tc);\n if (modalConfig) {\n // Show the modal.\n this.modals.showModal(modalConfig.type, modalConfig.model);\n return;\n }\n\n (async () => {\n const { troubleConditionType: type } = tc,\n system = await this.identityManager.getSelectedSystem();\n\n if (type === AlarmInMemory) {\n this.handleTroubleResolution(\n system.clearAlarmsInMemoryTrouble(),\n 'alarmsCleared',\n 'errorClearingAlarms'\n );\n } else if (type === SmokeSensorReset) {\n this.handleTroubleResolution(\n system.clearSmokeSensorStatus(tc.deviceId),\n 'smokeSensorCleared',\n 'errorClearingSmokeSensor'\n );\n }\n })();\n }\n\n /**\n * Open the contact support options available to the customer.\n */\n @action contactSupport(): void {\n (async () => {\n const { navigation, contextManager } = this,\n { externalSupportWebsite, hasSupportCenter } = (await contextManager.identityModel.dealer) ?? {};\n\n if (hasSupportCenter) {\n // Support/Issues/Issue_Summary.aspx [ NOT FrontPoint AND has IssueSummary permission ]\n navigation.transitionToRouteId(EmberSupportCreateIssue);\n } else if (externalSupportWebsite) {\n // External support website [ NO SupportCenter AND dealer has external support website ]\n window.open(\n externalSupportWebsite,\n 'contact_us_window',\n // NOTE: Most modern browsers open in a new tab, not a new window. Keeping this here in case\n // some other browsers operate differently. Don't expect this to always open a new window.\n 'scrollbars=yes,menubar=no,height=650,width=710,resizable=yes,toolbar=no,location=no,status=no'\n );\n }\n })();\n }\n\n /**\n * Opens a knowledge base link.\n */\n @action knowledgeBaseLinkAction(tc: TroubleCondition): void {\n const { knowledgeBaseLinkUrl } = tc.extraData;\n if (knowledgeBaseLinkUrl) {\n window.location.assign(knowledgeBaseLinkUrl);\n }\n }\n}\n","import { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport BaseController from '../base-tc-controller';\n\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport type TroubleConditionMute from 'customer-site/models/trouble-conditions/trouble-condition-mute';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { TCItem } from '../base-tc-controller';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Alerts & Issues controller.\n */\nexport default class AlertsAndIssueController extends BaseController {\n declare model: ModelFrom;\n\n /**\n * \"Alert\" trouble condition items to render.\n */\n @computed('troubleConditions.alerts.[]')\n get alerts(): TCItem[] {\n return this.getTCItems(this.troubleConditions.alerts);\n }\n\n /**\n * \"Issue\" trouble condition items to render.\n */\n @computed('troubleConditions.issues.[]')\n get issues(): TCItem[] {\n return this.getTCItems(this.troubleConditions.issues);\n }\n\n /**\n * Muted trouble condition items to render.\n */\n @computed('intl', 'model.troubleConditionMutes.[]')\n get mutes(): TCItem[] {\n return this.model.troubleConditionMutes.map((model) => ({\n model,\n buttons: [\n DropdownActionItem.create({\n name: this.intl.t('generic.restore'),\n action: () => this.unmute(model)\n })\n ]\n }));\n }\n\n /**\n * Returns a list of trouble condition mutes.\n */\n @alias('model.troubleConditionMutes')\n declare troubleConditionMutes: TroubleConditionMute[];\n\n /**\n * Reloads trouble conditions service items and local route model.\n */\n private refreshTroubleConditionsAndMutes(): void {\n this.troubleConditions.refresh();\n this.send('reloadModel');\n }\n\n /**\n * Dismisses the trouble condition for the desired amount of time.\n */\n protected dismiss(tc: TroubleCondition, enumVal: number): void {\n (async () => {\n await tc.dismiss(enumVal);\n this.refreshTroubleConditionsAndMutes();\n })();\n }\n\n /**\n * Opens youTube video.\n */\n protected watchTutorial(tc: TroubleCondition): void {\n window.open(tc.extraData.youTubeUrl);\n }\n\n /**\n * Opens an external link\n */\n protected externalLinkAction(tc: TroubleCondition): void {\n window.open(tc.extraData.externalLinkUrl);\n }\n\n /**\n * Restores an ignored trouble condition.\n */\n private unmute(troubleConditionMute: TroubleConditionMute): void {\n (async () => {\n await troubleConditionMute.destroyRecord();\n this.refreshTroubleConditionsAndMutes();\n })();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/index': AlertsAndIssueController;\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../classes/base-route';\nimport { EmberAlertsIssues } from '../../enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type TroubleConditionMute from 'customer-site/models/trouble-conditions/trouble-condition-mute';\nimport type TroubleConditionsService from 'customer-site/services/trouble-conditions';\n\n/**\n * @classdesc\n * A route for displaying alerts and issues.\n */\nexport default class AlertsIssuesIndexRoute extends AdcBaseRoute {\n @service declare troubleConditions: TroubleConditionsService;\n @service declare store: Store;\n\n routeId = EmberAlertsIssues;\n\n /**\n * Ensure the trouble conditions are loaded before transitioning to page.\n */\n model(): { troubleConditionMutes: ADCAsyncStoreFindAll } {\n return {\n troubleConditionMutes: this.store.findAll('trouble-conditions/trouble-condition-mute')\n };\n }\n\n afterModel(): void {\n // Clear the child routes that were visited under this parent route.\n this.contextManager.clearVisitedRoutesStack();\n }\n\n activate(): void {\n // Clear all trouble conditions because the user sees them all now.\n this.troubleConditions.hideNotifications();\n }\n\n @action reloadModel(): void {\n this.refresh();\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport type Store from '@ember-data/store';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Gathers the list of service requests and dealer information for a user and the ability to create a new service request.\n */\nexport default class ServiceAppointmentsIndexController extends Controller {\n @service declare store: Store;\n\n declare model: ModelFrom;\n\n /**\n * Used to remove any time frames which were not fully deleted during creation\n */\n @action dataLoaded(): void {\n ['request', 'timeframe'].forEach((name) =>\n this.store\n .peekAll(`service-appointments/${name}`)\n .filter((m) => m.hasDirtyAttributes)\n .forEach((m) => m.destroyRecord())\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/service-appointments/index': ServiceAppointmentsIndexController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberServiceAppointments } from 'customer-site/enums/CustomerPageUrl';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type Dealer from 'customer-site/models/dealers/dealer';\nimport type Request from 'customer-site/models/service-appointments/request';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Loads the requests and dealer information associated with the user.\n */\nexport default class Route extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n routeId = EmberServiceAppointments;\n\n model(): { requests: ADCAsyncStoreFindAll; dealer: AsyncBelongsTo } {\n return {\n requests: this.store.findAll('service-appointments/request'),\n dealer: this.contextManager.identityModel.dealer\n };\n }\n\n /**\n * The clear the child routes that were visited under this parent route\n */\n afterModel(): void {\n this.contextManager.clearVisitedRoutesStack();\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { gt } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { EmberServiceAppointments, EmberServiceAppointmentReasons } from 'customer-site/enums/CustomerPageUrl';\nimport { Other } from 'customer-site/enums/ServiceRequestIssueCategory';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Request from 'customer-site/models/service-appointments/request';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\ntype RouteModel = ModelFrom;\n\n/**\n * @classdesc\n * Displays a review of the appointment details entered by the user, and allows them the ability to edit, cancel or save the appointment.\n */\nexport default class ServiceAppointmentController extends Controller {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare store: ServiceRegistry['store'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n declare model: ModelFrom;\n\n @tracked request?: Awaited;\n @tracked dealer?: Awaited;\n\n /**\n * Did the user create more than one timeframe?\n * Determines if timeframe deletion options can be displayed.\n */\n @gt('request.requestedTimes.length', 1)\n declare moreThanOneTimeframe: boolean;\n\n /**\n * Is \"Other\" the only available reason card?\n */\n @computed('request.requestedReasons.{@each.isValidReasonCard,firstObject.id}')\n get onlyOtherReasonAvailable(): Promise {\n return (async () => {\n const request = this.request;\n if (!request) {\n return false;\n }\n\n const requestedReasons = await request.requestedReasons;\n return !!(\n requestedReasons.filter((r) => r.isValidReasonCard).length === 1 &&\n requestedReasons.slice()[0].id === String(Other)\n );\n })();\n }\n\n /**\n * Triggered when model data has been loaded.\n */\n @action dataLoaded({ pathType, request, dealer }: ResolvedModelFrom): void {\n Object.assign(this, {\n request,\n dealer\n });\n\n if (isEmpty(request.hasMany('requestedReasons').ids()) || isEmpty(request.hasMany('requestedTimes').ids())) {\n this.navigation.transitionToRouteId(EmberServiceAppointmentReasons, {\n queryParams: { pathType }\n });\n }\n }\n\n /**\n * Unloads the request and redirects the user to the 'Service Appointments' page.\n */\n @action cancelAppointment(request: Request): void {\n this.request = undefined;\n request.destroyRecord();\n\n this.store\n .peekAll('service-appointments/timeframe')\n .filter((r) => r && r.hasDirtyAttributes)\n .forEach((r) => r.destroyRecord());\n\n this.contextManager.transitionToPreviousRoute();\n }\n\n /**\n * Saves the user created request and navigates to the 'Service Appointments' page.\n */\n @action saveAppointment(request: Request, buttonAnimation: Promise): Promise {\n const promise = request.save();\n\n promise.then(() => {\n Promise.resolve(buttonAnimation).then((isSuccess) => {\n if (isSuccess) {\n this.navigation.transitionToRouteId(EmberServiceAppointments);\n }\n });\n });\n\n return promise;\n }\n\n /**\n * Deletes the specified timeframe from the service request.\n */\n @action async removeDate(temporaryTimeframeId: string): Promise {\n const { request } = this;\n if (request) {\n const times = await request.requestedTimes,\n timeframeToRemove = times.find((t) => t.temporaryId === temporaryTimeframeId);\n\n if (timeframeToRemove) {\n times.setObjects(times.filter((t) => t !== timeframeToRemove));\n this.store.unloadRecord(timeframeToRemove);\n }\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/service-appointments/service-appointment/index': ServiceAppointmentController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberServiceAppointment } from 'customer-site/enums/CustomerPageUrl';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ServiceAppointmentRoute from '../route';\n\ntype ParentRouteModel = ModelFrom;\n\n/**\n * @classdesc\n * Retrieves the service request from the parent model and determines if redirection to the 'Reasons' page needs\n * to take place.\n */\nexport default class ServiceAppointmentsIndexRoute extends AdcBaseRoute {\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n queryParams = {\n pathType: getQueryParam('string')\n };\n\n routeId = EmberServiceAppointment;\n\n skipWhenTransitioningBack = true;\n\n /**\n * Retrieves the appointment the user is working with from the parent model.\n */\n model(params: { pathType: string }): {\n pathType: string;\n request: ParentRouteModel['serviceAppointment'];\n dealer?: IdentityModel['dealer'];\n } {\n return {\n pathType: params.pathType,\n request: this.modelFor('alerts-issues.service-appointments.service-appointment')\n .serviceAppointment,\n dealer: this.identityManager.identityModel?.dealer\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseController from 'customer-site/automation/base-automation-controller';\nimport { EmberSupport } from 'customer-site/enums/CustomerPageUrl';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * Displays the available reasons a user can request service for from their dealer, and the ability to add a note to the request.\n */\nexport default class ServiceReasonsController extends BaseController {\n @service declare contextManager: ServiceRegistry['context-manager'];\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * Should the note section of the request be hidden?\n */\n @tracked\n displayNoteSection = false;\n\n /**\n * The list of available reasons to select for a service request.\n */\n get reasonItems(): Promise[]> {\n return (async () => {\n const { resolvedModel } = this;\n if (!resolvedModel) {\n return [];\n }\n\n const reasons = await resolvedModel.request.requestedReasons;\n return resolvedModel.availableReasons.map(\n ({ id, description, icon: { icon }, troubleConditions }) =>\n new BinaryListItem({\n label: description,\n icon,\n state: !!reasons.find((r) => r.description === description),\n props: {\n id,\n troubleConditions\n }\n })\n );\n })();\n }\n\n /**\n * Transitions to the previous page (service-appointments/index) in the feature navigation.\n * goes back to support page if there are no reasons\n */\n @action\n back(): void {\n this.resolvedModel?.request?.destroyRecord();\n this.contextManager.transitionToPreviousRoute(EmberSupport);\n }\n\n /**\n * Updates the list of reasons in the request based on the user's selections.\n */\n @action\n updateReasons(updatedReasons: Awaited): void {\n const selectedReasons = updatedReasons.filter((r) => !!r.state).map((r) => r.props.id);\n this.resolvedModel?.request?.requestedReasons.setObjects(\n this.resolvedModel?.availableReasons.filter(({ id }) => selectedReasons.includes(id)) ?? []\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/service-appointments/service-appointment/reasons': ServiceReasonsController;\n }\n}\n","import { A } from '@ember/array';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n EmberServiceAppointmentReasons,\n EmberServiceAppointmentTimeframe,\n EmberThirdPartyServiceRequest\n} from 'customer-site/enums/CustomerPageUrl';\nimport { Other } from 'customer-site/enums/ServiceRequestIssueCategory';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type Reason from 'customer-site/models/service-appointments/reason';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ServiceAppointmentRoute from '../../route';\n\ntype ParentRouteModel = ModelFrom;\n\n/**\n * @classdesc\n * Retrieves the service request from the parent model and all available reasons for service.\n */\nexport default class AlertsIssuesServiceAppointmentReasons extends AdcBaseRoute {\n @service declare store: ServiceRegistry['store'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n queryParams = {\n pathType: getQueryParam('string')\n };\n routeId = EmberServiceAppointmentReasons;\n\n skipWhenTransitioningBack = true;\n\n /**\n * Retrieves the service request from the parent model and all available reasons for service.\n */\n model(params: { pathType: string }): {\n request: ParentRouteModel['serviceAppointment'];\n availableReasons: Promise;\n dealer?: IdentityModel['dealer'];\n } {\n const { serviceAppointment } = this.modelFor(\n 'alerts-issues.service-appointments.service-appointment'\n );\n\n return {\n request: serviceAppointment,\n availableReasons: this.store\n .query('service-appointments/reason', { pathType: params.pathType })\n .then((reasons) =>\n A(reasons.filter((r) => r.isValidReasonCard === true))\n .sortBy('id')\n .reverse()\n ),\n dealer: this.identityManager.identityModel?.dealer\n };\n }\n\n /**\n * If the only reason type available is \"Other\", then we automatically add it to the request's requestedReason list\n * before redirecting to the timeframe pages.\n * Sets the route of the reasons to EmberSupport as the top if we skipped the appointments page\n */\n afterModel(model: ReturnType): void {\n (async () => {\n const reasons = await model.availableReasons;\n if (!reasons) {\n return;\n }\n\n const [firstReason] = reasons;\n if (reasons.length === 1 && firstReason.id == String(Other)) {\n (await model.request).requestedReasons.setObjects([firstReason]);\n if (firstReason?.dealerURL !== '' && firstReason?.dealerURL !== null) {\n this.navigation.transitionToRouteId(EmberThirdPartyServiceRequest);\n } else {\n this.navigation.transitionToRouteId(EmberServiceAppointmentTimeframe, 'new');\n }\n }\n })();\n }\n}\n","import { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service, type Registry as ServiceRegistry } from '@ember/service';\nimport BaseController from 'customer-site/automation/base-automation-controller';\nimport { EmberSupport } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Reason from 'customer-site/models/service-appointments/reason';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\nexport default class ThirdPartyServiceSchedulingController extends BaseController {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare store: ServiceRegistry['store'];\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n @action\n back(): void {\n this.resolvedModel?.request?.destroyRecord();\n\n this.store\n .peekAll('service-appointments/timeframe')\n .filter((r) => r && r.hasDirtyAttributes)\n .forEach((r) => r.destroyRecord());\n this.contextManager.transitionToPreviousRoute(EmberSupport);\n }\n\n @action\n navigateToModel(url: Reason) {\n // The browser will be open when on Mobile whereas a new tab when on Web.\n window.open(url.dealerURL);\n }\n\n @alias('contextManager.isMobileApp')\n declare isMobile: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling': ThirdPartyServiceSchedulingController;\n }\n}\n","import { inject as service, type Registry as ServiceRegistry } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n EmberServiceAppointmentReasons,\n EmberServiceAppointmentTimeframe,\n EmberThirdPartyServiceRequest\n} from 'customer-site/enums/CustomerPageUrl';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ServiceAppointmentRoute from '../../route';\n\ntype ParentRouteModel = ModelFrom;\n\nexport default class ThirdPartyServiceSchedulingRoute extends AdcBaseRoute {\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n\n routeId = EmberThirdPartyServiceRequest;\n\n skipWhenTransitioningBack = true;\n\n model(): { request: ParentRouteModel['serviceAppointment'] } {\n const parentModel = this.modelFor('alerts-issues.service-appointments.service-appointment');\n const request = parentModel.serviceAppointment;\n return { request: request };\n }\n\n async afterModel(model: ReturnType) {\n // The browser will be open when on Mobile whereas a new tab when on Web.\n const request = await model.request;\n const reasons = request.requestedReasons.objectAt(0);\n if (!request || !request.requestedReasons || !reasons) {\n //if we have no reasons we are fubar, go back and get them\n this.navigation.transitionToRouteId(EmberServiceAppointmentReasons);\n } else if (reasons.dealerURL === null || reasons.dealerURL === '') {\n //no link go to default flow\n this.navigation.transitionToRouteId(EmberServiceAppointmentTimeframe, 'new');\n } else {\n this.trackEngagement(reasons.engagementToken);\n if (this.contextManager.isMobileApp) {\n window.location.assign(reasons.dealerURL);\n } else {\n window.open(reasons.dealerURL);\n }\n }\n }\n\n /**\n * Calls the API method to track the engagement if we have a token.\n */\n async trackEngagement(engagementToken: string) {\n if (engagementToken) {\n this.ajax.apiRequest(`swa/engagement/${engagementToken}`, undefined, undefined, 'POST');\n }\n // Else, there was no token in the query params so do nothing.\n }\n}\n","import { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport ServiceRequestIssueCategoryMap from 'customer-site/enums/ServiceRequestIssueCategoryMap';\nimport AdcBaseRoute from '../../../classes/base-route';\nimport { EmberServiceAppointment, EmberServiceAppointments } from '../../../enums/CustomerPageUrl';\n\nimport type Request from 'customer-site/models/service-appointments/request';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface ServiceAppointmentRouteModel {\n serviceAppointment: ADCAsyncStoreFindRecord | Request;\n}\n\n/**\n * @classdesc\n * Creates a new service request appointment, and adds reason types to the request based on\n * the query parameters passed in.\n */\nexport default class ServiceAppointmentRoute extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n\n routeId = EmberServiceAppointment;\n\n skipWhenTransitioningBack = true;\n\n queryParams = {\n reasons: {\n refreshModel: true\n }\n };\n\n declare currentModel: ServiceAppointmentRouteModel;\n\n model({ id_request, reasons }: { id_request: string; reasons: string }): ServiceAppointmentRouteModel {\n const { store } = this,\n type = 'service-appointments/request',\n appointment = id_request === 'new' ? store.createRecord(type) : store.findRecord(type, id_request);\n\n // If \"reasons\" are passed in through the queryParams, then we know we are coming from an email to create a specific\n // type of service request with select reasons. These reasons will be added to the request without any user input.\n if (reasons) {\n const ids = reasons\n .split(',')\n .map((type) => Object.entries(ServiceRequestIssueCategoryMap).find(([, value]) => value === type)?.[0])\n .filter((v) => !!v);\n\n if (!isEmpty(ids)) {\n (async () => {\n const r = (await store.findAll('service-appointments/reason')).filter(\n ({ id, isValidReasonCard }) => ids.includes(id) && isValidReasonCard\n );\n if (!isEmpty(r)) {\n (await appointment).requestedReasons.pushObjects(r);\n }\n })();\n }\n }\n\n return {\n serviceAppointment: appointment\n };\n }\n\n /** @override */\n async afterModel(modal: ServiceAppointmentRouteModel): Promise {\n const appointment = await modal.serviceAppointment;\n\n // Does the appointment exist/is the user trying to navigate to an already saved request?\n if (appointment === undefined || appointment.id !== null) {\n // Redirect them to the main service appointments page.\n this.navigation.transitionToRouteId(EmberServiceAppointments);\n }\n }\n\n /** @override */\n async rollbackModelOnTransition(): Promise {\n const request = await this.currentModel.serviceAppointment;\n\n // Was this model created just for this route?\n if (request && (request.id === null || request.id === 'new')) {\n // Unload from store because the user never saved it.\n this.store.unloadRecord(request);\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../../../classes/base-route';\nimport { EmberServiceAppointmentTimeframe, EmberServiceAppointmentDate } from '../../../../../enums/CustomerPageUrl';\n\nimport type NavigationService from 'customer-site/services/navigation';\n\n/**\n * @classdesc\n * Retrieves the timeframe model from the parent route and then navigates to the 'Select a Date' page.\n */\nexport default class ServiceAppointmentTimeframeIndexRoute extends AdcBaseRoute {\n routeId = EmberServiceAppointmentTimeframe;\n\n @service declare navigation: NavigationService;\n\n skipWhenTransitioningBack = true;\n\n redirect(): void {\n this.navigation.transitionToRouteId(EmberServiceAppointmentDate);\n }\n}\n","import { inject as service } from '@ember/service';\nimport { isBlank, isEmpty } from '@ember/utils';\nimport AdcBaseRoute from '../../../../classes/base-route';\nimport {\n EmberServiceAppointmentTimeframe,\n EmberServiceAppointments,\n EmberServiceAppointment,\n EmberThirdPartyServiceRequest\n} from '../../../../enums/CustomerPageUrl';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type Dealer from 'customer-site/models/dealers/dealer';\nimport type Timeframe from 'customer-site/models/service-appointments/timeframe';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ServiceAppointmentRoute from '../route';\n\n/**\n * @classdesc\n * Creates/loads a timeframe for the service request.\n */\nexport default class ServiceAppointmentsTimeFrameRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare navigation: NavigationService;\n\n routeId = EmberServiceAppointmentTimeframe;\n\n skipWhenTransitioningBack = true;\n\n /**\n * Retrieves the timeframe if it is not 'new' based on the id, or a newly created empty timeframe record.\n */\n model({ id_timeframe }: { id_timeframe: string }): {\n request: ModelFrom['serviceAppointment'];\n timeframe: Timeframe;\n availableDates: Promise | Timeframe[];\n dealer: AsyncBelongsTo;\n } {\n const { store } = this,\n type = 'service-appointments/timeframe';\n\n const request = this.modelFor>(\n 'alerts-issues.service-appointments.service-appointment'\n ).serviceAppointment;\n\n return {\n request,\n timeframe:\n id_timeframe === 'new'\n ? store.createRecord(type)\n : store.peekAll(type).find((t) => t.temporaryId === id_timeframe)!,\n availableDates: (async () => {\n const t = await this.store.query('service-appointments/timeframe', {\n reasonCodes: (await request).hasMany('requestedReasons').ids().join('-'),\n batchSize: 8\n });\n\n return t.toArray();\n })(),\n dealer: this.contextManager.identityModel.dealer\n };\n }\n\n async afterModel(model: ReturnType): Promise {\n const appointment = await model.request;\n\n // If the user tries to directly navigate here before creating a request send them back.\n if (isBlank(appointment) || isBlank(model.timeframe)) {\n // The request doesn't exist yet, send them back to the service appointment page with a new request.\n this.navigation.transitionToRouteId(EmberServiceAppointment, 'new');\n }\n\n // Does the appointment exist/is the user trying to navigate to an already saved request?\n if (appointment.id !== null || isEmpty(appointment.requestedReasons)) {\n // Redirect them to the main service appointments page.\n this.navigation.transitionToRouteId(EmberServiceAppointments);\n }\n\n //redirect to third party service scheduling if they have a requested reason that is 3PSS\n const firstRequestReason = appointment.requestedReasons.firstObject;\n if (!firstRequestReason) {\n return;\n }\n if (firstRequestReason.dealerURL !== '' && firstRequestReason.dealerURL !== null) {\n this.navigation.transitionToRouteId(EmberThirdPartyServiceRequest);\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { computed, set, setProperties, action } from '@ember/object';\nimport { alias, gte } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport {\n EmberServiceAppointmentTimes,\n EmberServiceAppointmentReasons,\n EmberServiceAppointment,\n EmberServiceAppointmentDate\n} from '../../../../../enums/CustomerPageUrl';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type RequestModel from 'customer-site/models/service-appointments/request';\nimport type TimeframeModel from 'customer-site/models/service-appointments/timeframe';\nimport type { AdcRouteItem } from 'customer-site/services/context-manager';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\n/**\n * The batch size for retrieving available dates.\n */\nconst BATCH_ADDER = 8;\n\n/**\n * @classdesc\n * Handles displaying available dates of service to the user and selecting a single day for the specific service request timeframe.\n */\nexport default class TimeframeDateController extends Controller {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare store: ServiceRegistry['store'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * The model containing the list of reasons.\n */\n @alias('resolvedModel.timeframe')\n timeframe?: TimeframeModel;\n\n /**\n * The model containing the list of reasons.\n */\n @alias('resolvedModel.availableDates')\n availableDates?: TimeframeModel[];\n\n /**\n * The model containing the request.\n */\n @alias('resolvedModel.request')\n request?: RequestModel;\n\n /**\n * The starting batch index of dates to pull from the server.\n */\n @tracked batchSize = 8;\n\n /**\n * Disable the back button if we came from the review page before modifying/creating a timeframe.\n * We don't want the user to be able to click \"back\" and change their reason again.\n */\n @computed('contextManager.{previousRouteData,visitedRoutesStack.length}')\n get didComeFromReviewPage(): boolean {\n const { visitedRoutesStack } = this.contextManager;\n let stackIndex = visitedRoutesStack.length - 1,\n previousRoute = visitedRoutesStack.objectAt(stackIndex);\n\n if (!previousRoute) {\n return false;\n }\n\n const { routeId } = previousRoute.routeItem as AdcRouteItem;\n\n // Check if the last place we came from before changing a timeframe was the review page.\n while (\n stackIndex !== -1 &&\n previousRoute &&\n (routeId === EmberServiceAppointmentTimes || routeId === EmberServiceAppointmentDate)\n ) {\n stackIndex -= 1;\n previousRoute = this.contextManager.visitedRoutesStack.objectAt(stackIndex);\n }\n\n return !!(previousRoute && routeId === EmberServiceAppointment);\n }\n\n /**\n * Determines if we should disable the \"Show Next Dates\" button.\n */\n @gte('availableDates.length', 32)\n declare shouldDisableMoreDatesBtn: boolean;\n\n /**\n * The list of available dates for a user to select for their service request appointment time.\n */\n @computed('availableDates.[]', 'request.requestedTimes.[]', 'timeframe.{formattedLocalStartTime,localStartTime}')\n get dateItems(): BinaryListItem<{ date: Date }>[] {\n const currDateString = this.timeframe?.localStartTime,\n { request } = this;\n\n if (!request) {\n return [];\n }\n\n const requestTimes = request.requestedTimes.slice();\n return (this.availableDates ?? []).map(({ duration, localStartTime }) => {\n const disableSize = requestTimes\n .filter((rt) => rt.localStartTime === localStartTime)\n .flatMap((rt) => rt.duration.slice()).length;\n\n return new BinaryListItem({\n label: localStartTime,\n state: currDateString === localStartTime,\n disabled: duration.length == disableSize,\n props: {\n date: new Date(localStartTime)\n }\n });\n });\n }\n\n /**\n * Resets the date display to only showing the first 8 dates and navigates to the 'Select Times' page.\n */\n @action displayTimesView(): void {\n this.batchSize = BATCH_ADDER;\n this.navigation.transitionToRouteId(EmberServiceAppointmentTimes);\n }\n\n /**\n * Sets the date of the timeframe for the service request.\n */\n @action addDate(dateList: TimeframeDateController['dateItems']): void {\n const { timeframe } = this;\n if (timeframe) {\n if (timeframe.localStartTime !== undefined) {\n timeframe.duration.setObjects([]);\n }\n\n set(timeframe, 'localStartTime', String(dateList.find((d) => d.state)?.label ?? ''));\n }\n }\n\n /**\n * Transitions to the previous page in the feature navigation to the Reasons page.\n */\n @action back(): void {\n // going back to the reasons page and then moving forward again creates a new timeframe. Just delete the old one.\n setProperties(this.timeframe, {\n localStartTime: undefined,\n duration: []\n });\n\n this.timeframe?.deleteRecord();\n this.batchSize = BATCH_ADDER;\n\n this.navigation.transitionToRouteId(EmberServiceAppointmentReasons);\n }\n\n /**\n * An additional available eight days are displayed to the user.\n */\n @action showNextDates(): void {\n (async () => {\n const t = await this.store.query('service-appointments/timeframe', {\n reasonCodes: this.request?.requestedReasons.map((r) => r.id).join('-'),\n batchSize: (this.batchSize = this.batchSize + BATCH_ADDER)\n });\n\n set(this.model, 'availableDates', t.toArray());\n })();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/service-appointments/service-appointment/timeframe/select-date': TimeframeDateController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberServiceAppointmentDate } from 'customer-site/enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * Retrieves the associated service request and timeframe models from the parent routes and\n * all the available dates to request service for.\n */\nexport default class ServiceAppointmentsTimeFrameSelectDateRoute extends AdcBaseRoute {\n routeId = EmberServiceAppointmentDate;\n\n skipWhenTransitioningBack = true;\n}\n","import Controller from '@ember/controller';\nimport { action, computed, set } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { EmberServiceAppointment, EmberServiceAppointmentDate } from 'customer-site/enums/CustomerPageUrl';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type Request from 'customer-site/models/service-appointments/request';\nimport type StartAndEndTime from 'customer-site/models/service-appointments/start-and-end-time';\nimport type TimeframeModel from 'customer-site/models/service-appointments/timeframe';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Sets a duration for the timeframe model associated with the current service appointment request.\n */\nexport default class TimeframeTimeController extends Controller {\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare navigation: NavigationService;\n\n declare model: ModelFrom;\n resolvedModel?: Omit, 'availableDates'>;\n\n timeframeCount = 0;\n\n /**\n * The model containing the timeframe.\n */\n @alias('resolvedModel.timeframe')\n timeframe?: TimeframeModel;\n\n /**\n * The list of time durations.\n */\n @alias('resolvedModel.availableTimes')\n availableTimes?: StartAndEndTime[];\n\n /**\n * The current service request.\n */\n @alias('resolvedModel.request')\n request?: Request;\n\n /**\n * Should we show the schedule appointment button?\n */\n @computed('timeframe.duration.[]')\n get isTimeNotSelected(): boolean {\n return this.timeframe?.duration.length === 0;\n }\n\n /**\n * The list of available durations to select for a specific service request timeframe.\n */\n @computed('request', 'availableTimes', 'timeframe.duration')\n get durationItems(): BinaryListItem<{ id: string }>[] {\n const { request, timeframe } = this;\n if (!timeframe || !request) {\n return [];\n }\n\n const { duration } = timeframe;\n\n // Remove all duplicate time frames so user cannot double select same day and time\n let sameDayDurationIds = request.requestedTimes\n .filter((rt) => rt.localStartTime === timeframe.localStartTime)\n .flatMap((t) => t.duration.slice())\n .map((t) => t.id);\n\n // If editing timeframe, add duration option back in to be seen and unselected if desired\n const selectedForTimeframe = duration.slice().map((d) => d.id);\n sameDayDurationIds = sameDayDurationIds.filter((d) => !selectedForTimeframe.includes(d));\n\n return (this.availableTimes ?? [])\n .filter(({ id }) => !sameDayDurationIds.includes(id))\n .map(\n ({ id, formattedTime }) =>\n new BinaryListItem({\n label: formattedTime,\n state: duration === undefined ? false : !!duration.find((d) => d.id === id),\n props: { id }\n })\n );\n }\n\n /**\n * Adds a duration to the service request's timeframe.\n */\n @action addTime(timeList: TimeframeTimeController['durationItems']): void {\n const { timeframe } = this;\n if (timeframe) {\n const ids = timeList.filter((tl) => tl.state).map((tl) => tl.props.id);\n timeframe.duration.setObjects(this.availableTimes?.filter(({ id }) => ids.includes(id)) ?? []);\n }\n }\n\n /**\n * Transitions to the previous page in the feature navigation to the Reasons page.\n */\n @action back(): void {\n this.navigation.transitionToRouteId(EmberServiceAppointmentDate);\n }\n\n /**\n * Navigates to the 'Service Appointment' page for the user to review the request summary before saving.\n */\n @action saveAndShowAppointments(): void {\n const { timeframe, request } = this;\n if (!timeframe || !request) {\n return;\n }\n\n /* setting the timeframe object's temporary id property, due to recent ember-data recordData ember updates.\n * If the timeframe object is on its first pass through the feature it does not have a temporary id set used\n * to navigate back to modify. The temporary id is set here and the timeframe record is pushed into the\n * hasMany of its request record that it belongs to.\n */\n if (timeframe.temporaryId === undefined) {\n set(timeframe, 'temporaryId', String(this.timeframeCount));\n request.requestedTimes.setObjects([...request.requestedTimes.slice(), timeframe]);\n this.timeframeCount++;\n }\n\n this.navigation.transitionToRouteId(EmberServiceAppointment);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/service-appointments/service-appointment/timeframe/select-times': TimeframeTimeController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberServiceAppointmentTimes, EmberServiceAppointments } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type StartAndEndTime from 'customer-site/models/service-appointments/start-and-end-time';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\n/**\n * @classdesc\n * Retrieves the request and timeframe models from the parent routes and all of the available durations for the timeframe.\n */\nexport default class ServiceAppointmentsTimeFrameSelectTimesRoute extends AdcBaseRoute {\n @service declare navigation: ServiceRegistry['navigation'];\n\n routeId = EmberServiceAppointmentTimes;\n\n skipWhenTransitioningBack = true;\n\n /**\n * Retrieves the request and timeframe models from the parent routes and all of the available durations for the timeframe.\n */\n model(\n _: Record,\n transition: Transition\n ): ModelFrom & { availableTimes: Promise } {\n const model = this.modelFor>(transition!.to!.parent!.name),\n selectedDay = model.timeframe.localStartTime;\n\n if (isEmpty(selectedDay)) {\n // User tried to get to this page directly.\n this.navigation.transitionToRouteId(EmberServiceAppointments);\n }\n\n return {\n ...model,\n availableTimes: Promise.resolve(model.availableDates).then((dates) =>\n dates.find((d) => d.localStartTime === selectedDay)?.duration.slice()\n )\n };\n }\n}\n","import { action } from '@ember/object';\nimport { alias, and } from '@ember/object/computed';\nimport { DeviceMispositioned, SensorMalfunction } from 'customer-site/enums/TroubleConditionType';\nimport TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport { EmberSupport, EmberAlertsIssues } from '../../enums/CustomerPageUrl';\nimport BaseController from '../base-tc-controller';\n\nimport type TroubleConditionMute from 'customer-site/models/trouble-conditions/trouble-condition-mute';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type { TCItem } from '../base-tc-controller';\nimport type Route from './route';\n\n/**\n * @classdesc\n * The controller for the alerts-issues/{:id} route.\n */\nexport default class TroubleConditionController extends BaseController {\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * Alias to store trouble condition.\n */\n @alias('resolvedModel.troubleCondition')\n declare troubleCondition?: TroubleCondition;\n\n /**\n * Alias to validate if the page is being displayed in a mobile app.\n */\n @alias('identityManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Determines whether or not to display a knowledge base link.\n * @type {boolean}\n */\n @and('troubleCondition.extraData.knowledgeBaseLinkText', 'troubleCondition.extraData.knowledgeBaseLinkUrl')\n declare hasKnowledgeBaseLink: boolean;\n\n /**\n * Returns TroubleCondition type when the input is ambiguous\n *\n * We should not display TroubleConditionMute or undefined for this page\n */\n isTroubleCondition(tc: TroubleCondition | TroubleConditionMute | undefined): tc is TroubleCondition {\n return tc instanceof TroubleCondition;\n }\n\n /**\n * Determines whether the trouble condition is a not a sensor malfunction.\n */\n get isNotSensorMalfunction(): boolean {\n return this.troubleCondition?.troubleConditionType !== SensorMalfunction;\n }\n\n /**\n * Determines whether the trouble condition is a not a device mispositioned.\n */\n get isNotDeviceMispositioned(): boolean {\n return this.troubleCondition?.troubleConditionType !== DeviceMispositioned;\n }\n\n /**\n * Determines whether we 1. have a knowledge base link and 2. whether we should show that link as a link\n */\n @and('hasKnowledgeBaseLink', 'isNotSensorMalfunction', 'isNotDeviceMispositioned')\n declare showKnowledgeBaseAsLink: boolean;\n\n /**\n * Creates TCItem model to display with the trouble condition\n */\n get item(): TCItem | undefined {\n const { troubleCondition } = this;\n if (!troubleCondition) {\n return undefined;\n }\n\n return {\n model: troubleCondition,\n buttons: this.getActionItems(troubleCondition),\n actions: this.getDismissActions(troubleCondition)\n };\n }\n\n protected dismiss(tc: TroubleCondition, enumVal: number): void {\n (async () => {\n await tc.dismiss(enumVal);\n\n const { navigation } = this;\n if (this.isMobileApp) {\n const url = window.location.origin.concat('?AppAction=1');\n navigation.transitionToUrlInNewBrowserWindow(url);\n }\n\n navigation.transitionToRouteId(EmberAlertsIssues);\n })();\n }\n\n private transitionToExternalLink(url?: string): void {\n if (url) {\n this.navigation.transitionToUrlInNewBrowserWindow(url);\n }\n }\n\n /** @override */\n protected watchTutorial(tc: TroubleCondition): void {\n this.transitionToExternalLink(tc.extraData.youTubeUrl);\n }\n\n /** @override */\n protected externalLinkAction(tc: TroubleCondition): void {\n this.transitionToExternalLink(tc.extraData.externalLinkUrl);\n }\n\n /** @override */\n @action contactSupport(): void {\n if (this.isMobileApp) {\n this.navigation.transitionToRouteId(EmberSupport);\n return;\n }\n\n return super.contactSupport();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/trouble-condition': TroubleConditionController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport { EmberAlertsIssuesTroubleCondition } from 'customer-site/enums/CustomerPageUrl';\nimport AdcBaseRoute from '../../classes/base-route';\nimport { SmallLeak, MediumLeak, LargeLeak } from '../../enums/TroubleConditionType';\n\nimport type RouterService from '@ember/routing/router-service';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\n/**\n * @classdesc\n * A Route for displaying a single trouble condition\n */\nexport default class TroubleConditionRoute extends AdcBaseRoute {\n @service declare store: ServiceRegistry['store'];\n @service declare router: RouterService;\n\n /** @override */\n routeId = EmberAlertsIssuesTroubleCondition;\n\n /** @override */\n isMediumWidthPage = true;\n\n model({ id }: { id: string }): { troubleCondition: ADCAsyncStoreFindRecord } {\n return {\n troubleCondition: this.store.findRecord('trouble-conditions/trouble-condition', id)\n };\n }\n\n async afterModel(model: ModelFrom): Promise {\n const tc = await model.troubleCondition;\n\n // Is this a leak trouble condition?\n if ([SmallLeak, MediumLeak, LargeLeak].includes(tc.troubleConditionType)) {\n // Transition to leak route.\n this.router.transitionTo('alerts-issues.water-leak-alert', tc.id);\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { EmberAlertsIssues } from 'customer-site/enums/CustomerPageUrl';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * The controller for the water-leak-alert-route\n */\nexport default class WaterLeakAlertController extends Controller {\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare store: ServiceRegistry['store'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare troubleConditions: ServiceRegistry['trouble-conditions'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n declare model: ModelFrom;\n\n private exitRoute(): void {\n if (this.identityManager.isMobileApp) {\n window.location.assign(`${window.location.origin}?AppAction=1`);\n return;\n }\n\n this.troubleConditions.refresh();\n this.navigation.transitionToRouteId(EmberAlertsIssues);\n }\n\n /**\n * Pauses the buzzer on the water meter.\n */\n @action\n async pauseMeterBuzzer(tc: TroubleCondition, buttonAnimation: Promise): Promise {\n const meterModel = await this.store.findRecord('devices/water-meter', tc.emberDeviceId);\n\n try {\n // Call the pauseBuzzer method and display an error is something goes wrong\n await meterModel.pauseBuzzer();\n buttonAnimation.then(() => this.exitRoute());\n } catch (ex) {\n this.notificationManager.addError(ex.errors[0].detail);\n }\n }\n\n /**\n * Dismisses the trouble condition until the next occurrence of the condition.\n */\n @action\n async dismissBuzzerUntilNextOccurrence(tc: TroubleCondition): Promise {\n await tc.dismiss(0, false);\n this.exitRoute();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'alerts-issues/water-leak-alert': WaterLeakAlertController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberWaterLeakAlert } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\n\n/**\n * @classdesc\n * Route for displaying a water-leak alert page\n */\nexport default class Route extends AdcBaseRoute {\n @service declare store: Store;\n\n /** @override */\n routeId = EmberWaterLeakAlert;\n\n /** @override */\n isMediumWidthPage = true;\n\n model(params: { id_trouble_condition: string }): { troubleCondition: ADCAsyncStoreFindRecord } {\n return {\n troubleCondition: this.store.findRecord('trouble-conditions/trouble-condition', params.id_trouble_condition)\n };\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * The controller for the app-error route.\n */\nexport default class AppErrorController extends Controller {\n @service declare contextManager: ServiceRegistry['context-manager'];\n\n declare model: ModelFrom;\n\n /**\n * Resets the application.\n */\n @action refreshPage(): void {\n // Ask context manager to reset application.\n this.contextManager.resetAfterError();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'app-error': AppErrorController;\n }\n}\n","import { action } from '@ember/object';\nimport { next } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { flush as flushSentry } from '@sentry/ember';\nimport AdcBaseRoute from '../classes/base-route';\n\nimport type NativeBridge from '@adc/app-infrastructure/services/native-bridge';\n\n/**\n * @classdesc\n * Route shown when the application errors.\n */\nexport default class AppErrorRoute extends AdcBaseRoute {\n @service declare nativeBridge: NativeBridge;\n\n canUserAccess(): boolean {\n return true;\n }\n\n @action\n didTransition(): void {\n if (this.nativeBridge.isEnabled) {\n // We are seeing errors in Webviews not being reported to sentry. Stashing this in a runloop to ensure any other queued JS can execute before we invoke the error on the bridge.\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline runTask.\n // eslint-disable-next-line ember/no-runloop\n next(async () => {\n // Force pushing any queued errors.\n await flushSentry();\n\n try {\n await this.nativeBridge.handleError();\n } catch (e) {\n // Do nothing. We are just attempting to call the method but there is no way to check if its supported.\n }\n });\n }\n }\n}\n","import Application from '@ember/application';\nimport loadInitializers from 'ember-load-initializers';\nimport Resolver from 'ember-resolver';\nimport ENV from 'customer-site/config/environment';\n\n// Style imports for webpack\nimport './assets/styles/app.scss';\nimport '@adc/list-view/addon.scss';\nimport '@adc/login-setup-addon/addon.scss';\nimport '@adc/ui-components/addon.scss';\nimport '@adc/video-player/addon.scss';\nimport '@adc/wizard/addon.scss';\n// Engines need full paths including addon directory\nimport '@adc/add-device-engine/addon/styles/addon.scss';\nimport '@adc/customer-wizard-engine/addon/styles/addon.scss';\nimport '@adc/login-setup-engine/addon/styles/addon.scss';\nimport '@adc/network-config-engine/addon/styles/addon.scss';\n\nexport default class App extends Application {\n modulePrefix = ENV.modulePrefix;\n podModulePrefix = ENV.podModulePrefix;\n Resolver = Resolver;\n\n engines = {\n '@adc/add-device-engine': {\n dependencies: {\n externalRoutes: {\n addDeviceExitRoute: 'home',\n videoAddNewDevice: 'video.add-device-redirect',\n wizardNotificationEdit: 'default-notification-redirect',\n wizardEngineLaunch: 'wizardEngine.wizard-launch'\n },\n services: [\n 'ajax',\n 'context-manager',\n 'engine-config',\n 'env-settings',\n 'intl',\n 'modals',\n 'native-bridge',\n 'notification-manager',\n 'performance-monitor',\n 'router',\n 'store'\n ]\n }\n },\n '@adc/customer-wizard-engine': {\n dependencies: {\n services: [\n 'ajax',\n 'context-manager',\n 'env-settings',\n 'intl',\n 'native-bridge',\n 'router',\n 'wizard-manager'\n ]\n }\n },\n '@adc/login-setup-engine': {\n dependencies: {\n externalRoutes: {\n twoFactorSetupExitRoute: 'settings.login-information'\n },\n services: [\n 'accessibility',\n 'ajax',\n 'context-manager',\n 'dom',\n 'env-settings',\n 'engine-config',\n 'install-manager',\n 'intl',\n 'modals',\n 'native-bridge',\n 'notification-manager',\n 'performance-monitor',\n 'router',\n 'store'\n ]\n }\n },\n '@adc/network-config-engine': {\n dependencies: {\n services: [\n 'accessibility',\n 'ajax',\n 'ble-network-setup',\n 'dom',\n 'env-settings',\n 'engine-config',\n 'intl',\n 'modals',\n 'notification-manager',\n 'router',\n 'store'\n ]\n }\n }\n };\n\n // Basic logging, e.g. \"Transitioned into 'post'\"\n LOG_TRANSITIONS = false;\n\n // Extremely detailed logging, highlighting every internal\n // step made while transitioning into a route, including\n // `beforeModel`, `model`, and `afterModel` hooks, and\n // information about redirects and aborted transitions\n LOG_TRANSITIONS_INTERNAL = false;\n}\n\nloadInitializers(App, ENV.modulePrefix);\n","import { tracked } from '@glimmer/tracking';\nimport { toggleClassOnBody, expireCookie } from '@adc/ember-utils/utils/browser-helpers';\nimport EmberController from '@ember/controller';\nimport { registerDestructor } from '@ember/destroyable';\nimport { get, set, setProperties, computed, action } from '@ember/object';\nimport { or, bool, filterBy, reads } from '@ember/object/computed';\nimport { once } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { dasherize } from '@ember/string';\nimport { htmlSafe } from '@ember/template';\nimport { isEmpty } from '@ember/utils';\nimport ENV from 'customer-site/config/environment';\nimport { OperatorLandingPageRoute } from 'customer-site/enums/Operator';\nimport { closeLegacyModal } from 'customer-site/legacy-page/route';\nimport { darkModeListener } from '@adc/a11y/build/dark-mode-listener';\nimport {\n EmberHome,\n EmberLocationsSummary,\n EmberLocationsOverview,\n EmberLocationsThermostats,\n EmberLocationsFleet,\n EmberLocationsOccupancy,\n EmberLocationsVideo,\n EmberLocationsTemperatures,\n EmberAddDeviceCategories,\n EmberAddDeviceDevices,\n EmberAddDeviceStart\n} from '../enums/CustomerPageUrl';\nimport { unusedCookiesRegexes } from '../utils/unused-cookies-prefixes';\n\n/**\n * Clear cookies based on prefix.\n *\n * @param {Array} cookiesRegularExpressions List of cookies regexes\n */\nfunction clearCookies(cookiesRegularExpressions) {\n const loggedCookies = document.cookie.split(';').map((cookie) => cookie.split('=')[0].trim());\n\n loggedCookies.forEach((cookie) => {\n if (cookiesRegularExpressions.find((prefix) => cookie.match(prefix))) {\n expireCookie(cookie);\n }\n });\n\n // Delete cookies which were renamed\n expireCookie('adc_saved_clips_view');\n expireCookie('adc_clip_details');\n expireCookie('adc_saved_clips_include_other');\n expireCookie('adc_saved_clips_mute');\n}\n\n/**\n * Returns page title for the given route data.\n *\n * @private\n * @static\n * @memberof application.ApplicationController\n *\n * @param {boolean} isPreviousRoute\n * @param {boolean} isSubNavHidden\n * @param {RouteDataType=} routeData\n * @returns {String|undefined}\n */\nfunction getPageTitle(isPreviousRoute, isSubNavHidden, routeData) {\n if (!routeData) {\n return undefined;\n }\n\n let { pageTitle, routeItem } = routeData;\n\n // Are we analyzing the current route and is it a sub route?\n // If the sub routes are hidden, do not use the parent's page title.\n if (!isPreviousRoute && !isSubNavHidden && routeItem && routeItem.get('isSubRoute')) {\n // Use the parent's pageTitle.\n pageTitle = routeItem.get('parent.pageTitle');\n }\n\n // If there is pageTitle, then use it, otherwise use the routeItem.\n return pageTitle || (routeItem || {}).pageTitle;\n}\n\n/**\n * Returns false if the previous route, the route from which the wizard route launched, is an add-device engine route.\n * @private\n * @instance\n * @memberof application.ApplicationController\n * @param {RouteDataType} prevRouteData\n */\nfunction shouldWizardHaveBackButton(prevRouteData) {\n if (!prevRouteData || !prevRouteData.routeItem) {\n return true;\n }\n\n const addDeviceRoutes = [EmberAddDeviceCategories, EmberAddDeviceDevices, EmberAddDeviceStart];\n\n return !addDeviceRoutes.includes(prevRouteData.routeItem.routeId);\n}\n\n/**\n * Calculates route data and display texts.\n *\n * @private\n * @instance\n * @memberof application.ApplicationController\n */\nfunction calculateAndSetRouteData() {\n // We want to set:\n // - current route data\n // - current route title\n // - previous route title\n\n // Only get routes that are not part of the modal.\n // If we do not do this filtering we will end up with the header changing even when the user is visiting routes in modal.\n const stack = (this.contextManager.visitedRoutesStack || []).rejectBy('routeItem.showInModal');\n\n if (isEmpty(stack)) {\n set(this, 'previousRouteText', undefined);\n return;\n }\n\n const length = stack.length;\n let [previousRouteData, currentRouteData] = stack.objectsAt([length - 2, length - 1]);\n\n // We want to go back to the latest cases of a non-edit route - if the previous route is an edit route, keep searching back.\n let idx = 3;\n while (previousRouteData?.route?.skipWhenTransitioningBack && idx <= length) {\n previousRouteData = stack.objectAt(length - idx);\n idx++;\n }\n\n const currentRouteText = getPageTitle(false, this.hideSubNav, currentRouteData);\n\n // Marking previous route's text as undefined hides the back button.\n // We will hide the back button for wizard launched from certain routes.\n let previousRouteText = getPageTitle(true, this.hideSubNav, previousRouteData);\n\n if (currentRouteData.isWizard) {\n if (!shouldWizardHaveBackButton(previousRouteData)) {\n previousRouteText = undefined;\n }\n }\n\n setProperties(this, {\n currentRouteData,\n currentRouteText,\n hideBackArrowWeb: (currentRouteData?.route?.hideBackArrowWeb || this.model.arpFeatures?.enableSidebar) ?? false,\n previousRouteText\n });\n\n // Send title text to the app.\n if (!avoidSettingTitleForRoute(currentRouteData?.routeItem?.id)) {\n this.nativeBridge.setTitle({\n id: 'routeTitle',\n title: currentRouteText\n });\n }\n}\n\n/**\n * Checks whether we should avoid sending the title to the app.\n * (In that case, the mobile client will set the title)\n *\n * @param {string} routeId\n * @returns\n */\nfunction avoidSettingTitleForRoute(routeId) {\n return [\n EmberLocationsSummary,\n EmberLocationsOverview,\n EmberLocationsTemperatures,\n EmberLocationsThermostats,\n EmberLocationsFleet,\n EmberLocationsVideo,\n EmberLocationsOccupancy\n ].includes(parseInt(routeId));\n}\n\n/**\n * The main application controller.\n *\n * @class application.ApplicationController\n * @extends Ember.Controller\n */\nexport default class ApplicationController extends EmberController {\n @service contextManager;\n @service dom;\n @service envSettings;\n @service identityManager;\n @service media;\n @service modals;\n @service nativeBridge;\n @service router;\n @service wizardManager;\n\n /**\n * Shortcut for the identity model\n *\n * @type {models.Identity}\n */\n @reads('contextManager.identityModel')\n identityModel;\n\n /**\n * Initialize controller properties.\n *\n * This can be done here because it is not dependent on any model data.\n */\n constructor(...args) {\n super(...args);\n\n clearCookies(unusedCookiesRegexes);\n\n const { destructor, isDarkModeEnabled } = darkModeListener();\n this.isDarkModeEnabledForWebView = isDarkModeEnabled;\n registerDestructor(this, destructor);\n }\n\n /**\n * Indicates we are in the automated ember test environment.\n */\n get isTestEnvironment() {\n return this.envSettings.isTestEnvironment();\n }\n\n /**\n * The path to dealer assets.\n *\n * @type {String}\n */\n @reads('identityModel.dealerPath')\n dealerPath;\n\n /**\n * The root URL path for all SVG sprites.\n *\n * @type {String}\n */\n @computed()\n get svgSpriteRoot() {\n return htmlSafe(`${ENV.rootURL}assets/svg-sprites`);\n }\n\n /**\n * The sub-routes collection to who in the application header.\n *\n * @type {Array}\n */\n @filterBy('currentRouteData.routeItem.parent.relationship.subRoutes', 'isHiddenFromNavigation', false)\n subRoutes;\n\n /**\n * Determines if the sub-pages should be shown in the header.\n *\n * Note: Some pages, such as Notifications, have 1 sub-route and no header control.\n * Pages that have header control will always have a more than 1 sub-route.\n *\n * @type {boolean}\n */\n @computed('isWizard', 'isFullScreen', 'subRoutes.length', 'hideSubNav')\n get isHeaderControl() {\n return !this.isWizard && !this.isFullScreen && this.subRoutes?.length > 1 && !this.hideSubNav;\n }\n\n /**\n * CSS class added to app-page to allow CSS selectors without media queries\n *\n * @type {String}\n */\n @reads('media.classNames')\n screenSizeClass;\n\n /**\n * Indicates if the application is being run on a touch screen device.\n *\n * @type {boolean}\n */\n @reads('contextManager.isTouchDevice')\n isTouchDevice;\n\n /**\n * Is the app being served as a webview in a mobile app?\n *\n * @type {boolean}\n */\n @reads('contextManager.isMobileApp')\n isMobileApp;\n\n /**\n * Is the dealer internal?\n *\n * @type {boolean}\n */\n @reads('contextManager.isInternalDealer')\n isInternalDealer;\n\n /**\n * Is Dark Mode enabled?\n *\n * @type {boolean}\n */\n @reads('identityModel.profile.siteAppearance.isDarkModeEnabled')\n isDarkModeEnabled;\n\n /**\n * Is dark mode enabled for web views?\n *\n * @type {boolean}\n */\n @tracked isDarkModeEnabledForWebView = false;\n\n /**\n * Is High Contrast Mode enabled?\n *\n * @type {boolean}\n */\n @reads('identityModel.profile.siteAppearance.isHighContrastModeEnabled')\n isHighContrastModeEnabled;\n\n /**\n * Sets dark and/or high-contrast class on the body based on the user site appearance preferences.\n *\n * @type {{dark: boolean, highContrast: boolean}}\n */\n @computed(\n 'isDarkModeEnabled',\n 'isDarkModeEnabledForWebView',\n 'isHighContrastModeEnabled',\n 'isInternalDealer',\n 'isMobileApp'\n )\n get siteAppearanceClasses() {\n return {\n dark: this.isMobileApp ? this.isDarkModeEnabledForWebView : this.isDarkModeEnabled,\n hc: this.isHighContrastModeEnabled\n };\n }\n\n /**\n * Returns CSS classes for the body tag.\n *\n * @type {{\n * isMobileApp: boolean,\n * isFullScreen: boolean,\n * isWizard: boolean,\n * isTouchScreen: boolean,\n * isOperatorSite: boolean\n * }}\n */\n @computed(\n 'isMobileApp',\n 'isFullScreen',\n 'hideElements',\n 'isWizard',\n 'contextManager.isTouchDevice',\n 'isOperatorSite'\n )\n get viewClasses() {\n return {\n isMobileApp: !!this.isMobileApp,\n isFullScreen: this.isFullScreen || this.hideElements,\n isWizard: this.isWizard,\n isTouchScreen: this.contextManager.isTouchDevice,\n isOperatorSite: this.isOperatorSite\n };\n }\n\n /**\n * Is the app on a page that is in a full-screen view?\n *\n * @type {boolean}\n */\n isFullScreen = false;\n\n /**\n * Check if we are on VV V2, VV Live View, VV SD Timeline or VV SVR Timeline page and enableSidebar is true\n *\n * @type {boolean}\n */\n @computed('router.currentRouteName')\n get isAlarmResponsePortal() {\n const { currentRouteName } = this.router;\n\n return ['v2', 'live-view', 'onboard-timeline', 'svr-timeline'].some(\n (n) => currentRouteName === `visual-verification.${n}`\n );\n }\n\n @computed('isAlarmResponsePortal', 'model.arpFeatures.enableSidebar')\n get hideElementsOnVisualVerification() {\n return this.isAlarmResponsePortal && !this.model.arpFeatures.enableSidebar;\n }\n\n /**\n * @type {boolean}\n */\n @computed('router.currentRouteName')\n get isAlarmSafetyButtonPortal() {\n const { currentRouteName } = this.router,\n routes = /^(operator\\.)/;\n\n return routes.test(currentRouteName);\n }\n\n @computed('isAlarmSafetyButtonPortal', 'router.currentRouteName')\n get hideElementsOnSafetyButton() {\n return this.isAlarmSafetyButtonPortal && this.router.currentRouteName === OperatorLandingPageRoute;\n }\n\n /**\n * Is the app on Remote Video Monitoring Console page or on a visual verification page but not on visual verification flagging page?\n *\n * @type {boolean}\n */\n @computed('isAlarmResponsePortal', 'isAlarmSafetyButtonPortal', 'contextManager')\n get isOperatorSite() {\n const { identityModel } = this.contextManager;\n\n if (this.isAlarmSafetyButtonPortal) {\n return this.isAlarmSafetyButtonPortal;\n }\n\n if (identityModel.isVisualVerification) {\n return this.isAlarmResponsePortal;\n }\n\n return identityModel.isEscalatedEvents;\n }\n\n /**\n * Should the side nav bar be open?\n * Note: Only applies to mobile and tablet sizes.\n *\n * @type {boolean}\n */\n @tracked isNavBarOpen = false;\n\n /**\n * Is the main application part currently inactive? (blurred out)\n *\n * @type {boolean}\n */\n @reads('contextManager.isInactive')\n isInactive;\n\n /**\n * Should the loading indicator be shown?\n *\n * @type {boolean}\n */\n @reads('contextManager.isLoading')\n showLoadingIndicator;\n\n /**\n * Compound class list for the appPage element.\n *\n * @type {String}\n */\n @computed('pageMaxWidth', 'screenSizeClass', 'isHeaderControl', 'isInactive', 'contextManager.isEditingHomeScreen')\n get appPageClassList() {\n return [\n ['pageMaxWidth'],\n ['screenSizeClass'],\n ['isHeaderControl', 'header-control'],\n ['isInactive', 'inactive'],\n ['contextManager.isEditingHomeScreen', 'edit-home-screen']\n ]\n .map(([name, css]) => {\n // Return the passed CSS class or actual value, or undefined if value is NOT truthy.\n const value = get(this, name);\n return value ? css || value : undefined;\n })\n .compact()\n .join(' ');\n }\n\n /**\n * Should the application side navigation and footer be hidden?\n *\n * @note For now these are all the same, so keeping it as one variable\n *\n * @type {boolean}\n */\n @or('isMobileApp', 'isWizard', 'isFullScreen', 'hideElementsOnVisualVerification', 'hideElementsOnSafetyButton')\n hideElements;\n\n /**\n * Is the wizard mode currently on?\n *\n * @type {boolean}\n */\n @bool('contextManager.isWizard')\n isWizard;\n\n /**\n * How wide is the content on the page allowed to be?\n *\n * @type {String}\n */\n @reads('currentRouteData.route.pageMaxWidth')\n pageMaxWidth;\n\n /**\n * Should we hide the subroutes navigation from the app-header?\n */\n @reads('identityManager.identityModel.hideSubNav')\n hideSubNav;\n\n /**\n * Should the header and sub header be hidden?\n *\n * @type {boolean}\n */\n @computed('isMobileApp', 'isWizard', 'isFullScreen', 'isHeaderControl')\n get hideHeader() {\n const { isMobileApp, isWizard, isFullScreen, isHeaderControl } = this;\n\n return isWizard || isFullScreen || (isMobileApp && !isHeaderControl);\n }\n\n /**\n * Determines if the system and group titles should be shown.\n *\n * @type {boolean}\n */\n @computed('contextManager.identityModel.selectedSystem.systemGroupName', 'currentRouteData.routeId')\n get showGroupSystemNameInHeader() {\n // Change the header if we are on a single system home page where we can view the system's group\n // For now, we can just check that the routeName is 'home.index' since we are using a legacy page for the group home page\n // if we change that, then this will also have to change.\n return (\n this.currentRouteData?.routeId === EmberHome &&\n !isEmpty(this.contextManager.identityModel?.selectedSystem?.systemGroupName)\n );\n }\n\n /**\n * Skip to main content when the button is triggered.\n */\n @action skipToMainContent() {\n const mainContent = document.getElementById('app-content'),\n focusElements = Array.from(\n mainContent.querySelectorAll('a, button, object, input, iframe, select, [tabindex]')\n ).filter((item) => item.getAttribute('tabindex') !== '-1' && item.offsetParent);\n\n if (focusElements.length) {\n focusElements[0].focus();\n } else {\n mainContent.focus();\n }\n\n document.querySelector('.skip-content-button').classList.remove('focused');\n }\n\n /**\n * Updates app color scheme.\n *\n * @param {Object} [css]\n */\n @action updateColorScheme(css) {\n css['dark'] !== undefined &&\n document.documentElement.style.setProperty('color-scheme', css['dark'] ? 'dark' : 'light');\n }\n\n /**\n * Updates route data.\n */\n @action updateRouteData() {\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n once(this, calculateAndSetRouteData);\n }\n\n /**\n * Updates the body tag CSS for site appearance.\n *\n * @param {Object} [css]\n */\n @action updateBodyCssClass(css = {}) {\n this.updateColorScheme(css);\n Object.keys(css).forEach((key) => toggleClassOnBody(dasherize(key), css[key]));\n }\n\n /**\n * Updates the dealer attributes based on dealer path.\n *\n * @function\n */\n @action updateDealerPath() {\n const dealer = this.dealerPath;\n if (dealer) {\n document.getElementById('app-content').setAttribute('dealer', dealer);\n }\n }\n\n /**\n * Makes the site non-scalable for mobile apps\n */\n @action setUserScalability() {\n if (!this.isMobileApp) {\n return;\n }\n\n const viewportMeta = document.querySelector('meta[name=\"viewport\"]');\n viewportMeta?.setAttribute('content', 'width=device-width, initial-scale=1, user-scalable=no');\n }\n\n /**\n * Observer to close modal when current route changes.\n */\n @action checkModal() {\n if (\n !this.contextManager.currentRouteData?.route?.routeItem?.showInModal &&\n // We don't want to cancel the initial setup modal that happens during a transition\n !this.identityManager.intialSetupInProgress\n ) {\n this.send('closeModal', true);\n }\n }\n\n /**\n * Closes the modal dialog if it is currently open.\n *\n * @param {boolean=} wasTransition - Was the closing of modal caused by transition to another route?\n */\n @action closeModal(wasTransition) {\n closeLegacyModal.call(this, wasTransition);\n }\n\n /**\n * Ensures the navigation bar is closed.\n */\n @action closeNavBar() {\n this.isNavBarOpen = false;\n }\n\n /**\n * Sets the application header text.\n *\n * @param headerText The desired application header text.\n */\n @action setApplicationHeaderText(headerText) {\n set(this, 'currentRouteText', headerText);\n }\n}\n","import { action, setProperties } from '@ember/object';\nimport Route from '@ember/routing/route';\nimport { scheduleOnce } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { isInvalidSessionError } from '@adc/ajax/utils/status-codes';\n\n/**\n * Hides the application preloading DOM node (if present);\n *\n * @private\n */\nexport function finishAppLoad() {\n document.querySelector('#app-page.pre-loading')?.remove();\n}\n\n/**\n * @classdesc\n * The main application route.\n */\nexport default class ApplicationRoute extends Route {\n @service contextManager;\n @service intl;\n @service nativeBridge;\n @service notificationManager;\n @service performanceMonitor;\n @service identityManager;\n @service envSettings;\n @service metrics;\n @service ajax;\n @service('video.video-preloader') videoPreloader;\n\n queryParams = {\n enTok: {\n refreshModel: false\n }\n };\n\n /**\n * Calls the API method to track the engagement if we have a token.\n */\n trackEngagement() {\n const engagementToken = this.paramsFor(this.routeName).enTok;\n if (engagementToken) {\n this.ajax.apiRequest(`swa/engagement/${engagementToken}`, undefined, undefined, 'POST');\n }\n // Else, there was no token in the query params so do nothing.\n }\n\n /** @override */\n beforeModel() {\n this.trackEngagement();\n // We mark JS parsing as finished here because it is the earliest spot in the app where our code runs.\n // The thought being once our code is running, the parsing/compilation of the JS payload is complete.\n this.performanceMonitor.markJSEnd();\n }\n\n /** @override */\n model() {\n return this.contextManager.initializeApplicationData();\n }\n\n /** @override */\n async afterModel(model = {}) {\n // If there is no model, then abort transition.\n const { identity } = model,\n { contextManager } = this;\n\n if (!identity) {\n // Just logout because there is nothing that can be done.\n contextManager.handleSessionExpiration();\n return;\n }\n\n // Wait for native bridge to be fully initialized.\n await this.nativeBridge.initialize(\n identity.supportedNativeBridgeFeatures,\n identity.supportedNativeViewTransitions\n );\n\n await this.identityManager.setupApplication(identity);\n\n // Restore the visited route stack if being restored from an expired session\n contextManager.restoreVisitedRouteStackIfNeeded();\n\n // Once application setup is finished, the blur is removed and the user is able to interact\n // with the app so we stop recording Time To Interactive (TTI).\n this.performanceMonitor.markTTIEnd();\n\n // Starts the preload of WebRTC streams to improve stream load times.\n if (!this.videoPreloader.preloadStarted) {\n this.videoPreloader.startAllStreams();\n }\n }\n\n /**\n * Remove the preloader screen and show the actual application.\n *\n * This occurs only once, so it should be ideal for this action.\n */\n /** @override */\n activate() {\n // Remove the preloader because now the app is running after full render of the app\n // Maybe add some animations or what not\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', finishAppLoad);\n }\n\n /**\n * Application loading state handling.\n *\n * @todo Not sure if we want to have the loading path, or just have it as the future route.\n *\n * @param {Transition} transition\n * @param {Ember.Route} originRoute\n *\n * @returns {boolean}\n */\n @action loading(transition, originRoute) {\n // Retrieve controller for application.\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-controller-access-in-routes\n const controller = this.controllerFor(this.routeName);\n\n // Set loading path so that we can display the route name.\n controller.set('loadingPath', originRoute.routeName);\n\n transition.promise.finally(() => {\n // Disable loading path, so we only use the actual route name.\n controller.set('loadingPath', undefined);\n });\n\n // Have to return true so that the loading template can be shown.\n return true;\n }\n\n /**\n * Application error handling\n *\n * @param {DS.AdapterError} error\n * @param {Transition} transition\n * @returns {boolean}\n */\n @action error(error, transition) {\n // If the user logged out from another window or if the session expired, the webservice will be redirected to the login page\n // Which is hard for us to handle, because we do not have the actual XHR object, so just trying stuff here\n if (error?.toString() === 'SyntaxError: Unexpected token <') {\n // Reload page\n window.location.reload(true);\n // Do not bubble up error\n return false;\n }\n\n // If the error is related to invalid session, we do not want to redirect because that is handled somewhere else\n if (isInvalidSessionError(error)) {\n return false;\n }\n\n // Something went wrong on the server side and the user was logged out\n if (error?.message === 'Unexpected token < in JSON at position 4') {\n this.contextManager.handleSessionExpiration();\n transition.abort();\n\n return false;\n }\n\n const { applicationRouteErrorHandler } = this.envSettings.getEnvironment();\n if (applicationRouteErrorHandler) {\n applicationRouteErrorHandler(error, transition, this);\n }\n\n return true;\n }\n\n /**\n * Logout the user session and redirects to login if required\n *\n * @param {Boolean} useReturnUrl\n */\n @action logout(useReturnUrl) {\n this.contextManager.logout(useReturnUrl);\n }\n\n /**\n * Updates current route specific properties on the application controller.\n *\n * @param {CurrentRouteInfoType} info An object with the properties to update.\n */\n @action updateRouteInfo(info) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-controller-access-in-routes\n setProperties(this.controllerFor(this.routename), info);\n }\n\n /**\n * Transitions the application back to the previous route.\n */\n @action transitionToPreviousRoute() {\n this.contextManager.transitionToPreviousRoute();\n }\n}\n","\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n\ni(\"./-embroider-implicit-modules.js\");\n\nd(\"customer-site/access-control/users/user-groups/base-user-group-edit-route\", function(){ return i(\"customer-site/access-control/users/user-groups/base-user-group-edit-route.js\");});\nd(\"customer-site/adapters/application\", function(){ return i(\"customer-site/adapters/application.js\");});\nd(\"customer-site/adapters/automation/presence-state/base-presence-state-adapter\", function(){ return i(\"customer-site/adapters/automation/presence-state/base-presence-state-adapter.ts\");});\nd(\"customer-site/adapters/automation/presence-state/current-presence-state\", function(){ return i(\"customer-site/adapters/automation/presence-state/current-presence-state.ts\");});\nd(\"customer-site/adapters/automation/presence-state/presence-state-display\", function(){ return i(\"customer-site/adapters/automation/presence-state/presence-state-display.ts\");});\nd(\"customer-site/adapters/automation/presence-state/presence-state-explainer-display\", function(){ return i(\"customer-site/adapters/automation/presence-state/presence-state-explainer-display.ts\");});\nd(\"customer-site/adapters/automation/presence-state/presence-state-settings-display\", function(){ return i(\"customer-site/adapters/automation/presence-state/presence-state-settings-display.ts\");});\nd(\"customer-site/adapters/automation/recording-status\", function(){ return i(\"customer-site/adapters/automation/recording-status.js\");});\nd(\"customer-site/adapters/automation/rules/rule\", function(){ return i(\"customer-site/adapters/automation/rules/rule.js\");});\nd(\"customer-site/adapters/customer-site-json-api-content-adapter\", function(){ return i(\"customer-site/adapters/customer-site-json-api-content-adapter.ts\");});\nd(\"customer-site/adapters/discover/base-discover-adapter\", function(){ return i(\"customer-site/adapters/discover/base-discover-adapter.ts\");});\nd(\"customer-site/adapters/discover/get-discover-article-content-result\", function(){ return i(\"customer-site/adapters/discover/get-discover-article-content-result.ts\");});\nd(\"customer-site/adapters/discover/get-discover-dashboard-result\", function(){ return i(\"customer-site/adapters/discover/get-discover-dashboard-result.ts\");});\nd(\"customer-site/adapters/normalize-error-response-helper\", function(){ return i(\"customer-site/adapters/normalize-error-response-helper.ts\");});\nd(\"customer-site/adapters/settings/account-management/account-information/account-information\", function(){ return i(\"customer-site/adapters/settings/account-management/account-information/account-information.js\");});\nd(\"customer-site/adapters/settings/account-management/account-information/marketing-communication/marketing-communication\", function(){ return i(\"customer-site/adapters/settings/account-management/account-information/marketing-communication/marketing-communication.js\");});\nd(\"customer-site/adapters/settings/account-management/country-address-resource\", function(){ return i(\"customer-site/adapters/settings/account-management/country-address-resource.js\");});\nd(\"customer-site/adapters/settings/everbridge-integration/base-mass-notifications-adapter\", function(){ return i(\"customer-site/adapters/settings/everbridge-integration/base-mass-notifications-adapter.ts\");});\nd(\"customer-site/adapters/settings/everbridge-integration/everbridge-configuration\", function(){ return i(\"customer-site/adapters/settings/everbridge-integration/everbridge-configuration.ts\");});\nd(\"customer-site/adapters/settings/everbridge-integration/everbridge-template\", function(){ return i(\"customer-site/adapters/settings/everbridge-integration/everbridge-template.ts\");});\nd(\"customer-site/adapters/settings/manage-devices/device-catalog\", function(){ return i(\"customer-site/adapters/settings/manage-devices/device-catalog.ts\");});\nd(\"customer-site/adapters/settings/manage-devices/managed-device\", function(){ return i(\"customer-site/adapters/settings/manage-devices/managed-device.ts\");});\nd(\"customer-site/adapters/upsell/get-upsell-shopping-cart-result\", function(){ return i(\"customer-site/adapters/upsell/get-upsell-shopping-cart-result.ts\");});\nd(\"customer-site/adapters/video/dewarp-config\", function(){ return i(\"customer-site/adapters/video/dewarp-config.js\");});\nd(\"customer-site/adapters/video/download-format\", function(){ return i(\"customer-site/adapters/video/download-format.js\");});\nd(\"customer-site/adapters/video/familiar-targets/familiar-target-enrollment-image\", function(){ return i(\"customer-site/adapters/video/familiar-targets/familiar-target-enrollment-image.js\");});\nd(\"customer-site/adapters/video/intercom/base-intercom-adapter\", function(){ return i(\"customer-site/adapters/video/intercom/base-intercom-adapter.ts\");});\nd(\"customer-site/adapters/video/intercom/intercom-apartment\", function(){ return i(\"customer-site/adapters/video/intercom/intercom-apartment.ts\");});\nd(\"customer-site/adapters/video/intercom/intercom-contact\", function(){ return i(\"customer-site/adapters/video/intercom/intercom-contact.ts\");});\nd(\"customer-site/adapters/video/intercom/intercom-directory-list\", function(){ return i(\"customer-site/adapters/video/intercom/intercom-directory-list.ts\");});\nd(\"customer-site/adapters/video/intercom/intercom-directory\", function(){ return i(\"customer-site/adapters/video/intercom/intercom-directory.ts\");});\nd(\"customer-site/adapters/video/intercom/intercom-paired-unit\", function(){ return i(\"customer-site/adapters/video/intercom/intercom-paired-unit.ts\");});\nd(\"customer-site/adapters/video/intercom/intercom-qr-code\", function(){ return i(\"customer-site/adapters/video/intercom/intercom-qr-code.ts\");});\nd(\"customer-site/adapters/video/ov-rule\", function(){ return i(\"customer-site/adapters/video/ov-rule.js\");});\nd(\"customer-site/adapters/video/snapshot\", function(){ return i(\"customer-site/adapters/video/snapshot.js\");});\nd(\"customer-site/adapters/video/svr-usage-info\", function(){ return i(\"customer-site/adapters/video/svr-usage-info.js\");});\nd(\"customer-site/adapters/video/video-sources/live-video-highest-res-source\", function(){ return i(\"customer-site/adapters/video/video-sources/live-video-highest-res-source.ts\");});\nd(\"customer-site/adapters/video/video-sources/live-video-source\", function(){ return i(\"customer-site/adapters/video/video-sources/live-video-source.ts\");});\nd(\"customer-site/adapters/video/video-sources/svr-video-source\", function(){ return i(\"customer-site/adapters/video/video-sources/svr-video-source.js\");});\nd(\"customer-site/adapters/visual-verification-base-adapter\", function(){ return i(\"customer-site/adapters/visual-verification-base-adapter.ts\");});\nd(\"customer-site/adapters/visual-verification/alarm\", function(){ return i(\"customer-site/adapters/visual-verification/alarm.ts\");});\nd(\"customer-site/adapters/visual-verification/event\", function(){ return i(\"customer-site/adapters/visual-verification/event.ts\");});\nd(\"customer-site/adapters/visual-verification/page-feature\", function(){ return i(\"customer-site/adapters/visual-verification/page-feature.ts\");});\nd(\"customer-site/adapters/visual-verification/person-on-site/indicator\", function(){ return i(\"customer-site/adapters/visual-verification/person-on-site/indicator.ts\");});\nd(\"customer-site/adapters/visual-verification/property-note\", function(){ return i(\"customer-site/adapters/visual-verification/property-note.ts\");});\nd(\"customer-site/adapters/visual-verification/session-device-link\", function(){ return i(\"customer-site/adapters/visual-verification/session-device-link.ts\");});\nd(\"customer-site/adapters/visual-verification/session\", function(){ return i(\"customer-site/adapters/visual-verification/session.ts\");});\nd(\"customer-site/adapters/visual-verification/unexpected-events/prediction\", function(){ return i(\"customer-site/adapters/visual-verification/unexpected-events/prediction.ts\");});\nd(\"customer-site/adapters/visual-verification/visual-verification-event-id-list\", function(){ return i(\"customer-site/adapters/visual-verification/visual-verification-event-id-list.ts\");});\nd(\"customer-site/adapters/visual-verification/visual-verification-event-id\", function(){ return i(\"customer-site/adapters/visual-verification/visual-verification-event-id.ts\");});\nd(\"customer-site/alerts-issues/base-tc-controller\", function(){ return i(\"customer-site/alerts-issues/base-tc-controller.ts\");});\nd(\"customer-site/app\", function(){ return i(\"customer-site/app.ts\");});\nd(\"customer-site/assets/dealer-branding\", function(){ return i(\"customer-site/assets/dealer-branding.ts\");});\nd(\"customer-site/automation/base-automation-controller\", function(){ return i(\"customer-site/automation/base-automation-controller.ts\");});\nd(\"customer-site/automation/base-automation-route\", function(){ return i(\"customer-site/automation/base-automation-route.ts\");});\nd(\"customer-site/automation/rules/builder/base-feature-controller\", function(){ return i(\"customer-site/automation/rules/builder/base-feature-controller.ts\");});\nd(\"customer-site/automation/rules/builder/base-feature-details-controller\", function(){ return i(\"customer-site/automation/rules/builder/base-feature-details-controller.ts\");});\nd(\"customer-site/automation/rules/builder/base-feature-details-index-route\", function(){ return i(\"customer-site/automation/rules/builder/base-feature-details-index-route.ts\");});\nd(\"customer-site/automation/rules/builder/base-feature-details-route\", function(){ return i(\"customer-site/automation/rules/builder/base-feature-details-route.js\");});\nd(\"customer-site/automation/rules/builder/filter-controller\", function(){ return i(\"customer-site/automation/rules/builder/filter-controller.ts\");});\nd(\"customer-site/breakpoints\", function(){ return i(\"customer-site/breakpoints.js\");});\nd(\"customer-site/classes/access-control/access-plans/base-access-plan-edit-route\", function(){ return i(\"customer-site/classes/access-control/access-plans/base-access-plan-edit-route.ts\");});\nd(\"customer-site/classes/access-control/access-plans/base-index-route\", function(){ return i(\"customer-site/classes/access-control/access-plans/base-index-route.ts\");});\nd(\"customer-site/classes/access-control/access-plans/filter-results-controller\", function(){ return i(\"customer-site/classes/access-control/access-plans/filter-results-controller.ts\");});\nd(\"customer-site/classes/access-control/access-plans/filtering-controller\", function(){ return i(\"customer-site/classes/access-control/access-plans/filtering-controller.ts\");});\nd(\"customer-site/classes/access-control/access-plans/filtering-route\", function(){ return i(\"customer-site/classes/access-control/access-plans/filtering-route.ts\");});\nd(\"customer-site/classes/access-control/access-plans/helpers/filter-manager\", function(){ return i(\"customer-site/classes/access-control/access-plans/helpers/filter-manager.ts\");});\nd(\"customer-site/classes/access-control/access-points/base-index-route\", function(){ return i(\"customer-site/classes/access-control/access-points/base-index-route.ts\");});\nd(\"customer-site/classes/access-control/access-points/filtering-controller\", function(){ return i(\"customer-site/classes/access-control/access-points/filtering-controller.ts\");});\nd(\"customer-site/classes/access-control/access-points/filtering-route\", function(){ return i(\"customer-site/classes/access-control/access-points/filtering-route.ts\");});\nd(\"customer-site/classes/access-control/access-points/helpers/filter-manager\", function(){ return i(\"customer-site/classes/access-control/access-points/helpers/filter-manager.ts\");});\nd(\"customer-site/classes/access-control/scrolling-list-select/scrolling-list-select-item\", function(){ return i(\"customer-site/classes/access-control/scrolling-list-select/scrolling-list-select-item.ts\");});\nd(\"customer-site/classes/access-control/users/base-index-controller\", function(){ return i(\"customer-site/classes/access-control/users/base-index-controller.ts\");});\nd(\"customer-site/classes/access-control/users/base-index-route\", function(){ return i(\"customer-site/classes/access-control/users/base-index-route.ts\");});\nd(\"customer-site/classes/access-control/users/filtering-controller\", function(){ return i(\"customer-site/classes/access-control/users/filtering-controller.ts\");});\nd(\"customer-site/classes/access-control/users/filtering-route\", function(){ return i(\"customer-site/classes/access-control/users/filtering-route.ts\");});\nd(\"customer-site/classes/access-control/users/helpers/filter-manager\", function(){ return i(\"customer-site/classes/access-control/users/helpers/filter-manager.ts\");});\nd(\"customer-site/classes/access-control/users/promote-user/base-promote-user-route\", function(){ return i(\"customer-site/classes/access-control/users/promote-user/base-promote-user-route.ts\");});\nd(\"customer-site/classes/activity/event-history/activity-list-controller\", function(){ return i(\"customer-site/classes/activity/event-history/activity-list-controller.ts\");});\nd(\"customer-site/classes/activity/event-history/activity-list-route\", function(){ return i(\"customer-site/classes/activity/event-history/activity-list-route.ts\");});\nd(\"customer-site/classes/activity/event-history/base-image-event-controller\", function(){ return i(\"customer-site/classes/activity/event-history/base-image-event-controller.ts\");});\nd(\"customer-site/classes/activity/event-history/base-image-event-route\", function(){ return i(\"customer-site/classes/activity/event-history/base-image-event-route.ts\");});\nd(\"customer-site/classes/activity/event-history/base-media-event-controller\", function(){ return i(\"customer-site/classes/activity/event-history/base-media-event-controller.ts\");});\nd(\"customer-site/classes/activity/event-history/base-media-event-route\", function(){ return i(\"customer-site/classes/activity/event-history/base-media-event-route.ts\");});\nd(\"customer-site/classes/activity/event-history/base-video-event-route\", function(){ return i(\"customer-site/classes/activity/event-history/base-video-event-route.ts\");});\nd(\"customer-site/classes/activity/event-history/extended-controller\", function(){ return i(\"customer-site/classes/activity/event-history/extended-controller.js\");});\nd(\"customer-site/classes/activity/event-history/extended-route\", function(){ return i(\"customer-site/classes/activity/event-history/extended-route.js\");});\nd(\"customer-site/classes/activity/event-history/filter-results-controller\", function(){ return i(\"customer-site/classes/activity/event-history/filter-results-controller.ts\");});\nd(\"customer-site/classes/activity/event-history/filter-results-route\", function(){ return i(\"customer-site/classes/activity/event-history/filter-results-route.ts\");});\nd(\"customer-site/classes/activity/event-history/filtering-controller\", function(){ return i(\"customer-site/classes/activity/event-history/filtering-controller.ts\");});\nd(\"customer-site/classes/activity/event-history/filtering-route\", function(){ return i(\"customer-site/classes/activity/event-history/filtering-route.ts\");});\nd(\"customer-site/classes/activity/event-history/helpers/activity-group\", function(){ return i(\"customer-site/classes/activity/event-history/helpers/activity-group.ts\");});\nd(\"customer-site/classes/activity/event-history/helpers/activity-item\", function(){ return i(\"customer-site/classes/activity/event-history/helpers/activity-item.ts\");});\nd(\"customer-site/classes/activity/event-history/helpers/activity-location\", function(){ return i(\"customer-site/classes/activity/event-history/helpers/activity-location.ts\");});\nd(\"customer-site/classes/activity/event-history/helpers/base-collection\", function(){ return i(\"customer-site/classes/activity/event-history/helpers/base-collection.ts\");});\nd(\"customer-site/classes/activity/event-history/helpers/filter-manager\", function(){ return i(\"customer-site/classes/activity/event-history/helpers/filter-manager.ts\");});\nd(\"customer-site/classes/base-category-route\", function(){ return i(\"customer-site/classes/base-category-route.js\");});\nd(\"customer-site/classes/base-route\", function(){ return i(\"customer-site/classes/base-route.js\");});\nd(\"customer-site/classes/base-settings-route\", function(){ return i(\"customer-site/classes/base-settings-route.js\");});\nd(\"customer-site/classes/commercial/reports/edit/base-report-edit-controller\", function(){ return i(\"customer-site/classes/commercial/reports/edit/base-report-edit-controller.ts\");});\nd(\"customer-site/classes/commercial/reports/edit/base-report-edit-route\", function(){ return i(\"customer-site/classes/commercial/reports/edit/base-report-edit-route.ts\");});\nd(\"customer-site/classes/commercial/reports/edit/extra-data-route\", function(){ return i(\"customer-site/classes/commercial/reports/edit/extra-data-route.ts\");});\nd(\"customer-site/classes/credentials/base-user-credential-manager\", function(){ return i(\"customer-site/classes/credentials/base-user-credential-manager.ts\");});\nd(\"customer-site/classes/date-range\", function(){ return i(\"customer-site/classes/date-range.ts\");});\nd(\"customer-site/classes/enterprise/groups/user-access-helper\", function(){ return i(\"customer-site/classes/enterprise/groups/user-access-helper.ts\");});\nd(\"customer-site/classes/enterprise/users/filter-manager\", function(){ return i(\"customer-site/classes/enterprise/users/filter-manager.ts\");});\nd(\"customer-site/classes/fleet/filter-manager\", function(){ return i(\"customer-site/classes/fleet/filter-manager.ts\");});\nd(\"customer-site/classes/fleet/filtering-controller\", function(){ return i(\"customer-site/classes/fleet/filtering-controller.ts\");});\nd(\"customer-site/classes/helpers/filter-manager\", function(){ return i(\"customer-site/classes/helpers/filter-manager.ts\");});\nd(\"customer-site/classes/helpers/filters/base-filter\", function(){ return i(\"customer-site/classes/helpers/filters/base-filter.ts\");});\nd(\"customer-site/classes/helpers/filters/checklist-filter\", function(){ return i(\"customer-site/classes/helpers/filters/checklist-filter.ts\");});\nd(\"customer-site/classes/helpers/filters/date-filter\", function(){ return i(\"customer-site/classes/helpers/filters/date-filter.ts\");});\nd(\"customer-site/classes/helpers/filters/date-range-filter\", function(){ return i(\"customer-site/classes/helpers/filters/date-range-filter.ts\");});\nd(\"customer-site/classes/helpers/filters/date-time-filter\", function(){ return i(\"customer-site/classes/helpers/filters/date-time-filter.ts\");});\nd(\"customer-site/classes/helpers/filters/dropdown-filter\", function(){ return i(\"customer-site/classes/helpers/filters/dropdown-filter.ts\");});\nd(\"customer-site/classes/helpers/filters/filters\", function(){ return i(\"customer-site/classes/helpers/filters/filters.ts\");});\nd(\"customer-site/classes/helpers/filters/search-filter\", function(){ return i(\"customer-site/classes/helpers/filters/search-filter.ts\");});\nd(\"customer-site/classes/helpers/pointcentral\", function(){ return i(\"customer-site/classes/helpers/pointcentral.ts\");});\nd(\"customer-site/classes/helpers/settings-helper\", function(){ return i(\"customer-site/classes/helpers/settings-helper.js\");});\nd(\"customer-site/classes/settings/base-managed-account-access-route\", function(){ return i(\"customer-site/classes/settings/base-managed-account-access-route.ts\");});\nd(\"customer-site/classes/users/base-merge-users-preview-route\", function(){ return i(\"customer-site/classes/users/base-merge-users-preview-route.ts\");});\nd(\"customer-site/classes/users/edit/base-user-edit-controller\", function(){ return i(\"customer-site/classes/users/edit/base-user-edit-controller.ts\");});\nd(\"customer-site/classes/users/edit/base-user-edit-route\", function(){ return i(\"customer-site/classes/users/edit/base-user-edit-route.ts\");});\nd(\"customer-site/classes/users/edit/device-access/base-device-access-route\", function(){ return i(\"customer-site/classes/users/edit/device-access/base-device-access-route.ts\");});\nd(\"customer-site/classes/users/index/base-controller\", function(){ return i(\"customer-site/classes/users/index/base-controller.ts\");});\nd(\"customer-site/classes/users/merge-preview-manager\", function(){ return i(\"customer-site/classes/users/merge-preview-manager.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/helpers\", function(){ return i(\"customer-site/classes/video/advanced-video-search/helpers.js\");});\nd(\"customer-site/classes/video/advanced-video-search/motion-mask-coord\", function(){ return i(\"customer-site/classes/video/advanced-video-search/motion-mask-coord.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/motion-mask\", function(){ return i(\"customer-site/classes/video/advanced-video-search/motion-mask.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/motion-search-filter-manager\", function(){ return i(\"customer-site/classes/video/advanced-video-search/motion-search-filter-manager.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/object-search-config\", function(){ return i(\"customer-site/classes/video/advanced-video-search/object-search-config.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/object-search-params\", function(){ return i(\"customer-site/classes/video/advanced-video-search/object-search-params.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/object-search-result\", function(){ return i(\"customer-site/classes/video/advanced-video-search/object-search-result.ts\");});\nd(\"customer-site/classes/video/advanced-video-search/shapes\", function(){ return i(\"customer-site/classes/video/advanced-video-search/shapes.ts\");});\nd(\"customer-site/classes/video/clips/filter-results-controller\", function(){ return i(\"customer-site/classes/video/clips/filter-results-controller.js\");});\nd(\"customer-site/classes/video/clips/filter-results-route\", function(){ return i(\"customer-site/classes/video/clips/filter-results-route.js\");});\nd(\"customer-site/classes/video/clips/filtering-controller\", function(){ return i(\"customer-site/classes/video/clips/filtering-controller.ts\");});\nd(\"customer-site/classes/video/clips/filtering-route\", function(){ return i(\"customer-site/classes/video/clips/filtering-route.js\");});\nd(\"customer-site/classes/video/clips/helpers/base-clips-tour\", function(){ return i(\"customer-site/classes/video/clips/helpers/base-clips-tour.js\");});\nd(\"customer-site/classes/video/clips/helpers/clip-management\", function(){ return i(\"customer-site/classes/video/clips/helpers/clip-management.ts\");});\nd(\"customer-site/classes/video/clips/helpers/clips-tour\", function(){ return i(\"customer-site/classes/video/clips/helpers/clips-tour.js\");});\nd(\"customer-site/classes/video/clips/helpers/filter-manager\", function(){ return i(\"customer-site/classes/video/clips/helpers/filter-manager.ts\");});\nd(\"customer-site/classes/video/clips/helpers/other-detection-tour\", function(){ return i(\"customer-site/classes/video/clips/helpers/other-detection-tour.js\");});\nd(\"customer-site/classes/video/clips/helpers/video-resolution-helper\", function(){ return i(\"customer-site/classes/video/clips/helpers/video-resolution-helper.ts\");});\nd(\"customer-site/classes/video/gallery/filter-video-media-results-controller\", function(){ return i(\"customer-site/classes/video/gallery/filter-video-media-results-controller.ts\");});\nd(\"customer-site/classes/video/gallery/filter-video-media-results-route\", function(){ return i(\"customer-site/classes/video/gallery/filter-video-media-results-route.ts\");});\nd(\"customer-site/classes/video/gallery/filtering-video-media-controller\", function(){ return i(\"customer-site/classes/video/gallery/filtering-video-media-controller.ts\");});\nd(\"customer-site/classes/video/gallery/filtering-video-media-route\", function(){ return i(\"customer-site/classes/video/gallery/filtering-video-media-route.ts\");});\nd(\"customer-site/classes/video/rules/classification-filter\", function(){ return i(\"customer-site/classes/video/rules/classification-filter.ts\");});\nd(\"customer-site/classes/visual-verification/visual-verification-item\", function(){ return i(\"customer-site/classes/visual-verification/visual-verification-item.ts\");});\nd(\"customer-site/commercial/reports/catalog/base-catalog-route\", function(){ return i(\"customer-site/commercial/reports/catalog/base-catalog-route.ts\");});\nd(\"customer-site/commercial/reports/index/base-reports-controller\", function(){ return i(\"customer-site/commercial/reports/index/base-reports-controller.ts\");});\nd(\"customer-site/commercial/reports/index/base-reports-route\", function(){ return i(\"customer-site/commercial/reports/index/base-reports-route.ts\");});\nd(\"customer-site/commercial/temperatures/base-temperature-controller\", function(){ return i(\"customer-site/commercial/temperatures/base-temperature-controller.ts\");});\nd(\"customer-site/config/environment\", function(){ return i(\"customer-site/config/environment.js\");});\nd(\"customer-site/dashboards/thermostats/thermostat/base-hvac-dashboard-detail-controller\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/base-hvac-dashboard-detail-controller.ts\");});\nd(\"customer-site/enterprise/groups/base-new-group-route\", function(){ return i(\"customer-site/enterprise/groups/base-new-group-route.js\");});\nd(\"customer-site/enterprise/locations/base-locations-subroute-controller\", function(){ return i(\"customer-site/enterprise/locations/base-locations-subroute-controller.ts\");});\nd(\"customer-site/enterprise/locations/base-locations-subroute-route\", function(){ return i(\"customer-site/enterprise/locations/base-locations-subroute-route.ts\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-access-point-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-access-point-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-device-access-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-device-access-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-fleet-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-fleet-info.ts\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-info.ts\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-occupancy-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-occupancy-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-personal-safety-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-personal-safety-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-summary-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-summary-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-temperatures-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-temperatures-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-thermostats-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-thermostats-info.ts\");});\nd(\"customer-site/enterprise/locations/helper-objects/location-video-info\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/location-video-info.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/pointcentral-thermostat-row\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/pointcentral-thermostat-row.js\");});\nd(\"customer-site/enterprise/locations/helper-objects/thermostat-row\", function(){ return i(\"customer-site/enterprise/locations/helper-objects/thermostat-row.js\");});\nd(\"customer-site/enterprise/locations/helpers/filters\", function(){ return i(\"customer-site/enterprise/locations/helpers/filters.ts\");});\nd(\"customer-site/enterprise/locations/helpers/thermostats\", function(){ return i(\"customer-site/enterprise/locations/helpers/thermostats.js\");});\nd(\"customer-site/enterprise/settings/helpers/file-upload-functions\", function(){ return i(\"customer-site/enterprise/settings/helpers/file-upload-functions.ts\");});\nd(\"customer-site/enterprise/settings/helpers/filter-functions\", function(){ return i(\"customer-site/enterprise/settings/helpers/filter-functions.js\");});\nd(\"customer-site/enterprise/users/quick-filters-tour/tour\", function(){ return i(\"customer-site/enterprise/users/quick-filters-tour/tour.js\");});\nd(\"customer-site/enums/AIDeterrenceLanguageType\", function(){ return i(\"customer-site/enums/AIDeterrenceLanguageType.ts\");});\nd(\"customer-site/enums/AIDeterrenceMessageType\", function(){ return i(\"customer-site/enums/AIDeterrenceMessageType.ts\");});\nd(\"customer-site/enums/AIDeterrenceVoiceType\", function(){ return i(\"customer-site/enums/AIDeterrenceVoiceType.ts\");});\nd(\"customer-site/enums/AIPerimeterGuardType\", function(){ return i(\"customer-site/enums/AIPerimeterGuardType.ts\");});\nd(\"customer-site/enums/AOIActions\", function(){ return i(\"customer-site/enums/AOIActions.ts\");});\nd(\"customer-site/enums/AcPowerCheckResult\", function(){ return i(\"customer-site/enums/AcPowerCheckResult.ts\");});\nd(\"customer-site/enums/AccessCheckResult\", function(){ return i(\"customer-site/enums/AccessCheckResult.ts\");});\nd(\"customer-site/enums/AccessControlSystemMode\", function(){ return i(\"customer-site/enums/AccessControlSystemMode.ts\");});\nd(\"customer-site/enums/AccessPlanAccessStatus\", function(){ return i(\"customer-site/enums/AccessPlanAccessStatus.ts\");});\nd(\"customer-site/enums/AccessPlanPropertyEdit\", function(){ return i(\"customer-site/enums/AccessPlanPropertyEdit.ts\");});\nd(\"customer-site/enums/AccessPlanType\", function(){ return i(\"customer-site/enums/AccessPlanType.ts\");});\nd(\"customer-site/enums/AccessPointCollectionType\", function(){ return i(\"customer-site/enums/AccessPointCollectionType.ts\");});\nd(\"customer-site/enums/AccessPointUserCodeStatus\", function(){ return i(\"customer-site/enums/AccessPointUserCodeStatus.ts\");});\nd(\"customer-site/enums/AccessPointUserType\", function(){ return i(\"customer-site/enums/AccessPointUserType.ts\");});\nd(\"customer-site/enums/AccessPointWifiFrequency\", function(){ return i(\"customer-site/enums/AccessPointWifiFrequency.ts\");});\nd(\"customer-site/enums/AccessPointWifiGroup\", function(){ return i(\"customer-site/enums/AccessPointWifiGroup.ts\");});\nd(\"customer-site/enums/AccessStatus\", function(){ return i(\"customer-site/enums/AccessStatus.ts\");});\nd(\"customer-site/enums/AccountType\", function(){ return i(\"customer-site/enums/AccountType.ts\");});\nd(\"customer-site/enums/ActionSetType\", function(){ return i(\"customer-site/enums/ActionSetType.ts\");});\nd(\"customer-site/enums/ActionType\", function(){ return i(\"customer-site/enums/ActionType.ts\");});\nd(\"customer-site/enums/ActivityFilterOptionsCategoryEnum\", function(){ return i(\"customer-site/enums/ActivityFilterOptionsCategoryEnum.ts\");});\nd(\"customer-site/enums/AddDeviceCategory\", function(){ return i(\"customer-site/enums/AddDeviceCategory.ts\");});\nd(\"customer-site/enums/AddDeviceResource\", function(){ return i(\"customer-site/enums/AddDeviceResource.ts\");});\nd(\"customer-site/enums/AelWiFiSecurityProtocol\", function(){ return i(\"customer-site/enums/AelWiFiSecurityProtocol.ts\");});\nd(\"customer-site/enums/AlarmsIssuesReportOptions\", function(){ return i(\"customer-site/enums/AlarmsIssuesReportOptions.ts\");});\nd(\"customer-site/enums/ApexCpuArchitectureEnum\", function(){ return i(\"customer-site/enums/ApexCpuArchitectureEnum.ts\");});\nd(\"customer-site/enums/ArmingOption\", function(){ return i(\"customer-site/enums/ArmingOption.ts\");});\nd(\"customer-site/enums/ArmingSetting\", function(){ return i(\"customer-site/enums/ArmingSetting.ts\");});\nd(\"customer-site/enums/ArmingState\", function(){ return i(\"customer-site/enums/ArmingState.ts\");});\nd(\"customer-site/enums/AttributeSearch\", function(){ return i(\"customer-site/enums/AttributeSearch.ts\");});\nd(\"customer-site/enums/AvailableSystemItemsFilteringEnum\", function(){ return i(\"customer-site/enums/AvailableSystemItemsFilteringEnum.ts\");});\nd(\"customer-site/enums/BatteryLevels\", function(){ return i(\"customer-site/enums/BatteryLevels.ts\");});\nd(\"customer-site/enums/Browser\", function(){ return i(\"customer-site/enums/Browser.ts\");});\nd(\"customer-site/enums/BuildVersionInfo\", function(){ return i(\"customer-site/enums/BuildVersionInfo.ts\");});\nd(\"customer-site/enums/CDQLEventCategoryEnums\", function(){ return i(\"customer-site/enums/CDQLEventCategoryEnums.ts\");});\nd(\"customer-site/enums/CDQLSessionDeviceLinkEnums\", function(){ return i(\"customer-site/enums/CDQLSessionDeviceLinkEnums.ts\");});\nd(\"customer-site/enums/CalibrationStatus\", function(){ return i(\"customer-site/enums/CalibrationStatus.ts\");});\nd(\"customer-site/enums/CameraConnectionProtocol\", function(){ return i(\"customer-site/enums/CameraConnectionProtocol.ts\");});\nd(\"customer-site/enums/CameraGroupType\", function(){ return i(\"customer-site/enums/CameraGroupType.ts\");});\nd(\"customer-site/enums/CameraSirenStatus\", function(){ return i(\"customer-site/enums/CameraSirenStatus.ts\");});\nd(\"customer-site/enums/CardReaderState\", function(){ return i(\"customer-site/enums/CardReaderState.ts\");});\nd(\"customer-site/enums/CardType\", function(){ return i(\"customer-site/enums/CardType.ts\");});\nd(\"customer-site/enums/ChimeLevel\", function(){ return i(\"customer-site/enums/ChimeLevel.ts\");});\nd(\"customer-site/enums/ClassificationCategoryType\", function(){ return i(\"customer-site/enums/ClassificationCategoryType.ts\");});\nd(\"customer-site/enums/Classifications\", function(){ return i(\"customer-site/enums/Classifications.ts\");});\nd(\"customer-site/enums/ClipDescriptorType\", function(){ return i(\"customer-site/enums/ClipDescriptorType.ts\");});\nd(\"customer-site/enums/ClipExportType\", function(){ return i(\"customer-site/enums/ClipExportType.ts\");});\nd(\"customer-site/enums/ClipQualityResource\", function(){ return i(\"customer-site/enums/ClipQualityResource.ts\");});\nd(\"customer-site/enums/ClipResolutionResource\", function(){ return i(\"customer-site/enums/ClipResolutionResource.ts\");});\nd(\"customer-site/enums/ColorSource\", function(){ return i(\"customer-site/enums/ColorSource.ts\");});\nd(\"customer-site/enums/CommandState\", function(){ return i(\"customer-site/enums/CommandState.ts\");});\nd(\"customer-site/enums/ConnectedClientType\", function(){ return i(\"customer-site/enums/ConnectedClientType.ts\");});\nd(\"customer-site/enums/ConnectionState\", function(){ return i(\"customer-site/enums/ConnectionState.ts\");});\nd(\"customer-site/enums/ConnectionStatus\", function(){ return i(\"customer-site/enums/ConnectionStatus.ts\");});\nd(\"customer-site/enums/ContactAddressRole\", function(){ return i(\"customer-site/enums/ContactAddressRole.ts\");});\nd(\"customer-site/enums/ContactAttribute\", function(){ return i(\"customer-site/enums/ContactAttribute.ts\");});\nd(\"customer-site/enums/ContactUserType\", function(){ return i(\"customer-site/enums/ContactUserType.ts\");});\nd(\"customer-site/enums/ContentBlockSubType\", function(){ return i(\"customer-site/enums/ContentBlockSubType.ts\");});\nd(\"customer-site/enums/ContentBlockType\", function(){ return i(\"customer-site/enums/ContentBlockType.ts\");});\nd(\"customer-site/enums/ContentType\", function(){ return i(\"customer-site/enums/ContentType.ts\");});\nd(\"customer-site/enums/ControlPointRelayStatus\", function(){ return i(\"customer-site/enums/ControlPointRelayStatus.ts\");});\nd(\"customer-site/enums/ControlPointType\", function(){ return i(\"customer-site/enums/ControlPointType.ts\");});\nd(\"customer-site/enums/Country\", function(){ return i(\"customer-site/enums/Country.ts\");});\nd(\"customer-site/enums/CreditCardType\", function(){ return i(\"customer-site/enums/CreditCardType.ts\");});\nd(\"customer-site/enums/Culture\", function(){ return i(\"customer-site/enums/Culture.ts\");});\nd(\"customer-site/enums/CustomerEventHistoryDeviceFilter\", function(){ return i(\"customer-site/enums/CustomerEventHistoryDeviceFilter.ts\");});\nd(\"customer-site/enums/CustomerEventHistoryEventFilter\", function(){ return i(\"customer-site/enums/CustomerEventHistoryEventFilter.ts\");});\nd(\"customer-site/enums/CustomerKnowledgeBase\", function(){ return i(\"customer-site/enums/CustomerKnowledgeBase.ts\");});\nd(\"customer-site/enums/CustomerNotificationType\", function(){ return i(\"customer-site/enums/CustomerNotificationType.ts\");});\nd(\"customer-site/enums/CustomerPageUrl\", function(){ return i(\"customer-site/enums/CustomerPageUrl.ts\");});\nd(\"customer-site/enums/CustomerRole\", function(){ return i(\"customer-site/enums/CustomerRole.ts\");});\nd(\"customer-site/enums/DefaultView\", function(){ return i(\"customer-site/enums/DefaultView.ts\");});\nd(\"customer-site/enums/DestinationPage\", function(){ return i(\"customer-site/enums/DestinationPage.ts\");});\nd(\"customer-site/enums/DeviceConnectionStatusEnum\", function(){ return i(\"customer-site/enums/DeviceConnectionStatusEnum.ts\");});\nd(\"customer-site/enums/DeviceProperty\", function(){ return i(\"customer-site/enums/DeviceProperty.ts\");});\nd(\"customer-site/enums/DeviceRole\", function(){ return i(\"customer-site/enums/DeviceRole.ts\");});\nd(\"customer-site/enums/DeviceType\", function(){ return i(\"customer-site/enums/DeviceType.ts\");});\nd(\"customer-site/enums/DigitalPtzErrorEnum\", function(){ return i(\"customer-site/enums/DigitalPtzErrorEnum.ts\");});\nd(\"customer-site/enums/DirectoryViewTypeEnum\", function(){ return i(\"customer-site/enums/DirectoryViewTypeEnum.ts\");});\nd(\"customer-site/enums/DiscoverActionType\", function(){ return i(\"customer-site/enums/DiscoverActionType.ts\");});\nd(\"customer-site/enums/DisplayModeFeature\", function(){ return i(\"customer-site/enums/DisplayModeFeature.ts\");});\nd(\"customer-site/enums/DoorbellChimeType\", function(){ return i(\"customer-site/enums/DoorbellChimeType.ts\");});\nd(\"customer-site/enums/DoorbellWedge\", function(){ return i(\"customer-site/enums/DoorbellWedge.ts\");});\nd(\"customer-site/enums/DrawShape\", function(){ return i(\"customer-site/enums/DrawShape.ts\");});\nd(\"customer-site/enums/ElevatorFloorState\", function(){ return i(\"customer-site/enums/ElevatorFloorState.ts\");});\nd(\"customer-site/enums/EmailSendingFormat\", function(){ return i(\"customer-site/enums/EmailSendingFormat.ts\");});\nd(\"customer-site/enums/ErbStatus\", function(){ return i(\"customer-site/enums/ErbStatus.ts\");});\nd(\"customer-site/enums/EventTriggerType\", function(){ return i(\"customer-site/enums/EventTriggerType.ts\");});\nd(\"customer-site/enums/EventType\", function(){ return i(\"customer-site/enums/EventType.ts\");});\nd(\"customer-site/enums/EventTypeMap\", function(){ return i(\"customer-site/enums/EventTypeMap.ts\");});\nd(\"customer-site/enums/ExtendedActivityHistoryRequestStatus\", function(){ return i(\"customer-site/enums/ExtendedActivityHistoryRequestStatus.ts\");});\nd(\"customer-site/enums/FamiliarObjectType\", function(){ return i(\"customer-site/enums/FamiliarObjectType.ts\");});\nd(\"customer-site/enums/FamiliarSubjectSettingsLinkType\", function(){ return i(\"customer-site/enums/FamiliarSubjectSettingsLinkType.ts\");});\nd(\"customer-site/enums/FamiliarTargetReviewType\", function(){ return i(\"customer-site/enums/FamiliarTargetReviewType.ts\");});\nd(\"customer-site/enums/FamiliarTargetStatus\", function(){ return i(\"customer-site/enums/FamiliarTargetStatus.ts\");});\nd(\"customer-site/enums/FeatureCategory\", function(){ return i(\"customer-site/enums/FeatureCategory.ts\");});\nd(\"customer-site/enums/FeaturePermissionCategory\", function(){ return i(\"customer-site/enums/FeaturePermissionCategory.ts\");});\nd(\"customer-site/enums/FieldOfView\", function(){ return i(\"customer-site/enums/FieldOfView.ts\");});\nd(\"customer-site/enums/Filter\", function(){ return i(\"customer-site/enums/Filter.ts\");});\nd(\"customer-site/enums/FloodPirDurationOption\", function(){ return i(\"customer-site/enums/FloodPirDurationOption.ts\");});\nd(\"customer-site/enums/FloodPirRange\", function(){ return i(\"customer-site/enums/FloodPirRange.ts\");});\nd(\"customer-site/enums/ForcedStreamingMethod\", function(){ return i(\"customer-site/enums/ForcedStreamingMethod.ts\");});\nd(\"customer-site/enums/FrequencyBand\", function(){ return i(\"customer-site/enums/FrequencyBand.ts\");});\nd(\"customer-site/enums/GarageDoorStatus\", function(){ return i(\"customer-site/enums/GarageDoorStatus.ts\");});\nd(\"customer-site/enums/GateStatus\", function(){ return i(\"customer-site/enums/GateStatus.ts\");});\nd(\"customer-site/enums/GenericDevicePairingType\", function(){ return i(\"customer-site/enums/GenericDevicePairingType.ts\");});\nd(\"customer-site/enums/GenericInputType\", function(){ return i(\"customer-site/enums/GenericInputType.ts\");});\nd(\"customer-site/enums/HelpTourType\", function(){ return i(\"customer-site/enums/HelpTourType.ts\");});\nd(\"customer-site/enums/IRSwitchSensitivity\", function(){ return i(\"customer-site/enums/IRSwitchSensitivity.ts\");});\nd(\"customer-site/enums/Icon\", function(){ return i(\"customer-site/enums/Icon.ts\");});\nd(\"customer-site/enums/IconMap\", function(){ return i(\"customer-site/enums/IconMap.ts\");});\nd(\"customer-site/enums/ImageQuality\", function(){ return i(\"customer-site/enums/ImageQuality.ts\");});\nd(\"customer-site/enums/ImageSensorDisplayRuleType\", function(){ return i(\"customer-site/enums/ImageSensorDisplayRuleType.ts\");});\nd(\"customer-site/enums/InitialSetupStep\", function(){ return i(\"customer-site/enums/InitialSetupStep.ts\");});\nd(\"customer-site/enums/KeepAliveStatus\", function(){ return i(\"customer-site/enums/KeepAliveStatus.ts\");});\nd(\"customer-site/enums/LightAlertOption\", function(){ return i(\"customer-site/enums/LightAlertOption.ts\");});\nd(\"customer-site/enums/LightColorFormat\", function(){ return i(\"customer-site/enums/LightColorFormat.ts\");});\nd(\"customer-site/enums/LightGroupType\", function(){ return i(\"customer-site/enums/LightGroupType.ts\");});\nd(\"customer-site/enums/LightStatus\", function(){ return i(\"customer-site/enums/LightStatus.ts\");});\nd(\"customer-site/enums/LocationDataType\", function(){ return i(\"customer-site/enums/LocationDataType.ts\");});\nd(\"customer-site/enums/LockStatus\", function(){ return i(\"customer-site/enums/LockStatus.ts\");});\nd(\"customer-site/enums/LoginFeature\", function(){ return i(\"customer-site/enums/LoginFeature.ts\");});\nd(\"customer-site/enums/LoginFeatureAccessLevel\", function(){ return i(\"customer-site/enums/LoginFeatureAccessLevel.ts\");});\nd(\"customer-site/enums/LoginFlag\", function(){ return i(\"customer-site/enums/LoginFlag.ts\");});\nd(\"customer-site/enums/LoginRole\", function(){ return i(\"customer-site/enums/LoginRole.ts\");});\nd(\"customer-site/enums/LoginTemplateType\", function(){ return i(\"customer-site/enums/LoginTemplateType.ts\");});\nd(\"customer-site/enums/LuxTrigger\", function(){ return i(\"customer-site/enums/LuxTrigger.ts\");});\nd(\"customer-site/enums/ManageDevicesCategory\", function(){ return i(\"customer-site/enums/ManageDevicesCategory.ts\");});\nd(\"customer-site/enums/ManageDevicesPropertyFilter\", function(){ return i(\"customer-site/enums/ManageDevicesPropertyFilter.ts\");});\nd(\"customer-site/enums/Managed247AccessRole\", function(){ return i(\"customer-site/enums/Managed247AccessRole.ts\");});\nd(\"customer-site/enums/ManagedDeviceType\", function(){ return i(\"customer-site/enums/ManagedDeviceType.ts\");});\nd(\"customer-site/enums/ManuallyTriggeredLightsDuration\", function(){ return i(\"customer-site/enums/ManuallyTriggeredLightsDuration.ts\");});\nd(\"customer-site/enums/MercuryControllerOperatingMode\", function(){ return i(\"customer-site/enums/MercuryControllerOperatingMode.ts\");});\nd(\"customer-site/enums/MessageType\", function(){ return i(\"customer-site/enums/MessageType.ts\");});\nd(\"customer-site/enums/MobileCredentialInvitationStatus\", function(){ return i(\"customer-site/enums/MobileCredentialInvitationStatus.ts\");});\nd(\"customer-site/enums/MobileDeviceType\", function(){ return i(\"customer-site/enums/MobileDeviceType.ts\");});\nd(\"customer-site/enums/ModifiableOccupancyState\", function(){ return i(\"customer-site/enums/ModifiableOccupancyState.ts\");});\nd(\"customer-site/enums/ModuleInstallStatus\", function(){ return i(\"customer-site/enums/ModuleInstallStatus.ts\");});\nd(\"customer-site/enums/MotionDetectionType\", function(){ return i(\"customer-site/enums/MotionDetectionType.ts\");});\nd(\"customer-site/enums/MotionDetectionVersionEnum\", function(){ return i(\"customer-site/enums/MotionDetectionVersionEnum.ts\");});\nd(\"customer-site/enums/MotionThreshold\", function(){ return i(\"customer-site/enums/MotionThreshold.ts\");});\nd(\"customer-site/enums/MpersDeviceStatus\", function(){ return i(\"customer-site/enums/MpersDeviceStatus.ts\");});\nd(\"customer-site/enums/NativeBridgeFeature\", function(){ return i(\"customer-site/enums/NativeBridgeFeature.ts\");});\nd(\"customer-site/enums/NewUserType\", function(){ return i(\"customer-site/enums/NewUserType.ts\");});\nd(\"customer-site/enums/OnvifCameraAudioCapabilitiesEnum\", function(){ return i(\"customer-site/enums/OnvifCameraAudioCapabilitiesEnum.ts\");});\nd(\"customer-site/enums/OnvifCameraStreamMap\", function(){ return i(\"customer-site/enums/OnvifCameraStreamMap.ts\");});\nd(\"customer-site/enums/OnvifCredentialsType\", function(){ return i(\"customer-site/enums/OnvifCredentialsType.ts\");});\nd(\"customer-site/enums/OnvifSettingError\", function(){ return i(\"customer-site/enums/OnvifSettingError.ts\");});\nd(\"customer-site/enums/Operator\", function(){ return i(\"customer-site/enums/Operator.ts\");});\nd(\"customer-site/enums/OvlRuleType\", function(){ return i(\"customer-site/enums/OvlRuleType.ts\");});\nd(\"customer-site/enums/PanelType\", function(){ return i(\"customer-site/enums/PanelType.ts\");});\nd(\"customer-site/enums/PerimeterGuardAudioOption\", function(){ return i(\"customer-site/enums/PerimeterGuardAudioOption.ts\");});\nd(\"customer-site/enums/PhoneType\", function(){ return i(\"customer-site/enums/PhoneType.ts\");});\nd(\"customer-site/enums/PointCentralUserType\", function(){ return i(\"customer-site/enums/PointCentralUserType.ts\");});\nd(\"customer-site/enums/PowerCheckSourceType\", function(){ return i(\"customer-site/enums/PowerCheckSourceType.ts\");});\nd(\"customer-site/enums/PowerCheckState\", function(){ return i(\"customer-site/enums/PowerCheckState.ts\");});\nd(\"customer-site/enums/PresenceState\", function(){ return i(\"customer-site/enums/PresenceState.ts\");});\nd(\"customer-site/enums/ProgrammingCodeState\", function(){ return i(\"customer-site/enums/ProgrammingCodeState.ts\");});\nd(\"customer-site/enums/ProjectedVideoQuotaStatus\", function(){ return i(\"customer-site/enums/ProjectedVideoQuotaStatus.ts\");});\nd(\"customer-site/enums/PropertyType\", function(){ return i(\"customer-site/enums/PropertyType.ts\");});\nd(\"customer-site/enums/QolsysHostCategory\", function(){ return i(\"customer-site/enums/QolsysHostCategory.ts\");});\nd(\"customer-site/enums/ReadyStatus\", function(){ return i(\"customer-site/enums/ReadyStatus.ts\");});\nd(\"customer-site/enums/RecognizedDeviceType\", function(){ return i(\"customer-site/enums/RecognizedDeviceType.ts\");});\nd(\"customer-site/enums/RecordingException\", function(){ return i(\"customer-site/enums/RecordingException.ts\");});\nd(\"customer-site/enums/RecordingIntervalType\", function(){ return i(\"customer-site/enums/RecordingIntervalType.ts\");});\nd(\"customer-site/enums/RecordingRulePauseReasonType\", function(){ return i(\"customer-site/enums/RecordingRulePauseReasonType.ts\");});\nd(\"customer-site/enums/RelativeDirection\", function(){ return i(\"customer-site/enums/RelativeDirection.ts\");});\nd(\"customer-site/enums/RemoteTemperatureSensorStatus\", function(){ return i(\"customer-site/enums/RemoteTemperatureSensorStatus.ts\");});\nd(\"customer-site/enums/RentalPropertyLengthType\", function(){ return i(\"customer-site/enums/RentalPropertyLengthType.ts\");});\nd(\"customer-site/enums/ReportAttachmentSelection\", function(){ return i(\"customer-site/enums/ReportAttachmentSelection.ts\");});\nd(\"customer-site/enums/ReportTimeframeType\", function(){ return i(\"customer-site/enums/ReportTimeframeType.ts\");});\nd(\"customer-site/enums/ReportValidationIssue\", function(){ return i(\"customer-site/enums/ReportValidationIssue.ts\");});\nd(\"customer-site/enums/Resolution\", function(){ return i(\"customer-site/enums/Resolution.ts\");});\nd(\"customer-site/enums/ResolutionQualityItemType\", function(){ return i(\"customer-site/enums/ResolutionQualityItemType.ts\");});\nd(\"customer-site/enums/RestrictionType\", function(){ return i(\"customer-site/enums/RestrictionType.ts\");});\nd(\"customer-site/enums/RuleArmingStatusEnum\", function(){ return i(\"customer-site/enums/RuleArmingStatusEnum.ts\");});\nd(\"customer-site/enums/RuleCatalogItemType\", function(){ return i(\"customer-site/enums/RuleCatalogItemType.ts\");});\nd(\"customer-site/enums/RuleDisplayType\", function(){ return i(\"customer-site/enums/RuleDisplayType.ts\");});\nd(\"customer-site/enums/RuleFilter\", function(){ return i(\"customer-site/enums/RuleFilter.ts\");});\nd(\"customer-site/enums/SFGDeviceStatus\", function(){ return i(\"customer-site/enums/SFGDeviceStatus.ts\");});\nd(\"customer-site/enums/SavedClipFilterOption\", function(){ return i(\"customer-site/enums/SavedClipFilterOption.ts\");});\nd(\"customer-site/enums/SceneButtonKeyAttributeEnumType\", function(){ return i(\"customer-site/enums/SceneButtonKeyAttributeEnumType.ts\");});\nd(\"customer-site/enums/SceneStatus\", function(){ return i(\"customer-site/enums/SceneStatus.ts\");});\nd(\"customer-site/enums/ScheduleType\", function(){ return i(\"customer-site/enums/ScheduleType.ts\");});\nd(\"customer-site/enums/SdCardRecordingStatus\", function(){ return i(\"customer-site/enums/SdCardRecordingStatus.ts\");});\nd(\"customer-site/enums/SdRecordingQuality\", function(){ return i(\"customer-site/enums/SdRecordingQuality.ts\");});\nd(\"customer-site/enums/SelectionType\", function(){ return i(\"customer-site/enums/SelectionType.ts\");});\nd(\"customer-site/enums/SensorNamingFormat\", function(){ return i(\"customer-site/enums/SensorNamingFormat.ts\");});\nd(\"customer-site/enums/SensorReadingType\", function(){ return i(\"customer-site/enums/SensorReadingType.ts\");});\nd(\"customer-site/enums/SensorStatus\", function(){ return i(\"customer-site/enums/SensorStatus.ts\");});\nd(\"customer-site/enums/ServiceRequestIssueCategory\", function(){ return i(\"customer-site/enums/ServiceRequestIssueCategory.ts\");});\nd(\"customer-site/enums/ServiceRequestIssueCategoryMap\", function(){ return i(\"customer-site/enums/ServiceRequestIssueCategoryMap.ts\");});\nd(\"customer-site/enums/SeverityStatus\", function(){ return i(\"customer-site/enums/SeverityStatus.ts\");});\nd(\"customer-site/enums/ShadeStatus\", function(){ return i(\"customer-site/enums/ShadeStatus.ts\");});\nd(\"customer-site/enums/SignalStrength\", function(){ return i(\"customer-site/enums/SignalStrength.ts\");});\nd(\"customer-site/enums/SmartCoverageDiscountType\", function(){ return i(\"customer-site/enums/SmartCoverageDiscountType.ts\");});\nd(\"customer-site/enums/SmartCoveragePolicyType\", function(){ return i(\"customer-site/enums/SmartCoveragePolicyType.ts\");});\nd(\"customer-site/enums/SmartSchedulesState\", function(){ return i(\"customer-site/enums/SmartSchedulesState.ts\");});\nd(\"customer-site/enums/SmartSchedulesTimeline\", function(){ return i(\"customer-site/enums/SmartSchedulesTimeline.ts\");});\nd(\"customer-site/enums/SmrfImageCountThresholds\", function(){ return i(\"customer-site/enums/SmrfImageCountThresholds.ts\");});\nd(\"customer-site/enums/SmrfMatchingResult\", function(){ return i(\"customer-site/enums/SmrfMatchingResult.ts\");});\nd(\"customer-site/enums/SourceOfCustomer\", function(){ return i(\"customer-site/enums/SourceOfCustomer.ts\");});\nd(\"customer-site/enums/SourceOfCustomerMap\", function(){ return i(\"customer-site/enums/SourceOfCustomerMap.ts\");});\nd(\"customer-site/enums/StreamUsage\", function(){ return i(\"customer-site/enums/StreamUsage.ts\");});\nd(\"customer-site/enums/SumpPumpStatus\", function(){ return i(\"customer-site/enums/SumpPumpStatus.ts\");});\nd(\"customer-site/enums/SvrDiskCheckState\", function(){ return i(\"customer-site/enums/SvrDiskCheckState.ts\");});\nd(\"customer-site/enums/TemperatureDeviceType\", function(){ return i(\"customer-site/enums/TemperatureDeviceType.ts\");});\nd(\"customer-site/enums/TemperatureUnit\", function(){ return i(\"customer-site/enums/TemperatureUnit.ts\");});\nd(\"customer-site/enums/TenantTurnoverStatus\", function(){ return i(\"customer-site/enums/TenantTurnoverStatus.ts\");});\nd(\"customer-site/enums/ThermostatDiagnosticType\", function(){ return i(\"customer-site/enums/ThermostatDiagnosticType.ts\");});\nd(\"customer-site/enums/ThermostatFanMode\", function(){ return i(\"customer-site/enums/ThermostatFanMode.ts\");});\nd(\"customer-site/enums/ThermostatLock\", function(){ return i(\"customer-site/enums/ThermostatLock.ts\");});\nd(\"customer-site/enums/ThermostatProgrammingMode\", function(){ return i(\"customer-site/enums/ThermostatProgrammingMode.ts\");});\nd(\"customer-site/enums/ThermostatSetpointType\", function(){ return i(\"customer-site/enums/ThermostatSetpointType.ts\");});\nd(\"customer-site/enums/ThermostatStatus\", function(){ return i(\"customer-site/enums/ThermostatStatus.ts\");});\nd(\"customer-site/enums/ThermostatStatusMap\", function(){ return i(\"customer-site/enums/ThermostatStatusMap.ts\");});\nd(\"customer-site/enums/ThirdPartyEventType\", function(){ return i(\"customer-site/enums/ThirdPartyEventType.ts\");});\nd(\"customer-site/enums/TrackedEvent\", function(){ return i(\"customer-site/enums/TrackedEvent.ts\");});\nd(\"customer-site/enums/TriggerType\", function(){ return i(\"customer-site/enums/TriggerType.ts\");});\nd(\"customer-site/enums/TripwireDirection\", function(){ return i(\"customer-site/enums/TripwireDirection.ts\");});\nd(\"customer-site/enums/TroubleConditionDetailsReportCategories\", function(){ return i(\"customer-site/enums/TroubleConditionDetailsReportCategories.ts\");});\nd(\"customer-site/enums/TroubleConditionDetailsReportDataColumns\", function(){ return i(\"customer-site/enums/TroubleConditionDetailsReportDataColumns.ts\");});\nd(\"customer-site/enums/TroubleConditionDetailsReportFrequency\", function(){ return i(\"customer-site/enums/TroubleConditionDetailsReportFrequency.ts\");});\nd(\"customer-site/enums/TroubleConditionMutedOption\", function(){ return i(\"customer-site/enums/TroubleConditionMutedOption.ts\");});\nd(\"customer-site/enums/TroubleConditionReportOptions\", function(){ return i(\"customer-site/enums/TroubleConditionReportOptions.ts\");});\nd(\"customer-site/enums/TroubleConditionSeverity\", function(){ return i(\"customer-site/enums/TroubleConditionSeverity.ts\");});\nd(\"customer-site/enums/TroubleConditionSubType\", function(){ return i(\"customer-site/enums/TroubleConditionSubType.ts\");});\nd(\"customer-site/enums/TroubleConditionType\", function(){ return i(\"customer-site/enums/TroubleConditionType.ts\");});\nd(\"customer-site/enums/TroubleConditionTypeEnum\", function(){ return i(\"customer-site/enums/TroubleConditionTypeEnum.ts\");});\nd(\"customer-site/enums/TwoFactorAuthenticationType\", function(){ return i(\"customer-site/enums/TwoFactorAuthenticationType.ts\");});\nd(\"customer-site/enums/UpsellCampaignHardware\", function(){ return i(\"customer-site/enums/UpsellCampaignHardware.ts\");});\nd(\"customer-site/enums/UserAccess\", function(){ return i(\"customer-site/enums/UserAccess.ts\");});\nd(\"customer-site/enums/UserExperienceEventSubType\", function(){ return i(\"customer-site/enums/UserExperienceEventSubType.ts\");});\nd(\"customer-site/enums/UserExperienceEventType\", function(){ return i(\"customer-site/enums/UserExperienceEventType.ts\");});\nd(\"customer-site/enums/UserSummaryReportOptions\", function(){ return i(\"customer-site/enums/UserSummaryReportOptions.ts\");});\nd(\"customer-site/enums/UserTypeAccessLevel\", function(){ return i(\"customer-site/enums/UserTypeAccessLevel.ts\");});\nd(\"customer-site/enums/UsersFilterAccessPeriod\", function(){ return i(\"customer-site/enums/UsersFilterAccessPeriod.ts\");});\nd(\"customer-site/enums/UsersFilterContactInformation\", function(){ return i(\"customer-site/enums/UsersFilterContactInformation.ts\");});\nd(\"customer-site/enums/UsersFilterCredential\", function(){ return i(\"customer-site/enums/UsersFilterCredential.ts\");});\nd(\"customer-site/enums/UsersFilterUserStatus\", function(){ return i(\"customer-site/enums/UsersFilterUserStatus.ts\");});\nd(\"customer-site/enums/VideoClipFormat\", function(){ return i(\"customer-site/enums/VideoClipFormat.ts\");});\nd(\"customer-site/enums/VideoDownloadProgress\", function(){ return i(\"customer-site/enums/VideoDownloadProgress.ts\");});\nd(\"customer-site/enums/VideoHealthReportExtraData\", function(){ return i(\"customer-site/enums/VideoHealthReportExtraData.ts\");});\nd(\"customer-site/enums/VideoNotificationFormat\", function(){ return i(\"customer-site/enums/VideoNotificationFormat.ts\");});\nd(\"customer-site/enums/VideoPlayerStateEnum\", function(){ return i(\"customer-site/enums/VideoPlayerStateEnum.ts\");});\nd(\"customer-site/enums/VideoQualityEnum\", function(){ return i(\"customer-site/enums/VideoQualityEnum.ts\");});\nd(\"customer-site/enums/VideoRuleToggledBy\", function(){ return i(\"customer-site/enums/VideoRuleToggledBy.ts\");});\nd(\"customer-site/enums/VideoSettingsFeatureSupport\", function(){ return i(\"customer-site/enums/VideoSettingsFeatureSupport.ts\");});\nd(\"customer-site/enums/VideoSourceError\", function(){ return i(\"customer-site/enums/VideoSourceError.ts\");});\nd(\"customer-site/enums/VoiceAccessLevel\", function(){ return i(\"customer-site/enums/VoiceAccessLevel.ts\");});\nd(\"customer-site/enums/VolumeUnits\", function(){ return i(\"customer-site/enums/VolumeUnits.ts\");});\nd(\"customer-site/enums/W115CChimeSounds\", function(){ return i(\"customer-site/enums/W115CChimeSounds.ts\");});\nd(\"customer-site/enums/WaterMeterStatus\", function(){ return i(\"customer-site/enums/WaterMeterStatus.ts\");});\nd(\"customer-site/enums/WaterMeterTemplateType\", function(){ return i(\"customer-site/enums/WaterMeterTemplateType.ts\");});\nd(\"customer-site/enums/WaterValveStatus\", function(){ return i(\"customer-site/enums/WaterValveStatus.ts\");});\nd(\"customer-site/enums/WebDeviceType\", function(){ return i(\"customer-site/enums/WebDeviceType.ts\");});\nd(\"customer-site/enums/WebReportType\", function(){ return i(\"customer-site/enums/WebReportType.ts\");});\nd(\"customer-site/enums/WebSocketCloseStatus\", function(){ return i(\"customer-site/enums/WebSocketCloseStatus.ts\");});\nd(\"customer-site/enums/WebStreamType\", function(){ return i(\"customer-site/enums/WebStreamType.ts\");});\nd(\"customer-site/enums/WebStreamingPlayer\", function(){ return i(\"customer-site/enums/WebStreamingPlayer.ts\");});\nd(\"customer-site/enums/WebrtcPreloadingSupport\", function(){ return i(\"customer-site/enums/WebrtcPreloadingSupport.ts\");});\nd(\"customer-site/enums/WebrtcStreamConnectionResult\", function(){ return i(\"customer-site/enums/WebrtcStreamConnectionResult.ts\");});\nd(\"customer-site/enums/WiFiEncryptionAlgorithm\", function(){ return i(\"customer-site/enums/WiFiEncryptionAlgorithm.ts\");});\nd(\"customer-site/enums/WiFiEncryptionType\", function(){ return i(\"customer-site/enums/WiFiEncryptionType.ts\");});\nd(\"customer-site/enums/WifiClientGroup\", function(){ return i(\"customer-site/enums/WifiClientGroup.ts\");});\nd(\"customer-site/enums/WizardUrl\", function(){ return i(\"customer-site/enums/WizardUrl.ts\");});\nd(\"customer-site/enums/legacyScheduleConversionType\", function(){ return i(\"customer-site/enums/legacyScheduleConversionType.ts\");});\nd(\"customer-site/formats\", function(){ return i(\"customer-site/formats.js\");});\nd(\"customer-site/home/base-device-details-controller\", function(){ return i(\"customer-site/home/base-device-details-controller.ts\");});\nd(\"customer-site/home/base-home-to-automation-route\", function(){ return i(\"customer-site/home/base-home-to-automation-route.ts\");});\nd(\"customer-site/home/base-reports-route\", function(){ return i(\"customer-site/home/base-reports-route.ts\");});\nd(\"customer-site/home/edit-device-route\", function(){ return i(\"customer-site/home/edit-device-route.ts\");});\nd(\"customer-site/initializers/setup-pikaday\", function(){ return i(\"customer-site/initializers/setup-pikaday.js\");});\nd(\"customer-site/initializers/setup-route-view\", function(){ return i(\"customer-site/initializers/setup-route-view.js\");});\nd(\"customer-site/instance-initializers/env-settings\", function(){ return i(\"customer-site/instance-initializers/env-settings.js\");});\nd(\"customer-site/models/access-control/access-control-access-group\", function(){ return i(\"customer-site/models/access-control/access-control-access-group.ts\");});\nd(\"customer-site/models/access-control/access-control-access-plan\", function(){ return i(\"customer-site/models/access-control/access-control-access-plan.ts\");});\nd(\"customer-site/models/access-control/access-control-access-point\", function(){ return i(\"customer-site/models/access-control/access-control-access-point.ts\");});\nd(\"customer-site/models/access-control/access-control-common-plan-user-type\", function(){ return i(\"customer-site/models/access-control/access-control-common-plan-user-type.ts\");});\nd(\"customer-site/models/access-control/access-control-elevator\", function(){ return i(\"customer-site/models/access-control/access-control-elevator.ts\");});\nd(\"customer-site/models/access-control/access-control-holiday\", function(){ return i(\"customer-site/models/access-control/access-control-holiday.ts\");});\nd(\"customer-site/models/access-control/access-control-permissions-collection\", function(){ return i(\"customer-site/models/access-control/access-control-permissions-collection.ts\");});\nd(\"customer-site/models/access-control/access-control-timetable\", function(){ return i(\"customer-site/models/access-control/access-control-timetable.ts\");});\nd(\"customer-site/models/access-control/access-control-user-type\", function(){ return i(\"customer-site/models/access-control/access-control-user-type.ts\");});\nd(\"customer-site/models/access-control/access-control-user\", function(){ return i(\"customer-site/models/access-control/access-control-user.ts\");});\nd(\"customer-site/models/access-control/access-plan-limit-issue\", function(){ return i(\"customer-site/models/access-control/access-plan-limit-issue.ts\");});\nd(\"customer-site/models/access-control/access-plan-pending-change-collection\", function(){ return i(\"customer-site/models/access-control/access-plan-pending-change-collection.ts\");});\nd(\"customer-site/models/access-control/access-plan-pending-change\", function(){ return i(\"customer-site/models/access-control/access-plan-pending-change.ts\");});\nd(\"customer-site/models/access-control/base-access-control-generic-user-type\", function(){ return i(\"customer-site/models/access-control/base-access-control-generic-user-type.ts\");});\nd(\"customer-site/models/access-control/credentials/access-card-credential\", function(){ return i(\"customer-site/models/access-control/credentials/access-card-credential.ts\");});\nd(\"customer-site/models/access-control/credentials/access-control-credential-conflict\", function(){ return i(\"customer-site/models/access-control/credentials/access-control-credential-conflict.ts\");});\nd(\"customer-site/models/access-control/credentials/base-credential\", function(){ return i(\"customer-site/models/access-control/credentials/base-credential.ts\");});\nd(\"customer-site/models/access-control/credentials/pin-code-credential\", function(){ return i(\"customer-site/models/access-control/credentials/pin-code-credential.ts\");});\nd(\"customer-site/models/access-control/lock-user\", function(){ return i(\"customer-site/models/access-control/lock-user.ts\");});\nd(\"customer-site/models/active-directory-user-management/active-directory-group\", function(){ return i(\"customer-site/models/active-directory-user-management/active-directory-group.ts\");});\nd(\"customer-site/models/active-directory-user-management/active-directory-user\", function(){ return i(\"customer-site/models/active-directory-user-management/active-directory-user.ts\");});\nd(\"customer-site/models/activity/activity-day\", function(){ return i(\"customer-site/models/activity/activity-day.ts\");});\nd(\"customer-site/models/activity/activity-filter-catalog\", function(){ return i(\"customer-site/models/activity/activity-filter-catalog.ts\");});\nd(\"customer-site/models/activity/activity-filter-category\", function(){ return i(\"customer-site/models/activity/activity-filter-category.ts\");});\nd(\"customer-site/models/activity/activity-filter-option\", function(){ return i(\"customer-site/models/activity/activity-filter-option.ts\");});\nd(\"customer-site/models/activity/activity-filter-subsection\", function(){ return i(\"customer-site/models/activity/activity-filter-subsection.ts\");});\nd(\"customer-site/models/activity/activity-permission\", function(){ return i(\"customer-site/models/activity/activity-permission.ts\");});\nd(\"customer-site/models/activity/alarm-recap\", function(){ return i(\"customer-site/models/activity/alarm-recap.ts\");});\nd(\"customer-site/models/activity/base-activity-search\", function(){ return i(\"customer-site/models/activity/base-activity-search.ts\");});\nd(\"customer-site/models/activity/daily-summary/event\", function(){ return i(\"customer-site/models/activity/daily-summary/event.ts\");});\nd(\"customer-site/models/activity/daily-summary/playlist\", function(){ return i(\"customer-site/models/activity/daily-summary/playlist.ts\");});\nd(\"customer-site/models/activity/energy-goal\", function(){ return i(\"customer-site/models/activity/energy-goal.ts\");});\nd(\"customer-site/models/activity/extended-activity-history/request\", function(){ return i(\"customer-site/models/activity/extended-activity-history/request.ts\");});\nd(\"customer-site/models/activity/heat-map-metric\", function(){ return i(\"customer-site/models/activity/heat-map-metric.ts\");});\nd(\"customer-site/models/activity/history-device-id-filter\", function(){ return i(\"customer-site/models/activity/history-device-id-filter.ts\");});\nd(\"customer-site/models/activity/history-device-type-filter\", function(){ return i(\"customer-site/models/activity/history-device-type-filter.ts\");});\nd(\"customer-site/models/activity/history-event-filter\", function(){ return i(\"customer-site/models/activity/history-event-filter.ts\");});\nd(\"customer-site/models/activity/history-event\", function(){ return i(\"customer-site/models/activity/history-event.ts\");});\nd(\"customer-site/models/activity/history-location-filter\", function(){ return i(\"customer-site/models/activity/history-location-filter.ts\");});\nd(\"customer-site/models/activity/history-sub-location-filter\", function(){ return i(\"customer-site/models/activity/history-sub-location-filter.ts\");});\nd(\"customer-site/models/activity/history-user-filter\", function(){ return i(\"customer-site/models/activity/history-user-filter.ts\");});\nd(\"customer-site/models/activity/history-user-type-filter\", function(){ return i(\"customer-site/models/activity/history-user-type-filter.ts\");});\nd(\"customer-site/models/activity/meter-usage-generation\", function(){ return i(\"customer-site/models/activity/meter-usage-generation.ts\");});\nd(\"customer-site/models/activity/quick-filter\", function(){ return i(\"customer-site/models/activity/quick-filter.ts\");});\nd(\"customer-site/models/activity/record\", function(){ return i(\"customer-site/models/activity/record.ts\");});\nd(\"customer-site/models/app-store\", function(){ return i(\"customer-site/models/app-store.ts\");});\nd(\"customer-site/models/automation/base-automation-item\", function(){ return i(\"customer-site/models/automation/base-automation-item.ts\");});\nd(\"customer-site/models/automation/boiler-control-system\", function(){ return i(\"customer-site/models/automation/boiler-control-system.ts\");});\nd(\"customer-site/models/automation/peak-protect-tariff\", function(){ return i(\"customer-site/models/automation/peak-protect-tariff.ts\");});\nd(\"customer-site/models/automation/peak-protect-utility\", function(){ return i(\"customer-site/models/automation/peak-protect-utility.ts\");});\nd(\"customer-site/models/automation/peak-protect\", function(){ return i(\"customer-site/models/automation/peak-protect.ts\");});\nd(\"customer-site/models/automation/permission\", function(){ return i(\"customer-site/models/automation/permission.ts\");});\nd(\"customer-site/models/automation/presence-state/current-presence-state\", function(){ return i(\"customer-site/models/automation/presence-state/current-presence-state.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-display\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-display.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-dropdown-item\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-dropdown-item.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-explainer-display\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-explainer-display.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-sensor-trigger-option\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-sensor-trigger-option.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-settings-display\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-settings-display.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-trigger-device-suboption\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-trigger-device-suboption.ts\");});\nd(\"customer-site/models/automation/presence-state/presence-state-trigger-option\", function(){ return i(\"customer-site/models/automation/presence-state/presence-state-trigger-option.ts\");});\nd(\"customer-site/models/automation/recording-status\", function(){ return i(\"customer-site/models/automation/recording-status.ts\");});\nd(\"customer-site/models/automation/rules-builder/action-type\", function(){ return i(\"customer-site/models/automation/rules-builder/action-type.ts\");});\nd(\"customer-site/models/automation/rules-builder/base-rule-creator\", function(){ return i(\"customer-site/models/automation/rules-builder/base-rule-creator.ts\");});\nd(\"customer-site/models/automation/rules-builder/base-rule-feature-type\", function(){ return i(\"customer-site/models/automation/rules-builder/base-rule-feature-type.ts\");});\nd(\"customer-site/models/automation/rules-builder/device\", function(){ return i(\"customer-site/models/automation/rules-builder/device.ts\");});\nd(\"customer-site/models/automation/rules-builder/event\", function(){ return i(\"customer-site/models/automation/rules-builder/event.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-action-chime\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-action-chime.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-action-light\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-action-light.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-action-scene\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-action-scene.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-action\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-action.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-data-access-control\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-data-access-control.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-data-geo-location\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-data-geo-location.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-data/extra-data-schedule\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-data/extra-data-schedule.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-device-option-detail\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-device-option-detail.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-device-option\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-device-option.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-rule-option-item\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-rule-option-item.ts\");});\nd(\"customer-site/models/automation/rules-builder/extra-rule-option\", function(){ return i(\"customer-site/models/automation/rules-builder/extra-rule-option.ts\");});\nd(\"customer-site/models/automation/rules-builder/message-group\", function(){ return i(\"customer-site/models/automation/rules-builder/message-group.ts\");});\nd(\"customer-site/models/automation/rules-builder/message\", function(){ return i(\"customer-site/models/automation/rules-builder/message.ts\");});\nd(\"customer-site/models/automation/rules-builder/notification/contact-address\", function(){ return i(\"customer-site/models/automation/rules-builder/notification/contact-address.ts\");});\nd(\"customer-site/models/automation/rules-builder/notification/email\", function(){ return i(\"customer-site/models/automation/rules-builder/notification/email.ts\");});\nd(\"customer-site/models/automation/rules-builder/notification/group-option\", function(){ return i(\"customer-site/models/automation/rules-builder/notification/group-option.ts\");});\nd(\"customer-site/models/automation/rules-builder/notification/group\", function(){ return i(\"customer-site/models/automation/rules-builder/notification/group.ts\");});\nd(\"customer-site/models/automation/rules-builder/notification/mobile\", function(){ return i(\"customer-site/models/automation/rules-builder/notification/mobile.ts\");});\nd(\"customer-site/models/automation/rules-builder/notification/new-contact\", function(){ return i(\"customer-site/models/automation/rules-builder/notification/new-contact.ts\");});\nd(\"customer-site/models/automation/rules-builder/restrictions/base-restriction\", function(){ return i(\"customer-site/models/automation/rules-builder/restrictions/base-restriction.ts\");});\nd(\"customer-site/models/automation/rules-builder/restrictions/schedule-restriction\", function(){ return i(\"customer-site/models/automation/rules-builder/restrictions/schedule-restriction.ts\");});\nd(\"customer-site/models/automation/rules-builder/rule\", function(){ return i(\"customer-site/models/automation/rules-builder/rule.ts\");});\nd(\"customer-site/models/automation/rules-builder/trigger-type\", function(){ return i(\"customer-site/models/automation/rules-builder/trigger-type.ts\");});\nd(\"customer-site/models/automation/rules/rule-suggestion\", function(){ return i(\"customer-site/models/automation/rules/rule-suggestion.ts\");});\nd(\"customer-site/models/automation/rules/rule\", function(){ return i(\"customer-site/models/automation/rules/rule.ts\");});\nd(\"customer-site/models/automation/scene-rule-display\", function(){ return i(\"customer-site/models/automation/scene-rule-display.ts\");});\nd(\"customer-site/models/automation/scene\", function(){ return i(\"customer-site/models/automation/scene.ts\");});\nd(\"customer-site/models/automation/schedule-builder/additional-option-item\", function(){ return i(\"customer-site/models/automation/schedule-builder/additional-option-item.ts\");});\nd(\"customer-site/models/automation/schedule-builder/followup-option\", function(){ return i(\"customer-site/models/automation/schedule-builder/followup-option.ts\");});\nd(\"customer-site/models/automation/schedule-builder/occurrence-type\", function(){ return i(\"customer-site/models/automation/schedule-builder/occurrence-type.ts\");});\nd(\"customer-site/models/automation/schedule-builder/schedule-builder\", function(){ return i(\"customer-site/models/automation/schedule-builder/schedule-builder.ts\");});\nd(\"customer-site/models/automation/schedule-builder/schedule-event\", function(){ return i(\"customer-site/models/automation/schedule-builder/schedule-event.ts\");});\nd(\"customer-site/models/automation/schedule-builder/time-type\", function(){ return i(\"customer-site/models/automation/schedule-builder/time-type.ts\");});\nd(\"customer-site/models/automation/schedules/detailed-schedule\", function(){ return i(\"customer-site/models/automation/schedules/detailed-schedule.ts\");});\nd(\"customer-site/models/automation/schedules/schedule\", function(){ return i(\"customer-site/models/automation/schedules/schedule.ts\");});\nd(\"customer-site/models/automation/schedules/wifi-detailed-schedule\", function(){ return i(\"customer-site/models/automation/schedules/wifi-detailed-schedule.ts\");});\nd(\"customer-site/models/builder-trial-account-expiration-warning/content\", function(){ return i(\"customer-site/models/builder-trial-account-expiration-warning/content.ts\");});\nd(\"customer-site/models/commercial/schedules/arming-schedule\", function(){ return i(\"customer-site/models/commercial/schedules/arming-schedule.ts\");});\nd(\"customer-site/models/commercial/schedules/days-of-week-selection\", function(){ return i(\"customer-site/models/commercial/schedules/days-of-week-selection.ts\");});\nd(\"customer-site/models/commercial/single-system-filter-count\", function(){ return i(\"customer-site/models/commercial/single-system-filter-count.ts\");});\nd(\"customer-site/models/commercial/single-system-filter\", function(){ return i(\"customer-site/models/commercial/single-system-filter.ts\");});\nd(\"customer-site/models/connected-car/alarm\", function(){ return i(\"customer-site/models/connected-car/alarm.ts\");});\nd(\"customer-site/models/dashboards/comfort-diagnostic\", function(){ return i(\"customer-site/models/dashboards/comfort-diagnostic.ts\");});\nd(\"customer-site/models/dashboards/cycle-diagnostic\", function(){ return i(\"customer-site/models/dashboards/cycle-diagnostic.ts\");});\nd(\"customer-site/models/dashboards/efficiency-diagnostic\", function(){ return i(\"customer-site/models/dashboards/efficiency-diagnostic.ts\");});\nd(\"customer-site/models/dashboards/runtime-diagnostic\", function(){ return i(\"customer-site/models/dashboards/runtime-diagnostic.ts\");});\nd(\"customer-site/models/dashboards/thermostat-diagnostic\", function(){ return i(\"customer-site/models/dashboards/thermostat-diagnostic.ts\");});\nd(\"customer-site/models/dealers/dealer\", function(){ return i(\"customer-site/models/dealers/dealer.ts\");});\nd(\"customer-site/models/devices/access-control-access-point-device\", function(){ return i(\"customer-site/models/devices/access-control-access-point-device.ts\");});\nd(\"customer-site/models/devices/access-control-elevator-device\", function(){ return i(\"customer-site/models/devices/access-control-elevator-device.ts\");});\nd(\"customer-site/models/devices/audio-device\", function(){ return i(\"customer-site/models/devices/audio-device.ts\");});\nd(\"customer-site/models/devices/base-device\", function(){ return i(\"customer-site/models/devices/base-device.ts\");});\nd(\"customer-site/models/devices/base-light\", function(){ return i(\"customer-site/models/devices/base-light.ts\");});\nd(\"customer-site/models/devices/base-managed-device\", function(){ return i(\"customer-site/models/devices/base-managed-device.ts\");});\nd(\"customer-site/models/devices/bluetooth-arming-device\", function(){ return i(\"customer-site/models/devices/bluetooth-arming-device.ts\");});\nd(\"customer-site/models/devices/camera-light\", function(){ return i(\"customer-site/models/devices/camera-light.ts\");});\nd(\"customer-site/models/devices/car-monitor\", function(){ return i(\"customer-site/models/devices/car-monitor.ts\");});\nd(\"customer-site/models/devices/chime\", function(){ return i(\"customer-site/models/devices/chime.ts\");});\nd(\"customer-site/models/devices/commercial-temperature-sensor\", function(){ return i(\"customer-site/models/devices/commercial-temperature-sensor.ts\");});\nd(\"customer-site/models/devices/device-resource-info\", function(){ return i(\"customer-site/models/devices/device-resource-info.ts\");});\nd(\"customer-site/models/devices/elevator-floor-device\", function(){ return i(\"customer-site/models/devices/elevator-floor-device.ts\");});\nd(\"customer-site/models/devices/energy-meter\", function(){ return i(\"customer-site/models/devices/energy-meter.ts\");});\nd(\"customer-site/models/devices/garage-door\", function(){ return i(\"customer-site/models/devices/garage-door.ts\");});\nd(\"customer-site/models/devices/gate\", function(){ return i(\"customer-site/models/devices/gate.ts\");});\nd(\"customer-site/models/devices/generic-zwave-device\", function(){ return i(\"customer-site/models/devices/generic-zwave-device.ts\");});\nd(\"customer-site/models/devices/gun-shot-sensor\", function(){ return i(\"customer-site/models/devices/gun-shot-sensor.ts\");});\nd(\"customer-site/models/devices/iq-router\", function(){ return i(\"customer-site/models/devices/iq-router.ts\");});\nd(\"customer-site/models/devices/light-group\", function(){ return i(\"customer-site/models/devices/light-group.ts\");});\nd(\"customer-site/models/devices/light\", function(){ return i(\"customer-site/models/devices/light.ts\");});\nd(\"customer-site/models/devices/lock\", function(){ return i(\"customer-site/models/devices/lock.ts\");});\nd(\"customer-site/models/devices/mobile-device\", function(){ return i(\"customer-site/models/devices/mobile-device.ts\");});\nd(\"customer-site/models/devices/motion-camera\", function(){ return i(\"customer-site/models/devices/motion-camera.ts\");});\nd(\"customer-site/models/devices/mpers-device\", function(){ return i(\"customer-site/models/devices/mpers-device.ts\");});\nd(\"customer-site/models/devices/noise-sensor\", function(){ return i(\"customer-site/models/devices/noise-sensor.ts\");});\nd(\"customer-site/models/devices/partition\", function(){ return i(\"customer-site/models/devices/partition.ts\");});\nd(\"customer-site/models/devices/permissions/smart-chime-permission\", function(){ return i(\"customer-site/models/devices/permissions/smart-chime-permission.ts\");});\nd(\"customer-site/models/devices/remote-temperature-sensor\", function(){ return i(\"customer-site/models/devices/remote-temperature-sensor.ts\");});\nd(\"customer-site/models/devices/remote\", function(){ return i(\"customer-site/models/devices/remote.ts\");});\nd(\"customer-site/models/devices/security-fog-generator\", function(){ return i(\"customer-site/models/devices/security-fog-generator.ts\");});\nd(\"customer-site/models/devices/sensor-threshold\", function(){ return i(\"customer-site/models/devices/sensor-threshold.ts\");});\nd(\"customer-site/models/devices/sensor\", function(){ return i(\"customer-site/models/devices/sensor.ts\");});\nd(\"customer-site/models/devices/shade\", function(){ return i(\"customer-site/models/devices/shade.ts\");});\nd(\"customer-site/models/devices/siren\", function(){ return i(\"customer-site/models/devices/siren.ts\");});\nd(\"customer-site/models/devices/smart-chime-device\", function(){ return i(\"customer-site/models/devices/smart-chime-device.ts\");});\nd(\"customer-site/models/devices/smart-gateway\", function(){ return i(\"customer-site/models/devices/smart-gateway.ts\");});\nd(\"customer-site/models/devices/state-info\", function(){ return i(\"customer-site/models/devices/state-info.ts\");});\nd(\"customer-site/models/devices/sump-pump\", function(){ return i(\"customer-site/models/devices/sump-pump.ts\");});\nd(\"customer-site/models/devices/switch\", function(){ return i(\"customer-site/models/devices/switch.ts\");});\nd(\"customer-site/models/devices/temperature-device\", function(){ return i(\"customer-site/models/devices/temperature-device.ts\");});\nd(\"customer-site/models/devices/thermostat-rule-suggestions-info\", function(){ return i(\"customer-site/models/devices/thermostat-rule-suggestions-info.ts\");});\nd(\"customer-site/models/devices/thermostat\", function(){ return i(\"customer-site/models/devices/thermostat.ts\");});\nd(\"customer-site/models/devices/valve-switch\", function(){ return i(\"customer-site/models/devices/valve-switch.ts\");});\nd(\"customer-site/models/devices/video-device\", function(){ return i(\"customer-site/models/devices/video-device.ts\");});\nd(\"customer-site/models/devices/voice-assistance-device\", function(){ return i(\"customer-site/models/devices/voice-assistance-device.ts\");});\nd(\"customer-site/models/devices/water-meter\", function(){ return i(\"customer-site/models/devices/water-meter.ts\");});\nd(\"customer-site/models/devices/water-sensor\", function(){ return i(\"customer-site/models/devices/water-sensor.ts\");});\nd(\"customer-site/models/devices/water-valve\", function(){ return i(\"customer-site/models/devices/water-valve.ts\");});\nd(\"customer-site/models/devices/x10light\", function(){ return i(\"customer-site/models/devices/x10light.ts\");});\nd(\"customer-site/models/discover/discover-article-group-item\", function(){ return i(\"customer-site/models/discover/discover-article-group-item.ts\");});\nd(\"customer-site/models/discover/discover-article-item\", function(){ return i(\"customer-site/models/discover/discover-article-item.ts\");});\nd(\"customer-site/models/discover/discover-content-action\", function(){ return i(\"customer-site/models/discover/discover-content-action.ts\");});\nd(\"customer-site/models/discover/discover-content-block\", function(){ return i(\"customer-site/models/discover/discover-content-block.ts\");});\nd(\"customer-site/models/discover/get-discover-article-content-result\", function(){ return i(\"customer-site/models/discover/get-discover-article-content-result.ts\");});\nd(\"customer-site/models/discover/get-discover-dashboard-result\", function(){ return i(\"customer-site/models/discover/get-discover-dashboard-result.ts\");});\nd(\"customer-site/models/enterprise/locations/enterprise-trouble-issues-info\", function(){ return i(\"customer-site/models/enterprise/locations/enterprise-trouble-issues-info.ts\");});\nd(\"customer-site/models/enterprise/locations/filter-count\", function(){ return i(\"customer-site/models/enterprise/locations/filter-count.ts\");});\nd(\"customer-site/models/enterprise/locations/filter\", function(){ return i(\"customer-site/models/enterprise/locations/filter.ts\");});\nd(\"customer-site/models/enterprise/locations/location-user-info\", function(){ return i(\"customer-site/models/enterprise/locations/location-user-info.ts\");});\nd(\"customer-site/models/enterprise/locations/location\", function(){ return i(\"customer-site/models/enterprise/locations/location.ts\");});\nd(\"customer-site/models/enterprise/locations/occupancy-state\", function(){ return i(\"customer-site/models/enterprise/locations/occupancy-state.ts\");});\nd(\"customer-site/models/enterprise/locations/sub-filter\", function(){ return i(\"customer-site/models/enterprise/locations/sub-filter.ts\");});\nd(\"customer-site/models/enterprise/locations/summary-page-device-info\", function(){ return i(\"customer-site/models/enterprise/locations/summary-page-device-info.ts\");});\nd(\"customer-site/models/enterprise/locations/tenant\", function(){ return i(\"customer-site/models/enterprise/locations/tenant.ts\");});\nd(\"customer-site/models/enterprise/locations/unattended-showing-setting\", function(){ return i(\"customer-site/models/enterprise/locations/unattended-showing-setting.ts\");});\nd(\"customer-site/models/enterprise/settings/auto-relock\", function(){ return i(\"customer-site/models/enterprise/settings/auto-relock.ts\");});\nd(\"customer-site/models/enterprise/settings/automatic-panel-arming\", function(){ return i(\"customer-site/models/enterprise/settings/automatic-panel-arming.ts\");});\nd(\"customer-site/models/enterprise/settings/automatically-enable-background-capture\", function(){ return i(\"customer-site/models/enterprise/settings/automatically-enable-background-capture.ts\");});\nd(\"customer-site/models/enterprise/settings/backup-code\", function(){ return i(\"customer-site/models/enterprise/settings/backup-code.ts\");});\nd(\"customer-site/models/enterprise/settings/base-customer-logo\", function(){ return i(\"customer-site/models/enterprise/settings/base-customer-logo.ts\");});\nd(\"customer-site/models/enterprise/settings/base-support-phone\", function(){ return i(\"customer-site/models/enterprise/settings/base-support-phone.ts\");});\nd(\"customer-site/models/enterprise/settings/business-hour-template\", function(){ return i(\"customer-site/models/enterprise/settings/business-hour-template.ts\");});\nd(\"customer-site/models/enterprise/settings/company-logo\", function(){ return i(\"customer-site/models/enterprise/settings/company-logo.ts\");});\nd(\"customer-site/models/enterprise/settings/company-name\", function(){ return i(\"customer-site/models/enterprise/settings/company-name.ts\");});\nd(\"customer-site/models/enterprise/settings/customer-relationship-management-integration\", function(){ return i(\"customer-site/models/enterprise/settings/customer-relationship-management-integration.ts\");});\nd(\"customer-site/models/enterprise/settings/customize-welcome-email\", function(){ return i(\"customer-site/models/enterprise/settings/customize-welcome-email.ts\");});\nd(\"customer-site/models/enterprise/settings/delete-expired-user\", function(){ return i(\"customer-site/models/enterprise/settings/delete-expired-user.ts\");});\nd(\"customer-site/models/enterprise/settings/delete-inactive-user\", function(){ return i(\"customer-site/models/enterprise/settings/delete-inactive-user.ts\");});\nd(\"customer-site/models/enterprise/settings/energy-saver-rule\", function(){ return i(\"customer-site/models/enterprise/settings/energy-saver-rule.ts\");});\nd(\"customer-site/models/enterprise/settings/guest-login-access\", function(){ return i(\"customer-site/models/enterprise/settings/guest-login-access.ts\");});\nd(\"customer-site/models/enterprise/settings/house-ready-early\", function(){ return i(\"customer-site/models/enterprise/settings/house-ready-early.ts\");});\nd(\"customer-site/models/enterprise/settings/login-template\", function(){ return i(\"customer-site/models/enterprise/settings/login-template.ts\");});\nd(\"customer-site/models/enterprise/settings/login-templates-for-group-with-role\", function(){ return i(\"customer-site/models/enterprise/settings/login-templates-for-group-with-role.ts\");});\nd(\"customer-site/models/enterprise/settings/login-templates-for-group\", function(){ return i(\"customer-site/models/enterprise/settings/login-templates-for-group.ts\");});\nd(\"customer-site/models/enterprise/settings/mobile-badge\", function(){ return i(\"customer-site/models/enterprise/settings/mobile-badge.ts\");});\nd(\"customer-site/models/enterprise/settings/noise-monitor-settings-template\", function(){ return i(\"customer-site/models/enterprise/settings/noise-monitor-settings-template.ts\");});\nd(\"customer-site/models/enterprise/settings/occupancy-based-pool-controller-rule\", function(){ return i(\"customer-site/models/enterprise/settings/occupancy-based-pool-controller-rule.ts\");});\nd(\"customer-site/models/enterprise/settings/occupancy-based-thermostat-rule\", function(){ return i(\"customer-site/models/enterprise/settings/occupancy-based-thermostat-rule.ts\");});\nd(\"customer-site/models/enterprise/settings/pool-control-filter-pump-schedule-template\", function(){ return i(\"customer-site/models/enterprise/settings/pool-control-filter-pump-schedule-template.ts\");});\nd(\"customer-site/models/enterprise/settings/preloaded-codes-for-user-creation\", function(){ return i(\"customer-site/models/enterprise/settings/preloaded-codes-for-user-creation.ts\");});\nd(\"customer-site/models/enterprise/settings/property-management-integration\", function(){ return i(\"customer-site/models/enterprise/settings/property-management-integration.ts\");});\nd(\"customer-site/models/enterprise/settings/property-management-resident\", function(){ return i(\"customer-site/models/enterprise/settings/property-management-resident.ts\");});\nd(\"customer-site/models/enterprise/settings/schedule-email\", function(){ return i(\"customer-site/models/enterprise/settings/schedule-email.ts\");});\nd(\"customer-site/models/enterprise/settings/schedule-welcome-message\", function(){ return i(\"customer-site/models/enterprise/settings/schedule-welcome-message.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-appointment-length\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-appointment-length.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-cc-verification\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-cc-verification.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-checkpoint-id\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-checkpoint-id.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-community-site-map\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-community-site-map.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-configure-funnel-crm\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-configure-funnel-crm.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-configure-knock-crm\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-configure-knock-crm.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-custom-url\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-custom-url.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-customer-logo\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-customer-logo.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-gate-code\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-gate-code.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-geofence\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-geofence.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-hours-of-operation\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-hours-of-operation.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-support-phone\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-support-phone.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-terms-and-condition\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-terms-and-condition.ts\");});\nd(\"customer-site/models/enterprise/settings/self-guided-tours-web-primary-color\", function(){ return i(\"customer-site/models/enterprise/settings/self-guided-tours-web-primary-color.ts\");});\nd(\"customer-site/models/enterprise/settings/send-email-by-default\", function(){ return i(\"customer-site/models/enterprise/settings/send-email-by-default.ts\");});\nd(\"customer-site/models/enterprise/settings/send-follow-up-text\", function(){ return i(\"customer-site/models/enterprise/settings/send-follow-up-text.ts\");});\nd(\"customer-site/models/enterprise/settings/support-phone\", function(){ return i(\"customer-site/models/enterprise/settings/support-phone.ts\");});\nd(\"customer-site/models/enterprise/settings/temporary-access-code-availability-schedule\", function(){ return i(\"customer-site/models/enterprise/settings/temporary-access-code-availability-schedule.ts\");});\nd(\"customer-site/models/enterprise/settings/temporary-access-code-duration\", function(){ return i(\"customer-site/models/enterprise/settings/temporary-access-code-duration.ts\");});\nd(\"customer-site/models/enterprise/settings/temporary-access-code\", function(){ return i(\"customer-site/models/enterprise/settings/temporary-access-code.ts\");});\nd(\"customer-site/models/enterprise/settings/thermostat-schedule-template\", function(){ return i(\"customer-site/models/enterprise/settings/thermostat-schedule-template.ts\");});\nd(\"customer-site/models/enterprise/settings/thermostat-settings-template\", function(){ return i(\"customer-site/models/enterprise/settings/thermostat-settings-template.ts\");});\nd(\"customer-site/models/enterprise/settings/user-code-time\", function(){ return i(\"customer-site/models/enterprise/settings/user-code-time.ts\");});\nd(\"customer-site/models/enterprise/settings/water-meter-configuration-template\", function(){ return i(\"customer-site/models/enterprise/settings/water-meter-configuration-template.ts\");});\nd(\"customer-site/models/enterprise/settings/water-meter-configuration\", function(){ return i(\"customer-site/models/enterprise/settings/water-meter-configuration.ts\");});\nd(\"customer-site/models/enterprise/settings/welcome-email\", function(){ return i(\"customer-site/models/enterprise/settings/welcome-email.ts\");});\nd(\"customer-site/models/enterprise/settings/welcome-message\", function(){ return i(\"customer-site/models/enterprise/settings/welcome-message.ts\");});\nd(\"customer-site/models/escalated-events/escalated-events-event\", function(){ return i(\"customer-site/models/escalated-events/escalated-events-event.ts\");});\nd(\"customer-site/models/feature-suggestions/base-feature\", function(){ return i(\"customer-site/models/feature-suggestions/base-feature.ts\");});\nd(\"customer-site/models/feature-suggestions/feature-category\", function(){ return i(\"customer-site/models/feature-suggestions/feature-category.ts\");});\nd(\"customer-site/models/feature-suggestions/feature-suggestion\", function(){ return i(\"customer-site/models/feature-suggestions/feature-suggestion.ts\");});\nd(\"customer-site/models/feature-suggestions/feature-task\", function(){ return i(\"customer-site/models/feature-suggestions/feature-task.ts\");});\nd(\"customer-site/models/filter/base-filter-count\", function(){ return i(\"customer-site/models/filter/base-filter-count.ts\");});\nd(\"customer-site/models/filter/base-filter-model\", function(){ return i(\"customer-site/models/filter/base-filter-model.ts\");});\nd(\"customer-site/models/filter/base-sub-filter\", function(){ return i(\"customer-site/models/filter/base-sub-filter.ts\");});\nd(\"customer-site/models/fleet/base-alert-item\", function(){ return i(\"customer-site/models/fleet/base-alert-item.ts\");});\nd(\"customer-site/models/fleet/car-issue-item\", function(){ return i(\"customer-site/models/fleet/car-issue-item.ts\");});\nd(\"customer-site/models/fleet/fleet-filter-count\", function(){ return i(\"customer-site/models/fleet/fleet-filter-count.ts\");});\nd(\"customer-site/models/fleet/fleet-filter\", function(){ return i(\"customer-site/models/fleet/fleet-filter.ts\");});\nd(\"customer-site/models/fleet/fleet-trip-day\", function(){ return i(\"customer-site/models/fleet/fleet-trip-day.ts\");});\nd(\"customer-site/models/fleet/fleet-trip\", function(){ return i(\"customer-site/models/fleet/fleet-trip.ts\");});\nd(\"customer-site/models/fleet/fleet-vehicle\", function(){ return i(\"customer-site/models/fleet/fleet-vehicle.ts\");});\nd(\"customer-site/models/fleet/trip-alert-item\", function(){ return i(\"customer-site/models/fleet/trip-alert-item.ts\");});\nd(\"customer-site/models/geolocation/fence\", function(){ return i(\"customer-site/models/geolocation/fence.ts\");});\nd(\"customer-site/models/geolocation/geo-device\", function(){ return i(\"customer-site/models/geolocation/geo-device.ts\");});\nd(\"customer-site/models/home/temperatures/temperature-sensor-group\", function(){ return i(\"customer-site/models/home/temperatures/temperature-sensor-group.ts\");});\nd(\"customer-site/models/identity\", function(){ return i(\"customer-site/models/identity.ts\");});\nd(\"customer-site/models/image-sensor/image-sensor-image\", function(){ return i(\"customer-site/models/image-sensor/image-sensor-image.ts\");});\nd(\"customer-site/models/image-sensor/image-sensor\", function(){ return i(\"customer-site/models/image-sensor/image-sensor.ts\");});\nd(\"customer-site/models/image-sensor/upload-clip-permission\", function(){ return i(\"customer-site/models/image-sensor/upload-clip-permission.ts\");});\nd(\"customer-site/models/logins/base-login\", function(){ return i(\"customer-site/models/logins/base-login.ts\");});\nd(\"customer-site/models/logins/customer-login\", function(){ return i(\"customer-site/models/logins/customer-login.ts\");});\nd(\"customer-site/models/logins/login-permissions-collection\", function(){ return i(\"customer-site/models/logins/login-permissions-collection.ts\");});\nd(\"customer-site/models/logins/non-group-login\", function(){ return i(\"customer-site/models/logins/non-group-login.ts\");});\nd(\"customer-site/models/logins/system-group-login\", function(){ return i(\"customer-site/models/logins/system-group-login.ts\");});\nd(\"customer-site/models/navigation/route-item-relationship\", function(){ return i(\"customer-site/models/navigation/route-item-relationship.ts\");});\nd(\"customer-site/models/navigation/route-item\", function(){ return i(\"customer-site/models/navigation/route-item.ts\");});\nd(\"customer-site/models/notifications/base-notification\", function(){ return i(\"customer-site/models/notifications/base-notification.ts\");});\nd(\"customer-site/models/notifications/notification-type\", function(){ return i(\"customer-site/models/notifications/notification-type.ts\");});\nd(\"customer-site/models/notifications/reports/base-report\", function(){ return i(\"customer-site/models/notifications/reports/base-report.ts\");});\nd(\"customer-site/models/notifications/reports/report-catalog-item\", function(){ return i(\"customer-site/models/notifications/reports/report-catalog-item.ts\");});\nd(\"customer-site/models/notifications/reports/report-view\", function(){ return i(\"customer-site/models/notifications/reports/report-view.ts\");});\nd(\"customer-site/models/personal-safety/alarm-link\", function(){ return i(\"customer-site/models/personal-safety/alarm-link.ts\");});\nd(\"customer-site/models/personal-safety/alarm\", function(){ return i(\"customer-site/models/personal-safety/alarm.ts\");});\nd(\"customer-site/models/personal-safety/emergency-contact\", function(){ return i(\"customer-site/models/personal-safety/emergency-contact.ts\");});\nd(\"customer-site/models/personal-safety/location\", function(){ return i(\"customer-site/models/personal-safety/location.ts\");});\nd(\"customer-site/models/personal-safety/session\", function(){ return i(\"customer-site/models/personal-safety/session.ts\");});\nd(\"customer-site/models/personal-safety/user-profile\", function(){ return i(\"customer-site/models/personal-safety/user-profile.ts\");});\nd(\"customer-site/models/point-central-identity\", function(){ return i(\"customer-site/models/point-central-identity.ts\");});\nd(\"customer-site/models/point-central/community/display-field\", function(){ return i(\"customer-site/models/point-central/community/display-field.ts\");});\nd(\"customer-site/models/point-central/community/group-structure\", function(){ return i(\"customer-site/models/point-central/community/group-structure.ts\");});\nd(\"customer-site/models/point-central/community/long-term-rental-community\", function(){ return i(\"customer-site/models/point-central/community/long-term-rental-community.ts\");});\nd(\"customer-site/models/point-central/manage-residents/resident-info\", function(){ return i(\"customer-site/models/point-central/manage-residents/resident-info.ts\");});\nd(\"customer-site/models/point-central/manage-residents/resident-move-info\", function(){ return i(\"customer-site/models/point-central/manage-residents/resident-move-info.ts\");});\nd(\"customer-site/models/programming-code/lock-programming-code\", function(){ return i(\"customer-site/models/programming-code/lock-programming-code.ts\");});\nd(\"customer-site/models/safety-button/customer-profile\", function(){ return i(\"customer-site/models/safety-button/customer-profile.ts\");});\nd(\"customer-site/models/safety-button/note\", function(){ return i(\"customer-site/models/safety-button/note.ts\");});\nd(\"customer-site/models/safety-button/session\", function(){ return i(\"customer-site/models/safety-button/session.ts\");});\nd(\"customer-site/models/schedules/rts-preset\", function(){ return i(\"customer-site/models/schedules/rts-preset.ts\");});\nd(\"customer-site/models/schedules/schedule-preset-time-frame\", function(){ return i(\"customer-site/models/schedules/schedule-preset-time-frame.ts\");});\nd(\"customer-site/models/schedules/smart-schedules-audit\", function(){ return i(\"customer-site/models/schedules/smart-schedules-audit.ts\");});\nd(\"customer-site/models/schedules/transition-event\", function(){ return i(\"customer-site/models/schedules/transition-event.ts\");});\nd(\"customer-site/models/service-appointments/reason\", function(){ return i(\"customer-site/models/service-appointments/reason.ts\");});\nd(\"customer-site/models/service-appointments/request\", function(){ return i(\"customer-site/models/service-appointments/request.ts\");});\nd(\"customer-site/models/service-appointments/scheduled-appointment\", function(){ return i(\"customer-site/models/service-appointments/scheduled-appointment.ts\");});\nd(\"customer-site/models/service-appointments/start-and-end-time\", function(){ return i(\"customer-site/models/service-appointments/start-and-end-time.ts\");});\nd(\"customer-site/models/service-appointments/timeframe\", function(){ return i(\"customer-site/models/service-appointments/timeframe.ts\");});\nd(\"customer-site/models/settings/access-point-wifi/access-point-panel-signal-strength\", function(){ return i(\"customer-site/models/settings/access-point-wifi/access-point-panel-signal-strength.ts\");});\nd(\"customer-site/models/settings/access-point-wifi/access-point-wifi-setting\", function(){ return i(\"customer-site/models/settings/access-point-wifi/access-point-wifi-setting.ts\");});\nd(\"customer-site/models/settings/account-management/move-portal-survey/customer-moving-form-result\", function(){ return i(\"customer-site/models/settings/account-management/move-portal-survey/customer-moving-form-result.ts\");});\nd(\"customer-site/models/settings/account-management/move-portal-survey/dealer-customer-app-promotion\", function(){ return i(\"customer-site/models/settings/account-management/move-portal-survey/dealer-customer-app-promotion.ts\");});\nd(\"customer-site/models/settings/active-directory-setup/active-directory-client-identifier\", function(){ return i(\"customer-site/models/settings/active-directory-setup/active-directory-client-identifier.ts\");});\nd(\"customer-site/models/settings/active-directory-setup/group-to-access-plan-mapping\", function(){ return i(\"customer-site/models/settings/active-directory-setup/group-to-access-plan-mapping.ts\");});\nd(\"customer-site/models/settings/active-directory-setup/group-to-enterprise-login-mapping\", function(){ return i(\"customer-site/models/settings/active-directory-setup/group-to-enterprise-login-mapping.ts\");});\nd(\"customer-site/models/settings/control-panel-settings/sensor-row-info\", function(){ return i(\"customer-site/models/settings/control-panel-settings/sensor-row-info.ts\");});\nd(\"customer-site/models/settings/everbridge-integration/everbridge-configuration\", function(){ return i(\"customer-site/models/settings/everbridge-integration/everbridge-configuration.ts\");});\nd(\"customer-site/models/settings/everbridge-integration/everbridge-template\", function(){ return i(\"customer-site/models/settings/everbridge-integration/everbridge-template.ts\");});\nd(\"customer-site/models/settings/manage-devices/device-catalog\", function(){ return i(\"customer-site/models/settings/manage-devices/device-catalog.ts\");});\nd(\"customer-site/models/settings/manage-devices/managed-device-category\", function(){ return i(\"customer-site/models/settings/manage-devices/managed-device-category.ts\");});\nd(\"customer-site/models/settings/manage-devices/zwave-device-catalog\", function(){ return i(\"customer-site/models/settings/manage-devices/zwave-device-catalog.ts\");});\nd(\"customer-site/models/settings/managed-access-request\", function(){ return i(\"customer-site/models/settings/managed-access-request.ts\");});\nd(\"customer-site/models/settings/monitoring-station/monitoring-certificate\", function(){ return i(\"customer-site/models/settings/monitoring-station/monitoring-certificate.ts\");});\nd(\"customer-site/models/settings/monitoring-station/property-action-category\", function(){ return i(\"customer-site/models/settings/monitoring-station/property-action-category.ts\");});\nd(\"customer-site/models/settings/monitoring-station/property-action-device\", function(){ return i(\"customer-site/models/settings/monitoring-station/property-action-device.ts\");});\nd(\"customer-site/models/settings/monitoring-station/property-action\", function(){ return i(\"customer-site/models/settings/monitoring-station/property-action.ts\");});\nd(\"customer-site/models/settings/monitoring-station/property-note\", function(){ return i(\"customer-site/models/settings/monitoring-station/property-note.ts\");});\nd(\"customer-site/models/settings/monitoring-station/video\", function(){ return i(\"customer-site/models/settings/monitoring-station/video.ts\");});\nd(\"customer-site/models/settings/monitoring-station/visual-verification-device\", function(){ return i(\"customer-site/models/settings/monitoring-station/visual-verification-device.ts\");});\nd(\"customer-site/models/settings/panel-bluetooth/bluetooth-disarming-setting\", function(){ return i(\"customer-site/models/settings/panel-bluetooth/bluetooth-disarming-setting.ts\");});\nd(\"customer-site/models/settings/panel-wifi/wifi-network\", function(){ return i(\"customer-site/models/settings/panel-wifi/wifi-network.ts\");});\nd(\"customer-site/models/settings/panel-wifi/wifi-setting\", function(){ return i(\"customer-site/models/settings/panel-wifi/wifi-setting.ts\");});\nd(\"customer-site/models/settings/restricted-access-setting\", function(){ return i(\"customer-site/models/settings/restricted-access-setting.ts\");});\nd(\"customer-site/models/settings/threshold\", function(){ return i(\"customer-site/models/settings/threshold.ts\");});\nd(\"customer-site/models/settings/voice/voice-access-level-setting-item\", function(){ return i(\"customer-site/models/settings/voice/voice-access-level-setting-item.ts\");});\nd(\"customer-site/models/settings/voice/voice-control-device-setting\", function(){ return i(\"customer-site/models/settings/voice/voice-control-device-setting.ts\");});\nd(\"customer-site/models/settings/voice/voice-settings-pin\", function(){ return i(\"customer-site/models/settings/voice/voice-settings-pin.ts\");});\nd(\"customer-site/models/smart-coverage/property\", function(){ return i(\"customer-site/models/smart-coverage/property.ts\");});\nd(\"customer-site/models/support/feedback\", function(){ return i(\"customer-site/models/support/feedback.ts\");});\nd(\"customer-site/models/systems/available-system-item\", function(){ return i(\"customer-site/models/systems/available-system-item.ts\");});\nd(\"customer-site/models/systems/configuration\", function(){ return i(\"customer-site/models/systems/configuration.ts\");});\nd(\"customer-site/models/systems/msa-associated-system\", function(){ return i(\"customer-site/models/systems/msa-associated-system.ts\");});\nd(\"customer-site/models/systems/system-group-cache-datum\", function(){ return i(\"customer-site/models/systems/system-group-cache-datum.ts\");});\nd(\"customer-site/models/systems/system-group\", function(){ return i(\"customer-site/models/systems/system-group.ts\");});\nd(\"customer-site/models/systems/system\", function(){ return i(\"customer-site/models/systems/system.ts\");});\nd(\"customer-site/models/trouble-conditions/trouble-condition-extra-data-collection\", function(){ return i(\"customer-site/models/trouble-conditions/trouble-condition-extra-data-collection.ts\");});\nd(\"customer-site/models/trouble-conditions/trouble-condition-mute\", function(){ return i(\"customer-site/models/trouble-conditions/trouble-condition-mute.ts\");});\nd(\"customer-site/models/trouble-conditions/trouble-condition\", function(){ return i(\"customer-site/models/trouble-conditions/trouble-condition.ts\");});\nd(\"customer-site/models/ui/color\", function(){ return i(\"customer-site/models/ui/color.ts\");});\nd(\"customer-site/models/ui/footer\", function(){ return i(\"customer-site/models/ui/footer.ts\");});\nd(\"customer-site/models/ui/home-card\", function(){ return i(\"customer-site/models/ui/home-card.ts\");});\nd(\"customer-site/models/upsell/get-upsell-shopping-cart-result\", function(){ return i(\"customer-site/models/upsell/get-upsell-shopping-cart-result.ts\");});\nd(\"customer-site/models/upsell/upsell-campaign\", function(){ return i(\"customer-site/models/upsell/upsell-campaign.ts\");});\nd(\"customer-site/models/users/access/access-point-collection\", function(){ return i(\"customer-site/models/users/access/access-point-collection.ts\");});\nd(\"customer-site/models/users/access/access-point-collections-summary\", function(){ return i(\"customer-site/models/users/access/access-point-collections-summary.ts\");});\nd(\"customer-site/models/users/access/access-point-item\", function(){ return i(\"customer-site/models/users/access/access-point-item.ts\");});\nd(\"customer-site/models/users/access/device-access\", function(){ return i(\"customer-site/models/users/access/device-access.ts\");});\nd(\"customer-site/models/users/access/unassigned-user-code\", function(){ return i(\"customer-site/models/users/access/unassigned-user-code.ts\");});\nd(\"customer-site/models/users/base-permissions-collection\", function(){ return i(\"customer-site/models/users/base-permissions-collection.ts\");});\nd(\"customer-site/models/users/base-user\", function(){ return i(\"customer-site/models/users/base-user.ts\");});\nd(\"customer-site/models/users/contact-address\", function(){ return i(\"customer-site/models/users/contact-address.ts\");});\nd(\"customer-site/models/users/country-mobile-carrier\", function(){ return i(\"customer-site/models/users/country-mobile-carrier.ts\");});\nd(\"customer-site/models/users/email-address\", function(){ return i(\"customer-site/models/users/email-address.ts\");});\nd(\"customer-site/models/users/mobile-address\", function(){ return i(\"customer-site/models/users/mobile-address.ts\");});\nd(\"customer-site/models/users/monitoring-station-address\", function(){ return i(\"customer-site/models/users/monitoring-station-address.ts\");});\nd(\"customer-site/models/users/permissions-collection\", function(){ return i(\"customer-site/models/users/permissions-collection.ts\");});\nd(\"customer-site/models/users/push-device-address\", function(){ return i(\"customer-site/models/users/push-device-address.ts\");});\nd(\"customer-site/models/users/quick-filter\", function(){ return i(\"customer-site/models/users/quick-filter.ts\");});\nd(\"customer-site/models/users/smrf-status\", function(){ return i(\"customer-site/models/users/smrf-status.ts\");});\nd(\"customer-site/models/users/user-attributes/user-attribute-collection\", function(){ return i(\"customer-site/models/users/user-attributes/user-attribute-collection.ts\");});\nd(\"customer-site/models/users/user-attributes/user-attribute-field\", function(){ return i(\"customer-site/models/users/user-attributes/user-attribute-field.ts\");});\nd(\"customer-site/models/users/user\", function(){ return i(\"customer-site/models/users/user.ts\");});\nd(\"customer-site/models/users/voice-address\", function(){ return i(\"customer-site/models/users/voice-address.ts\");});\nd(\"customer-site/models/video/aggregated-video-events-summary\", function(){ return i(\"customer-site/models/video/aggregated-video-events-summary.ts\");});\nd(\"customer-site/models/video/ai-deterrence-usage\", function(){ return i(\"customer-site/models/video/ai-deterrence-usage.ts\");});\nd(\"customer-site/models/video/alert-format\", function(){ return i(\"customer-site/models/video/alert-format.ts\");});\nd(\"customer-site/models/video/analytics-snapshot-event\", function(){ return i(\"customer-site/models/video/analytics-snapshot-event.ts\");});\nd(\"customer-site/models/video/base-analytics-rule\", function(){ return i(\"customer-site/models/video/base-analytics-rule.ts\");});\nd(\"customer-site/models/video/base-media-event\", function(){ return i(\"customer-site/models/video/base-media-event.ts\");});\nd(\"customer-site/models/video/cached-days-of-recorded-video\", function(){ return i(\"customer-site/models/video/cached-days-of-recorded-video.ts\");});\nd(\"customer-site/models/video/calibration/bounding-box\", function(){ return i(\"customer-site/models/video/calibration/bounding-box.ts\");});\nd(\"customer-site/models/video/calibration/snapshot\", function(){ return i(\"customer-site/models/video/calibration/snapshot.ts\");});\nd(\"customer-site/models/video/calibration/status\", function(){ return i(\"customer-site/models/video/calibration/status.ts\");});\nd(\"customer-site/models/video/camera-group\", function(){ return i(\"customer-site/models/video/camera-group.ts\");});\nd(\"customer-site/models/video/camera-light-setting\", function(){ return i(\"customer-site/models/video/camera-light-setting.ts\");});\nd(\"customer-site/models/video/camera-link-info\", function(){ return i(\"customer-site/models/video/camera-link-info.ts\");});\nd(\"customer-site/models/video/camera-password\", function(){ return i(\"customer-site/models/video/camera-password.ts\");});\nd(\"customer-site/models/video/camera-pir-setting\", function(){ return i(\"customer-site/models/video/camera-pir-setting.ts\");});\nd(\"customer-site/models/video/camera-siren\", function(){ return i(\"customer-site/models/video/camera-siren.ts\");});\nd(\"customer-site/models/video/clip-donation-agreement\", function(){ return i(\"customer-site/models/video/clip-donation-agreement.ts\");});\nd(\"customer-site/models/video/devices/base-analytics-camera\", function(){ return i(\"customer-site/models/video/devices/base-analytics-camera.ts\");});\nd(\"customer-site/models/video/devices/base-camera-collection\", function(){ return i(\"customer-site/models/video/devices/base-camera-collection.ts\");});\nd(\"customer-site/models/video/devices/base-camera\", function(){ return i(\"customer-site/models/video/devices/base-camera.ts\");});\nd(\"customer-site/models/video/devices/camera\", function(){ return i(\"customer-site/models/video/devices/camera.ts\");});\nd(\"customer-site/models/video/devices/digital-fov-camera\", function(){ return i(\"customer-site/models/video/devices/digital-fov-camera.ts\");});\nd(\"customer-site/models/video/devices/ov-ready-camera\", function(){ return i(\"customer-site/models/video/devices/ov-ready-camera.ts\");});\nd(\"customer-site/models/video/devices/sd-card-camera\", function(){ return i(\"customer-site/models/video/devices/sd-card-camera.ts\");});\nd(\"customer-site/models/video/devices/svr\", function(){ return i(\"customer-site/models/video/devices/svr.ts\");});\nd(\"customer-site/models/video/devices/third-party-analytics-camera\", function(){ return i(\"customer-site/models/video/devices/third-party-analytics-camera.ts\");});\nd(\"customer-site/models/video/devices/varifocal-fov-camera\", function(){ return i(\"customer-site/models/video/devices/varifocal-fov-camera.ts\");});\nd(\"customer-site/models/video/dewarp-config\", function(){ return i(\"customer-site/models/video/dewarp-config.ts\");});\nd(\"customer-site/models/video/digital-ptz-position\", function(){ return i(\"customer-site/models/video/digital-ptz-position.ts\");});\nd(\"customer-site/models/video/doorbell-button-press-event\", function(){ return i(\"customer-site/models/video/doorbell-button-press-event.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-subject-camera-context\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-subject-camera-context.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-target-cluster-profile\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-target-cluster-profile.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster-review\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster-review.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-target-enrollment-image\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-target-enrollment-image.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-target-enrollment\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-target-enrollment.ts\");});\nd(\"customer-site/models/video/familiar-targets/familiar-target-feedback-event\", function(){ return i(\"customer-site/models/video/familiar-targets/familiar-target-feedback-event.ts\");});\nd(\"customer-site/models/video/intercom/intercom-apartment\", function(){ return i(\"customer-site/models/video/intercom/intercom-apartment.ts\");});\nd(\"customer-site/models/video/intercom/intercom-call-rule\", function(){ return i(\"customer-site/models/video/intercom/intercom-call-rule.ts\");});\nd(\"customer-site/models/video/intercom/intercom-contact\", function(){ return i(\"customer-site/models/video/intercom/intercom-contact.ts\");});\nd(\"customer-site/models/video/intercom/intercom-directory-list\", function(){ return i(\"customer-site/models/video/intercom/intercom-directory-list.ts\");});\nd(\"customer-site/models/video/intercom/intercom-directory\", function(){ return i(\"customer-site/models/video/intercom/intercom-directory.ts\");});\nd(\"customer-site/models/video/intercom/intercom-paired-unit\", function(){ return i(\"customer-site/models/video/intercom/intercom-paired-unit.ts\");});\nd(\"customer-site/models/video/intercom/intercom-qr-code\", function(){ return i(\"customer-site/models/video/intercom/intercom-qr-code.ts\");});\nd(\"customer-site/models/video/interval\", function(){ return i(\"customer-site/models/video/interval.ts\");});\nd(\"customer-site/models/video/intervals-group\", function(){ return i(\"customer-site/models/video/intervals-group.ts\");});\nd(\"customer-site/models/video/onvif-camera-discovery-result\", function(){ return i(\"customer-site/models/video/onvif-camera-discovery-result.ts\");});\nd(\"customer-site/models/video/onvif-camera-rename-result\", function(){ return i(\"customer-site/models/video/onvif-camera-rename-result.ts\");});\nd(\"customer-site/models/video/onvif-camera-stream\", function(){ return i(\"customer-site/models/video/onvif-camera-stream.ts\");});\nd(\"customer-site/models/video/onvif-ptz-preset\", function(){ return i(\"customer-site/models/video/onvif-ptz-preset.ts\");});\nd(\"customer-site/models/video/ov-event\", function(){ return i(\"customer-site/models/video/ov-event.ts\");});\nd(\"customer-site/models/video/ov-rule-group\", function(){ return i(\"customer-site/models/video/ov-rule-group.ts\");});\nd(\"customer-site/models/video/ov-rule-snapshot\", function(){ return i(\"customer-site/models/video/ov-rule-snapshot.ts\");});\nd(\"customer-site/models/video/ov-rule\", function(){ return i(\"customer-site/models/video/ov-rule.ts\");});\nd(\"customer-site/models/video/ov2-event\", function(){ return i(\"customer-site/models/video/ov2-event.ts\");});\nd(\"customer-site/models/video/parcel-detection-rule\", function(){ return i(\"customer-site/models/video/parcel-detection-rule.ts\");});\nd(\"customer-site/models/video/perimeter-guard-config\", function(){ return i(\"customer-site/models/video/perimeter-guard-config.ts\");});\nd(\"customer-site/models/video/permissions/associated-devices-permission\", function(){ return i(\"customer-site/models/video/permissions/associated-devices-permission.ts\");});\nd(\"customer-site/models/video/permissions/clips-usage-report-permission\", function(){ return i(\"customer-site/models/video/permissions/clips-usage-report-permission.ts\");});\nd(\"customer-site/models/video/permissions/onboard-permission\", function(){ return i(\"customer-site/models/video/permissions/onboard-permission.ts\");});\nd(\"customer-site/models/video/permissions/ov-rule-permission\", function(){ return i(\"customer-site/models/video/permissions/ov-rule-permission.ts\");});\nd(\"customer-site/models/video/permissions/saved-clip-permission\", function(){ return i(\"customer-site/models/video/permissions/saved-clip-permission.ts\");});\nd(\"customer-site/models/video/permissions/video-settings-permission\", function(){ return i(\"customer-site/models/video/permissions/video-settings-permission.ts\");});\nd(\"customer-site/models/video/permissions/video-streaming-permissions-collection\", function(){ return i(\"customer-site/models/video/permissions/video-streaming-permissions-collection.ts\");});\nd(\"customer-site/models/video/post-install/qualitative-power-check\", function(){ return i(\"customer-site/models/video/post-install/qualitative-power-check.ts\");});\nd(\"customer-site/models/video/privacy-zone\", function(){ return i(\"customer-site/models/video/privacy-zone.ts\");});\nd(\"customer-site/models/video/privacy-zones-setting\", function(){ return i(\"customer-site/models/video/privacy-zones-setting.ts\");});\nd(\"customer-site/models/video/rule-usage\", function(){ return i(\"customer-site/models/video/rule-usage.ts\");});\nd(\"customer-site/models/video/schedules/base-video-schedule\", function(){ return i(\"customer-site/models/video/schedules/base-video-schedule.ts\");});\nd(\"customer-site/models/video/schedules/sd-card-recording-schedule\", function(){ return i(\"customer-site/models/video/schedules/sd-card-recording-schedule.ts\");});\nd(\"customer-site/models/video/sd-card-camera-usage-info\", function(){ return i(\"customer-site/models/video/sd-card-camera-usage-info.ts\");});\nd(\"customer-site/models/video/sd-card-thumbnail-endpoint\", function(){ return i(\"customer-site/models/video/sd-card-thumbnail-endpoint.ts\");});\nd(\"customer-site/models/video/sd-card\", function(){ return i(\"customer-site/models/video/sd-card.ts\");});\nd(\"customer-site/models/video/settings/alerts-setting\", function(){ return i(\"customer-site/models/video/settings/alerts-setting.ts\");});\nd(\"customer-site/models/video/settings/audio-setting\", function(){ return i(\"customer-site/models/video/settings/audio-setting.ts\");});\nd(\"customer-site/models/video/settings/base-video-setting\", function(){ return i(\"customer-site/models/video/settings/base-video-setting.ts\");});\nd(\"customer-site/models/video/settings/chime-tone-setting\", function(){ return i(\"customer-site/models/video/settings/chime-tone-setting.ts\");});\nd(\"customer-site/models/video/settings/device-status-history-item\", function(){ return i(\"customer-site/models/video/settings/device-status-history-item.ts\");});\nd(\"customer-site/models/video/settings/device-status-history-list\", function(){ return i(\"customer-site/models/video/settings/device-status-history-list.ts\");});\nd(\"customer-site/models/video/settings/device-status-info\", function(){ return i(\"customer-site/models/video/settings/device-status-info.ts\");});\nd(\"customer-site/models/video/settings/doorbell-notification-setting\", function(){ return i(\"customer-site/models/video/settings/doorbell-notification-setting.ts\");});\nd(\"customer-site/models/video/settings/doorbell-video-config\", function(){ return i(\"customer-site/models/video/settings/doorbell-video-config.ts\");});\nd(\"customer-site/models/video/settings/general-setting\", function(){ return i(\"customer-site/models/video/settings/general-setting.ts\");});\nd(\"customer-site/models/video/settings/image-setting\", function(){ return i(\"customer-site/models/video/settings/image-setting.ts\");});\nd(\"customer-site/models/video/settings/infrared-setting\", function(){ return i(\"customer-site/models/video/settings/infrared-setting.ts\");});\nd(\"customer-site/models/video/settings/intercom/associated-device-select\", function(){ return i(\"customer-site/models/video/settings/intercom/associated-device-select.ts\");});\nd(\"customer-site/models/video/settings/intercom/device-select\", function(){ return i(\"customer-site/models/video/settings/intercom/device-select.ts\");});\nd(\"customer-site/models/video/settings/intercom/intercom-concierge\", function(){ return i(\"customer-site/models/video/settings/intercom/intercom-concierge.ts\");});\nd(\"customer-site/models/video/settings/intercom/intercom-customer-apartment-info\", function(){ return i(\"customer-site/models/video/settings/intercom/intercom-customer-apartment-info.ts\");});\nd(\"customer-site/models/video/settings/intercom/intercom-login\", function(){ return i(\"customer-site/models/video/settings/intercom/intercom-login.ts\");});\nd(\"customer-site/models/video/settings/intercom/intercom-logo\", function(){ return i(\"customer-site/models/video/settings/intercom/intercom-logo.ts\");});\nd(\"customer-site/models/video/settings/intercom/intercom-unit-login-pairing\", function(){ return i(\"customer-site/models/video/settings/intercom/intercom-unit-login-pairing.ts\");});\nd(\"customer-site/models/video/settings/intercom/video-device-select\", function(){ return i(\"customer-site/models/video/settings/intercom/video-device-select.ts\");});\nd(\"customer-site/models/video/settings/led-light-setting\", function(){ return i(\"customer-site/models/video/settings/led-light-setting.ts\");});\nd(\"customer-site/models/video/settings/live-video-config\", function(){ return i(\"customer-site/models/video/settings/live-video-config.ts\");});\nd(\"customer-site/models/video/settings/microphone-speaker-setting\", function(){ return i(\"customer-site/models/video/settings/microphone-speaker-setting.ts\");});\nd(\"customer-site/models/video/settings/motion-configuration-setting\", function(){ return i(\"customer-site/models/video/settings/motion-configuration-setting.ts\");});\nd(\"customer-site/models/video/settings/pir-video-config\", function(){ return i(\"customer-site/models/video/settings/pir-video-config.ts\");});\nd(\"customer-site/models/video/settings/saved-video-setting\", function(){ return i(\"customer-site/models/video/settings/saved-video-setting.ts\");});\nd(\"customer-site/models/video/settings/video-config\", function(){ return i(\"customer-site/models/video/settings/video-config.ts\");});\nd(\"customer-site/models/video/settings/video-settings-overview\", function(){ return i(\"customer-site/models/video/settings/video-settings-overview.ts\");});\nd(\"customer-site/models/video/signal-strength-history-item\", function(){ return i(\"customer-site/models/video/signal-strength-history-item.ts\");});\nd(\"customer-site/models/video/signal-strength-info\", function(){ return i(\"customer-site/models/video/signal-strength-info.ts\");});\nd(\"customer-site/models/video/smrf-image\", function(){ return i(\"customer-site/models/video/smrf-image.ts\");});\nd(\"customer-site/models/video/smrf-legal-text\", function(){ return i(\"customer-site/models/video/smrf-legal-text.ts\");});\nd(\"customer-site/models/video/smrf-permission\", function(){ return i(\"customer-site/models/video/smrf-permission.ts\");});\nd(\"customer-site/models/video/snapshot-event\", function(){ return i(\"customer-site/models/video/snapshot-event.ts\");});\nd(\"customer-site/models/video/snapshot\", function(){ return i(\"customer-site/models/video/snapshot.ts\");});\nd(\"customer-site/models/video/stream-logs/oe-stream-log\", function(){ return i(\"customer-site/models/video/stream-logs/oe-stream-log.ts\");});\nd(\"customer-site/models/video/stream-logs/oe-stream-update-log\", function(){ return i(\"customer-site/models/video/stream-logs/oe-stream-update-log.ts\");});\nd(\"customer-site/models/video/stream-logs/webrtc-stream-log\", function(){ return i(\"customer-site/models/video/stream-logs/webrtc-stream-log.ts\");});\nd(\"customer-site/models/video/stream-logs/webrtc-stream-update-log\", function(){ return i(\"customer-site/models/video/stream-logs/webrtc-stream-update-log.ts\");});\nd(\"customer-site/models/video/stream-logs/webrtc-wavefront-report-message\", function(){ return i(\"customer-site/models/video/stream-logs/webrtc-wavefront-report-message.ts\");});\nd(\"customer-site/models/video/stream-options-collection\", function(){ return i(\"customer-site/models/video/stream-options-collection.ts\");});\nd(\"customer-site/models/video/stream-setting\", function(){ return i(\"customer-site/models/video/stream-setting.ts\");});\nd(\"customer-site/models/video/stream-video-to-panel-info\", function(){ return i(\"customer-site/models/video/stream-video-to-panel-info.ts\");});\nd(\"customer-site/models/video/svr-state-info\", function(){ return i(\"customer-site/models/video/svr-state-info.ts\");});\nd(\"customer-site/models/video/svr-thumbnail-endpoint\", function(){ return i(\"customer-site/models/video/svr-thumbnail-endpoint.ts\");});\nd(\"customer-site/models/video/svr-usage-info\", function(){ return i(\"customer-site/models/video/svr-usage-info.ts\");});\nd(\"customer-site/models/video/third-party-analytics-event-type\", function(){ return i(\"customer-site/models/video/third-party-analytics-event-type.ts\");});\nd(\"customer-site/models/video/third-party-analytics-event\", function(){ return i(\"customer-site/models/video/third-party-analytics-event.ts\");});\nd(\"customer-site/models/video/third-party-analytics-rule\", function(){ return i(\"customer-site/models/video/third-party-analytics-rule.ts\");});\nd(\"customer-site/models/video/touchless-ring-rule\", function(){ return i(\"customer-site/models/video/touchless-ring-rule.ts\");});\nd(\"customer-site/models/video/video-event\", function(){ return i(\"customer-site/models/video/video-event.ts\");});\nd(\"customer-site/models/video/video-sources/analytics-video-source\", function(){ return i(\"customer-site/models/video/video-sources/analytics-video-source.ts\");});\nd(\"customer-site/models/video/video-sources/apex-connection-info\", function(){ return i(\"customer-site/models/video/video-sources/apex-connection-info.ts\");});\nd(\"customer-site/models/video/video-sources/base-live-video-source\", function(){ return i(\"customer-site/models/video/video-sources/base-live-video-source.ts\");});\nd(\"customer-site/models/video/video-sources/end-to-end-webrtc-connection-info\", function(){ return i(\"customer-site/models/video/video-sources/end-to-end-webrtc-connection-info.ts\");});\nd(\"customer-site/models/video/video-sources/live-video-highest-res-source\", function(){ return i(\"customer-site/models/video/video-sources/live-video-highest-res-source.ts\");});\nd(\"customer-site/models/video/video-sources/live-video-source\", function(){ return i(\"customer-site/models/video/video-sources/live-video-source.ts\");});\nd(\"customer-site/models/video/video-sources/proxy-webrtc-connection-info\", function(){ return i(\"customer-site/models/video/video-sources/proxy-webrtc-connection-info.ts\");});\nd(\"customer-site/models/video/video-sources/sd-card-video-source\", function(){ return i(\"customer-site/models/video/video-sources/sd-card-video-source.ts\");});\nd(\"customer-site/models/video/video-sources/svr-video-source\", function(){ return i(\"customer-site/models/video/video-sources/svr-video-source.ts\");});\nd(\"customer-site/models/video/video-sources/video-source\", function(){ return i(\"customer-site/models/video/video-sources/video-source.ts\");});\nd(\"customer-site/models/video/video-sources/webrtc-stream-quality-message\", function(){ return i(\"customer-site/models/video/video-sources/webrtc-stream-quality-message.ts\");});\nd(\"customer-site/models/video/video-usage\", function(){ return i(\"customer-site/models/video/video-usage.ts\");});\nd(\"customer-site/models/visual-verification/alarm\", function(){ return i(\"customer-site/models/visual-verification/alarm.ts\");});\nd(\"customer-site/models/visual-verification/event\", function(){ return i(\"customer-site/models/visual-verification/event.ts\");});\nd(\"customer-site/models/visual-verification/page-feature\", function(){ return i(\"customer-site/models/visual-verification/page-feature.ts\");});\nd(\"customer-site/models/visual-verification/person-on-site/indicator\", function(){ return i(\"customer-site/models/visual-verification/person-on-site/indicator.ts\");});\nd(\"customer-site/models/visual-verification/property-note\", function(){ return i(\"customer-site/models/visual-verification/property-note.ts\");});\nd(\"customer-site/models/visual-verification/session-device-link\", function(){ return i(\"customer-site/models/visual-verification/session-device-link.ts\");});\nd(\"customer-site/models/visual-verification/session\", function(){ return i(\"customer-site/models/visual-verification/session.ts\");});\nd(\"customer-site/models/visual-verification/unexpected-events/prediction\", function(){ return i(\"customer-site/models/visual-verification/unexpected-events/prediction.ts\");});\nd(\"customer-site/models/visual-verification/visual-verification-event-id-list\", function(){ return i(\"customer-site/models/visual-verification/visual-verification-event-id-list.ts\");});\nd(\"customer-site/models/visual-verification/visual-verification-event-id\", function(){ return i(\"customer-site/models/visual-verification/visual-verification-event-id.ts\");});\nd(\"customer-site/models/weather/forecast\", function(){ return i(\"customer-site/models/weather/forecast.ts\");});\nd(\"customer-site/models/wifi/client\", function(){ return i(\"customer-site/models/wifi/client.ts\");});\nd(\"customer-site/models/wifi/device-category\", function(){ return i(\"customer-site/models/wifi/device-category.ts\");});\nd(\"customer-site/models/wifi/device-profile\", function(){ return i(\"customer-site/models/wifi/device-profile.ts\");});\nd(\"customer-site/models/wifi/device\", function(){ return i(\"customer-site/models/wifi/device.ts\");});\nd(\"customer-site/models/wifi/network\", function(){ return i(\"customer-site/models/wifi/network.ts\");});\nd(\"customer-site/models/wifi/port-forwarding-rule\", function(){ return i(\"customer-site/models/wifi/port-forwarding-rule.ts\");});\nd(\"customer-site/models/wifi/static-lease\", function(){ return i(\"customer-site/models/wifi/static-lease.ts\");});\nd(\"customer-site/router\", function(){ return i(\"customer-site/router.ts\");});\nd(\"customer-site/serializers/access-control/access-control-user\", function(){ return i(\"customer-site/serializers/access-control/access-control-user.js\");});\nd(\"customer-site/serializers/access-control/access-plan-pending-change-collection\", function(){ return i(\"customer-site/serializers/access-control/access-plan-pending-change-collection.js\");});\nd(\"customer-site/serializers/activity/extended-activity-history/request\", function(){ return i(\"customer-site/serializers/activity/extended-activity-history/request.js\");});\nd(\"customer-site/serializers/application\", function(){ return i(\"customer-site/serializers/application.js\");});\nd(\"customer-site/serializers/automation/presence-state/presence-state-sensor-trigger-option\", function(){ return i(\"customer-site/serializers/automation/presence-state/presence-state-sensor-trigger-option.ts\");});\nd(\"customer-site/serializers/automation/presence-state/presence-state-settings-display\", function(){ return i(\"customer-site/serializers/automation/presence-state/presence-state-settings-display.ts\");});\nd(\"customer-site/serializers/automation/presence-state/presence-state-trigger-device-suboption\", function(){ return i(\"customer-site/serializers/automation/presence-state/presence-state-trigger-device-suboption.ts\");});\nd(\"customer-site/serializers/automation/presence-state/presence-state-trigger-option\", function(){ return i(\"customer-site/serializers/automation/presence-state/presence-state-trigger-option.ts\");});\nd(\"customer-site/serializers/automation/rules-builder/notification/new-contact\", function(){ return i(\"customer-site/serializers/automation/rules-builder/notification/new-contact.ts\");});\nd(\"customer-site/serializers/automation/rules-builder/restrictions/restriction\", function(){ return i(\"customer-site/serializers/automation/rules-builder/restrictions/restriction.js\");});\nd(\"customer-site/serializers/automation/rules-builder/rule\", function(){ return i(\"customer-site/serializers/automation/rules-builder/rule.js\");});\nd(\"customer-site/serializers/automation/schedule-builder/schedule-builder\", function(){ return i(\"customer-site/serializers/automation/schedule-builder/schedule-builder.js\");});\nd(\"customer-site/serializers/automation/schedule-builder/schedule-event\", function(){ return i(\"customer-site/serializers/automation/schedule-builder/schedule-event.ts\");});\nd(\"customer-site/serializers/commercial/schedules/arming-schedule\", function(){ return i(\"customer-site/serializers/commercial/schedules/arming-schedule.ts\");});\nd(\"customer-site/serializers/devices/car-monitor\", function(){ return i(\"customer-site/serializers/devices/car-monitor.js\");});\nd(\"customer-site/serializers/devices/commercial-temperature-sensor\", function(){ return i(\"customer-site/serializers/devices/commercial-temperature-sensor.js\");});\nd(\"customer-site/serializers/discover/discover-article-group-item\", function(){ return i(\"customer-site/serializers/discover/discover-article-group-item.ts\");});\nd(\"customer-site/serializers/discover/get-discover-article-content-result\", function(){ return i(\"customer-site/serializers/discover/get-discover-article-content-result.ts\");});\nd(\"customer-site/serializers/discover/get-discover-dashboard-result\", function(){ return i(\"customer-site/serializers/discover/get-discover-dashboard-result.ts\");});\nd(\"customer-site/serializers/enterprise/locations/location\", function(){ return i(\"customer-site/serializers/enterprise/locations/location.js\");});\nd(\"customer-site/serializers/enterprise/settings/noise-monitor-settings-template\", function(){ return i(\"customer-site/serializers/enterprise/settings/noise-monitor-settings-template.js\");});\nd(\"customer-site/serializers/enterprise/settings/pool-control-filter-pump-schedule-template\", function(){ return i(\"customer-site/serializers/enterprise/settings/pool-control-filter-pump-schedule-template.js\");});\nd(\"customer-site/serializers/enterprise/settings/thermostat-settings-template\", function(){ return i(\"customer-site/serializers/enterprise/settings/thermostat-settings-template.js\");});\nd(\"customer-site/serializers/enterprise/settings/water-meter-configuration-template\", function(){ return i(\"customer-site/serializers/enterprise/settings/water-meter-configuration-template.js\");});\nd(\"customer-site/serializers/identity\", function(){ return i(\"customer-site/serializers/identity.js\");});\nd(\"customer-site/serializers/service-appointments/request\", function(){ return i(\"customer-site/serializers/service-appointments/request.js\");});\nd(\"customer-site/serializers/service-appointments/timeframe\", function(){ return i(\"customer-site/serializers/service-appointments/timeframe.js\");});\nd(\"customer-site/serializers/settings/everbridge-integration/everbridge-configuration\", function(){ return i(\"customer-site/serializers/settings/everbridge-integration/everbridge-configuration.ts\");});\nd(\"customer-site/serializers/settings/manage-devices/device-catalog\", function(){ return i(\"customer-site/serializers/settings/manage-devices/device-catalog.ts\");});\nd(\"customer-site/serializers/settings/manage-devices/managed-device-category\", function(){ return i(\"customer-site/serializers/settings/manage-devices/managed-device-category.ts\");});\nd(\"customer-site/serializers/settings/monitoring-station/property-action\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/property-action.ts\");});\nd(\"customer-site/serializers/settings/monitoring-station/video\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/video.ts\");});\nd(\"customer-site/serializers/settings/voice/voice-control-device-setting\", function(){ return i(\"customer-site/serializers/settings/voice/voice-control-device-setting.js\");});\nd(\"customer-site/serializers/systems/system-group\", function(){ return i(\"customer-site/serializers/systems/system-group.js\");});\nd(\"customer-site/serializers/users/access/access-point-collection\", function(){ return i(\"customer-site/serializers/users/access/access-point-collection.js\");});\nd(\"customer-site/serializers/users/access/access-point-collections-summary\", function(){ return i(\"customer-site/serializers/users/access/access-point-collections-summary.js\");});\nd(\"customer-site/serializers/users/access/device-access\", function(){ return i(\"customer-site/serializers/users/access/device-access.js\");});\nd(\"customer-site/serializers/users/user\", function(){ return i(\"customer-site/serializers/users/user.js\");});\nd(\"customer-site/serializers/video/familiar-targets/familiar-target-enrollment-cluster-review\", function(){ return i(\"customer-site/serializers/video/familiar-targets/familiar-target-enrollment-cluster-review.js\");});\nd(\"customer-site/serializers/video/familiar-targets/familiar-target-enrollment-cluster\", function(){ return i(\"customer-site/serializers/video/familiar-targets/familiar-target-enrollment-cluster.js\");});\nd(\"customer-site/serializers/video/familiar-targets/familiar-target-enrollment-image\", function(){ return i(\"customer-site/serializers/video/familiar-targets/familiar-target-enrollment-image.js\");});\nd(\"customer-site/serializers/video/familiar-targets/familiar-target-feedback-event\", function(){ return i(\"customer-site/serializers/video/familiar-targets/familiar-target-feedback-event.js\");});\nd(\"customer-site/serializers/video/intercom/intercom-call-rule\", function(){ return i(\"customer-site/serializers/video/intercom/intercom-call-rule.ts\");});\nd(\"customer-site/serializers/video/ov-rule\", function(){ return i(\"customer-site/serializers/video/ov-rule.ts\");});\nd(\"customer-site/serializers/video/settings/audio-setting\", function(){ return i(\"customer-site/serializers/video/settings/audio-setting.js\");});\nd(\"customer-site/serializers/video/settings/general-setting\", function(){ return i(\"customer-site/serializers/video/settings/general-setting.js\");});\nd(\"customer-site/serializers/video/settings/image-setting\", function(){ return i(\"customer-site/serializers/video/settings/image-setting.ts\");});\nd(\"customer-site/serializers/video/settings/video-config\", function(){ return i(\"customer-site/serializers/video/settings/video-config.js\");});\nd(\"customer-site/serializers/wifi/device-profile\", function(){ return i(\"customer-site/serializers/wifi/device-profile.ts\");});\nd(\"customer-site/services/adc-gtm\", function(){ return i(\"customer-site/services/adc-gtm.ts\");});\nd(\"customer-site/services/ajax\", function(){ return i(\"customer-site/services/ajax.ts\");});\nd(\"customer-site/services/announcer\", function(){ return i(\"customer-site/services/announcer.ts\");});\nd(\"customer-site/services/ble-network-setup\", function(){ return i(\"customer-site/services/ble-network-setup.ts\");});\nd(\"customer-site/services/context-manager\", function(){ return i(\"customer-site/services/context-manager.js\");});\nd(\"customer-site/services/engine-config\", function(){ return i(\"customer-site/services/engine-config.ts\");});\nd(\"customer-site/services/error-reporting\", function(){ return i(\"customer-site/services/error-reporting.ts\");});\nd(\"customer-site/services/help-tour\", function(){ return i(\"customer-site/services/help-tour.ts\");});\nd(\"customer-site/services/homepage-manager\", function(){ return i(\"customer-site/services/homepage-manager.ts\");});\nd(\"customer-site/services/identity-manager\", function(){ return i(\"customer-site/services/identity-manager.ts\");});\nd(\"customer-site/services/install-manager\", function(){ return i(\"customer-site/services/install-manager.js\");});\nd(\"customer-site/services/intl\", function(){ return i(\"customer-site/services/intl.js\");});\nd(\"customer-site/services/navigation\", function(){ return i(\"customer-site/services/navigation.ts\");});\nd(\"customer-site/services/personal-safety\", function(){ return i(\"customer-site/services/personal-safety.ts\");});\nd(\"customer-site/services/screen-recording\", function(){ return i(\"customer-site/services/screen-recording.ts\");});\nd(\"customer-site/services/stats\", function(){ return i(\"customer-site/services/stats.ts\");});\nd(\"customer-site/services/system-groups-manager\", function(){ return i(\"customer-site/services/system-groups-manager.ts\");});\nd(\"customer-site/services/trouble-conditions\", function(){ return i(\"customer-site/services/trouble-conditions.ts\");});\nd(\"customer-site/services/user-activity\", function(){ return i(\"customer-site/services/user-activity.ts\");});\nd(\"customer-site/services/users/pointcentral-share-user\", function(){ return i(\"customer-site/services/users/pointcentral-share-user.ts\");});\nd(\"customer-site/services/users/share-user\", function(){ return i(\"customer-site/services/users/share-user.ts\");});\nd(\"customer-site/services/ux-events\", function(){ return i(\"customer-site/services/ux-events.ts\");});\nd(\"customer-site/services/video/analytics-firmware-manager\", function(){ return i(\"customer-site/services/video/analytics-firmware-manager.ts\");});\nd(\"customer-site/services/video/clip-downloader\", function(){ return i(\"customer-site/services/video/clip-downloader.ts\");});\nd(\"customer-site/services/video/clip-exporter\", function(){ return i(\"customer-site/services/video/clip-exporter.ts\");});\nd(\"customer-site/services/video/clip-uploader\", function(){ return i(\"customer-site/services/video/clip-uploader.ts\");});\nd(\"customer-site/services/video/draw-window-event-bus\", function(){ return i(\"customer-site/services/video/draw-window-event-bus.ts\");});\nd(\"customer-site/services/video/onvif-ptz-preset-manager\", function(){ return i(\"customer-site/services/video/onvif-ptz-preset-manager.ts\");});\nd(\"customer-site/services/video/playback-info-cache-manager\", function(){ return i(\"customer-site/services/video/playback-info-cache-manager.ts\");});\nd(\"customer-site/services/video/privacy-zones-manager\", function(){ return i(\"customer-site/services/video/privacy-zones-manager.ts\");});\nd(\"customer-site/services/video/snapshot-poller\", function(){ return i(\"customer-site/services/video/snapshot-poller.ts\");});\nd(\"customer-site/services/video/video-preloader\", function(){ return i(\"customer-site/services/video/video-preloader.ts\");});\nd(\"customer-site/services/video/warning-sound\", function(){ return i(\"customer-site/services/video/warning-sound.ts\");});\nd(\"customer-site/services/visual-verification\", function(){ return i(\"customer-site/services/visual-verification.ts\");});\nd(\"customer-site/services/wizard-manager\", function(){ return i(\"customer-site/services/wizard-manager.ts\");});\nd(\"customer-site/settings/control-panel-settings/base-controller\", function(){ return i(\"customer-site/settings/control-panel-settings/base-controller.ts\");});\nd(\"customer-site/settings/control-panel-settings/base-route\", function(){ return i(\"customer-site/settings/control-panel-settings/base-route.ts\");});\nd(\"customer-site/settings/login-information/base-controller\", function(){ return i(\"customer-site/settings/login-information/base-controller.ts\");});\nd(\"customer-site/settings/login-information/base-route\", function(){ return i(\"customer-site/settings/login-information/base-route.ts\");});\nd(\"customer-site/settings/panel-wifi/base-route\", function(){ return i(\"customer-site/settings/panel-wifi/base-route.ts\");});\nd(\"customer-site/sso/base-sso-route\", function(){ return i(\"customer-site/sso/base-sso-route.ts\");});\nd(\"customer-site/transforms/access-control-schedule\", function(){ return i(\"customer-site/transforms/access-control-schedule.ts\");});\nd(\"customer-site/transforms/arming-schedule-day-time\", function(){ return i(\"customer-site/transforms/arming-schedule-day-time.ts\");});\nd(\"customer-site/transforms/complex-icon-data\", function(){ return i(\"customer-site/transforms/complex-icon-data.ts\");});\nd(\"customer-site/transforms/fisheye-mode\", function(){ return i(\"customer-site/transforms/fisheye-mode.ts\");});\nd(\"customer-site/transforms/heat-map-parameter\", function(){ return i(\"customer-site/transforms/heat-map-parameter.js\");});\nd(\"customer-site/transforms/icon-data\", function(){ return i(\"customer-site/transforms/icon-data.ts\");});\nd(\"customer-site/transforms/login-temporary-schedule\", function(){ return i(\"customer-site/transforms/login-temporary-schedule.ts\");});\nd(\"customer-site/transforms/pan-tilt-preset-list\", function(){ return i(\"customer-site/transforms/pan-tilt-preset-list.ts\");});\nd(\"customer-site/transforms/rule-extra-data\", function(){ return i(\"customer-site/transforms/rule-extra-data.ts\");});\nd(\"customer-site/transforms/rule-group-info-list\", function(){ return i(\"customer-site/transforms/rule-group-info-list.ts\");});\nd(\"customer-site/transforms/rule-id-info-list\", function(){ return i(\"customer-site/transforms/rule-id-info-list.ts\");});\nd(\"customer-site/transforms/system-group-login-roles-list\", function(){ return i(\"customer-site/transforms/system-group-login-roles-list.ts\");});\nd(\"customer-site/transforms/temporary-schedule\", function(){ return i(\"customer-site/transforms/temporary-schedule.ts\");});\nd(\"customer-site/transforms/weekly-schedule\", function(){ return i(\"customer-site/transforms/weekly-schedule.ts\");});\nd(\"customer-site/utils/access-control-access-point\", function(){ return i(\"customer-site/utils/access-control-access-point.js\");});\nd(\"customer-site/utils/analytics-shape-validation\", function(){ return i(\"customer-site/utils/analytics-shape-validation.ts\");});\nd(\"customer-site/utils/api-requests\", function(){ return i(\"customer-site/utils/api-requests.ts\");});\nd(\"customer-site/utils/camera-lights\", function(){ return i(\"customer-site/utils/camera-lights.ts\");});\nd(\"customer-site/utils/canvas\", function(){ return i(\"customer-site/utils/canvas.ts\");});\nd(\"customer-site/utils/colors\", function(){ return i(\"customer-site/utils/colors.ts\");});\nd(\"customer-site/utils/contact-addresses\", function(){ return i(\"customer-site/utils/contact-addresses.ts\");});\nd(\"customer-site/utils/container-object\", function(){ return i(\"customer-site/utils/container-object.js\");});\nd(\"customer-site/utils/datetime\", function(){ return i(\"customer-site/utils/datetime.js\");});\nd(\"customer-site/utils/device-state\", function(){ return i(\"customer-site/utils/device-state.ts\");});\nd(\"customer-site/utils/device-wifi\", function(){ return i(\"customer-site/utils/device-wifi.ts\");});\nd(\"customer-site/utils/device\", function(){ return i(\"customer-site/utils/device.js\");});\nd(\"customer-site/utils/dimmer-switch\", function(){ return i(\"customer-site/utils/dimmer-switch.ts\");});\nd(\"customer-site/utils/dom\", function(){ return i(\"customer-site/utils/dom.js\");});\nd(\"customer-site/utils/ember\", function(){ return i(\"customer-site/utils/ember.ts\");});\nd(\"customer-site/utils/fleet\", function(){ return i(\"customer-site/utils/fleet.ts\");});\nd(\"customer-site/utils/form-elements\", function(){ return i(\"customer-site/utils/form-elements.js\");});\nd(\"customer-site/utils/garages\", function(){ return i(\"customer-site/utils/garages.ts\");});\nd(\"customer-site/utils/gates\", function(){ return i(\"customer-site/utils/gates.ts\");});\nd(\"customer-site/utils/general\", function(){ return i(\"customer-site/utils/general.js\");});\nd(\"customer-site/utils/highcharts/line\", function(){ return i(\"customer-site/utils/highcharts/line.ts\");});\nd(\"customer-site/utils/highcharts/vertical-bar-chart\", function(){ return i(\"customer-site/utils/highcharts/vertical-bar-chart.ts\");});\nd(\"customer-site/utils/highcharts/xrange-chart\", function(){ return i(\"customer-site/utils/highcharts/xrange-chart.ts\");});\nd(\"customer-site/utils/json\", function(){ return i(\"customer-site/utils/json.ts\");});\nd(\"customer-site/utils/lights\", function(){ return i(\"customer-site/utils/lights.ts\");});\nd(\"customer-site/utils/locks\", function(){ return i(\"customer-site/utils/locks.ts\");});\nd(\"customer-site/utils/math-methods\", function(){ return i(\"customer-site/utils/math-methods.ts\");});\nd(\"customer-site/utils/mpers-devices\", function(){ return i(\"customer-site/utils/mpers-devices.ts\");});\nd(\"customer-site/utils/partitions\", function(){ return i(\"customer-site/utils/partitions.ts\");});\nd(\"customer-site/utils/point-central\", function(){ return i(\"customer-site/utils/point-central.ts\");});\nd(\"customer-site/utils/properties-observe\", function(){ return i(\"customer-site/utils/properties-observe.js\");});\nd(\"customer-site/utils/scene-rule-display\", function(){ return i(\"customer-site/utils/scene-rule-display.ts\");});\nd(\"customer-site/utils/sensors\", function(){ return i(\"customer-site/utils/sensors.ts\");});\nd(\"customer-site/utils/severity-status\", function(){ return i(\"customer-site/utils/severity-status.js\");});\nd(\"customer-site/utils/sfg-devices\", function(){ return i(\"customer-site/utils/sfg-devices.ts\");});\nd(\"customer-site/utils/shades\", function(){ return i(\"customer-site/utils/shades.ts\");});\nd(\"customer-site/utils/slider\", function(){ return i(\"customer-site/utils/slider.ts\");});\nd(\"customer-site/utils/strings\", function(){ return i(\"customer-site/utils/strings.js\");});\nd(\"customer-site/utils/style\", function(){ return i(\"customer-site/utils/style.js\");});\nd(\"customer-site/utils/sump-pumps\", function(){ return i(\"customer-site/utils/sump-pumps.ts\");});\nd(\"customer-site/utils/switch\", function(){ return i(\"customer-site/utils/switch.ts\");});\nd(\"customer-site/utils/thermostats\", function(){ return i(\"customer-site/utils/thermostats.ts\");});\nd(\"customer-site/utils/transforms-objects/base-transform\", function(){ return i(\"customer-site/utils/transforms-objects/base-transform.ts\");});\nd(\"customer-site/utils/transforms-objects/complex-icon-data\", function(){ return i(\"customer-site/utils/transforms-objects/complex-icon-data.ts\");});\nd(\"customer-site/utils/transforms-objects/icon-data\", function(){ return i(\"customer-site/utils/transforms-objects/icon-data.ts\");});\nd(\"customer-site/utils/transforms-objects/login-temporary-schedule\", function(){ return i(\"customer-site/utils/transforms-objects/login-temporary-schedule.ts\");});\nd(\"customer-site/utils/transforms-objects/temporary-schedule\", function(){ return i(\"customer-site/utils/transforms-objects/temporary-schedule.ts\");});\nd(\"customer-site/utils/transforms-objects/weekly-schedule\", function(){ return i(\"customer-site/utils/transforms-objects/weekly-schedule.ts\");});\nd(\"customer-site/utils/unused-cookies-prefixes\", function(){ return i(\"customer-site/utils/unused-cookies-prefixes.js\");});\nd(\"customer-site/utils/url\", function(){ return i(\"customer-site/utils/url.js\");});\nd(\"customer-site/utils/users\", function(){ return i(\"customer-site/utils/users.js\");});\nd(\"customer-site/utils/video/cookies\", function(){ return i(\"customer-site/utils/video/cookies.js\");});\nd(\"customer-site/utils/video/doorbell\", function(){ return i(\"customer-site/utils/video/doorbell.ts\");});\nd(\"customer-site/utils/video/general\", function(){ return i(\"customer-site/utils/video/general.ts\");});\nd(\"customer-site/utils/video/rule-transition\", function(){ return i(\"customer-site/utils/video/rule-transition.ts\");});\nd(\"customer-site/utils/video/rule\", function(){ return i(\"customer-site/utils/video/rule.ts\");});\nd(\"customer-site/utils/video/rules-edit-transition\", function(){ return i(\"customer-site/utils/video/rules-edit-transition.ts\");});\nd(\"customer-site/utils/video/rules-stats\", function(){ return i(\"customer-site/utils/video/rules-stats.ts\");});\nd(\"customer-site/utils/video/settings/ai-perimeter-guard-type\", function(){ return i(\"customer-site/utils/video/settings/ai-perimeter-guard-type.ts\");});\nd(\"customer-site/utils/video/settings/familiar-subject\", function(){ return i(\"customer-site/utils/video/settings/familiar-subject.ts\");});\nd(\"customer-site/utils/video/settings/familiar-target-event\", function(){ return i(\"customer-site/utils/video/settings/familiar-target-event.ts\");});\nd(\"customer-site/utils/video/settings/light-alert-options\", function(){ return i(\"customer-site/utils/video/settings/light-alert-options.ts\");});\nd(\"customer-site/utils/video/settings/perimeter-guard-audio-options\", function(){ return i(\"customer-site/utils/video/settings/perimeter-guard-audio-options.ts\");});\nd(\"customer-site/utils/video/streaming\", function(){ return i(\"customer-site/utils/video/streaming.ts\");});\nd(\"customer-site/utils/video/video-preloader-detail\", function(){ return i(\"customer-site/utils/video/video-preloader-detail.ts\");});\nd(\"customer-site/utils/video/wavefront-stats\", function(){ return i(\"customer-site/utils/video/wavefront-stats.ts\");});\nd(\"customer-site/utils/water-meters\", function(){ return i(\"customer-site/utils/water-meters.js\");});\nd(\"customer-site/utils/water-sensors\", function(){ return i(\"customer-site/utils/water-sensors.ts\");});\nd(\"customer-site/utils/water-valves\", function(){ return i(\"customer-site/utils/water-valves.js\");});\nd(\"customer-site/utils/wifi-validation\", function(){ return i(\"customer-site/utils/wifi-validation.ts\");});\nd(\"customer-site/utils/zwave-generic\", function(){ return i(\"customer-site/utils/zwave-generic.ts\");});\nd(\"customer-site/video/base-playback-controller\", function(){ return i(\"customer-site/video/base-playback-controller.ts\");});\nd(\"customer-site/video/base-playback-route\", function(){ return i(\"customer-site/video/base-playback-route.ts\");});\nd(\"customer-site/video/base-video-automation-route\", function(){ return i(\"customer-site/video/base-video-automation-route.ts\");});\nd(\"customer-site/video/business-activity-analytics/heat-mapping/helper-objects/heat-maps\", function(){ return i(\"customer-site/video/business-activity-analytics/heat-mapping/helper-objects/heat-maps.ts\");});\nd(\"customer-site/video/camera-groups/base-objects/base-camera-group-edit-route\", function(){ return i(\"customer-site/video/camera-groups/base-objects/base-camera-group-edit-route.ts\");});\nd(\"customer-site/video/camera-groups/base-objects/base-camera-groups-controller\", function(){ return i(\"customer-site/video/camera-groups/base-objects/base-camera-groups-controller.ts\");});\nd(\"customer-site/video/camera-groups/base-objects/base-camera-groups-route\", function(){ return i(\"customer-site/video/camera-groups/base-objects/base-camera-groups-route.ts\");});\nd(\"customer-site/video/cameras/camera/base-analytics-camera-route\", function(){ return i(\"customer-site/video/cameras/camera/base-analytics-camera-route.ts\");});\nd(\"customer-site/video/cameras/camera/calibrate/base-controller\", function(){ return i(\"customer-site/video/cameras/camera/calibrate/base-controller.ts\");});\nd(\"customer-site/video/cameras/camera/calibrate/base-route\", function(){ return i(\"customer-site/video/cameras/camera/calibrate/base-route.ts\");});\nd(\"customer-site/video/cameras/camera/post-install/base-controller\", function(){ return i(\"customer-site/video/cameras/camera/post-install/base-controller.ts\");});\nd(\"customer-site/video/cameras/camera/post-install/base-route\", function(){ return i(\"customer-site/video/cameras/camera/post-install/base-route.ts\");});\nd(\"customer-site/video/clips-usage-report/series-formatters\", function(){ return i(\"customer-site/video/clips-usage-report/series-formatters.ts\");});\nd(\"customer-site/video/install-overview/base-install-overview-controller\", function(){ return i(\"customer-site/video/install-overview/base-install-overview-controller.ts\");});\nd(\"customer-site/video/install-overview/base-install-overview-route\", function(){ return i(\"customer-site/video/install-overview/base-install-overview-route.ts\");});\nd(\"customer-site/video/live-view/base-live-view-controller\", function(){ return i(\"customer-site/video/live-view/base-live-view-controller.ts\");});\nd(\"customer-site/video/live-view/base-live-view-route\", function(){ return i(\"customer-site/video/live-view/base-live-view-route.ts\");});\nd(\"customer-site/video/onvif-install/base-onvif-installation-controller\", function(){ return i(\"customer-site/video/onvif-install/base-onvif-installation-controller.ts\");});\nd(\"customer-site/video/onvif-install/base-onvif-installation-route\", function(){ return i(\"customer-site/video/onvif-install/base-onvif-installation-route.ts\");});\nd(\"customer-site/video/onvif-install/naming/base-onvif-installation-naming-route\", function(){ return i(\"customer-site/video/onvif-install/naming/base-onvif-installation-naming-route.ts\");});\nd(\"customer-site/video/rules/analytics/base-analytics-route\", function(){ return i(\"customer-site/video/rules/analytics/base-analytics-route.ts\");});\nd(\"customer-site/video/rules/analytics/base-editable-analytics-route\", function(){ return i(\"customer-site/video/rules/analytics/base-editable-analytics-route.ts\");});\nd(\"customer-site/video/rules/analytics/draw/draw-base-controller\", function(){ return i(\"customer-site/video/rules/analytics/draw/draw-base-controller.ts\");});\nd(\"customer-site/video/rules/analytics/draw/draw-base-route\", function(){ return i(\"customer-site/video/rules/analytics/draw/draw-base-route.ts\");});\nd(\"customer-site/video/rules/help-tour/tour\", function(){ return i(\"customer-site/video/rules/help-tour/tour.js\");});\nd(\"customer-site/video/settings/camera/base-settings-route\", function(){ return i(\"customer-site/video/settings/camera/base-settings-route.ts\");});\nd(\"customer-site/video/settings/camera/video-config/base-video-config-controller\", function(){ return i(\"customer-site/video/settings/camera/video-config/base-video-config-controller.ts\");});\nd(\"customer-site/video/settings/camera/video-config/third-party-stream/base-third-party-stream-controller\", function(){ return i(\"customer-site/video/settings/camera/video-config/third-party-stream/base-third-party-stream-controller.ts\");});\nd(\"customer-site/video/settings/familiar-subject/camera-access-base-route\", function(){ return i(\"customer-site/video/settings/familiar-subject/camera-access-base-route.ts\");});\nd(\"customer-site/video/settings/familiar-subject/faq-terms-base-route\", function(){ return i(\"customer-site/video/settings/familiar-subject/faq-terms-base-route.ts\");});\nd(\"customer-site/video/settings/familiar-subject/feature-management-base-route\", function(){ return i(\"customer-site/video/settings/familiar-subject/feature-management-base-route.ts\");});\nd(\"customer-site/video/settings/familiar-subject/incorrect-photos-base-route\", function(){ return i(\"customer-site/video/settings/familiar-subject/incorrect-photos-base-route.ts\");});\nd(\"customer-site/video/settings/familiar-subject/recent-images-base-route\", function(){ return i(\"customer-site/video/settings/familiar-subject/recent-images-base-route.ts\");});\nd(\"customer-site/video/settings/intercom/add-logins-to-intercom\", function(){ return i(\"customer-site/video/settings/intercom/add-logins-to-intercom.ts\");});\nd(\"customer-site/video/settings/intercom/ajax-request-utils/base-request-body\", function(){ return i(\"customer-site/video/settings/intercom/ajax-request-utils/base-request-body.ts\");});\nd(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-add-logins-request-body\", function(){ return i(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-add-logins-request-body.ts\");});\nd(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-bulk-insert-contacts-request-body\", function(){ return i(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-bulk-insert-contacts-request-body.ts\");});\nd(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-create-call-forwarding-rules-request-body\", function(){ return i(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-create-call-forwarding-rules-request-body.ts\");});\nd(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-remove-logins-request-body\", function(){ return i(\"customer-site/video/settings/intercom/ajax-request-utils/intercom-remove-logins-request-body.ts\");});\nd(\"customer-site/video/settings/intercom/base-intercom-route\", function(){ return i(\"customer-site/video/settings/intercom/base-intercom-route.ts\");});\nd(\"customer-site/video/settings/intercom/base-intercom-settings-controller\", function(){ return i(\"customer-site/video/settings/intercom/base-intercom-settings-controller.ts\");});\nd(\"customer-site/video/settings/intercom/remove-logins-from-intercoms\", function(){ return i(\"customer-site/video/settings/intercom/remove-logins-from-intercoms.ts\");});\nd(\"customer-site/video/video-streaming-features-route\", function(){ return i(\"customer-site/video/video-streaming-features-route.js\");});\nd(\"customer-site/visual-verification/base-controller\", function(){ return i(\"customer-site/visual-verification/base-controller.ts\");});\nd(\"customer-site/visual-verification/base-route\", function(){ return i(\"customer-site/visual-verification/base-route.ts\");});\nd(\"customer-site/websockets/handlers\", function(){ return i(\"customer-site/websockets/handlers.ts\");});\nd(\"customer-site/websockets/handlers/access-control-access-points\", function(){ return i(\"customer-site/websockets/handlers/access-control-access-points.ts\");});\nd(\"customer-site/websockets/handlers/base-sensors\", function(){ return i(\"customer-site/websockets/handlers/base-sensors.ts\");});\nd(\"customer-site/websockets/handlers/base\", function(){ return i(\"customer-site/websockets/handlers/base.ts\");});\nd(\"customer-site/websockets/handlers/camera-lights\", function(){ return i(\"customer-site/websockets/handlers/camera-lights.ts\");});\nd(\"customer-site/websockets/handlers/fleet-filter-counts\", function(){ return i(\"customer-site/websockets/handlers/fleet-filter-counts.ts\");});\nd(\"customer-site/websockets/handlers/fleet-vehicles\", function(){ return i(\"customer-site/websockets/handlers/fleet-vehicles.ts\");});\nd(\"customer-site/websockets/handlers/garage-doors\", function(){ return i(\"customer-site/websockets/handlers/garage-doors.ts\");});\nd(\"customer-site/websockets/handlers/gates\", function(){ return i(\"customer-site/websockets/handlers/gates.ts\");});\nd(\"customer-site/websockets/handlers/iq-routers\", function(){ return i(\"customer-site/websockets/handlers/iq-routers.ts\");});\nd(\"customer-site/websockets/handlers/lights\", function(){ return i(\"customer-site/websockets/handlers/lights.ts\");});\nd(\"customer-site/websockets/handlers/locks\", function(){ return i(\"customer-site/websockets/handlers/locks.ts\");});\nd(\"customer-site/websockets/handlers/mpers-device\", function(){ return i(\"customer-site/websockets/handlers/mpers-device.ts\");});\nd(\"customer-site/websockets/handlers/networks\", function(){ return i(\"customer-site/websockets/handlers/networks.ts\");});\nd(\"customer-site/websockets/handlers/partitions\", function(){ return i(\"customer-site/websockets/handlers/partitions.ts\");});\nd(\"customer-site/websockets/handlers/safety-button-location\", function(){ return i(\"customer-site/websockets/handlers/safety-button-location.ts\");});\nd(\"customer-site/websockets/handlers/sensors\", function(){ return i(\"customer-site/websockets/handlers/sensors.ts\");});\nd(\"customer-site/websockets/handlers/shades\", function(){ return i(\"customer-site/websockets/handlers/shades.ts\");});\nd(\"customer-site/websockets/handlers/sump-pumps\", function(){ return i(\"customer-site/websockets/handlers/sump-pumps.ts\");});\nd(\"customer-site/websockets/handlers/thermostats\", function(){ return i(\"customer-site/websockets/handlers/thermostats.ts\");});\nd(\"customer-site/websockets/handlers/warning-sounds\", function(){ return i(\"customer-site/websockets/handlers/warning-sounds.ts\");});\nd(\"customer-site/websockets/handlers/water-sensors\", function(){ return i(\"customer-site/websockets/handlers/water-sensors.ts\");});\nd(\"customer-site/websockets/handlers/water-valves\", function(){ return i(\"customer-site/websockets/handlers/water-valves.ts\");});\nd(\"customer-site/websockets/handlers/wifi-hosts\", function(){ return i(\"customer-site/websockets/handlers/wifi-hosts.ts\");});\nd(\"customer-site/websockets/handlers/wifi-profiles\", function(){ return i(\"customer-site/websockets/handlers/wifi-profiles.ts\");});\nd(\"customer-site/services/dom\", function(){ return i(\"customer-site/services/dom.js\");});\nd(\"customer-site/services/adc-ajax\", function(){ return i(\"customer-site/services/adc-ajax.js\");});\nd(\"customer-site/services/adc-intl\", function(){ return i(\"customer-site/services/adc-intl.js\");});\nd(\"customer-site/adapters/base-adapter\", function(){ return i(\"customer-site/adapters/base-adapter.js\");});\nd(\"customer-site/adapters/base-json-api-content-adapter\", function(){ return i(\"customer-site/adapters/base-json-api-content-adapter.js\");});\nd(\"customer-site/adapters/base-micro-api-adapter\", function(){ return i(\"customer-site/adapters/base-micro-api-adapter.js\");});\nd(\"customer-site/models/base-model\", function(){ return i(\"customer-site/models/base-model.js\");});\nd(\"customer-site/models/locale\", function(){ return i(\"customer-site/models/locale.js\");});\nd(\"customer-site/models/micro-api-data-item\", function(){ return i(\"customer-site/models/micro-api-data-item.js\");});\nd(\"customer-site/models/micro-api-endpoint\", function(){ return i(\"customer-site/models/micro-api-endpoint.js\");});\nd(\"customer-site/serializers/base-serializer\", function(){ return i(\"customer-site/serializers/base-serializer.js\");});\nd(\"customer-site/serializers/common-serializer\", function(){ return i(\"customer-site/serializers/common-serializer.js\");});\nd(\"customer-site/serializers/polymorphic-serializer\", function(){ return i(\"customer-site/serializers/polymorphic-serializer.js\");});\nd(\"customer-site/services/base-engine-config\", function(){ return i(\"customer-site/services/base-engine-config.js\");});\nd(\"customer-site/services/base-error-reporting\", function(){ return i(\"customer-site/services/base-error-reporting.js\");});\nd(\"customer-site/services/browser\", function(){ return i(\"customer-site/services/browser.js\");});\nd(\"customer-site/services/cookie-manager\", function(){ return i(\"customer-site/services/cookie-manager.js\");});\nd(\"customer-site/services/env-settings\", function(){ return i(\"customer-site/services/env-settings.js\");});\nd(\"customer-site/services/locale\", function(){ return i(\"customer-site/services/locale.js\");});\nd(\"customer-site/services/native-bridge\", function(){ return i(\"customer-site/services/native-bridge.js\");});\nd(\"customer-site/services/performance-monitor\", function(){ return i(\"customer-site/services/performance-monitor.js\");});\nd(\"customer-site/services/session-activity\", function(){ return i(\"customer-site/services/session-activity.js\");});\nd(\"customer-site/services/websocket\", function(){ return i(\"customer-site/services/websocket.js\");});\nd(\"customer-site/transforms/array\", function(){ return i(\"customer-site/transforms/array.js\");});\nd(\"customer-site/transforms/nullable-boolean\", function(){ return i(\"customer-site/transforms/nullable-boolean.js\");});\nd(\"customer-site/adapters/add-device-category\", function(){ return i(\"customer-site/adapters/add-device-category.js\");});\nd(\"customer-site/adapters/add-device-resource\", function(){ return i(\"customer-site/adapters/add-device-resource.js\");});\nd(\"customer-site/adapters/base-add-device-adapter\", function(){ return i(\"customer-site/adapters/base-add-device-adapter.js\");});\nd(\"customer-site/adapters/paired-device\", function(){ return i(\"customer-site/adapters/paired-device.js\");});\nd(\"customer-site/models/add-device-category\", function(){ return i(\"customer-site/models/add-device-category.js\");});\nd(\"customer-site/models/add-device-resource\", function(){ return i(\"customer-site/models/add-device-resource.js\");});\nd(\"customer-site/models/paired-device\", function(){ return i(\"customer-site/models/paired-device.js\");});\nd(\"customer-site/initializers/setup-ui-components\", function(){ return i(\"customer-site/initializers/setup-ui-components.js\");});\nd(\"customer-site/services/accessibility\", function(){ return i(\"customer-site/services/accessibility.js\");});\nd(\"customer-site/services/modals\", function(){ return i(\"customer-site/services/modals.js\");});\nd(\"customer-site/services/notification-manager\", function(){ return i(\"customer-site/services/notification-manager.js\");});\nd(\"customer-site/vendor/qrcode\", function(){ return i(\"customer-site/vendor/qrcode.js\");});\nd(\"customer-site/adapters/automation/rules/smart-arming\", function(){ return i(\"customer-site/adapters/automation/rules/smart-arming.js\");});\nd(\"customer-site/adapters/base-model-adapter\", function(){ return i(\"customer-site/adapters/base-model-adapter.js\");});\nd(\"customer-site/models/automation/rules/smart-arming\", function(){ return i(\"customer-site/models/automation/rules/smart-arming.js\");});\nd(\"customer-site/adapters/agreements/agreements\", function(){ return i(\"customer-site/adapters/agreements/agreements.js\");});\nd(\"customer-site/adapters/arming-reminder/arming-reminder\", function(){ return i(\"customer-site/adapters/arming-reminder/arming-reminder.js\");});\nd(\"customer-site/adapters/arming-reminder/contact-address-simple\", function(){ return i(\"customer-site/adapters/arming-reminder/contact-address-simple.js\");});\nd(\"customer-site/adapters/base-login-setup-adapter\", function(){ return i(\"customer-site/adapters/base-login-setup-adapter.js\");});\nd(\"customer-site/adapters/communication-preferences/communication-method\", function(){ return i(\"customer-site/adapters/communication-preferences/communication-method.js\");});\nd(\"customer-site/adapters/communication-preferences/marketing-category\", function(){ return i(\"customer-site/adapters/communication-preferences/marketing-category.js\");});\nd(\"customer-site/adapters/profile/profile\", function(){ return i(\"customer-site/adapters/profile/profile.js\");});\nd(\"customer-site/adapters/push-migration-tool/push-migration-prompt\", function(){ return i(\"customer-site/adapters/push-migration-tool/push-migration-prompt.js\");});\nd(\"customer-site/adapters/recognized-devices/recognized-device\", function(){ return i(\"customer-site/adapters/recognized-devices/recognized-device.js\");});\nd(\"customer-site/adapters/settings/account-management/system-information/system-information\", function(){ return i(\"customer-site/adapters/settings/account-management/system-information/system-information.js\");});\nd(\"customer-site/adapters/settings/business-hours/day/business-hour-day\", function(){ return i(\"customer-site/adapters/settings/business-hours/day/business-hour-day.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-list-collection\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-list-collection.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-list-entry\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-list-entry.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-list\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-list.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-phone\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact-phone.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/emergency-contact.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/settings/call-list-setting\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/settings/call-list-setting.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/settings/contact-passcode-setting\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/settings/contact-passcode-setting.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/contacts/settings/emergency-contact-setting\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/contacts/settings/emergency-contact-setting.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/permit\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/permit.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/premise/passcode\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/premise/passcode.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/premise/permitted-action\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/premise/permitted-action.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/premise/phone-collection\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/premise/phone-collection.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/premise/phone\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/premise/phone.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/premise/settings/premise-passcode-setting\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/premise/settings/premise-passcode-setting.js\");});\nd(\"customer-site/adapters/settings/monitoring-station/premise/settings/premise-phone-setting\", function(){ return i(\"customer-site/adapters/settings/monitoring-station/premise/settings/premise-phone-setting.js\");});\nd(\"customer-site/adapters/sms/country-mobile-carrier\", function(){ return i(\"customer-site/adapters/sms/country-mobile-carrier.js\");});\nd(\"customer-site/adapters/two-factor-authentication/two-factor-authentication\", function(){ return i(\"customer-site/adapters/two-factor-authentication/two-factor-authentication.js\");});\nd(\"customer-site/enums/AlarmPermitAuthority\", function(){ return i(\"customer-site/enums/AlarmPermitAuthority.js\");});\nd(\"customer-site/enums/ContactType\", function(){ return i(\"customer-site/enums/ContactType.js\");});\nd(\"customer-site/enums/CsContactPhoneNumberType\", function(){ return i(\"customer-site/enums/CsContactPhoneNumberType.js\");});\nd(\"customer-site/models/agreements/agreement\", function(){ return i(\"customer-site/models/agreements/agreement.js\");});\nd(\"customer-site/models/arming-reminder/arming-reminder\", function(){ return i(\"customer-site/models/arming-reminder/arming-reminder.js\");});\nd(\"customer-site/models/arming-reminder/contact-address-simple\", function(){ return i(\"customer-site/models/arming-reminder/contact-address-simple.js\");});\nd(\"customer-site/models/communication-preferences/communication-method\", function(){ return i(\"customer-site/models/communication-preferences/communication-method.js\");});\nd(\"customer-site/models/communication-preferences/communication-preference\", function(){ return i(\"customer-site/models/communication-preferences/communication-preference.js\");});\nd(\"customer-site/models/communication-preferences/marketing-category\", function(){ return i(\"customer-site/models/communication-preferences/marketing-category.js\");});\nd(\"customer-site/models/messages/message\", function(){ return i(\"customer-site/models/messages/message.js\");});\nd(\"customer-site/models/profile/profile\", function(){ return i(\"customer-site/models/profile/profile.js\");});\nd(\"customer-site/models/push-migration-tool/push-migration-prompt\", function(){ return i(\"customer-site/models/push-migration-tool/push-migration-prompt.js\");});\nd(\"customer-site/models/recognized-devices/recognized-device\", function(){ return i(\"customer-site/models/recognized-devices/recognized-device.js\");});\nd(\"customer-site/models/settings/account-management/account-information/account-information\", function(){ return i(\"customer-site/models/settings/account-management/account-information/account-information.js\");});\nd(\"customer-site/models/settings/account-management/account-information/dtc-billing-information/dtc-billing-information\", function(){ return i(\"customer-site/models/settings/account-management/account-information/dtc-billing-information/dtc-billing-information.js\");});\nd(\"customer-site/models/settings/account-management/account-information/marketing-communication/marketing-communication\", function(){ return i(\"customer-site/models/settings/account-management/account-information/marketing-communication/marketing-communication.js\");});\nd(\"customer-site/models/settings/account-management/country-address-resource\", function(){ return i(\"customer-site/models/settings/account-management/country-address-resource.js\");});\nd(\"customer-site/models/settings/account-management/property-information\", function(){ return i(\"customer-site/models/settings/account-management/property-information.js\");});\nd(\"customer-site/models/settings/account-management/system-information/system-information\", function(){ return i(\"customer-site/models/settings/account-management/system-information/system-information.js\");});\nd(\"customer-site/models/settings/business-hours/day/business-hour-day\", function(){ return i(\"customer-site/models/settings/business-hours/day/business-hour-day.js\");});\nd(\"customer-site/models/settings/business-hours/location-business-hour\", function(){ return i(\"customer-site/models/settings/business-hours/location-business-hour.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-list-collection\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-list-collection.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-list-entry\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-list-entry.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-list\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-list.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-phone\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact-phone.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/emergency-contact.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/settings/call-list-setting\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/settings/call-list-setting.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/settings/contact-passcode-setting\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/settings/contact-passcode-setting.js\");});\nd(\"customer-site/models/settings/monitoring-station/contacts/settings/emergency-contact-setting\", function(){ return i(\"customer-site/models/settings/monitoring-station/contacts/settings/emergency-contact-setting.js\");});\nd(\"customer-site/models/settings/monitoring-station/permit\", function(){ return i(\"customer-site/models/settings/monitoring-station/permit.js\");});\nd(\"customer-site/models/settings/monitoring-station/premise/passcode\", function(){ return i(\"customer-site/models/settings/monitoring-station/premise/passcode.js\");});\nd(\"customer-site/models/settings/monitoring-station/premise/permitted-action\", function(){ return i(\"customer-site/models/settings/monitoring-station/premise/permitted-action.js\");});\nd(\"customer-site/models/settings/monitoring-station/premise/phone-collection\", function(){ return i(\"customer-site/models/settings/monitoring-station/premise/phone-collection.js\");});\nd(\"customer-site/models/settings/monitoring-station/premise/phone\", function(){ return i(\"customer-site/models/settings/monitoring-station/premise/phone.js\");});\nd(\"customer-site/models/settings/monitoring-station/premise/settings/premise-passcode-setting\", function(){ return i(\"customer-site/models/settings/monitoring-station/premise/settings/premise-passcode-setting.js\");});\nd(\"customer-site/models/settings/monitoring-station/premise/settings/premise-phone-setting\", function(){ return i(\"customer-site/models/settings/monitoring-station/premise/settings/premise-phone-setting.js\");});\nd(\"customer-site/models/site-appearance/site-appearance\", function(){ return i(\"customer-site/models/site-appearance/site-appearance.js\");});\nd(\"customer-site/models/sms/country-mobile-carrier\", function(){ return i(\"customer-site/models/sms/country-mobile-carrier.js\");});\nd(\"customer-site/models/support/support-option\", function(){ return i(\"customer-site/models/support/support-option.js\");});\nd(\"customer-site/models/support/support-page\", function(){ return i(\"customer-site/models/support/support-page.js\");});\nd(\"customer-site/models/two-factor-authentication/two-factor-authentication\", function(){ return i(\"customer-site/models/two-factor-authentication/two-factor-authentication.js\");});\nd(\"customer-site/models/video/download-format\", function(){ return i(\"customer-site/models/video/download-format.js\");});\nd(\"customer-site/serializers/arming-reminder/arming-reminder\", function(){ return i(\"customer-site/serializers/arming-reminder/arming-reminder.js\");});\nd(\"customer-site/serializers/communication-preferences/communication-preference\", function(){ return i(\"customer-site/serializers/communication-preferences/communication-preference.js\");});\nd(\"customer-site/serializers/communication-preferences/marketing-category\", function(){ return i(\"customer-site/serializers/communication-preferences/marketing-category.js\");});\nd(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact-list-collection\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact-list-collection.js\");});\nd(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact-list-entry\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact-list-entry.js\");});\nd(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact-list\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact-list.js\");});\nd(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/contacts/emergency-contact.js\");});\nd(\"customer-site/serializers/settings/monitoring-station/premise/phone-collection\", function(){ return i(\"customer-site/serializers/settings/monitoring-station/premise/phone-collection.js\");});\nd(\"customer-site/adapters/base-network-config-adapter\", function(){ return i(\"customer-site/adapters/base-network-config-adapter.js\");});\nd(\"customer-site/adapters/video/permissions/ble-wifi-config-permission\", function(){ return i(\"customer-site/adapters/video/permissions/ble-wifi-config-permission.js\");});\nd(\"customer-site/adapters/video/wifi-config\", function(){ return i(\"customer-site/adapters/video/wifi-config.js\");});\nd(\"customer-site/adapters/video/wifi-info-item\", function(){ return i(\"customer-site/adapters/video/wifi-info-item.js\");});\nd(\"customer-site/enums/FrequencyBand\", function(){ return i(\"customer-site/enums/FrequencyBand.js\");});\nd(\"customer-site/enums/SignalStrength\", function(){ return i(\"customer-site/enums/SignalStrength.js\");});\nd(\"customer-site/enums/WiFiEncryptionAlgorithm\", function(){ return i(\"customer-site/enums/WiFiEncryptionAlgorithm.js\");});\nd(\"customer-site/enums/WiFiEncryptionType\", function(){ return i(\"customer-site/enums/WiFiEncryptionType.js\");});\nd(\"customer-site/enums/WirelessConnectionInstructionsType\", function(){ return i(\"customer-site/enums/WirelessConnectionInstructionsType.js\");});\nd(\"customer-site/models/video/permissions/ble-wifi-config-permission\", function(){ return i(\"customer-site/models/video/permissions/ble-wifi-config-permission.js\");});\nd(\"customer-site/models/video/wifi-config\", function(){ return i(\"customer-site/models/video/wifi-config.js\");});\nd(\"customer-site/models/video/wifi-info-item\", function(){ return i(\"customer-site/models/video/wifi-info-item.js\");});\nd(\"customer-site/services/local-state\", function(){ return i(\"customer-site/services/local-state.js\");});\nd(\"customer-site/services/placeholder\", function(){ return i(\"customer-site/services/placeholder.js\");});\nd(\"customer-site/utils/intl/missing-message\", function(){ return i(\"customer-site/utils/intl/missing-message.js\");});\nd(\"customer-site/instance-initializers/sentry-performance\", function(){ return i(\"customer-site/instance-initializers/sentry-performance.js\");});\nd(\"customer-site/data-adapter\", function(){ return i(\"customer-site/data-adapter.js\");});\nd(\"customer-site/initializers/ember-data-data-adapter\", function(){ return i(\"customer-site/initializers/ember-data-data-adapter.js\");});\nd(\"customer-site/adapters/-json-api\", function(){ return i(\"customer-site/adapters/-json-api.js\");});\nd(\"customer-site/initializers/ember-data\", function(){ return i(\"customer-site/initializers/ember-data.js\");});\nd(\"customer-site/instance-initializers/ember-data\", function(){ return i(\"customer-site/instance-initializers/ember-data.js\");});\nd(\"customer-site/serializers/-default\", function(){ return i(\"customer-site/serializers/-default.js\");});\nd(\"customer-site/serializers/-json-api\", function(){ return i(\"customer-site/serializers/-json-api.js\");});\nd(\"customer-site/serializers/-rest\", function(){ return i(\"customer-site/serializers/-rest.js\");});\nd(\"customer-site/services/store\", function(){ return i(\"customer-site/services/store.js\");});\nd(\"customer-site/transforms/boolean\", function(){ return i(\"customer-site/transforms/boolean.js\");});\nd(\"customer-site/transforms/date\", function(){ return i(\"customer-site/transforms/date.js\");});\nd(\"customer-site/transforms/number\", function(){ return i(\"customer-site/transforms/number.js\");});\nd(\"customer-site/transforms/string\", function(){ return i(\"customer-site/transforms/string.js\");});\nd(\"customer-site/services/-ensure-registered\", function(){ return i(\"customer-site/services/-ensure-registered.js\");});\nd(\"customer-site/initializers/ember-responsive-breakpoints\", function(){ return i(\"customer-site/initializers/ember-responsive-breakpoints.js\");});\nd(\"customer-site/services/media\", function(){ return i(\"customer-site/services/media.js\");});\nd(\"customer-site/utils/add-device-config-helper\", function(){ return i(\"customer-site/utils/add-device-config-helper.js\");});\nd(\"customer-site/utils/add-device-navigation-url-helper\", function(){ return i(\"customer-site/utils/add-device-navigation-url-helper.js\");});\nd(\"customer-site/utils/titleize\", function(){ return i(\"customer-site/utils/titleize.js\");});\nd(\"customer-site/two-factor-authentication/base-route\", function(){ return i(\"customer-site/two-factor-authentication/base-route.js\");});\nd(\"customer-site/component-managers/glimmer\", function(){ return i(\"customer-site/component-managers/glimmer.js\");});\nd(\"customer-site/initializers/app-version\", function(){ return i(\"customer-site/initializers/app-version.js\");});\nd(\"customer-site/services/asset-loader\", function(){ return i(\"customer-site/services/asset-loader.js\");});\nd(\"customer-site/initializers/engines\", function(){ return i(\"customer-site/initializers/engines.js\");});\nd(\"customer-site/instance-initializers/ember-href-to\", function(){ return i(\"customer-site/instance-initializers/ember-href-to.js\");});\nd(\"customer-site/metrics-adapters/base\", function(){ return i(\"customer-site/metrics-adapters/base.js\");});\nd(\"customer-site/metrics-adapters/pendo\", function(){ return i(\"customer-site/metrics-adapters/pendo.js\");});\nd(\"customer-site/services/metrics\", function(){ return i(\"customer-site/services/metrics.js\");});\nd(\"customer-site/services/page-title-list\", function(){ return i(\"customer-site/services/page-title-list.js\");});\nd(\"customer-site/services/page-title\", function(){ return i(\"customer-site/services/page-title.js\");});\nd(\"customer-site/initializers/container-debug-adapter\", function(){ return i(\"customer-site/initializers/container-debug-adapter.js\");});\nd(\"customer-site/alerts-issues/index/template\", function(){ return i(\"customer-site/alerts-issues/index/template.hbs\");});\nd(\"customer-site/alerts-issues/index/controller\", function(){ return i(\"customer-site/alerts-issues/index/controller.ts\");});\nd(\"customer-site/alerts-issues/index/route\", function(){ return i(\"customer-site/alerts-issues/index/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/index/template\", function(){ return i(\"customer-site/alerts-issues/service-appointments/index/template.hbs\");});\nd(\"customer-site/alerts-issues/service-appointments/index/controller\", function(){ return i(\"customer-site/alerts-issues/service-appointments/index/controller.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/index/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/index/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/index/template\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/index/template.hbs\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/index/controller\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/index/controller.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/index/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/index/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/template\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/template.hbs\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/controller\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/controller.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/index/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/template\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/template.hbs\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/controller\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/controller.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/reasons/third-party-service-scheduling/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/index/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/index/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/template\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/template.hbs\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/controller\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/controller.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-date/route.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/template\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/template.hbs\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/controller\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/controller.ts\");});\nd(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/route\", function(){ return i(\"customer-site/alerts-issues/service-appointments/service-appointment/timeframe/select-times/route.ts\");});\nd(\"customer-site/alerts-issues/trouble-condition/template\", function(){ return i(\"customer-site/alerts-issues/trouble-condition/template.hbs\");});\nd(\"customer-site/alerts-issues/trouble-condition/controller\", function(){ return i(\"customer-site/alerts-issues/trouble-condition/controller.ts\");});\nd(\"customer-site/alerts-issues/trouble-condition/route\", function(){ return i(\"customer-site/alerts-issues/trouble-condition/route.ts\");});\nd(\"customer-site/alerts-issues/water-leak-alert/template\", function(){ return i(\"customer-site/alerts-issues/water-leak-alert/template.hbs\");});\nd(\"customer-site/alerts-issues/water-leak-alert/controller\", function(){ return i(\"customer-site/alerts-issues/water-leak-alert/controller.ts\");});\nd(\"customer-site/alerts-issues/water-leak-alert/route\", function(){ return i(\"customer-site/alerts-issues/water-leak-alert/route.ts\");});\nd(\"customer-site/app-error/template\", function(){ return i(\"customer-site/app-error/template.hbs\");});\nd(\"customer-site/app-error/controller\", function(){ return i(\"customer-site/app-error/controller.ts\");});\nd(\"customer-site/app-error/route\", function(){ return i(\"customer-site/app-error/route.ts\");});\nd(\"customer-site/application/template\", function(){ return i(\"customer-site/application/template.hbs\");});\nd(\"customer-site/application/controller\", function(){ return i(\"customer-site/application/controller.js\");});\nd(\"customer-site/application/route\", function(){ return i(\"customer-site/application/route.js\");});\nd(\"customer-site/builder-trial-account-expiration-warning/template\", function(){ return i(\"customer-site/builder-trial-account-expiration-warning/template.hbs\");});\nd(\"customer-site/builder-trial-account-expiration-warning/route\", function(){ return i(\"customer-site/builder-trial-account-expiration-warning/route.ts\");});\nd(\"customer-site/classes/enterprise/logins/add-enterprise-logins-options/route\", function(){ return i(\"customer-site/classes/enterprise/logins/add-enterprise-logins-options/route.ts\");});\nd(\"customer-site/classes/enterprise/logins/base-login/controller\", function(){ return i(\"customer-site/classes/enterprise/logins/base-login/controller.ts\");});\nd(\"customer-site/classes/enterprise/logins/edit/edit-scheduled-device-login/controller\", function(){ return i(\"customer-site/classes/enterprise/logins/edit/edit-scheduled-device-login/controller.ts\");});\nd(\"customer-site/classes/enterprise/logins/edit/multi-group-login/controller\", function(){ return i(\"customer-site/classes/enterprise/logins/edit/multi-group-login/controller.ts\");});\nd(\"customer-site/classes/enterprise/logins/edit/multi-group-login/route\", function(){ return i(\"customer-site/classes/enterprise/logins/edit/multi-group-login/route.ts\");});\nd(\"customer-site/classes/enterprise/logins/index/controller\", function(){ return i(\"customer-site/classes/enterprise/logins/index/controller.ts\");});\nd(\"customer-site/classes/enterprise/logins/index/route\", function(){ return i(\"customer-site/classes/enterprise/logins/index/route.ts\");});\nd(\"customer-site/classes/logins/edit/controller\", function(){ return i(\"customer-site/classes/logins/edit/controller.ts\");});\nd(\"customer-site/classes/logins/index/controller\", function(){ return i(\"customer-site/classes/logins/index/controller.ts\");});\nd(\"customer-site/classes/users/edit/add-contact/route\", function(){ return i(\"customer-site/classes/users/edit/add-contact/route.ts\");});\nd(\"customer-site/classes/users/edit/contact-information/template\", function(){ return i(\"customer-site/classes/users/edit/contact-information/template.hbs\");});\nd(\"customer-site/classes/users/edit/contact-information/controller\", function(){ return i(\"customer-site/classes/users/edit/contact-information/controller.ts\");});\nd(\"customer-site/classes/users/edit/contact-information/route\", function(){ return i(\"customer-site/classes/users/edit/contact-information/route.ts\");});\nd(\"customer-site/classes/users/edit/index/controller\", function(){ return i(\"customer-site/classes/users/edit/index/controller.js\");});\nd(\"customer-site/classes/users/edit/language/route\", function(){ return i(\"customer-site/classes/users/edit/language/route.ts\");});\nd(\"customer-site/classes/users/edit/link-login/controller\", function(){ return i(\"customer-site/classes/users/edit/link-login/controller.ts\");});\nd(\"customer-site/classes/users/edit/link-login/route\", function(){ return i(\"customer-site/classes/users/edit/link-login/route.ts\");});\nd(\"customer-site/classes/users/edit/new-user-add-contact-information/template\", function(){ return i(\"customer-site/classes/users/edit/new-user-add-contact-information/template.hbs\");});\nd(\"customer-site/classes/users/edit/new-user-add-contact-information/controller\", function(){ return i(\"customer-site/classes/users/edit/new-user-add-contact-information/controller.ts\");});\nd(\"customer-site/classes/users/edit/new-user-add-contact-information/route\", function(){ return i(\"customer-site/classes/users/edit/new-user-add-contact-information/route.ts\");});\nd(\"customer-site/classes/users/edit/user-attributes/edit/route\", function(){ return i(\"customer-site/classes/users/edit/user-attributes/edit/route.js\");});\nd(\"customer-site/classes/users/edit/user-attributes/index/route\", function(){ return i(\"customer-site/classes/users/edit/user-attributes/index/route.js\");});\nd(\"customer-site/classes/users/edit/user-information/controller\", function(){ return i(\"customer-site/classes/users/edit/user-information/controller.ts\");});\nd(\"customer-site/classes/users/edit/user-information/route\", function(){ return i(\"customer-site/classes/users/edit/user-information/route.ts\");});\nd(\"customer-site/customer-shop/item/template\", function(){ return i(\"customer-site/customer-shop/item/template.hbs\");});\nd(\"customer-site/customer-shop/item/controller\", function(){ return i(\"customer-site/customer-shop/item/controller.ts\");});\nd(\"customer-site/customer-shop/item/route\", function(){ return i(\"customer-site/customer-shop/item/route.ts\");});\nd(\"customer-site/dashboards/thermostats/index/template\", function(){ return i(\"customer-site/dashboards/thermostats/index/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/index/route\", function(){ return i(\"customer-site/dashboards/thermostats/index/route.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/template\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/thermostat/route\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/route.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/comfort/template\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/comfort/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/thermostat/comfort/controller\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/comfort/controller.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/comfort/route\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/comfort/route.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/cycle/template\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/cycle/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/thermostat/cycle/controller\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/cycle/controller.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/cycle/route\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/cycle/route.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/efficiency/template\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/efficiency/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/thermostat/efficiency/controller\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/efficiency/controller.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/efficiency/route\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/efficiency/route.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/index/template\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/index/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/thermostat/runtime/template\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/runtime/template.hbs\");});\nd(\"customer-site/dashboards/thermostats/thermostat/runtime/controller\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/runtime/controller.ts\");});\nd(\"customer-site/dashboards/thermostats/thermostat/runtime/route\", function(){ return i(\"customer-site/dashboards/thermostats/thermostat/runtime/route.ts\");});\nd(\"customer-site/default-notification-redirect/route\", function(){ return i(\"customer-site/default-notification-redirect/route.js\");});\nd(\"customer-site/external-page/template\", function(){ return i(\"customer-site/external-page/template.hbs\");});\nd(\"customer-site/external-page/controller\", function(){ return i(\"customer-site/external-page/controller.js\");});\nd(\"customer-site/external-page/route\", function(){ return i(\"customer-site/external-page/route.js\");});\nd(\"customer-site/generic-wizard-deep-link-landing/controller\", function(){ return i(\"customer-site/generic-wizard-deep-link-landing/controller.ts\");});\nd(\"customer-site/generic-wizard-deep-link-landing/route\", function(){ return i(\"customer-site/generic-wizard-deep-link-landing/route.ts\");});\nd(\"customer-site/index/route\", function(){ return i(\"customer-site/index/route.ts\");});\nd(\"customer-site/info/template\", function(){ return i(\"customer-site/info/template.hbs\");});\nd(\"customer-site/info/route\", function(){ return i(\"customer-site/info/route.js\");});\nd(\"customer-site/legacy-page/template\", function(){ return i(\"customer-site/legacy-page/template.hbs\");});\nd(\"customer-site/legacy-page/controller\", function(){ return i(\"customer-site/legacy-page/controller.ts\");});\nd(\"customer-site/legacy-page/route\", function(){ return i(\"customer-site/legacy-page/route.js\");});\nd(\"customer-site/mobile/help/route\", function(){ return i(\"customer-site/mobile/help/route.js\");});\nd(\"customer-site/mobile/help/contact/template\", function(){ return i(\"customer-site/mobile/help/contact/template.hbs\");});\nd(\"customer-site/mobile/help/contact/route\", function(){ return i(\"customer-site/mobile/help/contact/route.js\");});\nd(\"customer-site/mobile/help/index/template\", function(){ return i(\"customer-site/mobile/help/index/template.hbs\");});\nd(\"customer-site/mobile/help/index/controller\", function(){ return i(\"customer-site/mobile/help/index/controller.js\");});\nd(\"customer-site/mobile/help/index/route\", function(){ return i(\"customer-site/mobile/help/index/route.js\");});\nd(\"customer-site/models/automation/rules-builder/template\", function(){ return i(\"customer-site/models/automation/rules-builder/template.ts\");});\nd(\"customer-site/models/automation/schedule-builder/template\", function(){ return i(\"customer-site/models/automation/schedule-builder/template.ts\");});\nd(\"customer-site/models/enterprise/template\", function(){ return i(\"customer-site/models/enterprise/template.ts\");});\nd(\"customer-site/news-and-updates/template\", function(){ return i(\"customer-site/news-and-updates/template.hbs\");});\nd(\"customer-site/news-and-updates/route\", function(){ return i(\"customer-site/news-and-updates/route.ts\");});\nd(\"customer-site/not-found/template\", function(){ return i(\"customer-site/not-found/template.hbs\");});\nd(\"customer-site/not-found/route\", function(){ return i(\"customer-site/not-found/route.js\");});\nd(\"customer-site/notifications/manage-devices/edit/template\", function(){ return i(\"customer-site/notifications/manage-devices/edit/template.hbs\");});\nd(\"customer-site/notifications/manage-devices/edit/controller\", function(){ return i(\"customer-site/notifications/manage-devices/edit/controller.ts\");});\nd(\"customer-site/notifications/manage-devices/edit/route\", function(){ return i(\"customer-site/notifications/manage-devices/edit/route.ts\");});\nd(\"customer-site/notifications/manage-devices/index/template\", function(){ return i(\"customer-site/notifications/manage-devices/index/template.hbs\");});\nd(\"customer-site/notifications/manage-devices/index/controller\", function(){ return i(\"customer-site/notifications/manage-devices/index/controller.ts\");});\nd(\"customer-site/notifications/manage-devices/index/route\", function(){ return i(\"customer-site/notifications/manage-devices/index/route.ts\");});\nd(\"customer-site/smart-coverage/route\", function(){ return i(\"customer-site/smart-coverage/route.ts\");});\nd(\"customer-site/smart-coverage/index/template\", function(){ return i(\"customer-site/smart-coverage/index/template.hbs\");});\nd(\"customer-site/smart-coverage/index/controller\", function(){ return i(\"customer-site/smart-coverage/index/controller.ts\");});\nd(\"customer-site/smart-coverage/index/route\", function(){ return i(\"customer-site/smart-coverage/index/route.ts\");});\nd(\"customer-site/smart-coverage/select-properties/template\", function(){ return i(\"customer-site/smart-coverage/select-properties/template.hbs\");});\nd(\"customer-site/smart-coverage/select-properties/controller\", function(){ return i(\"customer-site/smart-coverage/select-properties/controller.ts\");});\nd(\"customer-site/smart-coverage/select-properties/route\", function(){ return i(\"customer-site/smart-coverage/select-properties/route.ts\");});\nd(\"customer-site/wizard-launch/template\", function(){ return i(\"customer-site/wizard-launch/template.hbs\");});\nd(\"customer-site/wizard-launch/controller\", function(){ return i(\"customer-site/wizard-launch/controller.ts\");});\nd(\"customer-site/wizard-launch/route\", function(){ return i(\"customer-site/wizard-launch/route.js\");});\nd(\"customer-site/routes/base-route\", function(){ return i(\"customer-site/routes/base-route.js\");});\nd(\"customer-site/routes/mixins/is-medium-width-page\", function(){ return i(\"customer-site/routes/mixins/is-medium-width-page.js\");});\nd(\"customer-site/categories/devices/already-linked/template\", function(){ return i(\"customer-site/categories/devices/already-linked/template.js\");});\nd(\"customer-site/categories/devices/already-linked/controller\", function(){ return i(\"customer-site/categories/devices/already-linked/controller.js\");});\nd(\"customer-site/categories/devices/already-linked/route\", function(){ return i(\"customer-site/categories/devices/already-linked/route.js\");});\nd(\"customer-site/categories/devices/complete/controller\", function(){ return i(\"customer-site/categories/devices/complete/controller.js\");});\nd(\"customer-site/categories/devices/complete/route\", function(){ return i(\"customer-site/categories/devices/complete/route.js\");});\nd(\"customer-site/categories/devices/default-notifications/template\", function(){ return i(\"customer-site/categories/devices/default-notifications/template.hbs\");});\nd(\"customer-site/categories/devices/default-notifications/controller\", function(){ return i(\"customer-site/categories/devices/default-notifications/controller.js\");});\nd(\"customer-site/categories/devices/default-notifications/route\", function(){ return i(\"customer-site/categories/devices/default-notifications/route.js\");});\nd(\"customer-site/categories/devices/different-accounts/controller\", function(){ return i(\"customer-site/categories/devices/different-accounts/controller.js\");});\nd(\"customer-site/categories/devices/different-accounts/route\", function(){ return i(\"customer-site/categories/devices/different-accounts/route.js\");});\nd(\"customer-site/categories/devices/index/controller\", function(){ return i(\"customer-site/categories/devices/index/controller.js\");});\nd(\"customer-site/categories/devices/index/route\", function(){ return i(\"customer-site/categories/devices/index/route.js\");});\nd(\"customer-site/categories/devices/link-complete/template\", function(){ return i(\"customer-site/categories/devices/link-complete/template.js\");});\nd(\"customer-site/categories/devices/link-complete/route\", function(){ return i(\"customer-site/categories/devices/link-complete/route.js\");});\nd(\"customer-site/categories/devices/link-congratulations/template\", function(){ return i(\"customer-site/categories/devices/link-congratulations/template.js\");});\nd(\"customer-site/categories/devices/link-congratulations/route\", function(){ return i(\"customer-site/categories/devices/link-congratulations/route.js\");});\nd(\"customer-site/categories/devices/link-in-progress/template\", function(){ return i(\"customer-site/categories/devices/link-in-progress/template.js\");});\nd(\"customer-site/categories/devices/link-in-progress/route\", function(){ return i(\"customer-site/categories/devices/link-in-progress/route.js\");});\nd(\"customer-site/categories/devices/link-start/template\", function(){ return i(\"customer-site/categories/devices/link-start/template.js\");});\nd(\"customer-site/categories/devices/link-start/route\", function(){ return i(\"customer-site/categories/devices/link-start/route.js\");});\nd(\"customer-site/categories/devices/link-unsuccessful/template\", function(){ return i(\"customer-site/categories/devices/link-unsuccessful/template.js\");});\nd(\"customer-site/categories/devices/link-unsuccessful/controller\", function(){ return i(\"customer-site/categories/devices/link-unsuccessful/controller.js\");});\nd(\"customer-site/categories/devices/link-unsuccessful/route\", function(){ return i(\"customer-site/categories/devices/link-unsuccessful/route.js\");});\nd(\"customer-site/categories/devices/mount/template\", function(){ return i(\"customer-site/categories/devices/mount/template.js\");});\nd(\"customer-site/categories/devices/mount/controller\", function(){ return i(\"customer-site/categories/devices/mount/controller.js\");});\nd(\"customer-site/categories/devices/mount/route\", function(){ return i(\"customer-site/categories/devices/mount/route.js\");});\nd(\"customer-site/categories/devices/name/controller\", function(){ return i(\"customer-site/categories/devices/name/controller.js\");});\nd(\"customer-site/categories/devices/name/route\", function(){ return i(\"customer-site/categories/devices/name/route.js\");});\nd(\"customer-site/categories/devices/start-info/template\", function(){ return i(\"customer-site/categories/devices/start-info/template.js\");});\nd(\"customer-site/categories/devices/start-info/route\", function(){ return i(\"customer-site/categories/devices/start-info/route.js\");});\nd(\"customer-site/categories/devices/start/controller\", function(){ return i(\"customer-site/categories/devices/start/controller.js\");});\nd(\"customer-site/categories/devices/start/route\", function(){ return i(\"customer-site/categories/devices/start/route.js\");});\nd(\"customer-site/categories/devices/troubleshoot/template\", function(){ return i(\"customer-site/categories/devices/troubleshoot/template.js\");});\nd(\"customer-site/categories/devices/troubleshoot/controller\", function(){ return i(\"customer-site/categories/devices/troubleshoot/controller.js\");});\nd(\"customer-site/categories/devices/troubleshoot/route\", function(){ return i(\"customer-site/categories/devices/troubleshoot/route.js\");});\nd(\"customer-site/categories/index/controller\", function(){ return i(\"customer-site/categories/index/controller.js\");});\nd(\"customer-site/categories/index/route\", function(){ return i(\"customer-site/categories/index/route.js\");});\nd(\"customer-site/choose-device/delete-device/template\", function(){ return i(\"customer-site/choose-device/delete-device/template.js\");});\nd(\"customer-site/choose-device/delete-device/controller\", function(){ return i(\"customer-site/choose-device/delete-device/controller.js\");});\nd(\"customer-site/choose-device/delete-device/route\", function(){ return i(\"customer-site/choose-device/delete-device/route.js\");});\nd(\"customer-site/choose-device/index/template\", function(){ return i(\"customer-site/choose-device/index/template.js\");});\nd(\"customer-site/choose-device/index/controller\", function(){ return i(\"customer-site/choose-device/index/controller.js\");});\nd(\"customer-site/choose-device/index/route\", function(){ return i(\"customer-site/choose-device/index/route.js\");});\nd(\"customer-site/choose-device/troubleshoot-missing/template\", function(){ return i(\"customer-site/choose-device/troubleshoot-missing/template.js\");});\nd(\"customer-site/choose-device/troubleshoot-missing/controller\", function(){ return i(\"customer-site/choose-device/troubleshoot-missing/controller.js\");});\nd(\"customer-site/choose-device/troubleshoot-missing/route\", function(){ return i(\"customer-site/choose-device/troubleshoot-missing/route.js\");});\nd(\"customer-site/v1/controller\", function(){ return i(\"customer-site/v1/controller.js\");});\nd(\"customer-site/v1/route\", function(){ return i(\"customer-site/v1/route.js\");});\nd(\"customer-site/account-information/template\", function(){ return i(\"customer-site/account-information/template.js\");});\nd(\"customer-site/account-information/controller\", function(){ return i(\"customer-site/account-information/controller.js\");});\nd(\"customer-site/account-information/route\", function(){ return i(\"customer-site/account-information/route.js\");});\nd(\"customer-site/arming-reminder/template\", function(){ return i(\"customer-site/arming-reminder/template.js\");});\nd(\"customer-site/business-hours/controller\", function(){ return i(\"customer-site/business-hours/controller.js\");});\nd(\"customer-site/business-hours/route\", function(){ return i(\"customer-site/business-hours/route.js\");});\nd(\"customer-site/communication-preferences/template\", function(){ return i(\"customer-site/communication-preferences/template.js\");});\nd(\"customer-site/communication-preferences/controller\", function(){ return i(\"customer-site/communication-preferences/controller.js\");});\nd(\"customer-site/communication-preferences/route\", function(){ return i(\"customer-site/communication-preferences/route.js\");});\nd(\"customer-site/email-verification/template\", function(){ return i(\"customer-site/email-verification/template.js\");});\nd(\"customer-site/email-verification/controller\", function(){ return i(\"customer-site/email-verification/controller.js\");});\nd(\"customer-site/email-verification/route\", function(){ return i(\"customer-site/email-verification/route.js\");});\nd(\"customer-site/login-name-confirmation/template\", function(){ return i(\"customer-site/login-name-confirmation/template.js\");});\nd(\"customer-site/login-name-confirmation/controller\", function(){ return i(\"customer-site/login-name-confirmation/controller.js\");});\nd(\"customer-site/login-name-confirmation/route\", function(){ return i(\"customer-site/login-name-confirmation/route.js\");});\nd(\"customer-site/outside-working-hours/template\", function(){ return i(\"customer-site/outside-working-hours/template.js\");});\nd(\"customer-site/outside-working-hours/controller\", function(){ return i(\"customer-site/outside-working-hours/controller.js\");});\nd(\"customer-site/outside-working-hours/route\", function(){ return i(\"customer-site/outside-working-hours/route.js\");});\nd(\"customer-site/password/template\", function(){ return i(\"customer-site/password/template.js\");});\nd(\"customer-site/password/controller\", function(){ return i(\"customer-site/password/controller.js\");});\nd(\"customer-site/password/route\", function(){ return i(\"customer-site/password/route.js\");});\nd(\"customer-site/property-information/template\", function(){ return i(\"customer-site/property-information/template.js\");});\nd(\"customer-site/property-information/controller\", function(){ return i(\"customer-site/property-information/controller.js\");});\nd(\"customer-site/property-information/route\", function(){ return i(\"customer-site/property-information/route.js\");});\nd(\"customer-site/push-migration/template\", function(){ return i(\"customer-site/push-migration/template.js\");});\nd(\"customer-site/push-migration/controller\", function(){ return i(\"customer-site/push-migration/controller.js\");});\nd(\"customer-site/recognized-devices/device-link-request/template\", function(){ return i(\"customer-site/recognized-devices/device-link-request/template.js\");});\nd(\"customer-site/recognized-devices/device-link-request/controller\", function(){ return i(\"customer-site/recognized-devices/device-link-request/controller.js\");});\nd(\"customer-site/recognized-devices/device-link-request/route\", function(){ return i(\"customer-site/recognized-devices/device-link-request/route.js\");});\nd(\"customer-site/recognized-devices/index/template\", function(){ return i(\"customer-site/recognized-devices/index/template.js\");});\nd(\"customer-site/recognized-devices/index/controller\", function(){ return i(\"customer-site/recognized-devices/index/controller.js\");});\nd(\"customer-site/recognized-devices/index/route\", function(){ return i(\"customer-site/recognized-devices/index/route.js\");});\nd(\"customer-site/security-question/template\", function(){ return i(\"customer-site/security-question/template.js\");});\nd(\"customer-site/security-question/controller\", function(){ return i(\"customer-site/security-question/controller.js\");});\nd(\"customer-site/security-question/route\", function(){ return i(\"customer-site/security-question/route.js\");});\nd(\"customer-site/system-information/template\", function(){ return i(\"customer-site/system-information/template.js\");});\nd(\"customer-site/system-information/controller\", function(){ return i(\"customer-site/system-information/controller.js\");});\nd(\"customer-site/system-information/route\", function(){ return i(\"customer-site/system-information/route.js\");});\nd(\"customer-site/two-factor-authentication/index/controller\", function(){ return i(\"customer-site/two-factor-authentication/index/controller.js\");});\nd(\"customer-site/two-factor-authentication/index/route\", function(){ return i(\"customer-site/two-factor-authentication/index/route.js\");});\nd(\"customer-site/two-factor-authentication/overview/controller\", function(){ return i(\"customer-site/two-factor-authentication/overview/controller.js\");});\nd(\"customer-site/two-factor-authentication/overview/route\", function(){ return i(\"customer-site/two-factor-authentication/overview/route.js\");});\nd(\"customer-site/two-factor-authentication/setup/controller\", function(){ return i(\"customer-site/two-factor-authentication/setup/controller.js\");});\nd(\"customer-site/two-factor-authentication/setup/route\", function(){ return i(\"customer-site/two-factor-authentication/setup/route.js\");});\nd(\"customer-site/two-factor-authentication/two-factor-challenge-flow/controller\", function(){ return i(\"customer-site/two-factor-authentication/two-factor-challenge-flow/controller.js\");});\nd(\"customer-site/two-factor-authentication/two-factor-challenge-flow/route\", function(){ return i(\"customer-site/two-factor-authentication/two-factor-challenge-flow/route.js\");});\nd(\"customer-site/wifi-setup/template\", function(){ return i(\"customer-site/wifi-setup/template.js\");});\nd(\"customer-site/wifi-setup/route\", function(){ return i(\"customer-site/wifi-setup/route.js\");});\nd(\"customer-site/wifi-setup/index/controller\", function(){ return i(\"customer-site/wifi-setup/index/controller.js\");});\nd(\"customer-site/wifi-setup/manual-setup/controller\", function(){ return i(\"customer-site/wifi-setup/manual-setup/controller.js\");});\nd(\"customer-site/wifi-setup/manual-setup/route\", function(){ return i(\"customer-site/wifi-setup/manual-setup/route.js\");});\n\n\n\nw._embroiderRouteBundles_ = [\n {\n names: [\"access-control.access-plans\",\"access-control.access-plans.edit\",\"access-control.access-plans.index\",\"access-control.access-plans.new\",\"access-control.access-points\",\"access-control.access-points.edit\",\"access-control.access-points.index\",\"access-control.badge-management\",\"access-control.elevators\",\"access-control.elevators.index\",\"access-control.holidays.edit\",\"access-control.index\",\"access-control.logins\",\"access-control.logins.edit\",\"access-control.logins.index\",\"access-control.system-mode-configuration\",\"access-control.system-mode-configuration.lockdown-configuration.edit\",\"access-control.system-mode-configuration.lockdown-configuration.index\",\"access-control.timetables.edit\",\"access-control.timetables.index\",\"access-control.users\",\"access-control.users.bulk-create\",\"access-control.users.edit-not-supported\",\"access-control.users.edit\",\"access-control.users.edit.access-plans\",\"access-control.users.edit.add-contact\",\"access-control.users.edit.contact-information\",\"access-control.users.edit.expiring-credentials\",\"access-control.users.edit.index\",\"access-control.users.edit.language\",\"access-control.users.edit.link-login\",\"access-control.users.edit.user-attributes.edit\",\"access-control.users.edit.user-attributes.index\",\"access-control.users.edit.user-group\",\"access-control.users.edit.user-information\",\"access-control.users.edit.username\",\"access-control.users.index\",\"access-control.users.merge-users-list\",\"access-control.users.merge-users-preview\",\"access-control.users.promote-user\",\"access-control.users.user-groups.edit\",\"access-control.users.user-groups.index\",\"access-control.users.user-groups.new\"],\n load: function() {\n return import(\"customer-site/assets/_route_/access-control.access-plans.js\");\n }\n },\n {\n names: [\"activity.alarm-recap\",\"activity.event-history\",\"activity.event-history.image\",\"activity.event-history.index\",\"activity.event-history.snapshot\",\"activity.event-history.thumbnail\",\"activity.event-history.video\",\"activity.extended-activity-history\",\"activity.heat-map\",\"activity.highlights\"],\n load: function() {\n return import(\"customer-site/assets/_route_/activity.alarm-recap.js\");\n }\n },\n {\n names: [\"automation.presence-state-settings\",\"automation.remotes.edit\",\"automation.remotes.index\",\"automation.rules.builder\",\"automation.rules.builder.action\",\"automation.rules.builder.action.details\",\"automation.rules.builder.action.details.chimes\",\"automation.rules.builder.action.details.index\",\"automation.rules.builder.action.details.lights\",\"automation.rules.builder.action.index\",\"automation.rules.builder.extra-rule-option\",\"automation.rules.builder.index\",\"automation.rules.builder.mobile-no-support\",\"automation.rules.builder.notifications.index\",\"automation.rules.builder.notifications.new-contact\",\"automation.rules.builder.restrictions\",\"automation.rules.builder.trigger.details\",\"automation.rules.builder.trigger.details.access-control\",\"automation.rules.builder.trigger.details.geo-location\",\"automation.rules.builder.trigger.details.index\",\"automation.rules.builder.trigger.index\",\"automation.rules.index\",\"automation.scenes.index\",\"automation.schedules.builder\",\"automation.schedules.builder.action.details\",\"automation.schedules.builder.action.details.lights\",\"automation.schedules.builder.action.index\",\"automation.schedules.builder.additional-option\",\"automation.schedules.builder.follow-up\",\"automation.schedules.builder.index\",\"automation.schedules.builder.mobile-no-support\",\"automation.schedules.builder.time\",\"automation.schedules.index\",\"automation.schedules.wifi\",\"automation.smart-arming\",\"automation.smart-arming.arm-edit\",\"automation.smart-arming.disarm-edit\",\"automation.smart-arming.index\"],\n load: function() {\n return import(\"customer-site/assets/_route_/automation.presence-state-settings.js\");\n }\n },\n {\n names: [\"commercial.arming-schedules\",\"commercial.arming-schedules.create\",\"commercial.arming-schedules.edit\",\"commercial.arming-schedules.index\",\"commercial.reports.catalog\",\"commercial.reports.edit\",\"commercial.reports.edit.access-history-report\",\"commercial.reports.edit.alarms-issues-report\",\"commercial.reports.edit.business-activity-analytics-report\",\"commercial.reports.edit.user-activity-report\",\"commercial.reports.edit.user-summary-report\",\"commercial.reports.edit.video-health-report\",\"commercial.reports.index\",\"commercial.reports.webview\",\"commercial.temperatures.index\",\"commercial.temperatures.profiles.edit\",\"commercial.temperatures.profiles.index\",\"commercial.temperatures.reports\",\"commercial.temperatures.summary.edit\",\"commercial.temperatures.summary.index\"],\n load: function() {\n return import(\"customer-site/assets/_route_/commercial.arming-schedules.js\");\n }\n },\n {\n names: [\"discover.content\",\"discover.index\"],\n load: function() {\n return import(\"customer-site/assets/_route_/discover.content.js\");\n }\n },\n {\n names: [\"enterprise.access-control.access-plans\",\"enterprise.access-control.access-plans.edit\",\"enterprise.access-control.access-plans.index\",\"enterprise.access-control.access-plans.new\",\"enterprise.access-control.access-points\",\"enterprise.access-control.access-points.edit\",\"enterprise.access-control.access-points.index\",\"enterprise.access-control.elevators\",\"enterprise.access-control.elevators.index\",\"enterprise.access-control.holidays.edit\",\"enterprise.access-control.index\",\"enterprise.access-control.logins.add-enterprise-logins-options\",\"enterprise.access-control.logins.associate\",\"enterprise.access-control.logins.associate.multi-group-login\",\"enterprise.access-control.logins.edit\",\"enterprise.access-control.logins.edit.edit-scheduled-device-login\",\"enterprise.access-control.logins.edit.multi-group-login\",\"enterprise.access-control.logins.elevate-logins\",\"enterprise.access-control.logins.index\",\"enterprise.access-control.logins.new-login\",\"enterprise.access-control.logins.new-login.new-multi-group-login\",\"enterprise.access-control.logins.new-login.new-scheduled-device-login\",\"enterprise.access-control.system-mode-configuration.lockdown-configuration.edit\",\"enterprise.access-control.system-mode-configuration.lockdown-configuration.index\",\"enterprise.access-control.users\",\"enterprise.access-control.users.bulk-create\",\"enterprise.access-control.users.edit-not-supported\",\"enterprise.access-control.users.edit\",\"enterprise.access-control.users.edit.access-plans\",\"enterprise.access-control.users.edit.add-contact\",\"enterprise.access-control.users.edit.contact-information\",\"enterprise.access-control.users.edit.expiring-credentials\",\"enterprise.access-control.users.edit.index\",\"enterprise.access-control.users.edit.language\",\"enterprise.access-control.users.edit.link-login\",\"enterprise.access-control.users.edit.user-attributes.edit\",\"enterprise.access-control.users.edit.user-attributes.index\",\"enterprise.access-control.users.edit.user-group\",\"enterprise.access-control.users.edit.user-information\",\"enterprise.access-control.users.edit.username\",\"enterprise.access-control.users.index\",\"enterprise.access-control.users.merge-users-list\",\"enterprise.access-control.users.merge-users-preview\",\"enterprise.access-control.users.promote-user\",\"enterprise.access-control.users.user-groups.edit\",\"enterprise.access-control.users.user-groups.index\",\"enterprise.access-control.users.user-groups.new\",\"enterprise.activity.event-history\",\"enterprise.activity.event-history.image\",\"enterprise.activity.event-history.index\",\"enterprise.activity.event-history.video\",\"enterprise.activity.extended-activity-history\",\"enterprise.activity.group-event-history\",\"enterprise.alerts-issues\",\"enterprise.groups.add-location\",\"enterprise.groups.index\",\"enterprise.groups.new-enterprise\",\"enterprise.groups.new-group\",\"enterprise.locations\",\"enterprise.locations.device-access\",\"enterprise.locations.fleet\",\"enterprise.locations.index\",\"enterprise.locations.location\",\"enterprise.locations.location.access-points\",\"enterprise.locations.location.edit.index\",\"enterprise.locations.location.edit.users\",\"enterprise.locations.location.index\",\"enterprise.locations.location.manage-residents-v2\",\"enterprise.locations.location.manage-residents\",\"enterprise.locations.location.manual-move-in\",\"enterprise.locations.location.panel\",\"enterprise.locations.location.thermostats\",\"enterprise.locations.occupancy\",\"enterprise.locations.personal-safety\",\"enterprise.locations.summary\",\"enterprise.locations.temperatures\",\"enterprise.locations.thermostats\",\"enterprise.locations.video\",\"enterprise.logins.add-enterprise-logins-options\",\"enterprise.logins.associate\",\"enterprise.logins.associate.multi-group-login\",\"enterprise.logins.edit\",\"enterprise.logins.edit.edit-scheduled-device-login\",\"enterprise.logins.edit.multi-group-login\",\"enterprise.logins.elevate-logins\",\"enterprise.logins.index\",\"enterprise.logins.new-login\",\"enterprise.logins.new-login.new-multi-group-login\",\"enterprise.logins.new-login.new-scheduled-device-login\",\"enterprise.multi-group-settings\",\"enterprise.overview.community-dashboard\",\"enterprise.overview.locations\",\"enterprise.reports.catalog\",\"enterprise.reports.edit\",\"enterprise.reports.edit.access-history-report\",\"enterprise.reports.edit.alarms-issues-report\",\"enterprise.reports.edit.battery-level-report\",\"enterprise.reports.edit.business-activity-analytics-report\",\"enterprise.reports.edit.self-guided-tours-report\",\"enterprise.reports.edit.trouble-condition-details-report\",\"enterprise.reports.edit.trouble-condition-report\",\"enterprise.reports.edit.user-activity-report\",\"enterprise.reports.edit.user-summary-report\",\"enterprise.reports.edit.video-health-report\",\"enterprise.reports.index\",\"enterprise.settings\",\"enterprise.settings.access-control-restricted-access\",\"enterprise.settings.access-settings\",\"enterprise.settings.active-directory-setup\",\"enterprise.settings.active-directory-setup.active-directory-authentication-provider-token\",\"enterprise.settings.active-directory-setup.active-directory-bulk-login-mapping\",\"enterprise.settings.active-directory-setup.active-directory-bulk-plan-mapping\",\"enterprise.settings.active-directory-setup.active-directory-enterprise-group-mapping\",\"enterprise.settings.active-directory-setup.active-directory-group-to-plan-mapping\",\"enterprise.settings.active-directory-setup.active-directory-location-group-mapping\",\"enterprise.settings.active-directory-setup.index\",\"enterprise.settings.arming-schedule-templates.apply\",\"enterprise.settings.arming-schedule-templates.edit-arming-schedule\",\"enterprise.settings.arming-schedule-templates.edit\",\"enterprise.settings.arming-schedule-templates.index\",\"enterprise.settings.auto-relock\",\"enterprise.settings.automatic-panel-arming\",\"enterprise.settings.automatically-enable-background-capture\",\"enterprise.settings.backup-codes\",\"enterprise.settings.business-hour-templates\",\"enterprise.settings.communication-settings\",\"enterprise.settings.company-logo\",\"enterprise.settings.company-name\",\"enterprise.settings.customize-welcome-email\",\"enterprise.settings.delete-expired-users\",\"enterprise.settings.delete-inactive-users\",\"enterprise.settings.energy-saver-rules\",\"enterprise.settings.energy-settings\",\"enterprise.settings.guest-login-access\",\"enterprise.settings.house-ready-early\",\"enterprise.settings.index\",\"enterprise.settings.login-templates\",\"enterprise.settings.managed-account-access\",\"enterprise.settings.mobile-badge\",\"enterprise.settings.new-business-hour-templates.apply\",\"enterprise.settings.new-business-hour-templates.edit\",\"enterprise.settings.new-business-hour-templates.index\",\"enterprise.settings.noise-monitor-settings-templates.edit\",\"enterprise.settings.noise-monitor-settings-templates.index\",\"enterprise.settings.noise-monitor-settings\",\"enterprise.settings.occupancy-based-pool-controller-rules.edit\",\"enterprise.settings.occupancy-based-pool-controller-rules.index\",\"enterprise.settings.occupancy-based-thermostat-rules.edit\",\"enterprise.settings.occupancy-based-thermostat-rules.index\",\"enterprise.settings.panel-settings\",\"enterprise.settings.permissions-and-integrations\",\"enterprise.settings.pool-control-filter-pump-schedules.edit\",\"enterprise.settings.pool-control-filter-pump-schedules.index\",\"enterprise.settings.preloaded-codes-for-user-creation\",\"enterprise.settings.property-management-integration\",\"enterprise.settings.schedule-email\",\"enterprise.settings.schedule-welcome-message\",\"enterprise.settings.self-guided-tours-appointment-length\",\"enterprise.settings.self-guided-tours-cc-verification\",\"enterprise.settings.self-guided-tours-checkpoint-id\",\"enterprise.settings.self-guided-tours-community-site-map\",\"enterprise.settings.self-guided-tours-configure-funnel-crm\",\"enterprise.settings.self-guided-tours-configure-knock-crm\",\"enterprise.settings.self-guided-tours-custom-url\",\"enterprise.settings.self-guided-tours-customer-logo\",\"enterprise.settings.self-guided-tours-gate-code\",\"enterprise.settings.self-guided-tours-geofence\",\"enterprise.settings.self-guided-tours-hours-of-operation\",\"enterprise.settings.self-guided-tours-support-phone\",\"enterprise.settings.self-guided-tours-terms-and-conditions\",\"enterprise.settings.self-guided-tours-web-primary-color\",\"enterprise.settings.self-guided-tours\",\"enterprise.settings.send-email-by-default\",\"enterprise.settings.send-follow-up-text\",\"enterprise.settings.support-phone-number\",\"enterprise.settings.temporary-access-code-availability-schedule\",\"enterprise.settings.temporary-access-code-duration\",\"enterprise.settings.temporary-access-code-settings\",\"enterprise.settings.temporary-access-codes\",\"enterprise.settings.thermostat-schedule-templates\",\"enterprise.settings.thermostat-settings-templates.edit\",\"enterprise.settings.thermostat-settings-templates.index\",\"enterprise.settings.user-code-times\",\"enterprise.settings.user-settings\",\"enterprise.settings.water-meter-configuration.edit\",\"enterprise.settings.water-meter-configuration.index\",\"enterprise.settings.water-settings\",\"enterprise.settings.welcome-message\",\"enterprise.users\",\"enterprise.users.edit\",\"enterprise.users.edit.access-period\",\"enterprise.users.edit.add-contact\",\"enterprise.users.edit.contact-information\",\"enterprise.users.edit.device-access\",\"enterprise.users.edit.device-access.access-type\",\"enterprise.users.edit.device-access.index\",\"enterprise.users.edit.device-access.location-devices\",\"enterprise.users.edit.device-access.user-code\",\"enterprise.users.edit.index\",\"enterprise.users.edit.language\",\"enterprise.users.edit.link-login\",\"enterprise.users.edit.new-user-add-contact-information\",\"enterprise.users.edit.not-supported\",\"enterprise.users.edit.user-attributes.edit\",\"enterprise.users.edit.user-attributes.index\",\"enterprise.users.edit.user-information\",\"enterprise.users.edit.user-type\",\"enterprise.users.edit.username\",\"enterprise.users.index\",\"enterprise.users.merge-users-list\",\"enterprise.users.merge-users-preview\",\"enterprise.video.advanced-video-search\",\"enterprise.video.camera-groups\",\"enterprise.video.camera-groups.edit\",\"enterprise.video.clips\",\"enterprise.video.clips.index\",\"enterprise.video.gallery\",\"enterprise.video.gallery.index\",\"enterprise.video.live-view\",\"enterprise.video.svr-timeline\",\"enterprise.video.thumbnail-search\"],\n load: function() {\n return import(\"customer-site/assets/_route_/enterprise.access-control.access-plans.js\");\n }\n },\n {\n names: [\"fleet.reports\",\"fleet.summary\",\"fleet.trip-history\"],\n load: function() {\n return import(\"customer-site/assets/_route_/fleet.reports.js\");\n }\n },\n {\n names: [\"home.ac-doors\",\"home.ac-doors.edit\",\"home.ac-doors.index\",\"home.ac-doors.rules\",\"home.ac-elevators\",\"home.ac-elevators.edit\",\"home.ac-elevators.index\",\"home.cc-control\",\"home.chimes\",\"home.chimes.index\",\"home.chimes.settings\",\"home.chimes.wireless-networks\",\"home.device-details\",\"home.feature-suggestions\",\"home.garage\",\"home.garage.edit\",\"home.garage.index\",\"home.garage.rules\",\"home.gates\",\"home.gates.edit\",\"home.gates.index\",\"home.gates.rules\",\"home.image-sensors.rules\",\"home.index\",\"home.lights\",\"home.lights.edit\",\"home.lights.group-details\",\"home.lights.index\",\"home.lights.rules\",\"home.lights.schedules\",\"home.locks\",\"home.locks.edit\",\"home.locks.index\",\"home.locks.rules\",\"home.mpers-devices\",\"home.mpers-devices.edit\",\"home.mpers-devices.index\",\"home.noise\",\"home.partitions\",\"home.partitions.arming-schedules\",\"home.partitions.edit\",\"home.partitions.index\",\"home.partitions.reports\",\"home.partitions.rules\",\"home.partitions.smart-arming\",\"home.sensors.reports\",\"home.sensors.rules\",\"home.shades\",\"home.shades.edit\",\"home.shades.index\",\"home.shades.schedules\",\"home.sump-pumps\",\"home.sump-pumps.edit\",\"home.sump-pumps.index\",\"home.switches\",\"home.switches.edit\",\"home.switches.index\",\"home.thermostats.boilers\",\"home.thermostats.edit\",\"home.thermostats.index\",\"home.thermostats.peak-protect\",\"home.thermostats.peak-protect.index\",\"home.thermostats.peak-protect.schedule\",\"home.thermostats.peak-protect.utility\",\"home.thermostats.reports\",\"home.thermostats.rules\",\"home.thermostats.schedules.edit\",\"home.thermostats.schedules.edit.index\",\"home.thermostats.schedules.edit.schedule-type\",\"home.thermostats.schedules.edit.setpoint\",\"home.thermostats.schedules.index\",\"home.thermostats.smart-schedule-audit\",\"home.thermostats.thermostat-grouping\",\"home.thermostats.thermostat-reward-program\",\"home.water\",\"home.water.edit\",\"home.water.index\",\"home.water.rules\",\"home.wellness.reports\"],\n load: function() {\n return import(\"customer-site/assets/_route_/home.ac-doors.js\");\n }\n },\n {\n names: [\"logins\",\"logins.edit\",\"logins.index\"],\n load: function() {\n return import(\"customer-site/assets/_route_/logins.js\");\n }\n },\n {\n names: [\"operator.index\",\"operator.personal-safety\",\"operator.select-alarm\"],\n load: function() {\n return import(\"customer-site/assets/_route_/operator.index.js\");\n }\n },\n {\n names: [\"settings.access-control-lockdown\",\"settings.access-control-restricted-access\",\"settings.account-management.index\",\"settings.account-management.move-portal-survey\",\"settings.account-management.move-portal-survey.completed\",\"settings.account-management.move-portal-survey.edit\",\"settings.account-management.move-portal-survey.index\",\"settings.account-management.user-slot-management\",\"settings.bluetooth.device-settings\",\"settings.bluetooth.device-settings.index\",\"settings.bluetooth.device-settings.partition-list\",\"settings.bluetooth.disarming-settings.device-list\",\"settings.bluetooth.disarming-settings.edit-disarm-timeout\",\"settings.bluetooth.disarming-settings.index\",\"settings.bluetooth.index\",\"settings.car\",\"settings.control-panel-settings.alarm-delay-settings\",\"settings.control-panel-settings.index\",\"settings.control-panel-settings.panel-audio\",\"settings.control-panel-settings.sensor-names\",\"settings.everbridge-integration.edit\",\"settings.everbridge-integration.index\",\"settings.face-recognition\",\"settings.index\",\"settings.login-information.email-address\",\"settings.login-information.index\",\"settings.login-information.language\",\"settings.login-information.login-name\",\"settings.login-information.multi-system-access.index\",\"settings.login-information.multi-system-access.setup\",\"settings.login-information.new-device-alerts\",\"settings.login-information.site-appearance\",\"settings.manage-devices.associated-devices\",\"settings.manage-devices.index\",\"settings.managed-account-access\",\"settings.mobile-settings\",\"settings.monitoring-station.index\",\"settings.monitoring-station.loading\",\"settings.monitoring-station.monitoring-certificate\",\"settings.monitoring-station.property-actions\",\"settings.monitoring-station.property-notes.index\",\"settings.monitoring-station.property-notes.property-note-edit\",\"settings.monitoring-station.video\",\"settings.noise-settings\",\"settings.panel-wifi.config\",\"settings.panel-wifi.index\",\"settings.panel-wifi.networks\",\"settings.voice.edit\",\"settings.voice.index\"],\n load: function() {\n return import(\"customer-site/assets/_route_/settings.access-control-lockdown.js\");\n }\n },\n {\n names: [\"sso.contact-us\",\"sso.custom\",\"sso.equipment-setup\",\"sso.home\",\"sso.move-portal\",\"sso.my-account\",\"sso.shop\",\"sso.support\"],\n load: function() {\n return import(\"customer-site/assets/_route_/sso.contact-us.js\");\n }\n },\n {\n names: [\"support.create\",\"support.feedback\",\"support.index\",\"support.service-appointments\",\"support.support-website\",\"support.upcoming-appointments\"],\n load: function() {\n return import(\"customer-site/assets/_route_/support.create.js\");\n }\n },\n {\n names: [\"users\",\"users.edit\",\"users.edit.access-period\",\"users.edit.add-contact\",\"users.edit.contact-information\",\"users.edit.device-access\",\"users.edit.face-recognition\",\"users.edit.face-recognition.index\",\"users.edit.face-recognition.invalid\",\"users.edit.face-recognition.modify\",\"users.edit.face-recognition.review\",\"users.edit.index\",\"users.edit.language\",\"users.edit.link-login\",\"users.edit.new-user-add-contact-information\",\"users.edit.not-supported\",\"users.edit.user-attributes.edit\",\"users.edit.user-attributes.index\",\"users.edit.user-information\",\"users.edit.user-type\",\"users.edit.username\",\"users.index\",\"users.merge-users-list\",\"users.merge-users-preview\",\"users.user-access-review\",\"users.user-access-review.edit\",\"users.user-access-review.edit.assign-user\",\"users.user-access-review.edit.index\",\"users.user-access-review.index\"],\n load: function() {\n return import(\"customer-site/assets/_route_/users.js\");\n }\n },\n {\n names: [\"video.webrtc-test\"],\n load: function() {\n return import(\"customer-site/assets/_route_/video.webrtc-test.js\");\n }\n },\n {\n names: [\"video.add-device-redirect\",\"video.advanced-video-search\",\"video.appearance-search-results\",\"video.business-activity-analytics\",\"video.business-activity-analytics.heat-mapping\",\"video.business-activity-analytics.index\",\"video.business-activity-analytics.reports\",\"video.business-activity-analytics.rule-group-list\",\"video.business-activity-analytics.rule-group\",\"video.business-activity-analytics.rule-list\",\"video.business-activity-analytics.rule\",\"video.camera-groups\",\"video.camera-groups.edit\",\"video.cameras\",\"video.cameras.camera\",\"video.cameras.camera.analytics\",\"video.cameras.camera.calibrate\",\"video.cameras.camera.calibrate.capture\",\"video.cameras.camera.calibrate.edit\",\"video.cameras.camera.calibrate.index\",\"video.cameras.camera.calibrate.review\",\"video.cameras.camera.index\",\"video.cameras.camera.post-install.chime-select\",\"video.cameras.camera.post-install.power-check\",\"video.cameras.camera.post-install.qualitative-power-check\",\"video.cameras.camera.post-install.wedge-select\",\"video.cameras.index\",\"video.classifier-visualization\",\"video.clip-feedback\",\"video.clips-usage-report\",\"video.clips\",\"video.clips.index\",\"video.drone-install\",\"video.familiar-subject-clip-feedback\",\"video.gallery\",\"video.gallery.index\",\"video.install-overview\",\"video.install-overview.index\",\"video.install-overview.install\",\"video.install-overview.replace\",\"video.intercom-contact\",\"video.intercom-contact.edit\",\"video.intercom-contact.enrollment\",\"video.intercom-contact.enrollment.edit\",\"video.intercom-contact.enrollment.index\",\"video.intercom-contact.enrollment.notifications\",\"video.intercom-contact.index\",\"video.intercom-contact.notifications\",\"video.international-tests\",\"video.live-view\",\"video.onboard\",\"video.onvif-install\",\"video.onvif-install.credentials\",\"video.onvif-install.index\",\"video.onvif-install.naming\",\"video.onvif-install.naming.edit\",\"video.onvif-install.naming.index\",\"video.onvif-install.terms-of-service\",\"video.rules.analytics\",\"video.rules.analytics.draw\",\"video.rules.analytics.draw.index\",\"video.rules.analytics.draw.v2\",\"video.rules.analytics.index\",\"video.rules.analytics.select\",\"video.rules.analytics.settings\",\"video.rules.index\",\"video.schedules.index\",\"video.schedules.onboard.edit\",\"video.schedules.svr.edit\",\"video.schedules.svr.select\",\"video.settings-overview\",\"video.settings.advanced-setup\",\"video.settings.battery-motion-sensitivity-settings\",\"video.settings.battery-status\",\"video.settings.camera\",\"video.settings.camera.alerts\",\"video.settings.camera.audio\",\"video.settings.camera.device-status\",\"video.settings.camera.general\",\"video.settings.camera.general.firmware\",\"video.settings.camera.general.index\",\"video.settings.camera.index\",\"video.settings.camera.lights-overview\",\"video.settings.camera.network-info\",\"video.settings.camera.network-info.index\",\"video.settings.camera.video-config\",\"video.settings.camera.video-config.clip-length\",\"video.settings.camera.video-config.clip-quality\",\"video.settings.camera.video-config.digital-fov\",\"video.settings.camera.video-config.image-settings\",\"video.settings.camera.video-config.index\",\"video.settings.camera.video-config.privacy-zones\",\"video.settings.camera.video-config.sd-card-info\",\"video.settings.camera.video-config.third-party-stream\",\"video.settings.camera.video-config.third-party-stream.edit\",\"video.settings.camera.video-config.third-party-stream.index\",\"video.settings.camera.video-config.varifocal-fov\",\"video.settings.digital-fov\",\"video.settings.enrollment-terms\",\"video.settings.familiar-subject\",\"video.settings.familiar-subject.faces.camera-access\",\"video.settings.familiar-subject.faces.feature-management\",\"video.settings.familiar-subject.faces.incorrect-photos\",\"video.settings.familiar-subject.faces.index\",\"video.settings.familiar-subject.faces.recent-images\",\"video.settings.familiar-subject.index\",\"video.settings.familiar-subject.review\",\"video.settings.familiar-subject.review.edit\",\"video.settings.familiar-subject.review.index\",\"video.settings.familiar-subject.review.notifications\",\"video.settings.familiar-subject.review.photos\",\"video.settings.familiar-subject.vehicles.camera-access\",\"video.settings.familiar-subject.vehicles.faq\",\"video.settings.familiar-subject.vehicles.feature-management\",\"video.settings.familiar-subject.vehicles.incorrect-photos\",\"video.settings.familiar-subject.vehicles.index\",\"video.settings.familiar-subject.vehicles.recent-images\",\"video.settings.intercom.add-directory\",\"video.settings.intercom.associated-device-select\",\"video.settings.intercom.connect-unit-to-system\",\"video.settings.intercom.create-directory\",\"video.settings.intercom.customize-directory\",\"video.settings.intercom.edit-directory\",\"video.settings.intercom.name-directory-list\",\"video.settings.intercom.qr-code\",\"video.settings.intercom.set-concierge\",\"video.settings.intercom.setup\",\"video.settings.intercom.video-device-select\",\"video.settings.light-triggers\",\"video.settings.lights\",\"video.settings.motion-configuration\",\"video.settings.motion-detection-test\",\"video.settings.motion-detection\",\"video.settings.privacy-zones\",\"video.settings.sd-card-management\",\"video.settings.signal-strength-info\",\"video.settings.stream-video-panel-v2\",\"video.settings.stream-video-panel\",\"video.settings.stream\",\"video.settings.stream.index\",\"video.settings.varifocal-fov\",\"video.settings.video-device-signal-strength\",\"video.svr-timeline\",\"video.thumbnail-search\",\"video.youtube-player\"],\n load: function() {\n return import(\"customer-site/assets/_route_/video.add-device-redirect.js\");\n }\n },\n {\n names: [\"visual-verification.live-view\",\"visual-verification.onboard-timeline\",\"visual-verification.responder\",\"visual-verification.svr-timeline\",\"visual-verification.v2\"],\n load: function() {\n return import(\"customer-site/assets/_route_/visual-verification.live-view.js\");\n }\n },\n {\n names: [\"wifi.devices.device-edit\",\"wifi.devices.index\",\"wifi.devices.profile-edit\",\"wifi.settings\"],\n load: function() {\n return import(\"customer-site/assets/_route_/wifi.devices.device-edit.js\");\n }\n },\n]\n\nw._embroiderEngineBundles_ = [\n {\n names: [\"@adc/add-device-engine\"],\n load: function() {\n return import(\"./_engine_/%40adc%2Fadd-device-engine.js\");\n }\n },\n {\n names: [\"@adc/customer-wizard-engine\"],\n load: function() {\n return import(\"./_engine_/%40adc%2Fcustomer-wizard-engine.js\");\n }\n },\n {\n names: [\"@adc/login-setup-engine\"],\n load: function() {\n return import(\"./_engine_/%40adc%2Flogin-setup-engine.js\");\n }\n },\n {\n names: [\"@adc/network-config-engine\"],\n load: function() {\n return import(\"./_engine_/%40adc%2Fnetwork-config-engine.js\");\n }\n },\n]\n\nif (!runningTests) {\n i(\"../app\").default.create({\"GTM_ID\":\"GTM-TQ5L39XF\",\"name\":\"customer-site\",\"version\":\"0.4.0+6af73ae2\"});\n}\n\n","/**\n * Dealer branding colors\n * Matches colors from @adc/common-sass/branding\n */\nexport const dealerBrands: { [key: string]: Record> } = {\n adc: {\n 'partition-disarmed': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'partition-disarmed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-away': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'partition-armed-away-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-stay': { light: '#ec720b', hc: '#bd5b09', dark: '#f68c32', darkHc: '#f68c32' },\n 'partition-armed-stay-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-night': { light: '#5b3d8c', hc: '#5b3d8c', dark: '#9578c4', darkHc: '#b49fd5' },\n 'partition-armed-night-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'partition-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-hidden-status': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'partition-hidden-status-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'garage-open': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'garage-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'garage-closed': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'garage-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'garage-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'garage-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'garage-hidden-status': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'garage-hidden-status-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'light-offline': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'light-offline-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'light-no-state': { light: '#8aa8cb' },\n 'light-off': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'light-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'light-on': { light: '#ffcd00', hc: '#8f7300', dark: '#ffd21a', darkHc: '#ffd21a' },\n 'light-on-text': { light: '#000' },\n\n 'lock-unlocked': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'lock-unlocked-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'lock-locked': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'lock-locked-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'lock-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'lock-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'lock-hidden-status': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'lock-hidden-status-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'access-control-open': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'access-control-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'access-control-closed': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'access-control-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'access-control-buzz': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'access-control-buzz-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'access-control-access': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'access-control-access-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'access-control-denied': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'access-control-denied-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'access-control-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'access-control-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'access-control-hidden-status': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'access-control-hidden-status-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'water-valve-open': { light: '#2071dd', hc: '#2071dd', dark: '#5895e7', darkHc: '#79aaec' },\n 'water-valve-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'water-valve-closed': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'water-valve-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'water-valve-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'water-valve-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'sump-pump-idle': { light: '#2071dd', hc: '#2071dd', dark: '#5895e7', darkHc: '#79aaec' },\n 'sump-pump-idle-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'sump-pump-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'sump-pump-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'sump-pump-critical': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'sump-pump-critical-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'sump-pump-running-critical': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'sump-pump-running-critical-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'sump-pump-running': { light: '#2071dd', hc: '#2071dd', dark: '#5895e7', darkHc: '#79aaec' },\n 'sump-pump-running-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'thermostat-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'thermostat-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-offline': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'thermostat-offline-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-off': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'thermostat-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-heat': { light: '#ec720b', hc: '#bd5b09', dark: '#f68c32', darkHc: '#f68c32' },\n 'thermostat-heat-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-cool': { light: '#22a1c1', hc: '#1b819b', dark: '#50b5ce', darkHc: '#50b5ce' },\n 'thermostat-cool-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-aux-heat': { light: '#ec720b', hc: '#bd5b09', dark: '#f68c32', darkHc: '#f68c32' },\n 'thermostat-aux-heat-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'shade-open': { light: '#008b8d', hc: '#008486', dark: '#29a6a8', darkHc: '#36ccce' },\n 'shade-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'shade-closed': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'shade-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'shade-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'shade-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'gate-open': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'gate-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'gate-closed': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'gate-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'gate-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'gate-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'gate-hidden-status': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'gate-hidden-status-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'switch-on': { light: '#23ab3f', hc: '#1c8832', dark: '#38cc63', darkHc: '#38cc63' },\n 'switch-on-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'switch-off': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'switch-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'switch-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'switch-unknown-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'mpers-device-pending': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'mpers-device-pending-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'mpers-device-active': { light: '#00c7b1', hc: '#008577', dark: '#00c7b1', darkHc: '#00c7b1' },\n 'mpers-device-active-text': { light: '#000' },\n 'mpers-device-charging': { light: '#057ac7', hc: '#045c95', dark: '#2da4f0', darkHc: '#54b4f3' },\n 'mpers-device-charging-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'mpers-device-panic': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'mpers-device-panic-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'mpers-device-fallDetected': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'mpers-device-fallDetected-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'mpers-device-noCommunication': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'mpers-device-noCommunication-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'mpers-device-criticalBattery': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'mpers-device-criticalBattery-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'mpers-device-lowBattery': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'mpers-device-lowBattery-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'water-meter-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'water-meter-unknown-text': { light: '#fff', hc: '#fff', dark: '#fff', darkHc: '#fff' },\n 'water-meter-offline': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'water-meter-offline-text': { light: '#fff', hc: '#fff', dark: '#fff', darkHc: '#fff' },\n 'water-meter-normal': { light: '#2071dd', hc: '#2071dd', dark: '#5895e7', darkHc: '#79aaec' },\n 'water-meter-normal-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'water-meter-leak': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'water-meter-leak-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'sensor-open': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'sensor-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'sensor-closed': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'sensor-closed-text': { light: '#fff', hc: '#fff', dark: '#fff', darkHc: '#fff' },\n 'sensor-idle': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'sensor-idle-text': { light: '#fff', hc: '#fff', dark: '#fff', darkHc: '#fff' },\n 'sensor-active': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'sensor-active-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'sensor-unknown': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'sensor-unknown-text': { light: '#fff', hc: '#fff', dark: '#fff', darkHc: '#fff' },\n\n 'noise-sensor-active': { light: '#d92c29', hc: '#d92c29', dark: '#e8524f', darkHc: '#ef8a88' },\n 'noise-sensor-active-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'noise-sensor-idle': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'noise-sensor-idle-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'noise-sensor-offline': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'noise-sensor-offline-text': { light: '#fff', hc: '#fff', dark: '#fff', darkHc: '#fff' }\n },\n fp: {\n 'partition-disarmed': { light: '#5abb62' },\n 'partition-disarmed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-away': { light: '#c41834' },\n 'partition-armed-away-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-stay': { light: '#f27244' },\n 'partition-armed-stay-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-night': { light: '#542faf' },\n 'partition-armed-night-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'garage-open': { light: '#5abb62' },\n 'garage-closed': { light: '#c41834' },\n\n 'light-no-state': { light: '#8aa8cb' },\n 'light-off': { light: '#333' },\n 'light-on': { light: '#f7b819' },\n\n 'lock-unlocked': { light: '#5abb62' },\n 'lock-locked': { light: '#c41834' },\n\n 'water-valve-open': { light: '#5abb62' },\n 'water-valve-closed': { light: '#c41834' },\n\n 'sump-pump-idle': { light: '#0087bf' },\n 'sump-pump-idle-text': { light: '#000', dark: '#fff', hc: '#000', darkHc: '#fff' },\n 'sump-pump-critical': { light: '#db2a17' },\n 'sump-pump-critical-text': { light: '#000', dark: '#fff', hc: '#000', darkHc: '#fff' },\n 'sump-pump-running-critical': { light: '#db2a17' },\n 'sump-pump-running-critical-text': { light: '#000', dark: '#fff', hc: '#000', darkHc: '#fff' },\n 'sump-pump-running': { light: '#0087bf' },\n 'sump-pump-running-text': { light: '#000', dark: '#fff', hc: '#000', darkHc: '#fff' },\n\n 'thermostat-off': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'thermostat-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-heat': { light: '#ec720b', hc: '#bd5b09', dark: '#f68c32', darkHc: '#f68c32' },\n 'thermostat-heat-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-cool': { light: '#22a1c1', hc: '#1b819b', dark: '#50b5ce', darkHc: '#50b5ce' },\n 'thermostat-cool-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-aux-heat': { light: '#ec720b', hc: '#bd5b09', dark: '#f68c32', darkHc: '#f68c32' },\n 'thermostat-aux-heat-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'shade-open': { light: '#008b8d', hc: '#008486', dark: '#29a6a8', darkHc: '#36ccce' },\n 'shade-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'shade-closed': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'shade-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'gate-open': { light: '#5abb62' },\n 'gate-closed': { light: '#c41834' },\n\n 'water-meter-normal': { light: '#0087bf' },\n 'water-meter-leak': { light: '#c41834' }\n },\n adt: {\n 'partition-disarmed': { light: '#00c35f' },\n 'partition-disarmed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-away': { light: '#0061aa' },\n 'partition-armed-away-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-stay': { light: '#0061aa' },\n 'partition-armed-stay-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-night': { light: '#542faf' },\n 'partition-armed-night-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'garage-open': { light: '#00c35f' },\n 'garage-closed': { light: '#0061aa' },\n 'garage-unknown': { light: '#e0e3e7' },\n\n 'light-offline': { light: '#e0e3e7' },\n 'light-no-state': { light: '#e0e3e7' },\n 'light-off': { light: '#888e91' },\n 'light-on': { light: '#ffd800' },\n\n 'lock-unlocked': { light: '#00c35f' },\n 'lock-locked': { light: '#0061aa' },\n 'lock-unknown': { light: '#e0e3e7' },\n\n 'water-valve-open': { light: '#0061aa' },\n 'water-valve-closed': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'water-valve-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'water-valve-unknown': { light: '#e0e3e7' },\n\n 'sump-pump-idle': { light: '#0061aa' },\n 'sump-pump-critical': { light: '#9a0a1d' },\n 'sump-pump-running-critical': { light: '#9a0a1d' },\n 'sump-pump-running': { light: '#0061aa' },\n\n 'thermostat-unknown': { light: '#e0e3e7' },\n 'thermostat-offline': { light: '#e0e3e7' },\n 'thermostat-off': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'thermostat-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'thermostat-heat': { light: '#ff6000' },\n 'thermostat-cool': { light: '#00d8d6' },\n 'thermostat-aux-heat': { light: '#ff6000' },\n\n 'shade-open': { light: '#008b8d', hc: '#008486', dark: '#29a6a8', darkHc: '#36ccce' },\n 'shade-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'shade-closed': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'shade-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'gate-open': { light: '#00c35f' },\n 'gate-closed': { light: '#0061aa' },\n 'gate-unknown': { light: '#e0e3e7' },\n\n 'water-meter-unknown': { light: '#e0e3e7' },\n 'water-meter-offline': { light: '#e0e3e7' },\n 'water-meter-normal': { light: '#0061aa' },\n 'water-meter-leak': { light: '#9a0a1d' },\n\n 'sensor-unknown': { light: '#e0e3e7' }\n },\n adtIntl: {\n 'partition-disarmed': { light: '#208925', hc: '#18671c', dark: '#469448', darkHc: '#86b187' },\n 'partition-disarmed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-away': { light: '#e22f24', hc: '#ab241b', dark: '#e4504a', darkHc: '#eb8c8a' },\n 'partition-armed-away-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-stay': { light: '#ec720b', hc: '#bd5b09', dark: '#f68c32', darkHc: '#f68c32' },\n 'partition-armed-stay-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-night': { light: '#5b3d8c', hc: '#5b3d8c', dark: '#9578c4', darkHc: '#b49fd5' },\n 'partition-armed-night-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-unknown': { light: '#767676', dark: '#575757', hc: '#a7a7aa', darkHc: '#c3c3c4' },\n 'partition-unknown-text': { light: '#fff', dark: '#000', hc: '#fff', darkHc: '#000' },\n\n 'garage-open': { light: '#208925' },\n 'garage-closed': { light: '#e22f24' },\n 'garage-unknown': { light: '#e0e3e7' },\n\n 'light-offline': { light: '#e0e3e7' },\n 'light-no-state': { light: '#e0e3e7' },\n 'light-off': { light: '#888e91' },\n 'light-on': { light: '#ffd800' },\n\n 'lock-unlocked': { light: '#208925' },\n 'lock-locked': { light: '#e22f24' },\n 'lock-unknown': { light: '#e0e3e7' },\n\n 'water-valve-open': { light: '#e22f24' },\n 'water-valve-closed': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'water-valve-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'water-valve-unknown': { light: '#e0e3e7' },\n\n 'sump-pump-idle': { light: '#e22f24' },\n 'sump-pump-critical': { light: '#9a0a1d' },\n 'sump-pump-running-critical': { light: '#9a0a1d' },\n 'sump-pump-running': { light: '#e22f24' },\n\n 'thermostat-unknown': { light: '#e0e3e7' },\n 'thermostat-offline': { light: '#e0e3e7' },\n 'thermostat-off': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'thermostat-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'shade-open': { light: '#008b8d', hc: '#008486', dark: '#29a6a8', darkHc: '#36ccce' },\n 'shade-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'shade-closed': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'shade-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'gate-open': { light: '#208925' },\n 'gate-closed': { light: '#e22f24' },\n 'gate-unknown': { light: '#e0e3e7' },\n\n 'water-meter-unknown': { light: '#e0e3e7' },\n 'water-meter-offline': { light: '#e0e3e7' },\n 'water-meter-normal': { light: '#e22f24' },\n 'water-meter-leak': { light: '#9a0a1d' },\n\n 'sensor-unknown': { light: '#e0e3e7' }\n },\n cpi: {\n // CPI uses all ADC coloring\n },\n guardian: {\n // Guardian uses all ADC coloring\n },\n aaa: {\n 'partition-disarmed': { light: '#009a49' },\n 'partition-disarmed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-away': { light: '#da291c' },\n 'partition-armed-away-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-stay': { light: '#ff7900' },\n 'partition-armed-stay-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'partition-armed-night': { light: '#00a0df' },\n 'partition-armed-night-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'garage-open': { light: '#009a49' },\n 'garage-closed': { light: '#da291c' },\n\n 'light-off': { light: '#6d6e71' },\n 'light-on': { light: '#ffb81d' },\n\n 'lock-unlocked': { light: '#009a49' },\n 'lock-locked': { light: '#da291c' },\n\n 'gate-open': { light: '#009a49' },\n 'gate-closed': { light: '#da291c' }\n },\n securitas: {\n 'partition-disarmed': { light: '#77ca96' },\n 'partition-armed-away': { light: '#fd566c' },\n 'partition-armed-stay': { light: '#ffa552' },\n 'partition-armed-stay-text': { light: '#000', dark: '#fff', hc: '#000', darkHc: '#fff' },\n 'partition-armed-night': { light: '#5b3d8c', hc: '#5b3d8c', dark: '#9578c4', darkHc: '#b49fd5' },\n 'partition-armed-night-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'garage-open': { light: '#77ca96' },\n 'garage-closed': { light: '#fd566c' },\n 'garage-unknown': { light: '#e0e3e7' },\n\n 'light-offline': { light: '#e0e3e7' },\n 'light-no-state': { light: '#e0e3e7' },\n 'light-off': { light: '#888e91' },\n 'light-on': { light: '#ffd800' },\n\n 'lock-unlocked': { light: '#77ca96' },\n 'lock-locked': { light: '#fd566c' },\n 'lock-unknown': { light: '#e0e3e7' },\n\n 'water-valve-open': { light: '#fd566c' },\n 'water-valve-closed': { light: '#767676', hc: '#575757', dark: '#a7a7aa', darkHc: '#c3c3c4' },\n 'water-valve-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'water-valve-unknown': { light: '#e0e3e7' },\n\n 'sump-pump-idle': { light: '#fd566c' },\n 'sump-pump-critical': { light: '#9a0a1d' },\n 'sump-pump-running-critical': { light: '#9a0a1d' },\n 'sump-pump-running': { light: '#fd566c' },\n\n 'thermostat-unknown': { light: '#e0e3e7' },\n 'thermostat-offline': { light: '#e0e3e7' },\n 'thermostat-off': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'thermostat-off-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'shade-open': { light: '#008b8d', hc: '#008486', dark: '#29a6a8', darkHc: '#36ccce' },\n 'shade-open-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n 'shade-closed': { light: '#333', hc: '#000', dark: '#ddddde', darkHc: '#fff' },\n 'shade-closed-text': { light: '#fff', hc: '#fff', dark: '#000', darkHc: '#000' },\n\n 'gate-open': { light: '#77ca96' },\n 'gate-closed': { light: '#fd566c' },\n 'gate-unknown': { light: '#e0e3e7' },\n\n 'water-meter-unknown': { light: '#e0e3e7' },\n 'water-meter-offline': { light: '#e0e3e7' },\n 'water-meter-normal': { light: '#fd566c' },\n 'water-meter-leak': { light: '#9a0a1d' },\n\n 'sensor-unknown': { light: '#e0e3e7' }\n }\n};\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { setProperties } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { FilterOption } from 'customer-site/components/automation/base-filter-bar/index';\n\nexport default class BaseAutomationController extends Controller {\n @service declare intl: ADCIntlService;\n\n queryParams = ['search', 'deviceType', 'filterTags'];\n\n /**\n * The rule device type to show.\n */\n deviceType: number | undefined;\n\n /**\n * The text to use when searching for rules.\n */\n search = '';\n\n /**\n * Tags that we want to filter the automation items by.\n */\n filterTags: FilterOption[] = [];\n\n /**\n * The filter tags as loaded from the server.\n */\n @tracked retrievedFilterTags: FilterOption[] = [];\n\n /**\n * The collection of {@link components.automation.FilterTagType} to show as filter buttons.\n */\n get availableFilterTags(): FilterOption[] {\n return this.retrievedFilterTags ?? [];\n }\n\n /**\n * A textual representation of this base automation item.\n */\n get typeText(): string {\n return this.intl.tc(this, 'type', {\n count: 1\n });\n }\n\n /**\n * Resets query parameters to their default values.\n */\n resetQueryParams(): void {\n setProperties(this, {\n deviceType: undefined,\n search: '',\n filterTags: []\n });\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from '../utils/ember';\nimport { VideoRule } from 'customer-site/enums/RuleDisplayType';\nimport AdcBaseRoute from '../classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type BaseAutomationItem from '../models/automation/base-automation-item';\nimport type AutomationPermissionsModel from '../models/automation/permission';\nimport type ContextManager from '../services/context-manager';\nimport type BaseAutomationController from './base-automation-controller';\n\nexport type BaseAutomationRouteModel = {\n permissions: AutomationPermissionsModel;\n items: ADCAsyncStoreQuery;\n};\n\nexport interface BaseAutomationRouteQueryParams {\n search: string;\n filterTags: number[];\n deviceType: number;\n globalDeviceId: string;\n}\n\nexport const queryParamConfig = {\n search: {\n replace: true,\n refreshModel: true\n },\n filterTags: {\n replace: true,\n refreshModel: true\n },\n deviceType: {\n refreshModel: true,\n type: 'number'\n },\n globalDeviceId: {\n replace: true,\n refreshModel: true\n }\n};\n\n/**\n * @classdesc\n * Base for routes that display {@link components.automation.rules.RulesCollection}.\n *\n * @abstract\n */\nexport default class BaseAutomationRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n\n /** @override */\n queryParams = queryParamConfig;\n\n /** @override */\n currentModel: BaseAutomationRouteModel | undefined;\n\n /**\n * The retrieved rules Permission model.\n */\n @tracked permissions: AutomationPermissionsModel | undefined;\n\n /**\n * Whether this account allows cloud recording.\n * Used to determine whether we need to load an account's video usage.\n */\n @computed('permissions.allowedRuleDisplays')\n get isCloudRecordingAllowed(): boolean {\n return !!this.permissions?.allowedRuleDisplays.includes(VideoRule);\n }\n\n /** @override */\n async beforeModel(transition: Transition): Promise {\n const params = this.paramsFor(this.routeName) as BaseAutomationRouteQueryParams,\n { filterTags, deviceType } = params;\n\n // Is array parameter double encoded?\n if (typeof filterTags === 'string') {\n // This is a bug fixed in 3.23 so remove when we upgrade.\n this.transitionTo({\n queryParams: {\n ...params,\n filterTags: JSON.parse(filterTags)\n }\n });\n }\n\n if (!this.permissions || isFullTransition(transition)) {\n const permissions = await this.store.queryRecord('automation/permission', {\n id: this.contextManager.getContextId(),\n deviceType: deviceType\n });\n this.permissions = permissions;\n }\n }\n\n /**\n * Returns the full path to the model that should be retrieved.\n *\n * @abstract\n */\n get itemModelPath(): string {\n logMissingAbstractMember(this, '\"itemModelPath\" getter');\n return '';\n }\n\n /** @override */\n model(params: BaseAutomationRouteQueryParams): BaseAutomationRouteModel {\n return {\n permissions: this.permissions as AutomationPermissionsModel,\n items: this.store.query(this.itemModelPath, {\n filter: params\n })\n };\n }\n\n /** @override */\n async setupController(\n controller: BaseAutomationController,\n model: BaseAutomationRouteModel,\n transition: Transition\n ): Promise {\n super.setupController(controller, model, transition);\n\n const items = (await model.items) as ADCRecordArray;\n set(controller, 'retrievedFilterTags', items.meta.filterTags);\n }\n\n /** @override */\n deactivate(transition: Transition): void {\n super.deactivate(transition);\n\n (this.controllerFor(this.routeName) as BaseAutomationController).resetQueryParams();\n }\n}\n","import { set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport RulesBuilderFilterController from 'customer-site/automation/rules/builder/filter-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type ActionType from 'customer-site/models/automation/rules-builder/action-type';\nimport type Rule from 'customer-site/models/automation/rules-builder/rule';\nimport type RuleTemplate from 'customer-site/models/automation/rules-builder/template';\nimport type TriggerType from 'customer-site/models/automation/rules-builder/trigger-type';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ntype RuleTypeKey = 'actionType' | 'triggerType';\ntype RuleType = ActionType | TriggerType;\n\n/**\n * @classdesc\n * Base controller for the rules builder.\n */\nexport default abstract class RulesBuilderBaseFeatureController extends RulesBuilderFilterController {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalsService;\n\n abstract incompatibleMessage(selectedId: string): Promise;\n\n async getEnabledTypes(templates: Promise, key: 'actionType' | 'triggerType'): Promise {\n const t = await templates;\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Need to await the relationship, so this should be replaced with `return (await Promise.all(t.map((t) => t[key]))).uniqBy('id')`.\n return t.mapBy(key).uniqBy('id');\n }\n\n /**\n * Used to Update the Trigger or Action Type for a rule.\n * Handles good, issue, and error selections.\n * Prompts the users if required.\n * @param items - buttons from SimpleBinary::ButtonList Component\n * @param rule - Current Rule\n * @param key - actiontype or triggertype to set\n * @param enabledTemplates - Good Path templates, used to determine if prompt and force are required\n * @param allTypes - All action/triggertypes shown to user\n * @param displayWarningHeader - Displays if issue or error path are selected\n * @param incompatibleMessage - function that determines which warning message to display\n * @param forceClear - Cleans the rule in the event of an issue or error path selection.\n * @param clearActionAndDevices - If different type is chosen need to clear out previous selection.\n */\n async updateType(\n items: BinaryListItem<{ id: string }>[],\n rule: Rule,\n key: RuleTypeKey,\n enabledTemplates: (ActionType | TriggerType)[],\n allTypes: RuleType[],\n displayWarningHeader: string,\n forceClear: () => void,\n clearActionAndDevices: () => void,\n confirmAction: () => void\n ): Promise {\n const currentId = rule.belongsTo(key).id(),\n selectedId = items.findBy('state')!.props.id ?? '-1';\n\n if (currentId === selectedId) {\n confirmAction();\n return;\n } else if (selectedId === '-1') {\n return;\n }\n\n const fnUpdate = (type?: RuleType) => set(rule, key, type as unknown as AsyncBelongsTo),\n fnFinally = () => {\n clearActionAndDevices();\n fnUpdate(allTypes.findBy('id', selectedId));\n confirmAction();\n };\n\n if (enabledTemplates.findBy('id', selectedId)) {\n fnFinally();\n return;\n }\n\n // Not a valid type given current rule selection\n const displayWarningMessage = await this.incompatibleMessage(String(selectedId));\n return this.modals.showConfirmationDialog(\n displayWarningHeader,\n displayWarningMessage,\n {\n text: this.intl.t('generic.continue'),\n css: 'btn-color-danger',\n action: () => {\n forceClear();\n fnFinally();\n }\n },\n {\n action: () => {\n // Need To Reset\n fnUpdate(allTypes.findBy('id', selectedId));\n fnUpdate(allTypes.findBy('id', currentId));\n }\n }\n );\n }\n}\n","import RulesBuilderFilterController from 'customer-site/automation/rules/builder/filter-controller';\nimport { MultipleDevices } from 'customer-site/enums/SelectionType';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\n\nimport type RuleDevice from 'customer-site/models/automation/rules-builder/device';\nimport type RuleEvent from 'customer-site/models/automation/rules-builder/event';\nimport type RuleExtraOption from 'customer-site/models/automation/rules-builder/extra-device-option';\nimport type Rule from 'customer-site/models/automation/rules-builder/rule';\nimport type RuleTemplate from 'customer-site/models/automation/rules-builder/template';\n\n/**\n * Base controller for the rules builder feature details.\n */\nexport default class RulesBuilderBaseFeatureDetailsController extends RulesBuilderFilterController {\n supportsMultiSelect(templates: Promise, isTrigger: boolean, rule: Rule): Promise {\n const typeKey = isTrigger ? 'triggerType' : 'actionType',\n deviceSelectionKey = isTrigger ? 'triggerSelectionType' : 'actionSelectionType',\n typeId = rule.belongsTo(typeKey).id();\n\n return templates.then((t) =>\n // WEB-16710 Fix this array method usage\n t.filterBy(`${typeKey}.id` as keyof RuleTemplate, typeId).isAny(deviceSelectionKey, MultipleDevices)\n );\n }\n\n /**\n * Determines what devices are valid for the currently selected rule\n * @param rule - current rule user has created\n * @param templates - List of possible templates\n * @param isTrigger - Determines which set of var names to use for filtering\n */\n getTemplateDevicesIds(rule: Rule, templates: Promise, isTrigger: boolean): Promise {\n const deviceKey = isTrigger ? 'triggerDevices' : 'actionDevices',\n eventKey = isTrigger ? 'triggerEvent' : 'actionEvent',\n eventId = rule.belongsTo(eventKey).id();\n templates = templates.then((t) =>\n eventId ? t.filter((template) => template.belongsTo(eventKey).id() == eventId) : t\n );\n return templates.then((t) => t.flatMap((td) => td.hasMany(deviceKey).ids()).uniq());\n }\n\n /**\n * Determines what devices are valid for the currently selected rule\n * @param rule - current rule user has created\n * @param templates - List of possible templates\n * @param isTrigger - Determines which set of var names to use for filtering\n */\n getTemplateExtraOptionIds(rule: Rule, templates: Promise, isTrigger: boolean): Promise {\n const extraOptionKey = isTrigger ? 'triggerExtraDeviceOptions' : 'actionExtraDeviceOptions',\n eventKey = isTrigger ? 'triggerEvent' : 'actionEvent',\n eventId = rule.belongsTo(eventKey).id();\n templates = templates.then((t) =>\n eventId ? t.filter((template) => template.belongsTo(eventKey).id() == eventId) : t\n );\n return templates.then((t) => t.flatMap((td) => td.hasMany(extraOptionKey).ids()).uniq());\n }\n\n /**\n * Determines what statuses are valid for the currently selected rule. If the rule has a extra option for the trigger,\n * return statuses from all templates with that option available.\n * Otherwise, return statuses from all templates that allow all of the selected trigger or action devices\n * @param rule - current rule user has created\n * @param templates - List of possible templates\n * @param isTrigger - Determines which set of var names to use for filtering\n */\n getTemplateStatuses(rule: Rule, templates: Promise, isTrigger: boolean): Promise {\n const eventKey = isTrigger ? 'triggerEvent' : 'actionEvent',\n ruleTriggerExtraOptionIds = rule.hasMany('triggerExtraDeviceOption').ids();\n\n if (ruleTriggerExtraOptionIds.length > 0) {\n templates = templates.then((t) =>\n t.filter((t) => {\n const templateTriggerExtraDeviceOptions = t.hasMany('triggerExtraDeviceOptions').ids();\n return ruleTriggerExtraOptionIds.every((e) => templateTriggerExtraDeviceOptions.includes(e));\n })\n );\n }\n\n const selectionType = isTrigger ? 'triggerSelectionType' : 'actionSelectionType',\n deviceKey = isTrigger ? 'triggerDevices' : 'actionDevices',\n deviceIds = rule.hasMany(deviceKey).ids();\n\n templates = templates.then((t) =>\n t.filter((t) => {\n // Filter For Multi-Select\n if (deviceIds.length > 1 && t.get(selectionType) != MultipleDevices) {\n return false;\n }\n\n // All Selected Devices are in template list\n const templateDeviceIds = t.hasMany(deviceKey).ids();\n return deviceIds.every((id) => templateDeviceIds.includes(id));\n })\n );\n\n return templates.then((template) => template.map((template) => template.belongsTo(eventKey).id()).uniq());\n }\n\n async availableStatuses(\n allEvents: Promise,\n enabledEvents: Promise,\n selectedEventId: string\n ): Promise[]> {\n const enabledEventsResolved = await enabledEvents,\n allEventsResolved = await allEvents;\n return allEventsResolved.map(\n ({ id, description, icon }) =>\n new BinaryListItem<{ id: string }>({\n label: description,\n icon: icon.icon,\n color: icon.color,\n state: selectedEventId === id,\n disabled: !enabledEventsResolved.includes(id),\n props: { id }\n })\n );\n }\n\n selectDevice(\n isTrigger: boolean,\n items: BinaryListItem<{ id: string; isExtraOption?: boolean; notSupported?: boolean }>[],\n rule: Rule,\n allDevices: RuleDevice[],\n allExtraOptions: RuleExtraOption[]\n ): { devices: RuleDevice[]; extraOption: RuleExtraOption[] } | undefined {\n const deviceKey = isTrigger ? 'triggerDevices' : 'actionDevices',\n extraOptionKey = isTrigger ? 'triggerExtraDeviceOption' : 'actionExtraDeviceOption',\n selectedDeviceIds = items\n .reject((i) => i.props.isExtraOption)\n .filterBy('state')\n .map((i) => i.props.id),\n selectedExtraOptionId = items\n .filter((i) => i.props.isExtraOption)\n .filterBy('state')\n .mapBy('props.id');\n // Are these devices already selected?\n if (\n rule.hasMany(deviceKey).ids().sort().join('|') === selectedDeviceIds.sort().join('|') &&\n rule.hasMany(extraOptionKey).ids().sort().join('|') === selectedExtraOptionId.sort().join('|')\n ) {\n return;\n }\n\n return {\n devices: allDevices.filter(({ id }) => selectedDeviceIds.includes(id)),\n extraOption: allExtraOptions.filter(({ id }) => selectedExtraOptionId.includes(id))\n };\n }\n\n selectStatus(\n isTrigger: boolean,\n items: BinaryListItem<{ id: string }>[],\n rule: Rule,\n allEvents: RuleEvent[]\n ): RuleEvent | undefined {\n const statusKey = isTrigger ? 'triggerEvent' : 'actionEvent',\n selectedEvent = items.findBy('state')?.props?.id;\n\n if (rule.belongsTo(statusKey).id() === selectedEvent) {\n return;\n }\n\n return allEvents.findBy('id', selectedEvent);\n }\n}\n","import Route from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\n\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type Rule from 'customer-site/models/automation/rules-builder/rule';\nimport type { RulesBuilderModel } from './route';\n\nexport default abstract class AutomationRulesBuilderFeatureDetailsIndexRoute extends Route {\n @service declare router: RouterService;\n\n /**\n * Returns the path to the route to use to edit the current feature.\n */\n abstract getFeatureRoute(model: Rule): string | Promise;\n\n /**\n * Returns the slug needed to transition to details page\n */\n abstract getFeatureRouteSlugs(model: Rule): string | Promise;\n\n /** @override */\n async afterModel(resolvedModel: RulesBuilderModel, transition: Transition): Promise {\n super.afterModel(resolvedModel, transition);\n\n const featureRoute = await this.getFeatureRoute(resolvedModel.rule);\n if (isPresent(featureRoute)) {\n const slug = await this.getFeatureRouteSlugs(resolvedModel.rule);\n this.router.transitionTo(featureRoute, slug);\n }\n }\n}\n","import { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../classes/base-route';\n\n/**\n * @classdesc\n * Base route for rules builder routes that edit trigger and action details.\n *\n * @abstract\n */\nexport default class BaseRulesBuilderFeatureDetailsRoute extends AdcBaseRoute {\n @service navigation;\n\n /**\n * Validates the passed model and returns the route ID to redirect to if model is invalid.\n *\n * @param {models.automation.rules.Rule} _model\n *\n * @returns Promise\n */\n // eslint-disable-next-line no-unused-vars\n async validateRuleModel(_model) {\n logMissingAbstractMember(this, '\"validateModel\" method');\n return undefined;\n }\n\n /**\n * Overridden to redirect to index route if the feature type has not been selected yet.\n *\n * @param {Object} model The route model.\n * @returns {Promise}\n *\n * @override\n * @ignore\n */\n async afterModel(model) {\n const indexRouteId = await this.validateRuleModel(model);\n\n // Is the model invalid?\n if (indexRouteId) {\n // Redirect to index route.\n const rule = await model.rule;\n this.navigation.transitionToRouteId(indexRouteId, rule.id || 'new');\n }\n }\n}\n","import EmberController from '@ember/controller';\nimport { action, setProperties } from '@ember/object';\nimport { getOwner } from '@ember/owner';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\nimport { EmberRulesBuilder } from '../../../enums/CustomerPageUrl';\n\nimport type Route from '@ember/routing/route';\nimport type RuleDevice from 'customer-site/models/automation/rules-builder/device';\nimport type Device from 'customer-site/models/automation/rules-builder/device';\nimport type ExtraDeviceOption from 'customer-site/models/automation/rules-builder/extra-device-option';\nimport type RuleTemplate from 'customer-site/models/automation/rules-builder/template';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type Navigation from 'customer-site/services/navigation';\nimport type { RulesBuilderModel } from './route';\n\n/**\n * @classdesc\n * Base controller for the rules builder.\n */\nexport default class RulesBuilderFilterController extends EmberController {\n @service declare contextManager: ContextManager;\n @service declare navigation: Navigation;\n\n declare model: RulesBuilderModel;\n\n /**\n * The ID of the root rules builder route.\n */\n rulesBuilderRouteId = EmberRulesBuilder;\n\n /**\n * Transitions to the supplied rule builder route, passing the required rule slug.\n * @param {number} routeId The ID of the route to transition to.\n */\n @action transitionToBuilderRoute(routeId: number): void {\n this.navigation.transitionToRouteId(\n routeId,\n undefined,\n undefined,\n (\n (getOwner(this)?.lookup('route:application') as Route).paramsFor('automation/rules/builder') as {\n [name: string]: [];\n }\n )['id_rule']\n );\n }\n\n validTriggerTemplates(\n includeEvents = true,\n includeDevices = true,\n includeExtraOptions = true\n ): Promise {\n const rule = this.model.rule,\n actionType = rule.belongsTo('actionType').id(),\n actionEvent = rule.belongsTo('actionEvent').id(),\n actionDevices = rule.hasMany('actionDevices').ids(),\n actionExtraOptionIds = rule.hasMany('actionExtraDeviceOption').ids(),\n hasMultipleDevices = actionDevices.length > 1;\n\n return this.model.ruleTemplates\n .then(\n (t) =>\n (actionType ? t.filter((t) => t.belongsTo('actionType').id() == actionType) : t) as RuleTemplate[]\n )\n .then((t) =>\n actionEvent && includeEvents ? t.filter((t) => t.belongsTo('actionEvent').id() == actionEvent) : t\n )\n .then((t) =>\n actionDevices && includeDevices\n ? t.filter((td) => {\n const templateDevices = td.hasMany('actionDevices').ids();\n return actionDevices.every((d: string) => templateDevices.includes(d));\n })\n : t\n )\n .then((t) =>\n actionExtraOptionIds && includeExtraOptions\n ? t.filter((td) => {\n const templateExtraOptionDevices = td.hasMany('actionExtraDeviceOptions').ids();\n return actionExtraOptionIds.every((d: string) => templateExtraOptionDevices.includes(d));\n })\n : t\n )\n .then((t) => t.filter((t) => (hasMultipleDevices ? t.actionSelectionType === 1 : true)));\n }\n\n validActionTemplates(\n includeEvents = true,\n includeDevices = true,\n includeExtraOptions = true\n ): Promise {\n const rule = this.model.rule,\n triggerType = rule.belongsTo('triggerType').id(),\n triggerEvent = rule.belongsTo('triggerEvent').id(),\n triggerDevices = rule.hasMany('triggerDevices').ids(),\n triggerExtraOptionIds = rule.hasMany('triggerExtraDeviceOption').ids(),\n hasMultipleDevices = triggerDevices.length > 1;\n\n return this.model.ruleTemplates\n .then(\n (t) =>\n (triggerType\n ? t.filter((t) => t.belongsTo('triggerType').id() == triggerType)\n : t) as RuleTemplate[]\n )\n .then((t) =>\n triggerEvent && includeEvents ? t.filter((t) => t.belongsTo('triggerEvent').id() == triggerEvent) : t\n )\n .then((t) =>\n triggerDevices && includeDevices\n ? t.filter((td) => {\n const templateDevices = td.hasMany('triggerDevices').ids();\n return triggerDevices.every((d: string) => templateDevices.includes(d));\n })\n : t\n )\n .then((t) =>\n triggerExtraOptionIds && includeExtraOptions\n ? t.filter((td) => {\n const templateExtraOptionDevices = td.hasMany('triggerExtraDeviceOptions').ids();\n return triggerExtraOptionIds.every((d: string) => templateExtraOptionDevices.includes(d));\n })\n : t\n )\n .then((t) => t.filter((t) => (hasMultipleDevices ? t.triggerSelectionType === 1 : true)));\n }\n\n async checkTriggerForPrePopulation(): Promise {\n const rule = this.model.rule,\n triggerType = rule.belongsTo('triggerType').id(),\n validTriggerTemplates = await this.validTriggerTemplates(),\n templates = validTriggerTemplates.filter((t) => t.belongsTo('triggerType').id() == triggerType);\n\n const possibleEvents = templates.map((t) => t.belongsTo('triggerEvent').id()).uniq();\n if (possibleEvents.length === 1) {\n setProperties(rule, {\n triggerEvent: templates[0].triggerEvent\n });\n }\n\n const selectableDevice = await this.getSingleLeft(templates, 'triggerDevices'),\n possibleDeviceCount = templates.flatMap((t) => t.hasMany('triggerDevices').ids()).uniq().length,\n selectableExtraDeviceOption = await this.getSingleLeft(templates, 'triggerExtraDeviceOptions'),\n selectableExtraDeviceOptionCount = templates\n .flatMap((t) => t.hasMany('triggerExtraDeviceOptions').ids())\n .uniq().length;\n\n if (selectableDevice && selectableExtraDeviceOptionCount === 0) {\n rule.triggerDevices.setObjects([selectableDevice as Device]);\n } else if (possibleDeviceCount === 0 && isPresent(selectableExtraDeviceOption)) {\n rule.triggerExtraDeviceOption.setObjects([selectableExtraDeviceOption as ExtraDeviceOption]);\n }\n }\n\n async checkActionForPrePopulation(): Promise {\n const rule = this.model.rule,\n actionType = rule.belongsTo('actionType').id(),\n validActionTemplates = await this.validActionTemplates(),\n templates = validActionTemplates.filter((t) => t.belongsTo('actionType').id() == actionType);\n\n const possibleEvents = templates.map((t) => t.belongsTo('actionEvent').id()).uniq();\n if (possibleEvents.length === 1) {\n setProperties(rule, {\n actionEvent: templates[0].actionEvent\n });\n }\n\n const selectableDevice = await this.getSingleLeft(templates, 'actionDevices'),\n possibleDeviceCount = templates.flatMap((t) => t.hasMany('actionDevices').ids()).uniq().length,\n selectableExtraDeviceOption = await this.getSingleLeft(templates, 'actionExtraDeviceOptions'),\n selectableExtraDeviceOptionCount = templates\n .flatMap((t) => t.hasMany('actionExtraDeviceOptions').ids())\n .uniq().length;\n\n if (isPresent(selectableDevice) && selectableExtraDeviceOptionCount === 0) {\n rule.actionDevices.setObjects([selectableDevice as Device]);\n } else if (possibleDeviceCount === 0 && isPresent(selectableExtraDeviceOption)) {\n rule.actionExtraDeviceOption.setObjects([selectableExtraDeviceOption as ExtraDeviceOption]);\n }\n }\n\n /**\n * Used by the auto complete to determine if there is one and only one possible device option a user can select when shown the trigger/action details page.\n * Will return a device if one and only one is found, null otherwise.\n *\n * Available template trigger/action devices are placed into an array and duplicates are removed.\n * @param templates\n * @param type\n */\n async getSingleLeft(\n templates: RuleTemplate[],\n type: 'triggerDevices' | 'actionDevices' | 'triggerExtraDeviceOptions' | 'actionExtraDeviceOptions'\n ): Promise {\n const ids = templates.flatMap((t) => t.hasMany(type).ids()).uniq();\n if (ids.length === 1) {\n const templateTypes: (RuleDevice | ExtraDeviceOption)[] =\n templates[0].hasMany(type)?.value() || (await templates[0].hasMany(type)?.reload());\n return templateTypes?.find((template) => template.id == ids[0]);\n }\n\n return undefined;\n }\n}\n","import ENV from 'customer-site/config/environment';\n\nconst breakpoints = ENV.screenBreakpoints;\n\nexport default {\n mobile: `(max-width: ${breakpoints.mobileMax}px)`,\n // Not sure if this is 100% right, but right now tabletPortrait is also part of tablet, so it is a more specific tablet size.\n tabletPortrait: `(min-width: ${breakpoints.mobileMax + 1}px) and (max-width: ${breakpoints.tabletPortraitMax}px)`,\n tablet: `(min-width: ${breakpoints.mobileMax + 1}px) and (max-width: ${breakpoints.tabletMax}px)`,\n desktop: `(min-width: ${breakpoints.tabletMax + 1}px) and (max-width: ${breakpoints.desktopMax}px)`,\n desktopLarge: `(min-width: ${breakpoints.desktopMax + 1}px) and (max-width: ${breakpoints.desktopLargeMax}px)`,\n desktopGiant: `(min-width: ${breakpoints.desktopGiantMix}px)`,\n prefersReducedMotion: '(prefers-reduced-motion: reduce)'\n};\n","import { inject as service } from '@ember/service';\nimport { EmberBuilderTrialAccountExpirationWarning } from 'customer-site/enums/CustomerPageUrl';\nimport AdcBaseRoute from '../classes/base-route';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Content from 'customer-site/models/builder-trial-account-expiration-warning/content';\nimport './_style.scss';\n\nexport default class BuilderTrialAccountExpirationWarningRoute extends AdcBaseRoute {\n @service declare store: ServiceRegistry['store'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n routeId = EmberBuilderTrialAccountExpirationWarning;\n\n model(): { content: ADCAsyncStoreFindRecord } {\n return {\n content: this.store.findRecord(\n 'builder-trial-account-expiration-warning/content',\n this.identityManager.getSelectedSystemId()\n )\n };\n }\n}\n","import { ModifyPlanName } from 'customer-site/enums/AccessPlanPropertyEdit';\nimport { AllDeviceAccess, Personal } from 'customer-site/enums/AccessPlanType';\nimport { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport AdcBaseRoute from '../../base-route';\nimport { getAccessControlPermissions, getRestrictedAccessSetting } from './base-index-route';\n\nimport type Controller from '@ember/controller';\nimport type Transition from '@ember/routing/transition';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\n\ntype EditAccessPlansRouteQueryParams = {\n id_access_plan?: number;\n planType?: number;\n userId?: number;\n property?: number;\n};\n\nexport type EditAccessPlanModel = {\n permissions: ReturnType;\n planDetailTotals: ReturnType;\n planType: number;\n accessPlan?: Promise;\n restrictedAccessSetting?: ReturnType;\n user?: ADCAsyncStoreFindRecord;\n accessPoints?: ADCAsyncStoreFindAll;\n};\n\nconst queryParamsConfig = {\n planType: {\n refreshModel: true,\n type: 'number'\n },\n userId: {\n refreshModel: true,\n type: 'number'\n },\n property: {\n refreshModel: false,\n type: 'number'\n }\n};\n\nconst COLOR_MAP = ['red', 'orange', 'yellow', 'green', 'blue', 'purple', 'greenblue'];\n\n/**\n * Route for editing or creating new access groups\n */\nexport default class BaseAccessPlanEditRoute extends AdcBaseRoute {\n declare currentModel: EditAccessPlanModel;\n\n queryParams = queryParamsConfig;\n\n /**\n * Find an existing access plan model\n */\n findAccessPlanModel(id_access_plan?: number): Promise | undefined {\n return id_access_plan !== undefined\n ? this.store.findRecord('access-control/access-control-access-plan', id_access_plan)\n : undefined;\n }\n\n /**\n * Create a new access plan model\n */\n async createAccessPlanModel(planType: number, userId?: number): Promise {\n // Generate a random color from the map of colors we can choose from.\n const colorName = COLOR_MAP[Math.floor(Math.random() * Object.keys(COLOR_MAP).length)],\n accessPlan = this.store.createRecord('access-control/access-control-access-plan', {\n accessPlanType: planType,\n name: planType === AllDeviceAccess ? this.intl.t('access-control.access-plans.allAccess') : '',\n colorName,\n canBeModified: true,\n operatingModes: [],\n users: [],\n userTypes: [],\n commonPlanUserTypes: [],\n accessPoints: [],\n holidays: [],\n timetables: []\n });\n\n // If this is an all-access plan, get and add all access points to the plan.\n if (planType === AllDeviceAccess) {\n this.store\n .findAll('access-control/access-control-access-point')\n .then((result) => accessPlan.set('accessPoints', result));\n }\n\n // For a personal access plan, set the users on the plan to the specified user.\n if (planType === Personal) {\n if (!userId) {\n return Promise.reject();\n }\n\n const user = await this.store.findRecord('access-control/access-control-user', userId);\n accessPlan.setProperties({\n name: this.intl.t('access-control.access-plans.personalPlanName', { user: user.firstName }),\n users: [user]\n });\n }\n\n return accessPlan;\n }\n\n get planDetailTotals(): ReturnType {\n return getPlanDetailTotals(\n this.ajax,\n false,\n this.identityManager.identityModel?.canPromoteSingleUser ?? false,\n false\n );\n }\n\n model(params: EditAccessPlansRouteQueryParams): EditAccessPlanModel {\n const { store, identityManager } = this,\n { id_access_plan, userId, planType = 0 } = params,\n isNew = id_access_plan === undefined;\n\n return {\n accessPlan: this.findAccessPlanModel(id_access_plan),\n permissions: getAccessControlPermissions(store, identityManager),\n planDetailTotals: this.planDetailTotals,\n planType: planType,\n restrictedAccessSetting: getRestrictedAccessSetting(store, identityManager),\n user:\n isNew && userId && planType === Personal\n ? store.findRecord('access-control/access-control-user', userId)\n : undefined,\n accessPoints:\n isNew && planType === AllDeviceAccess\n ? store.findAll('access-control/access-control-access-point')\n : undefined\n };\n }\n\n setupController(controller: Controller, model: EditAccessPlanModel, transistion: Transition): void {\n super.setupController(controller, model, transistion);\n\n // If the user is editing an existing access plan, there will be a query param (from route name) called \"property\" that defines what edit state we should be in.\n // If the user is creating a new access plan the query param will not exist, so we default to an edit state of MODIFY_PLAN_NAME so the user\n // sets the name and icon of the plan first before being shown the plan overview.\n const { property } = this.paramsFor(this.routeName) as EditAccessPlansRouteQueryParams;\n controller.set('currentEditState', property || ModifyPlanName);\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from 'customer-site/utils/ember';\nimport { loadAccessPlans } from 'customer-site/classes/access-control/access-plans/filter-results-controller';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport { getAeroLocationNames } from 'customer-site/models/access-control/access-plan-limit-issue';\nimport AccessPlansFilterManager from './helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type AccessControlAccessPlansIndexController from 'customer-site/access-control/access-plans/index/controller';\nimport type AccessPlansIndexRoute from 'customer-site/access-control/access-plans/index/route';\nimport type { AccessPlansQueryParams } from 'customer-site/classes/access-control/access-plans/filtering-controller';\nimport type FilteringAccessPlansRoute from 'customer-site/classes/access-control/access-plans/filtering-route';\nimport type { PlanDetailsTotalKey } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type AccessControlPermissionsCollection from 'customer-site/models/access-control/access-control-permissions-collection';\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\nimport type AccessPlanLimitIssue from 'customer-site/models/access-control/access-plan-limit-issue';\nimport type AccessPlanPendingChangeCollection from 'customer-site/models/access-control/access-plan-pending-change-collection';\nimport type RestrictedAccessSetting from 'customer-site/models/settings/restricted-access-setting';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\n\ntype AccessControlModel =\n | AccessControlPermissionsCollection\n | AccessPlanPendingChangeCollection\n | RestrictedAccessSetting;\n\n/**\n * Get access control permissions object.\n */\nexport function getAccessControlPermissions(\n store: Store,\n identityManager: IdentityManager,\n isReload = true\n): ADCAsyncStoreFindRecord {\n return getRecords(store, identityManager, 'access-control/access-control-permissions-collection', isReload);\n}\n\n/**\n * Get access control pending changes.\n */\nexport function getAccessPlanPendingChanges(\n store: Store,\n identityManager: IdentityManager,\n isReload = true\n): ADCAsyncStoreFindRecord {\n return getRecords(store, identityManager, 'access-control/access-plan-pending-change-collection', isReload);\n}\n\n/**\n * Get restricted access setting object.\n */\nexport function getRestrictedAccessSetting(\n store: Store,\n identityManager: IdentityManager,\n isReload = true\n): ADCAsyncStoreFindRecord {\n return getRecords(store, identityManager, 'settings/restricted-access-setting', isReload);\n}\n\n/**\n * Queries for access control models\n */\nfunction getRecords(\n store: Store,\n identityManager: IdentityManager,\n modelName: string,\n isReload: boolean\n): ADCAsyncStoreFindRecord {\n const method = isReload ? 'findRecord' : 'peekRecord';\n return store[method](\n modelName,\n identityManager.getSelectedSystemGroupId() ?? identityManager.getSelectedSystemId()\n );\n}\n\nexport interface AccessPlansIndexRouteModel extends ModelFrom {\n accessPlans: ReturnType;\n aeroLocationNames?: Promise;\n timetables: ADCAsyncStoreFindAll | ADCRecordArray;\n accessPoints: ADCAsyncStoreFindAll | ADCRecordArray;\n permissions: ReturnType;\n planDetailTotals: Promise>;\n restrictedAccessSetting: ReturnType;\n accessPlanPendingChanges: ReturnType;\n accessPlanLimitIssues: ADCAsyncStoreFindAll | ADCRecordArray;\n}\n\n/**\n * View for the Access Control Access Groups\n */\nexport default class BaseAccessPlansIndexRoute extends AdcBaseRoute {\n @service declare cookieManager: ServiceRegistry['cookie-manager'];\n\n model(_params: AccessPlansQueryParams, transition: Transition): AccessPlansIndexRouteModel {\n const { identityManager, ajax, store } = this,\n retrievalFunction = isFullTransition(transition) ? 'findAll' : 'peekAll',\n isFullReload = retrievalFunction == 'findAll',\n includeChildScope = identityManager.isEnterprise,\n includeParentScopeAccessPoints = false;\n\n // Get the params from the parent filtering route\n const parentRoutePath = transition.to.parent!.name,\n { search = '', accessPoints = [] } = this.paramsFor(parentRoutePath) as AccessPlansQueryParams;\n\n // TODO: After removing the canPromoteSingleUser feature toggle. This will also be true\n const includeParentScopeUsers =\n (identityManager.identityModel?.isPointCentralAccessControl && identityManager.isEnterprise) ||\n identityManager.identityModel?.canPromoteSingleUser;\n\n return {\n ...(this.modelFor(transition?.to?.parent?.name as string) as ModelFrom),\n accessPlans: loadAccessPlans(this.store, this.cookieManager, search, accessPoints),\n aeroLocationNames: this.identityManager.isEnterprise ? getAeroLocationNames(ajax) : undefined,\n planDetailTotals: getPlanDetailTotals(\n ajax,\n includeChildScope,\n includeParentScopeUsers,\n includeParentScopeAccessPoints\n ),\n timetables: store[retrievalFunction]('access-control/access-control-timetable'),\n accessPoints: store[retrievalFunction]('access-control/access-control-access-point'),\n permissions: getAccessControlPermissions(store, identityManager, isFullReload),\n accessPlanPendingChanges: getAccessPlanPendingChanges(store, identityManager, isFullReload),\n accessPlanLimitIssues: store[retrievalFunction]('access-control/access-plan-limit-issue'),\n restrictedAccessSetting: getRestrictedAccessSetting(store, identityManager)\n };\n }\n\n /**\n * The filters manager for route query parameters.\n */\n filtersManager = new AccessPlansFilterManager(this, this.applyFilters);\n\n /** @override */\n setupController(\n controller: AccessControlAccessPlansIndexController,\n model: AccessPlansIndexRouteModel,\n transition: Transition\n ): void {\n super.setupController(controller, model, transition);\n controller.filtersManager = this.filtersManager;\n }\n\n /** @override */\n afterModel(resolvedModel: ResolvedModelFrom, transition: Transition): void {\n this.filtersManager.updateFilters(\n resolvedModel.qp,\n resolvedModel.defaultFilterValues,\n isFullTransition(transition),\n resolvedModel\n );\n }\n\n @action applyFilters(filters: { queryParams: AccessPlansQueryParams }): void {\n if (!this.filtersManager.validateFilterLength(filters.queryParams)) {\n this.refresh();\n return;\n }\n\n this.router.transitionTo(filters);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed, set } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { loadAccessPlansBatched } from 'customer-site/components/access-control/access-plans/list/access-plan-scrolling-list/index';\nimport { DefaultOperatingMode } from 'customer-site/enums/MercuryControllerOperatingMode';\nimport { AccessPlanListViewSelected, AccessPlanCardViewSelected } from '../../../enums/TrackedEvent';\n\nimport type CookieManager from '@adc/app-infrastructure/services/cookie-manager';\nimport type Store from '@ember-data/store';\nimport type AccessPlansIndexRoute from 'customer-site/access-control/access-plans/index/route';\nimport type AccessPlansFilterManager from 'customer-site/classes/access-control/access-plans/helpers/filter-manager';\nimport type EnterpriseAccessPlansIndexRoute from 'customer-site/enterprise/access-control/access-plans/index/route';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type Stats from 'customer-site/services/stats';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { AccessPlansQueryParams } from './filtering-controller';\n\nconst viewModeCookieName = 'access_plan_page_view';\n\nexport function getAccessPlans(\n store: Store,\n searchString: string,\n userId: number | null = null,\n includeParentScope = false,\n accessPlanOperatingMode = DefaultOperatingMode,\n accessPoints: string[] = [],\n includeChildScopes = false\n): ADCAsyncStoreQuery {\n return store.query('access-control/access-control-access-plan', {\n searchString,\n userId,\n includeParentScope,\n accessPlanOperatingMode,\n accessPoints,\n includeChildScopes\n });\n}\n\nexport function loadAccessPlans(\n store: Store,\n cookieManager: CookieManager,\n search: string,\n accessPoints: string[]\n): ADCAsyncStoreFindAll {\n const isListView =\n cookieManager.getEssentialCookie(viewModeCookieName) != null\n ? cookieManager.hasEssentialCookieTruthyValue(viewModeCookieName)\n : false;\n return isListView\n ? getAccessPlans(store, search, undefined, undefined, undefined, accessPoints)\n : loadAccessPlansBatched(store, { search, accessPoints });\n}\n\n/**\n * Controller that provides support for filtering access plans.\n */\nexport default class FilterAccessPlanResultsController extends EmberController {\n @service declare store: Store;\n @service declare cookieManager: CookieManager;\n @service declare stats: Stats;\n\n declare model: ModelFrom | ModelFrom;\n\n filtersManager?: AccessPlansFilterManager;\n\n /**\n * User's search query string\n */\n @alias('model.qp.search')\n declare search: string;\n\n /**\n * Selected access points for the access plans filter.\n */\n @alias('model.qp.accessPoints')\n declare accessPoints: string[];\n\n /**\n * Determines what mode the access plan page is in\n */\n @tracked\n isListView = this.listViewCookie;\n\n /**\n * Gets cookie for listView\n */\n get listViewCookie(): boolean {\n const { cookieManager } = this;\n return cookieManager.getEssentialCookie(viewModeCookieName) != null\n ? cookieManager.hasEssentialCookieTruthyValue(viewModeCookieName)\n : false;\n }\n\n @computed('search', 'accessPoints')\n get filterParams(): AccessPlansQueryParams {\n return {\n search: this.search,\n accessPoints: this.accessPoints\n };\n }\n\n /**\n * Updates view mode\n */\n @action\n updateViewMode(isListView: boolean): void {\n // Log which view was selected\n this.stats.logEvent(isListView ? AccessPlanListViewSelected : AccessPlanCardViewSelected);\n\n // Set view\n this.isListView = isListView;\n\n // Save view to cookie manager\n this.cookieManager.setEssentialCookie(viewModeCookieName, isListView.toString());\n\n // Re-request data\n this.filterAccessPlans();\n }\n\n /**\n * Filters access plans.\n */\n @action\n filterAccessPlans(): void {\n const { search, accessPoints } = this.filterParams;\n set(this.model, 'accessPlans', loadAccessPlans(this.store, this.cookieManager, search, accessPoints));\n }\n}\n","import EmberController from '@ember/controller';\nimport { set } from '@ember/object';\n\nexport interface AccessPlansQueryParams {\n accessPoints: string[];\n search: string;\n}\n\n/**\n * Controller that provides support for filtering access plans.\n */\nexport default class FilteringAccessPlansController extends EmberController {\n /**\n * The default values for this controllers query parameters.\n */\n get defaultFilterValues(): AccessPlansQueryParams {\n return {\n accessPoints: [],\n search: ''\n };\n }\n\n /**\n * The access points to filter on.\n */\n accessPoints = [];\n\n /**\n * Filter string that is compared to access plans titles.\n */\n search = '';\n\n /**\n * Resets all query parameter values to their default value.\n */\n resetQueryParameterValues() {\n set(this, 'accessPoints', []);\n set(this, 'search', '');\n }\n}\n","import { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport AdcBaseRoute from '../../base-route';\n\nimport type { AccessPlansQueryParams } from './filtering-controller';\nimport type FilteringAccessPlansController from './filtering-controller';\n\nexport interface FilteringAccessPlanRouteModel {\n defaultFilterValues: {\n accessPoints: string[];\n search: string;\n };\n qp: {\n accessPoints: string[];\n search: string;\n };\n}\n\n/**\n * Route that provides support for filtering access plans.\n */\nexport default class FilteringAccessPlansRoute extends AdcBaseRoute {\n /**\n * Query parameters for access plans filtering.\n */\n queryParams = {\n accessPoints: getQueryParam('array'),\n search: getQueryParam('string')\n };\n\n /** @override */\n model(params: AccessPlansQueryParams): FilteringAccessPlanRouteModel {\n const { accessPoints = [], search = '' } = params;\n\n return {\n qp: { accessPoints, search },\n defaultFilterValues: (this.controllerFor(this.routeName) as FilteringAccessPlansController)\n .defaultFilterValues\n };\n }\n\n /** @override */\n resetController(controller: FilteringAccessPlansController, isExiting: boolean): void {\n if (isExiting) {\n controller.resetQueryParameterValues();\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseFilterManager from '../../../helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * Utility class for access plan filtering.\n */\nexport default class AccessPlansFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true,\n resolvedModel: Record = {}\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues, freshData);\n\n const filters = [\n this.getSearchFilter('search', this.intl.t('generic.search'), {\n skip: true\n })\n ];\n\n const accessControlPermissions = await resolvedModel.permissions;\n\n const systemGroup = await this.contextManager.identityModel.selectedSystemGroup;\n\n if (systemGroup?.isParentGroup) {\n if (accessControlPermissions.searchEnhancement) {\n if (freshData) {\n this.filterOptions = {\n childGroups: systemGroup.childGroups,\n accessPoints: resolvedModel.accessPoints\n };\n }\n\n const subs = this.filterOptions.childGroups;\n const options: any[] = [];\n const points = await this.filterOptions.accessPoints;\n subs.forEach(({ icon, systems, description }: { icon: any; systems: any[]; description: string }) => {\n const subSubs: any[] = [];\n systems.forEach(({ unitId }) => {\n points.forEach((point: AccessControlAccessPoint) => {\n if (point.systemId == unitId && !point.isElevatorFloor) {\n subSubs.push({\n value: point.id,\n name: point.name,\n secondaryDescription: point.systemDescription\n });\n }\n });\n });\n options.push({\n icon,\n name: description,\n subitems: subSubs\n });\n });\n\n filters.push(\n this.getDropdownFilterWithSubitems(\n this.intl.t('generic.devices.accessPoints'),\n 'accessPoints',\n options,\n queryParams.accessPoints,\n true,\n {\n placeholder: this.intl.t(\n 'components.access-control.access-plans.edit.access-points.allItems'\n ),\n maxItemCount: 100\n }\n )\n );\n }\n } else {\n if (accessControlPermissions.searchEnhancement) {\n if (freshData) {\n this.filterOptions = {\n accessPoints: resolvedModel.accessPoints\n };\n }\n\n filters.push(\n this.getDropdownFilter(\n this.intl.t('generic.devices.accessPoints'),\n 'accessPoints',\n (async () => {\n let options = await this.filterOptions.accessPoints;\n options = options.filter((ap: AccessControlAccessPoint) => !ap.isElevatorFloor);\n return options.map(({ id, name }: { id: string; name: string }) => ({ value: id, name }));\n })(),\n queryParams.accessPoints,\n true,\n {\n placeholder: this.intl.t(\n 'components.access-control.access-plans.edit.access-points.allItems'\n ),\n maxItemCount: 100\n }\n )\n );\n }\n }\n\n this.filters = filters;\n }\n}\n","import { action } from '@ember/object';\nimport EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from '../../../utils/ember';\nimport AccessPointsFilterManager from 'customer-site/classes/access-control/access-points/helpers/filter-manager';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type AccessControlAccessPointsIndexController from 'customer-site/access-control/access-points/index/controller';\nimport type EnterpriseAccessControlAccessPointsIndexController from 'customer-site/enterprise/access-control/access-points/index/controller';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { AccessPointsQueryParams } from './filtering-controller';\nimport type FilteringAccessPointsRoute from './filtering-route';\n\nexport function getPointsQuery(\n store: ServiceRegistry['store'],\n searchString = '',\n includeChildScope = false,\n locations: string[] = []\n): ADCAsyncStoreQuery {\n return store.query('access-control/access-control-access-point', {\n searchString,\n includeChildScope,\n scopeIds: locations\n });\n}\n\n/**\n * Base Access Points index route.\n */\nexport default class BaseAccessPointsIndexRoute extends EmberRoute {\n @service declare store: ServiceRegistry['store'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare router: ServiceRegistry['router'];\n\n /**\n * The filters manager for route query parameters.\n */\n filtersManager = new AccessPointsFilterManager(this, this.applyFilters);\n\n setupController(\n controller: AccessControlAccessPointsIndexController | EnterpriseAccessControlAccessPointsIndexController,\n model: ModelFrom,\n transition: Transition\n ): void {\n super.setupController(controller, model, transition);\n controller.filtersManager = this.filtersManager;\n\n if (model) {\n // Reset the flag so that data from model is consumed properly.\n controller.set('wasInitialDataConsumed', false);\n }\n }\n\n /** @override */\n afterModel(model: ModelFrom, transition: Transition): void {\n this.filtersManager.updateFilters(model.qp, model.defaultFilterValues, isFullTransition(transition), model);\n }\n\n @action applyFilters(filters: { queryParams: AccessPointsQueryParams }): void {\n if (!this.filtersManager.validateFilterLength(filters.queryParams)) {\n this.refresh();\n return;\n }\n\n this.router.transitionTo(filters);\n }\n}\n","import EmberController from '@ember/controller';\nimport { setProperties, computed } from '@ember/object';\n\nexport type AccessPointsQueryParams = {\n search: string;\n locations: string[];\n};\n\n/**\n * @classdesc\n * Controller that provides support for contacts.\n */\nexport default class FilteringAccessPointsController extends EmberController {\n /**\n * The default values for this controllers query parameters.\n */\n @computed()\n get defaultFilterValues(): AccessPointsQueryParams {\n return {\n search: '',\n locations: []\n };\n }\n\n /**\n * Filter string that is compared to access point names.\n */\n search: string = this.defaultFilterValues.search;\n\n /**\n * Filter locations\n */\n locations: string[] = this.defaultFilterValues.locations;\n\n /**\n * Resets all query parameter values to their default value.\n */\n resetQueryParameterValues(): void {\n setProperties(this, this.defaultFilterValues);\n }\n}\n","import { isFullTransition } from 'customer-site/utils/ember';\nimport { getAccessControlPermissions } from 'customer-site/classes/access-control/access-plans/base-index-route';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport AdcBaseRoute from '../../base-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type { AccessPointsQueryParams } from './filtering-controller';\nimport type FilteringAccessPointsController from './filtering-controller';\n\nexport interface FilteringAccessPointsRouteModel {\n permissions: ReturnType;\n qp: {\n search: string;\n locations: string[];\n };\n defaultFilterValues: AccessPointsQueryParams;\n}\n\n/**\n * Route that provides support for filtering Access Points.\n */\nexport default class FilteringAccessPointsRoute extends AdcBaseRoute {\n /**\n * Query parameters for access points filtering.\n *\n */\n queryParams = {\n search: getQueryParam('string'),\n locations: getQueryParam('array')\n };\n\n /** @override */\n model(params: AccessPointsQueryParams, transition: Transition): FilteringAccessPointsRouteModel {\n const retrievalFunction = isFullTransition(transition) ? 'findAll' : 'peekAll';\n const isFullReload = retrievalFunction == 'findAll';\n\n return {\n permissions: getAccessControlPermissions(this.store, this.identityManager, isFullReload),\n qp: { ...params },\n defaultFilterValues: (this.controllerFor(this.routeName) as FilteringAccessPointsController)\n .defaultFilterValues\n };\n }\n\n /** @override */\n resetController(controller: FilteringAccessPointsController, isExiting: boolean): void {\n if (isExiting) {\n controller.resetQueryParameterValues();\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseFilterManager from '../../../helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\n/**\n * Utility class for filtering access points.\n */\nexport default class AccessPointsFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true,\n resolvedModel: Record = {}\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues, freshData);\n\n const filters = [\n this.getSearchFilter('search', this.intl.t('generic.search'), {\n skip: true\n })\n ];\n\n const accessControlPermissions = await resolvedModel.permissions;\n const systemGroup = await this.identityManager.identityModel?.selectedSystemGroup;\n const useLocationSelectionSheet = this.identityManager.identityModel?.hasCommercialInternalBetaAccess;\n\n if (systemGroup) {\n if (accessControlPermissions.searchEnhancement) {\n if (systemGroup.isParentGroup) {\n this.filterOptions = {\n childGroups: await systemGroup.childGroups\n };\n\n const subs = systemGroup.childGroups;\n const options: any[] = [];\n subs.forEach(({ icon, systems, description }) => {\n const subSubs: any[] = [];\n systems.forEach(({ icon, description, id }) => {\n subSubs.push({ value: id, name: description, icon });\n });\n options.push({\n icon,\n name: description,\n subitems: subSubs\n });\n });\n\n if (!useLocationSelectionSheet) {\n filters.push(\n this.getDropdownFilterWithSubitems(\n this.intl.t('enterprise.locations.locations'),\n 'locations',\n (() => {\n return options;\n })(),\n queryParams.locations,\n true,\n { placeholder: this.intl.t('classes.access-control.allLocations'), maxItemCount: 100 }\n )\n );\n }\n } else {\n this.filterOptions = {\n locations: await systemGroup.systems\n };\n if (!useLocationSelectionSheet) {\n filters.push(\n this.getDropdownFilter(\n this.intl.t('enterprise.locations.locations'),\n 'locations',\n (async () => {\n const options = await this.filterOptions.locations;\n return options.map(({ id, description }: { id: string; description: string }) => ({\n value: id,\n name: description\n }));\n })(),\n queryParams.locations,\n true,\n { placeholder: this.intl.t('classes.access-control.allLocations'), maxItemCount: 100 }\n )\n );\n }\n }\n }\n }\n\n this.filters = filters;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { serializeQueryParams } from '@ember-data/adapter/-private';\nimport { A } from '@ember/array';\nimport { computed } from '@ember/object';\nimport { type Registry as ServiceRegistry } from '@ember/service';\nimport CheckboxTreeItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/checkbox-tree-item';\n\ntype ScrollingListItemArray = ItemDynamicArray | ScrollingListSelectItem[];\ntype ItemDynamicArray = ReturnType>;\n\n/**\n * Maximum number of characters allowable for a HTTP request\n */\nconst MAX_URL_CHAR_LIMIT = 2000;\n\n/**\n * Select (or unselect) the given items (and all of their sub-items)\n */\nexport function selectItemsAndSubItems(items: ScrollingListItemArray, select: boolean): ItemDynamicArray {\n const affectedItems: ItemDynamicArray = A([]);\n\n items.forEach((item) => {\n if (!item.disabled && item.isSelected !== select) {\n selectItems([item], select);\n affectedItems.pushObject(item);\n }\n const subItems = item.subitems?.filter((subItem) => !subItem.disabled && subItem.isSelected !== select);\n selectItems(subItems ?? [], select);\n\n if (subItems) {\n affectedItems.pushObjects(subItems);\n }\n });\n\n return affectedItems;\n}\n\n/**\n * Returns the item with the given id in items (or undefined if it does not exist).\n */\nexport function findItem(\n id: string,\n items: ScrollingListItemArray,\n searchSubitems = false\n): ScrollingListSelectItem | undefined {\n // First search without sub-items\n const foundItem = items.find((item) => {\n return item.id === id;\n });\n\n if (foundItem !== undefined) {\n return foundItem;\n }\n\n if (searchSubitems) {\n // Check the subitems\n return items\n .filter((item) => item.subitems?.length > 0)\n .map((item) => item.subitems)\n .flat()\n .find((item) => {\n return item.id === id;\n });\n }\n\n return undefined;\n}\n\n/**\n * Returns an array of all items in `newItems` that are already in `existingItems`\n */\nexport function findDuplicateItems(\n newItems: ScrollingListItemArray,\n existingItems: ScrollingListItemArray\n): ItemDynamicArray {\n const duplicateItems: ItemDynamicArray = A([]);\n newItems.forEach((item) => {\n if (findItem(item.id, existingItems)) {\n duplicateItems.push(item);\n }\n item.subitems?.forEach((subItem) => {\n if (findItem(subItem.id, existingItems)) {\n duplicateItems.push(subItem);\n }\n });\n });\n return duplicateItems;\n}\n\n/**\n * Returns a list of the item and all of its sub-items\n */\nexport function flattenItem(item?: ScrollingListSelectItem): ScrollingListSelectItem[] {\n return [item].concat(A(item?.subitems)).compact();\n}\n\n/**\n * Inserts the given item after the parent item in the list of items\n * in the sorted position (by name). Assumes that parentItem is already\n * in items.\n */\nexport function insertAfterParentSorted(\n item: ScrollingListSelectItem,\n parentItem: ScrollingListSelectItem,\n items: ScrollingListItemArray\n): void {\n if (item.orderIndex === undefined) {\n // Just insert at the end, no ordering required\n items.pushObject(item);\n } else {\n // Index of the new item is the parent index + the sorted position among the child items\n const parentIdx = items.indexOf(parentItem),\n len = Math.min(parentIdx + parentItem.subitems.length, items.length);\n let idx = parentIdx + 1;\n\n while (idx < len) {\n const order = items[idx].orderIndex;\n if (order === undefined || order > item.orderIndex) {\n break;\n }\n idx = idx + 1;\n }\n\n items.insertAt(idx, item);\n }\n}\n\n/**\n * Adds each item in `itemsToAdd` to `itemList`. Will add using the following logic:\n * If the item is a sub-item, insert at the sorted position after the parent item. Otherwise,\n * just insert at the end of the list.\n */\nexport function addItems(itemsToAdd: ScrollingListItemArray, itemList: ScrollingListItemArray): void {\n if (!itemsToAdd.some((item) => item.parent)) {\n itemList.pushObjects(itemsToAdd);\n } else {\n itemsToAdd.forEach((item) => {\n if (item.parent) {\n // Insert the item after the parent at the correct place\n insertAfterParentSorted(item, item.parent, itemList);\n } else {\n itemList.pushObject(item);\n }\n });\n }\n}\n\n/**\n * Select (or un-select) the given items. Will not select sub-items.\n */\nexport function selectItems(items: ScrollingListItemArray, select: boolean): void {\n items.setEach('state', select ? SELECTED : UNSELECTED);\n}\n\n/**\n * Return true if a serialized filtering length is valid\n */\nexport function validateFilterLength(\n params: any,\n notificationManager: ServiceRegistry['notification-manager'],\n intl: ServiceRegistry['adc-intl']\n): boolean {\n const urlParams = serializeQueryParams(params);\n\n if (urlParams?.length > MAX_URL_CHAR_LIMIT) {\n notificationManager.addError(intl.t('classes.helpers.tooManyFilters'));\n return false;\n }\n\n return true;\n}\n\nexport function getAllSelectedSubitems(\n item: ScrollingListSelectItem,\n allSelectedItems: ScrollingListItemArray\n): ScrollingListItemArray {\n const selectedSubitems: ScrollingListItemArray = A([]);\n\n if (item.orderIndex === undefined) {\n // Remove all possible sub-items (unless this is a subitem)\n // Sub-items will have an order index and immediately follow the parent in the list\n let idx = allSelectedItems.indexOf(item);\n while (idx + 1 < allSelectedItems.length && allSelectedItems[idx + 1].orderIndex !== undefined) {\n selectedSubitems.pushObject(allSelectedItems[idx + 1]);\n idx = idx + 1;\n }\n }\n\n return selectedSubitems;\n}\n\nexport default class ScrollingListSelectItem extends CheckboxTreeItem {\n constructor(isCheckboxTree = false, ...args: any[]) {\n super(...args);\n this.isCheckboxTree = isCheckboxTree;\n }\n\n isCheckboxTree: boolean;\n\n @tracked subitems: ItemDynamicArray = A([]);\n @tracked endPerformanceMonitorAfterRender = false;\n @tracked parent?: ScrollingListSelectItem;\n @tracked orderIndex?: number;\n @tracked systemDescription?: string;\n\n @computed('state')\n get isSelected(): boolean {\n return this.state === SELECTED;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { A } from '@ember/array';\nimport Controller from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { tryParseInt } from './base-index-route';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type ContactsFilterManager from 'customer-site/classes/access-control/users/helpers/filter-manager';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './base-index-route';\n\ntype UserQuery = AccessControlUser[] & { meta: { totalCount: number } };\n\n/**\n * How many users should we load at once.\n */\nconst BATCH_SIZE = 25;\n\n/**\n * Returns a promise for the users query, given query arguments\n *\n * Small number here allows for the view to be rendered faster and something to be shown on the screen quickly\n */\nexport function getUsersQuery(\n store: ServiceRegistry['store'],\n startIndex = 0,\n searchString = '',\n batchSize = BATCH_SIZE,\n includeChildScope = false,\n ids: string[] = [],\n credentials: number[] = [],\n contactInfo: number[] = [],\n accessPeriods: number[] = [],\n accessPoints: string[] = [],\n userGroups: number[] = [],\n userType: number[] = [],\n accessPlans: number[] = [],\n userAttributes: number[] = [],\n userStatus: number[] = [],\n option = 0\n): Promise {\n return store.query('access-control/access-control-user', {\n searchString,\n batchSize,\n startIndex,\n includeChildScope,\n ids,\n credentials,\n contactInfo,\n accessPeriods,\n accessPoints,\n userGroups,\n userType,\n accessPlans,\n userAttributes,\n userStatus,\n option\n }) as unknown as Promise;\n}\n\n/**\n *\n */\nexport default class BaseAccessControlUsersIndexController extends Controller {\n @service declare store: ServiceRegistry['store'];\n\n declare filtersManager: ContactsFilterManager;\n declare model: ModelFrom;\n\n @tracked users = A();\n @tracked usersCount?: number;\n\n @computed('users.@each.isDeleted')\n get nonDeletedUsers(): AccessControlUser[] {\n return this.users.filter((u) => !u.isDeleted);\n }\n\n get nonDeletedUsersCount(): number {\n const { usersCount = 0 } = this;\n return usersCount - (this.users.length - this.nonDeletedUsers.length);\n }\n\n /**\n * Loads the next batch of users.\n */\n loadMoreUsers = task({ enqueue: true }, async () => {\n const { qp } = this.model;\n\n const fetchedUsers = await getUsersQuery(\n this.store,\n this.users.length,\n qp.search,\n BATCH_SIZE,\n false,\n [],\n qp.credentials,\n qp.contactInfo,\n qp.accessPeriods,\n qp.accessPoints,\n qp.userGroups,\n qp.userTypes,\n qp.accessPlans,\n qp.userAttributes,\n qp.userStatus,\n tryParseInt(qp.option, 0)\n );\n\n // We want to avoid reassigning this.users to add more objects to the list and possibly\n // re-render the whole list, so we'll continue using pushObjects here.\n // eslint-disable-next-line ember/no-array-prototype-extensions\n this.users.pushObjects(fetchedUsers.slice());\n this.usersCount = fetchedUsers.meta.totalCount;\n });\n\n /**\n * Clears all cached users and optionally reloads the first batch.\n */\n clearUserData(reloadUsers = true): void {\n Object.assign(this, {\n users: A([]),\n usersCount: undefined\n });\n\n if (reloadUsers) {\n this.loadMoreUsers.perform();\n }\n }\n\n /**\n * Called when the scrollable list reaches the end of the loaded users.\n */\n @action lastReached(): void {\n if ((this.usersCount ?? 0) > this.users.length) {\n this.loadMoreUsers.perform();\n }\n }\n}\n","import { action } from '@ember/object';\nimport EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from 'customer-site/utils/ember';\nimport ContactsFilterManager from 'customer-site/classes/access-control/users/helpers/filter-manager';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseController from './base-index-controller';\nimport type { AccessControlContactsQueryParams } from './filtering-controller';\nimport type ACUsersFilterRoute from './filtering-route';\n\n/**\n * Gets the mobile credential utilization numbers for the scope\n */\nexport function getMobileCredentialUtilization(ajax: ServiceRegistry['ajax']): Promise> {\n return ajax.apiRequestForValue>(\n 'accessControl/accessControlUsers/getMobileCredentialUtilization'\n );\n}\n\nexport function tryParseInt(option: any, defaultValue: number): number {\n const parsed = parseInt(option);\n if (isNaN(parsed)) {\n return defaultValue;\n }\n return parsed;\n}\n\n/**\n * @classdesc\n * Users index route.\n */\nexport default class BaseAccessControlUsersIndexRoute extends EmberRoute {\n @service declare store: ServiceRegistry['store'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare router: ServiceRegistry['router'];\n\n model(\n _: any,\n transition: Transition\n ): ModelFrom & {\n mobileCredentialUtilization: ReturnType | object;\n } {\n const parentRoutePath = transition.to.parent!.name,\n { option } = this.paramsFor(parentRoutePath) as AccessControlContactsQueryParams;\n\n const optionInt = tryParseInt(option, 0),\n mobileCredentialUtilization =\n (optionInt & 1) === 1 || (optionInt & 2) === 2 ? {} : getMobileCredentialUtilization(this.ajax);\n\n return {\n ...(this.modelFor(parentRoutePath) as ModelFrom),\n mobileCredentialUtilization: mobileCredentialUtilization\n };\n }\n\n /**\n * The filters manager for route query parameters.\n */\n filtersManager = new ContactsFilterManager(this, this.applyFilters);\n\n setupController(\n controller: BaseController,\n model: ModelFrom,\n transition: Transition\n ) {\n super.setupController(controller, model, transition);\n\n controller.filtersManager = this.filtersManager;\n controller.clearUserData();\n }\n\n afterModel(model: ModelFrom, transition: Transition) {\n this.filtersManager.updateFilters(model.qp, model.defaultFilterValues, isFullTransition(transition), model);\n }\n\n @action applyFilters(filters: { queryParams: AccessControlContactsQueryParams }): void {\n if (!this.filtersManager.validateFilterLength(filters.queryParams)) {\n this.refresh();\n return;\n }\n\n this.router.transitionTo(filters);\n }\n}\n","import Controller from '@ember/controller';\nimport { setProperties, computed } from '@ember/object';\n\nexport type AccessControlContactsQueryParams = {\n credentials: number[];\n contactInfo: number[];\n accessPeriods: number[];\n accessPoints: string[];\n userGroups: number[];\n userTypes: number[];\n accessPlans: number[];\n search: string;\n userAttributes: number[];\n userStatus: number[];\n option: string;\n};\n\n/**\n * @classdesc\n * Controller that provides support for contacts.\n */\nexport default class FilteringContactsController extends Controller {\n /**\n * The default values for this controllers query parameters.\n */\n @computed()\n get defaultFilterValues(): AccessControlContactsQueryParams {\n return {\n credentials: [],\n contactInfo: [],\n accessPeriods: [],\n accessPoints: [],\n userGroups: [],\n userTypes: [],\n accessPlans: [],\n search: '',\n userAttributes: [],\n userStatus: [],\n option: ''\n };\n }\n\n /**\n * Credential values to filter on.\n */\n credentials: AccessControlContactsQueryParams['credentials'] = this.defaultFilterValues.credentials;\n\n /**\n * Contact information to filter on.\n */\n contactInfo: AccessControlContactsQueryParams['contactInfo'] = this.defaultFilterValues.contactInfo;\n\n /**\n * Access periods to filter on.\n */\n accessPeriods: AccessControlContactsQueryParams['accessPeriods'] = this.defaultFilterValues.accessPeriods;\n\n /**\n * The access points to filter on.\n */\n accessPoints: AccessControlContactsQueryParams['accessPoints'] = this.defaultFilterValues.accessPoints;\n\n /**\n * User groups to filter on.\n */\n userGroups: AccessControlContactsQueryParams['userGroups'] = this.defaultFilterValues.userGroups;\n\n /**\n * User Types to filter on.\n */\n userTypes: AccessControlContactsQueryParams['userTypes'] = this.defaultFilterValues.userTypes;\n\n /**\n * Access plans to filter on.\n */\n accessPlans: AccessControlContactsQueryParams['accessPlans'] = this.defaultFilterValues.accessPlans;\n\n /**\n * Filter string that is compared to access plans titles.\n */\n search: AccessControlContactsQueryParams['search'] = this.defaultFilterValues.search;\n\n /**\n * User attributes to apply with the search bar string.\n */\n userAttributes: AccessControlContactsQueryParams['userAttributes'] = this.defaultFilterValues.userAttributes;\n\n /**\n * User attributes to apply with the search bar string.\n */\n userStatus: AccessControlContactsQueryParams['userStatus'] = this.defaultFilterValues.userStatus;\n\n /**\n * Testing for optimizing user page\n */\n option: AccessControlContactsQueryParams['option'] = this.defaultFilterValues.option;\n\n /**\n * Resets all query parameter values to their default value.\n */\n resetQueryParameterValues(): void {\n setProperties(this, this.defaultFilterValues);\n }\n}\n","import { inject as service } from '@ember/service';\nimport { isFullTransition } from 'customer-site/utils/ember';\nimport { getAccessControlPermissions } from 'customer-site/classes/access-control/access-plans/base-index-route';\nimport { hasLinkedADInstance } from 'customer-site/enterprise/settings/active-directory-setup/index/controller';\nimport { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport AdcBaseRoute from '../../base-route';\nimport { tryParseInt } from './base-index-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type AccessControlAccessGroup from 'customer-site/models/access-control/access-control-access-group';\nimport type AccessControlAccessPlan from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\nimport type AccessControlUserType from 'customer-site/models/access-control/access-control-user-type';\nimport type AccessControlCredentialConflict from 'customer-site/models/access-control/credentials/access-control-credential-conflict';\nimport type UserAttributeField from 'customer-site/models/users/user-attributes/user-attribute-field';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { AccessControlContactsQueryParams } from './filtering-controller';\nimport type ACFilteringController from './filtering-controller';\n\n/**\n * @classdesc\n * Route that provides support for filtering Contacts.\n */\nexport default class FilteringContactsRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n\n /**\n * Query parameters for access plans filtering.\n */\n queryParams = {\n credentials: getQueryParam('array'),\n contactInfo: getQueryParam('array'),\n accessPeriods: getQueryParam('array'),\n accessPoints: getQueryParam('array'),\n userGroups: getQueryParam('array'),\n userTypes: getQueryParam('array'),\n accessPlans: getQueryParam('array'),\n search: getQueryParam('string'),\n userAttributes: getQueryParam('array'),\n userStatus: getQueryParam('array'),\n option: getQueryParam('string')\n };\n\n model(\n params: AccessControlContactsQueryParams & { id_user: string },\n transition: Transition\n ): {\n planDetailTotals: ReturnType;\n timetables: ADCAsyncStoreFindAll;\n permissions: ReturnType;\n accessPoints: ADCAsyncStoreFindAll | never[];\n accessGroups: ADCAsyncStoreFindAll;\n accessPlans: ADCAsyncStoreQuery | never[];\n userTypes: ADCAsyncStoreFindAll;\n availableUserAttributeFields: ADCAsyncStoreFindAll;\n conflicts: ADCAsyncStoreFindAll | never[];\n hasLinkedADInstance: ReturnType;\n qp: AccessControlContactsQueryParams;\n defaultFilterValues: AccessControlContactsQueryParams;\n } {\n const { store, identityManager, ajax } = this,\n retrievalFunction = isFullTransition(transition) ? 'findAll' : 'peekAll',\n isFullReload = retrievalFunction == 'findAll';\n\n function getModels(type: string): T {\n return store[retrievalFunction](`access-control/${type}`) as T;\n }\n\n const optionInt = tryParseInt(params.option, 0);\n const conflicts =\n (optionInt & 2) === 2\n ? []\n : getModels>(\n 'credentials/access-control-credential-conflict'\n );\n const accessPoints =\n (optionInt & 8) === 8\n ? []\n : getModels>('access-control-access-point');\n const accessPlans =\n (optionInt & 4) === 4\n ? []\n : store.query('access-control/access-control-access-plan', {\n userId: params.id_user\n });\n\n return {\n planDetailTotals: getPlanDetailTotals(ajax),\n timetables: getModels>('access-control-timetable'),\n permissions: getAccessControlPermissions(store, identityManager, isFullReload),\n accessPoints: accessPoints,\n accessGroups: getModels>('access-control-access-group'),\n accessPlans: accessPlans,\n userTypes: getModels('access-control-user-type'),\n availableUserAttributeFields: store.findAll('users/user-attributes/user-attribute-field'),\n conflicts,\n hasLinkedADInstance: hasLinkedADInstance(ajax, identityManager.isEnterprise),\n qp: { ...params },\n defaultFilterValues: (this.controllerFor(this.routeName) as ACFilteringController).defaultFilterValues\n };\n }\n\n resetController(controller: ACFilteringController, isExiting: boolean): void {\n if (isExiting) {\n controller.resetQueryParameterValues();\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport { ExpiredCredentials, FutureStartDates } from '../../../../enums/UsersFilterAccessPeriod';\nimport { HasNoMobileNumber, HasNoEmailAddress } from '../../../../enums/UsersFilterContactInformation';\nimport {\n HasNoBadge,\n HasNoPinCode,\n HasNoMobileCredential,\n HasMultipleCredentials\n} from '../../../../enums/UsersFilterCredential';\nimport {\n PausedUsers,\n ExtendedUnlockTimeUsers,\n AntiPassbackExemptionUsers,\n ActiveDirectoryUsers,\n MobileCredentialUsers\n} from '../../../../enums/UsersFilterUserStatus';\nimport BaseFilterManager from '../../../helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type DropdownFilter from '../../../helpers/filters/dropdown-filter';\n\n/**\n *\n * @param this Filter manager to access filter options and intl service.\n * @param key Used to find query parameter values and filter options.\n * @param allKey Key of the placeholder resource string.\n * @param mapOptions Whether options need to be mapped to id and name values.\n * @param keyPath Path to key resource string.\n * @param placeholderPath Path to placeholder resource string.\n * @returns Populated dropdown filter with selected items.\n */\nfunction getDropdown(\n this: ContactsFilterManager,\n key: string,\n allKey: string,\n mapOptions: boolean,\n keyPath = 'classes.access-control.',\n placeholderPath = keyPath\n): DropdownFilter {\n return this.getDropdownFilter(\n this.intl.t(`${keyPath}${key}`),\n key,\n mapOptions\n ? (this.filterOptions[key] ?? []).map(({ id, name }: { id: string; name: string }) => ({ value: id, name }))\n : this.filterOptions[key] ?? [],\n this.queryParams[key] ?? [],\n true,\n {\n placeholder: this.intl.t(`${placeholderPath}${allKey}`),\n maxItemCount: 100\n }\n );\n}\n\nfunction getUserGroupDropdown(this: ContactsFilterManager): DropdownFilter {\n const customUserGroups = this.filterOptions.userGroups.map(({ id, name }: { id: string; name: string }) => ({\n value: id,\n name\n }));\n // Add default user group to the front of the array.\n customUserGroups.unshift({ value: '-1', name: this.intl.t('classes.access-control.notSet') });\n\n return this.getDropdownFilter(\n this.intl.t('classes.access-control.userGroups'),\n 'userGroups',\n customUserGroups,\n this.queryParams.userGroups ?? [],\n true,\n {\n placeholder: this.intl.t('classes.access-control.allUserGroups')\n }\n );\n}\n\nfunction getUserTypesDropdown(this: ContactsFilterManager): DropdownFilter {\n const userTypes = this.filterOptions.userTypes.map(({ id, name }: { id: string; name: string }) => ({\n value: id,\n name\n }));\n\n userTypes.unshift({ value: '0', name: this.intl.t('generic.none') });\n\n return this.getDropdownFilter(\n this.intl.t('generic.userTypes'),\n 'userTypes',\n userTypes,\n this.queryParams.userTypes ?? [],\n true,\n {\n placeholder: this.intl.t('classes.activity.event-history.allUserTypes')\n }\n );\n}\n\n/**\n * Utility class for filtering contacts.\n */\nexport default class ContactsFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true,\n resolvedModel: Record = {}\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues, freshData);\n\n const filters = [\n this.getSearchFilter('search', this.intl.t('generic.search'), {\n skip: true\n })\n ];\n\n const isPointCentral =\n this.contextManager.identityModel.isPointCentralAccessControl ||\n this.contextManager.identityModel.isPointCentral;\n\n const accessControlPermissions = await resolvedModel.permissions;\n\n const systemGroup = await this.contextManager.identityModel.selectedSystemGroup;\n\n if (accessControlPermissions.searchEnhancement) {\n if (freshData) {\n const fnGetFilterOption = (value: number, key: string) => ({\n value: String(value),\n name: this.intl.t(`classes.access-control.${key}`)\n });\n\n this.filterOptions = {\n credentials: [\n fnGetFilterOption(HasNoBadge, 'noBadge'),\n fnGetFilterOption(HasNoPinCode, 'noPin'),\n accessControlPermissions.viewMobileCredential\n ? fnGetFilterOption(HasNoMobileCredential, 'noMobileCredential')\n : undefined,\n fnGetFilterOption(HasMultipleCredentials, 'multipleCredentials')\n ].compact(),\n contactInfo: [\n fnGetFilterOption(HasNoMobileNumber, 'noMobileNumber'),\n fnGetFilterOption(HasNoEmailAddress, 'noEmail')\n ],\n accessPeriods: [\n fnGetFilterOption(ExpiredCredentials, 'expiredCredentials'),\n fnGetFilterOption(FutureStartDates, 'futureStartDate')\n ],\n userStatus: [\n fnGetFilterOption(PausedUsers, 'pausedUsers'),\n fnGetFilterOption(ExtendedUnlockTimeUsers, 'extendedUnlockUsers'),\n fnGetFilterOption(AntiPassbackExemptionUsers, 'apbExemptUsers'),\n accessControlPermissions.azureActiveDirectoryIntegration\n ? fnGetFilterOption(ActiveDirectoryUsers, 'activeDirectoryUsers')\n : undefined,\n accessControlPermissions.viewMobileCredential\n ? fnGetFilterOption(MobileCredentialUsers, 'mobileCredentialUsers')\n : undefined\n ].compact(),\n accessPoints: await resolvedModel.accessPoints,\n userGroups: await resolvedModel.accessGroups,\n userTypes: isPointCentral ? await resolvedModel.userTypes : undefined,\n accessPlans: await resolvedModel.accessPlans,\n userAttributes: await resolvedModel.availableUserAttributeFields\n };\n }\n\n filters.push(\n getDropdown.call(this, 'credentials', 'allCredentials', false),\n getDropdown.call(this, 'contactInfo', 'allContactInfo', false),\n getDropdown.call(this, 'accessPeriods', 'allAccessPeriods', false),\n getDropdown.call(this, 'userStatus', 'allUsers', false)\n );\n\n if (systemGroup?.isParentGroup) {\n const subs = systemGroup.childGroups;\n const options: any[] = [];\n const points = await this.filterOptions.accessPoints;\n subs.forEach(({ icon, systems, description }) => {\n const subSubs: any[] = [];\n systems.forEach(({ unitId }) => {\n points.forEach((point: AccessControlAccessPoint) => {\n if (point.systemId == unitId) {\n subSubs.push({\n value: point.id,\n name: point.name,\n secondaryDescription: point.systemDescription\n });\n }\n });\n });\n options.push({\n icon,\n name: description,\n subitems: subSubs\n });\n });\n\n filters.push(\n this.getDropdownFilterWithSubitems(\n this.intl.t('generic.devices.accessPoints'),\n 'accessPoints',\n options,\n queryParams.accessPoints,\n true,\n {\n placeholder: this.intl.t(\n 'components.access-control.access-plans.edit.access-points.allItems'\n ),\n maxItemCount: 100\n }\n )\n );\n } else {\n filters.push(\n getDropdown.call(\n this,\n 'accessPoints',\n 'allItems',\n true,\n 'generic.devices.',\n 'components.access-control.access-plans.edit.access-points.'\n )\n );\n }\n\n filters.push(\n getUserGroupDropdown.call(this),\n isPointCentral\n ? getUserTypesDropdown.call(this)\n : getDropdown.call(this, 'userTypes', 'userTypes', false, 'generic.'),\n getDropdown.call(this, 'accessPlans', 'allAccessPlans', true),\n getDropdown.call(this, 'userAttributes', 'noUserAttributes', true)\n );\n }\n\n this.filters = filters;\n }\n}\n","import { service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport type BasePromoteUserRouteModel = {\n user: ADCAsyncStoreFindRecord;\n duplicateUsers?: ADCAsyncStoreQuery;\n};\n\nexport default class BasePromoteUserRoute extends AdcBaseRoute {\n @service declare identityManager: IdentityManager;\n\n /** @override */\n isMediumWidthPage = true;\n\n // Navigate out of this page if viewing on mobile and have a parent route set\n redirect(): void {\n if (this.identityManager.isMobileApp) {\n this.contextManager.transitionToPreviousRoute();\n }\n }\n\n model({ id_user }: { id_user: string }): BasePromoteUserRouteModel {\n // For this route, we need the selected user and we need to find other users deemed to be duplicates.\n // We find the duplicates by making a AccessControlUser GET API call with getDuplicateUsers marked as true and\n // the user id of the user we want to find duplicates for.\n return {\n user: this.store.findRecord('access-control/access-control-user', id_user),\n duplicateUsers: this.store.query('access-control/access-control-user', {\n ids: [id_user],\n getDuplicateUsers: true\n })\n };\n }\n}\n","import EmberController from '@ember/controller';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\nimport DateFilter from 'customer-site/classes/helpers/filters/date-filter';\nimport DateRangeFilter from 'customer-site/classes/helpers/filters/date-range-filter';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type BaseFilter from 'customer-site/classes/helpers/filters/base-filter';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type FilteringRoute from './filtering-route';\nimport type ActivityFilterManager from './helpers/filter-manager';\n\n/**\n * @classdesc\n * A controller that provides support for displaying interactive listing of system activity.\n */\nexport default class ActivityListController extends EmberController {\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n\n declare model: ModelFrom;\n\n /**\n * Filter manager passed from route.\n */\n declare filtersManager: ActivityFilterManager;\n\n /**\n * The collection of applied filters.\n */\n @alias('filtersManager.appliedFilters')\n declare appliedFilters: (BaseFilter | DateRangeFilter | DateFilter)[];\n\n /**\n * Indicates there is at least one applied filter that is not a date filter.\n */\n @computed('appliedFilters')\n get hasNonDateFilterApplied(): boolean {\n return isPresent(this.appliedFilters.reject((f) => f instanceof DateFilter || f instanceof DateRangeFilter));\n }\n\n /**\n * The translated text for the link to the extended activity history page.\n */\n @computed()\n get extendedHistoryLinkText(): string {\n return this.intl.t('activity.event-history.index.extendedHistoryLinkText');\n }\n\n /**\n * Items for the export drop down.\n */\n @computed()\n get exportItems(): DropdownActionItem[] {\n return ['Csv', 'Pdf'].map((format) =>\n DropdownActionItem.create({\n name: this.intl.t(`generic.exportTo${format}`),\n action: () => this.export(format.toLowerCase())\n })\n );\n }\n\n /**\n * Update the page size and go to new page showing the first items from previous pageSize.\n * newPage is calculated by finding the number of full pages before the current page at the old page size then\n * converting that to the number of full pages before the current page in terms of the new page size.\n */\n @action\n changePageSize(pageSize: number): void {\n const { qp } = this.model,\n newPage = Math.floor((qp.page - 1) * (qp.pageSize / pageSize)) + 1;\n\n this.send('applyFilters', {\n queryParams: {\n pageSize,\n page: newPage\n }\n });\n }\n\n /**\n * Update the selected page.\n */\n @action\n changePage(page: number): void {\n this.send('applyFilters', {\n queryParams: { page }\n });\n }\n\n /**\n * Opens a new window with a link to the \"Export to Csv\" page.\n */\n @action\n async export(exportFormat: string): Promise {\n const { qp } = this.model,\n url = await this.ajax.apiRequestForValue('activity/historyEvents/getExportToCsvUrl'),\n { startDate, endDate } = qp;\n\n window.location.href = `${url}?filterParameters=${JSON.stringify(qp)}&startDate=${JSON.stringify(\n startDate\n )}&endDate=${JSON.stringify(endDate)}&exportFormat=${exportFormat}`;\n }\n\n /**\n * Called when the list of events has been rendered.\n */\n @action\n eventsHaveRendered(): void {\n // Ask route to restore previous scroll position.\n this.send('restoreScrollPosition');\n }\n}\n","import { action } from '@ember/object';\nimport EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from '../../../utils/ember';\nimport ActivityFilterManager from './helpers/filter-manager';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ActivityListController from './activity-list-controller';\nimport type FilterResultsRoute from './filter-results-route';\n\n/**\n * Returns the applications scroll element.\n */\nfunction getAppContentWrapper(): HTMLElement | null {\n return document.getElementById('app-content-wrapper');\n}\n\n/**\n * @classdesc\n * A route that provides support for displaying interactive listing of system activity.\n *\n * @note This route uses the model and query parameters from {@link classes.activity.event-history.FilterResultsRoute}, so it must be a child of that route.\n */\nexport default abstract class ActivityListRoute extends EmberRoute {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare intl: ADCIntlService;\n @service declare store: ServiceRegistry['store'];\n @service declare router: ServiceRegistry['router'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n declare currentModel: ModelFrom;\n\n // region Route state\n\n /**\n * The enumeration value for the extended history route.\n */\n abstract extendedHistoryRoute: number;\n\n /**\n * The filter manager.\n */\n filtersManager = new ActivityFilterManager(this, this.applyFilters, false);\n\n /**\n * The cached list scroll position.\n */\n scrollTop = 0;\n\n // endregion\n\n /** @override */\n afterModel(resolvedModel: ModelFrom, transition: Transition): void {\n // Initialize filters in manager.\n this.filtersManager.updateFilters(\n resolvedModel.qp,\n resolvedModel.defaultFilterValues,\n isFullTransition(transition)\n );\n\n const { url = null } = this.navigation.getRouteItem(this.extendedHistoryRoute) || {};\n resolvedModel.extendedHistoryLink = url;\n }\n\n /** @override */\n setupController(\n controller: ActivityListController,\n model: ActivityListRoute['model'],\n transition: Transition\n ): void {\n super.setupController(controller, model, transition);\n\n // Destroy temporary websocket events\n this.store.peekAll('activity/history-event').filterBy('isNew').invoke('destroyRecord');\n\n // Reset filter check\n this.contextManager.isActivityFilterApplied = false;\n\n // Synchronize filter manager with controller.\n controller.set('filtersManager', this.filtersManager);\n }\n\n // region Actions\n\n /**\n * Caches the current scroll position when the user transitions to another route within the activity center.\n */\n @action willTransition(transition: Transition): void {\n const parentName = this.routeName.replace('.index', ''),\n targetIsCurrent = transition.to.find((r) => r.name === parentName);\n\n this.scrollTop = targetIsCurrent ? getAppContentWrapper()?.scrollTop ?? 0 : 0;\n }\n\n /**\n * Resets the current scroll position and updates the scroll element.\n */\n @action resetScroll(): void {\n const el = getAppContentWrapper();\n if (el) {\n el.scrollTop = this.scrollTop = 0;\n }\n }\n\n /**\n * Restores the scroll element to the cached value.\n */\n @action restoreScrollPosition(): void {\n const el = getAppContentWrapper();\n if (el) {\n el.scrollTop = this.scrollTop;\n }\n }\n\n /**\n * Applies the passed filters via route transition.\n */\n @action applyFilters(filters: { queryParams: Record }): void {\n if (!this.filtersManager.validateFilterLength(filters.queryParams)) {\n this.refresh();\n return;\n }\n\n this.router.transitionTo(filters);\n\n // Re-expand each day and reset scroll position.\n this.currentModel.activityDays.forEach((ad) => (ad.isExpanded = true));\n this.resetScroll();\n }\n\n // endregion\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport BaseMediaEventController from './base-media-event-controller';\n\n/**\n * @classdesc\n * Base image sensor upload media route.\n */\nexport default class BaseImageEventController extends BaseMediaEventController {\n /**\n * The 0-based index of the selected frame.\n */\n @tracked frame = 0;\n\n /**\n * Selects a new frame.\n *\n * @param frame The 0-based index of the frame to select.\n */\n @action\n selectFrame(frame: number): void {\n this.frame = frame;\n }\n}\n","import BaseMediaEventRoute from './base-media-event-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type FilterResultsRoute from './filter-results-route';\n\ntype Permissions = ModelFrom['clipPermissions'];\n\n/**\n * @classdesc\n * Base route for displaying uploaded image sensor activity routes.\n */\nexport default class BaseImageEventRoute extends BaseMediaEventRoute {\n model(params: any, transition: Transition): ModelFrom & { permissions: Permissions } {\n return {\n ...super.model(params, transition),\n permissions: (this.modelFor(transition.to.parent!.name) as ModelFrom).clipPermissions\n };\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n

{{t \\'generic.confirmDelete\\' objectName=@model.event.description}}

\\n\\n {{#if this.showDeleteAtPanelOption}}\\n \\n {{/if}}\\n
\\n\\n\",{ moduleName: \"customer-site/components/modals/activity/event-history/delete-media/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { getErrorText } from 'customer-site/utils/ember';\nimport { intlPath } from '@adc/i18n/path';\nimport { ImageSensorUpload } from '../../../../../enums/EventType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type NotificationService from '@adc/ui-components/services/notification-manager';\nimport type HistoryEventModel from 'customer-site/models/activity/history-event';\n\ninterface DeleteMediaModalArgs {\n model: {\n event: HistoryEventModel;\n };\n}\n\n/**\n * @classdesc\n * A modal for deleting activity center media.\n */\n@intlPath({ path: 'modals/activity/event-history/delete-media' })\nexport default class DeleteMediaModal extends Component {\n @service declare notificationManager: NotificationService;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalsService;\n\n /**\n * Whether to delete media from the panel as well as the DB.\n */\n deleteAtPanel = false;\n\n /**\n * Indicates whether to show the delete at panel option.\n */\n @equal('args.model.event.eventType', ImageSensorUpload)\n declare showDeleteAtPanelOption: boolean;\n\n @action async deleteMedia(buttonAnimation: Promise): Promise {\n const { notificationManager } = this;\n\n try {\n await this.args.model.event.deleteMedia(this.deleteAtPanel);\n\n notificationManager.addSuccess(this.intl.tc(this, 'success'));\n buttonAnimation.then(() => this.modals.closeModal());\n } catch (ex) {\n notificationManager.addError(getErrorText(ex) ?? '');\n }\n\n return false;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Activity::EventHistory::DeleteMedia': typeof DeleteMediaModal;\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport DeleteMediaModal from 'customer-site/components/modals/activity/event-history/delete-media/index';\nimport { EmberEventHistory, EmberEnterpriseEventHistory } from '../../../enums/CustomerPageUrl';\n\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type HistoryEventModel from 'customer-site/models/activity/history-event';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Base activity history video event controller, which displays a single captured video clip or image sensor clip.\n */\nexport default class BaseMediaEventController extends Controller {\n @service declare contextManager: ContextManager;\n @service declare modals: ModalsService;\n\n /**\n * Deletes the collection of media for the passed {@link models.activity.Record}.\n */\n @action deleteMedia(event: HistoryEventModel): void {\n this.modals.showModal(DeleteMediaModal, { event }, () => {\n // Was the media successfully deleted?\n if (isEmpty(event.hasMany('media').ids())) {\n // Redirect to event history route.\n this.contextManager.replaceRouteWithNativeRoute(\n this.contextManager.isEnterprise ? EmberEnterpriseEventHistory : EmberEventHistory\n );\n }\n\n return true;\n });\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../base-route';\nimport ActivityItem from './helpers/activity-item';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type ActivityDay from 'customer-site/models/activity/activity-day';\n\n/**\n * @classdesc\n * Base route for activity center media sub-routes.\n */\nexport default class BaseMediaEventRoute extends AdcBaseRoute {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare store: ServiceRegistry['store'];\n\n isMediumWidthPage = true;\n\n /** @override */\n model }>(\n { id_evt }: { id_evt: string },\n transition: Transition\n ): { item: Promise } {\n const id = Number(id_evt),\n { activityDays } = this.modelFor(transition.to.parent!.name) as T,\n { showPreferredTimezone } = this.contextManager;\n\n return {\n item: (async () => {\n const days = await activityDays,\n timezone = await showPreferredTimezone;\n\n return new ActivityItem(\n this,\n days.slice().reduce((model, day) => model || day.events.findBy('correlatedEventId', id), null)!,\n {\n showPreferredTimezone: timezone,\n hideMedia: true\n }\n );\n })()\n };\n }\n}\n","import { assert } from '@ember/debug';\nimport { ThirdPartyAnalyticEvent } from 'customer-site/enums/EventType';\nimport Ov2Event from 'customer-site/models/video/ov2-event';\nimport ThirdPartyAnalyticsEvent from 'customer-site/models/video/third-party-analytics-event';\nimport { isPackageDetectionEvent } from 'customer-site/utils/video/general';\nimport BaseMediaEventRoute from './base-media-event-route';\n\nimport type DownloadFormatModel from '@adc/login-setup-addon/models/video/download-format';\nimport type Transition from '@ember/routing/transition';\nimport type Record from 'customer-site/models/activity/record';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type FilterResultsRoute from './filter-results-route';\nimport type ActivityItem from './helpers/activity-item';\n\n/**\n * @classdesc\n * Sub route for displaying video activity media.\n */\nexport default class BaseVideoEventRoute extends BaseMediaEventRoute {\n /**\n * Gets the video event model for the selected activity item.\n */\n getVideo(item: ActivityItem): Promise {\n return (async () => {\n const { model } = item;\n assert('Activity item model is required.', model);\n\n const event = (await model.media).slice()[0];\n if (event instanceof Ov2Event && isPackageDetectionEvent(model.eventType)) {\n const { videoEvent } = event;\n // If we can't get the video event from the loaded data, we will call api to get the ov2Event record, which contains the video event we want.\n return (\n videoEvent ??\n (() => this.store.findRecord('video/ov2-event', event.id).then((record) => record.videoEvent))()\n );\n }\n\n // If this is a third party analytic event, pull the clip off of it.\n if (event instanceof ThirdPartyAnalyticsEvent && model.eventType === ThirdPartyAnalyticEvent) {\n return event.clip;\n }\n\n return event;\n })();\n }\n\n model(\n params: any,\n transition: Transition\n ): {\n item: Promise;\n permissions: ModelFrom['videoPermissions'];\n formats: ADCAsyncStoreFindAll;\n video: Promise;\n } {\n const { item } = super.model(params, transition);\n\n // Get activity item, video clip permissions, download formats and video event model.\n return {\n item,\n permissions: (this.modelFor(transition.to.parent!.name) as ModelFrom).videoPermissions,\n formats: this.store.findAll('video/download-format'),\n video: item.then((item) => this.getVideo(item))\n };\n }\n}\n","import { computed } from '@ember/object';\nimport FilteringController from './filtering-controller';\n\n/**\n * @classdesc\n * Base controller for the extended activity history routes.\n *\n * @class classes.activity.event-history.ExtendedActivityController\n */\nexport default class ExtendedActivityController extends FilteringController {\n // region Controller state\n\n /** @override */\n @computed()\n get defaultFilterValues() {\n return {\n ...super.defaultFilterValues,\n recipients: []\n };\n }\n\n /**\n * The recipient IDs to send the results to.\n *\n * @type {Array}\n */\n recipients = [];\n\n /**\n * Filter manager passed from route.\n *\n * @type {classes.activity.event-history.helpers.ActivityFilterManager}\n */\n filtersManager;\n\n // endregion\n}\n","import { computed } from '@ember/object';\nimport { isFullTransition } from 'customer-site/utils/ember';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport FilteringRoute from './filtering-route';\nimport ActivityFilterManager from './helpers/filter-manager';\n\n/**\n * @classdesc\n * Base route for the extended activity history routes.\n *\n * @class classes.activity.event-history.ExtendedActivityRoute\n */\nexport default class ExtendedActivityRoute extends FilteringRoute {\n /**\n * Filters manager for extended activity history.\n *\n * @type {classes.activity.event-history.helpers.ActivityFilterManager}\n */\n filtersManager = new ActivityFilterManager(this, (filters) => this.transitionTo(filters), true);\n\n /** @override */\n @computed()\n get queryParams() {\n return {\n ...super.queryParams,\n recipients: getQueryParam('array')\n };\n }\n\n /** @override */\n model(params, transition) {\n const { page, pageSize } = params;\n\n return {\n ...super.model(params, transition),\n requests: this.store.query('activity/extended-activity-history/request', { page, pageSize })\n };\n }\n\n /** @override */\n afterModel(resolvedModel, transition) {\n // Initialize filters in manager.\n this.filtersManager.updateFilters(\n resolvedModel.qp,\n resolvedModel.defaultFilterValues,\n isFullTransition(transition)\n );\n }\n\n /** @override */\n setupController(controller, model) {\n super.setupController(controller, model);\n\n // Synchronize filter manager with controller.\n controller.set('filtersManager', this.filtersManager);\n }\n\n /** @override */\n deactivate() {\n // We load deleted email address models on this route, which we don't want to use on other routes.\n // As such, we need to unload them before we transition.\n this.store.unloadAll('users/email-address');\n }\n}\n","import { computed } from '@ember/object';\nimport FilteringController from './filtering-controller';\n\n/**\n * @classdesc\n * A controller that provides support for extended activity center filtering with visible results.\n */\nexport default class FilterResultsController extends FilteringController {\n // region QueryParameters\n\n @computed()\n get defaultFilterValues(): FilteringController['defaultFilterValues'] & {\n searchString: string;\n } {\n return {\n ...super.defaultFilterValues,\n searchString: ''\n };\n }\n\n /**\n * The text to search for.\n */\n searchString = this.defaultFilterValues.searchString;\n\n /**\n * Time (in ms) to debounce search bar text.\n */\n debounceTimeMs = 1000;\n\n // endregion\n}\n","import { isFullTransition } from '../../../utils/ember';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport FilteringRoute, { filteringRouteQueryParams } from './filtering-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type ActivityDay from 'customer-site/models/activity/activity-day';\nimport type UploadClipPermissions from 'customer-site/models/image-sensor/upload-clip-permission';\nimport type SavedClipPermissions from 'customer-site/models/video/permissions/saved-clip-permission';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { FilteringRouteParams } from './filtering-route';\n\nexport const filterResultsRouteQueryParams = {\n ...filteringRouteQueryParams,\n debounceTimeMs: getQueryParam(),\n searchString: getQueryParam('string')\n};\n\n/**\n * @classdesc\n * A route that provides support for activity center filtering and requesting data for display.\n */\nexport default class FilterResultsRoute extends FilteringRoute {\n queryParams = filterResultsRouteQueryParams;\n\n model(\n params: FilteringRouteParams,\n transition: Transition\n ): ModelFrom & {\n activityDays: ADCAsyncStoreQuery;\n clipPermissions: UploadClipPermissions | ADCAsyncStoreFindRecord | null;\n videoPermissions: SavedClipPermissions | ADCAsyncStoreFindRecord | null;\n extendedHistoryLink?: string | null;\n } {\n const { store, contextManager } = this,\n { startDate, endDate, ...p } = params,\n id = contextManager.isEnterprise\n ? contextManager.getSelectedSystemGroupId()\n : contextManager.getSelectedSystemId(),\n storeAccess = isFullTransition(transition) ? 'findRecord' : 'peekRecord';\n\n return {\n ...super.model(params, transition),\n activityDays: store.query('activity/activity-day', {\n startTime: startDate.toISOString(),\n endTime: endDate ? endDate.toISOString() : null,\n ...p\n }),\n clipPermissions: store[storeAccess]('image-sensor/upload-clip-permission', id),\n videoPermissions: store[storeAccess]('video/permissions/saved-clip-permission', id)\n };\n }\n}\n","import EmberController from '@ember/controller';\nimport { setProperties, computed } from '@ember/object';\nimport setMilliseconds from 'date-fns/setMilliseconds';\nimport subDays from 'date-fns/subDays';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './filtering-route';\nimport type { FilteringRouteParams } from './filtering-route';\n\n/**\n * @classdesc\n * A controller that provides support for basic activity center filtering.\n */\nexport default class FilteringController extends EmberController {\n declare model: ModelFrom;\n\n // region controller state\n\n /**\n * The default values for this controllers query parameters.\n */\n @computed()\n get defaultFilterValues(): Omit {\n return {\n deviceTypes: [],\n endDate: null,\n evtTypes: [],\n startDate: subDays(setMilliseconds(new Date(), 0), 7),\n users: [],\n userTypes: []\n };\n }\n\n /**\n * The device types to search for.\n */\n deviceTypes = this.defaultFilterValues.deviceTypes;\n\n /**\n * The last date for events (defaults to now).\n */\n endDate = this.defaultFilterValues.endDate;\n\n /**\n * The selected EventHistoryEventFilters.\n */\n evtTypes = this.defaultFilterValues.evtTypes;\n\n /**\n * The first date for events (defaults to one week ago).\n */\n startDate = this.defaultFilterValues.startDate;\n\n /**\n * The user to search for.\n */\n users = this.defaultFilterValues.users;\n\n /**\n * The PC user types to search for.\n */\n userTypes = this.defaultFilterValues.userTypes;\n\n /**\n * The currently selected page size.\n */\n pageSize = 100;\n\n /**\n * The index of the currently visible page.\n */\n page = 1;\n\n // endregion\n\n /**\n * Resets all query parameter values to their default value.\n */\n resetQueryParameterValues(): void {\n setProperties(this, this.defaultFilterValues);\n }\n}\n","import { inject as service } from '@ember/service';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport ADCBaseRoute from '../../base-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type FilteringController from './filtering-controller';\n\n/**\n * This maps the activity query param names to their respective ember models.\n */\nexport const activityFilterModelPaths = {\n users: 'user',\n userTypes: 'user-type',\n evtTypes: 'event',\n deviceTypes: 'device-type',\n globalDeviceIds: 'device-id',\n locations: 'location'\n};\n\nexport interface FilteringRouteParams {\n deviceTypes: string[];\n endDate: null | Date;\n evtTypes: number[];\n startDate: Date;\n users: string[];\n userTypes: string[];\n page: number;\n pageSize: number;\n}\n\nexport const filteringRouteQueryParams = {\n deviceTypes: getQueryParam('array'),\n endDate: getQueryParam('date'),\n evtTypes: getQueryParam('array'),\n startDate: getQueryParam('date'),\n users: getQueryParam('array'),\n userTypes: getQueryParam('array'),\n page: getQueryParam(),\n pageSize: getQueryParam()\n};\n\n/**\n * @classdesc\n * A route that provides support for basic activity center filtering.\n */\nexport default class FilteringRoute extends ADCBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n /**\n * Common query parameters for all activity center filtering.\n */\n queryParams = filteringRouteQueryParams;\n\n model(\n params: FilteringRouteParams,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _Transition: Transition\n ): {\n defaultFilterValues: FilteringController['defaultFilterValues'];\n qp: FilteringRouteParams;\n } {\n return {\n defaultFilterValues: (this.controllerFor(this.routeName) as FilteringController).defaultFilterValues,\n qp: {\n ...params\n }\n };\n }\n\n /** @override */\n resetController(controller: FilteringController, isExiting?: boolean): void {\n if (isExiting) {\n controller.resetQueryParameterValues();\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport differenceInSeconds from 'date-fns/differenceInSeconds';\nimport BaseCollection from './base-collection';\n\nimport type Record from 'customer-site/models/activity/record';\nimport type ActivityItem from './activity-item';\n\nexport interface ActivityEventMedia {\n model: Record;\n index: number;\n route: number;\n path?: string;\n eventId: number;\n eventType: number;\n}\n\n/**\n * @classdesc\n * Wrapper object for activity event groups.\n */\nexport default class ActivityGroup extends BaseCollection {\n /**\n * Indicates the group is currently expanded.\n */\n @tracked isExpanded = false;\n\n id: string;\n\n /**\n * The number of seconds to use for grouping items.\n */\n groupSize: number;\n\n constructor(host: unknown, items: ActivityItem[], id: string, groupSize: number) {\n super(host, items);\n\n this.id = id;\n this.groupSize = groupSize;\n }\n\n // region item aliases.\n\n /**\n * The date of the first {@link classes.activity.event-history.helpers.ActivityItem} in this group.\n */\n @alias('firstItem.eventDate')\n declare eventDate: Date;\n\n /**\n * The number of {@link classes.activity.event-history.helpers.ActivityItem} in this group.\n */\n @alias('items.length')\n declare count: number;\n\n /**\n * Group items are reversed so we need to check the last item for an activity gap.\n *\n * @override\n * @ignore\n */\n @alias('lastItem.hasActivityGap')\n declare hasActivityGap: boolean;\n\n // endregion\n\n // region Computed properties\n\n /**\n * The formatted date for this group.\n */\n @computed('firstItem.displayDate', 'lastItem.displayDate')\n get displayDate(): string {\n const first = this.firstItem.displayDate,\n last = this.lastItem.displayDate;\n\n // Are the first and last dates the same?\n if (first === last) {\n return first;\n }\n\n // Return compound.\n return `${first} - ${last}`;\n }\n\n /**\n * Indicates that at least one of the grouped events has media that the user can view.\n */\n @computed('items.hasMedia')\n get hasMedia(): boolean {\n return this.items.isAny('hasMedia') ?? false;\n }\n\n /**\n * The available media for the grouped event items (limited to 5 max).\n */\n @computed('items.@each.media')\n get media(): Promise {\n return (async () => {\n // Combine media from all items into a single collection, but return a max of five.\n const mediaList = await this.items.reduce(\n async (media, item) => [...(await media), ...(await item.media)],\n Promise.resolve([])\n );\n return mediaList.slice(0, 5);\n })();\n }\n\n // endregion\n\n // region Methods\n\n /** @override */\n isItemEligible(item: ActivityItem): boolean {\n return this.count < 12 && differenceInSeconds(item.eventDate, this.eventDate) <= this.groupSize;\n }\n\n // endregion\n}\n","import { computed, setProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isPresent, isEmpty } from '@ember/utils';\nimport { Completed, Pending, Failed, Cancelled } from 'customer-site/enums/CommandState';\nimport {\n DoorbellButtonPress,\n ImageSensorUpload,\n StoryInProgress,\n ThirdPartyAnalyticEvent\n} from 'customer-site/enums/EventType';\nimport { isPackageDetectionEvent, isVideoEvent } from 'customer-site/utils/video/general';\nimport differenceInHours from 'date-fns/differenceInHours';\nimport {\n EmberEventImage,\n EmberEventVideo,\n EmberEnterpriseEventImage,\n EmberEnterpriseEventVideo,\n EmberEventThumbnail,\n EmberEventSnapshot\n} from '../../../../enums/CustomerPageUrl';\nimport ContainerObject from '../../../../utils/container-object';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type HistoryEvent from 'customer-site/models/activity/history-event';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ActivityEventMedia } from './activity-group';\n\n/**\n * @classdesc\n * Wrapper object for activity events.\n */\nexport default class ActivityItem extends ContainerObject {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n\n /**\n * @constructor\n */\n constructor(\n host: any,\n model: HistoryEvent,\n {\n previous,\n showPreferredTimezone = false,\n hideMedia = false\n }: { previous?: ActivityItem | HistoryEvent; showPreferredTimezone?: boolean; hideMedia?: boolean } = {}\n ) {\n super(host);\n\n setProperties(this, { model, previous, showPreferredTimezone, hideMedia });\n }\n\n model?: HistoryEvent;\n\n previous?: ActivityItem | HistoryEvent;\n\n showPreferredTimezone = false;\n\n hideMedia = false;\n\n // region Model aliases.\n\n /**\n * The event date.\n */\n @alias('model.eventDate')\n declare eventDate: Date;\n\n /**\n * The name of the device associated with the event.\n */\n @alias('model.deviceDescription')\n declare device: string;\n\n /**\n * The description of the event.\n */\n @alias('model.description')\n declare description: string;\n\n /**\n * Indicates whether the source event was unexpected.\n */\n @alias('model.isUnexpected')\n declare isUnexpected: boolean;\n\n // endregion\n\n // region Computed properties\n\n /**\n * Indicates the current customer is an enterprise customer.\n */\n @alias('contextManager.isEnterprise')\n declare isEnterprise: boolean;\n\n /**\n * Indicates the current user's preferred timezone\n */\n @alias('contextManager.identityModel.preferredTimezone')\n declare preferredTimezone: string;\n\n /**\n * Indicates current status of device.\n */\n @alias('model.eventTypeName')\n declare eventTypeName: string;\n\n /**\n * Whether the history event is a command\n */\n @computed('model.commandState')\n get showCommandState(): boolean {\n return !(this.model?.commandState === Completed);\n }\n\n /**\n * Gets the string for the command state\n */\n @computed('model.commandState')\n get commandState(): string | undefined {\n return (\n {\n [Pending]: 'pending',\n [Failed]: 'failed',\n [Cancelled]: 'cancelled'\n } as Record\n )[this.model?.commandState ?? -1];\n }\n\n /**\n * Return the translated command state\n */\n @computed('commandState')\n get commandStatusString(): string {\n const key = this.commandState;\n return this.intl.t(`classes.activity.event-history.${key}`);\n }\n\n /**\n * Indicates if the logged in user can view video.\n */\n @computed()\n get canViewVideo(): boolean {\n const { contextManager } = this;\n return isPresent(\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(contextManager.isEnterprise ? EmberEnterpriseEventVideo : EmberEventVideo)\n );\n }\n\n /**\n * Indicates if the logged in user can view clips.\n */\n @computed()\n get canViewClip(): boolean {\n const { contextManager } = this;\n return isPresent(\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(contextManager.isEnterprise ? EmberEnterpriseEventImage : EmberEventImage)\n );\n }\n\n /**\n * Indicates if the logged in user can view doorbell thumbnails\n */\n @computed()\n get canViewThumbnail(): boolean {\n const { navigation } = this;\n return isPresent(navigation.getRouteItem(EmberEventThumbnail));\n }\n\n /**\n * Indicates if the logged in user can view snapshots\n */\n @computed()\n get canViewSnapshot(): boolean {\n const { navigation } = this;\n return isPresent(navigation.getRouteItem(EmberEventSnapshot));\n }\n\n /**\n * The event icon.\n */\n @computed('model.iconData.icon', 'hasMedia', 'media.firstObject.model.classificationIcons.[]')\n get icon(): Promise {\n return (async () => {\n // Use default icon if there are no classification icons.\n const {\n model: { classificationIcons = { [this.model?.iconData.icon ?? '']: '' } }\n } = ((await this.media).firstObject || { model: {} }) as { model: { classificationIcons: string } },\n keys = Object.keys(classificationIcons);\n\n // Return generic if more than one classification.\n return keys.length > 1 ? 'va-generic' : keys.firstObject;\n })();\n }\n\n /**\n * Indicates that there is at least 2 hours between this event and the previous event.\n */\n @computed('eventDate', 'previous.eventDate')\n get hasActivityGap(): boolean {\n const { eventDate } = this.previous || {};\n return isPresent(eventDate) && differenceInHours(eventDate as Date, this.eventDate) >= 2;\n }\n\n /**\n * Information about the media associated with this event.\n */\n @computed('model.{media.[],eventType}', 'canViewVideo', 'canViewClip', 'canViewThumbnail', 'canViewSnapshot')\n get mediaDetails(): { route: number; path?: string; eventType: number } | undefined {\n const { model, isEnterprise } = this;\n\n // Are there NO media clips?\n if (isEmpty(model?.hasMany('media').ids())) {\n return undefined;\n }\n\n const { eventType } = model as HistoryEvent;\n\n // Can the user view video AND is this a video event?\n if (this.canViewVideo && (isVideoEvent(eventType) || isPackageDetectionEvent(eventType))) {\n return {\n route: isEnterprise ? EmberEnterpriseEventVideo : EmberEventVideo,\n eventType\n };\n }\n\n if (this.canViewThumbnail && (eventType == DoorbellButtonPress || eventType == ThirdPartyAnalyticEvent)) {\n return {\n route: EmberEventThumbnail,\n eventType\n };\n }\n\n // Can the user view images AND is this an image sensor event?\n if (this.canViewClip && eventType === ImageSensorUpload) {\n return {\n route: isEnterprise ? EmberEnterpriseEventImage : EmberEventImage,\n eventType\n };\n }\n\n if (this.canViewSnapshot && eventType === StoryInProgress) {\n return {\n route: EmberEventSnapshot,\n eventType\n };\n }\n\n return undefined;\n }\n\n /**\n * Indicates whether this item has any media the user can view.\n */\n @computed('hideMedia', 'mediaDetails')\n get hasMedia(): boolean {\n return !this.hideMedia && isPresent(this.mediaDetails);\n }\n\n /**\n * The media associated with this event.\n */\n @computed('model.media.[]', 'mediaDetails')\n get media(): Promise {\n return (async () => {\n const { mediaDetails } = this;\n\n // Is there NO media?\n if (!mediaDetails) {\n // Return empty collection.\n return [];\n }\n\n const { model } = this,\n { correlatedEventId } = model as HistoryEvent;\n\n if (!model) {\n return [];\n }\n\n return (\n (await model.media).map((model, index) => ({\n model,\n index,\n eventId: correlatedEventId,\n ...mediaDetails\n })) ?? []\n );\n })();\n }\n\n /**\n * The formatted date for this event.\n */\n @computed('eventDate', 'preferredTimezone')\n get displayDate(): string {\n const { intl, preferredTimezone, showPreferredTimezone } = this,\n timestamp = intl.formatDateTz(this.eventDate, {\n hour: 'numeric',\n minute: '2-digit',\n timeZone: showPreferredTimezone ? preferredTimezone : intl.timeZone\n });\n\n return timestamp;\n }\n\n /**\n * Action items for this model (will be used in phase 2).\n */\n @computed('model')\n get actionItems(): never[] {\n return [];\n }\n\n // endregion\n}\n","import { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport BaseCollection from './base-collection';\n\nimport type ActivityItem from './activity-item';\n\n/**\n * @classdesc\n * Wrapper object for activity events grouped by locations.\n */\nexport default class ActivityLocation extends BaseCollection {\n // region Item aliases.\n\n /**\n * The location description.\n */\n @alias('firstItem.model.location.description')\n declare description: string;\n\n // endregion\n\n // region Computed properties\n\n /**\n * The activity items in this location, in reverse chronological order.\n */\n @computed('collectionItems')\n get locationItems(): { showTime: boolean; model: ActivityItem }[] {\n const { collectionItems } = this;\n\n // Do none of the items show time?\n if (!collectionItems.isAny('showTime') && collectionItems.lastObject) {\n // Make last item show time since it's the first chronological item.\n collectionItems.lastObject.showTime = true;\n }\n\n return collectionItems;\n }\n\n // endregion\n\n // region Methods\n /** @override */\n isItemEligible(item: ActivityItem): boolean {\n const fnGetLocation = (item: ActivityItem) => item.model?.belongsTo('location').id();\n return fnGetLocation(this.firstItem) === fnGetLocation(item);\n }\n // endregion\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias, gt } from '@ember/object/computed';\nimport ContainerObject from 'customer-site/utils/container-object';\n\nimport type ActivityItem from './activity-item';\n\n/**\n * @classdesc\n * Base wrapper object for grouped activity events.\n */\nexport default abstract class BaseCollection extends ContainerObject {\n /**\n * The collection of {@link classes.activity.event-history.helpers.ActivityItem} in this collection, in chronological order.\n */\n @tracked items: ActivityItem[];\n\n constructor(host: unknown, items: ActivityItem[]) {\n super(host);\n\n this.items = items;\n }\n\n // region Item aliases.\n\n /**\n * The first chronological {@link classes.activity.event-history.helpers.ActivityItem} in this collection.\n */\n @alias('items.firstObject')\n declare firstItem: ActivityItem;\n\n /**\n * The last chronological {@link classes.activity.event-history.helpers.ActivityItem} in this collection.\n */\n @alias('items.lastObject')\n declare lastItem: ActivityItem;\n\n /**\n * Indicates that there is at least 2 hours between the first event in this collection and the previous event.\n */\n @alias('firstItem.hasActivityGap')\n declare hasActivityGap: boolean;\n\n // endregion\n\n // region Computed properties\n\n /**\n * Indicates this collection contains multiple {@link classes.activity.event-history.helpers.ActivityItem}.\n */\n @gt('items.length', 1)\n declare hasMultipleEvents: boolean;\n\n /**\n * Indicates the collection contains at least one event that is unexpected.\n */\n @computed('items.@each.isUnexpected')\n get isUnexpected(): boolean {\n return this.items.isAny('isUnexpected') ?? false;\n }\n\n /**\n * Indicates the items in this collection span multiple minutes.\n */\n @computed('firstItem.displayDate', 'lastItem.displayDate')\n get hasTimeRange(): boolean {\n return this.firstItem.displayDate !== this.lastItem.displayDate;\n }\n\n /**\n * The activity items in this collection, in reverse chronological order.\n */\n @computed('items.[]', 'hasTimeRange')\n get collectionItems(): { showTime: boolean; model: ActivityItem }[] {\n const { hasTimeRange } = this;\n\n return this.items\n .map((model, idx, src) => {\n const previous = src[idx - 1];\n\n return {\n model,\n showTime: hasTimeRange && (!previous || previous.displayDate !== model.displayDate)\n };\n })\n .reverse();\n }\n\n // region Methods\n\n /**\n * Adds an a {@link classes.activity.event-history.helpers.ActivityItem} to the end of the items collection.\n */\n addItem(item: ActivityItem): void {\n this.items.addObject(item);\n }\n\n /**\n * Indicates if a given item is eligible to be part of this collection.\n */\n abstract isItemEligible(item: ActivityItem): boolean | void;\n\n // endregion\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { debounce } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { htmlSafe } from '@ember/template';\nimport DateRangeFilter from 'customer-site/classes/helpers/filters/date-range-filter';\nimport {\n EmberExtendedActivityHistory,\n EmberEnterpriseExtendedActivityHistory\n} from 'customer-site/enums/CustomerPageUrl';\nimport { CATEGORY_FILTER_SUBSECTIONS } from 'customer-site/models/activity/quick-filter';\nimport BaseFilterManager from '../../../helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { BaseFilterOptionalArgs } from 'customer-site/classes/helpers/filters/base-filter';\nimport type DateFilter from 'customer-site/classes/helpers/filters/date-filter';\nimport type ActivityFilterCategory from 'customer-site/models/activity/activity-filter-category';\nimport type ActivityPermission from 'customer-site/models/activity/activity-permission';\nimport type { CategoryFilter, CategoryFilterKey } from 'customer-site/models/activity/quick-filter';\nimport type UserEmailAddressModel from 'customer-site/models/users/email-address';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { DropdownFilterOptionalArgs } from '../../../helpers/filters/dropdown-filter';\nimport type DropdownFilter from '../../../helpers/filters/dropdown-filter';\n\nconst TWO_MONTHS = 61;\n\n/**\n * Utility class for activity center filtering.\n */\nexport default class ActivityFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n @service declare ajax: AjaxService;\n @service declare router: ServiceRegistry['router'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n @tracked\n permissions?: ActivityPermission;\n\n @tracked\n categories: Array = [];\n\n /**\n * Returns a configuration object for a simple select filter.\n *\n * @param {boolean} limitItemCount True if we should restrict number of visible items to 50.\n * @param {String} allKey The key (within classes.activity.event-history) for the \"all\" placeholder.\n * @param {String} key The key (within generic) for the description of this filter.\n * @param {String} [qpKey=key] The name of the value for this filter within the queryParams collection.\n * @param {String} [optionKey=key] The name of the option values for this filter within the filterOptions collection.\n */\n private getDropdown(\n limitItemCount: boolean,\n allKey: string,\n key: string,\n qpKey: string = key,\n optionKey: string = key\n ): DropdownFilter {\n const { intl } = this;\n const props: DropdownFilterOptionalArgs = {\n placeholder: intl.t(`classes.activity.event-history.${allKey}`)\n };\n\n if (!limitItemCount) {\n props.maxItemCount = 200;\n }\n\n return this.getDropdownFilter(\n intl.t(`generic.${key}`),\n qpKey,\n (async () => {\n const options = await this.filterOptions[optionKey];\n return (options || []).map(({ description: name, id: value }: { description: string; id: string }) => ({\n name,\n value: value\n }));\n })(),\n\n this.queryParams[qpKey] || [],\n true,\n props\n );\n }\n\n isExtendedActivity: boolean;\n\n /**\n * Indicates if we should exclude the default date filter.\n */\n skipDateFilter: boolean;\n\n constructor(\n host: unknown,\n fnApplyFilter: (value: { queryParams: Record }) => void | undefined = () => {},\n stageFilterChanges = false,\n disabled = false,\n skipDateFilter = false\n ) {\n super(host, fnApplyFilter, stageFilterChanges, disabled);\n\n this.isExtendedActivity = stageFilterChanges;\n this.skipDateFilter = skipDateFilter;\n }\n\n /**\n * Indicates this is an enterprise context.\n */\n @alias('identityManager.isEnterprise')\n declare isEnterprise: boolean;\n\n /**\n * Indicates this is a PointCentral context.\n */\n @alias('identityManager.isPointCentral')\n declare isPointCentral: boolean;\n\n /**\n * Indicates context in which Activity Filter Enhancements feature toggle is\n */\n @alias('permissions.canViewActivityFiltersV2')\n declare canViewActivityFiltersV2: boolean;\n\n /**\n * Indicates the user has VideoAnalytics read access and can therefore see 'other' clips.\n */\n @alias('permissions.canViewShowOtherClips')\n declare canViewShowOtherClips: boolean;\n\n /**\n * Indicates whether controls to create/edit/delete quick filters should be shown\n */\n @alias('permissions.canEditActivityQuickFilters')\n declare canEditActivityQuickFilters: boolean;\n\n get showHighlights(): boolean {\n return (\n this.queryParams.evtTypes.length == 0 &&\n this.queryParams.globalDeviceIds.length == 0 &&\n this.queryParams.users.length == 0 &&\n this.queryParams.categories.length == 0\n );\n }\n\n /**\n * Checks whether the given year is a leap year.\n */\n private isYearLeap = (year: number) => new Date(year, 1, 29).getDate() === 29;\n\n private getYearLength(): number {\n const today = new Date(),\n feb28 = new Date(today.getFullYear(), 1, 28, 23, 59, 59);\n\n const wasLastYearLeap = this.isYearLeap(today.getFullYear() - 1),\n isThisYearLeap = this.isYearLeap(today.getFullYear());\n\n if ((today <= feb28 && wasLastYearLeap) || (today > feb28 && isThisYearLeap)) {\n return 366;\n }\n\n return 365;\n }\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues, freshData);\n\n const { store, identityManager } = this;\n this.permissions = await store.findRecord('activity/activity-permission', identityManager.getContextId());\n\n // Get categorized filters only if residential account with Activity Filter Enhancements feature toggle.\n const { canViewActivityFiltersV2, isEnterprise, isPointCentral } = this;\n\n if (canViewActivityFiltersV2) {\n await this.updateCategorizedFilters(freshData);\n } else {\n const { isExtendedActivity, skipDateFilter, ajax } = this;\n\n if (freshData) {\n // Should we load filter options fresh from the store?\n this.filterOptions = [\n 'event',\n 'device-type',\n 'user',\n isPointCentral ? 'user-type' : undefined,\n isEnterprise ? 'location' : 'device-id'\n ]\n .compact()\n .reduce(\n (options, name) => ({\n ...options,\n [`${camelize(name)}s`]: store.findAll(`activity/history-${name}-filter`)\n }),\n isExtendedActivity\n ? {\n recipients: ajax.apiRequestForDataRecords(\n 'users/emailAddresses/getExtendedActivityRecipients'\n )\n }\n : {}\n );\n }\n\n const usersFilter = this.getDropdown(true, 'allUsers', 'users'),\n userTypesFilter = isPointCentral ? this.getDropdown(false, 'allUserTypes', 'userTypes') : undefined,\n eventTypesFilter = this.getDropdown(false, 'allEventTypes', 'eventTypes', 'evtTypes', 'events'),\n deviceTypesFilter = this.getDropdown(false, 'allDeviceTypes', 'deviceTypes'),\n recipientsFilter = isExtendedActivity\n ? this.getChecklistFilter(\n this.intl.t('components.activity.extended-activity-history-form.sendResultsTo'),\n 'recipients',\n (async () => {\n const emails = await this.filterOptions.recipients;\n\n // Remove deleted contacts.\n return emails\n .toArray()\n .filter((email: { id: number }) => email.id > 0)\n .map(({ id, address: label }: { id: string; address: string }) => ({\n id: Number(id),\n label\n }));\n })(),\n\n queryParams.recipients || [],\n {\n css: 'recipients-list'\n }\n )\n : undefined;\n\n const showPreferredTimezone = await this.identityManager.showPreferredTimezone;\n\n // Cache filter data.\n this.filters = [\n isExtendedActivity\n ? undefined\n : this.getSearchFilter('searchString', this.intl.t('generic.search'), {\n skip: true\n }),\n\n skipDateFilter\n ? undefined\n : this.getDateRangeFilter(\n showPreferredTimezone,\n isExtendedActivity ? this.getYearLength() : TWO_MONTHS\n ),\n\n // We've got an odd amount of filters for PC, so we use a slightly different order.\n ...(isPointCentral\n ? [eventTypesFilter, userTypesFilter, deviceTypesFilter, usersFilter]\n : [usersFilter, eventTypesFilter, deviceTypesFilter]),\n\n isEnterprise\n ? this.getDropdown(true, 'allLocations', 'locations')\n : this.getDropdown(true, 'allDevices', 'deviceNames', 'globalDeviceIds', 'deviceIds'),\n\n recipientsFilter\n ].compact();\n }\n }\n\n /*\n * Retrieve filter options sorted according to categories\n * This function will replace updateFilters once Activity Filter Enhancements hits GA\n */\n private async updateCategorizedFilters(freshData = true): Promise {\n const { store, skipDateFilter, isExtendedActivity } = this;\n\n const showPreferredTimezone = await this.identityManager.showPreferredTimezone;\n\n store.queryRecord('activity/activity-filter-catalog', { id: 1 }).then((catalog) => {\n // Should we load filter options fresh from the store?\n if (freshData && catalog !== undefined) {\n // Iterate through all categories\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error `activityFilterCategories` is async, so we need to await it before we use it: `this.categories = await catalog.activityFilterCategories;`.\n this.categories = catalog.activityFilterCategories;\n\n this.filters = [\n isExtendedActivity\n ? undefined\n : this.getSearchFilter('searchString', this.intl.t('generic.search'), {\n skip: true\n }),\n\n skipDateFilter\n ? undefined\n : this.getDateRangeFilter(\n showPreferredTimezone,\n isExtendedActivity ? this.getYearLength() : TWO_MONTHS\n )\n ].compact();\n }\n });\n }\n\n getDateRangeFilter(\n showPreferredTimezone: boolean,\n maxTimePeriod?: number,\n props: BaseFilterOptionalArgs = {}\n ): DateRangeFilter {\n const { intl } = this,\n [startDateFilter, endDateFilter] = this.getStartAndEndDateFilters(showPreferredTimezone, maxTimePeriod);\n\n return new DateRangeFilter(intl.t('generic.dateRange'), 'dateRange', startDateFilter, endDateFilter, {\n ...props,\n apply: ({ startDate, endDate }) =>\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline debounceTask.\n // eslint-disable-next-line ember/no-runloop\n debounce(\n this,\n this.updateActivityDateRange,\n startDateFilter,\n endDateFilter,\n startDate ?? startDateFilter.minimumDate, // We need to default to minimum start date if in AFE context\n endDate,\n 500\n )\n });\n }\n\n applyCategorizedFilterOption(categoryId: string, subsection: string, filterVal: string): void {\n const currQueryParams = { ...this.queryParams },\n currCategories: CategoryFilter[] = currQueryParams.categories,\n categoryKey = CATEGORY_FILTER_SUBSECTIONS.find((key) => key === subsection);\n let currCategory: CategoryFilter | undefined,\n currSubsection,\n updatedQueryParams = {};\n\n if (categoryKey) {\n currCategory = currCategories.find(({ id }) => id == categoryId);\n if (!currCategory) {\n currCategory = { id: categoryId };\n currCategories.push(currCategory);\n }\n\n if (!currCategory[categoryKey]) {\n currCategory[categoryKey] = [];\n }\n currSubsection = currCategory[categoryKey];\n } else {\n currSubsection = currQueryParams[subsection];\n }\n\n if (currSubsection.includes(filterVal)) {\n currSubsection.splice(currSubsection.indexOf(filterVal), 1);\n if (currCategory && categoryKey) {\n if (currSubsection.length === 0) {\n currCategory[categoryKey] = undefined;\n }\n if (this.getNumFiltersInCategory(currCategory) === 0) {\n currCategories.splice(currCategories.indexOf(currCategory), 1);\n }\n }\n } else {\n currSubsection.push(filterVal);\n updatedQueryParams = { ...currQueryParams };\n }\n\n this.router.transitionTo({\n queryParams: {\n ...updatedQueryParams\n }\n });\n }\n\n removeSubsectionFromQueryParams(categoryId: string, subsection: string): void {\n const currQueryParams = { ...this.queryParams },\n currCategories: CategoryFilter[] = currQueryParams.categories,\n categoryKey = CATEGORY_FILTER_SUBSECTIONS.find((key) => key === subsection);\n\n // for subsections that aren't a part of CATEGORY_FILTER_SUBSECTIONS, such as users\n if (!categoryKey) {\n currQueryParams[subsection] = [];\n this.router.transitionTo({ queryParams: { ...currQueryParams } });\n return;\n }\n\n const currCategory = currCategories.find(({ id }) => id == categoryId);\n if (currCategory) {\n delete currCategory[categoryKey];\n if (this.getNumFiltersInCategory(currCategory) === 0) {\n currCategories.splice(currCategories.indexOf(currCategory), 1);\n }\n }\n\n this.router.transitionTo({ queryParams: { ...currQueryParams } });\n }\n\n applyShowOtherClips(isToggleOn: boolean): void {\n const currQueryParams = { ...this.queryParams };\n let updatedQueryParams = {};\n\n currQueryParams['showOtherClips'] = isToggleOn;\n\n updatedQueryParams = { ...currQueryParams };\n\n this.router.transitionTo({\n queryParams: {\n ...updatedQueryParams\n }\n });\n }\n\n private getNumFiltersInCategory(filter: CategoryFilter): number {\n return CATEGORY_FILTER_SUBSECTIONS.reduce((sum, key: CategoryFilterKey) => sum + (filter[key]?.length ?? 0), 0);\n }\n\n filterApplied(categoryId: string, subsection: string, filterVal: string): boolean {\n const { queryParams } = this,\n currCategories: CategoryFilter[] = queryParams.categories,\n categoryKey = CATEGORY_FILTER_SUBSECTIONS.find((key) => key === subsection),\n currSubsection = categoryKey\n ? currCategories.find(({ id }) => id == categoryId)?.[categoryKey]\n : queryParams[subsection];\n\n return currSubsection?.includes(filterVal);\n }\n\n /**\n * Simultaneously updates the begin and end date values associated with the date range filter.\n *\n */\n private updateActivityDateRange(\n this: ActivityFilterManager,\n beginDate: DateFilter,\n endDate: DateFilter,\n beginDateValue: Date,\n endDateValue: Date | null\n ) {\n const { intl } = this;\n\n // Is the default value for end date \"null\"?\n if (endDate.defaultValue === null) {\n // Does the selected end date equal now (excluding seconds)?\n if (\n intl.formatDateTz(endDateValue, this.compareDateOptions) ===\n intl.formatDateTz(new Date(), this.compareDateOptions)\n ) {\n // Reset end date to null (now).\n endDateValue = null;\n }\n }\n\n if (beginDateValue != beginDate.value && beginDateValue != beginDate.minimumDate) {\n beginDate.value = beginDateValue;\n }\n if (endDateValue) {\n endDate.value = endDateValue;\n }\n\n this.router.transitionTo({\n queryParams: {\n ...this.queryParams,\n page: 1,\n startDate: beginDate.value,\n endDate: endDate.value\n }\n });\n }\n\n /**\n * Indicates that there are applied filters within the queryParams.\n */\n @computed('numQueryParamsFilters')\n get hasQueryParamsFilters(): boolean {\n return this.numQueryParamsFilters > 0;\n }\n\n /**\n * Resets queryParams filter values to their default values.\n *\n * @param {Object} overrides Optional values to override default values.\n */\n @action resetQueryParamsFilterValues(overrides: object = {}): void {\n if (this.hasQueryParamsFilters) {\n this.applyCleanFilters(overrides);\n }\n }\n\n /**\n * Gets the number of applied filters within the queryParams.\n */\n @computed(\n 'queryParams.{globalDeviceIds.length,evtTypes.length,users.length,deviceTypes.length,userTypes.length,locations.length,startDate,endDate,categories}'\n )\n get numQueryParamsFilters(): number {\n const qp = this.queryParams,\n categories: CategoryFilter[] = qp.categories;\n\n let total = [\n qp.evtTypes,\n qp.globalDeviceIds,\n qp.users,\n qp.deviceTypes,\n qp.userTypes,\n qp.location\n ].reduce((sum, a) => sum + (a?.length ?? 0), 0);\n\n total += categories.reduce((sum, c) => sum + this.getNumFiltersInCategory(c), 0);\n\n // Because startDate always has a default value even if the Specified Date Range filter is not applied, we have to check\n // if startDate has changed from its default to know if the filter should count towards the total filters applied count.\n // We also only count it as 1 filter applied if both startDate and endDate have values.\n const startDateValues = this.getFilterValues('startDate');\n\n const qpBeginDateMinute = Math.floor(qp.startDate.getTime() / 60000);\n const defaultDateMinute = Math.floor((startDateValues.defaultValue as Date).getTime() / 60000);\n\n if (qp.endDate || (startDateValues.defaultValue && qpBeginDateMinute !== defaultDateMinute)) {\n total += 1;\n }\n\n return total;\n }\n\n @computed('isEnterprise')\n get errorText(): string | ReturnType {\n const routeItem = this.navigation.getRouteItem(\n this.isEnterprise ? EmberEnterpriseExtendedActivityHistory : EmberExtendedActivityHistory\n );\n return routeItem\n ? htmlSafe(\n this.intl.t('enterprise.activity.event-history.index.errorText', {\n link: this.router.urlFor(routeItem.url)\n })\n )\n : this.intl.t('generic.requestError');\n }\n}\n","import AdcBaseRoute from './base-route';\nimport getChildRoutes from './helpers/settings-helper';\n\n/**\n * Category routes extend this with a defined routeId.\n *\n * @class classes.BaseCategoryRoute\n * @extends classes.BaseRoute\n */\nconst BaseCategoryRoute = AdcBaseRoute.extend(\n /** @lends classes.BaseCategoryRoute# **/ {\n /** @override */\n isMediumWidthPage: true,\n queryParams: {\n searchString: {\n refreshModel: true,\n replace: true\n }\n },\n\n /**\n * Model is the list of child pages that should be shown as options.\n *\n * @param {string} searchString The string used to filter settings\n * @returns { routes: Array<{ routeId:String, icon:String, pageTitle:String, description:String, routeItem: models.navigation.RouteItem, indicator:boolean|undefined, toggle:boolean|undefined }>}\n */\n async model({ searchString = '' }) {\n return {\n routes: await getChildRoutes.call(this, true, searchString)\n };\n }\n }\n);\n\nexport default BaseCategoryRoute;\n","import { set } from '@ember/object';\nimport { once } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport InfrastructureBaseRoute from '@adc/app-infrastructure/routes/base-route';\nimport { parseUrl, LEGACY_PAGE_ROUTE_NAME } from '@adc/app-infrastructure/routes/utils';\nimport { reject, resolve } from 'rsvp';\n\n/**\n * Updates the titles for the current route.\n *\n * @private\n * @instance\n * @memberof classes.BaseRoute\n */\nfunction updateRouteInfo() {\n // Assume there is no parent route path.\n let { queryParams, routeItem, routeName, hideBackArrowWeb, clearVisitedRouteStackMobile } = this;\n const queryParamsKeys = Object.keys(queryParams || {});\n\n // queryParams are tricky, because they are actually stored on the controller in variables.\n if (queryParamsKeys.length) {\n if (routeName !== LEGACY_PAGE_ROUTE_NAME) {\n queryParams = queryParamsKeys.reduce((cache, paramKey) => {\n // Get the actual value of the query param.\n cache[paramKey] = this.get(`controller.${paramKey}`);\n\n return cache;\n }, {});\n } else {\n // Get the URL from the route.\n queryParams = parseUrl(this.legacyPageSrc || '');\n }\n }\n\n // Push new route data to the service.\n this.contextManager.setCurrentRouteData(\n {\n routeItem,\n routeName,\n queryParams,\n route: this,\n pageTitle: this.getRouteItemTitle(),\n hideBackArrowWeb,\n clearVisitedRouteStackMobile\n },\n this.wasReplaceTransition\n );\n}\n\n/**\n * Update list of slugs stored for this route path.\n *\n * @note We might want to consider not doing this because we use it just for backwards navigation.\n * Instead, we could probably just store the current url and transition there once we\n * are transitioning using the router service.\n *\n * @param {Transition=} transition\n *\n * @private\n * @instance\n * @memberof classes.BaseRoute\n */\nfunction updateSlugs(transition = {}) {\n const { routeName } = this;\n set(\n this,\n 'slugs',\n (transition.routeInfos ?? [])\n .filter(({ name }) => name === routeName || !name.includes(routeName))\n .map((ri) => Object.keys(ri.params).map((key) => ri.params[key]))\n .reduce((acc, el) => acc.concat(el), [])\n );\n}\n\n/**\n * @classdesc\n *\n * Base route class that every route should extend from.\n *\n * Defines basic properties and functions for all routes.\n *\n * Note: Some customer-site specific logic will soon be moved into this class from the app-infrastructure base-route.\n *\n * @abstract\n * @class classes.BaseRoute\n * @extends InfrastructureBaseRoute\n */\nexport default InfrastructureBaseRoute.extend(\n /** @lends classes.BaseRoute# */ {\n ajax: service(),\n contextManager: service(),\n identityManager: service(),\n notificationManager: service(),\n userActivity: service(),\n router: service(),\n intl: service(),\n store: service(),\n\n init() {\n this._super(...arguments);\n\n this.on('deactivate', async () => {\n if (!this.contextManager.isInactive && !this.isDestroying) {\n await this.rollbackModelOnTransition();\n }\n });\n },\n\n /**\n * List of slugs needed to transition to this route.\n *\n * Note: We should store the full url in the visited routes stack instead of relying on this list.\n * See WEB-6177.\n *\n * @type {Array|undefined}\n */\n slugs: undefined,\n\n /**\n * When clicking the back button in the site header, should this page be skipped?\n * This may be useful for edit or setup routes with multiple pages, but should generally be false for most site pages.\n *\n * @type {boolean}\n */\n skipWhenTransitioningBack: false,\n\n /**\n * Does this route require initial setup steps to be completed?\n *\n * @type {boolean}\n */\n requiresInitialSetupCompleted: true,\n\n /**\n * Should this route just use the default start of loading?\n *\n * @note If this is set to false, route itself has to trigger this.\n *\n * @type {boolean}\n */\n useDefaultLoadingStart: true,\n\n /**\n * Should this route just use the default end of loading?\n *\n * @note If this is set to false, route itself has to trigger this.\n *\n * @type {boolean}\n */\n useDefaultLoadingEnd: true,\n\n /**\n * Explicitly hide the back arrow for this route\n * and show the hamburger menu instead\n *\n * @type {boolean}\n */\n hideBackArrowWeb: false,\n\n /**\n * Used to hide the back arrow for mobile.\n * Clears the visited route stack.\n *\n * @type {boolean}\n */\n clearVisitedRouteStackMobile: false,\n\n /**\n * Used to skip adding the root route to our stored list of visited routes when loading in a webview.\n * This is to avoid navigating back to the root route in a webview, when the webview has no pages defined\n * in its NavigiationRootEnumList.\n *\n * @type {boolean}\n */\n skipAddingRootRouteOnFirstLoadMobile: false,\n\n /**\n * Hook for rolling back model on transition away from the route.\n *\n * @returns {Promise}\n */\n async rollbackModelOnTransition() {\n // Do nothing as a base.\n },\n\n /**\n * Set whether the route is currently loading.\n *\n * @param {boolean} isLoading\n */\n setIsRouteLoading(isLoading) {\n this.contextManager.setIsLoading(isLoading);\n },\n\n /**\n * Returns the route item title.\n *\n * @returns {String}\n */\n getRouteItemTitle() {\n // Use pageTitle from routeItem, or use static page title from i18n.\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line ember/no-get\n return this.get('routeItem.pageTitle') || this.intl.tc(this, 'pageTitle');\n },\n\n /**\n * Sends the {@link CurrentRouteInfoType} to the application route.\n */\n sendRouteInfoToApp() {\n // Can the user NOT access this route?\n if (!this.canUserAccess()) {\n // Do not send info to app.\n return;\n }\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n once(this, updateRouteInfo);\n },\n\n /**\n * Can the logged in user access this route?\n *\n * Note: By default, each route can be accessed if it exists in the navigation. This is because the\n * server already checks permissions for all routes. However, a route can override this if need be\n *\n * @see Analogy to BasePermissionsChecker.HasSufficientPermissions in .net pages.\n *\n * @returns {boolean} True if the user can access this route.\n */\n canUserAccess() {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line ember/no-get\n return !!this.get('routeItem.id');\n },\n\n /**\n * Default beforeModel function that checks if the user has permissions to access this route.\n */\n async beforeModel(transition) {\n await this._super(...arguments);\n\n // Get the user activity event handler and timeout flag.\n const { contextManager, doNotTimeOut, userActivity } = this;\n\n // Update session timeout flag.\n userActivity.updateSessionTimeout(doNotTimeOut);\n\n // Are we about to force a logout during this transition?\n if (userActivity.forceLogout()) {\n // Log out from the session.\n contextManager.logout();\n\n // Then return early to prevent loading anymore data.\n return reject();\n }\n\n this.wasReplaceTransition = transition.urlMethod === 'replace';\n\n // Update list of slugs.\n updateSlugs.call(this, transition);\n\n if (this.useDefaultLoadingStart) {\n // Mark route as currently loading.\n this.setIsRouteLoading(true);\n }\n\n const postLoginRedirect = contextManager.postLoginRedirect;\n\n if (postLoginRedirect) {\n const { routeId, queryParams, routeSlugs } = postLoginRedirect;\n\n // Clear post login redirect value so that it does not get called infinitely.\n contextManager.set('postLoginRedirect', undefined);\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(routeId, queryParams, undefined, ...(routeSlugs || []));\n\n return resolve();\n }\n\n // Check if the logged in user has permissions\n if (!this.canUserAccess()) {\n // Just redirect to index, that will figure it out, and notify user.\n this.router\n .transitionTo('index')\n .finally(() => this.notificationManager.addWarning(this.intl.t('generic.routeNotAllowed')));\n\n return reject();\n }\n\n return resolve();\n },\n\n async afterModel() {\n await this._super(...arguments);\n const { contextManager, identityManager } = this;\n // If the route does not require 2FA, then don't launch the initial-setup process.\n if (contextManager.isInitialSetupRequired && this.requiresInitialSetupCompleted) {\n identityManager.launchInitialSetup();\n }\n },\n\n /**\n * Should this route ignore session time out logic?\n *\n * @type {boolean}\n */\n doNotTimeOut: false,\n\n /**\n * Transitions to the previous route in the stack.\n */\n transitionToPreviousRoute() {\n this.send('transitionToPreviousRoute');\n },\n\n /** @ignore */\n actions: /** @lends classes.BaseRoute# **/ {\n /**\n * Fired after transition to configure the application to show the new route.\n *\n * @ignore\n */\n didTransition() {\n // Update application router with route information.\n this.sendRouteInfoToApp();\n\n if (this.useDefaultLoadingEnd) {\n // Mark route as done loading.\n this.setIsRouteLoading(false);\n }\n\n // Scroll back to the top so that on transition the scrollable component won't stay scrolled.\n (document.getElementById('app-content-wrapper') || {}).scrollTop = 0;\n\n // Trigger an event so a route can listen on it instead. Otherwise it would have to call this base method manually.\n this.trigger('didTransition');\n },\n\n /**\n * Fired before a transition to clear non-persistent notifications.\n *\n * @ignore\n */\n willTransition() {\n this.notificationManager.clearNonPersistentNotifications();\n },\n\n /**\n * Note: Like the slugs list, should stop using this for query params and instead store the full url in the visited routes stack.\n * See WEB-6177.\n *\n * @override\n */\n queryParamsDidChange(changedParams) {\n const { routeName, queryParams } = this;\n\n // Send query params information to the application only if: this route is not a legacy route, this route\n // is currently active, this route has query params, and some changed query params are set to replace = false.\n if (routeName !== LEGACY_PAGE_ROUTE_NAME && this.router.currentRouteName === routeName) {\n if (Object.keys(queryParams).length) {\n if (Object.keys(changedParams).some((key) => !queryParams[key]?.replace)) {\n this.sendRouteInfoToApp();\n }\n }\n }\n\n return this._super(...arguments);\n }\n }\n }\n);\n","import { isEmpty } from '@ember/utils';\nimport AdcBaseRoute from './base-route';\nimport getChildRoutes from './helpers/settings-helper';\n\n/**\n * Settings routes extend this with a defined routeId.\n */\nexport default class BaseSettingsRoute extends AdcBaseRoute {\n /** @override */\n canUserAccess() {\n return super.canUserAccess() && !isEmpty(this.routeItem.relationship?.childRoutes);\n }\n\n /** @override */\n isMediumWidthPage = true;\n queryParams = {\n searchString: {\n refreshModel: true,\n replace: true\n }\n };\n\n /**\n * Model is the list of child pages that should be shown as options.\n *\n * @param {string} searchString The string used to filter settings\n * @returns { routes: Array<{ routeId:String, icon:String, pageTitle:String, description:String, routeItem: models.navigation.RouteItem }>}\n */\n async model({ searchString = '' }) {\n return {\n routes: await getChildRoutes.call(this, false, searchString)\n };\n }\n}\n","import Controller from '@ember/controller';\n\nimport type { ReportEditModel } from './base-report-edit-route';\n\n/**\n * @classdesc Add/Edit a report.\n */\nexport default abstract class BaseReportEditController extends Controller {\n /**\n * Route to transition to when done editing reports.\n */\n abstract reportRoute: number;\n\n /**\n * Model for the report edit routes.\n */\n declare model: ReportEditModel;\n}\n","import { getProperties } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isNone } from '@ember/utils';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n HVACHealthReport,\n VideoHealthReport,\n SBTMTemperatureHistoryReport,\n AccessHistoryReport,\n UserSummaryReport,\n CrowdGatheringReport,\n OccupancyPlusPeopleCountingReport,\n PeopleCountingReport,\n LineMonitoringReport,\n AlarmsIssuesReport,\n TroubleConditionTrendsReport,\n TroubleConditionDetailsReport,\n BatteryLevelReport,\n UserActivityReport,\n UnattendedShowingsReport\n} from 'customer-site/enums/CustomerNotificationType';\nimport {\n EmberAccessHistoryReportEdit,\n EmberBAAReportEdit,\n EmberUserSummaryReportEdit,\n EmberVideoHealthReportEdit,\n EmberAlarmsIssuesReportEdit,\n EmberUserActivityReportEdit,\n EmberEnterpriseAccessHistoryReportEdit,\n EmberEnterpriseUserSummaryReportEdit,\n EmberEnterpriseVideoHealthReportEdit,\n EmberEnterpriseAlarmsIssuesReportEdit,\n EmberEnterpriseBAAReportEdit,\n EmberEnterpriseTroubleConditionReportEdit,\n EmberEnterpriseTroubleConditionDetailsReportEdit,\n EmberEnterpriseBatteryLevelReportEdit,\n EmberEnterpriseUserActivityReportEdit,\n EmberEnterpriseSelfGuidedToursReportEdit,\n EmberEnterpriseReports,\n EmberReports\n} from 'customer-site/enums/CustomerPageUrl';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type BaseReport from 'customer-site/models/notifications/reports/base-report';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type OvRule from 'customer-site/models/video/ov-rule';\nimport type OvRuleGroup from 'customer-site/models/video/ov-rule-group';\n\nconst baaReportEditRoutes = { singleSystem: EmberBAAReportEdit, enterprise: EmberEnterpriseBAAReportEdit };\n\nexport const reportToRouteMap: Record = {\n [AccessHistoryReport]: {\n singleSystem: EmberAccessHistoryReportEdit,\n enterprise: EmberEnterpriseAccessHistoryReportEdit\n },\n [AlarmsIssuesReport]: {\n singleSystem: EmberAlarmsIssuesReportEdit,\n enterprise: EmberEnterpriseAlarmsIssuesReportEdit\n },\n [BatteryLevelReport]: {\n enterprise: EmberEnterpriseBatteryLevelReportEdit\n },\n [CrowdGatheringReport]: baaReportEditRoutes,\n [LineMonitoringReport]: baaReportEditRoutes,\n [OccupancyPlusPeopleCountingReport]: baaReportEditRoutes,\n [PeopleCountingReport]: baaReportEditRoutes,\n [TroubleConditionDetailsReport]: {\n enterprise: EmberEnterpriseTroubleConditionDetailsReportEdit\n },\n [TroubleConditionTrendsReport]: {\n enterprise: EmberEnterpriseTroubleConditionReportEdit\n },\n [UnattendedShowingsReport]: {\n enterprise: EmberEnterpriseSelfGuidedToursReportEdit\n },\n [UserActivityReport]: {\n singleSystem: EmberUserActivityReportEdit,\n enterprise: EmberEnterpriseUserActivityReportEdit\n },\n [UserSummaryReport]: { singleSystem: EmberUserSummaryReportEdit, enterprise: EmberEnterpriseUserSummaryReportEdit },\n [VideoHealthReport]: { singleSystem: EmberVideoHealthReportEdit, enterprise: EmberEnterpriseVideoHealthReportEdit }\n};\n\nexport type DeviceItem = {\n label: string;\n devices: BaseDevice[];\n};\n\nexport interface ReportEditModelData {\n report: Promise | BaseReport;\n devicesByType: Promise;\n // Video Health Report\n canViewLiveVideo?: Promise;\n // Business Activity Analytics Reports\n rules?: ADCAsyncStoreFindAll;\n ruleGroups?: ADCAsyncStoreFindAll;\n systemGroup?: ADCAsyncStoreFindRecord;\n}\n\nexport type ReportEditModel = {\n data: ReportEditModelData;\n notificationTypeId?: number;\n id_report: string;\n reportType?: number;\n};\n\n/**\n * @classdesc Edit an existing report.\n */\nexport default class BaseReportEditRoute extends AdcBaseRoute {\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare store: ServiceRegistry['store'];\n\n queryParams = {\n notificationTypeId: {\n refreshModel: true,\n replace: true\n },\n reportType: {\n refreshModel: true,\n replace: true\n }\n };\n\n /**\n * Create model data.\n *\n * @todo This is a bit strange. I think that we should be probably returning all of the data in the report itself and not trying to run multiple requests.\n * We can go about this in couple different ways:\n * - Return all of the necessary data in the report model.\n * - Have a partial report model that we show on the list view and then a full one with all of the other data here.\n * - Just load everything else that the report has relationships to asynchronously.\n */\n model({\n id_report,\n notificationTypeId,\n reportType\n }: {\n id_report: string;\n notificationTypeId?: number;\n reportType?: number;\n }): ReportEditModel {\n const reportPromise =\n id_report === 'new'\n ? this.getNewReportModel(notificationTypeId)\n : this.store.findRecord('notifications/reports/base-report', id_report);\n\n // 'data' is needed to properly set the report specific route model data.\n return {\n data: {\n report: reportPromise,\n devicesByType: this.getDevicesByType(reportPromise)\n },\n notificationTypeId,\n id_report,\n reportType\n };\n }\n\n /** @override */\n afterModel(model: ReportEditModel): void {\n const { notificationTypeId, id_report } = model,\n reportSpecificEditRoutes = reportToRouteMap[notificationTypeId ?? -1];\n\n // If this is a new report and it has a specific edit route navigate there.\n if (id_report === 'new' && reportSpecificEditRoutes) {\n this.navigation.transitionToRouteId(\n this.identityManager.isEnterprise\n ? reportSpecificEditRoutes?.enterprise ?? EmberEnterpriseReports\n : reportSpecificEditRoutes?.singleSystem ?? EmberReports\n );\n }\n }\n\n /**\n * Creates a new report model and populates it with some default data.\n */\n private async getNewReportModel(notificationTypeId: number | undefined) {\n const defaultReportData = await this.ajax.apiRequest>(\n `notifications/reports/baseReports/${notificationTypeId}/getDefaultDataForReportType`\n ),\n report = this.store.createRecord(\n 'notifications/reports/base-report',\n getProperties(\n defaultReportData.data.attributes,\n 'name',\n 'notificationType',\n 'notificationTypeName',\n 'notificationDescription',\n 'notificationTypeIcon',\n 'active',\n 'forcedTimeFrame',\n 'timeFrameType',\n 'allowsDeviceSelection',\n 'allowsLocationSelection',\n 'canEdit',\n 'ruleIdInfos',\n 'ruleGroupInfos',\n 'isTabularReport',\n 'attachmentSelection',\n 'attachmentOptions',\n 'alarmsIssuesReportOptions',\n 'troubleConditionReportOptions',\n 'canDisplayMostRecentReportView'\n )\n );\n\n if (defaultReportData.included) {\n if (defaultReportData.included.some((item) => item.type === 'enterprise/locations/location')) {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This code should be replaced with: `report.possibleLocations.setObjects(this.store.push({`.\n report.possibleLocations = this.store.push({\n data: defaultReportData.included.filter(\n (includedItem) => includedItem.type === 'enterprise/locations/location'\n )\n }) as LocationModel[];\n }\n }\n\n return report;\n }\n\n /**\n * Retrieves the device items to select from for the report if applicable.\n */\n private async getDevicesByType(reportPromise: Promise): Promise {\n const report = await reportPromise,\n { notificationType, allowsDeviceSelection } = report,\n { store } = this,\n fnGetDeviceItem = (devices: BaseDevice[], label = '') => {\n return { label, devices };\n };\n\n // If we don't allow device selection for this report, don't retrieve the devices.\n if (!allowsDeviceSelection) {\n return [];\n }\n\n switch (notificationType) {\n case VideoHealthReport: {\n const cameras = await store.findAll('video/devices/camera'),\n svrs = await store.findAll('video/devices/svr');\n\n if (svrs.length > 0) {\n const subItemIds = svrs.reduce(\n (arr, svr) =>\n [\n ...arr,\n svr.id,\n ...svr.getSubItems().reduce((arr, subItem) => [...arr, subItem.id], [])\n ].filter((item) => !isNone(item)),\n []\n );\n\n return [\n fnGetDeviceItem(svrs.map((svr) => svr)),\n fnGetDeviceItem(\n // Filter out any cameras that are already under an SVR\n cameras.filter((camera) => !subItemIds.includes(camera.id)),\n this.intl.t('commercial.reports.edit.camerasNotAssociatedWithAnSVR')\n )\n ];\n }\n\n return [fnGetDeviceItem(cameras.map((camera) => camera))];\n }\n case SBTMTemperatureHistoryReport: {\n const temperatureSensors = await store.findAll('devices/commercial-temperature-sensor');\n return [fnGetDeviceItem(temperatureSensors.map((sensor) => sensor))];\n }\n case HVACHealthReport: {\n const thermostats = await store.findAll('devices/thermostat');\n return [fnGetDeviceItem(thermostats.filter((t) => t.supportsHvacAnalytics))];\n }\n default: {\n const sensors = await store.findAll('devices/sensor');\n return [fnGetDeviceItem(sensors.filter((s) => s.isMonitoringEnabled))];\n }\n }\n }\n}\n","import { set } from '@ember/object';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type BaseReport from 'customer-site/models/notifications/reports/base-report';\nimport type { ReportEditModel } from './base-report-edit-route';\n\n/**\n * Enum defining the extra data keys.\n */\nexport enum ExtraDataKeyEnum {\n ShowUserAttributes = 'showAttr',\n ExpectedInPersonDays = 'eadb'\n}\n\n/**\n * Route extended by reports for which the extra data property should be processed.\n */\nexport default abstract class ExtraDataRoute extends AdcBaseRoute {\n /**\n * Sets the default values for 'extraData'.\n */\n abstract extraDataDelegate: (report: BaseReport) => void;\n\n afterModel(model: ReportEditModel) {\n (async () => {\n const report = await model.data.report;\n this.extraDataDelegate(report);\n set(model.data, 'report', report);\n })();\n }\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type AccessCardCredential from 'customer-site/models/access-control/credentials/access-card-credential';\nimport type BaseCredential from 'customer-site/models/access-control/credentials/base-credential';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\n\n/**\n * Map an array of dropdown options to an array of DropdownActionItems.\n\nexport function mapCredentialDropdownOptions(\n this: BaseUserCredentialManager<\n BaseUser,\n BasePermissionsCollection\n >,\n dropdownOptions: [string, string, (credential: BaseCredential) => void][],\n credential: BaseCredential\n): DropdownActionItem[] {\n return dropdownOptions.map(([name, icon, action]) =>\n DropdownActionItem.create({\n name: this.intl.t(`generic.${name}`),\n icon,\n action: () => action.call(this, credential)\n })\n );\n} */\n\ntype EditCredentialFn = (credential?: BaseCredential) => unknown;\n\ninterface BaseUserCredentialsComponentArgs {\n user: Type;\n permissions: PermissionsType;\n setMobileModalOnLoadPropertyTrue(): void;\n addCredential: EditCredentialFn;\n editCredential: EditCredentialFn;\n deleteCredential: EditCredentialFn;\n isReadOnly: boolean;\n}\n\n/**\n * Interface for the Credentials we display in the UI.\n */\nexport interface Credential {\n icon: string;\n code: string;\n options: DropdownActionItem[];\n}\n\n/**\n * @classdesc\n * Abstract class that holds shared logic for handling credentials. Shared between the Access Control and PointCentral context.\n */\nexport default abstract class BaseUserCredentialManager<\n UserType extends BaseUser,\n PermissionsType extends BasePermissionsCollection\n> extends Component> {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * The credentials that the user has.\n */\n abstract get credentials(): Credential[];\n\n /**\n * The add credential options for the user.\n */\n abstract get addCredentialOptions(): DropdownActionItem[];\n\n /**\n * Whether or not the credential can be modified.\n */\n protected abstract canCredentialBeModified(credential?: BaseCredential): boolean;\n\n @tracked isEditMobileCredentialActive = false;\n @tracked mobileCredentialToEdit?: AccessCardCredential;\n\n /**\n * Map an array of dropdown options to an array of DropdownActionItems.\n */\n protected mapCredentialDropdownOptions(\n dropdownOptions: [string, string, (credential?: BaseCredential) => void][],\n credential?: BaseCredential\n ): DropdownActionItem[] {\n return dropdownOptions.map(([name, icon, action]) =>\n DropdownActionItem.create({\n name: this.intl.t(`generic.${name}`),\n icon,\n action: () => action.call(this, credential)\n })\n );\n }\n\n /**\n * Opens mobile credential modal and passes supplied credential if it exists\n */\n @action addResendMobileCredential(mobileCredential?: AccessCardCredential): void {\n if (this.canCredentialBeModified(mobileCredential)) {\n Object.assign(this, {\n mobileCredentialToEdit: mobileCredential,\n isEditMobileCredentialActive: true\n });\n }\n }\n\n /**\n * Call the action to delete the specified credential from the user.\n */\n @action protected deleteCredential(credential?: BaseCredential): void {\n if (this.canCredentialBeModified(credential)) {\n this.args.deleteCredential(credential);\n }\n }\n}\n","import { NUM_MILLISECONDS_IN_DAY } from 'customer-site/utils/datetime';\n\nexport default class DateRange {\n constructor(startTime: Date, endTime: Date) {\n this.startTime = startTime;\n this.endTime = endTime;\n }\n\n /**\n * Represents the starting point of this date range.\n */\n startTime: Date;\n\n /**\n * Represents the ending point of this date range.\n */\n endTime: Date;\n\n /**\n * Checks to see if the provided DateRange overlaps with this DateRange.\n */\n dateRangesOverlap(that: DateRange): boolean {\n return this.startTime <= that.endTime && that.startTime <= this.endTime;\n }\n\n /**\n * Combines the provided date range into the current date range.\n */\n mergeDateRanges(that: DateRange): void {\n // Set the new start time to the min of the current and the new times.\n this.startTime = this.startTime <= that.startTime ? this.startTime : that.startTime;\n\n // Set the new end time to the max of the current and the new times.\n this.endTime = this.endTime >= that.endTime ? this.endTime : that.endTime;\n }\n\n /**\n * Checks to see if this date range is more than 24 hours.\n */\n isFullDayOrGreater(): boolean {\n return this.endTime.getTime() - this.startTime.getTime() >= NUM_MILLISECONDS_IN_DAY;\n }\n\n /**\n * Splits the current date range at the given date.\n * The result is that this object will have all of the date range from the start time up to the split point,\n * and a new date range will cover the time from the split point until the original end time.\n */\n splitAtDate(splitPoint: Date): DateRange {\n if (this.startTime >= splitPoint || this.endTime <= splitPoint) {\n // Invalid split point, return self.\n return this;\n }\n\n // The split point is valid. Set this range's end time to the split point,\n // and create a new range for the remaining time.\n const remainder = new DateRange(splitPoint, this.endTime);\n this.endTime = splitPoint;\n return remainder;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed, get, getProperties } from '@ember/object';\nimport { notEmpty } from '@ember/object/computed';\nimport { getOwner, setOwner } from '@ember/owner';\nimport { inject as service } from '@ember/service';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Component from '@glimmer/component';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\n\n/**\n * @classdesc\n * Utility class for assisting with the access arguments needed for copying enterprise users\n * between system groups. Used in a number of situations, such as adding systems or moving\n * selected systems.\n *\n * Subject to change, the current translations for this file are stored in the resource file\n * for the MoveSystems component.\n *\n * @class classes.enterprise.groups.UserAccessHelper\n */\nexport default class UserAccessHelper {\n @service declare intl: ServiceRegistry['adc-intl'];\n\n /**\n * Are we in an access control context right now?\n */\n @tracked\n declare isAccessControl: boolean;\n\n /**\n * Are we using APUM Retain users text?\n */\n @tracked\n declare useAPUMRetainUsers: boolean;\n\n /**\n * List of system IDs that we are moving.\n */\n @tracked\n declare selectedCustomerIds: number[];\n\n /**\n * Currently selected group to move our systems into.\n */\n @tracked\n declare selectedGroup: SystemGroup;\n\n /**\n * OPTIONAL alternative intlPath for removeSystems or others as they arise\n */\n @tracked\n declare removeSystemsPath: string;\n\n @notEmpty('removeSystemsPath')\n declare isRemoveSystems: boolean;\n\n intlPath = 'components.modals.enterprise.groups.move-systems.';\n\n constructor(\n context: Component,\n isAccessControl: boolean,\n selectedCustomerIds: number[],\n selectedGroup: SystemGroup,\n removeSystemsPath?: string,\n useAPUMRetainUsers?: boolean\n ) {\n setOwner(this, getOwner(context)!);\n\n this.isAccessControl = isAccessControl;\n this.useAPUMRetainUsers = useAPUMRetainUsers ?? false;\n this.selectedCustomerIds = selectedCustomerIds;\n this.selectedGroup = selectedGroup;\n this.removeSystemsPath = removeSystemsPath ?? '';\n }\n\n /**\n * By default, we are retaining access to all users that used to have access to the system(s)\n * unless the retain option is disabled.\n */\n @tracked removeAccess = this.disableRetainAccessOption;\n\n // #region User Access Args\n\n @computed(\n 'retainUsersDescription',\n 'removeUsersDescription',\n 'userAccessDescriptionKey',\n 'numberSelectedCustomerIds',\n 'removeAccess',\n 'selectAccessOption'\n )\n get userAccessArgs() {\n return getProperties(\n this,\n 'retainUsersDescription',\n 'removeUsersDescription',\n 'userAccessDescriptionKey',\n 'numberSelectedCustomerIds',\n 'removeAccess',\n 'selectAccessOption'\n );\n }\n\n /**\n * The following functions are used in the userAccessArgs argument for the User Access Selector.\n * They can be retrieved individually for custom use, or they can be returned together by calling\n * the userAccessArgs getter above.\n */\n\n /**\n * The resource key of the description of the modal to decide user access.\n */\n @computed('intlPath', 'movingSystemsWithinSameEnterprise', 'isAccessControl')\n get userAccessDescriptionKey(): string {\n const {\n movingSystemsWithinSameEnterprise,\n isAccessControl,\n intl,\n intlPath,\n removeSystemsPath,\n isRemoveSystems\n } = this;\n // If we are in Remove Systems, we want different description text up top\n if (isRemoveSystems) {\n if (isAccessControl) {\n return intl.t(removeSystemsPath.concat('removeLocationsAccessControlDescription'));\n }\n return intl.t(removeSystemsPath.concat('removeLocationsDescription'));\n }\n\n if (isAccessControl) {\n return intl.t(\n intlPath.concat(\n movingSystemsWithinSameEnterprise\n ? 'copyUsersBetweenSubgroupsAccessControlDescription'\n : 'copyUsersAccessControlDescription'\n )\n );\n }\n\n return intl.t(\n intlPath.concat(\n movingSystemsWithinSameEnterprise ? 'copyUsersBetweenSubgroupsDescription' : 'copyUsersDescription'\n )\n );\n }\n\n /**\n * Description for the retain users option.\n */\n @computed('intlPath', 'movingSystemsWithinSameEnterprise', 'isAccessControl')\n get retainUsersDescription(): string {\n const { movingSystemsWithinSameEnterprise, intl, intlPath, isAccessControl } = this;\n if (movingSystemsWithinSameEnterprise) {\n return intl.t(intlPath.concat('promoteSubgroupUsers'));\n }\n\n return intl.t(intlPath.concat(isAccessControl ? 'copyGroupAccessCodes' : 'copyGroupUsers'));\n }\n\n /**\n * Description for the remove users option.\n */\n @computed('intlPath', 'movingSystemsWithinSameEnterprise', 'isAccessControl')\n get removeUsersDescription(): string {\n const { movingSystemsWithinSameEnterprise, intl, intlPath, isAccessControl } = this;\n if (movingSystemsWithinSameEnterprise) {\n return intl.t(intlPath.concat('doNotPromoteSubgroupUsers'));\n }\n\n return intl.t(intlPath.concat(isAccessControl ? 'doNotCopyGroupAccessCodes' : 'doNotCopyGroupUsers'));\n }\n\n /**\n * Select a user access option.\n * Disable the ability to switch to retain access option if the retain option is disabled.\n */\n @action\n selectAccessOption() {\n if (!this.disableRetainAccessOption) {\n this.removeAccess = !this.removeAccess;\n }\n }\n\n // #endregion\n\n // #region Additional User Access Selector arguments\n\n /**\n * Temporarily disable the option to retain access when moving locations between same parent group\n * for AC group setup while it is under development.\n */\n @computed('movingSystemsWithinSameEnterprise', 'selectedGroup.parentGroup.{hasMLEGAccessControl,isAccessControl}')\n get disableRetainAccessOption(): boolean {\n const parentGroup = get(this.selectedGroup, 'parentGroup');\n if (!parentGroup) {\n return false;\n }\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error parentGroup is async, so we should await it before querying it's properties.\n return (\n !get(parentGroup, 'hasMLEGAccessControl') &&\n this.movingSystemsWithinSameEnterprise &&\n get(parentGroup, 'isAccessControl')\n );\n }\n\n /**\n * Bullet point text for the retain users option.\n */\n @computed(\n 'intlPath',\n 'movingSystemsWithinSameEnterprise',\n 'parentGroupName',\n 'isAccessControl',\n 'useAPUMRetainUsers'\n )\n get retainUsersBulletText(): string[] {\n const { isAccessControl, useAPUMRetainUsers, movingSystemsWithinSameEnterprise, intl, intlPath } = this;\n const combination = `${+isAccessControl}${+movingSystemsWithinSameEnterprise}`;\n switch (combination) {\n // Bullet text for *not* Access Control and *not* moving locations between subgroups\n case '00':\n return [\n intl.t(intlPath.concat('retainUsersWithinGroupFirstBulletText')),\n intl.t(intlPath.concat('retainUsersWithinGroupSecondBulletText'))\n ];\n // Bullet text for *not* Access Control and moving locations between subgroups\n case '01':\n return [\n intl.t(intlPath.concat('retainUsersBetweenGroupsFirstBulletText'), {\n parentGroupName: this.parentGroupName\n }),\n intl.t(intlPath.concat('retainUsersBetweenGroupsSecondBulletText'))\n ];\n // Bullet text for Access Control and *not* moving locations between subgroups\n case '10':\n return [\n intl.t(intlPath.concat('retainUsersWithinGroupFirstBulletText')),\n useAPUMRetainUsers\n ? intl.t(intlPath.concat('APUMRetainUsersSecondBulletText'))\n : intl.t(intlPath.concat('retainUsersWithinGroupAccessControlSecondBulletText'))\n ];\n // Bullet text for Access Control and moving locations between subgroups\n case '11':\n return [\n intl.t(intlPath.concat('retainUsersBetweenGroupsFirstBulletText'), {\n parentGroupName: this.parentGroupName\n }),\n intl.t(intlPath.concat('retainUsersBetweenGroupsAccessControlSecondBulletText'), {\n parentGroupName: this.parentGroupName\n }),\n intl.t(intlPath.concat('retainUsersBetweenGroupsAccessControlThirdBulletText'))\n ];\n default:\n return [];\n }\n }\n\n /**\n * Bullet point text for the remove users option.\n */\n @computed(\n 'intlPath',\n 'movingSystemsWithinSameEnterprise',\n 'parentGroupName',\n 'isAccessControl',\n 'useAPUMRetainUsers'\n )\n get removeUsersBulletText(): string[] {\n const { isAccessControl, useAPUMRetainUsers, movingSystemsWithinSameEnterprise, intl, intlPath } = this;\n const combination = `${+isAccessControl}${+movingSystemsWithinSameEnterprise}`;\n switch (combination) {\n // Bullet text for *not* Access Control and *not* moving locations between subgroups\n case '00':\n return [\n intl.t(intlPath.concat('removeUsersWithinGroupFirstBulletText')),\n intl.t(intlPath.concat('removeUsersWithinGroupSecondBulletText'))\n ];\n // Bullet text for *not* Access Control and moving locations between subgroups\n case '01':\n return [\n intl.t(intlPath.concat('removeUsersBetweenGroupsFirstBulletText'), {\n parentGroupName: this.parentGroupName\n }),\n intl.t(intlPath.concat('removeUsersBetweenGroupsSecondBulletText'))\n ];\n // Bullet text for Access Control and *not* moving locations between subgroups\n case '10':\n return [\n intl.t(intlPath.concat('removeUsersWithinGroupFirstBulletText')),\n useAPUMRetainUsers\n ? intl.t(intlPath.concat('APUMRemoveUsersSecondBulletText'))\n : intl.t(intlPath.concat('removeUsersWithinGroupAccessControlSecondBulletText'))\n ];\n // Bullet text for Access Control and moving locations between subgroups\n case '11':\n return [\n intl.t(intlPath.concat('removeUsersBetweenGroupsFirstBulletText'), {\n parentGroupName: this.parentGroupName\n }),\n intl.t(intlPath.concat('removeUsersBetweenGroupsAccessControlSecondBulletText'))\n ];\n default:\n return [];\n }\n }\n\n // #endregion\n\n // #region Helper Functions\n\n /**\n * Getter for our number of selected customer ids\n */\n @computed('selectedCustomerIds.length')\n get numberSelectedCustomerIds(): number {\n return this.selectedCustomerIds.length;\n }\n\n /**\n * Are we moving systems between subgroups in the same parent group?\n */\n @computed('selectedCustomerIds', 'selectedGroup.parentGroup.childGroups')\n get movingSystemsWithinSameEnterprise(): boolean {\n if (!this.selectedGroup) {\n return false;\n }\n\n const parentGroup = get(this.selectedGroup, 'parentGroup');\n if (!parentGroup) {\n return false;\n }\n\n // Figure out which systems are under the parent group of the selectedGroup, if any.\n const systemIdsUnderEnterprise =\n get(parentGroup, 'childGroups')\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error childGroups is async, so we should await it before iterating it.\n ?.map((group: SystemGroup) => {\n const systems = get(group, 'systems');\n return systems.map((system) => system.get('id'));\n })\n ?.flat() || [];\n\n // If every selected system to move is under the same parent group, and we are moving them to a group under\n // the same parent group, return true.\n return this.selectedCustomerIds.every((selectedCustomerId) =>\n systemIdsUnderEnterprise.includes(selectedCustomerId.toString())\n );\n }\n\n /**\n * If we are moving systems between subgroups, we should get our parent group name\n */\n @computed('movingSystemsWithinSameEnterprise', 'selectedGroup.parentGroup.description')\n get parentGroupName(): string {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error parentGroup is async, so we should await it before getting the description.\n return this.movingSystemsWithinSameEnterprise ? get(this.selectedGroup.get('parentGroup'), 'description') : '';\n }\n\n // #endregion\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\ninterface AddLoginOption {\n title: string;\n description: string;\n icon: string;\n routeToPage: number;\n queryParam: string;\n model: string;\n}\n\n/**\n * @classdesc\n *\n * Base route that displays the options to create an enterprise login. The options are created in the backend.\n */\nexport default class BaseEnterpriseAddEnterpriseLoginsOptionsRoute extends AdcBaseRoute {\n /** @override */\n isMediumWidthPage = true;\n\n model(): { addEnterpriseLoginOptions: Promise<{ addLoginOptions: AddLoginOption[] }> } {\n return {\n addEnterpriseLoginOptions: this.ajax.apiRequestForValue<{ addLoginOptions: AddLoginOption[] }>(\n 'enterprise/logins/addEnterpriseLoginOptions'\n )\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { English_US } from 'customer-site/enums/Culture';\n\nimport type Store from '@ember-data/store';\nimport type { LoginRoleItem } from 'customer-site/classes/enterprise/logins/edit/multi-group-login/route';\nimport type CustomerLoginModel from 'customer-site/models/logins/customer-login';\nimport type LoginPermissionsCollection from 'customer-site/models/logins/login-permissions-collection';\nimport type NonGroupLoginModel from 'customer-site/models/logins/non-group-login';\nimport type SystemGroupLoginModel from 'customer-site/models/logins/system-group-login';\nimport type SystemModel from 'customer-site/models/systems/system';\nimport type SystemGroupModel from 'customer-site/models/systems/system-group';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\n/**\n * The resolved model's type.\n */\nexport interface MultiGroupLoginResolvedModel {\n systemGroups?: SystemGroupModel[];\n standaloneSystems?: SystemModel[];\n login?: SystemGroupLoginModel | NonGroupLoginModel | CustomerLoginModel;\n assignableLoginRoles?: LoginRoleItem[];\n isAssociatingLogin?: boolean;\n loginPermissionsCollection?: LoginPermissionsCollection;\n}\n\nexport default abstract class BaseLoginController extends EmberController {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n @service declare navigation: NavigationService;\n\n /**\n * The route id.\n */\n abstract loginIndexRouteId: number;\n\n /**\n * The currently selected culture id.\n */\n @tracked cultureIdSelection = English_US;\n\n /**\n * Whether or not the culture id has been changed.\n */\n @tracked cultureIdChanged = false;\n\n /**\n * The loaded model, including all of the system groups the login has access to, information about the logged-in user,\n * and all of the login templates on the groups the login has access to.\n */\n @tracked resolvedModel: MultiGroupLoginResolvedModel = {};\n\n /**\n * Did the end-user type-in a valid email address?\n */\n @computed('resolvedModel.login.emailAddress')\n get displayEmailAddressError(): boolean {\n const emailAddress = this.resolvedModel.login?.emailAddress;\n\n // Show an error string if emailAddress is defined and its empty or an incorrect format.\n if (emailAddress === undefined) {\n return false;\n }\n\n const email = emailAddress.trim();\n return email === '' || !email.match(/\\S+@\\S+\\.\\S+/);\n }\n\n /**\n * Did the end-user type-in a valid login name?\n */\n @computed('resolvedModel.login.loginName')\n get shouldDisplayLoginNameError(): boolean {\n const { loginName = '' } = this.resolvedModel.login ?? {};\n\n // Show an error string if loginName is defined and its empty or an incorrect format.\n if (isEmpty(loginName)) {\n return false;\n }\n\n // Check if our loginName is valid\n const loginNameTrimmed = loginName.trim(),\n maxLengthLoginName = 100;\n\n return loginNameTrimmed === '' || loginNameTrimmed.length >= maxLengthLoginName;\n }\n\n /**\n * Sets the user's localeID to the newly selected culture.\n */\n @action cultureChanged(cultureId: string): void {\n this.cultureIdSelection = Number(cultureId);\n this.cultureIdChanged = true;\n }\n\n @action\n back(): void {\n this.navigation.transitionToRouteId(this.loginIndexRouteId);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/enterprise/logins/base-login': BaseLoginController;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, action, set, setProperties } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseLoginController from 'customer-site/classes/enterprise/logins/base-login/controller';\nimport { MOBILE_APP_AS_KEY_LOGIN_ROLE_ID } from 'customer-site/transforms/system-group-login-roles-list';\nimport { LoginRoleOnSystemOrGroup } from 'customer-site/transforms/system-group-login-roles-list';\nimport { getEnterprisesAndSystems } from '../multi-group-login/controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type BaseItemRow from 'customer-site/components/enterprise/groups/base-item-row';\nimport type GroupRoleRow from 'customer-site/components/enterprise/groups/group-role-row';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseEnterpriseEditMultiGroupLoginRoute from '../multi-group-login/route';\n\n/**\n * @classdesc\n * The base route controller for creating a new scheduled device access login.\n *\n * @class enterprise.logins.NewScheduledDeviceLoginController\n */\nexport default abstract class BaseEditScheduledDeviceLoginController extends BaseLoginController {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * Are we able to save this login?\n */\n @computed(\n 'displayEmailAddressError',\n 'resolvedModel.login.{canBeDeleted,loginName.length,isNew}',\n 'cultureIdChanged',\n 'resolvedModel.login.weeklySchedule.{selectedDays,endTime,beginTime}',\n 'resolvedModel.login.loginTemporarySchedule.{beginDateTime,endDateTime}'\n )\n get canBeSaved(): boolean {\n const login = this.resolvedModel?.login;\n\n if (!login) {\n return false;\n }\n\n if (this.cultureIdChanged && this.resolvedModel.login?.isNew) {\n return false;\n }\n\n return (\n (login.loginTemporarySchedule?.isValid ?? false) &&\n (login.weeklySchedule?.isValid ?? false) &&\n login.canBeEdited &&\n (login.loginName?.length || 0) > 0 &&\n (login.emailAddress?.length || 0) > 0 &&\n !this.displayEmailAddressError\n );\n }\n\n /**\n * Array of all enterprises (groups without direct units) visible to the login returned as DropdownSelectItems.\n *\n * @type {Array}\n */\n @tracked enterprises: GroupRoleRow[] = [];\n /**\n * Handles the model promise resolving.\n */\n @action dataLoaded(\n model: Pick<\n ResolvedModelFrom,\n 'login' | 'systemGroups' | 'assignableLoginRoles' | 'loginPermissionsCollection'\n >\n ): void {\n const login = model.login;\n login.isScheduledDeviceLogin = true;\n\n if (login.cultureId != undefined) {\n this.cultureIdSelection = login.cultureId;\n }\n\n setProperties(this.resolvedModel, {\n login,\n systemGroups: model.systemGroups.slice(),\n assignableLoginRoles: model.assignableLoginRoles,\n loginPermissionsCollection: model.loginPermissionsCollection\n });\n\n this.enterprises = getEnterprisesAndSystems.call(this)[0];\n }\n\n /**\n * The action called when an end user changes the role on a group.\n */\n @action async updateRoleOnGroup(itemRowObject: BaseItemRow): Promise {\n const {\n resolvedModel: { login }\n } = this,\n { loginRolesItems } = login || {};\n\n // Ensure we have a login and their roles.\n if (login == undefined || !loginRolesItems) {\n return Promise.resolve();\n }\n\n // Check if we are adding or removing the MobileAppAsKey login role.\n const addingRole = itemRowObject.selectedRole !== MOBILE_APP_AS_KEY_LOGIN_ROLE_ID;\n\n // Update all the child elements.\n await this.updateRoleOnSelectedRowAndChildElements(itemRowObject, loginRolesItems, addingRole);\n\n // Update all the parent elements.\n await this.updateParentItems(itemRowObject, loginRolesItems, addingRole);\n\n return Promise.resolve();\n }\n\n /**\n * Method to update the roles associated with the parent items.\n * @param itemRowObject\n * @param loginRolesItems\n * @param addingRole\n * @returns\n */\n private async updateParentItems(\n itemRowObject: BaseItemRow,\n loginRolesItems: { [index: string]: LoginRoleOnSystemOrGroup },\n addingRole: boolean\n ): Promise {\n const parentItem = itemRowObject.parentItem;\n if (parentItem == null) {\n return;\n }\n\n // Grab the system group login role item we are modifying.\n let systemGroupLoginRoleToModify = loginRolesItems[Number(parentItem.id)];\n if (systemGroupLoginRoleToModify == null) {\n systemGroupLoginRoleToModify = new LoginRoleOnSystemOrGroup(null);\n loginRolesItems[Number(parentItem.id)] = systemGroupLoginRoleToModify;\n }\n\n // If we are removing the role, we know we want to remove the role from the parent group.\n if (!addingRole) {\n systemGroupLoginRoleToModify.removeRole();\n }\n\n set(parentItem, 'rerenderRole', addingRole);\n\n // Also update the parent item of this parent item.\n await this.updateParentItems(parentItem, loginRolesItems, addingRole);\n }\n\n /**\n * Method to update the roles on the select row and the child elements.\n * @param itemRowObject\n * @param loginRolesItems\n * @param addRole\n */\n private async updateRoleOnSelectedRowAndChildElements(\n itemRowObject: BaseItemRow,\n loginRolesItems: { [index: string]: LoginRoleOnSystemOrGroup },\n addRole: boolean\n ): Promise {\n const childItems = await itemRowObject.childItems;\n let systemGroupLoginRoleToModify = loginRolesItems[Number(itemRowObject.id)];\n if (systemGroupLoginRoleToModify == null) {\n systemGroupLoginRoleToModify = new LoginRoleOnSystemOrGroup(null);\n loginRolesItems[Number(itemRowObject.id)] = systemGroupLoginRoleToModify;\n }\n\n if (addRole) {\n systemGroupLoginRoleToModify.addRole(MOBILE_APP_AS_KEY_LOGIN_ROLE_ID);\n set(itemRowObject, 'rerenderRole', true);\n } else {\n systemGroupLoginRoleToModify.removeRole();\n set(itemRowObject, 'rerenderRole', false);\n }\n\n // Update all the child elements.\n childItems?.forEach((group) =>\n (async () => {\n await this.updateRoleOnSelectedRowAndChildElements(group, loginRolesItems, addRole);\n })()\n );\n }\n\n /**\n * Action for saving login.\n */\n @action async saveLogin(): Promise {\n const { login } = this.resolvedModel;\n if (login === undefined) {\n return Promise.resolve();\n }\n\n login.isScheduledDeviceLogin = true;\n login.cultureId = this.cultureIdSelection;\n\n try {\n await login?.save();\n this.notificationManager.addSuccess(this.intl.t('generic.savedSuccessfully'));\n this.back();\n return Promise.resolve();\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n return Promise.reject();\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/enterprise/logins/edit/edit-scheduled-device-login': BaseEditScheduledDeviceLoginController;\n }\n}\n","import { set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseItemRow from 'customer-site/components/enterprise/groups/base-item-row';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { LoginRoleItem } from 'customer-site/classes/enterprise/logins/edit/multi-group-login/route';\nimport type LoginPermissionsCollection from 'customer-site/models/logins/login-permissions-collection';\nimport type SystemGroupLoginModel from 'customer-site/models/logins/system-group-login';\nimport type SystemModel from 'customer-site/models/systems/system';\n\ninterface LocationRoleRowOptions {\n availableLoginRolesWithinScope?: LoginRoleItem[];\n login?: SystemGroupLoginModel;\n isSelectable?: boolean;\n parentItem?: BaseItemRow | null;\n nodeDepth?: number;\n loginPermissionsCollection?: LoginPermissionsCollection;\n}\n\n/**\n * A row to define which roles a login has on a group.\n */\nexport default class LocationRoleRow extends BaseItemRow {\n @service declare intl: ADCIntlService;\n\n /** @override **/\n constructor(\n host: unknown,\n model: SystemModel,\n {\n availableLoginRolesWithinScope = [],\n login = undefined,\n isSelectable = true,\n parentItem = null,\n nodeDepth = 0,\n loginPermissionsCollection = undefined\n }: LocationRoleRowOptions = {} as LocationRoleRowOptions\n ) {\n super(host, model);\n\n // Set defaults.\n this.icon = model.icon;\n\n // Set properties from arguments.\n this.showDropdown = false;\n this.isOpen = false;\n set(this, 'availableLoginRolesWithinScope', availableLoginRolesWithinScope);\n set(this, 'login', login);\n this.isSelectable = isSelectable;\n set(this, 'parentItem', parentItem);\n set(this, 'nodeDepth', nodeDepth);\n set(this, 'loginPermissionsCollection', loginPermissionsCollection);\n }\n\n /**\n * @override\n *\n * We cannot expand a location row.\n * */\n get canExpand(): boolean {\n return false;\n }\n\n /** @override */\n isSystem = true;\n}\n","import { set } from '@ember/object';\nimport { or } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport DS from 'ember-data';\nimport BaseItemRow from 'customer-site/components/enterprise/groups/base-item-row';\nimport LocationRoleRow from 'customer-site/components/enterprise/groups/location-role-row';\n\n/**\n * A row to define which roles a login has on a group.\n */\nexport default class GroupRoleRow extends BaseItemRow {\n @service intl;\n\n /** @override **/\n constructor(\n host,\n model,\n {\n showDropdown = true,\n isOpen = false,\n availableLoginRolesWithinScope = {},\n login = undefined,\n isSelectable = true,\n parentItem = null,\n nodeDepth = 0,\n loginPermissionsCollection = undefined\n } = {}\n ) {\n super(host, model);\n\n // Set defaults.\n this.icon = model.icon;\n\n // Set properties from arguments.\n this.showDropdown = showDropdown;\n this.isOpen = isOpen;\n set(this, 'availableLoginRolesWithinScope', availableLoginRolesWithinScope);\n set(this, 'login', login);\n this.isSelectable = isSelectable;\n set(this, 'parentItem', parentItem);\n set(this, 'nodeDepth', nodeDepth);\n set(this, 'loginPermissionsCollection', loginPermissionsCollection);\n }\n\n /**\n * @override\n *\n * We should be able to expand the group if it has any child groups or systems.\n * */\n @or('model.childGroups.length', 'model.systems.length')\n canExpand;\n\n /**\n * @override\n *\n * Gets the child groups under the parent. If the child group is empty (no nested unit),\n * we will not include it in the list of child items.\n * */\n getChildItems() {\n const { model, host } = this;\n\n return DS.PromiseArray.create({\n promise: (async () => {\n const { childGroups, systems } = await model;\n\n if (childGroups?.length) {\n return childGroups\n .filter((childGroup) => childGroup.systems.length !== 0 || childGroup.childGroups.length !== 0)\n .map(\n (childGroup) =>\n new GroupRoleRow(host, childGroup, {\n isOpen: false,\n ...this.getRoleRowArgs()\n })\n );\n }\n\n return systems.map((system) => new LocationRoleRow(host, system, this.getRoleRowArgs()));\n })(),\n\n // Update metadata so list-view knows total number of items.\n meta: { totalCount: model.systems.length }\n });\n }\n\n /**\n * Returns the shared subset of role row args.\n *\n * @returns {Object}\n */\n getRoleRowArgs() {\n const { availableLoginRolesWithinScope, login, nodeDepth, loginPermissionsCollection } = this;\n\n return {\n availableLoginRolesWithinScope,\n login,\n parentItem: this,\n nodeDepth: nodeDepth + 1,\n loginPermissionsCollection\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, action, setProperties, set } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport BaseEditLoginController from 'customer-site/classes/logins/edit/controller';\nimport GroupRoleRow from 'customer-site/components/enterprise/groups/group-role-row';\nimport LocationRoleRow from 'customer-site/components/enterprise/groups/location-role-row';\nimport { English_US } from 'customer-site/enums/Culture';\nimport { escapeHtml } from 'customer-site/utils/strings';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { processValidationErrorsFromResponse } from '@adc/ajax/utils/validation-error-processing';\nimport { resolve, reject } from 'rsvp';\n\nimport type BaseLoginController from 'customer-site/classes/enterprise/logins/base-login/controller';\nimport type SystemGroupLoginModel from 'customer-site/models/logins/system-group-login';\nimport type SystemModel from 'customer-site/models/systems/system';\nimport type SystemGroupModel from 'customer-site/models/systems/system-group';\nimport type { LoginRoleOnSystemOrGroup } from 'customer-site/transforms/system-group-login-roles-list';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseEnterpriseEditMultiGroupLoginRoute from './route';\n\nconst EDIT_MULTI_GROUP_LOGIN_RESOURCES = 'enterprise.logins.edit.multi-group-login';\n\n/**\n * Gets the group role rows that we display on this multi-group-login page.\n */\nexport function getEnterprisesAndSystems(this: BaseLoginController): [GroupRoleRow[], LocationRoleRow[]] {\n const {\n resolvedModel,\n contextManager: { identityModel }\n } = this,\n { systemGroups, standaloneSystems, assignableLoginRoles, loginPermissionsCollection, login } =\n resolvedModel || {},\n selectedSystemGroupId = identityModel.belongsTo('selectedSystemGroup').id();\n\n if (!resolvedModel || !systemGroups) {\n return [[], []];\n }\n\n // Only display parent groups with child groups.\n const availableEnterprises = systemGroups.filter((group: SystemGroupModel) => {\n return group.isHighestGroupWithAccess && (group.childGroups.length > 0 || group.systems.length > 0);\n }),\n commonOptions = {\n availableLoginRolesWithinScope: assignableLoginRoles,\n login,\n loginPermissionsCollection,\n nodeDepth: 0\n },\n // Display standalone locations\n availableStandaloneSystems =\n standaloneSystems?.map((system: SystemModel) => new LocationRoleRow(this.store, system, commonOptions)) ??\n [];\n\n // Turn each parent group into a 'Group Role Row'\n return [\n availableEnterprises.map((group: SystemGroupModel) => {\n return new GroupRoleRow(this.store, group, {\n isOpen:\n group.id === selectedSystemGroupId ||\n group.childGroups.slice().some((cg) => cg.id === selectedSystemGroupId),\n ...commonOptions\n });\n }),\n availableStandaloneSystems\n ];\n}\n\n/**\n * Associate the login.\n */\nasync function associateLogin(this: MultiGroupLoginController, login: SystemGroupLoginModel): Promise {\n const { notificationManager, intl } = this;\n try {\n await this.ajax.apiRequest(\n 'logins/systemGroupLogins/associateLogin',\n undefined,\n login as unknown as Record,\n POST\n );\n notificationManager.addSuccess(\n intl.t(`${EDIT_MULTI_GROUP_LOGIN_RESOURCES}.loginSuccessfullyAssociated`, {\n loginName: escapeHtml(login.loginName)\n })\n );\n return resolve();\n } catch (e) {\n this.handleErrorNotification.call(this, e, 'failedToAssociateLogin');\n return reject();\n }\n}\n\n/**\n * @classdesc\n *\n * The controller of the page to edit a login's access on multiple groups.\n */\nexport default abstract class MultiGroupLoginController extends BaseEditLoginController<\n SystemGroupLoginModel,\n BaseEnterpriseEditMultiGroupLoginRoute\n> {\n /**\n * Is this an existing login that we're attempting to give access to this selected group?\n */\n @alias('resolvedModel.isAssociatingLogin')\n declare isAssociatingLogin: boolean;\n\n /**\n * Array of all enterprises (groups without direct units) visible to the login returned as DropdownSelectItems.\n *\n * @type {Array}\n */\n @tracked enterprises: GroupRoleRow[] = [];\n\n /**\n * Array of all standalone systems visible to the login returned as DropdownSelectItems.\n */\n @tracked standaloneSystems: LocationRoleRow[] = [];\n\n /**\n * Adds additional instructions to the page if we are creating a new login or\n * associating a login for a better user experience.\n */\n @computed('isAssociatingLogin', 'resolvedModel.login.isNew')\n get additionalInstructions(): string {\n const { intl } = this;\n if (this.isAssociatingLogin) {\n return intl.t(`${EDIT_MULTI_GROUP_LOGIN_RESOURCES}.associateLoginDesc`);\n } else if (this.resolvedModel?.login?.isNew || '') {\n return intl.t(`${EDIT_MULTI_GROUP_LOGIN_RESOURCES}.createNewLoginDesc`);\n }\n\n return '';\n }\n\n /**\n * The action to take once all of the data has been successfully loaded.\n *\n * @param model\n * @override\n */\n @action\n dataLoaded(model: ResolvedModelFrom): void {\n setProperties(this.resolvedModel, {\n systemGroups: model.systemGroups.slice(),\n standaloneSystems: model.standaloneSystems.slice(),\n login: model.login,\n assignableLoginRoles: model.assignableLoginRoles,\n isAssociatingLogin: model.isAssociatingLogin,\n loginPermissionsCollection: model.loginPermissionsCollection\n });\n set(this, 'cultureIdSelection', this.resolvedModel.login?.cultureId ?? English_US);\n\n // Set-up the groups and the role dropdowns that we'll want to display on this page.\n [this.enterprises, this.standaloneSystems] = getEnterprisesAndSystems.call(this);\n }\n\n /**\n * The action called when an end user changes the role on a group.\n */\n @action\n modifiedRoleAction(): void {\n const {\n resolvedModel: { login }\n } = this,\n { loginRolesItems } = login || {};\n\n if (!loginRolesItems) {\n return;\n }\n\n this.rolesChanged = true;\n }\n\n /**\n * Saves the system group login.\n * @override\n */\n @action\n async save(): Promise {\n const {\n resolvedModel: { login }\n } = this;\n\n // If the login is undefined, return.\n if (!login) {\n return;\n }\n\n if (this.isAssociatingLogin) {\n await associateLogin.call(this, login);\n } else {\n await this.saveLogin(login).catch((error) => {\n processValidationErrorsFromResponse.call(this, error);\n throw error;\n });\n }\n\n this.back();\n }\n\n /**\n * Undoes all of the role selections the end-user has done on this page for this login.\n * @override\n */\n @action\n resetSelection(): void {\n const {\n resolvedModel: { login }\n } = this,\n { loginRolesItems } = login || {};\n\n // Return out if we have nothing to reset.\n if (!loginRolesItems) {\n return;\n }\n\n // Gets all of the login roles objects and resets them to their original value.\n Object.values(loginRolesItems).forEach((item: LoginRoleOnSystemOrGroup) => item.resetRole());\n\n // Update the UI so that it reflects undoing all role selections and hide the reset button.\n [this.enterprises, this.standaloneSystems] = getEnterprisesAndSystems.call(this);\n this.rolesChanged = false;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/enterprise/logins/edit/multi-group-login': MultiGroupLoginController;\n }\n}\n","import { action, setProperties } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberEditMultiGroupLogin } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type MultiGroupLoginController from 'customer-site/classes/enterprise/logins/edit/multi-group-login/controller';\nimport type LoginPermissionsCollection from 'customer-site/models/logins/login-permissions-collection';\nimport type NonGroupLoginModel from 'customer-site/models/logins/non-group-login';\nimport type SystemGroupLoginModel from 'customer-site/models/logins/system-group-login';\nimport type SystemModel from 'customer-site/models/systems/system';\nimport type SystemGroupModel from 'customer-site/models/systems/system-group';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface LoginRoleItem {\n id: string;\n name: string;\n description: string;\n identifierId: number;\n disabled: boolean;\n}\n\ntype LoginModelPromiseType = Promise;\n\n/**\n * @classdesc\n *\n * Edit a multi-group enterprise login.\n */\nexport default class BaseEnterpriseEditMultiGroupLoginRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n /** @override */\n routeId = EmberEditMultiGroupLogin;\n\n parentRoute = 'enterprise/logins/edit';\n\n /**\n * This is not the 'new system group login' route.\n */\n isNew = false;\n\n /**\n * This is not the 'associate system group login' route.\n */\n isAssociatingLogin = false;\n\n /** @override */\n model(): {\n systemGroups: ADCAsyncStoreFindAll;\n standaloneSystems: ADCAsyncStoreFindAll;\n login: LoginModelPromiseType;\n assignableLoginRoles: Promise;\n isAssociatingLogin: boolean;\n loginPermissionsCollection: ADCAsyncStoreFindRecord;\n } {\n // Gets all the system groups that the logged-in user can view and edit.\n // Gets information about the login we are editing: its name, email, and customer roles (permissions)\n return {\n systemGroups: this.store.query('systems/system-group', { type: 'notEmpty' }),\n standaloneSystems: this.store.query('systems/system', {\n onlyRetrieveGrouplessSystems: true,\n isEmberEditLoginsPage: true\n }),\n login: (\n this.modelFor(this.parentRoute) as {\n login: LoginModelPromiseType;\n }\n )?.login,\n assignableLoginRoles: this.ajax.apiRequestForValue(\n 'logins/systemGroupLogins/getLoginRolesOnGroups'\n ),\n isAssociatingLogin: this.isAssociatingLogin,\n loginPermissionsCollection: this.store.findRecord(\n 'logins/login-permissions-collection',\n this.contextManager.identityModel.belongsTo('selectedSystemGroup').id()\n )\n };\n }\n\n /**\n * If we are exiting the mutli-group-login route, set the displayResetButton property to false.\n */\n @action willTransition(): void {\n setProperties(this.controller as MultiGroupLoginController, {\n rolesChanged: false,\n cultureIdChanged: false\n });\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { A } from '@ember/array';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { task } from 'ember-concurrency';\nimport { BaseLoginsIndexController } from 'customer-site/classes/logins/index/controller';\nimport {\n EmberAddEnterpriseAccessControlLoginsOptions,\n EmberEditMultiGroupLogin,\n EmberAddEnterpriseLoginsOptions,\n EmberEditMultiGroupAccessControlLogin,\n EmberEditScheduledDeviceLogin,\n EmberEditScheduledDeviceLoginAccessControl\n} from 'customer-site/enums/CustomerPageUrl';\n\nimport type BaseLogin from 'customer-site/models/logins/base-login';\nimport type LoginPermissionsCollection from 'customer-site/models/logins/login-permissions-collection';\nimport type SystemGroupLoginModel from 'customer-site/models/logins/system-group-login';\n\n/**\n * Determines which 'type' of logins we're viewing on the the logins list page.\n */\nexport enum loginViewType {\n VIEWING_SELECTED_GROUP_LOGINS = 0,\n VIEWING_ONLY_NON_GROUP_LOGINS = 1,\n VIEWING_ONLY_SUBGROUP_LOGINS = 2,\n VIEWING_ALL_LOGINS = 3\n}\n\n/**\n * Map between a login viewtype and its GET endpoint.\n */\nfunction loginGetEndpointForViewType(viewType: loginViewType): string {\n switch (viewType) {\n case loginViewType.VIEWING_ONLY_NON_GROUP_LOGINS:\n return 'getNonGroupLogins';\n case loginViewType.VIEWING_ONLY_SUBGROUP_LOGINS:\n return 'getSubGroupLogins';\n case loginViewType.VIEWING_ALL_LOGINS:\n return 'getAllLogins';\n default:\n return '';\n }\n}\n\n/**\n * @classdesc\n * The enterprise manage logins page, listing all enterprise logins on the selected group.\n */\nexport default class EnterpriseLoginsIndexController extends BaseLoginsIndexController {\n /**\n * The login permissions collection for checking Ember Sub Group Logins access\n */\n declare loginPermissionsCollection: LoginPermissionsCollection;\n\n /**\n * What type of logins are we viewing?\n */\n @tracked viewingLoginsOfType?: loginViewType;\n\n @tracked items: BaseLogin[] | ADCStoreQuery = [];\n\n /**\n * The loadLogins task can us a custom API endpoint to load models, so it's not a live recordset, which means deleted models will not be removed.\n */\n @computed('items.@each.isDeleted')\n get activeItems(): BaseLogin[] {\n return this.items.slice().filter((item) => !item.isDeleted);\n }\n\n loadLogins = task({ restartable: true }, async () => {\n this.viewingLoginsOfType ??= loginViewType.VIEWING_SELECTED_GROUP_LOGINS;\n\n const { identityManager, store, searchString } = this,\n systemGroupId = identityManager.identityModel?.belongsTo('selectedSystemGroup').id(),\n loginGetEndpoint = loginGetEndpointForViewType(this.viewingLoginsOfType);\n\n // If we're not viewing logins of a specific type, just view the system group logins that have access to the current selected group.\n if (!loginGetEndpoint) {\n this.items = await store.query('logins/system-group-login', {\n includeScheduledLoginProps: false,\n searchString\n });\n } else {\n this.items = await this.ajax.apiRequestForDataRecords(\n `systems/systemGroups/${systemGroupId}/${loginGetEndpoint}?searchString=${searchString}`\n );\n }\n\n this.loginsCountChanged(this.items.length);\n });\n\n /**\n * Transition to create a new login.\n * @override\n */\n @action\n async addNewLogin(): Promise {\n // We have a different 'add login options' page for child group access control pages.\n this.navigation.transitionToRouteId(\n (await this.identityManager.identityModel?.selectedSystemGroup)?.usesAccessControlUI\n ? EmberAddEnterpriseAccessControlLoginsOptions\n : EmberAddEnterpriseLoginsOptions\n );\n }\n\n /**\n * Determines whether to show the view non-group or group logins button option.\n * @override\n */\n @computed(\n 'identityManager.identityModel.{isCommercial,selectedSystemGroup}',\n 'store',\n 'viewingLoginsOfType',\n 'viewingParentGroup'\n )\n get toolsDropdownButtons(): Promise<{ icon: string; name: string; disabled: boolean; action: () => unknown }[]> {\n return (async () => {\n const fnGetLink = (\n type: loginViewType,\n icon: string,\n name: string,\n viewingLoginsOfType: loginViewType,\n visible = true\n ):\n | { icon: string; name: string; disabled: boolean; action: () => unknown; className: string }\n | undefined =>\n visible\n ? {\n icon,\n name,\n disabled: false,\n action: () => this.updateTypesOfLoginsViewed(type),\n className:\n viewingLoginsOfType === this.viewingLoginsOfType ? 'view-login-option-checked' : ''\n }\n : undefined,\n { identityManager, intl } = this,\n selectedSystemGroup = await identityManager.identityModel?.selectedSystemGroup;\n\n return A([\n fnGetLink(\n loginViewType.VIEWING_SELECTED_GROUP_LOGINS,\n this.store.peekAll('systems/available-system-item').findBy('isSelected')?.icon,\n intl.t('classes.enterprise.logins.index.viewCurrentGroupLogins', {\n groupName:\n selectedSystemGroup?.description ?? intl.t('classes.enterprise.logins.index.currentGroup')\n }),\n loginViewType.VIEWING_SELECTED_GROUP_LOGINS\n ),\n fnGetLink(\n loginViewType.VIEWING_ONLY_SUBGROUP_LOGINS,\n identityManager.identityModel?.isCommercial ? 'enterprise-group' : 'property-group',\n intl.t('classes.enterprise.logins.index.viewSubgroupLogins'),\n loginViewType.VIEWING_ONLY_SUBGROUP_LOGINS,\n this.viewingParentGroup\n ),\n fnGetLink(\n loginViewType.VIEWING_ONLY_NON_GROUP_LOGINS,\n 'user',\n intl.t('classes.enterprise.logins.index.viewNonGroupLogins'),\n loginViewType.VIEWING_ONLY_NON_GROUP_LOGINS\n ),\n fnGetLink(\n loginViewType.VIEWING_ALL_LOGINS,\n 'timeline-expand',\n intl.t('classes.enterprise.logins.index.viewAllLogins'),\n loginViewType.VIEWING_ALL_LOGINS\n )\n ]).compact();\n })();\n }\n\n /**\n * Are we viewing the parent group level? If so, we are in the process of developing parent group login pages, so some\n * actions on the page will be disabled.\n */\n @alias('identityManager.identityModel.viewingParentGroup')\n declare viewingParentGroup: boolean;\n\n /**\n * Toggle viewing type of login.\n */\n updateTypesOfLoginsViewed(loginType: loginViewType): void {\n this.viewingLoginsOfType = loginType;\n this.loadLogins.perform();\n }\n\n /**\n * Transition to the edit enterprise login route for the given login id.\n * Which route should we go to when clicking the 'edit' button for each login?\n * @override\n */\n @action\n async editLogin(login: BaseLogin): Promise {\n const { identityManager, navigation } = this,\n isNonGroupLogin = login.getModelName() === 'logins/non-group-login';\n\n if (login.isScheduledDeviceLogin) {\n navigation.transitionToRouteId(\n (await identityManager.identityModel?.selectedSystemGroup)?.usesAccessControlUI\n ? EmberEditScheduledDeviceLoginAccessControl\n : EmberEditScheduledDeviceLogin,\n login.id\n );\n return;\n }\n\n navigation.transitionToRouteId(\n (await identityManager.identityModel?.selectedSystemGroup)?.usesAccessControlUI\n ? EmberEditMultiGroupAccessControlLogin\n : EmberEditMultiGroupLogin,\n login.id,\n { queryParams: { cl: isNonGroupLogin } }\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/enterprise/logins/index': EnterpriseLoginsIndexController;\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type EnterpriseLoginsIndexController from 'customer-site/classes/enterprise/logins/index/controller';\nimport type LoginPermissionsCollection from 'customer-site/models/logins/login-permissions-collection';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\n/**\n * @classdesc\n *\n * Base enterprise logins route.\n */\nexport default class BaseEnterpriseLoginsRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n /** @override */\n queryParams = {\n searchString: getQueryParam('string')\n };\n\n /** @override */\n model(): Promise {\n return this.store.findRecord(\n 'logins/login-permissions-collection',\n this.identityManager.identityModel?.belongsTo('selectedSystemGroup').id() ?? ''\n );\n }\n\n /** @override */\n setupController(\n controller: EnterpriseLoginsIndexController,\n model: ModelFrom,\n transition: Transition\n ): void {\n super.setupController(controller, model, transition);\n\n // Set the model within our controller\n controller.set('loginPermissionsCollection', model);\n\n // Clear routes stack. We get to this index route from a legacy page, which causes the stack to be incorrect.\n this.contextManager.clearVisitedRoutesStack();\n }\n\n /**\n * If we are exiting the login route, we will reset which login type we are viewing.\n *\n * @param transition\n */\n @action willTransition(transition: Transition): void {\n if (!transition.to.name.includes('login')) {\n (this.controller as EnterpriseLoginsIndexController).set('viewingLoginsOfType', null);\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Guest } from 'customer-site/enums/PointCentralUserType';\nimport BaseFilterManager from '../../helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type QuickFilter from 'customer-site/models/users/quick-filter';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport interface UserFilterSelection {\n searchString?: string;\n enterpriseAccessType?: number[];\n userType?: number[];\n location?: number[];\n pinStartDate?: Date;\n pinEndDate?: Date;\n pinStatus?: number[];\n userCodeSchedule?: number[];\n pinsStartingWithinNumDays?: number[];\n searchPinStartByDateOnly?: boolean;\n searchPinEndByDateOnly?: boolean;\n}\n\ninterface FilterItem {\n name: string;\n value: string;\n}\n\nexport interface FilterOptions {\n userType: FilterItem[];\n pinStatus: FilterItem[];\n userCodeSchedule: FilterItem[];\n enterpriseAccessType: FilterItem[];\n location: FilterItem[];\n pinsStartingWithinNumDays: FilterItem[];\n}\n\n/**\n * Utility class for enterprise users filtering.\n */\nexport default class EnterpriseUsersFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n @service declare identityManager: IdentityManager;\n @service declare router: RouterService;\n\n /**\n * The current value of user filters.\n */\n userFilterSelection?: UserFilterSelection;\n\n /**\n * The filter options that will appear in our filter bar.\n */\n userFilterOptions?: FilterOptions | Promise;\n\n /**\n * Quick Filter we want to edit\n */\n @tracked\n quickFilterToEdit?: QuickFilter;\n\n /**\n * Should the right side menu be displayed?\n */\n @tracked\n showRightNav = false;\n\n /**\n * By default we will not show our enterprise users filters.\n */\n @tracked\n filterVisible = false;\n\n /**\n * Is the Quick Filter config panel currently open?\n */\n @tracked\n isQuickFilterConfig = false;\n\n /**\n * Clears tracked state.\n */\n resetState(): void {\n Object.assign(this, {\n isQuickFilterConfig: false,\n filtersVisible: false,\n showRightNav: false\n });\n }\n\n /** @override */\n async updateFilters(\n _: Record | undefined,\n defaultFilterValues: Record,\n freshData = true\n ): Promise {\n const { intl } = this,\n userFilterSelection = this.userFilterSelection;\n\n if (!userFilterSelection) {\n return;\n }\n\n await super.updateFilters(userFilterSelection, defaultFilterValues, freshData);\n\n if (freshData) {\n const userFilterOptions = await this.userFilterOptions;\n if (userFilterOptions) {\n this.filterOptions = userFilterOptions;\n }\n\n // If the automatic guest filter is enabled, update the query params to trigger that load.\n if (this.identityManager?.pointCentralIdentity?.hasUsersPageAutomaticFilterForGuestsOnly === true) {\n this.queryParams.userType = [Guest];\n this.router.transitionTo({\n queryParams: {\n ...this.queryParams\n }\n });\n }\n }\n\n this.filters = [\n this.getSearchFilter('searchString', intl.t('generic.search'), {\n skip: true\n }),\n\n ...[\n ['pinStartDate', 'searchPinStartByDateOnly', undefined, userFilterSelection['pinEndDate']],\n ['pinEndDate', 'searchPinEndByDateOnly', userFilterSelection['pinStartDate'], undefined]\n ].map(([type, subtype, minimumDate, maximumDate]: [string, string, Date?, Date?]) =>\n this.getDateTimeFilter(\n intl.t(`classes.enterprise.users.${type}`),\n type,\n minimumDate,\n maximumDate,\n subtype\n )\n ),\n\n ...[\n ['pinsStartingWithinNumDays', false, { placeholder: intl.t('classes.enterprise.users.anytime') }],\n ['pinStatus', true],\n ['location', true, { maxItemCount: 50 }],\n ['userType', true],\n ['enterpriseAccessType', true],\n ['userCodeSchedule', true]\n ].map(\n ([filteringFieldName, isMultiSelect, props]: [\n keyof UserFilterSelection,\n boolean,\n { placeholder: string; maxItemCount: number }\n ]) =>\n this.getDropdownFilter(\n intl.t(`classes.enterprise.users.${filteringFieldName}`),\n filteringFieldName,\n this.filterOptions[filteringFieldName],\n userFilterSelection[filteringFieldName] ?? ([] as any),\n isMultiSelect,\n props\n )\n )\n ];\n }\n\n /**\n * Whether the Quick Filters menu is visible\n */\n @action\n toggleRightNav() {\n this.showRightNav = !this.showRightNav;\n }\n\n /**\n * Whether the filter panel is visible or not.\n */\n @action\n toggleFilter(): void {\n this.filterVisible = !this.filterVisible;\n }\n\n /**\n * Opens the quick filter config menu\n * @param filter the filter we're modifying if there is one\n */\n @action\n openQuickFilterConfig(filter?: QuickFilter): void {\n if (filter?.id) {\n this.quickFilterToEdit = filter;\n }\n\n this.showRightNav = false;\n this.filterVisible = this.isQuickFilterConfig = true;\n }\n\n /**\n * Close the quick filter editing panel\n */\n @action\n closeQuickFilterConfig(): void {\n this.isQuickFilterConfig = this.filterVisible = false;\n this.quickFilterToEdit = undefined;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseFilterManager from '../helpers/filter-manager';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * Utility class for fleet filtering.\n */\nexport default class FleetFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n\n constructor(\n host: unknown,\n fnApplyFilter: (value: { queryParams: Record }) => void | undefined = () => {},\n stageFilterChanges = false,\n disabled = false\n ) {\n super(host, fnApplyFilter, stageFilterChanges, disabled);\n\n this.filterOptions = {\n vehicles: this.store.findAll('fleet/fleet-vehicle')\n };\n }\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues, freshData);\n const showPreferredTimezone = await this.contextManager.showPreferredTimezone;\n const searchFilter = this.getSearchFilter('searchString', this.intl.t('generic.search'), {\n skip: true\n });\n const rangeFilter = this.getDateRangeFilter(showPreferredTimezone, 61);\n const deviceNameFilter = this.getDropdownFilter(\n this.intl.t('classes.fleet.vehicleName'),\n 'selectedDeviceIds',\n (async () => {\n const options = await this.filterOptions.vehicles;\n return options.map(({ deviceId, name }: { deviceId: string; name: string }) => ({\n value: deviceId.toString(),\n name\n }));\n })(),\n queryParams.selectedDeviceIds,\n true,\n {\n placeholder: this.intl.t('classes.fleet.allVehicles')\n }\n );\n // Cache filter data.\n this.filters = [searchFilter, rangeFilter, deviceNameFilter].compact();\n }\n}\n","import EmberController from '@ember/controller';\n\n/**\n * Controller that provides support for filtering fleet trips.\n */\nexport default class FilteringFleetTripHistoryController extends EmberController {}\n","import { tracked } from '@glimmer/tracking';\nimport { serializeQueryParams } from '@ember-data/adapter/-private';\nimport { action, set, computed } from '@ember/object';\nimport { filterBy, notEmpty } from '@ember/object/computed';\nimport { debounce, once } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport endOfDay from 'date-fns/endOfDay';\nimport startOfDay from 'date-fns/startOfDay';\nimport subDays from 'date-fns/subDays';\nimport ContainerObject from '../../utils/container-object';\nimport {\n BaseFilter,\n DropdownFilter,\n ChecklistFilter,\n SearchFilter,\n DateFilter,\n DateRangeFilter,\n DateTimeFilter\n} from './filters/filters';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { BaseFilterOptionalArgs } from './filters/base-filter';\nimport type { DropdownFilterOptionalArgs } from './filters/dropdown-filter';\n\n/**\n * Maximum number of characters allowable for a HTTP request\n */\nconst MAX_URL_CHAR_LIMIT = 2000;\n\n/**\n * Check if the filter converted into a url is valid (ie not too long)\n */\nexport function areFilterParamsVaildLength(filter: Record): boolean {\n const serializedParams = serializeQueryParams(filter);\n return serializedParams?.length < MAX_URL_CHAR_LIMIT;\n}\n\n/**\n * Caches filter changes (if staging) or submits filter changes.\n *\n * @private\n */\nfunction changeFilterValues(this: FilterManager, newValues = {}) {\n // Are we staging changes?\n if (this.stageFilterChanges) {\n // Cache changes and return.\n this.cachedFilterValues = {\n ...this.cachedFilterValues,\n ...newValues\n };\n\n return;\n }\n\n this.submitFilterValues(newValues);\n}\n\ninterface DateTimeUpdate {\n selectedDateFieldName: string;\n dateValue: Date;\n searchByDateOnlyFieldName: string;\n searchByDateOnly: BaseFilter;\n}\n\n/**\n * Update the selected date value as well as whether we are searching an entire day, a date and time.\n */\nfunction updateDateTime(this: FilterManager, updatedFilter: DateTimeUpdate): void {\n changeFilterValues.call(this, {\n [updatedFilter.selectedDateFieldName]: updatedFilter.dateValue,\n [updatedFilter.searchByDateOnlyFieldName]: updatedFilter.searchByDateOnly ?? false\n });\n}\n\n/**\n * Utility class for route filtering.\n *\n * @class FilterManager\n *\n * @abstract\n */\nexport default class FilterManager extends ContainerObject {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n\n /**\n * Called to apply all filter changes.\n */\n applyFilter: (value: { queryParams: Record }) => void | undefined;\n\n /**\n * Indicates whether we should stage individual filter changes before we submit them all at once.\n */\n stageFilterChanges: boolean;\n\n /** @override */\n constructor(\n host: unknown,\n fnApplyFilter: (value: { queryParams: Record }) => void,\n stageFilterChanges = false,\n disabled = false\n ) {\n super(host);\n\n this.applyFilter = fnApplyFilter;\n this.stageFilterChanges = stageFilterChanges;\n this.disabled = disabled;\n }\n\n // region Component state\n\n /**\n * The computed filters.\n */\n @tracked filters: Array = [];\n\n /**\n * Filter value changes cached for later submission.\n */\n @tracked cachedFilterValues = {};\n\n /**\n * Indicates whether the filters in this manager should be disabled or not.\n */\n @tracked disabled = false;\n\n /**\n * The current query parameter filtering values.\n */\n @tracked queryParams: Record = {};\n\n /**\n * The passed default values for all filters.\n */\n protected defaultFilterValues: Record = {};\n\n /**\n * Cached filter option source.\n */\n protected filterOptions: Record = {};\n\n /**\n * A method for creating/update filters.\n */\n updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _freshData = true\n ): Promise | void {\n // Cache new query parameters and default values.\n this.queryParams = queryParams;\n this.defaultFilterValues = defaultFilterValues;\n }\n\n /**\n * The collection of applied filters.\n */\n @filterBy('filters', 'isApplied', true)\n declare appliedFilters: BaseFilter[];\n\n /**\n * Indicates there are applied filters (non-default).\n */\n @notEmpty('appliedFilters')\n declare hasAppliedFilters: boolean;\n\n /**\n * Indicates this manager has cached filter value changes that have not been submitted.\n */\n @computed('cachedFilterValues')\n get hasCachedChanges(): boolean {\n return Object.keys(this.cachedFilterValues).length > 0;\n }\n\n // endregion\n\n // region Filter configuration\n\n /**\n * Formatting options for minute comparisons.\n */\n protected compareDateOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n };\n\n /**\n * Returns an object with common base filter optional properties.\n */\n protected getFilterValues(filteringFieldName: string): BaseFilterOptionalArgs {\n return {\n value: this.queryParams[filteringFieldName],\n defaultValue: this.defaultFilterValues[filteringFieldName]\n };\n }\n\n /**\n * Return true if a serialized filtering length is valid\n */\n validateFilterLength(params: Record): boolean {\n if (!areFilterParamsVaildLength(params)) {\n this.resetFilterValues();\n\n this.notificationManager.addError(this.intl.t('classes.helpers.tooManyFilters'));\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns a configuration object for a drop down filter.\n */\n getDropdownFilter(\n title: string,\n filteringFieldName: string,\n options: Promise<{ name: string; value: string }[]>,\n selectedValues: (string | number)[],\n isMultiSelect = true,\n props: DropdownFilterOptionalArgs = {}\n ): DropdownFilter {\n const items = (async () => {\n const items = await options;\n return (items || []).map(({ name, value }) =>\n DropdownSelectItem.create({\n name,\n value,\n state: isMultiSelect\n ? selectedValues.some((selectedValue) => selectedValue == value)\n ? SELECTED\n : UNSELECTED\n : selectedValues[0] == value\n ? SELECTED\n : UNSELECTED\n })\n );\n })();\n\n // The parameters for the apply function are different depending on whether this is a multi-select dropdown.\n const apply = isMultiSelect\n ? (values: DropdownSelectItem[]) => {\n changeFilterValues.call(this, {\n [filteringFieldName]: values.filterBy('state').mapBy('value')\n });\n }\n : (value: string) => {\n changeFilterValues.call(this, {\n [filteringFieldName]: value\n });\n };\n\n return new DropdownFilter(title, filteringFieldName, items, {\n ...props,\n ...this.getFilterValues(filteringFieldName),\n apply,\n skip: props.skip || items.then(isEmpty),\n isMultiSelect,\n maxItemCount: props.maxItemCount ?? 50\n });\n }\n\n /**\n * Returns both adc analytic and 3pc analytic filters in a single multi-select dropdown.\n *\n * @param title Title to display above and inside the dropdown select\n * @param adcFilteringFieldName Filtering name for the adc detection type. Correlates to the query param.\n * @param thirdPartyFilteringFieldName Filtering name for the third party detection types. Correlates to the query param.\n * @param adcOptions The ADC filtering options for the dropdown\n * @param thirdPartyOptions The third party filtering options for the dropdown\n * @param adcSelectedValue The current selected value for the adcOptions\n * @param thirdPartySelectedValues THe current selected values for the thirdPartyOptions\n * @param props Props to pass into the DropdownFilter\n */\n getAnalyticsDropdownFilter(\n title: string,\n adcFilteringFieldName: string,\n thirdPartyFilteringFieldName: string,\n adcOptions: Record>,\n thirdPartyOptions: Promise<{ name: string; value: string }[]>,\n adcSelectedValue: number,\n thirdPartySelectedValues: (string | number)[],\n props: DropdownFilterOptionalArgs = {}\n ): DropdownFilter {\n // ADC Analytic values for the dropdown select\n const adcItems: DropdownSelectItem[] = Object.entries(adcOptions).map(([key, item]) => {\n const v = Number(key);\n return DropdownSelectItem.create({\n name: item.label,\n value: v.toString(),\n state: (v & adcSelectedValue) > 0 ? SELECTED : UNSELECTED\n });\n });\n\n // Third party analytic values for the dropdown select\n const thirdPartyItems: Promise = (async () => {\n const items = await thirdPartyOptions;\n return (items || [])\n .sort((a, b) => a.name.localeCompare(b.name)) // Sort the 3PC Filter Items in alphabetical order\n .map(({ name, value }) =>\n DropdownSelectItem.create({\n name,\n value,\n state: thirdPartySelectedValues.map((val) => val.toString()).includes(value)\n ? SELECTED\n : UNSELECTED\n })\n );\n })();\n\n // Combined list of the ADC Values and the 3PC values, but putting the 'Other' item at the end of the list\n const combinedItems = thirdPartyItems.then((thirdPartyItemsResolved) => {\n // Combine adcItems and thirdPartyItems\n const combined = adcItems.concat(thirdPartyItemsResolved);\n\n // Find the 'Other' item, and move it to the end of the list\n const otherItemIndex = combined.findIndex((item) => item.name === 'Other' && item.value === '32');\n if (otherItemIndex !== -1) {\n // Remove the 'Other' item from its current position\n const [otherItem] = combined.splice(otherItemIndex, 1);\n // Append the 'Other' item to the end\n combined.push(otherItem);\n }\n\n return combined;\n });\n\n // Apply function for the ADC Analytic values to use.\n const adcApplyFn = (values: DropdownSelectItem[]) => {\n changeFilterValues.call(this, {\n [adcFilteringFieldName]: values\n .filter((item) => item.state)\n .reduce((total, item) => total + Number(item.value), 0)\n });\n };\n\n // Apply function for the 3PC Analytic values to use.\n const thirdPartyApplyFn = (values: DropdownSelectItem[]) => {\n changeFilterValues.call(this, {\n [thirdPartyFilteringFieldName]: values.filter((item) => item.state).map((item) => item.value)\n });\n };\n\n // Combined apply function for both ADC and 3PC Analytic values. This function uses the adcApplyFn for ADC types and thirdPartyApplyFn for 3PC types.\n const combinedApplyFn = (values: DropdownSelectItem[]) => {\n const adcValues = values.filter((item) => adcItems.includes(item));\n const thirdPartyValues = values.filter((item) => !adcItems.includes(item));\n\n adcApplyFn(adcValues);\n thirdPartyApplyFn(thirdPartyValues);\n };\n\n return new DropdownFilter(title, adcFilteringFieldName, combinedItems, {\n ...props,\n ...this.getFilterValues(adcFilteringFieldName),\n apply: combinedApplyFn,\n skip: props.skip || combinedItems.then(isEmpty),\n isMultiSelect: true,\n maxItemCount: props.maxItemCount ?? 50\n });\n }\n\n /**\n * Returns a configuration object for a drop down filter.\n */\n getDropdownFilterWithSubitems(\n title: string,\n filteringFieldName: string,\n options: any[],\n selectedValues: (string | number)[],\n isMultiSelect = true,\n props: DropdownFilterOptionalArgs = {}\n ): DropdownFilter {\n const items = (async () => {\n const items = options;\n return (items || []).map(({ name, icon, subitems }) => {\n return DropdownSelectItem.create({\n name,\n icon,\n isCollapsible: true,\n subitems: subitems.map(\n ({\n value,\n name,\n icon,\n secondaryDescription\n }: {\n value: string;\n name: string;\n icon: any;\n secondaryDescription: string;\n }) =>\n DropdownSelectItem.create({\n value,\n name,\n icon,\n state: selectedValues.includes(value) ? SELECTED : UNSELECTED,\n secondaryDescription\n })\n )\n });\n });\n })();\n\n // The parameters for the apply function are different depending on whether this is a multi-select dropdown.\n const apply = (values: DropdownSelectItem[]) => {\n const subValues: any[] = [];\n values.forEach((value) => {\n value.subitems.forEach((item) => subValues.push(item));\n });\n changeFilterValues.call(this, {\n [filteringFieldName]: subValues.filterBy('state').mapBy('value')\n });\n };\n\n return new DropdownFilter(title, filteringFieldName, items, {\n ...props,\n ...this.getFilterValues(filteringFieldName),\n apply,\n skip: props.skip || items.then(isEmpty),\n isMultiSelect,\n maxItemCount: props.maxItemCount ?? 50\n });\n }\n\n /**\n * Returns a configuration object for a bitwise checklist filter.\n */\n getBitwiseFilter(\n title: string,\n filteringFieldName: string,\n map: Record>,\n value: number,\n props: BaseFilterOptionalArgs = {}\n ): ChecklistFilter {\n const items = Object.entries(map).map(([key, checklistItem]) => {\n const v = Number(key);\n return new BinaryListItem<{ v: number; tooltipText: string }>({\n label: checklistItem.label,\n state: (v & value) > 0,\n props: { v, tooltipText: checklistItem.tooltipText }\n });\n });\n\n return new ChecklistFilter(title, filteringFieldName, items, {\n ...props,\n ...this.getFilterValues(filteringFieldName),\n apply: (values: BinaryListItem<{ v: number; tooltipText: string }>[]) => {\n changeFilterValues.call(this, {\n [filteringFieldName]: values\n .filterBy('state')\n .reduce((total, item) => total + (item.props?.v as number), 0)\n });\n },\n skip: props.skip || isEmpty(items)\n });\n }\n\n /**\n * Returns a configuration object for a multi-select checklist filter.\n */\n getChecklistFilter(\n title: string,\n filteringFieldName: string,\n options: Promise<{ id: string; label: string }[]>,\n selectedValues: (string | number)[],\n props: BaseFilterOptionalArgs = {}\n ): ChecklistFilter {\n const items = (async () => {\n const items = await options;\n return (items || []).map(\n ({ id, label }) =>\n new BinaryListItem<{ id: number }>({\n label,\n state: selectedValues.includes(id),\n props: {\n id: Number(id)\n }\n })\n );\n })();\n\n return new ChecklistFilter(title, filteringFieldName, items, {\n ...props,\n ...this.getFilterValues(filteringFieldName),\n apply: (values: BinaryListItem<{ id: number }>[]) => {\n changeFilterValues.call(this, {\n [filteringFieldName]: values.filterBy('state').mapBy('props.id')\n });\n },\n skip: props.skip || items.then(isEmpty)\n });\n }\n\n /**\n * Returns a configuration object for a text search filter.\n */\n getSearchFilter(\n filteringFieldName: string,\n title: string = this.intl.t('generic.search'),\n props: BaseFilterOptionalArgs = {}\n ): BaseFilter {\n return new SearchFilter(title, filteringFieldName, {\n ...props,\n ...this.getFilterValues(filteringFieldName),\n apply: (value) => {\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n once(this, changeFilterValues, {\n [filteringFieldName]: value\n });\n }\n });\n }\n\n /**\n * Returns a configuration object for a date range filter.\n */\n getDateRangeFilter(\n showPreferredTimezone: boolean,\n maxTimePeriod?: number,\n props: BaseFilterOptionalArgs = {}\n ): DateRangeFilter {\n const { intl } = this,\n [startDateFilter, endDateFilter] = this.getStartAndEndDateFilters(showPreferredTimezone, maxTimePeriod);\n\n return new DateRangeFilter(intl.t('generic.dateRange'), 'dateRange', startDateFilter, endDateFilter, {\n ...props,\n apply: ({ startDate, endDate }) =>\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline debounceTask.\n // eslint-disable-next-line ember/no-runloop\n debounce(\n this,\n this.updateDateRange,\n startDateFilter,\n endDateFilter,\n startDate,\n endDate,\n 500\n )\n });\n }\n\n getDateTimeFilter(\n title: string,\n type: string,\n minimumDate: Date | undefined,\n maximumDate: Date | undefined,\n subtype: string\n ): DateTimeFilter {\n const { intl } = this,\n timeZone = intl.timeZone ?? '';\n\n return new DateTimeFilter(\n title,\n type,\n new DateFilter(title, type, timeZone, {\n ...this.getFilterValues(type),\n minimumDate,\n maximumDate,\n showDefaultDate: false\n }),\n new BaseFilter(subtype, subtype, {\n value: this.queryParams[subtype] ?? false,\n defaultValue: this.defaultFilterValues[subtype]\n }),\n {\n apply: ({ selectedDateFieldName, dateValue, searchByDateOnlyFieldName, searchByDateOnly }) =>\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline debounceTask.\n // eslint-disable-next-line ember/no-runloop\n debounce(\n this,\n updateDateTime,\n { selectedDateFieldName, dateValue, searchByDateOnlyFieldName, searchByDateOnly },\n 500\n )\n }\n );\n }\n\n protected getStartAndEndDateFilters(showPreferredTimezone: boolean, maxTimePeriod?: number): DateFilter[] {\n const { intl, contextManager } = this,\n { startDate, endDate } = this.queryParams,\n timeZone = (showPreferredTimezone ? contextManager.identityModel.preferredTimezone : intl.timeZone) ?? '';\n\n return [\n [\n 'startDate',\n maxTimePeriod &&\n zonedTimeToUtc(startOfDay(subDays(utcToZonedTime(new Date(), timeZone), maxTimePeriod)), timeZone),\n endDate\n ],\n ['endDate', startDate, zonedTimeToUtc(endOfDay(utcToZonedTime(new Date(), timeZone)), timeZone)]\n ].map(([type, minimumDate, maximumDate]: [string, Date, Date]) => {\n return new DateFilter(intl.t(`generic.${type}`), type, timeZone, {\n ...this.getFilterValues(type),\n minimumDate,\n maximumDate\n });\n });\n }\n\n /**\n * Finds a filter using it's filtering field name.\n */\n getFilterByName(name: string): BaseFilter {\n return this.filters.findBy('filteringFieldName', name) as BaseFilter;\n }\n\n /**\n * Simultaneously updates the begin and end date values associated with the date range filter.\n *\n */\n private updateDateRange(\n this: FilterManager,\n beginDate: DateFilter,\n endDate: DateFilter,\n beginDateValue: Date,\n endDateValue: Date | null\n ) {\n const { intl } = this;\n\n // Is the default value for end date \"null\"?\n if (endDate.defaultValue === null) {\n // Does the selected end date equal now (excluding seconds)?\n if (\n intl.formatDateTz(endDateValue, this.compareDateOptions) ===\n intl.formatDateTz(new Date(), this.compareDateOptions)\n ) {\n // Reset end date to null (now).\n endDateValue = null;\n }\n }\n\n // Are we staging changes?\n if (this.stageFilterChanges) {\n if (beginDateValue) {\n set(beginDate, 'value', beginDateValue);\n }\n\n if (endDateValue) {\n set(endDate, 'value', endDateValue);\n }\n }\n\n changeFilterValues.call(this, {\n [beginDate.filteringFieldName]: beginDateValue,\n [endDate.filteringFieldName]: endDateValue\n });\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Toggles the filter manager's current disabled state.\n */\n @action toggleDisableState(): void {\n this.disabled = !this.disabled;\n }\n\n /**\n * Submits any cached filter changes, if present.\n */\n @action submitCachedFilterValues(): void {\n if (this.hasCachedChanges) {\n this.submitFilterValues(this.cachedFilterValues);\n this.cachedFilterValues = {};\n }\n }\n\n /**\n * Clears cached filter changes and resets filters.\n */\n @action resetCachedFilters(): void {\n if (this.hasCachedChanges) {\n this.updateFilters(this.queryParams, this.defaultFilterValues, false);\n this.cachedFilterValues = {};\n }\n }\n\n /**\n * Creates and passes a new query parameters route transition object to the `applyFilter` passed method.\n *\n * @param {Object} newValues The filter values to change.\n */\n @action submitFilterValues(newValues: Record = {}): void {\n // Reset the page to page 1 if this filter supports pagination.\n const queryParams = this.queryParams;\n if (Object.keys(queryParams).includes('page')) {\n newValues.page = 1;\n }\n\n this.applyFilter({\n queryParams: {\n ...this.queryParams,\n ...newValues\n }\n });\n }\n\n /**\n * Resets filter values to their default values.\n *\n * @param {Object} overrides Optional values to override default values.\n */\n @action resetFilterValues(overrides = {}): void {\n if (this.hasAppliedFilters) {\n this.applyCleanFilters(overrides);\n }\n }\n\n /**\n * Applies a new set of filter values atop default values rather than previous values.\n */\n @action applyCleanFilters(filters = {}): void {\n this.submitFilterValues({\n ...this.defaultFilterValues,\n ...filters\n });\n }\n\n /**\n * Formats the date displayed by the pikaday control.\n */\n @action formatDate(date: Date): string {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n return this.intl.formatDate(date, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric'\n });\n }\n\n // endregion\n}\n","import { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { compare } from '@ember/utils';\n\nexport interface BaseFilterOptionalArgs {\n value?: Date | number | string;\n defaultValue?: Date | number | string | boolean;\n apply?: (value: any) => void;\n skip?: boolean | Promise;\n css?: string;\n description?: string;\n}\n\nexport type BaseFilterRequiredParams = {\n name: string;\n params: Array;\n};\n\n/**\n * @classdesc\n * An object containing all the base information for a single filter on the filter-bar component.\n *\n * @class BaseFilter\n */\nexport default class BaseFilter {\n // region Required parameters\n\n /**\n * Title to be displayed above the filter.\n */\n @tracked title: string;\n\n /**\n * Name of the filter to be used in the code.\n * For example, the filteringFieldName for a start date field would be startDate.\n */\n @tracked filteringFieldName: string;\n\n // endregion\n\n // region Optional parameters\n\n /**\n * Value of the filter.\n */\n @tracked value: Date | number | string | boolean | undefined | Array;\n\n /**\n * Default value of the filter.\n */\n @tracked defaultValue:\n | Date\n | number\n | string\n | boolean\n | undefined\n | Array;\n\n /**\n * Apply function for when the filter is changed.\n */\n apply: ((value: any) => void) | undefined;\n\n /**\n * Optional description to appear with the filter.\n */\n @tracked description: string | undefined;\n\n /**\n * An optional CSS class for this filter.\n */\n @tracked css: string;\n\n /**\n * Indicates this filter should not be automatically rendered.\n */\n @tracked skip: boolean | Promise;\n\n // endregion\n\n /** @override */\n constructor(title: string, filteringFieldName: string, props: BaseFilterOptionalArgs = {}) {\n this.title = title;\n this.filteringFieldName = filteringFieldName;\n\n this.value = props.value;\n this.defaultValue = props.defaultValue;\n this.apply = props.apply;\n this.description = props.description;\n this.css = props.css ?? '';\n this.skip = props.skip ?? false;\n }\n\n /**\n * Indicates whether the current value of this filter differs from the default value.\n */\n get isApplied(): boolean {\n return compare(this.value, this.defaultValue) !== 0;\n }\n\n /**\n * Validates that require parameters have been initialized.\n */\n validateParameters(): void {\n const { name, params } = this.getRequiredParamsInfo();\n params.forEach((n: keyof BaseFilter) => {\n assert(`The ${n} parameter must be passed to the \"${name}\" object`, this[n] !== undefined);\n });\n }\n\n /**\n * Returns information about the required fields for this object.\n */\n getRequiredParamsInfo(): BaseFilterRequiredParams {\n return {\n name: 'base-filter',\n params: ['title', 'filteringFieldName']\n };\n }\n\n /**\n * Returns an object that can be used to reset this filter.\n */\n getResetValues(): Record<\n string,\n string | number | Date | boolean | undefined | Array\n > {\n const { filteringFieldName, defaultValue } = this;\n return {\n [filteringFieldName]: defaultValue\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport BaseFilter from './base-filter';\n\nimport type { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport type { BaseFilterOptionalArgs, BaseFilterRequiredParams } from './base-filter';\n\ntype ChecklistItem = BinaryListItem[] | Promise;\n\n/**\n * @classdesc\n * An object containing all the information for a checklist selection filter on the filter-panel component.\n */\nexport default class ChecklistFilter extends BaseFilter {\n /**\n * List of items to be displayed in the checklist filter.\n */\n @tracked items: ChecklistItem;\n\n /** @override */\n constructor(title: string, filteringFieldName: string, items: ChecklistItem, props: BaseFilterOptionalArgs) {\n super(title, filteringFieldName, props);\n\n this.items = items;\n }\n\n /**\n * Indicates we should display a checklist control when rendering this filter.\n */\n isCheckList = true;\n\n /** @override */\n getRequiredParamsInfo(): BaseFilterRequiredParams {\n return {\n name: 'checklist-filter',\n params: [...super.getRequiredParamsInfo().params, 'items']\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport BaseFilter from './base-filter';\n\nimport type { BaseFilterOptionalArgs, BaseFilterRequiredParams } from './base-filter';\n\ninterface DateFilterOptionalArgs extends BaseFilterOptionalArgs {\n minimumDate?: Date;\n maximumDate?: Date;\n showDefaultDate?: boolean;\n}\n\n/**\n * @classdesc\n * An object containing all the information for a single date filter on the filter-bar component.\n *\n * @class DateFilter\n */\nexport default class DateFilter extends BaseFilter {\n // region Parameters\n\n /**\n * Timezone on the account.\n */\n @tracked timeZone: string;\n\n /**\n * The passed minimum date value.\n */\n @tracked minimumDate: Date | undefined;\n\n /**\n * The passed maximum date value.\n */\n @tracked maximumDate: Date | undefined;\n\n /**\n * Whether we should show the default date value in the filter or a generic message.\n */\n @tracked showDefaultDate: boolean;\n\n // endregion\n\n constructor(title: string, filteringFieldName: string, timeZone: string, props: DateFilterOptionalArgs = {}) {\n super(title, filteringFieldName, props);\n\n this.timeZone = timeZone;\n this.minimumDate = props?.minimumDate;\n this.maximumDate = props?.maximumDate;\n this.showDefaultDate = props?.showDefaultDate ?? true;\n\n this.validateParameters();\n }\n\n /**\n * Indicates this is a date filter.\n */\n isDateSelector = true;\n\n /**\n * Returns the actual date value, or now if the supplied value is exactly null.\n */\n @computed('isApplied', 'value', 'showDefaultDate')\n get computedValue(): Date {\n const { value } = this;\n\n // Have values NOT changed AND is the value null?\n if (this.showDefaultDate && !this.isApplied && value === null) {\n // Use now.\n return new Date();\n }\n\n return value;\n }\n\n /** @override */\n getRequiredParamsInfo(): BaseFilterRequiredParams {\n return {\n name: 'date-filter',\n params: [...super.getRequiredParamsInfo().params, 'timeZone']\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport BaseFilter from './base-filter';\n\nimport type { BaseFilterOptionalArgs, BaseFilterRequiredParams } from './base-filter';\nimport type DateFilter from './date-filter';\n\nexport interface DateRangeFilterOptionalArgs extends BaseFilterOptionalArgs {\n validationFn?: (startDate?: Date, endDate?: Date) => boolean;\n}\n\n/**\n * @classdesc\n * An object containing all the information for a single date filter on the filter-bar component.\n *\n * @class DateRangeFilter\n */\nexport default class DateRangeFilter extends BaseFilter {\n // region Parameters\n\n /**\n * The beginning date for this range.\n */\n @tracked beginDate: DateFilter;\n\n /**\n * The ending date for this range.\n */\n @tracked endDate: DateFilter;\n\n /**\n * Validation function applied to dates in date-range-picker.\n */\n validationFn: () => boolean;\n\n // endregion\n\n /** @override */\n constructor(\n title: string,\n filteringFieldName: string,\n beginDate: DateFilter,\n endDate: DateFilter,\n props: DateRangeFilterOptionalArgs\n ) {\n super(title, filteringFieldName, props);\n\n this.beginDate = beginDate;\n this.endDate = endDate;\n this.validationFn = props.validationFn ?? (() => true);\n\n this.validateParameters();\n }\n\n /**\n * Indicates this is a date range filter.\n */\n isDateRangeSelector = true;\n\n /**\n * The timezone to use for this date range.\n */\n @reads('beginDate.timeZone')\n timeZone = '';\n\n /** @override */\n @computed('beginDate.isApplied', 'endDate.isApplied')\n get isApplied(): boolean {\n return this.beginDate.isApplied || this.endDate.isApplied;\n }\n\n /** @override */\n getRequiredParamsInfo(): BaseFilterRequiredParams {\n return {\n name: 'date-range-filter',\n params: [...super.getRequiredParamsInfo().params, 'beginDate', 'endDate']\n };\n }\n\n /** @override */\n getResetValues(): Record {\n return {\n ...(this.beginDate.getResetValues() as Record),\n ...(this.endDate.getResetValues() as Record)\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport BaseFilter from './base-filter';\n\nimport type { BaseFilterOptionalArgs, BaseFilterRequiredParams } from './base-filter';\nimport type DateFilter from './date-filter';\n\n/**\n * @classdesc\n * An object containing all the information for a date time filter on the filter-bar component. This object allows you to select\n * a date and time, without requiring the need to select a range. You can also select whether you want to search the entire day\n * or search a specific date and time.\n */\nexport default class DateTimeFilter extends BaseFilter {\n // region Parameters\n\n /**\n * The selected date for this filter.\n */\n @tracked selectedDate: DateFilter;\n\n /**\n * Whether we should filter on the date only, or filter on date and time.\n */\n @tracked searchByDateOnly: BaseFilter;\n\n // endregion\n\n /** @override */\n constructor(\n title: string,\n filteringFieldName: string,\n selectedDate: DateFilter,\n searchByDateOnly: BaseFilter,\n props: BaseFilterOptionalArgs = {}\n ) {\n super(title, filteringFieldName, props);\n\n this.selectedDate = selectedDate;\n this.searchByDateOnly = searchByDateOnly;\n\n this.validateParameters();\n }\n\n /**\n * Indicates this is a date time filter.\n */\n isDateTimeFilter = true;\n\n /**\n * The timezone to use for this date time filter.\n */\n @reads('selectedDate.timeZone')\n declare timeZone: string;\n\n /** @override */\n @computed('selectedDate.isApplied')\n get isApplied(): boolean {\n return this.selectedDate.isApplied;\n }\n\n /** @override */\n getRequiredParamsInfo(): BaseFilterRequiredParams {\n return {\n name: 'date-time-filter',\n params: [...super.getRequiredParamsInfo().params, 'selectedDate', 'searchByDateOnly']\n };\n }\n\n /** @override */\n getResetValues(): Record {\n return {\n ...(this.selectedDate.getResetValues() as Record),\n ...(this.searchByDateOnly.getResetValues() as Record)\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport BaseFilter from './base-filter';\n\nimport type DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport type { BaseFilterOptionalArgs, BaseFilterRequiredParams } from './base-filter';\n\nexport interface DropdownFilterOptionalArgs extends BaseFilterOptionalArgs {\n placeholder?: string;\n isMultiSelect?: boolean;\n maxItemCount?: number;\n label?: string;\n}\n\n/**\n * @classdesc\n * An object containing all the information for a dropdown selection filter on the filter-panel component.\n */\nexport default class DropdownFilter extends BaseFilter {\n // region Parameters\n\n /**\n * List of DropdownSelectItems to be displayed on the filter.\n */\n @tracked items: Array | Promise>;\n\n /**\n * Placeholder text to appear when no value is selected.\n * Defaults to \"Select\" when nothing is specified.\n */\n @tracked placeholder: string;\n\n /**\n * Whether this filter is multi-select or single-select.\n */\n @tracked isMultiSelect: boolean;\n\n /**\n * The number of items shown before we begin hiding items and force a search to narrow results. Default will show all items.\n */\n @tracked maxItemCount: number;\n\n /**\n * The aria-label to apply to the dropdown.\n */\n label?: string;\n\n // endregion\n\n /** @override */\n constructor(\n title: string,\n filteringFieldName: string,\n items: Array | Promise>,\n props: DropdownFilterOptionalArgs\n ) {\n super(title, filteringFieldName, props);\n\n this.items = items;\n this.placeholder = props?.placeholder ?? '';\n this.isMultiSelect = props?.isMultiSelect ?? false;\n this.maxItemCount = props?.maxItemCount ?? -1;\n this.label = props?.label;\n\n this.validateParameters();\n }\n\n /**\n * Indicates we should display a dropdown when rendering this filter.\n */\n isDropdown = true;\n\n /** @override */\n getRequiredParamsInfo(): BaseFilterRequiredParams {\n return {\n name: 'dropdown-filter',\n params: [...super.getRequiredParamsInfo().params, 'items']\n };\n }\n\n /**\n * Indicates we should always show headers, even when item count is not actually limited.\n */\n get alwaysShowHeaders(): boolean {\n return this.maxItemCount > 0;\n }\n}\n","import BaseFilter from './base-filter';\n\n/**\n * @classdesc\n * An object containing all the information for a text search filter on the filter-panel component.\n */\nexport default class SearchFilter extends BaseFilter {\n /**\n * Indicates this is a text search filter.\n */\n isSearchFilter = true;\n}\n","import { get, getProperties } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { AccessPlans } from 'customer-site/enums/AccessPointCollectionType';\nimport {\n EmberEditUserDeviceAccess,\n EmberEnterpriseEditUserDeviceAccessAccessType,\n EmberEnterpriseEditUserDeviceAccessLocationDevices\n} from 'customer-site/enums/CustomerPageUrl';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type AccessPointCollectionsSummary from 'customer-site/models/users/access/access-point-collections-summary';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type PointCentralShareUser from 'customer-site/services/users/pointcentral-share-user';\n\n// Use to define the objects calling this functions. We never should have done this, but here we are.\ntype CallingContext = {\n intl: ADCIntlService;\n contextManager: ContextManager;\n modals: ModalService;\n navigation: NavigationService;\n};\n\n/**\n * At the moment we don't allow for parent groups to be selectable when selecting device access for a PointCentral contact.\n * In addition, don't include any empty groups in the group selector.\n */\nexport function getSystemGroupDropdownSelectItems(\n systemGroups: SystemGroup[],\n selectedGroup: string\n): DropdownSelectItem[] {\n return systemGroups\n .filter((group) => {\n return (\n (!group.get('isHighestGroupWithAccess') || group.get('isChildlessGroup')) &&\n get(get(group, 'systems'), 'length') > 0\n );\n })\n .map((systemGroup) =>\n DropdownSelectItem.create({\n name: systemGroup.get('description'),\n value: systemGroup.get('id'),\n state: systemGroup.get('id') === selectedGroup ? SELECTED : UNSELECTED\n })\n );\n}\n\n/**\n * Determines whether the selected group is an access control group.\n */\nexport function isAccessControlSystemGroup(systemGroups: SystemGroup[], selectedGroup: string): boolean {\n if (!selectedGroup || selectedGroup.length === 0) {\n return false;\n }\n\n const systemGroup = systemGroups.findBy('id', selectedGroup);\n return !!(systemGroup && systemGroup.get('isAccessControl'));\n}\n\n/**\n * Display a modal to confirm that the login wants to assign the user no device access when editing access.\n */\nexport function hasNoDeviceAccessModal(\n this: CallingContext,\n confirmAction: VoidFunction,\n denyAction?: VoidFunction\n): void {\n const { intl, contextManager } = this,\n editDeviceAccessPages = [\n EmberEnterpriseEditUserDeviceAccessLocationDevices,\n EmberEnterpriseEditUserDeviceAccessAccessType,\n EmberEditUserDeviceAccess\n ],\n routeId = contextManager.currentRouteData?.routeItem?.routeId;\n\n // If we aren't on pages that allow device access modifications, don't display the no device access selected modal.\n if (routeId && !editDeviceAccessPages.includes(routeId)) {\n return confirmAction();\n }\n\n const modalBodyTranslationKey = contextManager.isPointCentral\n ? 'noDeviceAccessSelectedPointCentralUserTypeRevampBeta'\n : 'noDeviceAccessSelected';\n\n this.modals.showConfirmationDialog(\n intl.t('components.users.item.device-access.noAccess'),\n intl.t(`enterprise.users.edit.device-access.${modalBodyTranslationKey}`),\n {\n text: intl.t('generic.confirm'),\n css: 'btn-color-danger',\n action: confirmAction\n },\n denyAction ? { action: denyAction } : undefined\n );\n}\n\n/**\n * Displays a confirmation modal if we have canceled out of the creation process of a PointCentral user.\n */\nexport function cancelEditPointCentralUser(\n this: CallingContext,\n deviceAccess?: DeviceAccessModel,\n action = () => {}\n): void {\n const { intl, contextManager } = this;\n\n const modalTranslationKey = contextManager.isPointCentral\n ? 'discardChangesConfirmationMessagePointCentralUserTypeRevampBeta'\n : 'discardChangesConfirmationMessage';\n\n // If we cancel during the PC user creation process, we don't save the device access edits. Show confirmation modal\n // to let end user know changes won't be saved.\n this.modals.showConfirmationDialog(\n intl.t('enterprise.users.edit.device-access.discardChanges'),\n intl.t(`enterprise.users.edit.device-access.${modalTranslationKey}`),\n {\n text: intl.t('generic.confirm'),\n css: 'btn-color-danger',\n action: () => {\n handleRedirectAfterSaveOrCancelPointCentral.call(\n this,\n deviceAccess,\n deviceAccess?.userType,\n deviceAccess?.temporarySchedule?.beginDateTime,\n deviceAccess?.temporarySchedule?.endDateTime\n );\n action();\n }\n }\n );\n}\n\n/**\n * Redirects to the appropriate page now that the device access model has been saved for the PointCentral user.\n */\nexport async function handleRedirectAfterSaveOrCancelPointCentral(\n this: CallingContext & { syncUserPermissions: () => Promise; baseUserEditRoute: number },\n deviceAccess: DeviceAccessModel,\n previousUserType: number,\n startDate: Date,\n endDate: Date\n): Promise {\n const { shouldRedirectToEditRoute, isCreationFlow } = deviceAccess;\n\n if (isCreationFlow) {\n // Signal the end of the creation flow process.\n deviceAccess.set('isCreationFlow', false);\n\n // Handle any additional steps.\n await handleAdditionalPointCentralDeviceAccessSaveSteps.call(\n this,\n deviceAccess,\n previousUserType,\n startDate,\n endDate\n );\n\n // Sync user permissions because some panels may not support adding another duress user.\n await this.syncUserPermissions();\n }\n\n if (shouldRedirectToEditRoute) {\n // Signal success of redirect to edit route\n deviceAccess.set('shouldRedirectToEditRoute', false);\n\n this.navigation.replaceWithRouteId(this.baseUserEditRoute, deviceAccess.belongsTo('user').id());\n return;\n }\n\n this.contextManager.transitionToPreviousRoute();\n}\n\n/**\n * Complete any additional steps upon saving device access here.\n */\nexport async function handleAdditionalPointCentralDeviceAccessSaveSteps(\n this: CallingContext & { pointCentralShareUser?: PointCentralShareUser },\n deviceAccess: DeviceAccessModel,\n previousUserType: number,\n startDate?: Date,\n endDate?: Date,\n isNew = false\n): Promise {\n const { accessControlUser, accessControlGroupId, user } = deviceAccess;\n\n // On the enterprise access type page, we allow assigning and revoking access plans from a user. If this happens, we must\n // also save these access plan updates.\n if (accessControlUser && accessControlGroupId) {\n const accessPlans = await get(accessControlUser, 'accessPlans'),\n originalAccessPlanIds = accessControlUser.originalAccessPlans?.map((ap) => ap.id);\n\n // If we've modified which access plans this user has been assigned, update their access plans.\n if (\n !originalAccessPlanIds ||\n accessPlans.length !== originalAccessPlanIds.length ||\n accessPlans.map((ap) => ap.id).any((apid) => !originalAccessPlanIds.includes(apid))\n ) {\n await accessControlUser.saveAccessPlansOnDifferentScope(\n accessPlans.map(({ id }) => parseInt(id, 10)),\n accessControlGroupId,\n previousUserType,\n startDate,\n endDate,\n isNew\n );\n }\n }\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error user is async, so this code should be replaced with `(await user).reload().then(async (user) => {`.\n user.reload().then(async (user) => {\n // If we should send a welcome email by default after saving device access, send it here.\n if (user.get('sendWelcomeEmailUponSave')) {\n this.pointCentralShareUser?.shareUserCodeEmail(user);\n }\n\n if (user.sendWelcomeTextUponSave) {\n this.pointCentralShareUser?.sendPointCentralWelcomeText(user);\n }\n });\n}\n\n/**\n * In the past, PointCentral allowed you to assign access to devices outside of the selected group, if we're\n * at the subgroup level.\n *\n * With the E+F revamp, we now want ALL_EXISTING to be selected if we have access to all existing devices in the selected\n * system group.\n *\n * NOTE: This will be deprecated once we disallow the editing of other groups' access other than the selected group.\n */\nexport function shouldOverrideAndSelectAllExistingAccessPointCentral(\n isPointCentral: boolean,\n selectedSystemGroup: SystemGroup | null,\n accessPointCollectionsSummary: AccessPointCollectionsSummary\n): boolean {\n if (!isPointCentral || !selectedSystemGroup) {\n return false;\n }\n\n const { isParentGroup, id } = getProperties(selectedSystemGroup, 'isParentGroup', 'id'),\n allAccessPointItems = get(accessPointCollectionsSummary, 'allAccessPointItems');\n\n return (\n !isParentGroup &&\n !isEmpty(allAccessPointItems) &&\n // Check to see if we have access to all the access point items associated with the selectedSystemGroup.\n allAccessPointItems\n .filter(\n (item) =>\n get(item.systemGroup, 'id') === id &&\n get(item.accessPointCollection, 'collectionType') !== AccessPlans\n )\n .isEvery('hasAccess')\n );\n}\n","import { isEmpty } from '@ember/utils';\n\n/**\n * Get the child routes based on the route and category, if applicable\n *\n * @param {boolean} isEnterpriseSettingsCategoryRoute Is this a category route?\n * @param {string} searchString The string used to filter settings\n * @returns { routes: Promise>}\n */\nexport default function getChildRoutes(isEnterpriseSettingsCategoryRoute, searchString = '') {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-get\n const routeId = this.get('routeId'),\n searchStringQuery = isEmpty(searchString) ? '' : `&searchString=${searchString}`,\n routeString = isEnterpriseSettingsCategoryRoute\n ? `enterprise/settings/getChildRoutesCategory?routeId=${routeId}` + searchStringQuery\n : `settings/getChildRoutes?routeId=${routeId}` + searchStringQuery,\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-get\n routes = this.get('ajax').apiRequest(routeString, null);\n\n return routes.then(({ value: routes }) => {\n for (let i = 0; i < routes.length; i++) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n routes[i].routeItem = this.contextManager.getRouteItem(routes[i].routeId);\n }\n\n return routes;\n });\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseLoginController from 'customer-site/classes/enterprise/logins/base-login/controller';\nimport { escapeHtml } from 'customer-site/utils/strings';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\nimport { resolve, reject } from 'rsvp';\n\nimport type LocaleModel from '@adc/app-infrastructure/models/locale';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type AdcBaseRoute from 'customer-site/classes/base-route';\nimport type BaseLoginType from 'customer-site/models/logins/base-login';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\n\n/**\n * @classdesc\n *\n * The controller of the page to edit a login's access.\n */\nexport default abstract class BaseEditLoginController<\n T extends BaseLoginType,\n U extends AdcBaseRoute\n> extends BaseLoginController {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n\n /**\n * current user locale\n */\n @alias('contextManager.identityModel.profile.locale')\n declare userLocale: AsyncBelongsTo;\n\n /**\n * Determines whether we should show the button to 'reset' role selections on the page.\n */\n @tracked rolesChanged = false;\n\n /**\n * Save the login.\n *\n * @param login\n */\n async saveLogin(login: T): Promise {\n const { notificationManager, intl, cultureIdSelection } = this;\n login.cultureId = cultureIdSelection;\n\n try {\n const isNewLogin = login.get('isNew');\n\n await login.save();\n notificationManager.addSuccess(\n intl.t(\n `enterprise.logins.edit.multi-group-login.${\n isNewLogin ? 'loginSuccessfullyCreated' : 'loginSuccessfullyUpdated'\n }`,\n {\n loginName: escapeHtml(login.loginName)\n }\n )\n );\n return resolve();\n } catch (e) {\n this.handleErrorNotification.call(this, e, 'enterprise.logins.edit.multi-group-login.loginFailedToSave');\n return reject();\n }\n }\n\n /**\n * Displays the error if we have an unsuccessful save / associate.\n *\n * @param e\n * @param failedResourceKey\n */\n handleErrorNotification(e: any, failedResourceKey: string): void {\n const errors = e.errors ?? [{ detail: this.intl.t(failedResourceKey) }];\n errors.forEach((error: { detail: string }) => {\n if (error?.detail) {\n this.notificationManager.addError(error.detail);\n }\n });\n }\n\n /**\n * Are we able to save this login?\n */\n @computed('shouldDisplayLoginNameError', 'displayEmailAddressError', 'resolvedModel.login.canBeEdited')\n get canBeSaved(): boolean {\n const { login } = this.resolvedModel ?? {};\n\n if (!login) {\n return false;\n }\n\n return login.canBeEdited && !this.shouldDisplayLoginNameError && !this.displayEmailAddressError;\n }\n\n /**\n * Array of culture options as drop down items.\n */\n @computed('contextManager.identityModel.profile.availableLocales', 'resolvedModel.login.cultureId')\n get availableLocaleOptions(): Array {\n const availableLocales = this.contextManager.identityModel.profile.availableLocales,\n currentLocale = this.resolvedModel.login?.cultureId;\n\n return availableLocales.map((locale) => {\n return DropdownSelectItem.create({\n name: locale.displayName,\n value: locale.id,\n state: currentLocale === parseInt(locale.id, 10) ? SELECTED : UNSELECTED\n });\n });\n }\n\n /**\n * The action to take once all of the data has been successfully loaded.\n *\n * @param model\n */\n abstract dataLoaded(model: ResolvedModelFrom): void;\n\n /**\n * Saves the login.\n */\n abstract save(): Promise;\n\n /**\n * Undoes all of the role selections the end-user has done on this page for this login.\n */\n abstract resetSelection(): void;\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { SearchFilter } from 'customer-site/classes/helpers/filters/filters';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type BaseLogin from 'customer-site/models/logins/base-login';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type Stats from 'customer-site/services/stats';\n\n/**\n * @classdesc\n * The manage logins page\n */\nexport abstract class BaseLoginsIndexController extends EmberController {\n @service declare router: RouterService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare store: Store;\n @service declare stats: Stats;\n @service declare identityManager: IdentityManager;\n @service declare navigation: NavigationService;\n\n queryParams = ['searchString'];\n\n /**\n * The search string used when filtering users.\n */\n @tracked searchString = '';\n\n /**\n * The amount of logins listed on the page.\n */\n @tracked loginsCount?: number;\n\n /**\n * Do we need to retrieve logins again?\n */\n @tracked resetItems = false;\n\n /**\n * Do we have 0 logins displayed?\n */\n @tracked\n declare hasNoLogins: boolean;\n\n /**\n * Are we on the single system Manage Logins page?\n */\n isSingleSystem = false;\n\n /**\n * Transition to create a new login.\n */\n abstract addNewLogin(): void;\n\n /**\n * Gets the new logins count\n */\n @action\n loginsCountChanged(newLoginsCount: number): void {\n this.loginsCount = newLoginsCount;\n this.hasNoLogins = this.loginsCount === 0;\n }\n\n /**\n * Applies filters to search string.\n */\n @action\n applyFilters(filters: { searchString: string }): void {\n this.searchString = filters.searchString;\n this.resetItems = true;\n\n // Set the query param to the new search string.\n this.router.transitionTo({\n queryParams: {\n searchString: this.searchString\n }\n });\n }\n\n /**\n * The filters for the login page.\n */\n @computed('searchString')\n get loginFilters(): SearchFilter[] {\n return [\n new SearchFilter(this.intl.t('generic.search'), 'searchString', {\n value: this.searchString,\n defaultValue: ''\n })\n ];\n }\n\n /**\n * Transition to the edit enterprise login route for the given login id.\n * Which route should we go to when clicking the 'edit' button for each login?\n */\n abstract editLogin(login: BaseLogin): void;\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../base-route';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type ManagedAccessRequest from 'customer-site/models/settings/managed-access-request';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\n/**\n * @classdesc\n * Route for changing managed 24/7 access settings.\n */\nexport default class BaseManagedAccountAccessRoute extends AdcBaseRoute {\n @service declare store: ServiceRegistry['store'];\n\n declare currentModel: ModelFrom;\n\n model(): { managedAccessRequest: ADCAsyncStoreQueryRecord } {\n return {\n managedAccessRequest: this.store.queryRecord('settings/managed-access-request', {})\n };\n }\n\n async rollbackModelOnTransition(): Promise {\n (await this.currentModel.managedAccessRequest)?.rollback();\n }\n}\n","import { inject as service } from '@ember/service';\nimport AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport User from 'customer-site/models/users/user';\nimport AdcBaseRoute from '../base-route';\nimport MergePreviewManager from './merge-preview-manager';\n\nimport type Store from '@ember-data/store';\nimport type AccessControlAccessGroup from 'customer-site/models/access-control/access-control-access-group';\nimport type AccessControlPermissionsCollection from 'customer-site/models/access-control/access-control-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type UserAttributeCollection from 'customer-site/models/users/user-attributes/user-attribute-collection';\nimport type UserAttributeField from 'customer-site/models/users/user-attributes/user-attribute-field';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport type BaseMergeUsersPreviewRouteModel = {\n user: BaseUser;\n permissions: ADCAsyncStoreFindRecord;\n ssuId: number;\n stuId: number;\n accessGroups?: ADCAsyncStoreFindAll;\n userAttributeCollection?: UserAttributeCollection;\n availableUserAttributeFields?: ADCAsyncStoreFindAll;\n};\n\nexport function getUsersPermissions(\n permissionsModelName: 'users/permissions-collection' | 'access-control/access-control-permissions-collection',\n store: Store,\n identityManager: IdentityManager\n): ADCAsyncStoreFindRecord {\n return store.findRecord(permissionsModelName, identityManager.getContextId());\n}\n\nexport default abstract class BaseMergeUsersPreviewRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n abstract userModelName: 'users/user' | 'access-control/access-control-user';\n abstract permissionsModelName:\n | 'users/permissions-collection'\n | 'access-control/access-control-permissions-collection';\n\n async model(params: { id_ssu: number; id_stu: number }): Promise {\n const { store, identityManager } = this,\n mergePreviewManager = new MergePreviewManager();\n\n const sourceUser = await store.findRecord(this.userModelName, params.id_ssu);\n const targetUser = await store.findRecord(this.userModelName, params.id_stu);\n\n if (sourceUser instanceof User && targetUser instanceof User) {\n mergePreviewManager.setPreviewUserProperties(sourceUser, targetUser);\n }\n if (sourceUser instanceof AccessControlUser && targetUser instanceof AccessControlUser) {\n mergePreviewManager.setPreviewAccessControlUserProperties(sourceUser, targetUser);\n }\n\n const sourceUserAttributes = await store.findRecord(\n 'users/user-attributes/user-attribute-collection',\n params.id_ssu\n );\n const targetUserAttributes = await store.findRecord(\n 'users/user-attributes/user-attribute-collection',\n params.id_stu\n );\n\n mergePreviewManager.setPreviewUserAttributes(sourceUserAttributes, targetUserAttributes);\n\n return {\n user: targetUser,\n ssuId: params.id_ssu,\n stuId: params.id_stu,\n permissions: getUsersPermissions(this.permissionsModelName, store, identityManager),\n userAttributeCollection: targetUserAttributes,\n availableUserAttributeFields: store.findAll('users/user-attributes/user-attribute-field')\n };\n }\n}\n","import { getProperties } from '@ember/object';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\n\nexport interface AddContactModel {\n editUserContactInformationRouteId: number;\n user?: BaseUser;\n permissions?: BasePermissionsCollection;\n}\n\n/**\n * @classdesc\n *\n * Route for selecting type of contact address to add.\n */\nexport default abstract class BaseUsersAddContactRoute extends AdcBaseRoute {\n abstract editUserContactInformationRouteId: number;\n abstract userEditRouteName: string;\n\n // ensures that transition to previous route will skip this route.\n skipWhenTransitioningBack = true;\n\n model(): AddContactModel & T {\n return {\n ...getProperties(this, 'editUserContactInformationRouteId'),\n ...(this.modelFor(this.userEditRouteName) as T)\n };\n }\n}\n","import Controller from '@ember/controller';\nimport { action, get, set } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\nimport { None } from 'customer-site/enums/AccessPointUserType';\nimport {\n EmberEditUserAccessPeriod,\n EmberEditUserDeviceAccess,\n EmberEnterpriseEditUserAccessPeriod,\n EmberEnterpriseEditUserDeviceAccessAccessType,\n EmberEnterpriseEditUserDeviceAccessUserCode,\n EmberEnterpriseUserEdit,\n EmberEnterpriseUsersAddContactAddressDuringUserCreation,\n EmberUsersAddContactAddressDuringUserCreation\n} from 'customer-site/enums/CustomerPageUrl';\nimport { BackupCode, MasterCodeUser, NotificationsOnly } from 'customer-site/enums/PointCentralUserType';\nimport User from 'customer-site/models/users/user';\nimport { saveUserModel } from './index/controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type PointCentralShareUser from 'customer-site/services/users/pointcentral-share-user';\nimport type { UserEditModel, BaseUserEditModel } from './base-user-edit-route';\n\ntype DeviceAccessInfo = { redirectRoute: number; deviceAccess?: DeviceAccessModel };\n\n/**\n * @classdesc\n * The base controller for user edit sub-routes.\n */\nexport default abstract class BaseUserEditController extends Controller {\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n @service declare notificationManager: NotificationManager;\n @service declare router: RouterService;\n @service('users.pointcentral-share-user') declare pointCentralShareUser: PointCentralShareUser;\n\n declare model: BaseUserEditModel;\n\n @reads('model.permissions')\n declare permissions: BaseUserEditModel['permissions'];\n\n /**\n * The base user edit route enum.\n */\n abstract baseUserEditRoute: number;\n\n /**\n * Updates the permissions record by reloading it from the server.\n */\n @action\n async syncUserPermissions(): Promise {\n (await this.model.permissions).reload();\n }\n\n /**\n * Does any extra actions for new users depending on inheriting class.\n */ // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected async handleNewUserSetup(_savedUser?: U): Promise {}\n\n /**\n * Calls a helper method to save the user and returns the promise to the save button so it can change state correctly.\n */\n @action\n async saveUser(user: U, userCode?: string, deviceId?: string): Promise {\n const { contextManager } = this;\n\n // This should not happen. We should not allow access to this page if they can't save users.\n if (!user.canBeSaved) {\n contextManager.transitionToPreviousRoute();\n return;\n }\n\n // NOTE: We must cache this because the .save() call will change the value.\n const isNewUser = get(user, 'isNew'),\n { intl } = this;\n\n if (isNewUser) {\n const locale = await contextManager.identityModel.profile.locale;\n set(user, 'localeId', parseInt(String(locale.cultureId), 10));\n } else if (user instanceof User) {\n const deviceAccess = await user.deviceAccess;\n if (deviceAccess?.hasNoDeviceAccess) {\n Object.assign(deviceAccess, {\n weeklySchedule: null,\n temporarySchedule: null\n });\n }\n }\n\n const fnSaveUser = async (passUser: boolean) => {\n const savedUser = await saveUserModel(user, this.modals, this.notificationManager);\n\n if (isNewUser) {\n if (passUser && !user.isDuress) {\n //duress codes dont need to do this.\n await this.handleNewUserSetup(savedUser);\n }\n }\n\n await this.handleRedirect(savedUser, isNewUser, userCode, deviceId);\n };\n\n if (\n !(user.activeDirectoryFlag && this.router.currentRouteName === 'access-control.users.edit.user-information')\n ) {\n return fnSaveUser(true);\n }\n\n // Show a warning/confirmation when editing AD users.\n this.modals.showConfirmationDialog(\n intl.t('classes.users.edit.activeDirectoryFieldChangeTitle'),\n intl.t('classes.users.edit.activeDirectoryNameConfirm'),\n {\n text: intl.t('classes.users.edit.continue'),\n action: () => fnSaveUser(false)\n }\n );\n }\n\n private async setDeviceAccessInfo(savedUser: U): Promise {\n const result: DeviceAccessInfo = {\n redirectRoute: this.baseUserEditRoute\n };\n\n // Is this an access control user?\n if (!(savedUser instanceof User)) {\n return result;\n }\n\n const deviceAccess = await savedUser.deviceAccess;\n if (!deviceAccess) {\n return result;\n }\n\n result.deviceAccess = deviceAccess;\n\n const { userType, pointCentralUserType } = deviceAccess;\n if (!userType || userType === None) {\n return result;\n }\n\n const { identityModel } = this.contextManager;\n\n if (!identityModel.isPointCentral || isPresent(pointCentralUserType)) {\n set(deviceAccess, 'isCreationFlow', true);\n\n // For enterprise users:\n if (savedUser.isEnterprise) {\n return {\n ...result,\n redirectRoute: EmberEnterpriseUserEdit\n };\n }\n\n if (identityModel.isPointCentral) {\n // Since we're not setting the user profile on the visited route stack, redirect to the edit route during the PC user creation process.\n set(deviceAccess, 'shouldRedirectToEditRoute', true);\n return {\n ...result,\n redirectRoute: EmberUsersAddContactAddressDuringUserCreation\n };\n }\n\n // Single system ADC users will route to the device access page after setting user information.\n return {\n ...result,\n redirectRoute: EmberEditUserDeviceAccess\n };\n }\n\n return result;\n }\n\n /**\n * Redirects to the appropriate page since the user is now saved.\n */\n private async handleRedirect(\n savedUser: U,\n isNewUser: boolean,\n userCode?: string,\n deviceId?: string\n ): Promise {\n const { contextManager, navigation } = this,\n fnNotify = () =>\n this.notificationManager.addSuccess(this.intl.t('classes.users.edit.updatesHaveBeenSaved'));\n\n if (!isNewUser) {\n contextManager.transitionToPreviousRoute();\n fnNotify();\n return;\n }\n\n const { redirectRoute, deviceAccess } = await this.setDeviceAccessInfo(savedUser);\n\n // Sync user permissions because some panels may not support adding another duress user.\n await this.syncUserPermissions();\n\n const userId = savedUser.id,\n userType = deviceAccess?.resolvedUserType;\n\n // Wait for next thread since we want the UI to be done showing state before we redirect.\n (async () => {\n try {\n await navigation.replaceWithRouteId(redirectRoute, userId, {\n queryParams: {\n userCode,\n deviceId,\n userType\n }\n });\n } catch (e) {\n // router.replaceWith can throw a transition aborted exception if you await it, but it doesn't actually prevent the transition, so we need to swallow.\n }\n\n // Navigate to the next step in the user creation process when creating enterprise users.\n if (\n savedUser instanceof User &&\n savedUser.isEnterprise &&\n deviceAccess &&\n (userType !== NotificationsOnly || contextManager.isPointCentral)\n ) {\n navigation.transitionToRouteId(\n contextManager.isPointCentral\n ? EmberEnterpriseUsersAddContactAddressDuringUserCreation\n : EmberEnterpriseEditUserDeviceAccessUserCode,\n userId,\n {\n queryParams: {\n userType\n }\n }\n );\n }\n\n fnNotify();\n })();\n }\n}\n\n/**\n * Does this user support device access?\n * Right now, PointCentral notifications only, lock master code, or backup code users that aren't the panel master user should\n * not be able to update their device access.\n */\nexport function userTypeSupportsDeviceAccess(deviceAccess: DeviceAccessModel, isPointCentral: boolean): boolean {\n if (!isPointCentral || get(get(deviceAccess, 'user'), 'isPrimary')) {\n return true;\n }\n\n const type = get(deviceAccess, 'resolvedUserType');\n return type !== NotificationsOnly && type !== MasterCodeUser && type !== BackupCode;\n}\n\n/**\n * Get the next route in the flow for user creation.\n *\n * @note If you are adding another step to the PointCentral user creation process, make sure to make edits to\n * the isTransitionExitingUserCreationProcess method below if necessary.\n */\nexport function getNextRouteForCreation(contextManager: ContextManager, isEnterprise = true, routeId?: number): number {\n routeId = routeId ?? contextManager.currentRouteData?.routeItem?.routeId;\n\n if (isEnterprise) {\n switch (routeId) {\n case EmberEnterpriseUsersAddContactAddressDuringUserCreation:\n return EmberEnterpriseEditUserAccessPeriod;\n case EmberEnterpriseEditUserDeviceAccessUserCode:\n return EmberEnterpriseEditUserAccessPeriod;\n case EmberEnterpriseEditUserAccessPeriod:\n return EmberEnterpriseEditUserDeviceAccessAccessType;\n default:\n return EmberEnterpriseUserEdit;\n }\n } else {\n switch (routeId) {\n case EmberUsersAddContactAddressDuringUserCreation:\n return EmberEditUserAccessPeriod;\n case EmberEditUserAccessPeriod:\n return EmberEditUserDeviceAccess;\n default:\n return EmberEnterpriseUserEdit;\n }\n }\n}\n\n/**\n * Are we attempting to navigate away from the user creation process?\n */\nexport function isTransitionExitingUserCreationProcess(isCreationFlow: boolean, targetName: string): boolean {\n return (\n isCreationFlow &&\n ['device-access', 'user-type', 'access-period', 'new-user-add-contact-information', 'access-type'].every(\n (n) => !targetName.includes(n)\n )\n );\n}\n","import { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../base-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type UserAttributeCollection from 'customer-site/models/users/user-attributes/user-attribute-collection';\nimport type UserAttributeField from 'customer-site/models/users/user-attributes/user-attribute-field';\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport type UserEditModel = {\n availableUserAttributeFields?: Promise | ADCAsyncStoreQuery;\n permissions: Promise | ADCStoreFindRecord;\n};\n\nexport type BaseUserEditModel = M & {\n user?: Promise;\n userAttributeCollection?: Promise;\n canViewUserAttributeValues: boolean | Promise;\n};\n\n/**\n * @classdesc\n * The base route for user edit sub-routes.\n */\nexport default abstract class BaseUserEditRoute extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n\n declare currentModel: BaseUserEditModel;\n\n abstract userModelName: 'users/user' | 'access-control/access-control-user';\n abstract baseUsersRouteName: string;\n abstract userEditNotSupportedRoute: number;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n model({ id_user }: { id_user: string }, _: Transition): BaseUserEditModel {\n const parentRouteModel = this.modelFor(this.baseUsersRouteName),\n { permissions, availableUserAttributeFields } = parentRouteModel,\n user = id_user === 'new' ? undefined : this.store.queryRecord(this.userModelName, { slug: id_user });\n\n return {\n ...parentRouteModel,\n user,\n userAttributeCollection: user\n ? (async (): Promise => {\n const [fields, resolvedUser] = await Promise.all([availableUserAttributeFields, user]);\n if (!fields?.length) {\n // If no attributes are available, there's no need to fetch any collections.\n return undefined;\n }\n\n return resolvedUser?.isEditSupported && !resolvedUser?.isDuress\n ? this.store.findRecord('users/user-attributes/user-attribute-collection', id_user)\n : undefined;\n })()\n : undefined,\n canViewUserAttributeValues: permissions\n ? (async () => (await permissions).canViewUserAttributeValues)()\n : false\n } as BaseUserEditModel;\n }\n\n async afterModel(model: BaseUserEditModel): Promise {\n const user = await model.user;\n if (user && !user.isEditSupported) {\n this.navigation.replaceWithRouteId(this.userEditNotSupportedRoute);\n }\n }\n\n async rollbackModelOnTransition(): Promise {\n const user = await this.currentModel.user;\n\n // Was this model created just for this route?\n if (user && !isDestroyed(user) && get(user, 'isNew')) {\n // Unload from store because the user never saved it.\n this.store.unloadRecord(user);\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Controller for editing contact information.\n */\nexport default class ContactInformationController extends Controller {\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * Update the contact address.\n */\n @action\n async updateAddress(address: Promise, buttonAnimation: Promise): Promise {\n buttonAnimation.then((isSuccess) => {\n if (isSuccess !== false) {\n this.notificationManager.addSuccess(this.intl.t('classes.users.edit.contactInfoUpdated'));\n }\n });\n\n return (await address).save();\n }\n\n /**\n * The contact-address component deletes the model locally but does not persist it to the DB.\n */\n @action\n async deleteAddress(address: Promise): Promise {\n await (await address).destroyRecord();\n\n this.contextManager.transitionToPreviousRoute();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/users/edit/contact-information': ContactInformationController;\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\ntype RouteParams = {\n contact_address: string;\n contactType?: string;\n};\n\n/**\n * @classdesc\n * Route for editing contact information.\n */\nexport default abstract class BaseEditContactInformationRoute<\n T extends { user?: BaseUser | Promise }\n> extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n @service declare store: Store;\n\n queryParams = {\n contactType: {\n refreshModel: true\n }\n };\n\n declare currentModel: ModelFrom>;\n\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-shared-templates\n templateName = 'classes/users/edit/contact-information';\n\n /**\n * Route id for the add contact address route.\n */\n abstract userAddContactAddressRoute: number;\n\n beforeModel(transition: Transition): void {\n const { contact_address, contactType } = this.paramsFor(this.routeName) as RouteParams;\n\n // Is there no contact address OR is the contact address 'new' AND there is no contact type?\n if (isEmpty(contact_address) || (contact_address === 'new' && isEmpty(contactType))) {\n // URL is missing required information so we need to redirect to the add contact address route.\n this.navigation.replaceWithRouteId(\n this.userAddContactAddressRoute,\n (this.paramsFor(transition.to!.parent!.name) as { id_user: string }).id_user\n );\n }\n }\n\n model(\n params: RouteParams,\n transition: Transition\n ): T & {\n contactAddress: Promise;\n } {\n const model = this.modelFor(transition.to!.parent!.name) as T,\n id = params.contact_address;\n\n return {\n ...model,\n contactAddress: Promise.resolve(model.user).then((user) => {\n if (id === 'new') {\n return this.store.createRecord(`users/${params.contactType}-address`, {\n user\n });\n }\n\n return user!.getContactAddress(id);\n })\n };\n }\n\n async rollbackModelOnTransition(): Promise {\n const contactAddress = await this.currentModel.contactAddress;\n if (!contactAddress.isSaving) {\n if (get(contactAddress, 'isNew')) {\n contactAddress.unloadRecord();\n return;\n }\n\n if (get(contactAddress, 'hasDirtyAttributes')) {\n contactAddress?.rollbackAttributes();\n }\n }\n }\n}\n","import { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { isTransitionExitingUserCreationProcess } from 'customer-site/classes/users/edit/base-user-edit-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Transition from '@ember/routing/transition';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * The base route for user edit device-access sub-routes.\n */\nexport default class BaseDeviceAccessRoute<\n T extends { deviceAccess?: Promise }\n> extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n\n declare currentModel: T;\n\n async rollbackModelOnTransition() {\n const deviceAccess = await this.currentModel.deviceAccess;\n if (!deviceAccess) {\n return;\n }\n\n if (!isDestroyed(deviceAccess) && !deviceAccess.isCreationFlow) {\n deviceAccess?.rollback();\n return;\n }\n\n const accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary;\n if (!isDestroyed(accessPointCollectionsSummary)) {\n accessPointCollectionsSummary?.rollback();\n }\n }\n\n @action\n async willTransition(transition: Transition): Promise {\n const deviceAccess = await this.currentModel.deviceAccess;\n if (!deviceAccess) {\n return;\n }\n\n // If we are transitioning away from the user creation flow, show the end user a warning message\n // to explain their changes will be rolled back.\n if (isTransitionExitingUserCreationProcess(!!deviceAccess?.isCreationFlow, transition.to.name)) {\n const user = await deviceAccess?.user;\n\n this.notificationManager.addError(\n this.intl.t('enterprise.users.edit.device-access.exitedPointCentralUserCreationProcess', {\n userFullName: user.firstName + ' ' + user.lastName\n })\n );\n\n // Delete any contact addresses that end-user may have added on the add contact info page.\n const contactAddresses = await user.contactAddresses;\n contactAddresses.forEach((address) => {\n address.destroyRecord();\n });\n\n // End the creation flow so the device access changes are rolled back.\n deviceAccess.set('isCreationFlow', false);\n }\n\n // Clear out any other unnecessary deviceAccess properties that are used during editing a user's access.\n deviceAccess.setProperties({\n accessControlUser: undefined,\n accessControlGroupId: undefined\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let \\'components.modals.access-control.five-button-duplicate\\' as |tcPath|}}\\n \\n
\\n \\n

{{@model.errorMessage}}

\\n
\\n \\n{{/let}}\\n\\n\",{ moduleName: \"customer-site/components/modals/access-control/five-button-duplicate/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface FiveButtonDuplicateModalSignature {\n Args: {\n model: {\n errorMessage: string;\n };\n };\n}\n\nconst FiveButtonDuplicateModal = templateOnlyComponent();\nexport default FiveButtonDuplicateModal;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n FiveButtonDuplicateModal: typeof FiveButtonDuplicateModal;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport Controller from '@ember/controller';\nimport { computed, action, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport FiveButtonDuplicateModal from 'customer-site/components/modals/access-control/five-button-duplicate/index';\nimport { deleteUser } from 'customer-site/components/users/list/base-user-item/index';\nimport AccessCardCredential from 'customer-site/models/access-control/credentials/access-card-credential';\nimport PinCodeCredential from 'customer-site/models/access-control/credentials/pin-code-credential';\n\n// region Constants\n\n/**\n * Addresses that we want to detect errors for.\n *\n * @type {string[]}\n *\n * @static\n * @memberof classes.users.edit.index.Controller\n */\nexport const ADDRESS_TYPES = ['voiceAddresses', 'mobileAddresses', 'emailAddresses', 'pushDeviceAddresses'];\n\n// endregion\n\n// region Private Methods\n\n/**\n * This shows the error message for 5-button duplicates.\n *\n * @param {Object} error\n * @param {services.Modals} [modals]\n *\n * @memberof classes.users.edit.index.Controller\n *\n * @returns {boolean}\n */\nfunction processFiveButtonDuplicateError(error, modals) {\n const errorMessage = (error.data || {}).fiveButtonDuplicate;\n if (modals && errorMessage) {\n modals.showModal(FiveButtonDuplicateModal, {\n errorMessage\n });\n }\n\n return !!errorMessage;\n}\n\n/**\n * Saves the user model.\n *\n * @param {models.users.BaseUser} user - The user model we are attempting to save.\n * @param {service.modals} [modals]\n * @param {service.NotificationManager} [notificationManager]\n *\n * @returns {Promise} - The save() method promise that is linked to button.\n *\n * @static\n * @memberof classes.users.edit.index.Controller\n */\nexport const saveUserModel = function (user, modals, notificationManager) {\n return user.save().catch((response) => {\n (response.errors || [])\n .filter((error) => error.source && error.source.pointer)\n .forEach((error) => {\n notificationManager?.addError(error.detail);\n processFiveButtonDuplicateError(error, modals);\n });\n\n // Bubble the rejection up to the button.\n return Promise.reject(response);\n });\n};\n\n// endregion\n\n/**\n *\n */\nexport default class BaseUsersEditIndexController extends Controller {\n // region Services\n\n @service contextManager;\n @service modals;\n @service notificationManager;\n @service intl;\n\n // endregion\n\n /**\n * The map of route Ids for user editing.\n *\n * @type {Object|undefined}\n * @static\n */\n routeMap;\n\n /**\n * Route for editing a user's contact information.\n *\n * @type {Number|undefined}\n */\n userEditContactInformationRoute;\n\n /**\n * Route for adding a contact to a user's contact information.\n *\n * @type {Number|undefined}\n */\n userAddContactAddressRoute;\n\n /**\n * Route for linking a login to a user.\n *\n * @type {Number|undefined}\n */\n userLinkLoginRoute;\n\n /** @ignore */\n @alias('model.user')\n user;\n\n @alias('resolvedModel.permissions')\n permissions;\n\n /**\n * Should the mobile credential modal be displayed when the page is loaded?\n * @type {boolean}\n */\n @tracked mobileCredentialModalOnLoad = false;\n\n /**\n * Determines if this user can be deleted from the system.\n *\n * @function\n * @returns {Promise}\n */\n @computed('user.canBeDeleted')\n get canBeDeleted() {\n return (async () => {\n const user = await this.user;\n return user && !isDestroyed(user) && user.canBeDeleted;\n })();\n }\n\n /**\n * Indicates whether the facial recognition status should be visible.\n *\n * @returns {Promise}\n */\n @computed('user.{isSmrfSupported,smrfStatus.images.[]}', 'model.systemConfig.smrfOptIn')\n get isSmrfVisible() {\n return (async () => {\n const user = await this.user;\n const systemConfig = await this.model.systemConfig;\n if (!user || !systemConfig?.smrfOptIn) {\n return false;\n }\n\n const smrfStatus = await user.smrfStatus;\n // Has the user opted into SMRF program AND is smrf supported AND is there at least one smrf image (accepted or not)?\n const userHasSmrfImages = smrfStatus?.hasMany('images').ids().length > 0;\n return !!(user.isSmrfSupported && userHasSmrfImages);\n })();\n }\n\n /**\n * Should the user type option be shown?\n * For PointCentral, if there's one available type, show the user type button, but it will be read only.\n *\n * @returns {Promise}\n */\n @computed('model.user.deviceAccess.availableUserTypes.length')\n get showUserTypeDrillThrough() {\n return (async () => {\n const user = await this.model.user;\n const {\n contextManager: {\n isEnterprise,\n identityModel: { isPointCentral }\n }\n } = this;\n\n const deviceAccess = await user.deviceAccess;\n\n if (!deviceAccess || (isEnterprise && !isPointCentral)) {\n return false;\n }\n\n return deviceAccess.availableUserTypes?.length > 1 && !isPointCentral;\n })();\n }\n\n /**\n * The text to display for the currently selected user type.\n *\n * @returns {Promise}\n */\n @computed('model.user.deviceAccess.userType')\n get currentUserType() {\n return (async () => {\n const deviceAccess = (await this.model.user).deviceAccess;\n const availableUserTypesForUser = deviceAccess?.get('availableUserTypesForUser') ?? [];\n if (isEmpty(availableUserTypesForUser)) {\n return undefined;\n }\n\n const searchVal = deviceAccess?.get('userType');\n\n return availableUserTypesForUser.find((item) => get(item, 'id') === searchVal)?.name;\n })();\n }\n\n /**\n * Determine if the user being viewed is linked to the current login\n *\n * @returns {Promise}\n */\n get isCurrentLoginLinkedToThisUser() {\n return (async () => {\n // gate this functionality to just 24413\n if (this.contextManager.identityModel.canViewPeopleUi) {\n const user = await this.user;\n return user?.loginId?.toString() === this.contextManager.identityModel.profile.id;\n }\n\n return true;\n })();\n }\n\n // region Actions\n\n /**\n * Function to allow mobile credential modal shown on load, called from mobile credential modal\n * when transitioning to edit contact info route\n */\n @action setMobileModalOnLoadPropertyTrue() {\n this.mobileCredentialModalOnLoad = true;\n }\n\n /**\n * Prompts for confirmation and then deletes the user.\n */\n @action\n async deleteUser(user, permissions) {\n deleteUser(await user, this.intl, this.modals, this.notificationManager, await permissions, async () => {\n this.confirmedTransition = true;\n\n // Sync the users permissions because information about the duress users may have changed.\n await this.syncUserPermissions(await permissions);\n this.contextManager.transitionToPreviousRoute();\n });\n }\n\n /**\n * Delete a credential and remove it from this user.\n *\n * @param {models.access-control.credentials.BaseCredential} credential - The credential model to delete and remove from this user.\n */\n @action\n async deleteCredential(credential) {\n try {\n const user = await this.user;\n\n let credentialCode = this.getCredentialCode(user, credential);\n\n credential.set('user', undefined);\n await saveUserModel(user, this.modals);\n\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.credentialDeleted', { credentialCode })\n );\n return true;\n } catch (e) {\n // Just rollback; the validation/processing error will be displayed to the user.\n credential.set('user', await this.user);\n return false;\n }\n }\n\n /**\n * Add a new credential to the user and save the changes.\n *\n * @param {models.access-control.credentials.BaseCredential} credential - The credential model to add to this user.\n */\n @action\n async addCredential(credential) {\n try {\n const user = await this.user;\n\n if (!user) {\n return false;\n }\n\n credential.set('user', user);\n await saveUserModel(user, this.modals);\n\n // NOTE: We have to delete the new credential after saving the user because the process\n // of saving the user will have created a new credential identical to this new credential.\n credential.deleteRecord();\n\n let credentialCode = this.getCredentialCode(user, credential);\n\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.credentialAdded', { credentialCode })\n );\n return true;\n } catch (e) {\n // Just rollback; the validation/processing error will be displayed to the user.\n credential.set('user', undefined);\n credential.deleteRecord();\n return false;\n }\n }\n\n /**\n * \"Edit\" a credential by deleting the old model and saving the new model.\n *\n * @param {models.access-control.credentials.BaseCredential} oldCredential - The access card model to add to this user.\n * @param {models.access-control.credentials.BaseCredential} newCredential - The access card model to add to this user.\n */\n @action\n async editCredential(oldCredential, newCredential) {\n try {\n const user = await this.user;\n\n let credentialCode = this.getCredentialCode(user, newCredential);\n\n // Set the user on the new credential and remove it from the old credential\n // so that the UI shows the old credential being replaced with the new one.\n oldCredential.set('user', undefined);\n newCredential.set('user', user);\n\n await saveUserModel(user, this.modals);\n\n // NOTE: We have to delete the new credential after saving the user because the process\n // of saving the user will have created a new credential identical to this new credential.\n newCredential.deleteRecord();\n\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.credentialChanged', { credentialCode })\n );\n return true;\n } catch (e) {\n // We need to rollback any possible changes.\n newCredential.deleteRecord();\n oldCredential.set('user', await this.user);\n\n return false;\n }\n }\n\n /**\n * Gets the credential code for the provided credential and user\n *\n * @param {User} user\n * @param {BaseCredential} credential\n * @returns the credential code\n */\n getCredentialCode(user, credential) {\n // If it's a PointCentral pin, we generate and reserve the pin when the user is saved\n // and get the pin from the user instead of the passed in credential, which would have an empty code\n if (credential instanceof AccessCardCredential) {\n return credential.cardSerial;\n } else if (credential instanceof PinCodeCredential) {\n return credential.pinCode;\n }\n\n return user.pinCodes.find((item) => item.isPointCentral === true)?.pinCode;\n }\n\n /**\n * Updates the permissions record by reloading it from the server.\n */\n @action\n async syncUserPermissions(permissions) {\n return permissions.reload();\n }\n\n // endregion\n}\n\n/**\n * @typedef {{\n * icon: String,\n * title: String,\n * description: String,\n * css: String,\n * route: number\n * }} AccessItemType\n *\n * @property {String} icon - The icon to be used for the item.\n * @property {String} title - The title of the item.\n * @property {String} description - The description of the item.\n * @property {String} css - The class names to be added to the item.\n * @property {String} route - The route id to go to when the item is activated.\n *\n * @memberof BaseUsersEditIndexController\n */\n","import { get } from '@ember/object';\nimport AdcBaseRoute from '../../../base-route';\n\nimport type { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport type User from 'customer-site/models/users/user';\n\nexport interface LanguageModel {\n user: Promise;\n availableLocaleOptions: BinaryListItem[];\n}\n\n/**\n * @classdesc\n *\n * The route for editing user-information.\n *\n */\nexport default class BaseUsersLanguageRoute extends AdcBaseRoute {\n declare currentModel: LanguageModel;\n declare userEditRouteName: string;\n\n /** @override */\n async rollbackModelOnTransition(): Promise {\n const user = await this.currentModel.user;\n\n if (get(user, 'hasDirtyAttributes') && !user.isSaving) {\n user.rollbackAttributes();\n }\n }\n}\n","import BaseEditUserController from 'customer-site/classes/users/edit/base-user-edit-controller';\n\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type { UserEditModel } from '../base-user-edit-route';\n\n/**\n * @classDesc\n * Controller for selecting a login id to link to.\n */\nexport default abstract class LinkLoginBaseController extends BaseEditUserController {\n resolvedModel?: {\n user: User;\n permissions: UsersPermissionsCollectionModel;\n };\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type Transition from '@ember/routing/transition';\n\nexport type AvailableLoginsToLinkApiResponse = {\n availableLogins: Array<{\n loginName: string;\n loginId: number;\n }>;\n};\n\n/**\n * @classdesc\n * Route for managing the login linked to a user.\n */\nexport default class BaseEditUserLinkLoginRoute extends AdcBaseRoute {\n model(\n _params: never,\n transition: Transition\n ): T & {\n availableLoginsToLink: Promise;\n } {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const parentRoute = transition.to!.parent!.name,\n { id_user } = this.paramsFor(parentRoute) as { id_user: string };\n\n return {\n ...this.modelFor(parentRoute),\n availableLoginsToLink: this.ajax.apiRequestForValue(\n `users/users/${id_user}/getAvailableLoginsToLink`\n )\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n cancelEditPointCentralUser,\n handleRedirectAfterSaveOrCancelPointCentral\n} from 'customer-site/classes/helpers/pointcentral';\nimport { getNextRouteForCreation } from 'customer-site/classes/users/edit/base-user-edit-controller';\nimport { EmberUserEdit } from 'customer-site/enums/CustomerPageUrl';\nimport BaseEditUserController from '../base-user-edit-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type User from 'customer-site/models/users/user';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { UserEditModel } from '../base-user-edit-route';\n\n/**\n * @classdesc\n * The controller for adding new contact information during the user creation process.\n */\nexport default abstract class BaseNewUserAddContactInformationController<\n M extends UserEditModel\n> extends BaseEditUserController {\n @service declare intl: ADCIntlService;\n @service declare navigation: NavigationService;\n\n resolvedModel?: {\n user: User;\n permissions: Awaited;\n };\n\n /** @override */\n baseUserEditRoute = EmberUserEdit;\n\n /**\n * Should we open the Send Welcome Email error tool tip?\n */\n @tracked\n openSendWelcomeEmailErrorToolTip = false;\n\n /**\n * Should we open the Send Welcome text error tool tip?\n */\n @tracked\n openSendWelcomeTextErrorToolTip = false;\n\n /** @override */\n @action\n async saveUser(user: User): Promise {\n // Update error message state.\n Object.assign(this, {\n openSendWelcomeEmailErrorToolTip: user.shouldSendWelcomeEmailByDefault && user.emailAddresses.length === 0,\n openSendWelcomeTextErrorToolTip: user.shouldSendWelcomeTextByDefault && user.mobileAddresses.length === 0\n });\n\n if (this.openSendWelcomeEmailErrorToolTip || this.openSendWelcomeTextErrorToolTip) {\n // Do not allow the end-user to continue the user creation process if they have not provided contact but have requested a welcome message.\n return Promise.reject();\n }\n\n try {\n // Save each contact address for this user that's been added.\n await Promise.all((await user.contactAddresses).invoke('save'));\n\n const { contextManager } = this;\n const deviceAccess = await user.deviceAccess;\n\n if (contextManager.isPointCentral && deviceAccess.isNotificationOnlyUser) {\n // If we have a PointCentral Notification Only User, the user creation flow should only include adding contact information so stop here.\n handleRedirectAfterSaveOrCancelPointCentral.call(\n this,\n deviceAccess,\n deviceAccess.userType,\n deviceAccess.temporarySchedule?.beginDateTime,\n deviceAccess.temporarySchedule?.endDateTime\n );\n } else {\n // Navigate to the next step in the user creation process.\n this.navigation.replaceWithRouteId(\n getNextRouteForCreation(contextManager, contextManager.isEnterprise),\n user.id\n );\n }\n } catch {\n return Promise.reject();\n }\n }\n\n /**\n * What to do when we press 'Cancel' on this page.\n */\n @action\n cancelEdit(): void {\n (async () => {\n const user = this.resolvedModel?.user,\n deviceAccess = await user?.deviceAccess,\n contactAddresses = await user?.contactAddresses;\n\n cancelEditPointCentralUser.call(this, deviceAccess, () => contactAddresses?.invoke('destroyRecord'));\n })();\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/users/edit/new-user-add-contact-information': BaseNewUserAddContactInformationController;\n }\n}\n","import { get } from '@ember/object';\nimport BaseDeviceAccessRoute from 'customer-site/classes/users/edit/device-access/base-device-access-route';\n\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type User from 'customer-site/models/users/user';\n\ninterface RouteModel {\n user?: Promise;\n permissions: Promise;\n deviceAccess?: Promise;\n}\n\n/**\n * @classdesc\n * The base route for adding contact information to a user during the user creation process..\n */\nexport default abstract class Route extends BaseDeviceAccessRoute {\n abstract parentRoute: string;\n\n queryParams = {\n userType: {\n refreshModel: false\n }\n };\n\n model(): RouteModel {\n const { user, permissions } = this.modelFor(this.parentRoute) as T;\n\n return {\n user,\n permissions,\n deviceAccess: (async () => user && get(await user, 'deviceAccess'))()\n };\n }\n\n afterModel(model: RouteModel): void {\n const { userType } = this.paramsFor(this.routeName) as { userType?: string };\n if (userType !== undefined) {\n (async () => {\n const deviceAccess = await model.deviceAccess;\n if (deviceAccess) {\n deviceAccess[this.contextManager.isPointCentral ? 'pointCentralUserType' : 'userType'] = parseInt(\n userType,\n 10\n );\n }\n })();\n }\n }\n\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-shared-templates\n templateName = 'classes/users/edit/new-user-add-contact-information';\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\n/**\n * @classdesc\n *\n * Route for editing a single contact attribute.\n *\n */\nexport default class BaseUserAttributesEditRoute extends AdcBaseRoute {\n model({ id_attribute }) {\n return Object.assign(\n {\n userAttributeFieldId: id_attribute\n },\n this.modelFor(this.userAttributesRouteName)\n );\n }\n\n /** @override */\n async rollbackModelOnTransition() {\n const model = this.currentModel,\n attributeCollection = await model.userAttributeCollection;\n\n if (!attributeCollection?.isSaving) {\n attributeCollection.rollbackAttributes();\n }\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\n/**\n * @classdesc\n *\n * Route for user attributes.\n */\nexport default class BaseUserAttributesIndexRoute extends AdcBaseRoute {\n model() {\n return Object.assign(\n {\n editUserAttributeRouteId: this.editUserAttributeRouteId\n },\n this.modelFor(this.userEditRouteName)\n );\n }\n}\n","import { action, computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { StandardUser } from 'customer-site/enums/AccessPointUserType';\nimport User from 'customer-site/models/users/user';\nimport BaseEditUserController from '../base-user-edit-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseEditUserInformationRoute from './route';\n\n/**\n * @classdesc\n * The controller for editing the User Information section of a user model.\n */\nexport default abstract class BaseUserInformationController extends BaseEditUserController<\n U,\n ModelFrom>\n> {\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n selectedUserCodeType?: number;\n\n @computed('model.{availablePointCentralUserTypes.[],availableUserCodeTypes.[]}', 'contextManager.isPointCentral')\n get userTypes():\n | BaseUserInformationController['model']['availableUserCodeTypes']\n | BaseUserInformationController['model']['availablePointCentralUserTypes'] {\n const { model } = this;\n return this.contextManager.isPointCentral ? model.availablePointCentralUserTypes : model.availableUserCodeTypes;\n }\n\n /**\n * Call the base saveUser function, with the unassignedUserCode id in the parameters, if any is provided\n */\n @action\n saveUserWithUserCode(\n user: U,\n selectedUserCodeType?: string\n ): ReturnType>>['saveUser']> {\n this.selectedUserCodeType = selectedUserCodeType !== undefined ? parseInt(selectedUserCodeType, 10) : undefined;\n\n const { model } = this;\n return this.saveUser(user, model.userCode, model.deviceId);\n }\n\n // endregion\n\n protected async handleNewUserSetup(savedUser?: BaseUser): Promise {\n const { selectedUserCodeType, contextManager } = this;\n\n if (!(savedUser instanceof User) || selectedUserCodeType === undefined) {\n return;\n }\n\n const deviceAccess = await savedUser.deviceAccess;\n if (!deviceAccess) {\n return;\n }\n\n // During the user creation flow for PointCentral, we don't save device access until the end of the flow.\n if (!contextManager.isPointCentral) {\n set(deviceAccess, 'userType', selectedUserCodeType);\n await deviceAccess.save();\n } else {\n set(deviceAccess, 'pointCentralUserType', selectedUserCodeType);\n\n if (contextManager.isPointCentral) {\n set(deviceAccess, 'userType', StandardUser);\n deviceAccess.savePointCentralUserType();\n } else {\n set(deviceAccess, 'userType', selectedUserCodeType);\n }\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/users/edit/user-information': BaseUserInformationController;\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { General } from 'customer-site/enums/ContactUserType';\nimport { createRecordWithServerDefaults } from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type { UserEditModel } from '../base-user-edit-route';\n\ntype UserType = { id: string; name: string; description: string };\n\ntype ParentModel = UserEditModel & {\n user?: U | Promise;\n};\n\nexport type UserInfoRouteModel = M & {\n user?: U | Promise;\n availableUserCodeTypes?: Promise;\n availablePointCentralUserTypes?: Promise;\n userCode?: string;\n deviceId?: string;\n};\n\n/**\n * @classdesc\n * Abstract base route for editing user-information.\n */\nexport default abstract class BaseUsersEditInfoRoute<\n U extends BaseUser,\n M extends ParentModel = ParentModel\n> extends AdcBaseRoute {\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n queryParams = {\n userType: {\n refreshModel: false\n },\n userCode: {\n refreshModel: false\n },\n deviceId: {\n refreshModel: false\n }\n };\n\n // ensures that transition to previous route will skip this route.\n skipWhenTransitioningBack = true;\n\n abstract isAccessControl: boolean;\n\n get modelName(): 'accessControl/accessControlUser' | 'users/user' {\n return this.isAccessControl ? 'accessControl/accessControlUser' : 'users/user';\n }\n\n declare currentModel: UserInfoRouteModel;\n\n isAddNewUserRoute = false;\n\n /** @override */\n getRouteItemTitle(): string {\n return this.isAddNewUserRoute ? this.intl.t('users.edit.user-information.newUser') : super.getRouteItemTitle();\n }\n\n model(\n { userType, userCode, deviceId }: { userType?: string; userCode?: string; deviceId?: string },\n transition: Transition\n ): UserInfoRouteModel {\n const parentRoute = transition.to!.parent!.name,\n { id_user } = this.paramsFor(parentRoute) as { id_user: string },\n parentModel = this.modelFor(parentRoute) as M;\n\n if (!(this.isAddNewUserRoute = this.skipWhenTransitioningBack = id_user === 'new')) {\n return parentModel;\n }\n\n const fnGetDeviceAccess = (key: string) =>\n this.ajax.apiRequestForValue(`users/access/deviceAccesses/${key}`);\n\n return {\n ...parentModel,\n userCode,\n deviceId,\n user: createRecordWithServerDefaults(\n this.ajax,\n this.store,\n this.modelName,\n { userType: userType ? parseInt(userType, 10) : General },\n undefined,\n {\n pinCodes: [],\n accessCards: []\n } as unknown as Partial\n ),\n availableUserCodeTypes: fnGetDeviceAccess('getAvailableUserCodeTypes'),\n availablePointCentralUserTypes: fnGetDeviceAccess('getAvailablePointCentralUserTypes')\n };\n }\n\n async rollbackModelOnTransition(): Promise {\n const user = await this.currentModel.user;\n\n if (user && !user.isSaving) {\n if (get(user, 'isNew')) {\n this.store.unloadRecord(user);\n } else if (get(user, 'hasDirtyAttributes')) {\n user.rollbackAttributes();\n }\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { A } from '@ember/array';\nimport Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { General } from 'customer-site/enums/ContactUserType';\n\nimport type { TEmberAjaxError } from '@adc/ajax/services/adc-ajax';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type PermissionsCollection from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type { task } from 'ember-concurrency';\n\nexport type UserQuery = User[] & { meta: { totalCount: number } };\n\n/**\n * How many users should we load at once.\n */\nexport const USERS_BATCH_SIZE = 25;\n\nexport default abstract class BaseUsersIndexController<\n M extends { permissions: Promise }\n> extends Controller {\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n declare model: M;\n\n abstract routeMap: {\n userEdit: number;\n userEditNotSupported: number;\n editUserInformation: number;\n };\n\n /**\n * Determines if the user has access to the Users Page Bulk Actions Beta.\n */\n @reads('contextManager.identityModel.hasUsersPageBulkActionsBeta')\n declare hasUsersPageBulkActionsBeta: boolean;\n\n /**\n * This array keeps track of all the users in the list.\n */\n @tracked users = A([]);\n\n /**\n * Total number of users (not just the ones currently loaded).\n */\n @tracked usersCount?: number;\n\n /**\n * Determines if the user clicked on the bulk actions button.\n */\n @tracked usersPageBulkActionsMode = false;\n\n /**\n * Whether the user codes should be visible or not.\n */\n @tracked hideUserCodes = true;\n\n /**\n * Whether the panel slot numbers should be visible or not.\n */\n @tracked hidePanelSlotNumbers = true;\n\n /**\n * This helps the UI decide whether or not to show a checkbox for each user.\n */\n get displayOrHideCheckbox(): string {\n return this.usersPageBulkActionsMode ? 'show-bulk-actions' : 'hide-bulk-actions';\n }\n\n get bulkUsers(): User[] {\n if (!this.usersPageBulkActionsMode) {\n return [];\n }\n\n return this.users.filter((u) => u.canBeDeleted);\n }\n\n /**\n * Clears the selection state for all users.\n */\n protected clearUserSelections(): void {\n this.users.forEach((u) => (u.isSelected = false));\n }\n\n /**\n * Clears all cached users and optionally reloads the first batch.\n */\n clearUserData(reloadUsers = true): void {\n Object.assign(this, {\n users: A([]),\n usersCount: undefined\n });\n\n if (reloadUsers) {\n this.loadMoreUsers.perform();\n }\n }\n\n /**\n * Task for loading users.\n */\n abstract loadMoreUsers: ReturnType;\n\n /**\n * Adds newly loaded users to the users collection and updates the users count.\n */\n addLoadedUsers(users: UserQuery): void {\n this.users.pushObjects(users.slice());\n this.usersCount = users.meta.totalCount;\n }\n\n /**\n * Transitions the app to the view for adding new user.\n */\n @action\n addNewUser(): void {\n this.navigation.transitionToRouteId(this.routeMap.editUserInformation, 'new', {\n queryParams: {\n userType: General\n }\n });\n }\n\n /**\n * Called when the scrollable list reaches the end of the loaded users.\n */\n @action lastReached(): void {\n if ((this.usersCount ?? 0) > this.users.length) {\n this.loadMoreUsers.perform();\n }\n }\n\n /**\n * Enters bulk editing mode.\n */\n @action openBulkActions(): void {\n this.usersPageBulkActionsMode = true;\n }\n\n /**\n * Exist bulk editing mode.\n */\n @action closeBulkActions(): void {\n this.usersPageBulkActionsMode = false;\n this.clearUserSelections();\n }\n\n /**\n * Toggles bulk editing mode.\n */\n toggleBulkEditMode(): void {\n if (this.usersPageBulkActionsMode) {\n this.closeBulkActions();\n } else {\n this.openBulkActions();\n }\n }\n\n /**\n * This method helps us add and remove users from the array of selected users and the array of unselected users.\n */\n @action\n selectUserAction(user: User): void {\n user.isSelected = !user.isSelected;\n }\n\n @action async bulkDelete(userIds: string[]): Promise {\n // Send the list of user IDs to the backend for deletion\n const numberOfSuccessfullyDeletedUsers = (\n await this.ajax.apiRequestForValue<{ length: number }>(\n 'users/users/userBulkDelete',\n undefined,\n userIds,\n 'POST'\n )\n ).length;\n\n // Refresh the list so the deleted users no longer show up in the list of users\n this.clearUserData();\n\n return numberOfSuccessfullyDeletedUsers;\n }\n\n @action async resendCodes(userIds: string[]): Promise {\n try {\n await this.ajax.apiRequest('users/access/deviceAccesses/userBulkResend', undefined, userIds, 'POST');\n\n this.closeBulkActions();\n this.clearUserData();\n\n return undefined;\n } catch (error) {\n return error;\n }\n }\n\n /**\n * Called after a user is deleted to reset users and permissions.\n */\n @action\n async afterUserDeleted(userId: string): Promise {\n // Update users collection and count.\n this.users = A(this.users.filter((user) => user.id != userId));\n this.usersCount = (this.usersCount ?? 1) - 1;\n\n // Reload the users permissions because information about the duress users may have changed.\n await (await this.model.permissions).reload();\n }\n\n /**\n * Toggles the provided property.\n */\n protected toggleUsersProperty(property: 'hideUserCodes' | 'hidePanelSlotNumbers'): void {\n this[property] = !this[property];\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'classes/users/index': BaseUsersIndexController<{ permissions: Promise }>;\n }\n}\n","import { set } from '@ember/object';\n\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type User from 'customer-site/models/users/user';\nimport type UserAttributeCollection from 'customer-site/models/users/user-attributes/user-attribute-collection';\n\n/**\n * A Set subclass which will allow us to avoid duplicate contact addresses on preview user\n */\nclass UniqueContactAddressesSet extends Set {\n constructor(values: ContactAddress[]) {\n super(values);\n\n const addresses: string[] = [];\n for (const value of this) {\n if (addresses.includes(value.address)) {\n this.delete(value);\n } else {\n addresses.push(value.address);\n }\n }\n }\n}\n\nexport default class MergePreviewManager {\n /**\n * Superficially copies the appropriate model properties for residential and enterprise users Merge Preview\n *\n */\n setPreviewAccessControlUserProperties(sourceUser: AccessControlUser, targetUser: AccessControlUser): void {\n this.setPreviewLogin(sourceUser, targetUser);\n this.setPreviewContactAddresses(sourceUser, targetUser);\n this.setPreviewAccessPlans(sourceUser, targetUser);\n this.setPreviewLanguage(sourceUser, targetUser);\n this.setPreviewAccessAC(sourceUser, targetUser);\n this.setPreviewActiveDirectoryFlag(sourceUser, targetUser);\n }\n\n /**\n * Superficially copies the appropriate model properties for residential users Merge Preview\n *\n */\n setPreviewUserProperties(sourceUser: User, targetUser: User): void {\n this.setPreviewDeviceAccess(sourceUser, targetUser);\n this.setPreviewLogin(sourceUser, targetUser);\n this.setPreviewContactAddresses(sourceUser, targetUser);\n }\n\n /**\n * Superficially copies the ATUs device access info for preview\n *\n */\n async setPreviewDeviceAccess(sourceUser: User, targetUser: User): Promise {\n const previewDeviceAccessModel = (await sourceUser.deviceAccess).hasNoDeviceAccess\n ? targetUser.deviceAccess\n : sourceUser.deviceAccess;\n\n set(targetUser, 'deviceAccess', previewDeviceAccessModel);\n }\n\n /**\n * Superficially copies the appropriate linked login for preview\n *\n */\n setPreviewLogin(sourceUser: User | AccessControlUser, targetUser: User | AccessControlUser): void {\n const previewLoginId = sourceUser.loginId ?? targetUser.loginId;\n\n set(targetUser, 'loginId', previewLoginId);\n }\n\n /**\n * Superficially copies the union of the ssu and stu's contact addresses for preview\n *\n */\n async setPreviewContactAddresses(\n sourceUser: User | AccessControlUser,\n targetUser: User | AccessControlUser\n ): Promise {\n const cachedTargetEmailAddresses = await targetUser.emailAddresses;\n const cachedSourceEmailAddresses = await sourceUser.emailAddresses;\n\n targetUser.emailAddresses.setObjects([\n ...new UniqueContactAddressesSet([\n ...cachedTargetEmailAddresses.toArray(),\n ...cachedSourceEmailAddresses.toArray()\n ])\n ]);\n\n const cachedTargetMobileAddresses = await targetUser.mobileAddresses;\n const cachedSourceMobileAddresses = await sourceUser.mobileAddresses;\n\n targetUser.mobileAddresses.setObjects([\n ...new UniqueContactAddressesSet([\n ...cachedTargetMobileAddresses.toArray(),\n ...cachedSourceMobileAddresses.toArray()\n ])\n ]);\n }\n\n /**\n * Superficially copies any access plans for preview\n *\n */\n async setPreviewAccessPlans(sourceUser: AccessControlUser, targetUser: AccessControlUser): Promise {\n const previewAccessPlansModel =\n (await sourceUser.accessPlans.length) > 0 ? sourceUser.accessPlans : targetUser.accessPlans;\n\n targetUser.setProperties({\n accessPlans: previewAccessPlansModel,\n showAccessPlanScopeName: sourceUser.showAccessPlanScopeName || targetUser.showAccessPlanScopeName\n });\n }\n\n /**\n * Superficially copies the ssu's language preference for preview\n *\n */\n setPreviewLanguage(sourceUser: User | AccessControlUser, targetUser: User | AccessControlUser): void {\n set(targetUser, 'localeId', sourceUser.localeId);\n }\n\n /**\n * Superficially copies a number of Access Control properties for preview including:\n * pin codes, access period, user groups, anti-passback exception and extended door unlock values\n *\n */\n setPreviewAccessAC(sourceUser: AccessControlUser, targetUser: AccessControlUser): void {\n // Pin codes\n const atu = sourceUser.pinCodes.length > 0 ? sourceUser : targetUser;\n const previewPinCodes = atu.pinCodes;\n\n // Pin Codes, Access Period, User Groups, Anti-Passback Exemption, and Extended Door Unlock\n targetUser.setProperties({\n pinCodes: previewPinCodes,\n hasStartDate: atu.hasStartDate,\n startDate: atu.startDate,\n hasEndDate: atu.hasEndDate,\n endDate: atu.endDate,\n accessGroupId: atu.accessGroupId,\n apbExemptFlag: sourceUser.apbExemptFlag || targetUser.apbExemptFlag,\n adaFlag: sourceUser.adaFlag || targetUser.adaFlag\n });\n }\n\n /**\n * Superficially copies the union of all user attributes from ssu and stu with priority for stu.\n *\n */\n setPreviewUserAttributes(\n sourceUserAttributes: UserAttributeCollection,\n targetUserAttributes: UserAttributeCollection\n ): void {\n set(targetUserAttributes, 'attributeValues', {\n ...sourceUserAttributes.attributeValues,\n ...targetUserAttributes.attributeValues\n });\n }\n\n /**\n * Superficially sets active directory flag for preview\n *\n */\n setPreviewActiveDirectoryFlag(sourceUser: AccessControlUser, targetUser: AccessControlUser): void {\n set(targetUser, 'activeDirectoryFlag', sourceUser.activeDirectoryFlag || targetUser.activeDirectoryFlag);\n }\n}\n","import { isFullTransition } from 'customer-site/utils/ember';\nimport DateRange from 'customer-site/classes/date-range';\nimport ObjectSearchConfig from 'customer-site/classes/video/advanced-video-search/object-search-config';\nimport ObjectSearchParams from 'customer-site/classes/video/advanced-video-search/object-search-params';\nimport { NUM_SECONDS_IN_HOUR } from 'customer-site/utils/datetime';\nimport { GET } from '@adc/ajax/services/adc-ajax';\nimport { sentryWithScopeAndError } from '@adc/app-infrastructure/utils/sentry';\nimport addHours from 'date-fns/addHours';\nimport addMinutes from 'date-fns/addMinutes';\nimport setMilliseconds from 'date-fns/setMilliseconds';\nimport subHours from 'date-fns/subHours';\n\n/**\n * The default filter values for the shared query params.\n *\n * @type {{motionSensitivity: number, activitySensitivity: number, motionSearchDisabled: boolean, activitySearchDisabled: boolean, startDate: Date}}\n */\nexport const baseAdvancedSearchDefaultFilterValues = {\n motionSensitivity: 49,\n activitySensitivity: 5,\n motionSearchDisabled: true,\n activitySearchDisabled: true,\n timeInterval: NUM_SECONDS_IN_HOUR,\n startDate: subHours(setMilliseconds(new Date(), 0), 1)\n};\n\n/**\n * Applies filters by doing a transition, and also resets scroll position for page\n *\n * @param {Record} filters The querystrings to apply\n */\nasync function applyFilters(filters) {\n const appContentWrapper = document.querySelector('#app-content-wrapper'),\n // if this function is called from the route the appContentWrapper likely wont be loaded yet\n scrollPosition = appContentWrapper?.scrollTop;\n\n await this.transitionTo(filters);\n\n if (scrollPosition) {\n // when filters are applied, doing a transitionTo will reset the scroll position. lets put it back where it was\n appContentWrapper.scrollTop = scrollPosition;\n }\n}\n\n/**\n * The common model hook to be shared between the single-system and enterprise routes.\n *\n * @param contextManager\n * @param store\n * @param params\n * @returns {{queryParams, applyFilters: (function(*): void), camera: *} | {}}\n */\nexport async function baseAdvancedSearchModelHook(contextManager, store, params, transition) {\n if (!isFullTransition(transition)) {\n return {\n ...this.currentModel,\n queryParams: {\n ...params\n }\n };\n }\n\n const cameraId = params.id_camera;\n\n try {\n // Fetch the camera.\n const camera = await store.findRecord('video/devices/camera', cameraId),\n svrVideoSource = camera.get('svrVideoSource'),\n selectedSystemOrGroupId = contextManager.getContextId(),\n videoStreamingPermissions = store.findRecord(\n 'video/permissions/videoStreamingPermissionsCollection',\n selectedSystemOrGroupId\n ),\n groupResolution = this.ajax.apiRequestForValue(\n 'video/videoSources/liveVideoSources/getDefaultResolution',\n undefined,\n null,\n GET\n );\n\n await Promise.all([groupResolution, svrVideoSource, videoStreamingPermissions]);\n\n const intervals = svrVideoSource.get('intervals'),\n svr = svrVideoSource.get('svr');\n\n await Promise.all([intervals, svr]);\n\n const earliestRecord = intervals.get('earliestRecord'),\n showMotionSearchOptions = svr.get('supportsAdvancedMotionSearch');\n\n // Set the properties on the model.\n return {\n camera,\n svr,\n earliestRecord,\n showMotionSearchOptions,\n videoStreamingPermissions,\n queryParams: {\n ...params\n },\n groupResolution,\n applyFilters: async (filters) => {\n await applyFilters.call(this, filters);\n }\n };\n } catch (ex) {\n sentryWithScopeAndError(ex);\n return {};\n }\n}\n\n/**\n * Given a set of dates, this method will aggregate them into a collection of date ranges\n * using the requested number of minutes as padding on either side,\n * combining date ranges that overlap into a single date range.\n * @param {Date[]} dates Represents a sorted list of dates to be aggregated into date ranges.\n * @param {number} activitySensitivity Represents the number of minutes to pad on either side of a date.\n * @returns {DateRange[]}\n */\nexport function aggregateDatesForSearch(dates, activitySensitivity) {\n const aggregatedDates = [];\n\n // If nothing was provided, then there's nothing to aggregate.\n if (!dates.length) {\n return aggregatedDates;\n }\n\n // Create a date range for the first date.\n let currentRange = new DateRange(\n addMinutes(dates[0], -activitySensitivity),\n addMinutes(dates[0], activitySensitivity)\n );\n\n // Iterate over the remaining dates.\n for (let i = 1; i < dates.length; i++) {\n // Create a new range for the new date.\n const nextRange = new DateRange(\n addMinutes(dates[i], -activitySensitivity),\n addMinutes(dates[i], activitySensitivity)\n );\n\n // Check if the new and old ranges overlap.\n if (currentRange.dateRangesOverlap(nextRange)) {\n // There's an overlap, so merge them and keep going.\n currentRange.mergeDateRanges(nextRange);\n } else {\n // There's no overlap, so save the previous value and set the new value as the current.\n aggregatedDates.push(currentRange);\n currentRange = nextRange;\n }\n }\n\n // Save the final value.\n aggregatedDates.push(currentRange);\n\n return aggregatedDates;\n}\n\n/**\n * Splits any date ranges that are longer than 24 hours.\n * @param {DateRange[]} dateRanges\n * @returns {DateRange[]}\n */\nexport function splitDateRanges(dateRanges) {\n const splitDates = [];\n\n dateRanges.forEach((dateRange) => {\n // Check to see if the date range is longer than 24 hours.\n while (dateRange.isFullDayOrGreater()) {\n // First, split the date range at the 24 hour mark.\n const newRange = dateRange.splitAtDate(addHours(dateRange.startTime, 24));\n\n // Add the first 24 hours to the list.\n splitDates.push(dateRange);\n\n // Set the current iteration to the remainder so we can try again.\n dateRange = newRange;\n }\n\n // The current range is not longer than 24 hours, so add it to the list.\n splitDates.push(dateRange);\n });\n\n // All 24+ hour blocks have been split up, and we now have a valid set of search ranges.\n return splitDates;\n}\n\n/**\n * Turns the selected filters into an ObjectSearchParams object.\n * @param {string} cameraId\n * @param {DateRange[]} dateRanges\n * @param {number} motionSensitivity An integer between 1-10 representing the desired motion sensitivity.\n * @param {Drawing} drawing\n * @returns {ObjectSearchParams[]}\n */\nexport function constructObjectSearchParams(cameraId, dateRanges, motionSensitivity, drawing) {\n // The search config settings are constant across all searches in this request, so create it first.\n const objectSearchConfig = new ObjectSearchConfig([drawing], motionSensitivity);\n\n // Create a search params object for each date range.\n return dateRanges.map((dateRange) => {\n return new ObjectSearchParams(cameraId, objectSearchConfig, dateRange);\n });\n}\n\n/**\n * Generates individual lines from the response stream\n * @param {Response} response\n */\nasync function* linesOfResponseStream(response) {\n const utf8Decoder = new TextDecoder('utf-8'),\n reader = response.body.getReader(),\n regex = /\\n/gm;\n\n let { value: chunk, done } = await reader.read(),\n startIndex = 0;\n\n chunk = chunk ? utf8Decoder.decode(chunk, { stream: true }) : '';\n\n while (true) {\n const result = regex.exec(chunk);\n\n if (!result) {\n if (done) {\n break;\n }\n\n const remainder = chunk.substr(startIndex);\n ({ value: chunk, done } = await reader.read());\n chunk = remainder + (chunk ? utf8Decoder.decode(chunk, { stream: true }) : '');\n startIndex = regex.lastIndex = 0;\n\n continue;\n }\n\n yield chunk.substring(startIndex, result.index);\n startIndex = regex.lastIndex;\n }\n\n if (startIndex < chunk.length) {\n // last line didn't end in a newline char\n yield chunk.substr(startIndex);\n }\n}\n\n/**\n * Submits a search request to OpenEye's ObjectSearch API.\n *\n * Returns true if the request finishes without being cancelled. (if it receives a truncated: false message)\n *\n * @param {AjaxService} ajax\n * @param {string} cameraId\n * @param {ObjectSearchParams} objectSearchParams\n * @param {(json: string) => HistoryEvent} parseResponse\n */\nexport async function submitObjectSearchRequest(ajax, cameraId, objectSearchParams, parseResponse) {\n const apiEndpoint = `video/advanced-video-search/${cameraId}?startTime=${objectSearchParams.startTime.toISOString()}&endTime=${objectSearchParams.endTime.toISOString()}`;\n const result = await ajax.apiRequest(apiEndpoint);\n\n // Payload to send down.\n const data = {\n cameraId: result.value['streamId'],\n startTime: result.value['startTime'],\n endTime: result.value['endTime'],\n osConfig: objectSearchParams.osConfig\n };\n\n const headers = new Headers();\n headers.set('Content-Type', 'application/json');\n\n // Use HTTP response stream to grab motion intervals as they arrive.\n const fetchResult = await fetch(result.value['uri'], {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(data)\n });\n\n if (!fetchResult || !fetchResult.body) {\n return;\n }\n\n let line;\n for await (line of linesOfResponseStream(fetchResult)) {\n parseResponse(line);\n }\n\n /**\n * We know that the request completed in its entirety without being cancelled if the last line of the response\n * stream contains the K,V pair `\"truncated\": false` in it.\n */\n return line?.includes('\"truncated\": false');\n}\n\n/**\n * Submits a cancellation request for an ongoing search to OpenEye's ObjectSearch API.\n * @param {AjaxService} ajax\n * @param {string} cameraId\n * @param {EnvSettingsService} envSettings\n */\n// eslint-disable-next-line no-unused-vars\nexport async function cancelObjectSearchRequest(ajax, cameraId, envSettings) {\n // for some reason this api fails to mock properly in endpoints.js, we can just skip running it in tests\n if (envSettings.isTestEnvironment()) {\n return;\n }\n\n await ajax.apiRequest(`api/video/advanced-video-search/${cameraId}`, null, null, 'DELETE');\n}\n","/**\n * Coordinates representing a single point that combine to define the shape of a mask.\n */\nimport type { Point } from 'customer-site/utils/math-methods';\n\nexport default class MotionMaskCoord {\n constructor(point: Point) {\n this.x = point.x;\n this.y = point.y;\n }\n\n /**\n * X coordinate.\n */\n x: number;\n\n /**\n * Y coordinate.\n */\n y: number;\n}\n","import MotionMaskCoord from 'customer-site/classes/video/advanced-video-search/motion-mask-coord';\nimport Shapes from 'customer-site/classes/video/advanced-video-search/shapes';\n\nimport type { Drawing } from 'customer-site/components/video/rules/draw-window/index';\nimport type { Point } from 'customer-site/utils/math-methods';\n\nexport default class MotionMask {\n constructor(drawings: Drawing[]) {\n this.shapes = drawings.map((drawing) => {\n const points = drawing.points.map((point: Point) => new MotionMaskCoord(point));\n return new Shapes('INCLUSION', points);\n });\n }\n\n /**\n * The shapes upon which the mask should apply.\n */\n shapes: Shapes[];\n}\n","import { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport BaseFilterManager from '../../helpers/filter-manager';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DropdownFilter from '../../helpers/filters/dropdown-filter';\n\n/**\n * Utility class for advanced video search filtering.\n */\nexport default class MotionSearchFilterManager extends BaseFilterManager {\n @service declare intl: ADCIntlService;\n\n // region Private helpers.\n\n /**\n * Helper function to fetch the requested translation.\n */\n private getText(key: string, tokens?: Record): string {\n return this.intl.t(`classes.video.advanced-video-search.${key}`, tokens);\n }\n\n /**\n * Returns a configuration object for a simple select filter.\n *\n * @param key The key for this filter. This is also used as the query parameters key.\n */\n private getDropdown(key: string): DropdownFilter {\n const text = this.getText(key);\n\n return this.getDropdownFilter(text, key, this.filterOptions[key], [this.queryParams[key]].compact(), false, {\n label: text\n });\n }\n\n // endregion\n\n @tracked\n activitySearchVisible: boolean;\n\n /**\n * A list of all the possible filter options for the motion sensitivity filter.\n */\n motionSensitivityFilterOptions: { name: string; value: number }[] = [\n this.getText('leastSensitive'),\n ...Array.from({ length: 8 }, (_, idx) => String(idx + 2)),\n this.getText('mostSensitive')\n ].map((name, idx) => {\n // Index 0 ('1 (Least Sensitive)') should map to a value of 80, and index 9 ('10 (Most Sensitive)') should map to a value of 10\n const value = Math.round(80 - 7.78 * idx);\n return { name, value: value };\n });\n\n /**\n * A list of all the possible options for the \"Within # min of selected events\" filter.\n */\n activitySensitivityFilterOptions: Array<{ name: string; value: number }> = [5, 15, 30, 60, 120].map((minutes) => {\n // Adjust the text for minutes/hours.\n const name =\n minutes < 60\n ? this.getText('withinMinutesOfActivity', { minutes })\n : this.getText('withinHoursOfActivity', { hours: minutes / 60 });\n\n // Create an object representing the options.\n return {\n name,\n value: minutes\n };\n });\n\n constructor(\n host: unknown,\n fnApplyFilter: (value: { queryParams: Record }) => void | undefined = () => {},\n stageFilterChanges = false,\n disabled = false,\n activitySearchVisible = false\n ) {\n super(host, fnApplyFilter, stageFilterChanges, disabled);\n\n this.activitySearchVisible = activitySearchVisible;\n\n // Set the filter options.\n this.filterOptions = {\n motionSensitivity: this.motionSensitivityFilterOptions,\n activitySensitivity: this.activitySensitivityFilterOptions\n };\n }\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues, freshData);\n\n const { activitySearchVisible } = this,\n motionSensitivityFilter = this.getDropdown('motionSensitivity'),\n activitySensitivityFilter = this.getDropdown('activitySensitivity');\n\n this.filters = [\n motionSensitivityFilter,\n activitySearchVisible ? activitySensitivityFilter : undefined\n ].compact();\n }\n\n /**\n * Sets the visibility of the \"Within # minutes of selected events\" filter.\n */\n async setActivitySearchVisibility(state: boolean): Promise {\n // Set the new visibility state.\n this.activitySearchVisible = state;\n\n // Refresh the filters.\n await this.updateFilters(this.queryParams, this.defaultFilterValues, true);\n }\n}\n","import MotionMask from 'customer-site/classes/video/advanced-video-search/motion-mask';\n\nimport type { Drawing } from 'customer-site/components/video/rules/draw-window/index';\n\nexport default class ObjectSearchConfig {\n constructor(drawings: Drawing[], sensitivityFilter = 41, sizeFilter = 51) {\n this.mask = new MotionMask(drawings);\n this.sensitivityfilter = sensitivityFilter;\n this.sizefilter = sizeFilter;\n }\n\n /**\n * Motion Sensitivity or value to use in search, default = 41.\n * This default value comes from OpenEye's documentation:\n * https://www.dropbox.com/s/u1j8vtlso1wf1nk/ApexADCv1.3.1.12_Yaml.zip?dl=0&file_subpath=%2FApexADCv1.3.1.12_Yaml%2Fapexapi.yaml\n */\n sensitivityfilter;\n\n /**\n * Noise Sensitivity value to use in search, default = 51.\n * This default value comes from OpenEye's documentation:\n * https://www.dropbox.com/s/u1j8vtlso1wf1nk/ApexADCv1.3.1.12_Yaml.zip?dl=0&file_subpath=%2FApexADCv1.3.1.12_Yaml%2Fapexapi.yaml\n */\n sizefilter;\n\n mask: MotionMask;\n}\n","import type DateRange from 'customer-site/classes/date-range';\nimport type ObjectSearchConfig from 'customer-site/classes/video/advanced-video-search/object-search-config';\n\nexport default class ObjectSearchParams {\n constructor(cameraId: string, osConfig: ObjectSearchConfig, dateRange: DateRange) {\n this.cameraId = cameraId;\n this.osConfig = osConfig;\n this.startTime = dateRange.startTime;\n this.endTime = dateRange.endTime;\n }\n\n /**\n * CameraID to use for the object search.\n */\n cameraId: string;\n\n /**\n * Configuration values for the object search.\n */\n osConfig: ObjectSearchConfig;\n\n /**\n * Search start time, as a unix timestamp.\n */\n startTime: Date;\n\n /**\n * Search end time, as a unix timestamp.\n */\n endTime: Date;\n}\n","import DateRange from 'customer-site/classes/date-range';\nimport { isValidDate } from 'customer-site/utils/datetime';\nimport { sentryWithScopeAndError } from '@adc/app-infrastructure/utils/sentry';\n\n/**\n * Represents one single result found from an ObjectSearch request.\n */\nexport default class ObjectSearchResult {\n constructor(json: string) {\n // Convert the JSON string into an object we can access.\n const baseObject = JSON.parse(json);\n\n // Save the parameters that don't need extra parsing.\n this.eventType = baseObject.eventType;\n this.sourceId = baseObject.sourceId;\n this.active = baseObject.active;\n this.cameraId = baseObject.cameraId;\n this.imageOffset = baseObject.imageOffset;\n\n // Parse the dates, which were received as microseconds since the epoch, into Date objects.\n // The dates are ticks, but we need to parse them down to milliseconds, so divide by 1000.\n const startTime = new Date(baseObject.startTime / 1000);\n const endTime = new Date(baseObject.endTime / 1000);\n\n if (!isValidDate(startTime) || !isValidDate(endTime)) {\n sentryWithScopeAndError('could not parse startTime and/or endTime', { startTime, endTime }, undefined);\n // Throwing in a nonsensical date so that the page is still functional\n this.dateRange = new DateRange(new Date(), new Date());\n } else {\n this.dateRange = new DateRange(startTime, endTime);\n }\n }\n\n /**\n * The classification of event type that OpenEye has given this event.\n */\n eventType: string;\n\n /**\n * The date range representing when the event happened.\n */\n dateRange: DateRange;\n\n /**\n * The GUID of the source device.\n */\n sourceId: string;\n\n /**\n * Whether the device is active.\n */\n active: boolean;\n\n /**\n * The GUID of the camera that recorded this event.\n */\n cameraId: string;\n\n /**\n * The duration delta, in seconds, that should be applied to an event time to get the best image of that event for display to the user.\n */\n imageOffset: number;\n}\n","import type MotionMaskCoord from 'customer-site/classes/video/advanced-video-search/motion-mask-coord';\n\nexport default class Shapes {\n constructor(maskType: 'INCLUSION' | 'EXCLUSION', points: MotionMaskCoord[]) {\n this.masktype = maskType;\n this.points = points;\n }\n\n /**\n * Defines the inclusivity of the mask.\n */\n masktype: 'INCLUSION' | 'EXCLUSION';\n\n /**\n * Array of coordinates that define the shape of the mask.\n */\n points: MotionMaskCoord[];\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n {{t \\'generic.filterCount\\' count=(if @hideCount 0 @filterCount)}}\\n \\n {{#if @filterCount}}\\n \\n {{/if}}\\n\",{ moduleName: \"customer-site/components/ui/filter-button/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface UiFilterButtonSignature {\n Element: HTMLDivElement;\n Args: {\n toggleFilters: VoidFunction;\n clearFilters: VoidFunction;\n filterCount?: number;\n hideCount?: boolean;\n };\n}\n\nconst UiFilterButton = templateOnlyComponent();\nexport default UiFilterButton;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::FilterButton': typeof UiFilterButton;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n \\n\\n \\n\\n \\n
\\n\\n \\n \\n\\n
\\n \\n \\n \\n
\\n
\\n\\n
\\n {{#each @filtersManager.filters as |filter|}}\\n {{#if (eq filter.filteringFieldName \\'cameras\\')}}\\n \\n {{/if}}\\n {{/each}}\\n\\n \\n\\n \\n\\n {{#if this.canViewClipUsageReports}}\\n \\n {{/if}}\\n\\n\\n {{#if (await this.contextManager.showPreferredTimezone)}}\\n {{#unless this.isMobile}}\\n \\n {{/unless}}\\n {{/if}}\\n\\n {{#unless this.isMobile}}\\n
\\n {{#if this.showTimezoneSelector}}\\n

{{t \\'generic.setPreferredTimezone\\'}}

\\n {{!-- @glint-expect-error Please convert this component to TS. --}}\\n \\n {{/if}}\\n
\\n {{/unless}}\\n\\n {{#if @isGalleryView}}\\n \\n {{/if}}\\n\\n
\\n \\n\\n \\n
\\n {{yield}}\\n
\\n\\n\",{ moduleName: \"customer-site/components/video/clips/main-toolbar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { or, reads } from '@ember/object/computed';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { EmberVideoClipsUsageReport } from 'customer-site/enums/CustomerPageUrl';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport type { MediaItem } from 'customer-site/classes/video/clips/helpers/clip-management';\nimport type { MediaEditor } from 'customer-site/classes/video/clips/helpers/clip-management';\nimport type ClipsFilterManager from 'customer-site/classes/video/clips/helpers/filter-manager';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type Navigation from 'customer-site/services/navigation';\n\ninterface VideoClipsMainToolbarSignature {\n Args: {\n /** All media within the page. */\n media: MediaItem[];\n /** The media editor for the filtered media. */\n editor: MediaEditor;\n /** Indicates the bulk action toolbar should be visible. */\n enableBulkActions: boolean;\n /** The filters manager. */\n filtersManager: ClipsFilterManager;\n /** Indicates gallery view mode is currently selected. */\n isGalleryView: boolean;\n /** Indicates media details are currently visible. */\n showMediaDetails: boolean;\n /** Toggle details visibility. */\n toggleDetails(): void;\n /** Updates bulk edit mode. */\n updateBulkActions(v: boolean): void;\n /** Updates the media view mode (list vs gallery). */\n updateViewMode(v?: boolean): void;\n };\n Blocks: {\n default: [];\n };\n}\n/**\n * @classdesc\n * Main toolbar for the saved video clips / gallery route.\n */\n@intlPath({ path: 'video/clips/main-toolbar' })\nexport default class VideoClipsMainToolbarComponent extends Component {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare media: ADCResponsiveMediaService;\n @service declare navigation: Navigation;\n\n /**\n * Indicates the filter panel should be visible.\n */\n @tracked filterOpen = false;\n\n /**\n * Indicates if the timezone selector should be shown.\n */\n @tracked showTimezoneSelector = false;\n\n /**\n * Is the viewing device mobile?\n */\n @or('media.isMobile', 'media.isTabletPortrait')\n declare isMobile: boolean;\n\n /**\n * The current bulk selection state.\n */\n @computed('args.media.@each.isSelected')\n get selectionStateInfo(): { state: boolean | 'mixed'; text: string } {\n const { media } = this.args,\n count = media.filterBy('isSelected').length,\n fnGetInfo = (state: boolean | 'mixed') => ({\n state,\n text: this.intl.t('generic.countSelected', { count })\n });\n\n if (count === 0) {\n return fnGetInfo(false);\n }\n\n return fnGetInfo(count === media.length ? true : 'mixed');\n }\n\n /**\n * Clears all applied filters.\n */\n @action clearFilters(): void {\n this.args.filtersManager.resetFilterValues({ page: 1 });\n }\n\n /**\n * Opens/closes the filters panel.\n *\n * @param isOpen if the filters panel is open\n */\n @action toggleFilters(isOpen: boolean): void {\n this.filterOpen = isOpen;\n }\n\n /**\n * Resets filter values back to current query parameter values and closes the filter panel.\n */\n @action cancelFilters(): void {\n this.args.filtersManager.resetCachedFilters();\n this.toggleFilters(false);\n }\n\n /**\n * Submits cached filter changes and closes the filter panel.\n */\n @action submitFilters(): void {\n // Close filter panel, then submit cached changes after delay (to improve animation).\n this.toggleFilters(false);\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n later(this, this.args.filtersManager.submitCachedFilterValues, 0);\n }\n\n /**\n * Immediately filters for the passed cameras.\n *\n * @param values the cameras to filter for\n */\n @action changeCamera(values: DropdownSelectItem[]): void {\n const { filtersManager } = this.args;\n filtersManager.camerasFilter.apply?.(values);\n filtersManager.submitCachedFilterValues();\n }\n\n /**\n * Called to toggle selection between all media and no media.\n */\n @action bulkSelectionChanged(evt: InputEvent & { target: HTMLInputElement }): void {\n this.args.media.rejectBy('isDeleted').setEach('isSelected', !!evt.target.checked);\n }\n\n /**\n * Whether the user has permission to view the clip usage reports.\n */\n @reads('contextManager.identityModel.canViewClipUsageReports')\n declare canViewClipUsageReports: boolean;\n\n /**\n * Navigates to the usage report page.\n */\n @action navigateToUsageReportPage(): void {\n this.navigation.transitionToRouteId(EmberVideoClipsUsageReport);\n }\n\n /**\n * Called when the user clicks outside the filters panel.\n */\n @action clickOutsideFilter(): void {\n if (this.filterOpen) {\n this.cancelFilters();\n }\n }\n\n /**\n * Toggle if the timezone selector is open\n */\n @action toggleTimezoneSelector(): void {\n this.showTimezoneSelector = !this.showTimezoneSelector;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::MainToolbar': typeof VideoClipsMainToolbarComponent;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport VideoClipsMainToolbar from 'customer-site/components/video/clips/main-toolbar/index';\nimport { SavedVideoClipsPageTour, ClipDetectionOtherTour } from '../../../enums/HelpTourType';\nimport { MediaItem, MediaEditor } from './helpers/clip-management';\nimport SavedClipsTour from './helpers/clips-tour';\nimport OtherDetectionTour from './helpers/other-detection-tour';\n\nconst viewModeCookieName = 'saved_clips_view',\n detailsCookieName = 'clip_details';\n\n/**\n * @classdesc\n * The base index route controller for displaying a paginated list of media.\n *\n * @class classes.video.clips.FilterVideoClipResultsController\n * @extends Ember.Controller\n */\nexport default class FilterVideoClipResultsController extends EmberController {\n @service contextManager;\n @service cookieManager;\n\n clipsToolbar = VideoClipsMainToolbar;\n\n // region Component state\n\n /**\n * Indicates media should be displayed grouped by day.\n *\n * @type {boolean}\n */\n @tracked isGalleryView =\n this.cookieManager.getEssentialCookie(viewModeCookieName) != null\n ? this.cookieManager.hasEssentialCookieTruthyValue(viewModeCookieName)\n : true;\n\n /**\n * Indicates media details should be visible.\n *\n * @type {boolean}\n */\n @tracked showMediaDetails = this.cookieManager.hasEssentialCookieTruthyValue(detailsCookieName);\n\n /**\n * Indicates that the bulk actions toolbar should be visible.\n *\n * @type {boolean}\n */\n @tracked enableBulkActions = false;\n\n /**\n * The resolved model used for this route.\n *\n * @type {{\n * permissions: models.video.permissions.SavedClipPermissions,\n * formats: models.video.DownloadFormat,\n * cameras: EmberArray,\n * media: EmberArray,\n * videoUsage: models.video.VideoUsage,\n * showPreferredTimezone: boolean,\n * mediaFromQueryParams: models.video.BaseMediaEvent\n * }}\n */\n resolvedModel;\n\n /**\n * Filter manager passed from route.\n *\n * @type {classes.video.clips.helpers.ClipsFilterManager}\n */\n filtersManager;\n\n /**\n * The passed media, converted to media items and sorted according to capture date.\n *\n * @returns {EmberArray}\n */\n @computed('resolvedModel.{clips.[],snapshotEvents.[]}')\n get sortedMedia() {\n const {\n clips = [],\n snapshotEvents = [],\n showPreferredTimezone = false,\n permissions,\n formats\n } = this.resolvedModel || {},\n clipsArray = clips.toArray(),\n media = [...clipsArray, ...snapshotEvents];\n\n return media\n .sortBy('timestamp')\n .reverse()\n .map((model) => new MediaItem(this, model, { showPreferredTimezone, permissions, formats }));\n }\n\n /**\n * The passed video event converted into a media item\n *\n * @returns {EmberArray}\n */\n @computed('resolvedModel.mediaFromQueryParams')\n get mediaFromQueryParams() {\n const { mediaFromQueryParams } = this.resolvedModel || {};\n if (!mediaFromQueryParams) {\n return null;\n }\n\n return new MediaItem(this, mediaFromQueryParams);\n }\n\n /**\n * The current selected media.\n *\n * @type {EmberArray}\n */\n @filterBy('sortedMedia', 'isSelected')\n selectedMedia;\n\n /**\n * The media editor for the selected media.\n *\n * @returns {MediaEditor}\n */\n @computed('selectedMedia.[]', 'resolvedModel.{permissions,formats}')\n get selectedMediaEditor() {\n const { permissions, formats, showPreferredTimezone } = this.resolvedModel || {};\n return new MediaEditor(\n this,\n this.selectedMedia.mapBy('model'),\n { permissions, formats, showPreferredTimezone },\n () => {}\n );\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Update the page size and go to new page showing the first items from previous pageSize.\n *\n * @param {number} pageSize The new page size value.\n */\n @action changePageSize(pageSize) {\n const { qp } = this.model,\n newPage = Math.floor((qp.page - 1) * (qp.pageSize / pageSize)) + 1;\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-deprecated-router-transition-methods\n this.transitionToRoute({\n queryParams: {\n pageSize,\n page: newPage\n }\n });\n }\n\n /**\n * Update the selected page.\n *\n * @param {number} page The new page value.\n */\n @action changePage(page) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-deprecated-router-transition-methods\n this.transitionToRoute({\n queryParams: { page }\n });\n }\n\n /**\n * Update the event id in the query params.\n *\n * @param {number} eventId The new media event id value.\n */\n @action changeEventId(eventId) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-deprecated-router-transition-methods\n this.transitionToRoute({\n queryParams: { eventId }\n });\n }\n\n /**\n * Toggle whether media details should be visible.\n */\n @action toggleDetails() {\n this.showMediaDetails = !this.showMediaDetails;\n\n this.cookieManager.setEssentialCookie(detailsCookieName, this.showMediaDetails.toString());\n }\n\n /**\n * Updates the view mode.\n *\n * @param {boolean} isGalleryView True indicates the view mode should be gallery.\n */\n @action updateViewMode(isGalleryView) {\n // Disable bulk editing.\n this.updateBulkActions(false);\n\n this.isGalleryView = isGalleryView;\n\n this.cookieManager.setEssentialCookie(viewModeCookieName, this.isGalleryView.toString());\n }\n\n /**\n * Updates the enableBulkActions property.\n *\n * @param {boolean} isEnabled\n */\n @action updateBulkActions(isEnabled) {\n this.enableBulkActions = isEnabled;\n\n if (!isEnabled) {\n // Clear all selected media.\n [...this.selectedMedia].setEach('isSelected', false);\n }\n }\n\n /**\n * Toggles selection of the passed media.\n *\n * @param {classes.video.clips.helpers.MediaItem} media\n */\n @action toggleMediaSelection(media) {\n media.isSelected = !media.isSelected;\n\n if (media.isSelected) {\n this.enableBulkActions = true;\n }\n }\n\n /**\n * Initiates the media tour, if appropriate.\n */\n @action mediaHasRendered() {\n const tourId = [SavedVideoClipsPageTour, ClipDetectionOtherTour].find((v) =>\n this.contextManager.identityModel.helpTours.includes(v)\n );\n if (tourId) {\n new {\n [SavedVideoClipsPageTour]: SavedClipsTour,\n [ClipDetectionOtherTour]: OtherDetectionTour\n }[tourId](this).start();\n }\n }\n\n // endregion\n}\n","import EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from '../../../utils/ember';\nimport {\n AnyUnfamiliarVehicle,\n Other,\n Person,\n AnyUnfamiliarFace,\n UnrecognizedPerson,\n Vehicle\n} from '../../../enums/SavedClipFilterOption';\nimport ClipsFilterManager, { isBitwiseFilterEnabled } from '../../video/clips/helpers/filter-manager';\nimport { triggerCookieName } from './filtering-controller';\n\n/**\n * Do the previously set familiar subject filter values differ from the current values?\n *\n * @param {Array} previouslySelectedSubjects Previously set familiar vehicle filter\n * @param {Array} currentlySelectedSubjects Currently set familiar vehicle filter\n * @returns true if the filter has been changed\n */\nfunction areFamiliarSubjectFiltersChanged(previouslySelectedSubjects, currentlySelectedSubjects) {\n return !(\n previouslySelectedSubjects.length === currentlySelectedSubjects.length &&\n previouslySelectedSubjects.every((subject) => currentlySelectedSubjects.includes(subject))\n );\n}\n\n/**\n * Handle the case where Familiar Vehicle options are selected in the familiarVehicles dropdown filter.\n *\n * @param {SavedClipFilterParamsType} newQueryParams Query params that are currently selected\n * @param {SavedClipFilterParamsType} oldQueryParams Query params that were selected before being saved\n */\nfunction handleVehicleFilters(newQueryParams, oldQueryParams) {\n // Remove other detection filters from the bitmask if any vehicle-related dropdown filters are newly selected\n if (\n newQueryParams.detectionFilters != oldQueryParams.detectionFilters ||\n newQueryParams.trigger != oldQueryParams.trigger\n ) {\n // If Vehicle was selected in the most recent update unselect all Familiar Vehicle options\n const vehicleSelected = isBitwiseFilterEnabled(newQueryParams.detectionFilters, Vehicle);\n\n if (vehicleSelected) {\n newQueryParams.familiarVehicles = [];\n }\n } else if (areFamiliarSubjectFiltersChanged(oldQueryParams.familiarVehicles, newQueryParams.familiarVehicles)) {\n newQueryParams.detectionFilters = 0;\n newQueryParams.trigger = 0;\n }\n\n /**\n * AnyUnfamiliarVehicle is available for selection in the familiar vehicle dropdown filter, but should be\n * applied to the detectionFilters bitmask filter. Remove it from the familiarVehicles and add it to detectionFilters\n */\n if (newQueryParams.familiarVehicles.includes(String(AnyUnfamiliarVehicle))) {\n newQueryParams.familiarVehicles = newQueryParams.familiarVehicles.filter(\n (i) => i !== String(AnyUnfamiliarVehicle)\n );\n newQueryParams.detectionFilters |= AnyUnfamiliarVehicle;\n } else {\n // If AnyUnfamiliarVehicle is not selected in the dropdown, remove it from detectionFilters\n newQueryParams.detectionFilters &= ~AnyUnfamiliarVehicle;\n }\n}\n\n/**\n * Handle the case where Familiar Face options are selected in the familiarFaces dropdown filter.\n *\n * @param {SavedClipFilterParamsType} newQueryParams Query params that are currently selected\n * @param {SavedClipFilterParamsType} oldQueryParams Query params that were selected before being saved\n */\nfunction handleFacesFilters(newQueryParams, oldQueryParams) {\n // Remove other detection filters from the bitmask if any face-related dropdown filters are newly selected\n if (\n newQueryParams.detectionFilters != oldQueryParams.detectionFilters ||\n newQueryParams.trigger != oldQueryParams.trigger\n ) {\n // If Face was selected in the most recent update unselect all Familiar Face options\n const faceSelected = isBitwiseFilterEnabled(newQueryParams.detectionFilters, Person);\n\n if (faceSelected) {\n newQueryParams.familiarFaces = [];\n }\n } else if (areFamiliarSubjectFiltersChanged(oldQueryParams.familiarFaces, newQueryParams.familiarFaces)) {\n newQueryParams.detectionFilters = 0;\n newQueryParams.trigger = 0;\n }\n\n /**\n * AnyUnfamiliarFace and UnrecognizedPerson is available for selection in the familiar face dropdown filter, but should be\n * applied to the detectionFilters bitmask filter. Remove it from the familiarFaces and add it to detectionFilters\n */\n const faceFilterTypes = [AnyUnfamiliarFace, UnrecognizedPerson];\n\n faceFilterTypes.forEach((personType) => {\n if (newQueryParams.familiarFaces.includes(String(personType))) {\n newQueryParams.familiarFaces = newQueryParams.familiarFaces.filter((i) => i !== String(personType));\n newQueryParams.detectionFilters |= personType;\n } else {\n newQueryParams.detectionFilters &= ~personType;\n }\n });\n}\n\n/**\n * @classdesc\n * The base index route for displaying a paginated list of saved video clips, grouped by day.\n *\n * @class classes.video.clips.FilterVideoClipResultsRoute\n * @extends Ember.Route\n */\nexport default class FilterVideoClipResultsRoute extends EmberRoute {\n @service contextManager;\n @service store;\n @service cookieManager;\n\n /**\n * The current filter query parameters before any new filter changes are made.\n */\n currentParams;\n\n /**\n * The filters manager for route query parameters.\n *\n * @type {classes.video.clips.helpers.ClipsFilterManager}\n */\n filtersManager;\n\n /** @override */\n beforeModel(transition) {\n this.currentParams = this.paramsFor(transition.to.parent.name);\n }\n\n /** @override */\n model(params, transition) {\n const { store } = this,\n id = this.contextManager.getContextId();\n\n return {\n ...this.modelFor(transition.to.parent.name),\n videoUsage: store.findRecord('video/video-usage', id, { reload: true }),\n savedClipPermissions: store.findRecord('video/permissions/saved-clip-permission', id, { reload: true })\n };\n }\n\n /** @override */\n afterModel(resolvedModel, transition) {\n // Initialize filters in manager.\n const fm = (this.filtersManager =\n this.filtersManager ||\n new ClipsFilterManager(\n this,\n resolvedModel.permissions,\n (filters) => {\n // Has the user selected the \"Other\" classification type?\n const otherSelected = isBitwiseFilterEnabled(\n filters.queryParams.detectionFilters,\n Other\n ).toString();\n\n this.cookieManager.setEssentialCookie(triggerCookieName, otherSelected);\n\n handleVehicleFilters(filters.queryParams, this.currentParams);\n\n // Handle face filters\n handleFacesFilters(filters.queryParams, this.currentParams);\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-deprecated-router-transition-methods\n this.transitionTo(filters);\n },\n true,\n false\n ));\n\n (() => fm.updateFilters(resolvedModel.qp, resolvedModel.defaultFilterValues, isFullTransition(transition)))();\n }\n\n /** @override */\n setupController(controller, model) {\n super.setupController(controller, model);\n\n // Synchronize filter manager with controller.\n controller.set('filtersManager', this.filtersManager);\n }\n}\n\n/**\n * The definition of possible saved clips query params\n *\n * @typedef {{\n * cameras: Array\n * detectionFilters: number\n * thirdPartyDetection: Array\n * endDate: Date,\n * search: String,\n * startDate: Date,\n * status: number,\n * trigger: number\n * familiarVehicles: Array\n * familiarFaces: Array\n * }} SavedClipFilterParamsType\n *\n * @property {Array} cameras The cameras that are selected to be filtered. If set, only clips recorded by selected cameras will be included.\n * @property {number} detectionFilters: bitmask for object detection filters.\n * @property {Array} thirdPartyDetection The array of third party detection IDs to include in the filter.\n * @property {Date} endDate The date of the latest clip to include.\n * @property {String} search The search string to be filtered upon. Applies to clip descriptions.\n * @property {Date} startDate The date of the earliest clip to include\n * @property {number} status The bitmask protection status for filtered clips\n * @property {number} trigger The bitmask for the clip trigger type\n * @property {Array} familiarVehicles the array of Familiar Vehicle IDs to include in the filter\n * @property {Array} familiarFaces the array of Familiar Face IDs to include in the filter\n *\n * @memberof classes.video.clips.FilterVideoClipResultsRoute\n * @private\n */\n","import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\n\nexport default function subYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addYears(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","import EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport subYears from 'date-fns/subYears';\nimport {\n VMD,\n EventTrigger,\n Person,\n Animal,\n Vehicle,\n Other,\n Unprotected,\n Protected,\n ViewedByCentralStation,\n DeliveryVehicle,\n UserSelected,\n Package\n} from '../../../enums/SavedClipFilterOption';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\ntype FilterValues = {\n cameras: number[];\n detectionFilters: number;\n thirdPartyDetection: number[] | null;\n endDate: Date | null;\n search: string;\n startDate: Date;\n status: number;\n trigger: number;\n familiarVehicles: string[];\n familiarFaces: string[];\n};\n\nexport const triggerCookieName = 'saved_clips_include_other';\nconst DefaultObjectDetectionFilterValues = [Person, Animal, Vehicle, DeliveryVehicle, Package];\n\n/**\n * @classdesc\n * The base route controller for filtering saved video clips.\n *\n * @class classes.video.clips.FilteringVideoClipsController\n */\nexport default class FilteringVideoClipsController extends EmberController {\n @service declare cookieManager: ServiceRegistry['cookie-manager'];\n\n /**\n * The default values for this controllers query parameters.\n */\n @computed()\n get defaultFilterValues(): FilterValues {\n return {\n cameras: [],\n detectionFilters:\n DefaultObjectDetectionFilterValues.reduce((filterValue, nextFilter) => filterValue + nextFilter, 0) +\n (this.cookieManager.hasEssentialCookieTruthyValue(triggerCookieName) ? Other : 0),\n thirdPartyDetection: null,\n endDate: null,\n search: '',\n startDate: subYears(new Date(), 1),\n status: Unprotected + Protected,\n trigger: VMD + EventTrigger + ViewedByCentralStation + UserSelected,\n familiarVehicles: [], // adding any Familiar Vehicle ID will add the SpecificFamiliarVehicle SavedClipFilterEnum to the filter on the backend: SavedClipsSearchParameters\n familiarFaces: [] // adding any Familiar Face ID will add the SpecificFamiliarFace SavedClipFilterEnum to the filter on the backend: SavedClipsSearchParameters\n };\n }\n\n /**\n * The cameras to filter on.\n */\n cameras = this.defaultFilterValues.cameras;\n\n /**\n * The object detection filters applied.\n */\n detectionFilters = this.defaultFilterValues.detectionFilters;\n\n /**\n * The last date for events (defaults to now).\n */\n endDate = this.defaultFilterValues.endDate;\n\n /**\n * Search text.\n */\n search = this.defaultFilterValues.search;\n\n /**\n * The first date for events (defaults to one year ago).\n */\n startDate = this.defaultFilterValues.startDate;\n\n /**\n * The clip status filter applied.\n */\n status = this.defaultFilterValues.status;\n\n /**\n * The trigger for event search.\n */\n trigger = this.defaultFilterValues.trigger;\n\n /**\n * The default pagination page size.\n */\n pageSize = 48;\n\n /**\n * The default pagination selected page.\n */\n page = 1;\n\n /**\n * The default Familiar Vehicle IDs to filter on\n */\n familiarVehicles = this.defaultFilterValues.familiarVehicles;\n\n /**\n * The default Familiar Face IDs to filter on\n */\n familiarFaces = this.defaultFilterValues.familiarFaces;\n\n /**\n * The default third party detection types to filter on.\n */\n thirdPartyDetection = this.defaultFilterValues.thirdPartyDetection;\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isFullTransition } from '../../../utils/ember';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\nimport AdcBaseRoute from '../../base-route';\n\n/**\n * @classdesc\n * The base route controller for filtering saved video clips.\n *\n * @class classes.video.clips.FilteringVideoClipsRoute\n */\nexport default class FilteringVideoClipsRoute extends AdcBaseRoute {\n @service contextManager;\n @service store;\n\n /**\n * Query parameters for video clip filtering.\n *\n * @type {Object}\n */\n @computed()\n get queryParams() {\n return {\n cameras: getQueryParam('array'),\n detectionFilters: getQueryParam('number'),\n thirdPartyDetection: getQueryParam('array'),\n endDate: getQueryParam('date'),\n page: getQueryParam(),\n pageSize: getQueryParam(),\n search: getQueryParam('string'),\n startDate: getQueryParam('date'),\n status: getQueryParam('number'),\n trigger: getQueryParam('number'),\n familiarVehicles: getQueryParam('array'),\n familiarFaces: getQueryParam('array'),\n eventId: {\n ...getQueryParam(),\n // The query param in the URL is event_id, but we want to refer to it as eventId.\n as: 'event_id',\n // There's no need to reload the model when this value changes.\n refreshModel: false\n }\n };\n }\n\n /** @override */\n async model(params, transition) {\n const { contextManager, store } = this,\n isEnterprise = contextManager.isEnterprise,\n thirdPartyAnalyticsEventType = await store.queryRecord('video/third-party-analytics-event-type', {\n id: isEnterprise\n ? this.identityManager.getSelectedSystemGroupId()\n : this.identityManager.getSelectedSystemId(),\n isEnterprise\n }),\n thirdPartyDetectionTypes = Object.keys(thirdPartyAnalyticsEventType.supportedEventTypes).map(Number);\n\n // If the thirdPartyDetection qp doesn't exist in the URL, set the default values for 3PC detection types.\n if (params.thirdPartyDetection == null && thirdPartyDetectionTypes.length) {\n params.thirdPartyDetection = thirdPartyDetectionTypes;\n }\n\n const { startDate, endDate, eventId, ...p } = params,\n fnGetModels = (type, id) =>\n store[`${isFullTransition(transition) ? 'find' : 'peek'}${id ? 'Record' : 'All'}`](`video/${type}`, id);\n\n return {\n permissions: fnGetModels('permissions/saved-clip-permission', this.contextManager.getContextId()),\n formats: fnGetModels('download-format'),\n clips: store.query('video/video-event', {\n startTime: startDate.toISOString(),\n endTime: endDate ? endDate.toISOString() : null,\n ...p\n }),\n showPreferredTimezone: contextManager.showPreferredTimezone,\n // We'll eventually add another query param that's tied to a snapshot-event's id and load that model here.\n mediaFromQueryParams: eventId ? store.findRecord('video/video-event', eventId) : null,\n qp: { ...params },\n defaultFilterValues: this.controllerFor(this.routeName).defaultFilterValues\n };\n }\n}\n","import { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Tour from '../../../../components/help-tour/tour';\nimport ContainerObject from '../../../../utils/container-object';\n\n/**\n * @classdesc\n * Base class for saved clip help tours.\n *\n * @class classes.clips.helpers.BaseClipsTour\n */\nexport default class BaseClipsTour extends ContainerObject {\n @service contextManager;\n @service intl;\n\n /**\n * The HelpTourType enumeration value for this tour.\n *\n * @type {number}\n */\n @computed()\n get tourId() {\n logMissingAbstractMember(this, '\"tourId\" computed property');\n return 0;\n }\n\n /**\n * The name of this tour.\n *\n * @type {string}\n */\n @computed()\n get tourName() {\n logMissingAbstractMember(this, '\"tourName\" computed property');\n return '';\n }\n\n /**\n * The steps to show on this tour.\n *\n * @type {Array}\n */\n @computed()\n get tourSteps() {\n logMissingAbstractMember(this, '\"tourSteps\" computed property');\n return [];\n }\n\n /**\n * A method called when the tour is complete.\n */\n tourComplete() {}\n\n /**\n * Begins the tour.\n */\n start() {\n const { contextManager } = this;\n\n contextManager.helpTour.start(\n Tour.create({\n name: this.tourName,\n steps: this.tourSteps,\n afterEnd: () => {\n this.tourComplete();\n contextManager.identityModel.markHelpTourAsCompleted(this.tourId);\n }\n })\n );\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n

{{tc this \\'title\\'}}

\\n\\n {{yield}}\\n\\n

{{tc this \\'description\\'}}

\\n\\n
\\n \\n \\n
\\n\\n \\n\\n {{#if @displayTerms}}\\n

{{t \\'video.clip-feedback.legalAgreementHeader\\'}}

\\n
\\n {{!-- @glint-expect-error: This should be `safe-html (get this.contextManager.identityModel.clipDonationAgreement \\'legalAgreement\\')` --}}\\n {{safe-html this.contextManager.identityModel.clipDonationAgreement.legalAgreement}}\\n
\\n {{else}}\\n

{{tc this \\'terms\\' link=this.urlForDonationTerms htmlSafe=true}}

\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/video/clips/donate-clip/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type RouterService from '@ember/routing/router-service';\nimport type { DonateAction } from 'customer-site/classes/video/clips/helpers/clip-management';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface DonateClipSignature {\n Args: {\n donateAction: DonateAction;\n displayTerms: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\n/**\n * @classdesc\n * A component for donating any number of video clips for analytics feedback.\n */\n@intlPath({ path: 'video/clips/donate-clip' })\nexport default class VideoClipsDonateClipComponent extends Component {\n @service declare contextManager: ContextManager;\n @service declare router: RouterService;\n @service declare envSettings: EnvSettingsService;\n\n /**\n * Uses the router service to generate a URL for an anchor tag to show clip donation terms.\n */\n get urlForDonationTerms(): string {\n return this.envSettings.isTestEnvironment()\n ? 'testing'\n : this.router.urlFor('info', {\n queryParams: {\n type: 'clipDonation'\n }\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::DonateClip': typeof VideoClipsDonateClipComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n\\n {{#if this.model.displayTerms}}\\n \\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/modals/video/donate-clip/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport CalibrationSnapshotInfo from 'customer-site/components/modals/video/calibration-snapshot-info/index';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * A dialog for donating video analytics clips.\n *\n * @class components.modals.video.DonateClipModal\n */\nexport default class DonateClipModal extends Component {\n @service intl;\n @service contextManager;\n @service modals;\n\n tagName = '';\n\n /**\n * Has the user checked the checkbox for reading the legal agreement?\n *\n * @type {boolean}\n */\n @tracked\n reviewedTerms = false;\n\n /**\n * Has the user checked the checkbox for donating calibration snapshots?\n * (We initialize this to true as we want the checkbox to be pre-selected\n * by default.)\n *\n * @type {boolean}\n */\n @tracked\n donateCalibrationSnapshots = true;\n\n /**\n * The buttons for this dialog.\n *\n * @returns {Array}\n */\n @computed('model.{donateAction.isValid,displayTerms}', 'reviewedTerms', 'donateCalibrationSnapshots')\n get buttons() {\n const { donateAction, displayTerms } = this.model,\n { reviewedTerms, donateCalibrationSnapshots } = this;\n\n return [\n ['cancel', () => donateAction.resetFeedback(), '', false],\n [\n 'submit',\n // Only go through with calibration snapshot donation if the user has been shown the checkbox to opt-in/out\n () => donateAction.donate(displayTerms && donateCalibrationSnapshots),\n 'btn-color-primary',\n !donateAction.isValid || (displayTerms && !reviewedTerms)\n ]\n ].map(([key, fn, css, disabled]) => getModalFooterButton(this.intl.t(`generic.${key}`), fn, css, disabled));\n }\n\n /**\n * Displays a modal explaining what calibration snapshots are.\n */\n @action\n showCalibrationSnapshotInfoModal() {\n this.modals.showModal(CalibrationSnapshotInfo);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { getProperties, computed, action, get } from '@ember/object';\nimport { empty, notEmpty, alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { getErrorText } from '../../../../utils/ember';\nimport DonateClipModal from 'customer-site/components/modals/video/donate-clip/index';\nimport DownloadOptions from 'customer-site/components/modals/video/download-options/index';\nimport { NotOperatorSite } from 'customer-site/components/video/clips/video-modal/index';\nimport VideoClipsModal from 'customer-site/components/video/clips/video-modal/index';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\nimport {\n EmberVideoFamiliarSubjectsClipFeedback,\n EmberVisualVerificationFlagging\n} from 'customer-site/enums/CustomerPageUrl';\nimport { Vehicle } from 'customer-site/enums/FamiliarObjectType';\nimport { buildKnowledgeBaseURL } from 'customer-site/helpers/knowledge-base-link';\nimport SnapshotEvent from 'customer-site/models/video/snapshot-event';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport { format, utcToZonedTime } from 'date-fns-tz';\nimport ContainerObject from '../../../../utils/container-object';\nimport { isBrowserFullScreen, toggleFullScreen } from '../../../../utils/dom';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DownloadFormat from '@adc/login-setup-addon/models/video/download-format';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type BaseMediaEvent from 'customer-site/models/video/base-media-event';\nimport type SavedClipPermissions from 'customer-site/models/video/permissions/saved-clip-permission';\nimport type VideoEvent from 'customer-site/models/video/video-event';\nimport type VisualVerificationEvent from 'customer-site/models/visual-verification/event';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ErrorPayload } from 'customer-site/utils/ember';\n\ntype MediaActionProps = {\n permissions?: SavedClipPermissions;\n formats?: DownloadFormat;\n showPreferredTimezone?: boolean;\n};\n\ntype MediaItemProps = MediaActionProps & {\n canDownload?: boolean;\n canViewPictureInPicture?: boolean;\n};\n\n// region Media Editing Actions\n\n/**\n * Returns a dropdown action item for the passed action.\n */\nfunction getDropdownActionItem(action: MediaAction): DropdownActionItem {\n const { icon, text, action: fn, disabled } = action;\n\n return DropdownActionItem.create({\n icon,\n name: text,\n action: () => {\n // Don't return result of action in case it's a promise.\n fn();\n return true;\n },\n disabled\n });\n}\n\n/**\n * @classdesc\n * Base class for media editing actions.\n */\nexport abstract class MediaAction extends ContainerObject {\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare modals: ModalService;\n\n @tracked media: BaseMediaEvent[];\n @tracked icon: string;\n @tracked key: string;\n abstract action(): Promise | void;\n\n constructor(host: any, media: BaseMediaEvent[] = [], icon = '', key = '') {\n super(host);\n\n this.media = media;\n this.icon = icon;\n this.key = key;\n }\n\n /**\n * The text for this action.\n */\n @computed('key')\n get text(): string {\n return this.getCountBasedText(this.key);\n }\n\n /**\n * Indicates the action should be disabled.\n */\n get disabled(): boolean {\n return isEmpty(this.media) || this.media.some((media) => media instanceof SnapshotEvent);\n }\n\n /**\n * Indicates UI for this action should show in a selected state.\n */\n get isSelected(): boolean {\n return false;\n }\n\n /**\n * Indicates that at least one of the managed media is currently protected.\n */\n @computed('media.@each.isProtected')\n get areAnyProtected(): boolean {\n return this.media.isAny('isProtected');\n }\n\n /**\n * Returns a translated string from 'generic.video.clipManagement', adjusted for plurality based on number of managed media items.\n */\n getCountBasedText(key: string): string {\n return this.intl.t(`generic.video.clipManagement.${key}`, {\n num: this.media.length\n });\n }\n\n /**\n * Restores model state (if indicated), then shows the error and returns error text.\n */\n handleApiError(error: ErrorPayload, restoreState = false): string {\n if (restoreState) {\n this.media.invoke('rollbackAttributes');\n }\n\n // Notify error and exit.\n const text = getErrorText(error)!;\n this.notificationManager.addError(text);\n return text ?? '';\n }\n\n /**\n * Exits full screen mode (if present).\n */\n async exitFullScreen(): Promise {\n if (isBrowserFullScreen()) {\n await toggleFullScreen(false, document);\n }\n }\n}\n\n/**\n * @classdesc\n * Collection of media actions.\n */\nclass ActionGroup extends ContainerObject {\n @service declare intl: ADCIntlService;\n\n @tracked media: MediaAction['media'];\n @tracked key: string;\n @tracked icon: string;\n @tracked actions: MediaAction[];\n\n constructor(key: string, icon: string, actions: MediaAction[]) {\n const [action] = actions;\n\n super(action);\n\n this.media = action.media;\n this.key = key;\n this.icon = icon;\n this.actions = actions;\n }\n\n /**\n * Indicates the group button should be disabled.\n */\n @empty('media')\n declare disabled: boolean;\n\n /**\n * The text for the group button.\n */\n @computed('media.[]', 'key')\n get text(): string {\n return this.intl.t(`generic.video.clipManagement.${this.key}`, {\n num: this.media.length\n });\n }\n\n /**\n * The grouped actions are dropdown action items.\n */\n @computed('actions')\n get menuItems(): DropdownActionItem[] {\n return this.actions.map(getDropdownActionItem);\n }\n}\n\nexport type { ActionGroup };\n\n/**\n * @classdesc\n * An action for downloading media.\n */\nclass DownloadAction extends MediaAction {\n formats?: DownloadFormat;\n\n constructor(host: any, media: BaseMediaEvent[], formats?: DownloadFormat) {\n super(host, media, 'download', 'download');\n\n this.formats = formats;\n }\n\n /**\n * Download selected media.\n */\n @action action(): void {\n (async () => {\n await this.exitFullScreen();\n\n this.modals.showModal(DownloadOptions, {\n ...getProperties(this, 'media', 'formats'),\n disableBackdropClose: true\n });\n })();\n }\n}\n\n/**\n * @classdesc\n * An action for renaming saved video media.\n */\nclass RenameAction extends MediaAction {\n constructor(host: any, media: BaseMediaEvent[]) {\n super(host, media, 'edit', 'rename');\n }\n\n /**\n * Asks user for new name and then renames the media.\n */\n @action action(): void {\n (async () => {\n await this.exitFullScreen();\n\n const descriptions = this.media.uniqBy('description');\n\n this.modals.showRenameModal({\n title: this.text,\n message: this.getCountBasedText('renameDescription'),\n output: {\n value: descriptions.length === 1 ? descriptions.firstObject!.description : ''\n },\n maxLength: 25,\n disableBackdropClose: true,\n rename: this.rename\n });\n })();\n }\n\n /**\n * Rename the media.\n */\n @action rename(description: string): Promise {\n return (async () => {\n const { media } = this;\n\n try {\n // Update and save.\n await Promise.all(\n media.map((m) => {\n m.description = description;\n return m.save();\n })\n );\n } catch (error) {\n throw this.handleApiError(error, true);\n }\n\n return true;\n })();\n }\n}\n\n/**\n * @classdesc\n * An action for protecting media.\n */\nclass ProtectAction extends MediaAction {\n @service declare contextManager: ContextManager;\n\n /**\n * Indicates whether a protect clip action has already been done in this session.\n */\n static hasProtectMediaReminderModalBeenShown = false;\n\n constructor(host: any, media: BaseMediaEvent[]) {\n super(host, media, 'lock');\n }\n\n /**\n * Indicates the UI should be in a selected state because at least on of the managed media is already protected.\n */\n get isSelected(): boolean {\n return this.areAnyProtected;\n }\n\n /** @override */\n @computed('areAnyProtected')\n get text(): string {\n return this.getCountBasedText(this.areAnyProtected ? 'unprotect' : 'protect');\n }\n\n /**\n * Show modal for protecting media.\n */\n @action action(): void {\n const { media } = this;\n\n // Is any selected clip NOT support the protect modal OR is every selected media NOT age limited, OR IS this an un-protect action, OR IS this not the first protect action in this session?\n if (\n media.isAny('displayProtectModal', false) ||\n media.isEvery('ageLimitDays', -1) ||\n media.isAny('isProtected', true) ||\n ProtectAction.hasProtectMediaReminderModalBeenShown\n ) {\n // Protect immediately.\n this.protect();\n return;\n }\n\n const { intl } = this,\n path = 'classes.video.clips.helpers.clip-management.clip-protect';\n\n this.modals.showInfoModal({\n title: intl.t(`${path}.title`),\n info: intl.t(`${path}.message`, {\n link: buildKnowledgeBaseURL(\n CustomerKnowledgeBase.VideoClipsChangeNumberOfDayBeforeDeletion,\n this.contextManager\n ),\n htmlSafe: true\n }),\n css: 'protect-clip-reminder-modal',\n disableHeaderClose: true,\n buttons: [\n getModalFooterButton(intl.t('generic.cancel')),\n getModalFooterButton(intl.t('generic.confirm'), () => this.protect(), 'btn-color-primary')\n ]\n });\n }\n\n /**\n * Protect the media.\n */\n private protect(): Promise {\n return (async () => {\n const { media } = this;\n\n try {\n // Update and save.\n // When using bulk actions, unless all media are currently unprotected, they will be set to unprotected regardless of protected/unprotected distributions.\n media.setEach('isProtected', !this.areAnyProtected);\n await Promise.all(media.invoke('save'));\n\n // Update flag once user confirms a clip protection.\n if (media.isEvery('isProtected', true)) {\n ProtectAction.hasProtectMediaReminderModalBeenShown = true;\n }\n } catch (error) {\n throw this.handleApiError(error, true);\n }\n\n return true;\n })();\n }\n}\n\n/**\n * A base action for retrieving sharable media links.\n */\nabstract class LinkAction extends MediaAction {\n /**\n * Requests share links for each of the media, and returns then as a return concatenated string.\n */\n getMediaLinksInfo(): Promise<{ message: string; links: string }> {\n return (async () => {\n try {\n const links = await Promise.all(this.media.map((c) => c.shareLinkInfo));\n return {\n message: links.firstObject?.subject ?? '',\n links: links.mapBy('url').join(' \\r\\n')\n };\n } catch (error) {\n throw this.handleApiError(error, false);\n }\n })();\n }\n}\n\n/**\n * @classdesc\n * An action for copying a media link to the clipboard.\n */\nclass CopyLink extends LinkAction {\n constructor(host: any, media: BaseMediaEvent[]) {\n super(host, media, 'copy', 'copy');\n }\n\n /**\n * Copy clip links to clipboard.\n */\n @action async action(): Promise {\n const { links } = await this.getMediaLinksInfo();\n await navigator.clipboard.writeText(links);\n }\n}\n\n/**\n * @classdesc\n * An action for copying a media link to the clipboard.\n */\nclass EmailLink extends LinkAction {\n constructor(host: any, media: BaseMediaEvent[]) {\n super(host, media, 'email', 'email');\n }\n\n get text(): string {\n return this.intl.t('generic.email');\n }\n\n /**\n * Email clip links.\n */\n @action action(): Promise {\n return (async () => {\n const info = await this.getMediaLinksInfo();\n window.location.assign(\n `mailto:?subject=${encodeURIComponent(info.message)}&body=${encodeURIComponent(info.links)}`\n );\n })();\n }\n}\n\n/**\n * @classdesc\n * An action for donating media.\n */\nclass DonateAction extends MediaAction {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n constructor(host: any, media: BaseMediaEvent[]) {\n super(host, media, 'donate-clip', 'share');\n }\n\n /**\n * Feedback for this media.\n */\n @tracked feedback?: boolean;\n\n /**\n * Feedback text for this media.\n */\n @tracked feedbackText = '';\n\n /**\n * Indicates the cached feedback is valid.\n */\n @computed('disabled', 'feedback', 'feedbackText')\n get isValid(): boolean {\n return !this.disabled && (!isEmpty(this.feedback) || !isEmpty(this.feedbackText));\n }\n\n /**\n * Updates the feedback rating.\n */\n @action updateFeedback(isCorrect: boolean): void {\n this.feedback = isCorrect;\n }\n\n /**\n * Updates the feedback text.\n */\n @action updateText(feedback: string): void {\n this.feedbackText = feedback;\n }\n\n /**\n * Clears any cached feedback.\n */\n @action resetFeedback(): void {\n this.feedback = undefined;\n this.feedbackText = '';\n }\n\n /**\n * Show modal for donating media.\n */\n @action action(): void {\n (async () => {\n const [hasAgreementBeenAccepted] = await Promise.all([\n this.ajax.apiRequest('api/video/clipDonationAgreements/hasAgreementBeenAccepted'),\n get(get(this.contextManager, 'identityModel'), 'clipDonationAgreement'),\n this.exitFullScreen()\n ]);\n\n this.modals.showModal(DonateClipModal, {\n donateAction: this,\n displayTerms: !hasAgreementBeenAccepted\n });\n })();\n }\n\n /**\n * Donate media.\n */\n @action donate(donateCalibrationSnapshots: boolean): Promise {\n return (async () => {\n try {\n // We require the user to accept the media donation agreement when donating media,\n // so log that agreement here. Also note that we await this apiRequest ahead of\n // the donateMedia calls below because if there's a problem accepting the agreement\n // we should not move forward with the media donations.\n await this.ajax.apiRequest('api/video/clipDonationAgreements/acceptAgreement', undefined, null, POST);\n\n const savedEvents = await Promise.all(\n this.media.map((m) => m.donateMedia(!!this.feedback, this.feedbackText, donateCalibrationSnapshots))\n );\n savedEvents.forEach((data) => this.store.pushPayload(data));\n\n this.resetFeedback();\n } catch (error) {\n throw this.handleApiError(error, true);\n }\n\n return true;\n })();\n }\n}\n\nexport type { DonateAction };\n\n/**\n * An action for navigating to the Familiar Target feedback page\n */\nclass FamiliarTargetFeedbackAction extends MediaAction {\n @service declare navigation: NavigationService;\n\n constructor(host: any, media: BaseMediaEvent[]) {\n const isFamiliarVehicleFeedbackEvent =\n media.firstObject?.familiarTargetFeedbackEvents.toArray()[0].familiarObjectType === Vehicle,\n buttonText = isFamiliarVehicleFeedbackEvent ? 'familiarVehicleFeedback' : 'familiarFaceFeedback';\n\n super(host, media, 'va-familiar', buttonText);\n\n this.isFamiliarVehicleFeedbackEvent = isFamiliarVehicleFeedbackEvent;\n }\n\n /**\n * Is this a familiar vehicle feedback event?\n */\n @tracked isFamiliarVehicleFeedbackEvent = false;\n\n /**\n * Navigate to the familiar vehicle feedback page for the selected media\n */\n @action action() {\n const firstMediaId = this.media.firstObject?.id;\n\n if (!firstMediaId) {\n return;\n }\n\n this.navigation.transitionToRouteId(EmberVideoFamiliarSubjectsClipFeedback, firstMediaId, {\n queryParams: {\n isFamiliarVehicleFeedbackEvent: this.isFamiliarVehicleFeedbackEvent\n }\n });\n }\n}\n\nexport type { FamiliarTargetFeedbackAction };\n\n/**\n * @classdesc\n * An action for deleting media.\n */\nclass DeleteAction extends MediaAction {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n @service declare notificationManager: NotificationManager;\n\n postDeleteAction?: VoidFunction;\n\n constructor(host: any, media: BaseMediaEvent[], postDeleteAction?: VoidFunction) {\n super(host, media, 'trash', 'delete');\n this.postDeleteAction = postDeleteAction;\n }\n\n @computed('areAnyProtected')\n get disabled(): boolean {\n return super.disabled || this.areAnyProtected;\n }\n\n /**\n * Delete the media asynchronously, without returning async status.\n */\n @action action(): void {\n this.delete().then(() => this.postDeleteAction?.());\n }\n\n /**\n * Deletes the media asynchronously, returning a promise so callers can monitor progress.\n */\n @action delete(): Promise {\n return new Promise((resolve, reject) => {\n this.exitFullScreen();\n\n this.modals.showDeleteModal({\n title: this.text,\n message: this.getCountBasedText('confirmDelete'),\n disableBackdropClose: true,\n delete: async () => {\n try {\n const { media } = this;\n await Promise.all(media.invoke('destroyRecord'));\n media.forEach((media) => this.store.unloadRecord(media));\n resolve();\n } catch (error) {\n reject(this.handleApiError(error.isAdapterError ? error.errors : error, true));\n }\n }\n });\n });\n }\n}\n\n// endregion\n\n// region MediaEditor\n\n/**\n * @classdesc\n * Helper object for modifying media properties.\n */\nexport class MediaEditor extends ContainerObject {\n @service declare modals: ModalService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare intl: ADCIntlService;\n\n @tracked media: BaseMediaEvent[];\n permissions?: SavedClipPermissions;\n formats?: DownloadFormat;\n showPreferredTimezone: boolean;\n @tracked postDeleteAction?: VoidFunction;\n\n constructor(\n host: any,\n media: BaseMediaEvent[] = [],\n { permissions, formats, showPreferredTimezone = false }: MediaActionProps = {},\n postDeleteAction: VoidFunction = () => {}\n ) {\n super(host);\n\n this.media = media;\n this.permissions = permissions;\n this.formats = formats;\n this.showPreferredTimezone = showPreferredTimezone;\n this.postDeleteAction = postDeleteAction;\n }\n\n /**\n * Returns true if the logged in user 'isLoginAsLoginRep' OR if they have the passed permissions.\n */\n private checkPermissions(...permissions: (keyof SavedClipPermissions)[]): boolean {\n return this.identityManager.isLoginAsLoginRep || permissions.every((p) => this.permissions?.[p]);\n }\n\n /**\n * Indicates the editor has media to edit.\n */\n @notEmpty('media')\n declare hasMedia: boolean;\n\n /**\n * The action for downloading media.\n *\n * @type {classes.video.clips.helper.MediaEditor.DownloadAction}\n */\n @computed('media')\n get downloadAction(): DownloadAction | undefined {\n const { formats } = this;\n return this.checkPermissions('canView') && !isEmpty(formats)\n ? new DownloadAction(this, this.media, formats)\n : undefined;\n }\n\n /**\n * The action for renaming media.\n */\n @computed('media')\n get renameAction(): RenameAction | undefined {\n return this.checkPermissions('canNameAndProtect') ? new RenameAction(this, this.media) : undefined;\n }\n\n /**\n * The action for protecting media.\n */\n @computed('media')\n get protectAction(): ProtectAction | undefined {\n return this.checkPermissions('canNameAndProtect') ? new ProtectAction(this, this.media) : undefined;\n }\n\n /**\n * The action for donating media to ADC.\n */\n @computed('media')\n get donateAction(): DonateAction | undefined {\n return this.checkPermissions('canView', 'isClipDonationEnabled')\n ? new DonateAction(this, this.media)\n : undefined;\n }\n\n /**\n * The action for sharing media, could be a single shared action of a group of share actions.\n */\n @computed()\n get shareAction(): MediaAction | ActionGroup | undefined {\n const { media } = this,\n actions: MediaAction[] = [];\n\n if (this.checkPermissions('canViewVideoLinkShareOptions', 'canView')) {\n actions.push(new CopyLink(this, media), new EmailLink(this, media));\n }\n\n const { donateAction } = this;\n if (donateAction) {\n actions.push(donateAction);\n }\n\n const { length } = actions;\n if (!length) {\n return undefined;\n }\n\n return length > 1 ? new ActionGroup('share', 'share', actions) : actions.firstObject;\n }\n\n /**\n * The action for navigating to the familiar target feedback view\n */\n @computed('media.{firstObject,length}')\n get familiarTargetFeedbackAction(): FamiliarTargetFeedbackAction | undefined {\n const { media } = this,\n firstMedia = media.firstObject;\n\n // Bulk feedback is not supported\n if (media.length > 1 || !firstMedia?.hasFeedback || !this.checkPermissions('canView')) {\n return undefined;\n }\n\n const familiarObjectType = firstMedia?.familiarTargetFeedbackEvents.toArray()[0].familiarObjectType,\n isVehicleType = familiarObjectType === Vehicle,\n hasFamiliarTargetPermissions = isVehicleType\n ? this.checkPermissions('hasFamiliarVehicles')\n : this.checkPermissions('hasFamiliarFaces');\n\n if (!hasFamiliarTargetPermissions) {\n return undefined;\n }\n\n // If the familiar object type is vehicle, then we need to check the multiVehicleFeedbackEnabled permissions before returning the FamiliarTargetFeedbackAction.\n // If we don't have multiVehicleFeedbackEnabled permissions, then we need to check if there is only one feedback event before returning the FamiliarTargetFeedbackAction.\n if (isVehicleType) {\n if (this.checkPermissions('multiVehicleFeedbackEnabled')) {\n return new FamiliarTargetFeedbackAction(this, this.media);\n }\n\n return (firstMedia?.familiarTargetFeedbackEvents?.length ?? 0) === 1\n ? new FamiliarTargetFeedbackAction(this, this.media)\n : undefined;\n }\n\n // If the familiar object type is face, then we don't need to check any permissions and can just return the FamiliarTargetFeedbackAction.\n return new FamiliarTargetFeedbackAction(this, this.media);\n }\n\n /**\n * The action for deleting media.\n */\n @computed('media', 'postDeleteAction')\n get deleteAction(): DeleteAction | undefined {\n return this.checkPermissions('canDelete')\n ? new DeleteAction(this, this.media, this.postDeleteAction)\n : undefined;\n }\n\n /**\n * The collection of all permitted media editing actions for the current user.\n */\n get permittedActions(): (MediaAction | ActionGroup)[] {\n return [\n this.downloadAction,\n this.renameAction,\n this.protectAction,\n this.familiarTargetFeedbackAction,\n this.shareAction,\n this.deleteAction\n ].compact();\n }\n\n /**\n * The collection of all permitted media editing actions for the current user, as DropdownActionItems.\n */\n get dropdownActionItems(): DropdownActionItem[] {\n return this.permittedActions.reduce(\n (items, action) => [\n ...items,\n ...(action instanceof ActionGroup ? action.menuItems : [getDropdownActionItem(action)])\n ],\n []\n );\n }\n\n /**\n * Opens a modal to play all media.\n */\n @action playAll(): void {\n const props = getProperties(this, 'permissions', 'formats', 'showPreferredTimezone');\n\n this.modals.showModal(VideoClipsModal, {\n media: this.media.map((m) => new MediaItem(this, m, props)),\n selectedIndex: 0,\n operatorSiteEnum: NotOperatorSite\n });\n }\n}\n\n// endregion\n\n// region BaseMediaItem\n\n/**\n * @classdesc\n * Wrapper object for base media.\n */\nclass BaseMediaItem extends ContainerObject {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n\n @tracked model: BaseMediaEvent;\n showPreferredTimezone: boolean;\n canDownload: boolean;\n canViewPictureInPicture: boolean;\n\n constructor(\n host: any,\n model: BaseMediaEvent,\n { showPreferredTimezone = false, canDownload = true, canViewPictureInPicture = true } = {}\n ) {\n super(host);\n\n this.model = model;\n this.showPreferredTimezone = showPreferredTimezone;\n this.canDownload = canDownload;\n this.canViewPictureInPicture = canViewPictureInPicture;\n }\n\n /**\n * The name of the camera that captured this media.\n */\n @computed('model.camera.description')\n get cameraName(): Promise {\n return (async () => {\n const camera = await this.model.camera;\n return isEmpty(camera) ? this.intl.t('generic.video.deletedCamera') : camera.description;\n })();\n }\n\n /**\n * The time zone to use when formatting dates for this media.\n */\n get timeZone(): string {\n return this.showPreferredTimezone\n ? this.contextManager.identityModel.preferredTimezone\n : this.intl.timeZone ?? '';\n }\n\n /**\n * The video analytics icon for this media, defaults to generic if none or if there is more than one classification.\n */\n get vaIcon(): string {\n const keys = Object.keys(this.model.classificationIcons || {});\n return keys.length === 1 ? keys.firstObject! : 'va-generic';\n }\n}\n\nexport type { BaseMediaItem };\n\n// endregion\n\n/**\n * @classdesc\n * Wrapper object for media.\n */\nexport class MediaItem extends BaseMediaItem {\n editor: MediaEditor;\n\n constructor(\n host: any,\n model: BaseMediaEvent,\n {\n showPreferredTimezone = false,\n permissions,\n formats,\n canDownload = true,\n canViewPictureInPicture = true\n }: MediaItemProps = {},\n postDeleteAction: VoidFunction = () => {}\n ) {\n super(host, model, { showPreferredTimezone, canDownload, canViewPictureInPicture });\n\n this.editor = new MediaEditor(host, [model], { permissions, formats, showPreferredTimezone }, postDeleteAction);\n }\n\n /**\n * Indicates this media is selected for editing.\n */\n @tracked isSelected = false;\n\n /**\n * Indicates the media has been deleted.\n */\n @alias('model.isEventDeleted')\n declare isDeleted: boolean;\n\n /**\n * A key to identify the day this media was captured.\n */\n get key(): string {\n return this.getMediaKey(this.model.timestamp);\n }\n\n /**\n * Indicates this media was captured today.\n */\n get isToday(): boolean {\n return this.key === this.getMediaKey(new Date());\n }\n\n /**\n * The media size (with units).\n */\n get size(): string {\n return `${this.intl.formatNumber(this.model.size)} KB`;\n }\n\n /**\n * The collection of state icons to show for this media (protected, donated, etc).\n */\n @computed('model.{isProtected,isDonated,isEventDeleted,isViewedByCentralStation}')\n get stateIcons(): string[] {\n const { model } = this;\n\n return [\n model.isProtected ? 'lock' : undefined,\n model.isDonated ? 'donate-clip' : undefined,\n model.isEventDeleted ? 'trash' : undefined,\n model.isViewedByCentralStation ? 'core' : undefined\n ].compact();\n }\n\n /**\n * Returns a key to identify the day this media was captured.\n */\n private getMediaKey(date: Date): string {\n const { timeZone } = this;\n return format(utcToZonedTime(date, timeZone), 'yyyyMMdd', { timeZone });\n }\n}\n\n/**\n * @classdesc\n * Wrapper object for visual verification video clips.\n */\nexport class VVClipItem extends BaseMediaItem {\n @tracked vvEvent: VisualVerificationEvent;\n\n constructor(\n vvEvent: VisualVerificationEvent,\n model: VideoEvent,\n props?: {\n showPreferredTimezone?: boolean;\n canDownload?: boolean;\n canViewPictureInPicture?: boolean;\n }\n ) {\n super(vvEvent, model, props);\n\n this.vvEvent = vvEvent;\n }\n\n /**\n * The collection of state icons to show for this clip (protected, donated, etc).\n */\n @computed('vvEvent.flagged')\n get stateIcons(): string[] {\n if (!this.contextManager.isCurrentRoute(EmberVisualVerificationFlagging)) {\n return [];\n }\n\n return this.vvEvent.flagged ? ['flag'] : [];\n }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport StepContent, { getAnchorSelector } from 'customer-site/components/help-tour/step-content';\nimport Step, { StepDisplayType } from '../../../../components/help-tour/step';\nimport { SavedVideoClipsPageTour } from '../../../../enums/HelpTourType';\nimport BaseClipsTour from './base-clips-tour';\n\n/**\n * Returns a configuration to display a popover tour step.\n *\n * @param {String} attachTo CSS selector for element to attach popover to.\n * @param {String} content Content to show in popover.\n * @param {String} [placement=bottom] Popover placement.\n * @param {boolean} [scrollAlignToTop=false] Indicates whether to scroll to the highlighted element.\n * @param {Object} [props] Optional properties to add to the step model.\n *\n * @returns {components.help-tour.HelpTourStep}\n *\n * @private\n * @memberof classes.clips.helpers.SavedClipsTour\n */\nfunction getPopoverConfig(attachTo, content, placement = 'bottom', scrollAlignToTop = false, props = {}) {\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n attachTo,\n content,\n placement,\n scrollAlignToTop,\n ...props\n })\n });\n}\n\n/**\n * Returns a configuration to display a modal dialog tour step.\n *\n * @param {String} title The title of the modal.\n * @param {String} body The body text of the modal.\n *\n * @returns {Step}\n */\nfunction getWelcomeModal(title, body) {\n return Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n cssClass: 'light-text',\n title,\n content: [`

${body}

`],\n buttons: {\n next: {\n text: this.intl.t('generic.next')\n }\n }\n })\n });\n}\n\n/**\n * @classdesc\n * Welcome tour for the saved video clips route.\n *\n * @class classes.clips.helpers.SavedClipsTour\n */\nexport default class SavedClipsTour extends BaseClipsTour {\n @service intl;\n\n /** @override */\n @computed()\n get tourId() {\n return SavedVideoClipsPageTour;\n }\n\n /** @override */\n @computed()\n get tourName() {\n return 'video-clips-tour';\n }\n\n /** @override */\n @computed()\n get tourSteps() {\n const { contextManager } = this,\n fnToolbarCss = (selector) => `.saved-clips-main-toolbar .contents ${selector}`,\n fnFooterCss = (selector) => `.view-container.footer ${selector}`,\n fnGetText = (key, path = 'classes.video.clips.helpers.clips-tour') => this.intl.t(`${path}.${key}`);\n\n return [\n [getWelcomeModal, contextManager.currentRouteData.pageTitle, fnGetText('welcome')],\n [getPopoverConfig, fnToolbarCss(getAnchorSelector('filter-button')), fnGetText('filtering')],\n [\n getPopoverConfig,\n getAnchorSelector('stateless-image-content'),\n fnGetText('clipHover'),\n 'right',\n false,\n {\n stepOpened: (el) => el.classList.add('force-hover'),\n stepClosed: (el) => el.classList.remove('force-hover')\n }\n ],\n [getPopoverConfig, fnToolbarCss(getAnchorSelector('edit-bulk-button')), fnGetText('bulkEditing')],\n [getPopoverConfig, fnToolbarCss(getAnchorSelector('clip-details')), fnGetText('clipDetails')],\n [\n getPopoverConfig,\n fnFooterCss(getAnchorSelector('clip-storage-info')),\n fnGetText('clipLimit'),\n 'top',\n true\n ],\n [\n getPopoverConfig,\n fnFooterCss(getAnchorSelector('next-deleted-clip')),\n fnGetText('nextDeletedClip'),\n 'top',\n false,\n {\n buttons: {\n next: {\n text: fnGetText('done', 'generic')\n }\n }\n }\n ]\n ].map(([fn, ...args]) => fn.call(this, ...args));\n }\n\n /** @override */\n tourComplete() {\n // Scroll back to top of page, and complete tour.\n document.querySelector('#app-content-wrapper').scrollTop = 0;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Face as FamiliarFace, Vehicle as FamiliarVehicle } from 'customer-site/enums/FamiliarObjectType';\nimport { getFamiliarSubjectsForFiltering } from 'customer-site/utils/video/settings/familiar-subject';\nimport {\n VMD,\n EventTrigger,\n Unprotected,\n Protected,\n Deleted,\n Person,\n Animal,\n Vehicle,\n DeliveryVehicle,\n Other,\n ViewedByCentralStation,\n AnyUnfamiliarVehicle,\n UserSelected,\n Package,\n AnyUnfamiliarFace,\n UnrecognizedPerson\n} from '../../../../enums/SavedClipFilterOption';\nimport BaseFilterManager from '../../../helpers/filter-manager';\n\nimport type Store from '@ember-data/store';\nimport type FamiliarTargetEnrollmentCluster from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster';\nimport type SavedClipPermissions from 'customer-site/models/video/permissions/saved-clip-permission';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type BaseFilter from '../../../helpers/filters/base-filter';\n\nconst FILTER_CAMERA = 'cameras',\n FILTER_TRIGGER = 'trigger',\n FILTER_STATUS = 'status',\n FILTER_DETECTION = 'detectionFilters',\n FILTER_VEHICLES = 'familiarVehicles',\n FILTER_FACES = 'familiarFaces',\n FILTER_LOCATION = 'locations',\n FILTER_3PC_DETECTION = 'thirdPartyDetection';\n\ntype FilterValue = {\n id: string;\n description: string;\n};\n\n/**\n * Retrieves translated text via the intl service.\n *\n * @private\n * @instance\n * @memberof ClipsFilterManager\n */\nfunction getText(this: ClipsFilterManager, key: string, root = 'classes.video.clips.helpers.filter-manager'): string {\n return this.intl.t(`${root}.${key}`);\n}\n\n/**\n * Creates and returns an object with bitwise flag property names and description property values.\n *\n * @private\n * @instance\n * @memberof ClipsFilterManager\n */\nfunction getBitwiseOptions(this: ClipsFilterManager, values: Array>, root?: string) {\n return values.reduce(\n (options, [id, key, tooltipText]) => ({\n ...options,\n [id]: {\n label: getText.call(this, String(key), root),\n tooltipText\n }\n }),\n {}\n );\n}\n\n/**\n * Is the filter value included in the provided bitmask?\n */\nexport function isBitwiseFilterEnabled(bitMask: number, filter: number): boolean {\n return (filter & bitMask) > 0;\n}\n\n/**\n * Utility class for saved video clips filtering.\n *\n * @class ClipsFilterManager\n */\nexport default class ClipsFilterManager extends BaseFilterManager {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n\n @tracked filters: BaseFilter[] = [];\n\n /**\n * Saved clip permissions model.\n */\n permissions: SavedClipPermissions | Promise;\n\n /** @override */\n constructor(\n host: Record,\n permissions: SavedClipPermissions | Promise,\n fnApplyFilter = () => {},\n stageFilterChanges = false,\n disabled = false\n ) {\n super(host, fnApplyFilter, stageFilterChanges, disabled);\n\n this.permissions = permissions;\n }\n\n /** @override */\n async updateFilters(\n queryParams: Record,\n defaultFilterValues: Record,\n freshData = true\n ): Promise {\n await super.updateFilters(queryParams, defaultFilterValues);\n\n const { contextManager } = this,\n { isEnterprise } = contextManager,\n showPreferredTimezone = await contextManager.showPreferredTimezone,\n permissions = await this.permissions;\n\n // Should we load store based filter options fresh from the server?\n if (freshData) {\n const { store } = this,\n vehiclesPromise = permissions.hasFamiliarVehicles\n ? store\n .query('video/familiar-targets/familiar-target-enrollment', {\n type: FamiliarVehicle\n })\n .then((e) => getFamiliarSubjectsForFiltering(e.firstObject))\n : Promise.resolve([]),\n facesPromise = permissions.hasFamiliarFaces\n ? store\n .query('video/familiar-targets/familiar-target-enrollment', {\n type: FamiliarFace\n })\n .then((e) => getFamiliarSubjectsForFiltering(e.firstObject))\n : Promise.resolve([]),\n thirdPartyDetectionPromise = permissions.hasThirdPartyCameraAnalytics\n ? store.queryRecord('video/third-party-analytics-event-type', {\n id: isEnterprise\n ? this.identityManager.getSelectedSystemGroupId()\n : this.identityManager.getSelectedSystemId(),\n isEnterprise\n })\n : Promise.resolve([]);\n\n this.filterOptions = {\n [FILTER_CAMERA]: store.findAll('video/devices/camera'),\n [FILTER_LOCATION]: isEnterprise ? store.findAll('activity/history-location-filter') : undefined,\n [FILTER_VEHICLES]: vehiclesPromise,\n [FILTER_FACES]: facesPromise,\n [FILTER_3PC_DETECTION]: thirdPartyDetectionPromise\n };\n }\n\n // The query parameter for AnyFamiliarVehicle is in the FILTER_VEHICLES dropdown, but its value\n // gets applied to the FILTER_VEHICLES bitwise filter, so make sure it's set correctly in the dropdown if enabled\n queryParams[FILTER_VEHICLES] = queryParams[FILTER_VEHICLES].concat([\n isBitwiseFilterEnabled(queryParams[FILTER_DETECTION], AnyUnfamiliarVehicle)\n ? String(AnyUnfamiliarVehicle)\n : undefined\n ]).filter((item: Record) => item !== undefined);\n\n // The query parameter for UnrecognizedPerson and AnyUnfamiliarFace is in the FILTER_FACES dropdown\n queryParams[FILTER_FACES] = queryParams[FILTER_FACES].concat([\n isBitwiseFilterEnabled(queryParams[FILTER_DETECTION], UnrecognizedPerson)\n ? String(UnrecognizedPerson)\n : undefined,\n isBitwiseFilterEnabled(queryParams[FILTER_DETECTION], AnyUnfamiliarFace)\n ? String(AnyUnfamiliarFace)\n : undefined\n ]).filter((item: Record) => item !== undefined);\n\n // Update filters.\n this.filters = [\n this.getSearchFilter('search', getText.call(this, 'searchDescription')),\n\n isEnterprise\n ? this.getDropdownFilter(\n getText.call(this, 'locations', 'generic'),\n FILTER_LOCATION,\n (async () => {\n const options = await this.filterOptions[FILTER_LOCATION];\n return (options || []).map(({ description: name, id: value }: FilterValue) => ({\n name,\n value\n }));\n })(),\n\n queryParams[FILTER_LOCATION],\n true,\n\n {\n placeholder: getText.call(this, 'allLocations', 'classes.activity.event-history'),\n maxItemCount: 50\n }\n )\n : undefined,\n\n this.getDropdownFilter(\n getText.call(this, 'cameras', 'generic.devices'),\n FILTER_CAMERA,\n (async () => {\n const options = (await this.filterOptions[FILTER_CAMERA]).filter(\n (item: { canUploadClips: boolean; isOnvifCamera: boolean }) =>\n item.canUploadClips || item.isOnvifCamera\n );\n return (options || []).map(({ description: name, id: value }: FilterValue) => ({ name, value }));\n })(),\n\n queryParams[FILTER_CAMERA],\n true,\n {\n placeholder: getText.call(this, 'allCameras')\n }\n ),\n\n permissions.hasVideoAnalytics && !permissions.hasThirdPartyCameraAnalytics\n ? this.getBitwiseFilter(\n getText.call(this, 'objectDetection'),\n FILTER_DETECTION,\n getBitwiseOptions.call(\n this,\n [\n [Person, 'person'],\n [Animal, 'animal'],\n [Vehicle, 'vehicle'],\n permissions.canViewDeliveryVehicle\n ? [DeliveryVehicle, 'deliveryVehicle', getText.call(this, 'deliveryVehicleToolTip')]\n : undefined,\n [Package, 'package'],\n [Other, 'other']\n ].filter((item): item is (string | number)[] => item !== undefined),\n 'generic.video.objectDetection'\n ),\n queryParams[FILTER_DETECTION],\n {\n css: 'obj-detection'\n }\n )\n : undefined,\n\n permissions.hasThirdPartyCameraAnalytics\n ? this.getAnalyticsDropdownFilter(\n getText.call(this, 'analyticEventTypes'),\n FILTER_DETECTION,\n FILTER_3PC_DETECTION,\n getBitwiseOptions.call(\n this,\n [\n [Person, 'person'],\n [Animal, 'animal'],\n [Vehicle, 'vehicle'],\n permissions.canViewDeliveryVehicle\n ? [DeliveryVehicle, 'deliveryVehicle', getText.call(this, 'deliveryVehicleToolTip')]\n : undefined,\n [Other, 'other']\n ].filter((item): item is (string | number)[] => item !== undefined),\n 'generic.video.objectDetection'\n ),\n (async () => {\n const options = await this.filterOptions[FILTER_3PC_DETECTION];\n return Object.entries(options.supportedEventTypes || {}).map(\n ([key, value]: [string, string]) => ({\n name: value,\n value: key\n })\n );\n })(),\n queryParams[FILTER_DETECTION],\n queryParams[FILTER_3PC_DETECTION],\n {\n css: 'analytics-detection',\n placeholder: getText.call(this, 'noAnalyticEventTypes')\n }\n )\n : undefined,\n\n //adding any Familiar Vehicle ID will add the SpecificFamiliarVehicle SavedClipFilterEnum to the filter on the backend\n permissions.hasFamiliarVehicles\n ? this.getDropdownFilter(\n getText.call(this, 'familiarVehicles'),\n FILTER_VEHICLES,\n (async () => {\n const familiarVehicles = await Promise.all(\n ((await this.filterOptions[FILTER_VEHICLES]) || []).map(\n async (\n vehicle: FamiliarTargetEnrollmentCluster\n ): Promise<{ name: string; value: string }> => {\n const vehicleProfile = await vehicle.profile;\n return {\n name: vehicleProfile.description,\n value: vehicleProfile.id\n };\n }\n )\n );\n return [\n {\n name: getText.call(this, 'anyUnfamiliarVehicle', 'generic.video.objectDetection'),\n value: String(AnyUnfamiliarVehicle)\n },\n ...familiarVehicles\n ].filter((item) => item !== undefined);\n })(),\n queryParams[FILTER_VEHICLES],\n true, // is multi-select\n {\n css: 'familiar-vehicles',\n placeholder: isBitwiseFilterEnabled(queryParams[FILTER_DETECTION], Vehicle)\n ? getText.call(this, 'allVehicles')\n : getText.call(this, 'noVehicles') // If Vehicle is not selected + no familiar vehicles are selected, no vehicles are being included in the result\n }\n )\n : undefined,\n\n //adding any Familiar Face ID will add the SpecificFamiliarFace SavedClipFilterEnum to the filter on the backend\n permissions.hasFamiliarFaces\n ? this.getDropdownFilter(\n getText.call(this, 'familiarFaces'),\n FILTER_FACES,\n (async () => {\n const familiarFaces = await Promise.all(\n ((await this.filterOptions[FILTER_FACES]) || []).map(\n async (\n face: FamiliarTargetEnrollmentCluster\n ): Promise<{ name: string; value: string }> => {\n const faceProfile = await face.profile;\n return {\n name: faceProfile.description,\n value: faceProfile.id\n };\n }\n )\n );\n return [\n {\n name: getText.call(this, 'anyUnrecognizedPerson', 'generic.video.objectDetection'),\n value: String(UnrecognizedPerson)\n },\n {\n name: getText.call(this, 'anyUnfamiliarFace', 'generic.video.objectDetection'),\n value: String(AnyUnfamiliarFace)\n },\n ...familiarFaces\n ].compact();\n })(),\n queryParams[FILTER_FACES],\n true, // is multi-select\n {\n css: 'familiar-faces-filter',\n placeholder: isBitwiseFilterEnabled(queryParams[FILTER_DETECTION], Person)\n ? getText.call(this, 'allFaces')\n : getText.call(this, 'noFaces') // If Face is not selected + no familiar face are selected, no face are being included in the result\n }\n )\n : undefined,\n\n this.getDateRangeFilter(showPreferredTimezone),\n\n this.getBitwiseFilter(\n getText.call(this, 'clipStatus'),\n FILTER_STATUS,\n getBitwiseOptions.call(this, [\n [Unprotected, 'unprotected'],\n [Protected, 'protected'],\n [Deleted, 'deleted']\n ]),\n queryParams[FILTER_STATUS],\n {\n description: getText.call(this, 'clipStatusDescription'),\n css: 'clip-status'\n }\n ),\n\n this.getBitwiseFilter(\n getText.call(this, 'clipTrigger'),\n FILTER_TRIGGER,\n getBitwiseOptions.call(\n this,\n [\n permissions.isVMDEnabled ? [VMD, 'motionDetected'] : undefined,\n [EventTrigger, 'eventTriggered'],\n permissions.canViewCentralMonitoringStationClips\n ? [ViewedByCentralStation, 'viewedByCentralStation']\n : undefined,\n permissions.hasUserSelectedFilter ? [UserSelected, 'userSelected'] : undefined\n ].filter((item): item is (string | number)[] => item !== undefined)\n ),\n queryParams[FILTER_TRIGGER]\n )\n ].filter((item): item is BaseFilter => item !== undefined);\n }\n\n /**\n * The cameras filter.\n */\n @computed('filters.[]')\n get camerasFilter(): BaseFilter {\n return this.getFilterByName(FILTER_CAMERA);\n }\n\n /**\n * Indicates the cached status filter changes are valid.\n */\n @computed('cachedFilterValues.status')\n get areStatusChangesValid(): boolean {\n const { status } = this.cachedFilterValues as { status: number | undefined };\n return status === undefined || status > 0;\n }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Step, { StepDisplayType } from 'customer-site/components/help-tour/step';\nimport StepContent from 'customer-site/components/help-tour/step-content';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\nimport { buildKnowledgeBaseURL } from 'customer-site/helpers/knowledge-base-link';\nimport { ClipDetectionOtherTour } from '../../../../enums/HelpTourType';\nimport BaseClipsTour from './base-clips-tour';\n\n/**\n * Tour shown whenever an account first records a clip with \"Other\" classification.\n */\nexport default class OtherDetectionTour extends BaseClipsTour {\n @service contextManager;\n @service intl;\n\n /** @override */\n @computed()\n get tourId() {\n return ClipDetectionOtherTour;\n }\n\n /** @override */\n @computed()\n get tourName() {\n return 'video-other-detection-tour';\n }\n\n /** @override */\n @computed()\n get tourSteps() {\n const fnGetText = (key, path = 'classes.video.clips.helpers.other-tour') => this.intl.t(`${path}.${key}`);\n const knowledgeBaseLink = buildKnowledgeBaseURL(\n CustomerKnowledgeBase.VideoAnalyticsClipOtherClassification,\n this.contextManager\n );\n\n return [\n Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n cssClass: 'light-text',\n title: fnGetText('title'),\n content: [\n `

${fnGetText('message')}

`,\n `

${fnGetText(\n 'link'\n )}

`\n ],\n buttons: {\n next: {\n text: fnGetText('close', 'generic')\n }\n }\n })\n })\n ];\n }\n}\n","/**\n * Converts a given resolution string in the format widthxheight (e.g. \"1920x1080\")\n * to the total number of pixels represented by that resolution.\n *\n * @param resolution\n */\nexport function convertResolutionToPixelCount(resolution: string): number {\n verifyCorrectResolutionFormat(resolution);\n return getResolutionPixelCount(getResolutionDimensions(resolution));\n}\n\n/**\n * Converts a given resolution string in the format widthxheight (e.g. \"1920x1080\")\n * to an array of numbers representing the width and height.\n *\n * @param resolution\n */\nexport function getResolutionDimensions(resolution: string): number[] {\n verifyCorrectResolutionFormat(resolution);\n return resolution.split('x').map((str) => parseInt(str));\n}\n\n/**\n * Converts an array of numbers containing image resolution [width, height]\n * to the total number of pixels represented by that resolution.\n *\n * @param dimensions\n */\nexport function getResolutionPixelCount(dimensions: number[]): number {\n if (dimensions.length !== 2) {\n throw new Error(\n `Invalid resolution dimensions length. Expected 2 dimensions, got ${dimensions.length} dimensions.`\n );\n }\n\n return dimensions[0] * dimensions[1];\n}\n\n/**\n * Throws an error if a string is passed in that does not adhere to the\n * widthxheight resolution format.\n *\n * @param resolution\n */\nfunction verifyCorrectResolutionFormat(resolution: string): void {\n const resolutionRegex = /^\\d+x\\d+$/;\n\n if (!resolutionRegex.test(resolution)) {\n throw new Error(\n `Invalid resolution format: ${resolution}. Expected format is \"widthxheight\" (e.g., \"1920x1080\").`\n );\n }\n}\n","import FilterVideoClipResultsController from '../clips/filter-results-controller';\n\n/**\n * @classdesc\n * The base index controller for displaying a paginated list of saved video clips and snapshots.\n *\n * @class classes.video.gallery.FilterVideoMediaResultsController\n * @extends classes.video.clips.FilterVideoClipResultsController\n */\nexport default class FilterVideoMediaResultsController extends FilterVideoClipResultsController {}\n","// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport DS from 'ember-data';\nimport SnapshotEvent from 'customer-site/models/video/snapshot-event';\nimport FilterVideoClipResultsRoute from '../clips/filter-results-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\n/**\n * @classdesc\n * The base index route for displaying a paginated list of saved video clips and snapshots.\n *\n * @class classes.video.gallery.FilterVideoMediaResultsRoute\n * @extends classes.video.clips.FilterVideoClipResultsRoute\n */\nexport default class FilterVideoMediaResultsRoute extends FilterVideoClipResultsRoute {\n /**\n * @override\n */\n model(\n params: object,\n transition: Transition\n ): ModelFrom & { snapshotEvents: ADCAsyncStoreFindAll } {\n const model = super.model(params, transition);\n\n // Until we actually load this from the backend, we'll spoof images using existing clips.\n const snapshotEventsPromise = model.clips.then((resolvedClips) =>\n resolvedClips.map((clip) => SnapshotEvent.FromVideoEvent(this.store, clip))\n );\n\n return {\n ...model,\n snapshotEvents: DS.PromiseArray.create({ promise: snapshotEventsPromise }) as DS.PromiseArray\n };\n }\n}\n","import FilteringVideoClipsController from '../clips/filtering-controller';\n\n/**\n * @classdesc\n * The base controller for filtering saved video clips and snapshots.\n *\n * @class classes.video.gallery.FilteringVideoMediaController\n * @extends classes.video.clips.FilteringVideoClipsController\n */\nexport default class FilteringVideoMediaController extends FilteringVideoClipsController {}\n","import FilteringVideoClipsRoute from '../clips/filtering-route';\n\n/**\n * @classdesc\n * The base route for filtering saved video clips and snapshots.\n *\n * @class classes.video.gallery.FilteringVideoMediaRoute\n * @extends classes.video.clips.FilteringVideoClipsRoute\n */\nexport default class FilteringVideoMediaRoute extends FilteringVideoClipsRoute {}\n","import { tracked } from '@glimmer/tracking';\nimport { set } from '@ember/object';\nimport { computed } from '@ember/object';\n\n/**\n * An abstract class for representing a classification filter with one or more filter values.\n * This is helpful for selecting classification types that multiple values for familiar objects\n * e.g. AnyUnfamiliarVehicle + SpecificFamiliarVehicle\n */\nexport abstract class ClassificationFilter {\n @tracked declare value: number;\n @tracked declare label: string;\n @tracked declare icon?: string;\n @tracked declare isSelected: boolean;\n @tracked declare disabled: boolean;\n @tracked declare tooltip?: string;\n\n constructor() {\n this.disabled = false;\n }\n\n abstract setIsSelected(isSelected: boolean): void;\n\n /**\n * Is the filter selected?\n */\n abstract get state(): boolean;\n\n /**\n * The values that should be applied to the classification filter if\n * the filter's state is true\n */\n abstract get filters(): number[];\n\n /**\n * The list of familiar subject IDs selected for this filter, if any.\n * Filters that do not support familiar subjects will return an empty list.\n */\n abstract get subjectIds(): string[];\n}\n\n/**\n * Denotes a ClassificationFilter with a single value\n */\nexport class ValueFilter extends ClassificationFilter {\n /**\n * The Familiar Subject ID for this filter, if any\n */\n @tracked subjectId?: string;\n\n /**\n * Function to call when this filter's value is changed\n */\n onItemChange: (filters: ValueFilter[]) => void = () => {};\n\n constructor(args: Partial) {\n super();\n Object.assign(this, args ?? {});\n }\n\n setIsSelected(isSelected: boolean) {\n set(this, 'isSelected', isSelected);\n }\n\n setIsDisabled(disabled: boolean) {\n set(this, 'disabled', disabled);\n }\n\n @computed('isSelected')\n get state(): boolean {\n return this.isSelected;\n }\n\n @computed('value')\n get filters(): number[] {\n return [this.value];\n }\n\n @computed('subjectId')\n get subjectIds(): string[] {\n return this.subjectId ? [this.subjectId] : [];\n }\n}\n\n/**\n * Denotes a ClassificationValue that represents many values as defined by subItems\n */\nexport class CompositeFilter extends ClassificationFilter {\n @tracked subItems: ValueFilter[] = [];\n\n constructor(args: Partial) {\n super();\n Object.assign(this, args ?? {});\n }\n\n setIsSelected(isSelected: boolean) {\n set(this, 'isSelected', isSelected);\n\n // Unselect all subitems if the new value is false\n if (!isSelected) {\n this.subItems.forEach((i) => i.setIsSelected(isSelected));\n }\n }\n\n /**\n * Are any of this filter's sub-items selected?\n */\n @computed('isSelected', 'subItems')\n get state(): boolean {\n return this.subItems.some((i) => i.state) || this.isSelected;\n }\n\n /**\n * The list of filter values that are represented by all of this filter's selected sub items\n */\n @computed('state', 'subItems', 'value')\n get filters(): number[] {\n const filters = this.subItems\n .filterBy('state')\n .flatMap((i) => i.filters)\n .compact();\n\n return filters.length > 0 ? filters : [this.state ? this.value : undefined].compact(); // If no subitems are selected but this items is selected, return this item's filter value\n }\n\n /**\n * The list of subject IDs that are represented by all of this filter's selected sub items\n */\n @computed('subItems')\n get subjectIds(): string[] {\n return this.subItems.filterBy('state').flatMap((i) => i.subjectIds) ?? [];\n }\n}\n\n/**\n * Define a type for filter so either subtype of ClassificationFilter can be used when converting to\n * a BinaryListItem\n */\nexport type Filter = CompositeFilter & ValueFilter;\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport CookieManager from '@adc/app-infrastructure/services/cookie-manager';\nimport { VVClipItem } from '../video/clips/helpers/clip-management';\n\nimport type VideoEvent from 'customer-site/models/video/video-event';\nimport type VisualVerificationEvent from 'customer-site/models/visual-verification/event';\n\nconst cookieManager = new CookieManager();\n\n/**\n * @classdesc\n * Wrapper object for visual verification event\n */\nexport default class VisualVerificationItem {\n /**\n * The wrapped VV event model.\n *\n * @type {VisualVerificationEvent}\n */\n @tracked model: VisualVerificationEvent;\n\n /**\n * Indicates the context includes multiple systems from differing time zones.\n */\n @tracked showPreferredTimezone = false;\n\n /**\n * Indicates the highlight status\n */\n @tracked isHighlighted = false;\n\n /**\n * Indicates the clip is selected to toggle flagging.\n */\n @tracked isSelected = false;\n\n /**\n * After a snapshot turns to clip, the clips should have a blue-dot untill they are viewed.\n * Indicates weather the clip which initialy was a snapshot has been viewed.\n */\n @tracked hasBeenViewed = false;\n\n /**\n * This indicates if a snapshot visual verification item has an assosciated clip ready to replace it.\n */\n @tracked hasClip = false;\n\n /**\n * This should be true if the visual verification item representing an image has been replaced by a clip.\n */\n @tracked replacedByClip = false;\n\n constructor(model: VisualVerificationEvent, { showPreferredTimezone = false } = {}) {\n this.model = model;\n this.showPreferredTimezone = showPreferredTimezone;\n this.hasBeenViewed = JSON.parse(cookieManager.getEssentialCookie(model.eventId + 'hasBeenViewed') || 'false');\n }\n\n /**\n * The event time stamp.\n */\n @reads('model.timestamp')\n declare timestamp: Date;\n\n /**\n * The associated video event clip item.\n *\n * @type {BaseClipItem}\n */\n @computed('model.videoEvent', 'showPreferredTimezone')\n get clipItem(): VVClipItem | undefined {\n const { model } = this;\n if (!model.isVideoEvent) {\n return undefined;\n }\n\n return new VVClipItem(model, model.media as VideoEvent, {\n showPreferredTimezone: this.showPreferredTimezone,\n canDownload: false,\n canViewPictureInPicture: false\n });\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type ReportCatalogItem from 'customer-site/models/notifications/reports/report-catalog-item';\nimport type { BaseReportsRouteQueryParams } from '../index/base-reports-route';\nimport type ReportsCatalogController from './controller';\n\nexport type BaseCatalogRouteModel = {\n catalogItems: ADCAsyncStoreQuery;\n};\n\nconst queryParamsConfig = {\n reportType: {\n refreshModel: true,\n type: 'number'\n }\n};\n\nexport default class BaseReportsCatalogRoute extends AdcBaseRoute {\n @service declare store: Store;\n\n queryParams = queryParamsConfig;\n\n // The reportType is passed in as a queryParam from the commercial/reports/index controller when we transition from there to the catalog\n model({ reportType }: Pick): BaseCatalogRouteModel {\n const { store } = this,\n catalogItems = store.query('notifications/reports/report-catalog-item', {\n filter: { reportType }\n });\n return {\n catalogItems\n };\n }\n\n resetController(controller: ReportsCatalogController, isTransition: boolean, transition: Transition) {\n super.resetController(controller, isTransition, transition);\n (this.controllerFor(this.routeName) as ReportsCatalogController).resetQueryParams();\n }\n}\n","import EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { sort } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport type BaseReport from 'customer-site/models/notifications/reports/base-report';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseReportsRoute from './base-reports-route';\n\n/**\n * @classdesc View all reports.\n *\n * @class commercial.reports.BaseReportsController\n * @extends Ember.Controller\n */\nexport default abstract class BaseReportsController extends EmberController {\n @service declare contextManager: ContextManager;\n\n declare model: ModelFrom;\n\n /**\n * Specifies how to sort reports.\n *\n */\n @computed()\n get sortName(): string[] {\n return ['name'];\n }\n\n /**\n * Route ID for edit group page.\n *\n */\n abstract catalogRouteId: number;\n\n /**\n * What type of context the user is in (commercial for single-system, enterprise for group).\n *\n */\n abstract catalogRoutePrefix: string;\n\n /**\n * The list of reports, sorted by name\n *\n */\n @sort('model.reports', 'sortName')\n reports: Array | undefined;\n\n /**\n * Should the add link be visible?\n *\n */\n @computed('catalogRouteId')\n get showAddLink(): boolean {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n return !!this.contextManager.getRouteItem(this.catalogRouteId);\n }\n}\n","import { set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { finishAppLoad } from 'customer-site/application/route';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n EmberBusinessActivityAnalyticsReports,\n EmberPartitionReports,\n EmberReports,\n EmberSensorReports,\n EmberCommercialTemperatureReports,\n EmberThermostatReports,\n EmberWellnessReports,\n EmberConnectedFleetReports,\n EmberEnterpriseReports\n} from 'customer-site/enums/CustomerPageUrl';\nimport {\n BusinessActivityAnalytics,\n Fleet,\n Partitions,\n Sensors,\n Temperatures,\n Thermostats,\n Wellness\n} from 'customer-site/enums/WebReportType';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type Controller from 'customer-site/commercial/reports/index/controller';\nimport type BaseReport from 'customer-site/models/notifications/reports/base-report';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport type BaseReportsRouteModel = {\n reports: ADCStoreQuery;\n totalReportsCount: number;\n};\n\nexport interface BaseReportsRouteQueryParams {\n searchString: string;\n reportType: number;\n}\n\nconst queryParamsConfig = {\n // The search string is the text entered into the reports search bar. It's appended at the end of the url like \"?searchString=SOME_SEARCH\"\n searchString: {\n refreshModel: true,\n replace: true\n },\n reportType: {\n refreshModel: true,\n type: 'number'\n }\n};\n\nconst REPORT_TYPE_MAP: { [key: number]: number } = {\n [BusinessActivityAnalytics]: EmberBusinessActivityAnalyticsReports,\n [Fleet]: EmberConnectedFleetReports,\n [Partitions]: EmberPartitionReports,\n [Sensors]: EmberSensorReports,\n [Temperatures]: EmberCommercialTemperatureReports,\n [Thermostats]: EmberThermostatReports,\n [Wellness]: EmberWellnessReports\n};\n\n/**\n * @classdesc List of Reports, base route for reports pages\n */\nexport default class BaseReportsRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n queryParams = queryParamsConfig;\n\n beforeModel(transition: Transition) {\n const { reportType } = this.paramsFor(this.routeName) as BaseReportsRouteQueryParams,\n { contextManager } = this;\n set(\n this,\n 'routeId',\n REPORT_TYPE_MAP[reportType] || (contextManager.isEnterprise ? EmberEnterpriseReports : EmberReports)\n );\n\n return super.beforeModel(transition);\n }\n\n async model(params: BaseReportsRouteQueryParams): Promise {\n const { store } = this,\n reports: ADCStoreQuery = await store.query('notifications/reports/base-report', {\n filter: params\n }),\n totalReportsCount = reports.meta.totalReportsCount;\n\n return {\n reports,\n totalReportsCount\n };\n }\n\n afterModel() {\n finishAppLoad();\n }\n\n setupController(controller: Controller, model: BaseReportsRouteModel, transition: Transition): void {\n super.setupController(controller, model, transition);\n set(controller, 'totalReportsCount', model.totalReportsCount);\n }\n\n resetController(controller: Controller, isTransition: boolean, transition: Transition) {\n super.resetController(controller, isTransition, transition);\n (this.controllerFor(this.routeName) as Controller).resetQueryParams();\n }\n}\n","import EmberController from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\n\n/**\n * @classdesc\n *\n * Controller for editing temperature sensor groups.\n */\nexport default class BaseTemperatureController extends EmberController {\n legalThresholds(lowerThreshold: string | number | null, upperThreshold: string | number | null): boolean {\n const lowerThresholdConverted = Number(lowerThreshold),\n upperThresholdConverted = Number(upperThreshold);\n\n // first make sure that they fit in an int32\n // they're allowed to have either or both of the thresholds set to null\n // so we only need to check that low < high if both thresholds are non-null\n // they shouldn't be undefined\n return (\n Number.isInteger(lowerThresholdConverted) &&\n Number.isInteger(upperThresholdConverted) &&\n lowerThresholdConverted > -0x7fffffff &&\n upperThresholdConverted < 0x7fffffff &&\n (isEmpty(lowerThreshold) || isEmpty(upperThreshold) || lowerThresholdConverted < upperThresholdConverted)\n );\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.usersDetails}}\\n
\\n \\n {{this.usersDetails.count}}\\n
\\n {{/if}}\\n\\n {{#each this.detailsToRender as |row|}}\\n
\\n \\n
{{if @accessPlan.isAllAccess (t \\'generic.all\\') row.count}}
\\n
\\n {{/each}}\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/item/access-plan-details-compact/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { computed } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseAccessPlanDetails from '../base-access-plan-details/index';\n\nimport type { BaseAccessPlanDetailsSignature } from '../base-access-plan-details/index';\nimport type { AccessPlanDetailRowType, ActiveAccessPoint } from '../base-access-plan-details/index';\nimport './_style.scss';\n\ninterface AccessPlanDetailsCompactSignature extends BaseAccessPlanDetailsSignature {\n Args: BaseAccessPlanDetailsSignature['Args'] & {\n isMobileListView: boolean;\n };\n}\n\n/**\n * Displays the active access details of an access plan.\n */\n@intlPath({ path: 'access-control/access-plans/item/access-plan-details-compact' })\nexport default class AccessPlanDetailsCompact extends BaseAccessPlanDetails {\n /**\n * Details about the access plans users.\n */\n @computed('args.accessPlan.users')\n get usersDetails(): { count: number; icon: string } | undefined {\n const accessPlan = this.args.accessPlan;\n\n if (!accessPlan) {\n return undefined;\n }\n\n return {\n count: accessPlan.hasMany('users').ids().length,\n icon: 'feature-users'\n };\n }\n\n @computed('args.accessPlan.{accessPoints.@each.deviceType}', 'args.planDetailTotals', 'accessPointsDetails')\n get detailsToRender(): AccessPlanDetailRowType[] {\n const { accessPlan } = this.args;\n\n if (!accessPlan || accessPlan.isDestroying || accessPlan.isDestroyed) {\n return [];\n }\n\n return (['partitions', 'locks', 'doors', 'elevators'] as ActiveAccessPoint[])\n .map((accessPointType) => {\n return this.accessPointsDetails[accessPointType];\n })\n .rejectBy('hidden');\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::AccessPlanDetailsCompact': typeof AccessPlanDetailsCompact;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{!-- Users --}}\\n {{#if (and this.usersUntouched @accessPlan.canModifyUsers @updateEditState)}}\\n \\n {{else}}\\n
\\n
{{tc this \\'users\\'}}
\\n

\\n \\n \\n {{t \\'generic.access-control.xOfYUsers\\' x=this.usersCount y=(if @planDetailTotals.userTotal @planDetailTotals.userTotal 0)}}\\n \\n

\\n
\\n {{/if}}\\n\\n {{!-- User Types --}}\\n {{#if this.canModifyUserTypes}}\\n {{#if (and this.userTypesUntouched @updateEditState)}}\\n \\n {{else if @accessPlan.isNew}}\\n
\\n
{{tc this \\'associatedUserTypes\\'}}
\\n

\\n \\n {{tc this \\'xOfYUserTypes\\' x=@accessPlan.userTypes.length y=(if @planDetailTotals.userTypeTotal @planDetailTotals.userTypeTotal 0)}} \\n

\\n
\\n {{/if}}\\n {{/if}}\\n\\n {{!-- Access Points --}}\\n {{#if (and this.accessPointsUntouched @accessPlan.canModifyAccessPoints @updateEditState)}}\\n \\n {{else}}\\n {{#each this.detailsToRender as |detailsSection|}}\\n
\\n
\\n
\\n
{{detailsSection.title}}
\\n {{#each detailsSection.detailRows as |detailRow|}}\\n

\\n \\n \\n {{detailRow.text}}\\n \\n

\\n {{/each}}\\n
\\n {{#if detailsSection.useRestrictedAccessUI}}\\n
\\n \\n
{{t \\'generic.access-control.restrictedAccess\\'}}
\\n
{{t \\'generic.enabled\\'}}
\\n \\n
\\n {{!-- Popover tooltip explaining restricted access --}}\\n \\n

{{t \\'generic.access-control.restrictedAccessPopoverText\\'}}

\\n \\n {{/if}}\\n
\\n
\\n {{/each}}\\n {{#if (and @accessPlan.isNew @accessPlan.isAllAccess)}}\\n

{{tc this \\'allAccessAutomaticAdjustment\\'}}

\\n {{/if}}\\n {{/if}}\\n\\n {{!-- Schedule --}}\\n {{#if this.showTimeTables}}\\n {{#if (and this.timetablesUntouched @updateEditState)}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/item/access-plan-details/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Expired, Pending } from 'customer-site/enums/AccessPlanAccessStatus';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseAccessPlanDetails from '../base-access-plan-details/index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { AccessPlanEditState } from '../../edit/base/index';\nimport type { BaseAccessPlanDetailsSignature } from '../base-access-plan-details/index';\nimport type { AccessPointDetailSectionType, ActiveAccessPoint } from '../base-access-plan-details/index';\nimport './_style.scss';\n\n/**\n * Determines if a collection is \"untouched\".\n */\nfunction isCollectionUntouched(\n this: AccessPlanDetails,\n collection: 'users' | 'userTypes' | 'accessPoints' | 'timetables'\n): boolean {\n return (\n (get(this.args.accessPlan, 'isNew') && this.args.canEdit && get(this.args.accessPlan, collection).length) === 0\n );\n}\n\ninterface AccessPlanDetailsSignature extends BaseAccessPlanDetailsSignature {\n Args: BaseAccessPlanDetailsSignature['Args'] & {\n canEdit: boolean;\n canViewTimeTables: boolean;\n showRestrictedAccessUI: boolean;\n updateEditState: (state: AccessPlanEditState) => void;\n planStatusClass: string;\n };\n}\n\n/**\n * Displays the active access details of an access plan.\n */\n@intlPath({ path: 'access-control/access-plans/item/access-plan-details' })\nexport default class AccessPlanDetails extends BaseAccessPlanDetails {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n\n /**\n * Detail sections for the access points on this access plan.\n */\n @computed(\n 'args.accessPlan.{accessPoints.@each.deviceType}',\n 'args.planDetailTotals',\n 'accessPointsDetails',\n 'detailsUsesRestrictedAccessUI'\n )\n get detailsToRender(): Array {\n const { accessPlan } = this.args;\n\n if (!accessPlan || accessPlan.isDestroying || accessPlan.isDestroyed) {\n return [];\n }\n\n return [\n ['twentyFourSevenAccessPoints', ['partitions', 'locks']],\n ['scheduledAccessPoints', ['doors', 'elevators']]\n ]\n .map(([title, deviceTypes]: [string, ActiveAccessPoint[]]) => {\n const detailRows = deviceTypes\n .map((deviceType) => this.accessPointsDetails[deviceType])\n .filter((item) => !item.hidden);\n\n return {\n title: this.intl.t(`generic.access-control.${title}`),\n isVisible: !!detailRows.length,\n useRestrictedAccessUI: this.detailsUsesRestrictedAccessUI[title],\n detailRows\n };\n })\n .filter((item) => item.isVisible);\n }\n\n @computed('args.showRestrictedAccessUI')\n get detailsUsesRestrictedAccessUI(): Record {\n return {\n twentyFourSevenAccessPoints: false,\n scheduledAccessPoints: this.args.showRestrictedAccessUI\n };\n }\n\n /**\n * The number of users in the access plan.\n */\n @computed('args.accessPlan.users.[]')\n get usersCount(): number {\n return this.args.accessPlan.hasMany('users').ids().length;\n }\n\n /**\n * Whether or not the restricted access status popover should be displayed.\n */\n @tracked showPopover = false;\n\n /**\n * Toggles the restricted access status popover.\n */\n @action\n togglePopover(mouseEvent: Event): void {\n mouseEvent.stopPropagation();\n this.showPopover = !this.showPopover;\n }\n\n /**\n * Users are untouched if this access plan is new and the user hasn't added any users to the plan\n */\n @computed('args.accessPlan.{isNew,users.[]}')\n get usersUntouched(): boolean {\n return isCollectionUntouched.call(this, 'users');\n }\n\n get canModifyUserTypes(): boolean {\n const { identityManager } = this;\n return identityManager.isPointCentralAccessControl && identityManager.isEnterprise;\n }\n\n /**\n * User types are untouched if this access plan is new and the user hasn't added any user types to the plan\n */\n @computed('args.accessPlan.{isNew,userTypes.[]}')\n get userTypesUntouched(): boolean {\n return isCollectionUntouched.call(this, 'userTypes');\n }\n\n /**\n * Access points are untouched if this access plan is new and the user hasn't added any access points to the plan\n */\n @computed('args.accessPlan.{isNew,accessPoints.[]}')\n get accessPointsUntouched(): boolean {\n return isCollectionUntouched.call(this, 'accessPoints');\n }\n\n /**\n * Timetables are untouched if this access plan is new and the user hasn't added any timetables to the plan}\n */\n @computed('args.accessPlan.{isNew,timetables.[]}')\n get timetablesUntouched(): boolean {\n return isCollectionUntouched.call(this, 'timetables');\n }\n\n /**\n * Should timetables be displayed for access plan details. Displayed by default unless a false value for CanViewTimeTables is passed.\n * This is done to make canViewTimeTables variable an optional parameter that the caller passes in.\n */\n @computed('args.canViewTimeTables')\n get showTimeTables(): boolean {\n const { canViewTimeTables } = this.args;\n\n return canViewTimeTables != null ? canViewTimeTables : true;\n }\n\n @computed('args.accessPlan.accessPlanAccessStatus')\n get isPlanInactive(): boolean {\n const accessPlanStatus = this.args.accessPlan.accessPlanAccessStatus;\n return accessPlanStatus == Pending || accessPlanStatus == Expired;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::AccessPlanDetails': typeof AccessPlanDetails;\n }\n}\n","import Component from '@glimmer/component';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { camelize, capitalize } from '@ember/string';\nimport { htmlSafe } from '@ember/template';\nimport { DefaultOperatingMode } from 'customer-site/enums/MercuryControllerOperatingMode';\nimport { AccessCardReader, Partition, ZwaveLock } from '../../../../../enums/DeviceType';\nimport { getScheduleObjectsArray } from '../../row/base-access-plan/index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type { SafeString } from '@ember/template/-private/handlebars';\nimport type { PlanDetailsTotalKey } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\n\nexport type ActiveAccessPoint = 'partitions' | 'doors' | 'locks' | 'elevators';\n\n/**\n * Default value for access plan detail total to display while totals are loading.\n */\nconst DEFAULT_PLAN_DETAIL_TOTAL_VAL = ' ';\n\n/**\n * Defaults for totals that are used when data has not been loaded yet.\n */\nconst DEFAULT_PLAN_DETAIL_TOTALS = {\n partitionTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n doorTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n lockTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n userTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n elevatorTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n userTypeTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n ebsPanelTotal: DEFAULT_PLAN_DETAIL_TOTAL_VAL\n};\n\n/**\n * Get the access point details rows.\n */\nexport function getAccessPointDetailRows(\n this: { intl: ADCIntlService },\n accessPlan: AccessControlAccessPlanModel,\n planDetailTotals: Record\n): Record {\n // Map the list of active and all access points into objects which group by the device type of the access point.\n const [activeAccessPoints] = [accessPlan.get('accessPoints')].map((accessPoints) => ({\n partitions: accessPoints.filter((ap) => ap.deviceType === Partition),\n doors: accessPoints.filter((ap) => ap.deviceType === AccessCardReader && !ap.isElevatorReader),\n locks: accessPoints.filter((ap) => ap.deviceType === ZwaveLock),\n elevators: accessPoints.filter((ap) => ap.isElevatorReader === true)\n })),\n activePartitionsCount = activeAccessPoints.partitions.length,\n { partitionTotal, doorTotal, lockTotal, elevatorTotal, ebsPanelTotal } =\n planDetailTotals || DEFAULT_PLAN_DETAIL_TOTALS,\n { intl } = this,\n isAllAccessWithDefaultOperatingMode =\n accessPlan.isAllAccess && accessPlan.operatingModes.includes(DefaultOperatingMode);\n\n let key = '',\n tokens;\n\n // Is there only one partition?\n if (partitionTotal === 1) {\n // It is a panel so display specific text.\n key =\n 'generic.access-control.' +\n camelize(\n `${\n activePartitionsCount || (isAllAccessWithDefaultOperatingMode && ebsPanelTotal < 1) ? '' : 'no-'\n }security-panel-access`\n );\n // Are there multiple partitions?\n } else if (partitionTotal > 1) {\n // Show '{count} of {total} partitions'.\n key = 'generic.access-control.xOfYPartitions';\n tokens = { x: activePartitionsCount, y: partitionTotal };\n }\n\n const createDetailRow = (\n acc: Record,\n [type, icon, text, total]: [ActiveAccessPoint, string, string, number | string]\n ): Record => {\n const count = get(activeAccessPoints, type).length;\n\n acc[type] = {\n count,\n disabled:\n // If we are in an all-access plan with no partition access but we have EBS panels (which are never included in the plan), we should still grey out the text.\n count === 0 &&\n !(isAllAccessWithDefaultOperatingMode && (type === 'partitions' ? ebsPanelTotal < 1 : true)),\n hidden: total === 0 || total === DEFAULT_PLAN_DETAIL_TOTAL_VAL,\n icon,\n text: htmlSafe(\n text || intl.t(`generic.access-control.xOfY${capitalize(type)}`, { x: String(count), y: String(total) })\n )\n };\n\n return acc;\n };\n\n // If this is an all-access plan, we just want to show 'All' rather than a count.\n // If we have an ebs communicator then display the count like normal regardless.\n const predefinedPartitionText =\n isAllAccessWithDefaultOperatingMode && ebsPanelTotal < 1 ? intl.t('generic.all') : null,\n predefinedText = isAllAccessWithDefaultOperatingMode ? intl.t('generic.all') : null;\n\n return [\n ['partitions', 'system', predefinedPartitionText || (key ? htmlSafe(intl.t(key, tokens)) : ''), partitionTotal],\n ['locks', 'lock', predefinedText, lockTotal],\n ['doors', 'door-open', predefinedText, doorTotal],\n ['elevators', 'user-control-elevator', predefinedText, elevatorTotal]\n ].reduce(createDetailRow, {} as Record);\n}\n\nexport interface AccessPlanDetailRowType {\n count: number;\n disabled: boolean;\n hidden: boolean;\n icon: string;\n text: string | SafeString;\n}\n\nexport interface AccessPointDetailSectionType {\n detailRows: Array;\n isVisible: boolean;\n title: string;\n useRestrictedAccessUI: boolean;\n}\n\nexport interface BaseAccessPlanDetailsSignature {\n Args: {\n accessPlan: AccessControlAccessPlanModel;\n planDetailTotals: Record;\n };\n}\n\n/**\n * Base active access details component of an access plan.\n */\nexport default class BaseAccessPlanDetails<\n T extends BaseAccessPlanDetailsSignature = BaseAccessPlanDetailsSignature\n> extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * Schedule objects to render in the schedule grids\n */\n @computed('args.accessPlan')\n get scheduleObjects(): Array<{\n id: string;\n colorName: string;\n timetables: AsyncHasMany;\n }> {\n return getScheduleObjectsArray.call(this);\n }\n\n @computed('args.accessPlan.{accessPoints.@each.deviceType}', 'args.planDetailTotals')\n get accessPointsDetails(): Record {\n return getAccessPointDetailRows.call(this, this.args.accessPlan, this.args.planDetailTotals);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::BaseAccessPlanDetails': typeof BaseAccessPlanDetails;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n

{{@accessPlan.name}}

\\n {{#unless @titleOnly}}\\n

\\n \\n

\\n {{/unless}}\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/item/card/header/details/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { MINUTES_IN_WEEK } from '@adc/ember-utils/constants/time';\nimport { action, computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport { type Registry as ServiceRegistry } from '@ember/service';\nimport { ModifyUsers } from 'customer-site/enums/AccessPlanPropertyEdit';\nimport { getAccessPlanEditRouteId } from '../../../../row/base-access-plan/index';\nimport { type BaseAccessPlanRowSignature } from '../../../../row/base-access-plan/index';\n\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\n\ninterface AccessPlanCardHeaderDetailsSignature {\n Args: Pick & {\n temporaryAccessPlanScheduleText?: string;\n showUsersHyperlink?: boolean;\n titleOnly?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default class AccessPlanCardHeaderDetailsComponent extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n\n @computed('args.accessPlan.id')\n get id(): number {\n return Number(this.args.accessPlan.id);\n }\n\n @computed('args.accessPlan.timetables')\n get timetable(): AccessControlTimetable | undefined {\n const timetables = this.args.accessPlan.timetables ?? [];\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error We should await the timetables before accessing.\n return timetables.length > 0 ? timetables[0] : undefined;\n }\n\n /**\n * The number of users in the access plan.\n */\n @computed('args.accessPlan.users.[]')\n get usersCount(): number | undefined {\n return this.args.accessPlan.hasMany('users').ids().length;\n }\n\n @computed('timetable.startDate')\n get startDate(): string {\n const date = this.timetable?.startDate;\n\n if (date) {\n const formattedDate = new Date(date),\n fmtStartDate = this.intl.formatDateTz(formattedDate, {\n month: '2-digit',\n year: 'numeric',\n day: '2-digit'\n });\n\n return fmtStartDate;\n }\n return '';\n }\n\n @computed('timetable.endDate')\n get endDate(): string {\n const date = this.timetable?.endDate;\n\n if (date) {\n const formattedDate = new Date(date),\n fmtEndDate = this.intl.formatDateTz(formattedDate, {\n month: '2-digit',\n year: 'numeric',\n day: '2-digit'\n });\n\n return fmtEndDate;\n }\n return '';\n }\n\n @computed('timetable', 'fullTemporaryAccessDateRange', 'startOnlyText', 'endOnlyText', 'customTimesString')\n get headerTag(): string {\n const { timetable, intl, startDate, endDate } = this,\n fullTemporaryAccessDateRange = startDate + ' - ' + endDate,\n startOnlyText = intl.t('generic.startOnlyText') + ' ' + startDate,\n endOnlyText = intl.t('generic.endOnlyText') + ' ' + endDate;\n\n if (timetable?.startDate) {\n return timetable.endDate ? fullTemporaryAccessDateRange : startOnlyText;\n }\n\n return timetable?.endDate ? endOnlyText : this.customTimesString;\n }\n\n @computed('timetable')\n get customTimesString(): string {\n const { timetable } = this,\n first_block = timetable?.scheduleDictionary[0],\n total_minutes = first_block ? first_block.endMinutesLocal - first_block.startMinutesLocal : 0;\n\n return this.intl.t(\n total_minutes === MINUTES_IN_WEEK ? 'generic.allTimes' : 'generic.access-control.customTimesSchedule'\n );\n }\n\n @computed('startDate', 'endDate', 'headerTag')\n get temporaryAccessPlanScheduleText(): string | undefined {\n return this.startDate || this.endDate ? this.headerTag : undefined;\n }\n\n @action editUsers(): void {\n const { operatingModes, id = '0' } = this.args.accessPlan;\n\n this.contextManager.transitionToNativeRoute(\n getAccessPlanEditRouteId(operatingModes, this.identityManager.isEnterprise),\n id,\n { property: ModifyUsers }\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::Card::Header::Details': typeof AccessPlanCardHeaderDetailsComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n
{{t \\'generic.access-control.restrictedAccess\\'}}
\\n
{{t \\'generic.enabled\\'}}
\\n \\n
\\n\\n\\n

{{t \\'generic.access-control.restrictedAccessPopoverText\\'}}

\\n\",{ moduleName: \"customer-site/components/settings/restricted-access-settings/popover/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\ninterface RestrictedAccessPopoverSignature {}\n\nexport default class RestrictedAccessPopoverComponent extends Component {\n /**\n * Whether or not the restricted access status popover should be displayed.\n */\n @tracked showPopover = false;\n\n /**\n * Toggles the restricted access status popover.\n */\n @action togglePopover(mouseEvent: Event): void {\n mouseEvent.stopPropagation();\n this.showPopover = !this.showPopover;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Settings::RestrictedAccessSettings::Popover': typeof RestrictedAccessPopoverComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if @planStatusAndIcon}}\\n \\n {{/if}}\\n {{#if @showRestrictedAccessPopover}}\\n \\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/item/card/header/secondary/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { AccessPlanCardHeaderSignature } from '../index';\n\ninterface AccessPlanCardHeaderSecondarySignature {\n Args: {\n planStatusAndIcon?: AccessPlanCardHeaderSignature['Args']['planStatusAndIcon'];\n showRestrictedAccessPopover?: boolean;\n };\n}\n\nconst AccessPlanCardHeaderSecondaryComponent = templateOnlyComponent();\nexport default AccessPlanCardHeaderSecondaryComponent;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::Card::Header::Secondary': typeof AccessPlanCardHeaderSecondaryComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n \\n\\n \\n\\n {{#if (has-block)}}\\n {{yield}}\\n {{else}}\\n {{#if (and @useStatusPill @planStatusAndIcon @planStatusAndIcon.status (not @useSecondaryHeader))}}\\n \\n {{/if}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if @useSecondaryHeader}}\\n \\n {{/if}}\\n\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/item/card/header/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport { type Registry as ServiceRegistry } from '@ember/service';\nimport {\n ModifyUsers,\n ModifyAccessPoints,\n ModifyPlanName,\n ModifyTimetables,\n ModifyUserTypes\n} from 'customer-site/enums/AccessPlanPropertyEdit';\nimport { RestrictedAccessOperatingMode } from 'customer-site/enums/MercuryControllerOperatingMode';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport { getAccessPlanEditRouteId } from '../../../row/base-access-plan/index';\nimport { type AccessPlanStatusAndIcon, type BaseAccessPlanRowSignature } from '../../../row/base-access-plan/index';\n\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport './_style.scss';\n\ntype LinkItem = string | boolean | (() => any);\n\nexport interface AccessPlanCardHeaderSignature {\n Element: HTMLHeadElement;\n Args: Pick & {\n temporaryAccessPlanScheduleText?: string;\n planStatusAndIcon?: AccessPlanStatusAndIcon;\n canBeDeleted?: boolean;\n showUsersHyperlink?: boolean;\n showRestrictedAccessUI?: boolean;\n hideDetails?: boolean;\n canEditTimetables?: boolean;\n useSecondaryHeader?: boolean;\n useStatusPill?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\n/**\n * Delete the specified access plan.\n */\nexport function deleteAccessPlanWithWarningModal(\n accessPlan: AccessControlAccessPlanModel,\n intl: ServiceRegistry['adc-intl'],\n modals: ServiceRegistry['modals'],\n notificationManager: ServiceRegistry['notification-manager'],\n afterSuccess?: () => void\n): void {\n const translationPath = 'generic.access-control.',\n accessPlanName = { accessPlanName: accessPlan.name };\n\n // Create confirmation dialog promise.\n modals.showConfirmationDialog(\n intl.t(`${translationPath}deleteAccessPlanTitle`),\n intl.t(`${translationPath}confirmDelete`, accessPlanName),\n {\n text: intl.t('generic.delete'),\n css: 'btn-color-danger',\n action: async () => {\n try {\n await accessPlan.destroyRecord();\n notificationManager.addSuccess(intl.t(`${translationPath}accessPlanDeleted`, accessPlanName));\n afterSuccess?.();\n } catch (ex) {\n accessPlan.rollback();\n }\n }\n }\n );\n}\n\nexport default class AccessPlanCardHeaderComponent extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare modals: ServiceRegistry['modals'];\n\n /**\n * The number of users in the access plan.\n */\n @computed('args.accessPlan')\n get usersCount(): number {\n return this.args.accessPlan.hasMany('users').ids().length;\n }\n\n @computed('args.canBeDeleted')\n get canBeDeleted(): boolean {\n const { canBeDeleted } = this.args;\n return canBeDeleted !== undefined ? canBeDeleted : true;\n }\n\n /**\n * Generate access plan edit options.\n */\n @computed('args.accessPlan', 'canBeDeleted')\n get toolsDropdownItems(): Array {\n const { identityManager } = this,\n { accessPlan, canEditTimetables = true } = this.args,\n canModifyUserTypes = identityManager.isPointCentralAccessControl && identityManager.isEnterprise;\n\n const accessPlanId = accessPlan?.id ?? 0,\n path = 'components.access-control.access-plans.',\n itemPath = `${path}edit.`,\n thisPath = 'generic.access-control.';\n\n const options: Record = {\n [ModifyUsers]: [accessPlan.canModifyUsers, 'user', 'generic.users'],\n [ModifyAccessPoints]: [accessPlan.canModifyAccessPoints, 'user-control-open', `${thisPath}accessPoints`],\n [ModifyPlanName]: [true, 'user-control-plan', `${itemPath}name.nameAndIcon`],\n [ModifyUserTypes]: [canModifyUserTypes, 'property-group', `${itemPath}user-types.community`],\n [ModifyTimetables]: [canEditTimetables && accessPlan.canModifySchedules, 'schedule', 'generic.schedule']\n };\n\n // Create links for editing the properties on a plan.\n const links: LinkItem[][] = Object.entries(options).map(([property, [test, icon, ...translationKeys]]) => {\n const routeEnum = getAccessPlanEditRouteId(accessPlan.operatingModes, identityManager.isEnterprise);\n\n return [\n test,\n () => this.contextManager.transitionToNativeRoute(routeEnum, accessPlanId, { property }),\n icon,\n this.intl.t(...translationKeys)\n ];\n });\n\n // Create a delete plan link.\n if (this.canBeDeleted) {\n links.push([true, () => this.deleteAccessPlan(accessPlan), 'trash', this.intl.t(`${thisPath}deletePlan`)]);\n }\n\n return links\n .filter((linkItem) => linkItem[0])\n .map(([, action, icon, name = icon]: [boolean, () => any, string, string]) =>\n DropdownActionItem.create({ icon, name, action })\n );\n }\n\n /**\n * Deletes the specified access plan.\n */\n @action deleteAccessPlan(accessPlan: AccessControlAccessPlanModel): void {\n // If a delete function is passed into the arguments, use it\n if (this.args.deleteAccessPlan === undefined) {\n deleteAccessPlanWithWarningModal(accessPlan, this.intl, this.modals, this.notificationManager);\n } else {\n this.args.deleteAccessPlan(accessPlan);\n }\n }\n\n /**\n * Should the \"Restricted Access Enabled\" text be displayed for the access plan?\n */\n @computed('args.{accessPlan,showRestrictedAccessUI}')\n get displayRestrictedAccessEnabled(): boolean {\n const { accessPlan, showRestrictedAccessUI } = this.args;\n\n return (\n !!showRestrictedAccessUI &&\n !accessPlan.isAllAccess &&\n !accessPlan.isPersonalAccessPlan &&\n !accessPlan.operatingModes.includes(RestrictedAccessOperatingMode)\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::Card::Header': typeof AccessPlanCardHeaderComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: The fact that @item can be multiple types is freaking glint out, please fix. }}\\n
\\n {{#if @usePairedAccessPlansUI}}\\n \\n {{#if @item.accessPlanRight}}\\n \\n {{/if}}\\n {{else}}\\n \\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/row/access-plan-scrolling-row/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { ButtonNativeSignature } from '@adc/ui-components/components/button/native';\nimport type { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type { PairedAccessPlans } from '../../list/access-plan-scrolling-list/index';\n\nexport interface AccessPlanScrollingRowSignature {\n Element: HTMLDivElement;\n Args: Pick & {\n item: AccessControlAccessPlanModel | PairedAccessPlans;\n planDetailTotals?: Awaited>;\n isListView?: boolean;\n useStatusPillUI?: boolean;\n showRestrictedAccessUI?: boolean;\n usePairedAccessPlansUI?: boolean;\n deleteAction?: (accessPlan: AccessControlAccessPlanModel) => void;\n };\n}\n\nconst AccessPlanScrollingRow = templateOnlyComponent();\nexport default AccessPlanScrollingRow;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Row::AccessPlanScrollingRow': typeof AccessPlanScrollingRow;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if @usePairedAccessPlansUI}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/if}}\\n\\n \\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/list/access-plan-scrolling-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { A } from '@ember/array';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { deleteAccessPlanWithWarningModal } from '../../item/card/header/index';\n\nimport type { ButtonNativeSignature } from '@adc/ui-components/components/button/native';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type {\n getAccessControlPermissions,\n getRestrictedAccessSetting\n} from 'customer-site/classes/access-control/access-plans/base-index-route';\nimport type { AccessPlansQueryParams } from 'customer-site/classes/access-control/access-plans/filtering-controller';\nimport type { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport './_style.scss';\n\ninterface AccessPlanScrollingListSignature {\n Args: Pick & {\n totalCount: number;\n resetItems: VoidFunction;\n initialData?: Awaited>;\n planDetailTotals?: Awaited>;\n permissions?: Awaited>;\n restrictedAccessSetting?: Awaited>;\n isListView?: boolean;\n usePairedAccessPlansUI?: boolean;\n filterParams?: AccessPlansQueryParams;\n };\n}\n\nexport interface PairedAccessPlans {\n accessPlanLeft: AccessControlAccessPlanModel;\n accessPlanRight?: AccessControlAccessPlanModel;\n}\n\ntype PairedAccessPlanDynamicArray = ReturnType>;\ntype AccessPlanDynamicArray = ReturnType>;\n\nconst ACCESS_PLAN_LIST_VIEW_ROW_HEIGHT = 45;\nconst ACCESS_PLAN_CARD_VIEW_ROW_HEIGHT = 500;\n\nconst DEFAULT_BATCH_SIZE = 20;\n\nfunction createPairedAccessPlans(accessPlans: AccessControlAccessPlanModel[]): PairedAccessPlanDynamicArray {\n return A(\n accessPlans\n .reduce((accumulator: AccessControlAccessPlanModel[][], _, idx, arr) => {\n if (idx % 2 === 0) {\n accumulator.push(arr.slice(idx, idx + 2));\n }\n return accumulator;\n }, [])\n .map(([accessPlanLeft, accessPlanRight]) => ({ accessPlanLeft, accessPlanRight }))\n );\n}\n\nexport function loadAccessPlansBatched(\n store: ServiceRegistry['store'],\n filterParams?: AccessPlansQueryParams,\n batchSize = DEFAULT_BATCH_SIZE,\n startIndex = 0\n): ADCAsyncStoreQuery {\n const { search = '', accessPoints = [] } = filterParams ?? {};\n\n return store.query('access-control/access-control-access-plan', {\n search,\n accessPoints,\n startIndex,\n batchSize\n });\n}\n\nexport default class AccessPlanScrollingList extends Component {\n @service declare store: ServiceRegistry['store'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n\n accessPlans = A(this.args.initialData?.toArray());\n pairedAccessPlans = createPairedAccessPlans(this.args.initialData?.toArray() ?? []);\n\n @alias('accessPlans.length')\n declare accessPlansIndex: number;\n\n get rowHeightEstimate(): number {\n return this.args.isListView ? ACCESS_PLAN_LIST_VIEW_ROW_HEIGHT : ACCESS_PLAN_CARD_VIEW_ROW_HEIGHT;\n }\n\n @action\n initialDataChanged(): void {\n const { initialData } = this.args;\n\n // Reset data\n Object.assign(this, {\n accessPlans: A(initialData?.toArray()),\n pairedAccessPlans: createPairedAccessPlans(initialData?.toArray() ?? [])\n });\n }\n\n @action async loadMoreAccessPlansAction(): Promise {\n if (this.accessPlansIndex < this.args.totalCount) {\n this.loadMoreAccessPlans.perform();\n }\n }\n\n loadMoreAccessPlans = task({ enqueue: true }, async () => {\n // Get new batch of access plans\n const accessPlans = await loadAccessPlansBatched(\n this.store,\n this.args.filterParams,\n DEFAULT_BATCH_SIZE,\n this.accessPlansIndex\n );\n\n if (!accessPlans || accessPlans.length === 0) {\n // No new plans, do nothing\n return;\n }\n\n let newAccessPlans = accessPlans.slice();\n\n if (this.args.usePairedAccessPlansUI) {\n // As long as the batch size is even, this probably won't happen\n if (this.accessPlansIndex % 2 !== 0) {\n newAccessPlans = this.handleOddPlanCount(this.pairedAccessPlans, newAccessPlans);\n }\n\n // Add new rows\n this.pairedAccessPlans.pushObjects(createPairedAccessPlans(accessPlans.toArray()));\n }\n\n this.accessPlans.pushObjects(newAccessPlans);\n });\n\n @action\n delete(accessPlan: AccessControlAccessPlanModel): void {\n deleteAccessPlanWithWarningModal(accessPlan, this.intl, this.modals, this.notificationManager, () => {\n this.args.resetItems();\n });\n }\n\n private handleOddPlanCount(\n pairedAccessPlans: PairedAccessPlanDynamicArray,\n newAccessPlans: AccessPlanDynamicArray\n ): AccessPlanDynamicArray {\n if (!newAccessPlans || newAccessPlans.length === 0) {\n // No new plans, do nothing\n return A([]);\n }\n\n // Index of the last paired access plan is half the number of access plans, rounded down\n const idx = Math.floor(this.accessPlansIndex / 2);\n\n // In the case of an odd number of plans, the last pair will only\n // have an access plan on the left. So we need to set the first new\n // access plan to be the right side of that pair.\n const lastRow = pairedAccessPlans[idx];\n\n // remove singleton pair from the list of pair\n pairedAccessPlans.removeAt(idx);\n\n // complete pair using the first new access plan and re-add\n // to the list of pairs, causing it to re-render with the\n // new right-side element\n lastRow.accessPlanRight = newAccessPlans[0];\n pairedAccessPlans.pushObject(lastRow);\n\n // return the remaining new access plans to process\n return A(newAccessPlans.slice(1));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::List::AccessPlanScrollingList': typeof AccessPlanScrollingList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n\\n
\\n {{#if @isMobileListView}}\\n \\n {{else}}\\n \\n {{/if}}\\n
\\n {{#if (and @isOldEditComponent @isEditing)}}\\n
\\n \\n
\\n {{/if}}\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/row/access-plan/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport BaseAccessPlanRow from '../base-access-plan/index';\n\nimport './_style.scss';\n\n/**\n * Displays a single Access Plan\n */\nexport default class AccessPlan extends BaseAccessPlanRow {}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Row::AccessPlan': typeof AccessPlan;\n }\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { MINUTES_IN_WEEK } from '@adc/ember-utils/constants/time';\nimport { A } from '@ember/array';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Active, Pending } from 'customer-site/enums/AccessPlanAccessStatus';\nimport {\n LockdownOperatingMode,\n RestrictedAccessOperatingMode\n} from 'customer-site/enums/MercuryControllerOperatingMode';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport {\n ModifyUsers,\n ModifyAccessPoints,\n ModifyTimetables,\n ModifyPlanName,\n ModifyUserTypes\n} from '../../../../../enums/AccessPlanPropertyEdit';\nimport {\n EmberAccessControlAccessPlanEdit,\n EmberAccessControlLockdownConfigurationEdit,\n EmberEnterpriseAccessControlAccessPlanEdit,\n EmberEnterpriseAccessControlLockdownConfigurationEdit\n} from '../../../../../enums/CustomerPageUrl';\nimport { deleteAccessPlanWithWarningModal } from '../../item/card/header/index';\n\nimport type { ButtonNativeSignature } from '@adc/ui-components/components/button/native';\nimport type { StatusToggleSignature } from '@adc/ui-components/components/status-toggle';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\n\ntype LinkItem = string | boolean | (() => any);\n\n/**\n * Returns an array of ScheduleObjectType of length 1 to send to the schedule grid component\n */\nexport function getScheduleObjectsArray(this: {\n args: { accessPlan: AccessControlAccessPlanModel };\n}): Array<{ id: string; colorName: string; timetables: AsyncHasMany }> {\n return A([this.args.accessPlan])\n .compact()\n .map(({ id, colorName, timetables }) => ({ id, colorName, timetables }));\n}\n\n/**\n * Generate access plan edit options.\n */\nexport function getEditOptions(\n this: BaseAccessPlanRow,\n canBeDeleted = true,\n showEditScheduleOption = true\n): Array {\n const { identityManager } = this;\n const { accessPlan } = this.args,\n canModifyUserTypes = identityManager.isPointCentralAccessControl && identityManager.isEnterprise;\n\n if (!accessPlan) {\n return [];\n }\n\n const accessPlanId = accessPlan?.id ?? 0,\n path = 'components.access-control.access-plans.',\n itemPath = `${path}edit.`,\n thisPath = 'generic.access-control.';\n\n const options: Record = {\n [ModifyUsers]: [accessPlan.canModifyUsers, 'user', 'generic.users'],\n [ModifyAccessPoints]: [accessPlan.canModifyAccessPoints, 'user-control-open', `${thisPath}accessPoints`],\n [ModifyPlanName]: [true, 'user-control-plan', `${itemPath}name.nameAndIcon`],\n [ModifyUserTypes]: [canModifyUserTypes, 'property-group', `${itemPath}user-types.community`],\n [ModifyTimetables]: [showEditScheduleOption && accessPlan.canModifySchedules, 'schedule', 'generic.schedule']\n };\n\n // Create links for editing the properties on a plan.\n const links: LinkItem[][] = Object.entries(options).map(([property, [test, icon, ...translationKeys]]) => {\n const routeEnum = getAccessPlanEditRouteId(accessPlan.operatingModes, identityManager.isEnterprise);\n\n return [\n test,\n () => this.contextManager.transitionToNativeRoute(routeEnum, accessPlanId, { property }),\n icon,\n this.intl.t(...translationKeys)\n ];\n });\n // Create a delete plan link.\n if (canBeDeleted) {\n links.push([true, () => this.deleteAccessPlan(accessPlan), 'trash', this.intl.t(`${thisPath}deletePlan`)]);\n }\n\n return links\n .map(([test, action, icon, name = icon]: [boolean, () => any, string, string]) =>\n test ? DropdownActionItem.create({ icon, name, action }) : undefined\n )\n .compact();\n}\n\nexport function getAccessPlanEditRouteId(operatingModes: number[], isEnterprise: boolean) {\n if (operatingModes.includes(LockdownOperatingMode)) {\n return isEnterprise\n ? EmberEnterpriseAccessControlLockdownConfigurationEdit\n : EmberAccessControlLockdownConfigurationEdit;\n }\n\n return isEnterprise ? EmberEnterpriseAccessControlAccessPlanEdit : EmberAccessControlAccessPlanEdit;\n}\n\nexport function getPlanStatusAndIcon(\n intl: ServiceRegistry['adc-intl'],\n accessPlan?: AccessControlAccessPlanModel\n): AccessPlanStatusAndIcon {\n if (!accessPlan) {\n return {\n status: '',\n statusClass: 'not-set'\n };\n }\n\n const accessPlanStatus = accessPlan.accessPlanAccessStatus;\n\n if (accessPlanStatus == Active) {\n return {\n status: intl.t('generic.active'),\n icon: 'circle-check',\n color: 'blue',\n statusClass: 'active'\n };\n }\n\n if (accessPlanStatus == Pending) {\n return {\n status: intl.t('generic.pending'),\n icon: 'circle-dash',\n statusClass: 'pending'\n };\n }\n\n return {\n status: intl.t('generic.expired'),\n icon: 'circle-issue',\n statusClass: 'expired'\n };\n}\n\nexport interface AccessPlanStatusAndIcon {\n status: StatusToggleSignature['Args']['statusText'];\n icon?: StatusToggleSignature['Args']['statusIcon'];\n color?: StatusToggleSignature['Args']['color'];\n statusClass: 'not-set' | 'active' | 'pending' | 'expired';\n}\n\nexport interface BaseAccessPlanRowSignature {\n Element: HTMLDivElement;\n Args: Pick & {\n accessPlan: AccessControlAccessPlanModel;\n planDetailTotals: Awaited>;\n showEditScheduleOption?: boolean;\n canBeDeleted: boolean;\n deleteAccessPlan?: (accessPlan: AccessControlAccessPlanModel) => void;\n shortenUsersText?: boolean;\n useRestrictedAccessColumn?: boolean;\n useStatusPill?: boolean;\n canViewTimeTables?: boolean;\n isEditing?: boolean;\n isMobileListView?: boolean;\n showRestrictedAccessUI?: boolean;\n showEditButton?: boolean;\n showScopeName?: boolean;\n isOldEditComponent?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\n/**\n * Displays a single Access Plan\n */\n@intlPath({ path: 'access-control/access-plans/row/base-access-plan' })\nexport default class BaseAccessPlanRow extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n\n /**\n * Available Edit actions.\n */\n @computed('args.{accessPlan,canBeDeleted,showEditScheduleOption}')\n get toolsDropdownItems(): Array {\n return getEditOptions.call(this, this.args.canBeDeleted, this.args.showEditScheduleOption);\n }\n\n /**\n * Schedule objects to render in the schedule grids\n */\n @computed('args.accessPlan')\n get scheduleObjects(): Array<{\n id: string;\n colorName: string;\n timetables: AsyncHasMany;\n }> {\n return getScheduleObjectsArray.call(this);\n }\n\n /**\n * The number of users in the access plan.\n */\n @computed('args.accessPlan')\n get usersCount(): number {\n return this.args.accessPlan.hasMany('users').ids().length;\n }\n\n /**\n * Deletes the specified access plan.\n */\n @action deleteAccessPlan(accessPlan: AccessControlAccessPlanModel): void {\n // If a delete function is passed into the arguments, use it\n if (this.args.deleteAccessPlan === undefined) {\n deleteAccessPlanWithWarningModal(accessPlan, this.intl, this.modals, this.notificationManager);\n } else {\n this.args.deleteAccessPlan(accessPlan);\n }\n }\n\n @action editUsers(): void {\n const { operatingModes, id = '0' } = this.args.accessPlan;\n\n this.contextManager.transitionToNativeRoute(\n getAccessPlanEditRouteId(operatingModes, this.identityManager.isEnterprise),\n id,\n { property: ModifyUsers }\n );\n }\n\n @computed('startDate', 'endDate', 'headerTag')\n get temporaryAccessPlanScheduleText(): string | undefined {\n return this.startDate || this.endDate ? this.headerTag : undefined;\n }\n\n get customTimesString(): string {\n const timetable = this.args.accessPlan.timetables.firstObject,\n first_block = timetable?.scheduleDictionary.firstObject,\n total_minutes = first_block ? first_block.endMinutesLocal - first_block.startMinutesLocal : 0;\n\n return this.intl.t(\n total_minutes === MINUTES_IN_WEEK ? 'generic.allTimes' : 'generic.access-control.customTimesSchedule'\n );\n }\n\n get fullTemporaryAccessDateRange(): string {\n return this.startDate + ' - ' + this.endDate;\n }\n\n get startDate(): string {\n const accessPlan = this.args.accessPlan;\n const timetable = accessPlan.timetables.firstObject;\n const date = timetable?.startDate;\n\n if (date) {\n const formattedDate = new Date(date),\n fmtStartDate = this.intl.formatDateTz(formattedDate, {\n month: '2-digit',\n year: 'numeric',\n day: '2-digit'\n });\n\n return fmtStartDate;\n }\n return '';\n }\n\n get endDate(): string {\n const accessPlan = this.args.accessPlan;\n const timetable = accessPlan.timetables.firstObject;\n\n const date = timetable?.endDate;\n\n if (date) {\n const formattedDate = new Date(date),\n fmtEndDate = this.intl.formatDateTz(formattedDate, {\n month: '2-digit',\n year: 'numeric',\n day: '2-digit'\n });\n\n return fmtEndDate;\n }\n return '';\n }\n\n get headerTag(): string {\n const timetable = this.args.accessPlan.timetables.firstObject;\n\n if (timetable?.startDate) {\n return timetable.endDate ? this.fullTemporaryAccessDateRange : this.startOnlyText;\n }\n\n return timetable?.endDate ? this.endOnlyText : this.customTimesString;\n }\n\n @computed('startDate')\n get startOnlyText(): string {\n return this.intl.t('generic.startOnlyText') + ' ' + this.startDate;\n }\n\n @computed('endDate')\n get endOnlyText(): string {\n return this.intl.t('generic.endOnlyText') + ' ' + this.endDate;\n }\n\n @computed('args.accessPlan.accessPlanAccessStatus')\n get planStatusAndIcon(): AccessPlanStatusAndIcon {\n return getPlanStatusAndIcon(this.intl, this.args.accessPlan);\n }\n\n /**\n * Whether or not the restricted access status popover should be displayed.\n */\n @tracked showPopover = false;\n\n /**\n * Toggles the restricted access status popover.\n */\n @action\n togglePopover(mouseEvent: Event): void {\n mouseEvent.stopPropagation();\n this.showPopover = !this.showPopover;\n }\n\n /**\n * Should the \"Restricted Access Enabled\" text be displayed for the access plan?\n */\n @computed('args.{accessPlan,showRestrictedAccessUI}')\n get displayRestrictedAccessEnabled(): boolean {\n const { accessPlan, showRestrictedAccessUI = true } = this.args;\n\n return (\n showRestrictedAccessUI &&\n !accessPlan.isAllAccess &&\n !accessPlan.isPersonalAccessPlan &&\n !accessPlan.operatingModes.includes(RestrictedAccessOperatingMode)\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Row::BaseAccessPlan': typeof BaseAccessPlanRow;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n

{{tc this \\'pageDescEmergencyLockdown\\'}}

\\n
\\n\",{ moduleName: \"customer-site/components/modals/access-control/emergency-lockdown/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { Lockdown } from '../../../../enums/AccessControlSystemMode';\nimport { setSystemMode } from '../../../access-control/lockdown/emergency-lockdown-btn/index';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Modal for confirming lockdown initiation\n */\n@intlPath({ path: 'modals/access-control/emergency-lockdown' })\nexport default class EmergencyLockdownModal extends Component {\n @service notificationManager;\n @service intl;\n @service store;\n\n /**\n * Set System Mode to initiate Lockdown\n */\n @action\n initiateLockdown() {\n setSystemMode(this.args.model.model, this.store, this.notificationManager, this.intl, Lockdown);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n \\n \\n
\",{ moduleName: \"customer-site/components/access-control/lockdown/emergency-lockdown-btn/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport EmergencyLockdownModal from 'customer-site/components/modals/access-control/emergency-lockdown/index';\nimport { intlPath } from '@adc/i18n/path';\nimport { Default } from '../../../../enums/AccessControlSystemMode';\n\nimport './_style.scss';\n\n/**\n * Initiate Lockdown or cancel Lockdown by setting the System Mode\n */\nexport async function setSystemMode(systemModel, store, notificationManager, intl, newSystemMode) {\n const response = await systemModel.setAcSystemMode(newSystemMode);\n const { meta } = response;\n store.pushPayload('systems.system', response);\n\n if (meta?.warningMessage) {\n notificationManager.addWarning(meta.warningMessage);\n\n if (systemModel.isInPartialLockdown) {\n notificationManager.addNotification(\n intl.t('generic.systemInPartialLockdown', { controllerListOfNames: meta.offlineControllerNames }),\n 'issue',\n [],\n 0,\n true,\n false\n );\n }\n }\n}\n\n/**\n * Show cancel Lockdown confirmation model\n *\n * Note: requires modals, notificationManager, nativeBridge services\n * along with 'args.SystemModel' to be defined in the component\n */\nexport function launchCancelLockdownConfirmationModel(systemModel) {\n const { intl } = this,\n baseLockdownIntlKey = 'components.access-control.lockdown.emergency-lockdown-btn';\n\n this.modals.showConfirmationDialog(\n intl.t('generic.cancelLockdown'),\n intl.t(`${baseLockdownIntlKey}.concludeLockdownDesc`),\n {\n text: intl.t(`${baseLockdownIntlKey}.concludeLockdown`),\n action: () => setSystemMode(systemModel, this.store, this.notificationManager, this.intl, Default),\n css: 'btn-color-danger'\n },\n {\n text: intl.t(`${baseLockdownIntlKey}.remainInLockdown`),\n action: () => this.modals.closeModal()\n },\n 'cancel-lockdown-confirmation-modal'\n );\n}\n\n/**\n * @classdesc Lockdown app-nav button for initiating and canceling AC lockdown system mode\n */\n@intlPath({ path: 'access-control/lockdown/emergency-lockdown-btn' })\nexport default class EmergencyLockdownBtn extends Component {\n @service contextManager;\n @service intl;\n @service modals;\n @service notificationManager;\n @service store;\n\n @equal('args.model.accessControlCurrentSystemMode', Default)\n isCurrentSystemModeInDefault;\n\n /**\n * Show Emergency Lockdown modal\n */\n @action\n async showEmergencyLockdownModal() {\n const systemModel = await this.args.model;\n this.modals.showModal(EmergencyLockdownModal, {\n model: systemModel\n });\n }\n\n @computed('isCurrentSystemModeInDefault')\n get buttonText() {\n const { intl } = this;\n return this.isCurrentSystemModeInDefault\n ? intl.tc(this, 'emergencyLockdown')\n : intl.t('generic.cancelLockdown');\n }\n\n @computed('isCurrentSystemModeInDefault')\n get buttonIcon() {\n return this.isCurrentSystemModeInDefault ? 'lock-locked-hd' : 'user-control-open';\n }\n\n @action handleButtonClick() {\n if (this.isCurrentSystemModeInDefault) {\n this.showEmergencyLockdownModal();\n } else {\n this.showCancelLockdownModal();\n }\n }\n\n /**\n * Cancel Emergency Lockdown\n */\n @action\n async showCancelLockdownModal() {\n const systemModel = await this.args.model;\n launchCancelLockdownConfirmationModel.call(this, systemModel);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let @link.isExternalLink as |ext|}}\\n
  • \\n \\n {{yield}}\\n \\n {{yield to=\\\"extra\\\"}}\\n
  • \\n{{/let}}\",{ moduleName: \"customer-site/components/app/app-nav-link/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport type RouteItem from 'customer-site/models/navigation/route-item';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface NavigationLinkSignature {\n Element: HTMLAnchorElement;\n Args: {\n link?: RouteItem;\n isActive?: boolean;\n isRootItem?: boolean;\n onClickAction?: VoidFunction;\n };\n Blocks: {\n default: [];\n extra: [];\n };\n}\n\n/**\n * Creates a list element with the proper link type for a RouteItem.\n */\nexport default class NavigationLink extends Component {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare navigation: NavigationService;\n\n /**\n * Redirects to the route item's URL. If this is a group item (i.e. meta-page), it redirects to the first child object.\n */\n @action goToRouteItem(routeItem: RouteItem, event: Event): void {\n // If there was a highlight pointer on the anchor element then remove it to indicate to the user that they visited the area.\n (event.target as HTMLAnchorElement)\n .closest('.highlight-pointer-nav-item')\n ?.classList.remove('highlight-pointer-nav-item');\n\n const { navigation, contextManager } = this;\n\n // Do nothing if this is just another click on rootItem and we are already there.\n if (\n this.args.isRootItem &&\n navigation.resolveRouteItem(routeItem) !== contextManager.visitedRoutesStack?.lastObject?.routeItem\n ) {\n // The focus moves to the main content when the navigation link is clicked.\n this.contextManager.focusOnAppContent();\n }\n\n navigation.transitionToRoute(routeItem);\n\n // If there is an on click action send the action to the parent.\n this.args.onClickAction?.();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppNavLink': typeof NavigationLink;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{!-- If the login has access to multiple systems, then show the system selector, otherwise just show the description --}}\\n {{#if this.showMsaDropdown}}\\n \\n
    \\n {{await this.description}}\\n
    \\n \\n {{else}}\\n \\n {{await this.description}}\\n \\n {{/if}}\\n
    \",{ moduleName: \"customer-site/components/app/app-system-select/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { getOwner } from '@ember/owner';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { SystemSelectItem } from '@adc/ui-components/components/system-select';\n\nimport './_style.scss';\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type DomService from '@adc/ember-utils/services/dom';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { SystemSelectSignature } from '@adc/ui-components/components/system-select';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type EnterpriseLocationsController from 'customer-site/enterprise/locations/controller';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type AvailableSystemItem from 'customer-site/models/systems/available-system-item';\nimport type System from 'customer-site/models/systems/system';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\n/**\n * Action method for clicking on a system or group in the MSA dropdown.\n */\nfunction redirectToSystemOrGroup(this: SystemSelect, systemItem: AvailableSystemItem): void {\n if (!systemItem.isSystemParentAccountSuspended) {\n // Clear the search string when switching groups\n const routeName = this.contextManager.currentRouteData?.routeName;\n if (this.identityManager.isEnterprise && (routeName?.includes('enterprise.locations') ?? false)) {\n const locationsController = getOwner(this)?.lookup(\n 'controller:enterprise/locations'\n ) as unknown as EnterpriseLocationsController;\n locationsController.searchLocations('');\n }\n\n this.identityManager.switchContext(systemItem);\n return;\n }\n\n // If we can't redirect to the system, show an error message.\n systemItem.getDealerInfo().then((dealerInfo) => {\n const { dealerName, dealerContactInfo } = dealerInfo;\n\n this.notificationManager.addError(\n this.intl.t('components.app.app-system-select.errorMessageParentAccountIsSuspended', {\n systemName: systemItem.name,\n providerName: dealerName,\n providerNumber: dealerContactInfo\n })\n );\n });\n}\n\n/**\n * Get object for dropdown item.\n *\n * @private\n */\nfunction createDropdownItemForSystemItem(this: SystemSelect, systemItem: AvailableSystemItem): SystemSelectItem {\n const { name, icon, isSelected, subItems, expandSubItemsByDefault, isSystemParentAccountSuspended } = systemItem;\n\n // Create the item itself.\n return new SystemSelectItem({\n name,\n disabled: false,\n icon,\n action: () => redirectToSystemOrGroup.call(this, systemItem),\n selected: isSelected,\n showSubItemsOnOpen: expandSubItemsByDefault,\n isSystemParentAccountSuspended,\n tooltipText: name,\n subItems: (subItems ?? []).map((item) => createDropdownItemForSystemItem.call(this, item))\n });\n}\n\n/**\n * Get the entry point item for linked systems.\n *\n * @private\n */\nasync function createEntryPointItem(this: SystemSelect): Promise {\n const linkedSystemEntryPoint: {\n entryPointItem: AvailableSystemItem | null;\n routeId: number | null;\n transitionId: string | null;\n } = await this.ajax.apiRequest('systems/availableSystemItems/getEntryPointItem');\n\n const { entryPointItem, routeId, transitionId } = linkedSystemEntryPoint;\n\n // Build the entry point dropdown item\n if (entryPointItem && routeId) {\n const dropdownItem = createDropdownItemForSystemItem.call(this, entryPointItem);\n\n let systemItem: AvailableSystemItem | null;\n if (transitionId) {\n systemItem = await this.store.peekRecord('systems/available-system-item', transitionId);\n if (!systemItem) {\n // The system we need to transition to couldn't be found.\n return null;\n }\n }\n\n dropdownItem.action = async () => {\n // Check if we need to switch system context first.\n if (systemItem) {\n await this.identityManager.switchContext(systemItem);\n }\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n const routeItem = this.navigation.getRouteItem(routeId);\n if (!routeItem) {\n // Expected route isn't available\n return;\n }\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.navigation.transitionToRoute(routeItem);\n };\n return dropdownItem;\n }\n return null;\n}\n\n/**\n * The key used for the DOM listener for refreshing the MSA available systems.\n */\nexport const AVAILABLE_SYSTEMS_CHANGED_KEY = 'availableSystemsChanged';\n\n/**\n * The id of the dropdown item used for the new entry point for Linked Systems.\n */\nexport const LINKED_SYSTEMS_ENTRY_POINT_ID = 'linked-systems-entry-point';\n\n/**\n * The names of the icons being used for the new Linked Systems entry point dropdown.\n */\nexport enum LinkedSystemsEntryPointIcons {\n ADD_SYSTEM = 'add',\n MANAGE_SYSTEMS = 'link',\n MANAGE_GROUPS = 'property-manage',\n MULTI_LOCATION_MANAGEMENT = 'property-group'\n}\n\ninterface AppSystemSelectSignature {\n Args: {\n model: IdentityModel;\n isInitialSetupRequired?: boolean;\n tabindex?: SystemSelectSignature['Args']['tabindex'];\n };\n}\n\n/**\n * @classdesc\n * System select component for switching context to another group or system.\n */\nexport default class SystemSelect extends Component {\n @service declare ajax: AdcAjaxService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare store: Store;\n @service declare dom: DomService;\n @service declare media: ADCResponsiveMediaService;\n @service declare notificationManager: NotificationManager;\n @service declare navigation: NavigationService;\n @service declare intl: ADCIntlService;\n\n /**\n * Search filter for systems or system groups.\n */\n @tracked filterString = '';\n\n /**\n * The list of available systems.\n */\n @tracked availableSystems: SystemSelectSignature['Args']['items'] = [];\n\n /**\n * Should the MSA dropdown be shown?\n */\n @tracked showMsaDropdown = false;\n\n /**\n * Task to request available system items from the server.\n */\n updateAvailableSystems = task({ restartable: true }, async () => {\n const searchString = this.filterString,\n systemItems = await this.store.query('systems/available-system-item', { searchString }),\n linkedSystemEntryPoint = await createEntryPointItem.call(this),\n availableSystems = systemItems.map((item) => createDropdownItemForSystemItem.call(this, item));\n\n // Add the linked systems entry point.\n if (linkedSystemEntryPoint) {\n availableSystems.push(linkedSystemEntryPoint);\n }\n\n // We show the MSA dropdown no matter what if the filterString is non-empty.\n // Otherwise, the dropdown will disappear if the user types into the search box.\n // Q: Why do we need to check subItems?\n // A: Because it's possible to have only 1 system group. This situation means:\n // availableSystems.length === 1\n // availableSystems.first.subItems.length > 0\n // Hence the second part of the conditional.\n const showMsaDropdown =\n !!searchString ||\n (!this.args.isInitialSetupRequired &&\n (availableSystems.length > 1 || availableSystems.some((system) => system.subItems?.length)));\n\n Object.assign(this, {\n availableSystems,\n showMsaDropdown\n });\n });\n\n /**\n * The system selection description.\n */\n @computed('systemAndGroup', 'args.isInitialSetupRequired')\n get description(): Promise {\n return (async () => {\n const [system, group] = await this.systemAndGroup;\n return group?.description ?? system?.description ?? '';\n })();\n }\n\n /**\n * Get the system and group from our identity model\n */\n @computed('args.model.{selectedSystem,selectedSystemGroup.description,isLoaded}')\n get systemAndGroup(): Promise<[System | undefined, SystemGroup | undefined]> {\n const { model } = this.args;\n return Promise.all([model?.selectedSystem, model?.selectedSystemGroup]);\n }\n\n /**\n * Attaches listener for when this.contextManager.refreshAvailableSystems() is called\n */\n @action attachWindowListener(): void {\n // Create a DOM listener so the legacy site can tell the component to refresh the available systems.\n this.dom.addListener(this, window, AVAILABLE_SYSTEMS_CHANGED_KEY, () => this.updateAvailableSystems.perform());\n }\n\n /**\n * Resets the filter string when the dropdown is closed if not already empty.\n */\n @action resetFilterStringOnClose(): void {\n if (this.filterString !== '') {\n this.filterString = '';\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::AppSystemSelect': typeof SystemSelect;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n
    \",{ moduleName: \"customer-site/components/app/language-select/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport type { SingleSelectSignature } from '@adc/ui-components/components/dropdown-select/single-select';\nimport type { ISelectItem } from '@adc/ui-components/utils/select-item';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface LanguageSelectSignature {\n Element: HTMLDivElement;\n Args: Pick;\n}\n\n/**\n * Dropdown select component that has predefined items to be available cultures.\n */\nexport default class LanguageSelectComponent extends Component {\n @service declare contextManager: ContextManager;\n\n /**\n * Language options.\n */\n get availableLocales(): Promise {\n return (async () => {\n const items = await this.contextManager.identityModel.profile.availableLocales;\n return items.map(({ id, displayName }) => ({\n value: id,\n name: displayName\n }));\n })();\n }\n\n @reads('contextManager.identityModel.profile.locale.id')\n declare selectedLocale: ContextManager['identityModel']['profile']['locale']['id'];\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::LanguageSelect': typeof LanguageSelectComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/app/legacy-page-iframe/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n/* eslint-disable ember/no-get */\n/* eslint-disable ember/no-component-lifecycle-hooks */\n/* eslint-disable ember/no-observers */\n/* eslint-disable ember/no-actions-hash */\n/* eslint-disable ember/no-classic-classes */\n\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { observer } from '@ember/object';\nimport { once, scheduleOnce } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { resolve } from 'rsvp';\n\n/**\n * Gets the origin that the iframe message should specify to be accepted.\n *\n * @returns {string}\n */\nfunction getMessageOrigin() {\n return window.location.origin;\n}\n\n/**\n * Handler for receiving messages from the iframe.\n *\n * The message data object comes stringified so that we don't keep references to objects that might have been\n * already destroyed in the iFrame itself.\n *\n * @param {MessageEvent} event\n */\nfunction receiveMessage(event) {\n if (this.stopProcessingMessages) {\n return;\n }\n\n let { origin, data: message } = event;\n\n // Check if the message came from the iframe that this component contains.\n if (origin !== getMessageOrigin()) {\n return;\n }\n\n // Message was transmitted as a string, so need to parse it back to objects.\n try {\n message = JSON.parse(message);\n } catch (error) {\n // We use assert so that it appears in dev, but is a no-op in prod.\n console.assert(false, 'Invalid message posted to Ember legacy-page-iframe. Message=' + JSON.stringify(message));\n return;\n }\n\n if (typeof message !== 'object') {\n return;\n }\n\n message.data = message.data || {};\n\n let { type: messageType, data } = message,\n {\n routeId,\n route,\n text,\n type,\n url,\n isWizard,\n ignoreSessionTimeout,\n modelId,\n search,\n queryParams,\n wizardEnum,\n timeOutMs,\n icon,\n persistent,\n iconTitle\n } = data;\n\n routeId = parseInt(routeId, 10);\n\n const { contextManager, notificationManager } = this,\n isWizardRunning = !!contextManager.get('isWizard');\n\n const fnHandleWizardStopped = (contextManager, isWizardRunning) => {\n contextManager.set('identityModel.wizard', null);\n\n if (isWizardRunning) {\n contextManager.clearVisitedRoutesStack();\n }\n };\n\n const fnCloseModal = () => {\n this.modalStateChanged(false);\n };\n\n switch (messageType) {\n case 'legacyPageTransition': {\n // No need to close the modal because it is already happening in the route.\n\n // Clear any notifications during the transition.\n notificationManager.clearNonPersistentNotifications();\n\n // If the wizard is no longer running, but the identity model still thinks it is, clear it on the identity model.\n if (!isWizard && isWizardRunning) {\n // This will happen when wizard finishes, but the app does not know.\n // We will have to figure out a better way for this, but that might have to be delayed until the app controls the wizard.\n fnHandleWizardStopped(contextManager, isWizardRunning);\n\n contextManager.startOnboardingTour();\n }\n\n // If the wizard is running but the identity does not think so refresh the application so that we get fresh data.\n else if (isWizard && !isWizardRunning) {\n contextManager.refreshApplication();\n return;\n }\n\n // Update properties for this route/page.\n this.routeItemChanged && this.routeItemChanged(routeId, url, ignoreSessionTimeout, true);\n\n break;\n }\n case 'transitionToPreviousRoute': {\n fnCloseModal();\n\n contextManager.transitionToPreviousRoute();\n break;\n }\n case 'modalOpen': {\n this.modalStateChanged(true);\n\n break;\n }\n case 'modalClosed': {\n fnCloseModal();\n break;\n }\n case 'emberRoute': {\n fnCloseModal();\n\n // Assume that no ember route can be in a wizard, so clear the wizard.\n fnHandleWizardStopped(contextManager, isWizardRunning);\n\n // If the route url does not begin with what Ember expects to be the root, then it is probably not an Ember route\n // and we ended up here in error. Therefore, just reload the browser.\n if (!route.toLowerCase().startsWith(this.router.rootURL)) {\n window.location.replace(route);\n return;\n }\n\n // Remove rootUrl from the url.\n route = route.substring(this.router.rootURL.length);\n\n // If url does not start with a slash, prepend it.\n route = route.startsWith('/') ? route : `/${route}`;\n\n // Add search params if there were any.\n route = `${route}${search ?? ''}`;\n\n resolve(this.router.transitionTo(route)).then(() => {\n this.contextManager.checkLegacyErrorManagerMessages();\n\n this.contextManager.startOnboardingTour();\n });\n\n break;\n }\n case 'errorManager': {\n if (type === 'clear') {\n // Clear any non-persistent notifications.\n notificationManager.clearNonPersistentNotifications();\n } else if (type === 'notification') {\n // Create any type of notification with more possible values passed in (ex. persistent boolean).\n // You may want this manual approach if you need to log a persistent site notification from a legacy page as you transition away.\n notificationManager.addNotification(\n text,\n icon,\n undefined,\n timeOutMs,\n persistent,\n false,\n undefined,\n iconTitle\n );\n } else {\n // Add new notification of 'type'.\n notificationManager[camelize(`add-${type}`)](text, timeOutMs);\n }\n\n break;\n }\n case 'refreshApplication': {\n fnCloseModal();\n\n contextManager.refreshApplication(false, data.redirectToIndex);\n break;\n }\n case 'reloadApplication': {\n fnCloseModal();\n\n window.location.reload(true);\n break;\n }\n case 'redirectToUrl': {\n fnCloseModal();\n\n contextManager.transitionToUrl(url, true);\n break;\n }\n case 'redirectToRouteId': {\n fnCloseModal();\n\n const transitionArguments = [routeId, queryParams, undefined];\n\n // Only add modelId to the transition arguments if defined, otherwise transitionToRouteId will think undefined is a slug.\n if (modelId) {\n transitionArguments.push(modelId);\n }\n\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(...transitionArguments);\n break;\n }\n case 'redirectToWizard': {\n contextManager.transitionToWizard(wizardEnum, '', queryParams);\n break;\n }\n case 'legacyPageHeightChanged': {\n this.send('setIframeHeight', data.height);\n break;\n }\n case 'scrollEnclosureToPosition': {\n const { verticalScrollPosition } = data,\n elEnclosure = getEnclosureElement();\n\n elEnclosure.scrollTop = verticalScrollPosition;\n break;\n }\n case 'reloadCamerasAndCameraGroups': {\n ['camera', 'camera-group'].forEach((modelType) => this.store.unloadAll(`video/${modelType}`));\n break;\n }\n default: {\n console.log('Unknown message from legacy page', message);\n }\n }\n}\n\n/**\n * Schedule execution of sending iframe load status once during this run cycle.\n *\n * @private\n * @instance\n * @memberof components.app.LegacyPageIframe\n */\nfunction scheduleIframeLoadingStateChanged() {\n const fnSendIframeLoadingStateChanged = () => {\n const { isLoading, loadingAction: action } = this;\n\n if (!this.get('routeData.showInModal')) {\n this.contextManager.setIsLoading(isLoading);\n return;\n }\n\n action && action(isLoading);\n },\n fnShowHideElement = () => {\n if (!this.element) {\n return;\n }\n\n this.element.style.visibility = this.isLoading ? 'hidden' : '';\n };\n\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n once(this, fnSendIframeLoadingStateChanged);\n\n // If the iframe started loading, then hide contents immediately.\n if (this.isLoading) {\n fnShowHideElement.call(this);\n }\n // Otherwise show contents after render.\n else {\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, fnShowHideElement);\n }\n}\n\n/**\n * Set the source for iframe element.\n *\n * @private\n * @instance\n * @memberof components.app.LegacyPageIframe\n */\nfunction setIframeSource() {\n const iframe = this.element,\n src = this.get('routeData.src');\n\n if (src && iframe) {\n iframe.src = src;\n }\n}\n\n/**\n * Triggered when isLoading property has changed.\n *\n * @private\n * @instance\n * @memberof components.app.LegacyPageIframe\n */\nfunction loadingChanged() {\n scheduleIframeLoadingStateChanged.call(this);\n\n this.modalStateChanged && this.modalStateChanged(false);\n}\n\n/**\n * Gets the main enclosure element, either the parent of the iframe-container or the app-content-wrapper\n *\n * @returns {HtmlElement}\n */\nfunction getEnclosureElement() {\n return (\n (document.getElementsByClassName('iframe-container')[0] || {}).parentNode ||\n document.getElementById('app-content-wrapper')\n );\n}\n\n/**\n * Resets height on the iFrame parent.\n *\n * @private\n * @instance\n * @memberof components.app.LegacyPageIframe\n */\nfunction resetIframeParentHeight() {\n // Clear height.\n this.send('setIframeHeight', undefined);\n}\n\n/**\n * Removes events that we setup for the iFrame.\n *\n * @private\n * @instance\n * @memberof components.app.LegacyPageIframe\n */\nfunction clearIframeEvents() {\n // Clear hooks for the iframe so they do not refire.\n const iframe = this.element || {};\n\n // Operations on the iframe sometimes cause SecurityErrors that are irrelevant, so this should eat them.\n try {\n iframe.onload = undefined;\n (iframe.contentWindow || {}).onunload = undefined;\n } catch (e) {\n // Eat the error.\n }\n}\n\n/**\n * Iframe element that the legacy pages are displayed in.\n */\nexport default Component.extend({\n contextManager: service(),\n notificationManager: service(),\n router: service(),\n store: service(),\n dom: service(),\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-tagless-components\n tagName: 'iframe',\n\n classNames: ['page-iframe'],\n\n classNameBindings: ['isLoading'],\n\n /**\n * Initialize component.\n */\n init() {\n this._super(...arguments);\n\n this.routeItemChanged && this.routeItemChanged(this.routeData?.routeId, this.routeData?.src);\n\n // Execute anything else that should be executed on init.\n this.routeDataObserver();\n this.isLoadingObserver();\n },\n\n /**\n * Handle code dependent on element existing.\n */\n didInsertElement() {\n const base = this._super(...arguments);\n\n resetIframeParentHeight.call(this);\n\n const iframe = this.element,\n fnUpdateLoading = (isLoading) => {\n this.set('isLoading', isLoading);\n\n if (!isLoading && !!iframe.contentDocument && !!document) {\n iframe.contentDocument.documentElement.style.colorScheme =\n document.documentElement.style.colorScheme || 'light';\n }\n\n // Have to do this here as well because it only fires once.\n setupOnUnload.call(this);\n },\n // If setupOnUnload is called before onload, contentWindow will still be null in Firefox so just don't set onunload method if contentWindow is null.\n setupOnUnload = () => ((iframe.contentWindow || {}).onunload = fnUpdateLoading.bind(this, true));\n\n // When starting to load.\n setupOnUnload.call(this);\n\n // When done loading.\n iframe.onload = fnUpdateLoading.bind(this, false);\n\n // Create listener for messages coming from the legacy pages.\n this.dom.addListener(this, window, 'message', receiveMessage.bind(this));\n\n // Stop listening on messages when the page is closed so that we are not calling scripts that no longer exist.\n this.dom.addListener(this, window, 'unload', () => {\n this.stopProcessingMessages = true;\n\n this.dom.removeAllListeners(this);\n\n clearIframeEvents.call(this);\n });\n\n this.dom.addListener(this, window, 'resize', resetIframeParentHeight.bind(this));\n\n // Set iframe source.\n setIframeSource.call(this);\n\n return base;\n },\n\n /**\n * Cleanup.\n */\n willDestroyElement() {\n resetIframeParentHeight.call(this);\n\n clearIframeEvents.call(this);\n\n return this._super(...arguments);\n },\n\n /**\n * Detects changes in whether the iframe is currently loading or not\n *\n * @function\n */\n isLoadingObserver: observer('isLoading', function () {\n if (this.isLoading) {\n resetIframeParentHeight.call(this);\n }\n\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n once(this, loadingChanged);\n }),\n\n /**\n * Whenever there is a new routeData, we are reloading the iframe.\n *\n * @function\n */\n routeDataObserver: observer('routeData', function () {\n this.set('isLoading', true);\n }),\n\n /**\n * Sends a message to the iframe if a modal should be closed.\n *\n * @function\n */\n sendCloseModalObserver: observer('sendCloseModal', function () {\n if (!this.sendCloseModal) {\n return;\n }\n\n // Need to stringify data so that we do not keep any object references between app and iFrame containers.\n this.element.contentWindow.postMessage(\n JSON.stringify({\n type: 'closeModal'\n }),\n getMessageOrigin()\n );\n }),\n\n /**\n * Url for the iframe to load.\n *\n * @note Need to observe routeData object as well, because it is possible for the src be the same, but a new request.\n *\n * @function\n * @returns {String}\n */\n srcObserver: observer('routeData', 'routeData.src', function () {\n setIframeSource.call(this);\n }),\n\n /** @ignore */\n actions: /** @lends components.app.LegacyPageIframe# **/ {\n /**\n * Sets height of the legacy page iFrame.\n *\n * @param {number} height\n */\n setIframeHeight(height) {\n if (!this.element) {\n return;\n }\n\n const fnGetEnclosingElementHeight = () => {\n const elEnclosure = getEnclosureElement();\n\n if (!elEnclosure) {\n return undefined;\n }\n\n let height = elEnclosure.getBoundingClientRect().height;\n\n // If there is a footer inside of the enclosing element, then subtract its height.\n const footer = elEnclosure.querySelector('footer');\n\n if (footer) {\n height -= footer.getBoundingClientRect().height;\n }\n\n return height;\n };\n\n // If we did not get height, then set the height to be that of the enclosing element.\n if (!height) {\n height = fnGetEnclosingElementHeight();\n }\n\n // Setting the parentNode's height instead of the iframe itself is more compatible with desktop Safari.\n // The iframe is already setting to height 100% through CSS.\n this.element.parentNode.style.height = height ? `${height}px` : '';\n }\n }\n});\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/app/loading-indicator/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\ninterface LoadingIndicatorSignature {\n Element: HTMLDivElement;\n}\n\nconst LoadingIndicator = templateOnlyComponent();\nexport default LoadingIndicator;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::LoadingIndicator': typeof LoadingIndicator;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
  • \\n \\n
  • \",{ moduleName: \"customer-site/components/app/trouble-conditions/list/contact-support/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\ninterface ContactSupportComponentSignature {\n Args: {\n contactSupport: (event: MouseEvent) => void;\n stealth: boolean;\n };\n}\n\nconst ContactSupportComponent = templateOnlyComponent();\n\nexport default ContactSupportComponent;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TroubleConditions::List::ContactSupport': typeof ContactSupportComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let @item.model as |model|}}\\n
  • \\n {{#if (this.isTroubleCondition model)}}\\n \\n {{/if}}\\n {{#if this.isEnterprise}}\\n {{#if (this.isTroubleCondition model)}}\\n

    \\n {{tc this \\'enterpriseAlarmDescription\\' locationName=(get (await model.system) \\'description\\') description=model.description}}\\n

    \\n
    \\n \\n
    \\n {{/if}}\\n {{else}}\\n
    \\n

    \\n {{model.description}}\\n

    \\n {{#if (this.isTroubleCondition model)}}\\n {{#if model.extraData.description}}\\n

    \\n {{model.extraData.description}}\\n

    \\n {{/if}}\\n {{else if (this.isTroubleConditionMute model)}}\\n {{#if model.mutedSince}}\\n

    \\n {{tc this \\'mutedSince\\' date=model.mutedSince}}\\n

    \\n {{/if}}\\n {{/if}}\\n
    \\n
    \\n \\n
    \\n {{/if}}\\n
  • \\n{{/let}}\",{ moduleName: \"customer-site/components/app/trouble-conditions/list/item/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport TroubleConditionMute from 'customer-site/models/trouble-conditions/trouble-condition-mute';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { TCItem } from 'customer-site/alerts-issues/base-tc-controller';\nimport './_style.scss';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\ninterface ItemComponentSignature {\n Args: {\n item: TCItem;\n buttonPrimary?: boolean;\n };\n}\n\n@intlPath({ path: 'app/trouble-conditions/list/item' })\nexport default class ItemComponent extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare store: ServiceRegistry['store'];\n\n @bool('identityManager.isEnterprise')\n isEnterprise?: boolean;\n\n isTroubleCondition = (model: TroubleCondition | TroubleConditionMute): model is TroubleCondition => {\n return model instanceof TroubleCondition;\n };\n\n isTroubleConditionMute = (model: TroubleCondition | TroubleConditionMute): model is TroubleConditionMute => {\n return model instanceof TroubleConditionMute;\n };\n\n //Dummy method to clear single alarm\n stopAlarm(): void {}\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TroubleConditions::List::Item': typeof ItemComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @troubleConditions}}\\n
    \\n
    \\n {{@title}}\\n\\n {{yield to=\\'header\\'}}\\n
    \\n \\n <:default as |PageViewContainer|>\\n \\n <:default>\\n \\n {{#each @troubleConditions as |item|}}\\n \\n {{/each}}\\n {{#if @contactSupport}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n
    \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/app/trouble-conditions/list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { TCItem } from 'customer-site/alerts-issues/base-tc-controller';\nimport './_style.scss';\n\ninterface TroubleConditionsListComponentSignature {\n Element: HTMLElement;\n Args: {\n buttonPrimary?: boolean;\n contactSupport?: (event: MouseEvent) => void;\n title: string;\n troubleConditions: TCItem[];\n };\n Blocks: {\n header: [];\n };\n}\n\nconst TroubleConditionsListComponent = templateOnlyComponent();\n\nexport default TroubleConditionsListComponent;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TroubleConditions::List': typeof TroubleConditionsListComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let (this.isTroubleCondition @item.model) as |troubleCondition| }}\\n {{#if (and @showProductImage troubleCondition.extraData.showDeviceResourceImage)}}\\n
    \\n \\n
    \\n {{/if}}\\n{{/let}}\\n\\n{{#each @item.buttons as |btn idx|}}\\n \\n{{/each}}\\n\\n{{#if @item.actions}}\\n {{#if (eq @item.actions.length 1)}}\\n {{#each @item.actions as |btn|}}\\n \\n {{/each}}\\n {{else}}\\n {{#let (coalesce @actionsMenuText (t \\'generic.moreOptions\\')) as |menuText|}}\\n \\n {{#if @actionsMenuText}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n {{/let}}\\n {{/if}}\\n{{/if}}\\n\",{ moduleName: \"customer-site/components/app/trouble-conditions/list/item/tools/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { TCItem } from 'customer-site/alerts-issues/base-tc-controller';\nimport type TroubleConditionMute from 'customer-site/models/trouble-conditions/trouble-condition-mute';\n\ninterface ToolsComponentSignature {\n Args: {\n item: TCItem;\n buttonPrimary?: boolean;\n showProductImage: boolean;\n actionsMenuText?: string;\n };\n}\n\nexport default class ToolsComponent extends Component {\n @service declare intl: ADCIntlService;\n\n isTroubleCondition = (model: TroubleCondition | TroubleConditionMute): TroubleCondition | undefined => {\n return model instanceof TroubleCondition ? model : undefined;\n };\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TroubleConditions::List::Item::Tools': typeof ToolsComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n

    {{tc this \\'systemOk\\'}}

    \\n

    {{tc this \\'noAlertsOrIssues\\'}}

    \\n
    \",{ moduleName: \"customer-site/components/app/trouble-conditions/system-ok/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n@intlPath({ path: 'app/trouble-conditions/system-ok' })\nexport default class SystemOkContainer extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TroubleConditions::SystemOk': typeof SystemOkContainer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n

    \\n {{this.statusTitle}}\\n

    \\n \\n \\n \\n
    \",{ moduleName: \"customer-site/components/automation/rules/rule-collection/pause-bar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { reads, equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { DataCapExceeded, UserScheduledPause } from 'customer-site/enums/RecordingRulePauseReasonType';\nimport { RuleArmingStatusEnum } from 'customer-site/enums/RuleArmingStatusEnum';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\n\nimport type { SafeString } from '@ember/template/-private/handlebars';\nimport type Rule from 'customer-site/models/automation/rules/rule';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nexport interface SchedulePauseRuleArgs {\n rule: Rule;\n isInException: string;\n isOverUploadQuota: boolean;\n disabled: boolean;\n hasCameraArmingAccess: boolean;\n}\n\ninterface scheduleChoice {\n name: string;\n duration: number;\n}\n\nenum stateEnum {\n On = 1,\n ScheduledPause = 2,\n Exception = 3,\n OverQuota = 4,\n Off = 5,\n DataCapExceeded = 6\n}\n\nconst Hour = 60;\n\n/**\n * @classdesc\n * A simple info dialog for displaying a string with custom buttons\n */\n@intlPath({ path: 'automation/rules/rule-collection/pause-bar' })\nexport default class SchedulePauseRule extends Component {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n\n /**\n * The reads properties are read from the rule item to ensure they are loaded from back end when used.\n */\n @reads('args.rule')\n declare rule: Rule;\n\n @reads('rule.recordingRulePauseReasonType')\n declare recordingRulePauseReasonType: number;\n\n @reads('rule.pausedUntilDateTimeUtc')\n declare pausedUntilDateTimeUtc: Date | null;\n\n @reads('rule.isVacationOver')\n declare isVacationOver: boolean;\n\n @reads('rule.isPaused')\n declare isPaused: boolean;\n\n @reads('rule.id')\n declare id: string;\n\n @equal('state', stateEnum.OverQuota)\n declare isOverQuota: boolean;\n\n @equal('state', stateEnum.DataCapExceeded)\n declare isDataCapExceeded: boolean;\n\n /**\n * Component rendered on a Visual Verification page\n */\n @reads('identityManager.identityModel.isVisualVerification')\n isOperatorSession: boolean | undefined;\n\n /**\n * If we should use the camera arming button bar styling. Only used for rules that are escalated events.\n */\n @computed('args.hasCameraArmingAccess', 'rule.isEscalatedEvent')\n get useCameraArmingButtonBar(): boolean {\n return this.args.hasCameraArmingAccess && this.rule.get('isEscalatedEvent');\n }\n\n /**\n * helper to track the state, handle all logic finding the current state of the rule here, use in switch statments for the titles and scheduleChoices\n * @returns stateEnum value\n */\n @computed('args.{isInException,isOverUploadQuota}', 'isPaused', 'recordingRulePauseReasonType')\n get state(): stateEnum {\n if (this.args.isOverUploadQuota) {\n return stateEnum.OverQuota;\n } else if (this.recordingRulePauseReasonType === UserScheduledPause) {\n return stateEnum.ScheduledPause;\n } else if (this.recordingRulePauseReasonType === DataCapExceeded) {\n return stateEnum.DataCapExceeded;\n } else if (this.args.isInException) {\n return stateEnum.Exception;\n } else if (this.isPaused) {\n return stateEnum.Off;\n }\n\n return stateEnum.On;\n }\n\n /**\n * Gets the properties for each choice. Each choice pauses a recording rule for a specified amount time.\n */\n @computed('contextManager.identityModel.hasInternalBetaAccess', 'id', 'isOperatorSession', 'rule', 'state')\n get scheduleChoices(): DropdownActionItem[] | undefined {\n let choiceArray: scheduleChoice[] = [\n {\n name: this.intl.tc(this, 'pauseFor', { duration: this.intl.t('generic.minutes', { num: 30 }) }),\n duration: Hour / 2\n },\n {\n name: this.intl.tc(this, 'pauseFor', { duration: this.intl.t('generic.hours', { num: 1 }) }),\n duration: Hour\n },\n {\n name: this.intl.tc(this, 'pauseFor', { duration: this.intl.t('generic.hours', { num: 4 }) }),\n duration: Hour * 4\n },\n {\n name: this.intl.tc(this, 'pauseFor', { duration: this.intl.t('generic.hours', { num: 8 }) }),\n duration: Hour * 8\n },\n {\n name: this.intl.tc(this, 'pauseFor', { duration: this.intl.t('generic.days', { num: 1 }) }),\n duration: Hour * 24\n }\n ];\n if (this.contextManager.identityModel.hasInternalBetaAccess) {\n choiceArray = [\n {\n name: this.intl.tc(this, 'pauseFor', { duration: this.intl.t('generic.minutes', { num: 1 }) }),\n duration: Hour / 60\n },\n ...choiceArray\n ];\n }\n\n const returnArray = choiceArray.map((scheduleChoice) => {\n const dropdownActionItem: DropdownActionItem = DropdownActionItem.create({\n name: scheduleChoice.name,\n action: () => {\n // Wrap this in a promise.\n return Promise.resolve(this.rule).then((r) =>\n r\n .submitCustomApiCall(`pauseRule?pauseDuration=${scheduleChoice.duration}`)\n .then(() => r.reload())\n .catch(() => {})\n );\n }\n });\n return dropdownActionItem;\n });\n\n const resumeRuleDropdownActionItem = DropdownActionItem.create({\n name: this.intl.tc(this, 'turnOn'),\n action: () => {\n // Wrap this in a promise.\n return Promise.resolve(this.rule).then((r) =>\n r\n .submitCustomApiCall('resumeRule')\n .then(() => r.reload())\n .catch(() => {})\n );\n }\n });\n\n const turnOffRuleDropdownActionItem = DropdownActionItem.create({\n name: this.intl.tc(this, 'turnOff'),\n action: () => {\n // Wrap this in a promise.\n return Promise.resolve(this.rule).then((r) =>\n r\n .submitCustomApiCall('pauseRule')\n .then(() => r.reload())\n .catch(() => {})\n );\n }\n });\n\n switch (this.state) {\n case stateEnum.ScheduledPause:\n returnArray.addObject(resumeRuleDropdownActionItem);\n this.isOperatorSession || returnArray.addObject(turnOffRuleDropdownActionItem);\n return returnArray;\n case stateEnum.Off:\n returnArray.clear();\n returnArray.addObject(resumeRuleDropdownActionItem);\n return returnArray;\n case stateEnum.Exception:\n case stateEnum.On:\n this.isOperatorSession || returnArray.addObject(turnOffRuleDropdownActionItem);\n return returnArray;\n case stateEnum.DataCapExceeded:\n case stateEnum.OverQuota:\n return;\n }\n }\n\n /**\n * The background color of the pause bar.\n */\n @computed('useCameraArmingButtonBar', 'rule.armingStatus')\n get barColor(): SafeString {\n if (!this.useCameraArmingButtonBar) {\n return htmlSafe('gray');\n }\n\n switch (this.rule.get('armingStatus')) {\n case RuleArmingStatusEnum.Disarmed:\n case RuleArmingStatusEnum.None:\n case RuleArmingStatusEnum.Off:\n case RuleArmingStatusEnum.OverQuota:\n return htmlSafe('gray');\n case RuleArmingStatusEnum.Exception:\n case RuleArmingStatusEnum.OutOfSchedule:\n case RuleArmingStatusEnum.OutOfVacationWatch:\n case RuleArmingStatusEnum.Paused:\n return htmlSafe('green');\n case RuleArmingStatusEnum.Armed:\n return htmlSafe('red');\n }\n\n return htmlSafe('');\n }\n\n /**\n * The status title text to use.\n */\n @computed('useCameraArmingButtonBar', 'pausedUntilDateTimeUtc', 'state', 'dropdownTitleForCameraArmingBeta')\n get statusTitle(): string {\n if (this.useCameraArmingButtonBar) {\n // when using the camera arming button bar the status is shown in the dropdownTitle\n return '';\n }\n\n if (this.state === stateEnum.ScheduledPause && this.pausedUntilDateTimeUtc == null) {\n return this.intl.tc(this, 'pauseTimeNotFound');\n }\n\n const { intl, state } = this,\n timestamp = this.getTimestampText(this.pausedUntilDateTimeUtc);\n\n switch (state) {\n case stateEnum.OverQuota:\n return intl.tc(this, 'ruleOverQuota');\n case stateEnum.DataCapExceeded:\n return intl.tc(this, 'dataCapExceeded');\n case stateEnum.Exception:\n return intl.tc(this, 'ruleException');\n case stateEnum.ScheduledPause:\n return intl.tc(this, 'pausedUntil', { dateTime: timestamp });\n case stateEnum.Off:\n return intl.tc(this, 'ruleOff');\n default:\n return intl.tc(this, 'ruleOn');\n }\n }\n\n /**\n * The dropdown title to use\n */\n @computed('useCameraArmingButtonBar', 'state', 'dropdownTitleForCameraArmingBeta')\n get dropdownTitle(): string {\n if (this.useCameraArmingButtonBar) {\n return this.dropdownTitleForCameraArmingBeta;\n }\n\n switch (this.state) {\n case stateEnum.Off:\n case stateEnum.ScheduledPause:\n return this.intl.tc(this, 'resumeOptions');\n default:\n return this.intl.tc(this, 'pauseOptions');\n }\n }\n\n /**\n * Returns the appropriate dropdown title for users who have the Camera Arming Beta\n * todo after Camera Arming Beta goes GA we should remove the non-beta code\n */\n @computed('rule.{armingStatus,armingStatusChangeDateTimeUtc}')\n get dropdownTitleForCameraArmingBeta(): string {\n const { intl, rule } = this;\n\n switch (rule.get('armingStatus')) {\n case RuleArmingStatusEnum.Armed:\n // If the rule does not have the next arming status change date calculated.\n if (!rule.get('armingStatusChangeDateTimeUtc')) {\n return intl.tc(this, 'armed');\n }\n\n return intl.tc(this, 'armedUntil', {\n dateTime: this.getTimestampText(rule.get('armingStatusChangeDateTimeUtc'))\n });\n case RuleArmingStatusEnum.Off:\n case RuleArmingStatusEnum.None:\n return intl.tc(this, 'ruleOff');\n case RuleArmingStatusEnum.OutOfSchedule:\n case RuleArmingStatusEnum.OutOfVacationWatch:\n return intl.tc(this, 'disarmedBySchedule');\n case RuleArmingStatusEnum.OverQuota:\n return intl.tc(this, 'ruleOverQuota');\n case RuleArmingStatusEnum.Exception:\n return intl.tc(this, 'disarmedByAutomation');\n case RuleArmingStatusEnum.Disarmed:\n case RuleArmingStatusEnum.Paused:\n // If the rule does not have the next arming status change date calculated.\n if (!rule.get('armingStatusChangeDateTimeUtc')) {\n return intl.tc(this, 'disarmed');\n }\n\n // For paused rules we don't want to just display pause end date but next arming status change date\n // which could be same as pause end date but could also be further in the future.\n // For example, if pause would end when schedule is not active - display \"Disarmed until\" schedule start date, not pause end date.\n return intl.tc(this, 'disarmedUntil', {\n dateTime: this.getTimestampText(rule.get('armingStatusChangeDateTimeUtc'))\n });\n default:\n return '';\n }\n }\n\n /**\n * Gets the timestamp text to use for the Date passed in\n */\n private getTimestampText(date: Date | null): string {\n const { intl, contextManager } = this,\n { identityModel, showPreferredTimezone } = contextManager,\n { preferredTimezone } = identityModel;\n\n return intl.formatDateTz(date ?? Date.now(), {\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n timeZone: showPreferredTimezone ? preferredTimezone : intl.timeZone\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::Rules::RuleCollection::PauseBar': typeof SchedulePauseRule;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    \\n
    \\n

    {{this.scheduleName}}

    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    {{tc this \\\"actions\\\"}}

    \\n {{#if this.isHalfDisarm}}\\n
    \\n \\n

    {{this.firstArmingText}}

    \\n
    \\n {{else if this.isHalfArm}}\\n
    \\n \\n

    {{this.secondArmingText}}

    \\n
    \\n {{else if this.isHybridSchedule}}\\n
    \\n \\n

    {{this.firstArmingText}}

    \\n
    \\n
    \\n \\n

    {{this.rearmingTimeText}}

    \\n
    \\n {{else if (eq @schedule.rearmingState null)}}\\n
    \\n \\n

    {{this.firstArmingText}}

    \\n
    \\n
    \\n \\n

    {{this.secondArmingText}}

    \\n
    \\n {{else}}\\n
    \\n \\n

    {{this.rearmingTimeText}}

    \\n
    \\n {{/if}}\\n
    \\n
    \\n

    {{tc this \\\"timeframe\\\"}}

    \\n

    {{this.timeframe}}

    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n {{#if this.buttonsDisabled}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \",{ moduleName: \"customer-site/components/commercial/arming-schedules/schedule-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { MINUTES_IN_DAY } from '@adc/ember-utils/constants/time';\nimport { action, computed, set } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { EmberArmingSchedulesAndAutoRearmingEdit } from 'customer-site/enums/CustomerPageUrl';\nimport {\n HalfArmAwaySchedule,\n HalfArmStaySchedule,\n HalfDisarmSchedule,\n HybridArmingSchedule,\n HalfNightSchedule\n} from 'customer-site/enums/ScheduleType';\nimport { intlPath } from '@adc/i18n/path';\nimport { dayMinutesToTimeString } from '@adc/login-setup-addon/components/settings/business-hours/edit-business-hours-timetable';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type ArmingSchedule from 'customer-site/models/commercial/schedules/arming-schedule';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\n/**\n * Schedule arming types.\n */\nexport const DISARMED = 0,\n ARM_STAY = 1,\n ARM_AWAY = 2,\n ARM_NIGHT = 3,\n NEXT_DAY_TIME_START = 1440;\n\ninterface ScheduleCardSignature {\n Args: {\n schedule: ArmingSchedule;\n onDelete: () => void;\n };\n}\n\n@intlPath({ path: 'commercial/arming-schedules/schedule-card' })\nexport default class ScheduleCard extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalsService;\n @service declare notificationManager: NotificationManager;\n @service declare navigation: NavigationService;\n\n /**\n * Are we processing a delete for this schedule?\n */\n @tracked\n isProcessing = false;\n\n /**\n * Can the logged in user create and edit arming schedules?\n */\n @reads('contextManager.identityModel.canCreateEditArmingSchedules')\n declare canCreateEditArmingSchedules: boolean;\n\n /**\n * Is this is a half disarm schedule\n */\n get isHalfDisarm(): boolean {\n return this.args.schedule.scheduleType == HalfDisarmSchedule;\n }\n\n /**\n * Is this is a half arm schedule\n */\n get isHalfArm(): boolean {\n return (\n this.args.schedule.scheduleType == HalfArmAwaySchedule ||\n this.args.schedule.scheduleType == HalfArmStaySchedule ||\n this.args.schedule.scheduleType == HalfDisarmSchedule ||\n this.args.schedule.scheduleType == HalfNightSchedule\n );\n }\n\n /**\n * Is this a hybrid schedule\n */\n get isHybridSchedule(): boolean {\n return this.args.schedule.scheduleType == HybridArmingSchedule;\n }\n\n /**\n * Get the name associated with the schedule. If the name is blank or null, return 'Arming Schedule'\n */\n get scheduleName(): string {\n const scheduleName = this.args.schedule.scheduleName;\n\n return scheduleName == null || scheduleName.trim() == '' ? this.intl.tc(this, 'armingSchedule') : scheduleName;\n }\n\n /**\n * Get the first arming icon\n */\n get firstArmingStateIcon(): string {\n return this.getArmingIcon(true);\n }\n\n /**\n * Get the second arming icon\n */\n get secondArmingStateIcon(): string {\n return this.getArmingIcon(false);\n }\n\n /**\n * Get the appropriate icon for the rearming schedule.\n */\n get rearmingStateIcon(): string {\n const rearmingState = this.args.schedule.rearmingState;\n\n switch (rearmingState) {\n case ARM_STAY:\n return 'system-armed-stay-hd';\n case ARM_AWAY:\n return 'system-armed-away-hd';\n case ARM_NIGHT:\n return 'system-armed-night-hd';\n default:\n return 'warning-triangle';\n }\n }\n\n /**\n * Get the first arming time text.\n */\n get firstArmingText(): string {\n return this.getArmingText(true);\n }\n\n /**\n * Get the second arming time text.\n */\n get secondArmingText(): string {\n return this.getArmingText(false);\n }\n\n /**\n * Gets the rearming description text depending on what type of schedule.\n */\n get rearmingTimeText(): string {\n const isBusinessHours = this.args.schedule.isBusinessHours,\n rearmingState = this.args.schedule.rearmingState;\n\n if (isBusinessHours) {\n switch (rearmingState) {\n case ARM_STAY:\n return this.intl.tc(this, 'armStayBetweenText');\n case ARM_AWAY:\n return this.intl.tc(this, 'armAwayBetweenText');\n case ARM_NIGHT:\n return this.intl.tc(this, 'armNightBetweenText');\n default:\n return this.intl.tc(this, 'errorText');\n }\n }\n\n let translation;\n switch (rearmingState) {\n case ARM_STAY:\n translation =\n this.args.schedule.endMinutes >= NEXT_DAY_TIME_START\n ? 'armStayNextDayRearmingText'\n : 'armStayRearmingText';\n break;\n case ARM_AWAY:\n translation =\n this.args.schedule.endMinutes >= NEXT_DAY_TIME_START\n ? 'armAwayNextDayRearmingText'\n : 'armAwayRearmingText';\n break;\n case ARM_NIGHT:\n translation =\n this.args.schedule.endMinutes >= NEXT_DAY_TIME_START\n ? 'armNightNextDayRearmingText'\n : 'armNightRearmingText';\n break;\n default:\n return this.intl.tc(this, 'errorText');\n }\n\n return this.intl.tc(this, translation, {\n startTime: dayMinutesToTimeString(this.args.schedule.rearmingStartMinutes, this.intl),\n endTime: dayMinutesToTimeString(this.args.schedule.endMinutes, this.intl)\n });\n }\n\n /**\n * Gets the timeframe for the schedule.\n */\n get timeframe(): string {\n const daysOfWeekSelection = this.args.schedule.daysOfWeekSelection;\n type DayName = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';\n const weekdays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'];\n const weekends = ['sunday', 'saturday'];\n\n const selectedWeekdays = weekdays.filter((day) => daysOfWeekSelection.get(day as DayName)),\n selectedWeekends = weekends.filter((day) => daysOfWeekSelection.get(day as DayName));\n\n // All days selected\n if (selectedWeekdays.length + selectedWeekends.length == 7) {\n return this.intl.tc(this, 'everyDay');\n }\n // All weekdays, no weekend days\n else if (selectedWeekdays.length == 5 && selectedWeekends.length == 0) {\n return this.intl.tc(this, 'weekdays');\n }\n // All weekend days, no weekdays\n else if (selectedWeekdays.length == 0 && selectedWeekends.length == 2) {\n return this.intl.tc(this, 'weekends');\n }\n\n const selectedDays = [...selectedWeekends, ...selectedWeekdays].map((day) => this.intl.tc(this, day));\n return selectedDays.join(', ');\n }\n\n /**\n * Should the edit/delete button be disabled?\n */\n @computed('isProcessing')\n get buttonsDisabled(): boolean {\n return this.isProcessing == true;\n }\n\n /**\n * Edit the selected schedule.\n */\n @action\n editSchedule(): void {\n this.navigation.transitionToRouteId(EmberArmingSchedulesAndAutoRearmingEdit, this.args.schedule.id);\n }\n\n /**\n * Delete the selected schedule.\n */\n @action\n deleteSchedule(): void {\n this.modals.showConfirmationDialog(\n this.intl.tc(this, 'deleteSchedule'),\n htmlSafe(this.intl.tc(this, 'deleteConfirm', { scheduleName: this.scheduleName })),\n {\n text: this.intl.tc(this, 'deleteSchedule'),\n action: () =>\n this.args.schedule\n .destroyRecord()\n .then(() => {\n this.notificationManager.addSuccess(\n this.intl.tc(this, 'deleteSuccess', { scheduleName: this.scheduleName })\n );\n this.args.onDelete();\n })\n .catch(() => this.args.schedule.rollbackAttributes()),\n css: 'btn-color-danger'\n }\n );\n }\n\n /**\n * Toggle the selected schedule on or off.\n */\n @action\n toggleSchedule(): void {\n const {\n args: { schedule },\n intl\n } = this;\n\n schedule\n .toggleActiveStatus()\n .then(() => {\n set(schedule, 'isActive', !schedule.isActive);\n this.notificationManager.addSuccess(\n intl.tc(this, schedule.isActive ? 'scheduleResumed' : 'schedulePaused')\n );\n })\n .catch(() => schedule.rollbackAttributes());\n }\n\n /**\n * Helper to get the arming state icon\n */\n getArmingIcon(isFirstState: boolean): string {\n const armingState = isFirstState ? this.args.schedule.firstArmingState : this.args.schedule.secondArmingState;\n\n switch (armingState) {\n case DISARMED:\n return 'system-disarmed-hd';\n case ARM_STAY:\n return 'system-armed-stay-hd';\n case ARM_AWAY:\n return 'system-armed-away-hd';\n case ARM_NIGHT:\n return 'system-armed-night-hd';\n default:\n return 'warning-triangle';\n }\n }\n\n /**\n * Helper to get which translation and time we're using for the arm text.\n */\n getArmingText(isFirstState: boolean): string {\n const armingState = isFirstState ? this.args.schedule.firstArmingState : this.args.schedule.secondArmingState,\n time = isFirstState ? this.args.schedule.startMinutes : this.args.schedule.endMinutes,\n isBusinessHours = this.args.schedule.isBusinessHours;\n\n if (isBusinessHours) {\n switch (armingState) {\n case DISARMED:\n return this.intl.tc(this, 'disarmAtEmployeeArrivalText');\n case ARM_STAY:\n return this.intl.tc(this, 'armStayAtEmployeeDepartureText');\n case ARM_AWAY:\n return this.intl.tc(this, 'armAwayAtEmployeeDepartureText');\n case ARM_NIGHT:\n return this.intl.tc(this, 'armNightAtEmployeeDepartureText');\n default:\n return this.intl.tc(this, 'errorText');\n }\n }\n\n // Should we show (next day) next to the arming state?\n const day = !isFirstState && this.args.schedule.endMinutes >= MINUTES_IN_DAY ? 'nextDay' : 'sameDay';\n\n switch (armingState) {\n case DISARMED:\n return this.intl.tc(this, 'disarmedAtText', {\n time: dayMinutesToTimeString(time, this.intl)\n });\n case ARM_STAY:\n return this.intl.tc(this, 'armStayAtText.' + day, {\n time: dayMinutesToTimeString(time, this.intl)\n });\n case ARM_AWAY:\n return this.intl.tc(this, 'armAwayAtText.' + day, {\n time: dayMinutesToTimeString(time, this.intl)\n });\n case ARM_NIGHT:\n return this.intl.tc(this, 'armNightAtText.' + day, {\n time: dayMinutesToTimeString(time, this.intl)\n });\n default:\n return this.intl.tc(this, 'errorText');\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Commercial::ArmingSchedules::ScheduleCard': typeof ScheduleCard;\n }\n}\n","import Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { guidFor } from '@ember/object/internals';\nimport { inject as service } from '@ember/service';\n\nimport type HomePageManager from 'customer-site/services/homepage-manager';\n\n/**\n * @classdesc\n * Base class for dashboard card views that have configurable tab index based on active card.\n */\nexport default class ActiveCardTabIndexComponent extends Component {\n @service declare homepageManager: HomePageManager;\n\n @reads('homepageManager.activeCardId')\n activeCardId?: string;\n\n @computed('activeCardId')\n get elementsTabIndex(): number {\n const el = document.getElementById(guidFor(this));\n return el ? this.homepageManager.getElementTabIndex(el) : -1;\n }\n\n @computed('elementsTabIndex')\n get isKeyboardInteractive(): boolean {\n return this.elementsTabIndex === 0;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @menu}}\\n \\n {{#if @menu.title}}\\n

    {{@menu.title}}

    \\n {{/if}}\\n {{#if (has-block)}}\\n
    \\n {{yield}}\\n
    \\n {{else}}\\n \\n {{#each @menu.items as |item|}}\\n
  • \\n \\n
  • \\n {{/each}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/dashboard-cards/card-toolbar/button-popup/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\n\nexport type MenuItem = {\n text: string;\n action: () => boolean | void;\n selected: boolean;\n};\n\nexport type MenuConfig = {\n selector: string;\n items?: MenuItem[];\n isKeyboard?: boolean;\n title?: string;\n focusSelector?: string;\n};\n\ninterface DashboardCardsCardToolbarButtonPopupSignature {\n Args: {\n menu?: MenuConfig;\n closeMenu: VoidFunction;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default class DashboardCardsCardToolbarButtonPopup extends Component {\n @action menuOpened(el: HTMLElement): void {\n const { menu } = this.args;\n if (menu?.isKeyboard) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => {\n const b = el.querySelector(menu?.focusSelector ?? 'button');\n if (b) {\n (b as HTMLElement).focus();\n }\n });\n }\n }\n\n @action clickMenuItem(item: MenuItem): void {\n if (item.action() !== false) {\n this.args.closeMenu();\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::CardToolbar::ButtonPopup': typeof DashboardCardsCardToolbarButtonPopup;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#each (coalesce @buttons (array)) as |cfg idx|}}\\n \\n {{#let (t \\'generic.loadingEllipsis\\') (t \\'generic.loading\\') as |text loading|}}\\n {{#unless btn.skip}}\\n \\n {{/unless}}\\n {{/let}}\\n \\n{{/each}}\",{ moduleName: \"customer-site/components/dashboard-cards/card-toolbar/buttons/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { MenuItem } from '../button-popup/index';\n\nexport interface ToolbarButton {\n text: string;\n icon: string;\n css?: string;\n skip?: boolean;\n disabled?: boolean;\n fn?: (selector: string, isKeyboard?: boolean) => unknown;\n items?: MenuItem[];\n}\n\nexport interface DashboardCardsToolbarButtonsSignature {\n Args: {\n /** The buttons to render in this toolbar. */\n buttons: (ToolbarButton | Promise)[];\n /** If this is not true the buttons will not be keyboard accessible. */\n isInteractive: boolean;\n /** Prefix used as part of each button ID, e.g. id=\"prefix-1\" */\n prefix: string;\n /** cardId parameter value from the card that is rendering this toolbar (used for QE testing attribute) */\n cardId: string | number;\n /** Handler function for when a button is clicked. */\n clickButton: (button: ToolbarButton, evt: PointerEvent & { target: HTMLButtonElement }) => void;\n };\n}\n\nconst DashboardCardsToolbarButtons = templateOnlyComponent();\nexport default DashboardCardsToolbarButtons;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::CardToolbar::Buttons': typeof DashboardCardsToolbarButtons;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if @leftButtons}}\\n \\n\\n
    \\n {{/if}}\\n\\n {{yield}}\\n\\n {{#if @rightButtons}}\\n
    \\n\\n \\n {{/if}}\\n\\n\\n\\n\\n{{yield to=\\\"popup\\\"}}\\n\",{ moduleName: \"customer-site/components/dashboard-cards/card-toolbar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { inject as service } from '@ember/service';\nimport { EmberAlertsIssues } from 'customer-site/enums/CustomerPageUrl';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { DeviceBatteryDetails } from 'customer-site/models/devices/base-device';\nimport type HomePageManagerService from 'customer-site/services/homepage-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { MenuConfig } from './button-popup/index';\nimport type { DashboardCardsToolbarButtonsSignature, ToolbarButton } from './buttons/index';\n\ntype DashboardCardsToolbarButtonsArgs = DashboardCardsToolbarButtonsSignature['Args'];\n\n// Re-export types because there are many places that use it.\nexport type { ToolbarButton } from './buttons/index';\nexport type DashboardCardToolbarButtons = DashboardCardsToolbarButtonsArgs['buttons'];\n\nexport interface CardToolbarSignature {\n Element: HTMLDivElement;\n Args: {\n leftButtons?: DashboardCardToolbarButtons;\n rightButtons?: DashboardCardToolbarButtons;\n cardId: string | number;\n };\n Blocks: {\n default: [];\n popup: [];\n };\n}\n\nexport function getDeviceRefreshButton(intl: ADCIntlService, fn: VoidFunction): ToolbarButton {\n return createToolbarButton(intl.t('generic.updateStatus'), 'refresh', { fn });\n}\n\nexport function getDrillToDetailsButton(intl: ADCIntlService, fn: VoidFunction): ToolbarButton {\n return createToolbarButton(intl.t('generic.details'), 'chevron-right', { fn });\n}\n\nexport function getDeviceBatteryButton(\n navigation: NavigationService,\n batteryDetails: DeviceBatteryDetails[],\n skipIfNotLow = false\n): ToolbarButton | undefined {\n const details = batteryDetails.filterBy('level'),\n isLowBattery = batteryDetails.isAny('isLow'),\n [lowestBattery] = details.sortBy('level');\n\n if (!lowestBattery?.icon || (skipIfNotLow && !isLowBattery)) {\n return undefined;\n }\n\n return createToolbarButton(lowestBattery.text, lowestBattery.icon, {\n css: isLowBattery ? 'on alert-icon' : 'low-battery-alert-off',\n fn: isLowBattery ? () => navigation.transitionToRouteId(EmberAlertsIssues) : undefined\n });\n}\n\n/**\n * @classdesc\n * The toolbar component for display at the top of dashboard cards.\n */\nexport default class CardToolbar extends Component {\n @service declare homepageManager: HomePageManagerService;\n\n @computed('homepageManager.activeCardId')\n get isInteractive(): boolean {\n const el = document.getElementById(guidFor(this));\n return !!(el && this.homepageManager.getElementTabIndex(el) === 0);\n }\n\n /**\n * Executes the button function (if present).\n */\n @action clickButton(button: ToolbarButton, evt: PointerEvent & { target: HTMLButtonElement }): void {\n const selector = `#${evt.target.closest('button')?.id}`,\n isKeyboard = !evt.pointerType,\n { items, fn = () => {} } = button;\n\n if (items) {\n this.menuConfig = {\n selector,\n items,\n isKeyboard\n };\n return;\n }\n\n fn(selector, isKeyboard);\n }\n\n @tracked menuConfig?: MenuConfig;\n\n @action closeMenu(): void {\n this.menuConfig = undefined;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::CardToolbar': typeof CardToolbar;\n }\n}\n\n/**\n * A helper function for creating dashboard card toolbar button configurations.\n */\nexport function createToolbarButton(text: string, icon: string, overrides: Partial = {}): ToolbarButton {\n // Create button configuration.\n return {\n text,\n icon,\n css: '',\n fn: () => {},\n ...overrides\n };\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{yield to=\\\"card-body\\\"}}\\n\\n {{yield to=\\\"card-toolbar\\\"}}\\n\\n {{#if (and @isHomeCard this.contextManager.isEditingHomeScreen)}}\\n
    \\n {{yield to=\\\"card-settings\\\"}}\\n\\n {{#unless @isHero}}\\n
    \\n \\n
    \\n

    {{@cardName}}

    \\n {{/unless}}\\n
    \\n {{/if}}\\n\",{ moduleName: \"customer-site/components/dashboard-cards/container-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isEnterOrSpaceCode, isEscapeCode, getFocusableElements } from '@adc/ember-utils/utils/a11y';\nimport { computed, action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { schedule } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type HomePageManager from 'customer-site/services/homepage-manager';\n\n/**\n * A helper function for getting a CSS selector for the card that represents the given card Id.\n */\nexport function getCardSelector(cardId: ContainerCardSignature['Args']['cardId']): string {\n return `.dashboard-card[data-card-id=\"${cardId}\"]`;\n}\n\nexport interface ContainerCardSignature {\n Element: HTMLDivElement;\n Args: {\n cardId: string | number;\n isHomeCard?: boolean;\n cardName?: string;\n isHero?: boolean;\n };\n Blocks: {\n 'card-body': [];\n 'card-toolbar': [];\n 'card-settings': [];\n };\n}\n\n/**\n * @classdesc\n * The container for each dashboard card, consisting of a toolbar area and a card body area.\n *\n * @example\n * \n * <:card-toolbar>\n * \n * @leftButtons={{this.leftToolbarButtons}}\n * @rightButtons={{this.rightToolbarButtons}}\n * >\n * {{#unless this.isIconCard}}\n *

    {{t 'generic.devices.garageDoors'}}

    \n * {{/unless}}\n *
    \n * <:/card-toolbar>\n *\n * <:card-body>\n *

    Content to appear in the \"Body\" of the card.

    \n * <:/card-body>\n * \n */\n@intlPath({ path: 'dashboard-cards/container-card' })\nexport default class ContainerCard extends Component {\n @service declare contextManager: ContextManager;\n @service declare homepageManager: HomePageManager;\n @service declare intl: ADCIntlService;\n\n /**\n * Focus trap options.\n */\n focusTrapOptions = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true\n };\n\n /**\n * Is the focus trap active?\n */\n @tracked isFocusTrapActive = false;\n\n /**\n * The computed CSS class for this card.\n */\n @computed('args.{isHero,isHomeCard}')\n get elementCss(): string {\n return ['card', 'surface', 'dashboard-card', `is-${this.args.isHomeCard ? 'home' : 'details'}-card`]\n .filter((item) => item != undefined)\n .join(' ');\n }\n\n /**\n * Update card font-size based on card dimensions for resizing icons.\n */\n @action\n adjustCardSizing(el: HTMLDivElement): void {\n const { style } = el;\n\n style.fontSize =\n String(Math.round(Math.min(el.offsetHeight, el.offsetWidth) / (this.args.isHero ? 4.8 : 2.4))) + '%';\n style.opacity = '1';\n }\n\n /**\n * Handles focus trap in card.\n */\n @action\n activateFocusTrap(e: KeyboardEvent & { target: HTMLElement }): void {\n const { target } = e;\n\n if (target.classList.contains('dashboard-card')) {\n const { code } = e,\n { homepageManager } = this;\n\n if (isEnterOrSpaceCode(code)) {\n e.preventDefault();\n e.stopPropagation();\n\n this.isFocusTrapActive = true;\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => {\n const [firstElement] = getFocusableElements(target);\n (firstElement as HTMLElement)?.focus();\n });\n } else if (isEscapeCode(code)) {\n e.preventDefault();\n e.stopPropagation();\n homepageManager.setActiveCardId();\n\n this.isFocusTrapActive = false;\n }\n }\n }\n\n /**\n * Sets the active card.\n */\n @action\n checkActiveCard(e: KeyboardEvent & { target: HTMLElement }): void {\n const { target } = e;\n\n if (target.classList.contains('dashboard-card')) {\n const { code } = e,\n { homepageManager } = this;\n\n if (isEnterOrSpaceCode(code)) {\n e.preventDefault();\n e.stopPropagation();\n\n homepageManager.setActiveCardId(guidFor(this));\n }\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::ContainerCard': typeof ContainerCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:card-toolbar>\\n \\n {{#unless this.isIconCard}}\\n

    {{t \\'generic.doors\\'}}

    \\n {{/unless}}\\n \\n \\n\\n <:card-body>\\n \\n <:prompt-view>\\n {{#if this.isIconCard}}\\n \\n <:label as |device|>\\n {{#unless this.isHomeCard}}\\n {{#if device.displayDate}}\\n

    {{device.displayDate}}

    \\n {{/if}}\\n\\n {{#if device.stateInfo.additionalStateDescriptions}}\\n {{#each-in device.stateInfo.additionalStateDescriptions as |_ value|}}\\n

    {{value}}

    \\n {{/each-in}}\\n {{/if}}\\n {{/unless}}\\n \\n \\n\\n {{else}}\\n \\n {{#if device.batteryDetails.isLow}}\\n \\n {{/if}}\\n \\n\\n {{/if}}\\n \\n\\n <:prompt-edit>\\n {{#if this.editDevice.isHiddenState}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/access-control-access-point-devices-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { ICON_DOOR } from 'customer-site/components/icons/circles/device-status/index';\nimport { Buzz, Closed, Open, Unknown, Hidden } from 'customer-site/enums/CardReaderState';\nimport { EmberAccessControlAccessPointDevices } from 'customer-site/enums/CustomerPageUrl';\nimport { getAccessPointStateCSS } from 'customer-site/utils/access-control-access-point';\nimport { intlPath } from '@adc/i18n/path';\nimport AccessPointCard from '../access-point-card/index';\nimport { getDeviceItemAction } from '../edit-state/index';\n\nimport './_style.scss';\nimport type AccessControlAccessPointDevice from 'customer-site/models/devices/access-control-access-point-device';\nimport type { BaseCardSignature } from '../base-card';\nimport type { DeviceItemAction } from '../edit-state/index';\n\ntype ReaderState = typeof Open | typeof Closed | typeof Buzz;\n\n/**\n * @classdesc\n * The card for displaying/editing access control access point devices state.\n */\n@intlPath({ path: 'dashboard-cards/devices/access-control-access-point-devices-card' })\nexport default class AccessControlAccessPointDevicesComponent extends AccessPointCard<\n AccessControlAccessPointDevice,\n BaseCardSignature\n> {\n // region Overrides\n\n /** @override */\n iconType = ICON_DOOR;\n\n /** @override */\n get showRefreshButton(): boolean {\n return !this.isHomeCard;\n }\n\n /** @override */\n detailsRouteId = EmberAccessControlAccessPointDevices;\n\n /**\n * Returns the translation path for the given state.\n */\n private getAccessPointStateText(state: ReaderState): string {\n return this.intl.t(\n {\n [Open]: 'generic.unlock',\n [Closed]: 'generic.lock',\n [Buzz]: 'generic.buzzOpen'\n }[state] as string\n );\n }\n\n /** @override */\n getDeviceEditActions(device: AccessControlAccessPointDevice): DeviceItemAction[] {\n const refreshAction = this.getRefreshDeviceAction(\n device,\n getAccessPointStateCSS(Unknown),\n this.iconType,\n Unknown\n );\n if (refreshAction) {\n return [refreshAction];\n }\n\n const { canBuzz, canLockUnlock } = device,\n actions: Record = {\n [Unknown]: [Unknown]\n };\n\n if (canLockUnlock && canBuzz) {\n actions[Closed] = [Open, Buzz];\n actions[Open] = [Closed];\n } else if (canBuzz) {\n actions[Closed] = [Buzz];\n }\n\n // Hidden State AC devices display all actions.\n actions[Hidden] = [Open, Buzz, Closed];\n\n return (actions[device.desiredState] ?? []).map((state) =>\n getDeviceItemAction(\n this.getAccessPointStateText(state as ReaderState),\n getAccessPointStateCSS(state),\n this.iconType,\n state\n )\n );\n }\n}\n","import { EmberLocationsLocationAccessPoints } from '../../../../enums/CustomerPageUrl';\nimport BaseDeviceCard from '../base-card';\n\nimport './_style.scss';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { BaseCardSignature } from '../base-card';\n\n/**\n * @classdesc\n * Base class for Access Point cards.\n */\nexport default class AccessPointCard> extends BaseDeviceCard<\n M,\n T\n> {\n /**\n * The route that we should navigate to when in the enterprise context.\n */\n enterpriseDetailsRoute = EmberLocationsLocationAccessPoints;\n\n /** @override */\n drillToDetailsRoute(): void {\n if (this.contextManager.isEnterprise) {\n this.navigation.transitionToRouteId(this.enterpriseDetailsRoute, this.args.locationId ?? 0);\n return;\n }\n\n super.drillToDetailsRoute();\n }\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, set } from '@ember/object';\nimport { bool, equal, mapBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport {\n createToolbarButton,\n getDeviceRefreshButton,\n getDrillToDetailsButton,\n getDeviceBatteryButton\n} from '../card-toolbar/index';\nimport { getCardSelector } from '../container-card/index';\nimport { getDeviceItemAction } from './edit-state/index';\n\nimport './_style.scss';\nimport type DomService from '@adc/ember-utils/services/dom';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type RouterService from '@ember/routing/router-service';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { DeviceBatteryDetails } from 'customer-site/models/devices/base-device';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ToolbarButton, DashboardCardToolbarButtons } from '../card-toolbar/index';\nimport type { ContainerCardSignature } from '../container-card/index';\nimport type { DeviceItemAction } from './edit-state/index';\n\nexport interface CloseTargetInfos {\n element: HTMLElement | null;\n selector: string;\n}\n\nexport interface BaseCardSignature {\n Element: ContainerCardSignature['Element'];\n Args: Pick & {\n devices?: M[] | Awaited>;\n deviceIndex?: number;\n locationId?: number;\n };\n}\n\n/**\n * @classdesc\n * The base device card, no template.\n */\nexport default abstract class BaseCard> extends Component {\n @service declare contextManager: ContextManager;\n @service declare router: RouterService;\n @service declare dom: DomService;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare navigation: NavigationService;\n\n // region Component state\n\n /**\n * The device currently being edited.\n */\n @tracked editDevice?: M;\n\n /**\n * Indicates the prompt state should be locked.\n */\n @tracked isLocked = false;\n\n /**\n * Optional function called when the device details modal is closed.\n */\n onModalClose?: VoidFunction;\n\n // endregion\n\n // region Overridden properties\n\n /**\n * The type of icon to show for this device card.\n */\n iconType = '';\n\n /**\n * Indicates that this card should always show a list regardless of home or details view.\n */\n isAlwaysListView = false;\n\n /**\n * Whether to show the refresh button in the right toolbar buttons.\n */\n get showRefreshButton(): boolean {\n return false;\n }\n\n /**\n * Indicates whether to show the \"drill to details\" button.\n */\n get showDrillToDetailsButton(): boolean {\n return this.isHomeCard && !!this.navigation.getRouteItem(this.detailsRouteId);\n }\n\n /**\n * The ID of the details route for this device type.\n */\n detailsRouteId = 0;\n\n /**\n * The toolbar buttons that should appear on the left side of the card. This property should be overridden to provide custom\n * toolbar buttons.\n */\n get leftToolbarButtons(): DashboardCardToolbarButtons {\n return this.commonLeftToolbarButtons;\n }\n\n /**\n * The toolbar buttons that should appear on the left side of the card. This property should be overridden to provide custom\n * toolbar buttons.\n */\n get rightToolbarButtons(): DashboardCardToolbarButtons {\n return this.commonRightToolbarButtons;\n }\n\n /**\n * Returns all possible editing actions for the passed device.\n */ // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getDeviceEditActions(_device: M): DeviceItemAction[] {\n return [];\n }\n\n /**\n * Called when the device editing begins (to avoid deprecated listeners).\n */\n startDeviceEditing(): void {}\n\n /**\n * Called when device editing is complete.\n */\n endDeviceEditing(): void {\n if (!this.isLocked) {\n // Clear listener and edit device.\n this.dom.clearCloseClickListener(this);\n\n // Is device present?\n if (this.editDevice) {\n // Only clear device when present to avoid multiple events (due to null).\n this.editDevice = undefined;\n }\n }\n }\n\n // endregion\n\n // region Computed properties\n\n /**\n * Indicates this card will be displayed on the home screen dashboard.\n */\n @equal('args.deviceIndex', undefined)\n declare isHomeCard: boolean;\n\n /**\n * The devices represented on this card (all for home, single for details).\n */\n @computed('isHomeCard', 'isAlwaysListView', 'args.{deviceIndex,devices.[]}')\n get cardDevices(): M[] {\n const { deviceIndex = 0, devices = [] } = this.args;\n return devices.slice(deviceIndex, this.isHomeCard || this.isAlwaysListView ? undefined : deviceIndex + 1);\n }\n\n /**\n * Indicates we should show an icon representation of the devices.\n */\n get isIconCard(): boolean {\n return this.cardDevices.length < 3;\n }\n\n /**\n * Indicates a device is currently being edited.\n */\n @bool('editDevice')\n declare isEditingState: boolean;\n\n /**\n * The collection of battery details for the current device.\n */\n @mapBy('cardDevices', 'batteryDetails')\n declare batteryDetails: DeviceBatteryDetails[];\n\n /**\n * Indicates at least one of the devices has a low battery.\n */\n @computed('batteryDetails.@each.{isLow,level}')\n get isLowBattery(): boolean {\n return this.batteryDetails.some((b) => b.level && b.isLow);\n }\n\n /**\n * Indicates we should show the battery button.\n */\n @computed('isIconCard', 'isHomeCard', 'isLowBattery')\n get showBatteryButton(): boolean {\n // Is this an icon card AND is the battery level low OR is this not a home card?\n return this.isIconCard && (this.isLowBattery || !this.isHomeCard);\n }\n\n /**\n * A toolbar button for displaying battery level and linking to alerts route.\n */\n @computed('showBatteryButton', 'batteryDetails.@each.isLow')\n get batteryButton(): ToolbarButton | undefined {\n if (!this.showBatteryButton) {\n // Don't show battery button.\n return undefined;\n }\n\n return getDeviceBatteryButton(this.navigation, this.batteryDetails);\n }\n\n /**\n * The collection of common toolbar buttons that should appear on the left side of the card.\n */\n @computed('isHomeCard')\n get commonLeftToolbarButtons(): DashboardCardToolbarButtons {\n if (this.isHomeCard) {\n return [];\n }\n\n return [this.getDeviceModalButton()].filter((b) => b != undefined) as ToolbarButton[];\n }\n\n /**\n * Generates button to enter details modal.\n */\n getDeviceModalButton(): ToolbarButton | undefined {\n const detailsRouteItem = this.navigation.getRouteItem(this.detailsRouteId),\n editRouteName = `${detailsRouteItem?.url}.edit`;\n return detailsRouteItem ? this.getEditDeviceRouteButton(editRouteName) : undefined;\n }\n\n getEditDeviceRouteButton(routeName: string): ToolbarButton {\n return createToolbarButton(this.intl.tc(this, 'configureDevices'), 'cog', {\n fn: () => {\n this.router.transitionTo(routeName, this.cardDevices[0].id);\n }\n });\n }\n /**\n * Action for when clicking DrillToDetailsButton.\n **/\n drillToDetailsRoute(): void {\n this.navigation.transitionToRouteId(this.detailsRouteId);\n }\n\n /**\n * The collection of common toolbar buttons that should appear on the right side of the card.\n */\n @computed(\n 'batteryButton',\n 'cardDevices',\n 'detailsRouteId',\n 'isHomeCard',\n 'showDrillToDetailsButton',\n 'showRefreshButton'\n )\n get commonRightToolbarButtons(): ToolbarButton[] {\n const buttons = [this.batteryButton];\n\n if (this.showDrillToDetailsButton) {\n buttons.push(getDrillToDetailsButton(this.intl, () => this.drillToDetailsRoute()));\n }\n\n if (this.showRefreshButton) {\n buttons.push(getDeviceRefreshButton(this.intl, () => this.cardDevices.map((d) => d.refreshState())));\n }\n\n // Compact in case battery button was undefined.\n return buttons.filter((b) => b != undefined) as ToolbarButton[];\n }\n\n /**\n * Returns all possible editing actions for the currently edited device.\n */\n @computed('isEditingState', 'editDevice.state')\n get editDeviceActions(): DeviceItemAction[] {\n const { editDevice } = this;\n\n // Are we NOT editing right now?\n if (!this.isEditingState || !editDevice) {\n // Nothing to return.\n return [];\n }\n\n // Get overridden device edit actions.\n return this.getDeviceEditActions(editDevice);\n }\n\n /**\n * Information about what click targets to test for when deciding whether to close.\n */\n get closeTargetInfo(): CloseTargetInfos[] {\n return [\n {\n element: document.querySelector(getCardSelector(this.args.cardId)),\n selector: '.prompt-edit .controls'\n }\n ];\n }\n\n // endregion\n\n /**\n * Returns a {@link components.dashboard-cards.devices.EditState.DeviceItemActionType} for refreshing device state (if applicable).\n */\n getRefreshDeviceAction(device: M, css: string, icon: string, state: number): DeviceItemAction | undefined {\n return device.isInUnknownState()\n ? getDeviceItemAction(this.intl.t('generic.refreshState'), css, icon, state)\n : undefined;\n }\n\n // region Actions\n\n /**\n * Initiates editing the passed device.\n */\n @action\n editDeviceState(device: M): void {\n // Cache device to edit and initiate editing.\n if (!device.canChangeState) {\n if (device.canReceiveCommands && device.remoteCommandsEnabled && !device.hasPermissionToChangeState) {\n this.notificationManager.addWarning(this.intl.t('generic.deviceReadOnly'));\n }\n\n return;\n }\n\n set(this, 'editDevice', device);\n this.startDeviceEditing();\n\n if (!device.isDemoDevice) {\n // Attach listener to cancel edit mode.\n const { dom } = this;\n dom.attachCloseHandler(\n this,\n () => this.endDeviceEditing(),\n (evt) => {\n return (\n !this.isLocked &&\n this.closeTargetInfo.some(({ element, selector }) =>\n dom.verifyCloseTarget(element as HTMLElement, evt, selector)\n )\n );\n }\n );\n }\n }\n\n /**\n * Updates the device state the saves device and clears editing status.\n */\n @action\n saveDeviceState(desiredState: number, options?: Parameters[2]): void {\n // Get device model\n const { editDevice } = this;\n if (!editDevice) {\n return;\n }\n\n // Is the device state unknown?\n if (desiredState === editDevice.getUnknownState()) {\n editDevice.refreshState();\n } else {\n // Execute state transition on the model.\n editDevice.executeStateChange(desiredState, false, options);\n }\n\n // Close editing card.\n this.endDeviceEditing();\n }\n\n /**\n * Closes the edit state.\n */\n @action closeEditState(): void {\n if (!this.isLocked) {\n this.endDeviceEditing();\n }\n }\n\n // endregion\n}\n","import { isEnterOrSpaceCode } from '@adc/ember-utils/utils/a11y';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport ActiveCardTabIndexComponent from '../active-card-tab-index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\n\nexport interface BaseDeviceViewArgs {\n devices?: T[];\n iconType: string;\n activeDevice?: T;\n editDeviceState?: (device: T) => void;\n}\n\nexport interface BaseDeviceViewSignature {\n Args: BaseDeviceViewArgs;\n}\n\n/**\n * @classdesc\n * A base component (no template) for viewing device state.\n */\nexport default class BaseDeviceView<\n T extends BaseDeviceViewSignature = BaseDeviceViewSignature\n> extends ActiveCardTabIndexComponent {\n @service declare intl: ADCIntlService;\n\n /**\n * Initiates device editing using editDeviceState method.\n */\n @action\n editDevice(device: BaseDeviceModel): void {\n if (device.canChangeState) {\n this.args.editDeviceState?.(device);\n }\n }\n\n /**\n * Executes device editing if use hits return key while focused on device icon.\n */\n @action\n keyUpHandler(device: BaseDeviceModel, event: KeyboardEvent): void {\n if (isEnterOrSpaceCode(event.code)) {\n this.editDevice(device);\n }\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n {{#each (await @devices) as |device|}}\\n
    \\n \\n \\n \\n\\n {{yield device to=\\\"icon\\\"}}\\n
    \\n
    \\n {{/each}}\\n
    \\n\\n
    \\n {{#if this.allDevicesLoaded}}\\n \\n {{#each (await @devices) as |device|}}\\n
    \\n

    \\n \\n {{device.description}}\\n \\n

    \\n {{#if (and this.showStateText device.stateText)}}\\n

    \\n {{device.stateText}}\\n

    \\n {{/if}}\\n {{yield device to=\\\"label\\\"}}\\n
    \\n {{/each}}\\n {{/if}}\\n
    \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/device-icons/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { computed } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDeviceView from '../base-device-view';\n\nimport './_style.scss';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { LabelledbySpanSignature } from '../../labelledby-span';\nimport type { BaseDeviceViewArgs } from '../base-device-view';\n\nexport interface DeviceIconsSignature {\n Args: BaseDeviceViewArgs &\n Pick & {\n iconSize?: number;\n showStateText?: boolean;\n iconState?: string;\n useDeviceIcon?: boolean;\n altIcon?: boolean;\n };\n Blocks: {\n icon: [T];\n label: [T];\n };\n}\n\n/**\n * @classdesc\n * A component to display clickable device icons with their current state.\n *\n * @example\n * \n * <:icon as |device|>\n *

    Optional icon markup to appear for {{device.description}}

    \n * \n *\n * <:label as |device|>\n *

    Optional label markup to appear for {{device.description}}

    \n * \n * \n */\n@intlPath({ path: 'dashboard-cards/devices/device-icons' })\nexport default class DeviceIcons extends BaseDeviceView> {\n // region Passed property defaults\n\n /**\n * Should the device's state be shown on the card.\n */\n get showStateText(): boolean {\n return this.args.showStateText ?? true;\n }\n\n // endregion\n\n // region Computed properties\n\n /**\n * Indicates all device states have been loaded.\n */\n @computed('args.devices.@each.state')\n get allDevicesLoaded(): boolean {\n return !this.args.devices?.isAny('state', -1);\n }\n\n /**\n * The CSS class for the labels (based on number of devices).\n */\n @computed('args.devices.[]')\n get labelCss(): string {\n return (this.args.devices?.length ?? 0) > 1 ? 'multi' : 'single';\n }\n\n @computed('allDevicesLoaded', 'args.devices.length')\n get singleDevice(): T | undefined {\n const { devices } = this.args;\n if (this.allDevicesLoaded && devices?.length === 1) {\n return devices[0];\n }\n\n return undefined;\n }\n\n /**\n * Determine if the current device(s) is a light and add CSS label\n */\n @computed('args.devices.firstObject')\n get isLightDevice(): string {\n const deviceModel = this.args.devices?.firstObject?.getModelName();\n return deviceModel === 'devices/light' ? 'light-status-text' : '';\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::DeviceIcons': typeof DeviceIcons;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck:\\n @deviceCount should be `coalesce @devices.length 0`\\n This is a generic device component, it should not be checking very specific properties of the device (like twoPersonAccessEnabled), please fix this.\\n }}\\n\\n\\n
      \\n {{#each @devices as |device|}}\\n \\n {{#if (has-block \\'row\\')}}\\n {{yield device (component \\'dashboard-cards/devices/device-list/row\\'\\n iconType=(if @useDeviceIcon device.deviceIcon.icon (if (and @altIcon (or (await device.twoPersonAccessEnabled) (await device.readerAntiPassbackEnabled))) \\'additional-access\\' @iconType))\\n device=device\\n activeDevice=@activeDevice\\n isIconCard=@isIconCard\\n ) to=\\\"row\\\"}}\\n {{else}}\\n \\n <:default>\\n {{yield device}}\\n \\n \\n {{/if}}\\n \\n {{/each}}\\n
    \\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/device-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { toggleClassOnElement } from '@adc/ember-utils/utils/browser-helpers';\nimport { action, computed } from '@ember/object';\nimport BaseDeviceView from '../base-device-view';\n\nimport './_style.scss';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { LabelledbySpanSignature } from '../../labelledby-span';\nimport type { BaseDeviceViewArgs } from '../base-device-view';\nimport type { DashboardCardDeviceListRowSignature } from './row';\n\nexport interface DeviceListSignature {\n Element: HTMLDivElement;\n Args: BaseDeviceViewArgs &\n Pick & {\n isIconCard?: boolean;\n useDeviceIcon?: boolean;\n altIcon?: boolean;\n disableKeyboardInteraction?: boolean;\n extraCssClass?: string;\n };\n Blocks: {\n row: [\n T,\n WithBoundArgs<\n ComponentLike,\n 'iconType' | 'device' | 'activeDevice' | 'isIconCard'\n >\n ];\n default: [T];\n };\n}\n\n/**\n * @classdesc\n * A component to display a collection of clickable device icons with their current state, in list form.\n *\n * @example\n * \n *

    Optional markup to appear at the end of each device row.

    \n * \n */\nexport default class DeviceList extends BaseDeviceView> {\n /**\n * Toggles a special scrolled CSS class on the element when scrolled.\n */\n @action showScrollIndicator(evt: Event & { target: HTMLElement }): void {\n const { target: el } = evt;\n toggleClassOnElement(el, 'scrolled', !!el.scrollTop);\n }\n\n /** @override */\n @computed('args.disableKeyboardInteraction', 'elementsTabIndex')\n get isKeyboardInteractive(): boolean {\n return !this.args.disableKeyboardInteraction && this.elementsTabIndex === 0;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::DeviceList': typeof DeviceList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @iconType}}\\n
    \\n \\n \\n
    \\n{{/if}}\\n{{#if (has-block \\'description\\')}}\\n {{yield to=\\'description\\'}}\\n{{else}}\\n {{#unless @device.pairedWaterMeter}}\\n

    {{@device.description}}

    \\n {{/unless}}\\n{{/if}}\\n{{yield}}\\n\\n{{#if (has-block \\'state-text\\')}}\\n {{yield to=\\'state-text\\'}}\\n{{else}}\\n {{#if @device.stateText}}\\n

    {{@device.stateText}}

    \\n {{/if}}\\n{{/if}}\\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/device-list/row/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { DeviceStatusIconSignature } from '../../../../icons/circles/device-status';\n\nexport interface DashboardCardDeviceListRowSignature {\n Args: Pick & {\n isIconCard?: boolean;\n activeDevice?: DeviceStatusIconSignature['Args']['device'];\n };\n Blocks: {\n description: [];\n 'state-text': [];\n default: [];\n };\n}\n\nconst DashboardCardDeviceListRow = templateOnlyComponent();\nexport default DashboardCardDeviceListRow;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::DeviceList::Row': typeof DashboardCardDeviceListRow;\n 'dashboard-cards/devices/device-list/row': typeof DashboardCardDeviceListRow;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n {{#each @itemActions as |itemAction|}}\\n
    \\n \\n\\n \\n\\n {{yield itemAction}}\\n
    \\n {{/each}}\\n
    \\n
    \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/edit-state/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nimport './_style.scss';\n\nexport interface DeviceItemAction {\n text: string;\n iconType: string;\n css: string;\n reqState: number;\n}\n\n/**\n * Helper function to generate {@link components.dashboard-cards.devices.EditState.DeviceItemAction}.\n */\nexport function getDeviceItemAction(text: string, css: string, iconType: string, reqState: number): DeviceItemAction {\n return {\n text,\n css,\n iconType,\n reqState\n };\n}\n\nexport interface EditStateSignature {\n Element: HTMLDivElement;\n Args: {\n itemActions: DeviceItemAction[];\n saveDeviceState: (desiredState: number) => void;\n };\n Blocks: {\n default: [DeviceItemAction];\n };\n}\n\n/**\n * @classdesc\n * A component to render any number of clickable device item actions (icon and button with desired state) for choosing a new device state.\n *\n * @example\n * \n */\nexport default class EditState extends Component {\n /**\n * Action to initiate device state change.\n *\n */\n @action changeState(itemAction: DeviceItemAction): void {\n this.args.saveDeviceState(itemAction.reqState);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::EditState': typeof EditState;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:card-toolbar>\\n \\n {{#unless this.isIconCard}}\\n

    {{t \\'generic.devices.garageDoors\\'}}

    \\n {{/unless}}\\n \\n \\n\\n <:card-body>\\n \\n <:prompt-view>\\n {{#if this.isIconCard}}\\n \\n <:label as |device|>\\n {{#unless this.isHomeCard}}\\n

    {{device.displayDate}}

    \\n {{/unless}}\\n \\n \\n {{else}}\\n \\n {{/if}}\\n \\n\\n <:prompt-edit>\\n {{#if this.editDevice.isHiddenState}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/garage-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { intlPath } from '@adc/i18n/path';\nimport { EmberGarageDoors } from '../../../../enums/CustomerPageUrl';\nimport { Closed, Open, Unknown, Hidden } from '../../../../enums/GarageDoorStatus';\nimport { ICON_GARAGE } from '../../../icons/circles/device-status/index';\nimport AccessPointCard from '../access-point-card/index';\nimport { getDeviceItemAction } from '../edit-state/index';\n\nimport './_style.scss';\nimport type GarageModel from 'customer-site/models/devices/garage-door';\nimport type { BaseCardSignature } from '../base-card';\nimport type { DeviceItemAction } from '../edit-state/index';\n\nconst GARAGE_CSS = {\n [Open]: 'open',\n [Closed]: 'closed',\n [Unknown]: 'unknown'\n};\n\n/**\n * @classdesc\n * The card for displaying/editing garage device state.\n */\n@intlPath({ path: 'dashboard-cards/devices/garage-card' })\nexport default class GarageCard extends AccessPointCard> {\n // region Overrides\n\n /** @override */\n iconType = ICON_GARAGE;\n\n /** @override */\n get showRefreshButton(): boolean {\n return !this.isHomeCard;\n }\n\n /** @override */\n detailsRouteId = EmberGarageDoors;\n\n /** @override */\n getDeviceEditActions(device: GarageModel): DeviceItemAction[] {\n if (!device.canChangeState) {\n // If device cannot change state, then no device edit action.\n return [];\n }\n\n // Is the refresh action valid?\n const refreshAction = this.getRefreshDeviceAction(device, GARAGE_CSS[Unknown], ICON_GARAGE, Unknown);\n if (refreshAction) {\n // Return just that.\n return [refreshAction];\n }\n\n const actions = {\n [Unknown]: [Closed, Open],\n [Open]: [Closed],\n [Closed]: [Open],\n [Hidden]: [Closed, Open]\n }[device.desiredState];\n\n return (actions ?? []).map((state: keyof typeof GARAGE_CSS) =>\n getDeviceItemAction(\n this.intl.t(`home.garage.${state === Open ? 'open' : 'close'}`),\n GARAGE_CSS[state],\n ICON_GARAGE,\n state\n )\n );\n }\n\n // endregion\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n
    \\n {{#each @itemActions as |itemAction|}}\\n
    \\n \\n
    \\n {{/each}}\\n
    \\n
    \\n
    \\n
    \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/hidden-edit-state/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { EditStateSignature, DeviceItemAction } from '../edit-state/index';\n\ninterface HiddenStateSignature {\n Element: HTMLDivElement;\n Args: EditStateSignature['Args'] & {\n hiddenIconType: string;\n editDevice: BaseDeviceModel;\n itemActions: DeviceItemAction[];\n saveDeviceState: (desiredState: number, options?: Parameters[2]) => void;\n };\n}\n\nconst HiddenEditStateComponent = templateOnlyComponent();\n\nexport default HiddenEditStateComponent;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::HiddenEditState': typeof HiddenEditStateComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:card-toolbar>\\n \\n {{#unless this.isIconCard}}\\n

    {{t \\'generic.devices.locks\\'}}

    \\n {{/unless}}\\n \\n \\n\\n <:card-body>\\n \\n <:prompt-view>\\n {{#if this.isIconCard}}\\n \\n <:label as |device|>\\n {{#unless this.isHomeCard}}\\n

    {{device.displayDate}}

    \\n {{/unless}}\\n \\n \\n {{else}}\\n \\n {{#if device.batteryDetails.isLow}}\\n \\n {{/if}}\\n \\n {{/if}}\\n \\n\\n <:prompt-edit>\\n
    \\n
    \\n {{#if this.editDevice.isHiddenState}}\\n \\n {{else}}\\n \\n {{/if}}\\n
    \\n\\n {{#if this.canRequestTemporaryAccessCode}}\\n
    \\n \\n
    \\n {{/if}}\\n
    \\n \\n \\n \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/lock-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { EmberLocks } from '../../../../enums/CustomerPageUrl';\nimport { Locked, Unknown, Unlocked, Hidden } from '../../../../enums/LockStatus';\nimport { ICON_LOCK } from '../../../icons/circles/device-status/index';\nimport { createToolbarButton } from '../../card-toolbar';\nimport AccessPointCard from '../access-point-card/index';\nimport { getDeviceItemAction } from '../edit-state/index';\n\nimport type { ToolbarButton } from '../../card-toolbar';\nimport './_style.scss';\nimport type Store from '@ember-data/store';\nimport type LockModel from 'customer-site/models/devices/lock';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { BaseCardSignature } from '../base-card';\nimport type { DeviceItemAction } from '../edit-state/index';\n\n/**\n * The card for displaying/editing lock device state.\n */\n@intlPath({ path: 'dashboard-cards/devices/lock-card' })\nexport default class LockCard extends AccessPointCard> {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare store: Store;\n\n // region Overrides\n\n /** @override */\n\n getDeviceModalButton(): ToolbarButton | undefined {\n if (this.identityManager.isEnterprise) {\n return this.getEditDeviceRouteButton('home.locks.edit');\n }\n\n return super.getDeviceModalButton();\n }\n\n /** @override */\n\n getEditDeviceRouteButton(routeName: string): ToolbarButton {\n const {\n cardDevices: [device]\n } = this;\n\n if (!this.identityManager.isEnterprise) {\n return super.getEditDeviceRouteButton(routeName);\n }\n\n return createToolbarButton(this.intl.tc(this, 'configureDevices'), 'cog', {\n fn: () => {\n device.system.then((system) =>\n this.store\n\n .findRecord('enterprise/locations/location', system.unitId)\n\n .then((location) => this.identityManager.switchContext(location))\n\n .then(() => this.router.transitionTo(routeName, device.id))\n );\n }\n });\n }\n\n /** @override */\n iconType = ICON_LOCK;\n\n /** @override */\n @computed('isHomeCard', 'cardDevices.0.canRefreshState')\n get showRefreshButton(): boolean {\n const {\n cardDevices: [device]\n } = this;\n const lockModel = device as LockModel;\n return !this.isHomeCard && lockModel?.canRefreshState;\n }\n\n /** @override */\n detailsRouteId = EmberLocks;\n\n /** @override */\n getDeviceEditActions(device: LockModel): DeviceItemAction[] {\n if (!device.canChangeState) {\n // If device cannot change state, then no device edit action.\n return [];\n }\n\n // Is the refresh action valid?\n const refreshAction = this.getRefreshDeviceAction(device, 'unknown', ICON_LOCK, Unknown);\n if (refreshAction) {\n // Return just that.\n return [refreshAction];\n }\n\n const { supportsLatchControl } = device,\n states =\n {\n [Unknown]: [Unknown],\n [Locked]: [Unlocked],\n [Unlocked]: supportsLatchControl ? [Unlocked, Locked] : [Locked],\n [Hidden]: [Unlocked, Locked]\n }[device.desiredState] ?? [];\n\n return states.map((state) =>\n getDeviceItemAction(\n this.intl.t(`generic.${state === Unlocked ? (supportsLatchControl ? 'unlatch' : 'unlock') : 'lock'}`),\n {\n [Unknown]: 'unknown',\n [Locked]: 'locked',\n [Unlocked]: 'unlocked'\n }[state] as string,\n ICON_LOCK,\n state\n )\n );\n }\n\n // endregion\n\n /**\n * Action to close the edit state and open the Request A Code modal.\n */\n @action openRequestTemporaryAccessCodeModal(): void {\n const editDevice = this.editDevice as LockModel;\n this.endDeviceEditing();\n\n editDevice.openRequestCodeModal(false);\n }\n\n /**\n * Whether or not the end user can Request Temporary Access Codes.\n * totalTemporaryAccessCodes is 0 if the login doesn't have the Enterprise Access Management Beta.\n */\n @computed('editDevice.totalTemporaryAccessCodes')\n get canRequestTemporaryAccessCode(): boolean {\n const editDevice = this.editDevice as LockModel;\n return !(!editDevice?.canChangeState || editDevice?.totalTemporaryAccessCodes === 0);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::LockCard': typeof LockCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    \\n

    {{tc this \\'description\\'}}

    \\n\\n \\n
    \\n\\n \\n <:label as |item|>\\n {{#let item.props.sensor as |sensor|}}\\n \\n
    \\n {{sensor.description}}\\n {{#if sensor.isBypassed}}\\n {{tc this \\'bypassed\\'}}\\n {{/if}}\\n
    \\n {{sensor.displayStateText}}\\n {{/let}}\\n \\n \\n
    \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/partition-card/bypass-modal/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type SensorModel from 'customer-site/models/devices/sensor';\n\ninterface DashboardCardsDevicesPartitionCardBypassModalSignature {\n Args: {\n model: {\n sensors: SensorModel[];\n update(bypassed: SensorModel[], notBypassed: SensorModel[]): void;\n };\n };\n}\n\ntype SensorItem = BinaryListItem & {\n props: {\n sensor: SensorModel;\n };\n};\n\n@intlPath({ path: 'dashboard-cards/devices/partition-card/bypass-modal' })\nexport default class DashboardCardsDevicesPartitionCardBypassModal extends Component {\n @service declare intl: ADCIntlService;\n\n @computed('args.model.sensors.[]')\n get sensors(): SensorItem[] {\n return this.args.model.sensors.map(\n (sensor) =>\n new BinaryListItem({\n label: sensor.description,\n state: sensor.isBypassed,\n props: {\n sensor\n }\n }) as SensorItem\n );\n }\n\n /**\n * Indicates all sensors are bypassed.\n */\n get allBypassed(): boolean {\n return this.sensors.isEvery('state');\n }\n\n @action toggleSelectedState(): void {\n this.sensors.setEach('state', !this.allBypassed);\n }\n\n @action saveChanges(): boolean {\n const { sensors } = this,\n bypassed = sensors.filter((item) => item.state && !item.props.sensor.isBypassed).map((i) => i.props.sensor),\n notBypassed = sensors\n .filter((item) => item.props.sensor.isBypassed && !item.state)\n .map((i) => i.props.sensor);\n\n this.args.model.update(bypassed, notBypassed);\n return true;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::PartitionCard::BypassModal': typeof DashboardCardsDevicesPartitionCardBypassModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n

    {{tc this \\'warning\\'}}

    \\n

    {{tc this \\'instructions\\' }}

    \\n\\n
    \\n \\n \\n \\n
    \\n
    \",{ moduleName: \"customer-site/components/dashboard-cards/devices/partition-card/issues-overlay/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { EmberAlertsIssues } from '../../../../../enums/CustomerPageUrl';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationService from '@adc/ui-components/services/notification-manager';\nimport type PartitionModel from 'customer-site/models/devices/partition';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface DashboardCardsDevicesPartitionCardIssuesOverlaySignature {\n Args: {\n partition: PartitionModel;\n closeEditState: VoidFunction;\n hideOverlay: VoidFunction;\n };\n}\n\n@intlPath({ path: 'dashboard-cards/devices/partition-card/issues-overlay' })\nexport default class DashboardCardsDevicesPartitionCardIssuesOverlay extends Component {\n @service declare notificationManager: NotificationService;\n @service declare intl: ADCIntlService;\n @service declare navigation: NavigationService;\n\n @action goToAlertsIssues(): void {\n this.navigation.transitionToRouteId(EmberAlertsIssues);\n }\n\n @action async clearIssues(): Promise {\n const { notificationManager, args, intl } = this;\n\n try {\n await args.partition.clearPanelFaults();\n args.closeEditState();\n notificationManager.addSuccess(intl.tc(this, 'success'));\n } catch (ex) {\n if (!ex.isAdapterError) {\n notificationManager.addError(intl.tc(this, 'error'));\n }\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::PartitionCard::IssuesOverlay': typeof DashboardCardsDevicesPartitionCardIssuesOverlay;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n \\n\\n {{#if @partition.hideForceBypass}}\\n

    {{t \\'components.dashboard-cards.devices.partition-card.hideForceBypass\\'}}

    \\n {{/if}}\\n\\n
    \\n {{#each this.armingActions as |btn|}}\\n \\n {{/each}}\\n
    \\n\\n
    \\n\\n
    \\n {{#each this.disarmingActions as |btn|}}\\n \\n {{/each}}\\n
    \\n
    \\n
    \",{ moduleName: \"customer-site/components/dashboard-cards/devices/partition-hidden-edit-state/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { filterBy } from '@ember/object/computed';\nimport { Disarmed, ArmedAway, ArmedStay } from '../../../../enums/ArmingState';\n\nimport type { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport type PartitionModel from 'customer-site/models/devices/partition';\nimport type { ArmingAction } from '../partition-card/index';\n\ninterface PartitionHiddenEditStateSignature {\n Args: {\n armingOptions: BinaryListItem[];\n armingActions: ArmingAction[];\n updateArmingOptions: (options: BinaryListItem[]) => void;\n partition: PartitionModel;\n };\n}\n\n/**\n * Actions that are related to arming the partition.\n */\nconst ARMING_ACTIONS = [ArmedAway, ArmedStay];\n\n/**\n * Component for the Hidden Edit State of the Partition Card.\n */\nexport default class PartitionHiddenEditStateComponent extends Component {\n /**\n * Filters for the the disarming action.\n */\n @filterBy('args.armingActions', 'state', Disarmed)\n declare disarmingActions: ArmingAction[];\n\n /**\n * Filters for the arming actions.\n */\n @computed('args.armingActions')\n get armingActions(): ArmingAction[] {\n return this.args.armingActions.filter((item) => ARMING_ACTIONS.includes(item.state));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::PartitionHiddenEditState': typeof PartitionHiddenEditStateComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:card-toolbar>\\n \\n {{#unless this.isIconCard}}\\n

    {{t \\'generic.devices.partitions\\'}}

    \\n {{/unless}}\\n \\n \\n\\n <:card-body>\\n \\n\\n <:prompt-view>\\n {{#if this.isIconCard}}\\n \\n <:label as |device|>\\n {{#unless this.isHomeCard}}\\n

    {{device.displayDate}}

    \\n {{/unless}}\\n \\n \\n {{else}}\\n \\n {{#if device.batteryDetails.isLow}}\\n \\n {{/if}}\\n \\n {{/if}}\\n \\n\\n <:prompt-edit>\\n {{#if this.showOverlay}}\\n {{#if this.editDevice}}\\n \\n {{/if}}\\n {{else}}\\n {{#if this.editDevice.isHiddenState}}\\n \\n {{else}}\\n {{#if this.isSystemDisarmed}}\\n {{#if this.partition.hideForceBypass}}\\n

    {{tc this \\'hideForceBypass\\'}}

    \\n {{/if}}\\n \\n {{else}}\\n {{#let this.armingActions.firstObject as |btn|}}\\n {{#if btn}}\\n \\n {{/if}}\\n {{/let}}\\n {{/if}}\\n\\n
    \\n {{#each this.armingActions as |btn|}}\\n \\n {{/each}}\\n
    \\n {{/if}}\\n {{/if}}\\n \\n \\n \\n\\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/partition-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { equal, alias, or } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { allArmingOptions } from 'customer-site/models/devices/partition';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport { SelectivelyBypassSensors, BypassSensors, ForceArm } from '../../../../enums/ArmingOption';\nimport { Disarmed, ArmedAway, ArmedStay, Unknown, Hidden } from '../../../../enums/ArmingState';\nimport {\n EmberLocationsLocationPanel,\n EmberPartitions,\n EmberPartitionsSmartArming\n} from '../../../../enums/CustomerPageUrl';\nimport { ICON_PARTITION } from '../../../icons/circles/device-status/index';\nimport { createToolbarButton } from '../../card-toolbar/index';\nimport AccessPointCard from '../access-point-card/index';\nimport DashboardCardsDevicesPartitionCardBypassModal from './bypass-modal/index';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type PartitionModel from 'customer-site/models/devices/partition';\nimport type {\n ArmingOptionName,\n ArmingOption,\n ArmingState,\n ArmingPayload\n} from 'customer-site/models/devices/partition';\nimport type SensorModel from 'customer-site/models/devices/sensor';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { MapValueType } from 'customer-site/utils/type-utils';\nimport type { DashboardCardToolbarButtons } from '../../card-toolbar/index';\nimport type { BaseCardSignature } from '../base-card';\n\nexport interface ArmingAction {\n text: string;\n fn: VoidFunction;\n state: number;\n css: string;\n disabled: boolean | undefined;\n}\n\ntype ArmingOptionItem = BinaryListItem & {\n props: {\n id: ArmingOption;\n };\n};\n\nexport const DISARMED = 'Disarmed',\n ARMED_AWAY = 'ArmedAway',\n ARMED_STAY = 'ArmedStay';\n\nconst defaultArmingPayLoad = {\n forceBypass: false,\n noEntryDelay: false,\n silentArming: false,\n nightArming: false,\n selectiveBypass: false,\n forceArm: false\n};\n\ntype ArmingStateType = typeof ArmedAway | typeof ArmedStay | typeof Disarmed | typeof Unknown;\n\nexport interface DevicesPartitionCardSignature extends BaseCardSignature {\n Args: BaseCardSignature['Args'] & {\n onDeviceEditChanged: (device: PartitionModel) => void;\n };\n}\n\n@intlPath({ path: 'dashboard-cards/devices/partition-card' })\nexport default class DashboardCardsDevicesPartitionCard extends AccessPointCard<\n PartitionModel,\n DevicesPartitionCardSignature\n> {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n @service declare modals: ModalsService;\n @service declare notificationManager: NotificationManager;\n\n // region overrides\n\n iconType = ICON_PARTITION;\n\n detailsRouteId = EmberPartitions;\n\n enterpriseDetailsRoute = EmberLocationsLocationPanel;\n\n startDeviceEditing(): void {\n super.startDeviceEditing();\n this.resetCheckboxPayload();\n }\n\n endDeviceEditing(): void {\n super.endDeviceEditing();\n this.hideOverlay = false;\n }\n\n get showRefreshButton(): boolean {\n return false;\n }\n\n @computed(\n 'bypassSensors',\n 'cardDevices.[]',\n 'commonLeftToolbarButtons',\n 'firstDevice.{isArmed,canBypassSensorWhenArmed,sensors.@each.isBypassed}',\n 'isFrontPoint'\n )\n get leftToolbarButtons(): DashboardCardToolbarButtons {\n const { navigation, intl } = this,\n buttons = this.commonLeftToolbarButtons.slice();\n\n if (navigation.getRouteItem(EmberPartitionsSmartArming)) {\n buttons.push(\n (async () => {\n const rules = await this.store.findAll('automation/rules/smart-arming');\n return createToolbarButton(intl.tc(this, 'smartArming'), 'schedule', {\n css: rules.findBy('isEnabled') ? 'smart-arming-active' : '',\n fn: () => {\n navigation.transitionToRouteId(EmberPartitionsSmartArming);\n }\n });\n })()\n );\n }\n\n if (this.cardDevices.length === 1 && !this.isFrontPoint) {\n const { firstDevice: partition } = this;\n buttons.push(\n (async () => {\n const allSensors = await partition.sensors,\n areAnyBypassed = allSensors.findBy('isBypassed'),\n sensors = allSensors.filterBy('supportsBypass').filterBy('supportsImmediateBypass'),\n isDisabled = areAnyBypassed && partition.isArmed && !partition.canBypassSensorWhenArmed;\n\n return createToolbarButton(\n intl.tc(this, isDisabled ? 'noBypass' : 'bypassSensors'),\n 'sensor-unknown',\n {\n css: areAnyBypassed ? 'bypassed-sensors-active' : '',\n disabled: isDisabled,\n skip:\n !sensors.length ||\n !this.getArmingOptions(partition).find(([id]) => id === SelectivelyBypassSensors),\n fn: () => {\n this.modals.showModal(DashboardCardsDevicesPartitionCardBypassModal, {\n sensors,\n update: (bypass: SensorModel[], unbypass: SensorModel[]): void => {\n this.bypassSensors.perform(bypass, unbypass);\n }\n });\n }\n }\n );\n })()\n );\n }\n\n return buttons;\n }\n\n // endregion\n\n selectedArmingOptions: ArmingOption[] = [];\n validArmingStates: string[] = [];\n\n @alias('editDevice')\n partition?: PartitionModel;\n\n @alias('cardDevices.firstObject')\n declare firstDevice: PartitionModel;\n\n @tracked disableArmedStay = false;\n @tracked disableArmedAway = false;\n @tracked hideOverlay = false;\n\n @equal('contextManager.identityModel.dealerPath', 'fp')\n declare isFrontPoint: boolean;\n\n @equal('partition.desiredState', Disarmed)\n declare isSystemDisarmed: boolean;\n\n @equal('partition.desiredState', Unknown)\n declare isSystemUnknown: boolean;\n\n @or('isSystemDisarmed', 'partition.isHiddenState')\n declare isDisarmedOrHiddenState: boolean;\n\n /**\n * Indicates we should show the arming issues overlay.\n */\n get showOverlay(): boolean {\n return !!this.partition?.needsClearIssuesPrompt && !this.hideOverlay;\n }\n\n /**\n * Bypass sensors outside of an arming event.\n */\n private bypassSensors = task(\n this,\n { restartable: true },\n async (bypass: SensorModel[], unbypass: SensorModel[]) => {\n const { firstDevice } = this;\n await firstDevice.submitCustomApiCall('bypassSensors', 'POST', {\n bypass: bypass.mapBy('id').join('|'),\n unbypass: unbypass.mapBy('id').join('|')\n });\n }\n );\n\n /**\n * Update partition state, dealing with arming options.\n */\n private async changeArmingState(desiredState: ArmingState, partition: PartitionModel | undefined): Promise {\n const partitionModel = partition ?? this.partition;\n\n const armingOptions = ([ArmedAway, ArmedStay].includes(desiredState) ? this.selectedArmingOptions : []).reduce(\n (cfg, option) => ({\n ...cfg,\n [allArmingOptions.get(option) as string]: true\n }),\n defaultArmingPayLoad as Record, boolean>\n );\n\n const fnChange = (options: ArmingPayload) => {\n this.isLocked = false;\n partitionModel?.executeStateChange(desiredState, false, options).then((model) => {\n if (model && model.data.attributes.restrictedAccessOfflineControllers?.length > 0) {\n this.showControllerOfflineError(model.data.attributes.restrictedAccessOfflineControllers);\n }\n });\n this.endDeviceEditing();\n };\n if (!armingOptions.selectiveBypass) {\n fnChange(armingOptions);\n return;\n }\n\n const sensors = await partitionModel?.sensors;\n if (sensors) {\n this.isLocked = true;\n\n this.modals.showModal(\n DashboardCardsDevicesPartitionCardBypassModal,\n {\n sensors: sensors.filterBy('supportsBypass').slice(0, 32),\n update: (bypass: SensorModel[], unbypass: SensorModel[]): void => {\n fnChange({\n ...armingOptions,\n bypass: bypass.mapBy('id').join('|'),\n unbypass: unbypass.mapBy('id').join('|')\n });\n }\n },\n () => {\n this.isLocked = false;\n return true;\n }\n );\n }\n }\n\n /**\n * Show the appropriate restricted access controller(s) offline error using the given\n * controller names.\n */\n private showControllerOfflineError(controllerNames: string[]) {\n const { notificationManager, intl } = this,\n nameList = controllerNames.join(', ');\n\n notificationManager.addError(\n intl.tc(this, 'restrictedAccessOfflineControllers', {\n controllers: nameList\n })\n );\n }\n\n /**\n * The collection of arming actions to show.\n */\n get armingActions(): ArmingAction[] {\n const { partition } = this;\n if (!partition) {\n return [];\n }\n\n const fnGetButton = (\n key: string,\n state: ArmingStateType,\n css: string,\n disabled?: boolean,\n root = 'home.partitions',\n fn?: VoidFunction\n ) => ({\n text: this.intl.t(`${root}.${key}`),\n fn: fn ?? (() => this.changeArmingState(state, partition)),\n state,\n css,\n disabled\n });\n\n if (this.editDevice?.state === Hidden) {\n return [\n fnGetButton('stay', ArmedStay, 'armed-stay', false),\n fnGetButton('away', ArmedAway, 'armed-away', false),\n fnGetButton('disarm', Disarmed, 'disarmed', false)\n ];\n }\n\n if (this.isSystemDisarmed) {\n if (this.validArmingStates.includes(ARMED_AWAY) && this.validArmingStates.length === 1) {\n return [fnGetButton('arm', ArmedAway, 'armed-away', this.disableArmedAway)];\n }\n return [\n fnGetButton('stay', ArmedStay, 'armed-stay', this.disableArmedStay),\n fnGetButton('away', ArmedAway, 'armed-away', this.disableArmedAway)\n ];\n }\n\n if (this.isSystemUnknown) {\n return [\n fnGetButton('refreshState', Unknown, 'unknown', false, 'generic', () => this.partition?.refreshState())\n ];\n }\n\n return [fnGetButton('disarm', Disarmed, 'disarmed', false)];\n }\n\n /**\n * The collection of supported arming options for the passed partition model.\n */\n private getArmingOptions(partition?: PartitionModel): [number, string][] {\n const options = (partition?.extendedArmingOptions ?? {}) as Record;\n const allArmingStates = Object.keys(options);\n this.validArmingStates = allArmingStates.filter((item) => item !== DISARMED);\n return Array.from(allArmingOptions.entries())\n .filter(([id]) => this.validArmingStates.some((state: ArmingOptionName) => options[state].includes(id)))\n .map(([id, key]) => {\n if (id === BypassSensors && partition?.useAlternateForceBypass) {\n return [id, `forceBypassZonesAndTroubles`] as [number, string];\n }\n\n return [id, key] as [number, string];\n });\n }\n\n /**\n * The collection of arming options to show.\n */\n get armingOptions(): ArmingOptionItem[] {\n const options = (this.isDisarmedOrHiddenState ? this.getArmingOptions(this.partition) : [])\n .filter(([id]) => id !== SelectivelyBypassSensors || !this.isFrontPoint)\n .map(\n ([id, key]) =>\n new BinaryListItem({\n label: this.intl.t(`home.partitions.${key}`),\n state: this.getInitialCheckboxState(id),\n props: {\n id\n }\n }) as ArmingOptionItem\n );\n\n return options;\n }\n\n /**\n * Returns the initial checked status for the options checkboxes.\n */\n private getInitialCheckboxState(armingOptionId: number): boolean {\n let isChecked = false; // usually checkbox should be unchecked at the beginning\n\n if (armingOptionId === BypassSensors && this.partition) {\n isChecked = this.partition.useAlternateForceBypass;\n }\n\n // Right now, DMP is the only panel with the force arm option and in that case, force arm should always default to selected. This could change if force arm is added to other panels\n if (armingOptionId === ForceArm && this.partition) {\n isChecked = this.partition.hasForceArm;\n }\n\n return isChecked;\n }\n\n /*\n * Clears selectedArmingOptions from previous arming state and resets back to original checkboxes for correct arming payload\n */\n private resetCheckboxPayload(): void {\n this.selectedArmingOptions = [];\n const isBypassSensorsChecked = this.getInitialCheckboxState(BypassSensors);\n if (isBypassSensorsChecked) {\n this.selectedArmingOptions.push(BypassSensors);\n }\n\n const isForceArmChecked = this.getInitialCheckboxState(ForceArm);\n if (isForceArmChecked) {\n this.selectedArmingOptions.push(ForceArm);\n }\n }\n\n @action updateArmingOptions(options: ArmingOptionItem[]): void {\n const selectedOptions = (this.selectedArmingOptions = options\n .filterBy('state')\n .map((item) => item.props.id)).sort();\n const { partition } = this;\n if (!partition) {\n return;\n }\n\n const { extendedArmingOptions, invalidExtendedArmingOptions } = partition;\n const fnIsOptionDisabled = (name: ArmingOptionName): boolean => {\n return (\n !selectedOptions.every((option) => extendedArmingOptions[name]?.includes(option)) ||\n invalidExtendedArmingOptions[name]?.some((combo) =>\n combo.every((option) => selectedOptions.includes(option as ArmingStateType))\n )\n );\n };\n\n Object.assign(this, {\n disableArmedStay: fnIsOptionDisabled(ARMED_STAY),\n disableArmedAway: fnIsOptionDisabled(ARMED_AWAY)\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::PartitionCard': typeof DashboardCardsDevicesPartitionCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n
    \\n {{yield to=\\\"prompt-view\\\"}}\\n
    \\n
    \\n\\n
    \\n

    \\n

    {{@promptTitle}}

    \\n

    {{@promptState}}

    \\n \\n

    \\n\\n
    \\n {{yield to=\\\"prompt-edit\\\"}}\\n
    \\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/dashboard-cards/devices/prompt-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\n\nimport './_style.scss';\nimport type { SafeString } from 'handlebars';\n\nexport interface PromptCardSignature {\n Element: HTMLDivElement;\n Args: {\n isPromptOpen?: boolean;\n isIconCard?: boolean;\n promptTitle?: string;\n promptState?: string | SafeString;\n stateCss?: string;\n closeEditState?: VoidFunction;\n cardCss?: string;\n };\n Blocks: {\n 'prompt-view': [];\n 'prompt-edit': [];\n };\n}\n\n/**\n * @classdesc\n * A component for displaying a collection of devices and opening an edit view (with animation) for one of those devices.\n *\n * @example\n * \n * <:prompt-view>\n *

    Markup for displaying the current state of the represented devices.

    \n * <:/prompt-view>\n *\n * <:prompt-edit>\n *

    Markup for editing the current state of a single selected device.

    \n * \n * {{/dashboard-cards/devices/prompt-card}}\n */\nexport default class PromptCard extends Component {\n /**\n * The computed Css class for this component.\n */\n get elementCss(): string {\n const { args } = this;\n return [\n 'dashboard-prompt-card',\n args.cardCss,\n args.isIconCard ? 'is-icon-card' : undefined,\n args.isPromptOpen ? 'is-open' : undefined\n ]\n .filter((item) => item != undefined)\n .join(' ');\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::Devices::PromptCard': typeof PromptCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if @isList}}\\n {{t \\'components.dashboard-cards.labelledby-span.deviceListLabel\\' deviceDescription=@cardName numberOfDevices=@deviceCount}}\\n {{else if (not @deviceCount)}}\\n {{t \\'components.dashboard-cards.labelledby-span.singleIconNoStateLabel\\' deviceDescription=@cardName}}\\n {{else if (eq @deviceCount 1)}}\\n {{t \\'components.dashboard-cards.labelledby-span.singleIconLabel\\' deviceDescription=@device.description deviceState=@device.stateText}}\\n {{else}}\\n {{t \\'components.dashboard-cards.labelledby-span.multipleIconsLabel\\' numberOfDevices=@deviceCount deviceDescription=@cardName}}\\n {{/if}}\\n\",{ moduleName: \"customer-site/components/dashboard-cards/labelledby-span/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type { SafeString } from 'handlebars';\n\nexport interface LabelledbySpanSignature {\n Args: {\n cardId: string | number;\n cardName: string;\n deviceCount: number;\n devices?: BaseDevice[];\n isList?: boolean;\n device?: {\n description: string;\n stateText: string | SafeString;\n };\n };\n}\n\nconst LabelledbySpan = templateOnlyComponent();\nexport default LabelledbySpan;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'DashboardCards::LabelledbySpan': typeof LabelledbySpan;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n\\n \\n \\n \\n\\n \\n \\n\\n \\n {{t \\'generic.valueDegree\\' value=@lowerTempBound htmlSafe=true}}\\n \\n \\n\\n \\n \\n \\n\\n \\n \\n\\n \\n {{t \\'generic.valueDegree\\' value=@upperTempBound htmlSafe=true}}\\n \\n \\n\\n \\n \\n {{t \\'generic.valueDegree\\' value=@temperatureValue}}\\n \\n \\n \\n \\n \\n \\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/comfort-slider/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { isNumber } from 'customer-site/utils/math-methods';\n\nimport './_style.scss';\n\ninterface ComfortSliderArgs {\n temperatureValue: number;\n lowerTempBound: number;\n upperTempBound: number;\n viewBox?: string;\n}\n\n/**\n * @classdesc\n *\n * A slider conveying where a given temperature value lands on a cold-warm temperature spectrum.\n *\n */\nexport default class ComfortSlider extends Component {\n /**\n * The width of the background rectangle element.\n */\n private rectWidth = 100;\n\n /**\n * The x-position of the background rectangle element.\n */\n private rectX = 10;\n\n /**\n * The width of the pointer elements.\n */\n private pointerWidth = 11;\n\n /**\n * Show 'error state' styles when incoming data cannot produce a valid comfort-slider.\n */\n errorState = !this.hasValidData;\n\n /**\n * Determines whether the calling code has passed data that will produce a valid comfort-slider.\n * Invalid data is null, undefined, or a non-numeric string.\n * Lower bound must be < Upper bound.\n */\n\n get hasValidData(): boolean {\n const { lowerTempBound, upperTempBound } = this.args;\n return (\n [this.args.temperatureValue, lowerTempBound, upperTempBound].every(isNumber) &&\n lowerTempBound < upperTempBound\n );\n }\n\n /**\n * Describes the x-position of the temperature value along the cool-warm spectrum as a function of the SVG rectangle width and the numeric distance between the lower and upper temperature bounds.\n *\n * NOTE: The slider supports any values for the lower and upper bounds and will scale accordingly.\n *\n * The lower and upper boundaries appear 1/5 of the total width from the left and right, respectively.\n */\n\n get normalizedTemperatureValueX(): number {\n const { temperatureValue, lowerTempBound, upperTempBound } = this.args;\n\n // Determine the numeric distance between the upper and lower temperature bounds. (unit: degrees)\n const boundaryDelta = upperTempBound - lowerTempBound;\n\n // The boundaryDelta represents 60% (3/5) of the total slider width. (unit: degrees)\n const totalDelta = (boundaryDelta * 100) / 60;\n\n // The temperature boundaries each appear 1/5 (20%) from the extremes. (unit: degrees)\n const minTemp = lowerTempBound - totalDelta / 5;\n\n // Determine the temperatureValue as a percent-distance from minTemp.\n const sliderPercent = (temperatureValue - minTemp) / totalDelta;\n\n // Convert the slider percent to the SVG's user-space unit.\n let position = sliderPercent * this.rectWidth + this.rectX;\n\n // Ensure rectX <= position <= rectWidth + rectX so the pointer remains within bounds.\n position = Math.max(position, this.rectX);\n position = Math.min(position, this.rectWidth + this.rectX);\n\n // Default to 0 to avoid unsafe values in the template.\n return position ?? 0;\n }\n\n /**\n * Describes the x-position of the pointer so it is centered on the normalizedTemperatureValueX.\n */\n\n get normalizedPointerX(): number {\n const { normalizedTemperatureValueX } = this;\n\n // Default to 0 to avoid unsafe values in the template.\n return normalizedTemperatureValueX - this.pointerWidth / 2 || 0;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::ComfortSlider': typeof ComfortSlider;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n

    \\n {{tc this \\'avgIndoorTemperature\\'}}\\n

    \\n\\n \\n\\n {{! Input UI is used for testing. }}\\n
    \\n {{#if (and @testMode (not @summaryView))}}\\n {{#each (array\\n (hash n=\\'avgIndoorTemperature\\' t=\\'Temp\\')\\n (hash n=\\'lowerComfortBoundTemp\\' t=\\'Lower temp\\')\\n (hash n=\\'upperComfortBoundTemp\\' t=\\'Upper temp\\')\\n ) as |info|}}\\n \\n {{/each}}\\n {{/if}}\\n
    \\n
    \\n\\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/comfort-view/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { action, set } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport { Unknown as UnknownSeverity } from '../../../../enums/SeverityStatus';\nimport { Unknown } from '../../../../enums/ThermostatStatus';\nimport ThermostatStatusMap from '../../../../enums/ThermostatStatusMap';\n\nimport './_style.scss';\nimport type ComfortDiagnostic from 'customer-site/models/dashboards/comfort-diagnostic';\n\ninterface DashboardsThermostatsComfortViewSignature {\n Args: {\n model?: ComfortDiagnostic;\n summaryView?: boolean;\n testMode?: boolean;\n };\n}\n\ntype ThermostatDiagnosticPropNames = 'avgIndoorTemperature' | 'lowerComfortBoundTemp' | 'upperComfortBoundTemp';\n\n/**\n * @classdesc\n * Displays the view for Comfort diagnostics.\n */\n@intlPath({ path: 'dashboards/thermostats/comfort-view' })\nexport default class DashboardsThermostatsComfortView extends Component {\n get model():\n | ComfortDiagnostic\n | Pick {\n const { model } = this.args;\n assert('You must pass a thermostat-diagnostic model to the comfort-view component', !!model);\n\n return (\n model ?? {\n displayMode: ThermostatStatusMap[Unknown],\n severityStatus: UnknownSeverity\n }\n );\n }\n\n @action updateTestData(n: ThermostatDiagnosticPropNames, evt: Event & { target: HTMLInputElement }): void {\n set(this.model, n, Number(evt.target.value));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::ComfortView': typeof DashboardsThermostatsComfortView;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/highlight-statistic/cycling-highlight-statistic/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\ninterface CyclingHighlightStatisticComponentSignature {\n Args: {\n numModeCycles?: number;\n numLongCycles?: number;\n displayMode?: 'heat' | 'cool';\n };\n}\n\n/**\n * @classdesc\n * Given some values for numModeCycles, and/or numLongCycles, this component produces a stylized\n * display of cycling data.\n */\nexport default class CyclingHighlightStatisticComponent extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * Determines whether the provided value for `numLongCycles` can produce a valid\n * cycling-highlight-statistic. The case where 0 long cycles occur is considered\n * invalid, as we do not want to highlight 0 long cycles.\n */\n get hasValidLongCyclingData(): boolean {\n return (this.args.numLongCycles ?? 0) > 0;\n }\n\n /**\n * Determines whether the provided value for `numModeCycles` can produce a valid\n * cycling-highlight-statistic. Negative values are disallowed.\n */\n get hasValidModeCyclingData(): boolean {\n return (this.args.numModeCycles ?? -1) >= 0;\n }\n\n private trimNumber(v: string): string {\n return v.replace(/[0-9.-]/g, '').trim();\n }\n\n get highlightedValue(): number | undefined {\n const { args } = this;\n\n if (this.hasValidLongCyclingData) {\n return args.numLongCycles;\n } else if (this.hasValidModeCyclingData) {\n return args.numModeCycles;\n }\n\n return undefined;\n }\n\n get topString(): string | undefined {\n if (this.hasValidLongCyclingData) {\n const { numLongCycles = 0, numModeCycles = 0 } = this.args;\n return numModeCycles >= numLongCycles\n ? this.trimNumber(\n this.intl.t('generic.thermostats.longCycles', {\n num: numLongCycles\n })\n )\n : '';\n }\n\n return this.hasValidModeCyclingData ? '' : undefined;\n }\n\n private getDisplayModeKey(heat: string, cool: string, v: string): string {\n const { displayMode } = this.args;\n return displayMode ? { heat, cool }[displayMode] : v;\n }\n\n get bottomString(): string | undefined {\n const { numModeCycles = 0 } = this.args,\n { intl } = this;\n\n if (this.hasValidLongCyclingData) {\n const { numLongCycles = 0 } = this.args;\n\n if (numModeCycles >= numLongCycles) {\n return intl.t(\n `generic.thermostats.${this.getDisplayModeKey(\n 'ofNTotalHeatCycles',\n 'ofNTotalCoolCycles',\n 'ofNTotalCycles'\n )}`,\n {\n num: numModeCycles\n }\n );\n }\n\n // NOTE: If numModeCycles < numLongCycles, then we cannot trust that the numModeCycles\n // value is valid and should therefore hide it from the UI in this case.\n return this.trimNumber(\n intl.t('generic.thermostats.longCycles', {\n num: numLongCycles\n })\n );\n } else if (this.hasValidModeCyclingData) {\n return this.trimNumber(\n intl.t(`generic.thermostats.${this.getDisplayModeKey('heatCycles', 'coolCycles', 'cycles')}`, {\n num: this.args.numModeCycles\n })\n );\n }\n\n return undefined;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::HighlightStatistic::CyclingHighlightStatistic': typeof CyclingHighlightStatisticComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    \\n {{!-- @glint-expect-error This component needs to be converted to TS. --}}\\n \\n
    \\n\\n {{#if this.hasValidCycleRuntime}}\\n
    \\n \\n {{#unless @summaryView}}\\n \\n {{/unless}}\\n
    \\n {{/if}}\\n\\n\\n {{! Input UI is used for testing. }}\\n
    \\n {{#if (and @testMode (not @summaryView))}}\\n {{#each (array\\n (hash n=\\'avgCycleRuntimeForMode\\' t=\\'Avg Cycle Minutes\\' m=\\'500\\')\\n (hash n=\\'numLongCyclesForMode\\' t=\\'# Long Cycles\\' m=\\'50\\')\\n (hash n=\\'numCyclesForMode\\' t=\\'# Mode Cycles\\' m=\\'50\\')\\n ) as |info|}}\\n \\n {{/each}}\\n {{/if}}\\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/cycle-view/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { computed, action, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isNumber } from 'customer-site/utils/math-methods';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type CycleDiagnostic from 'customer-site/models/dashboards/cycle-diagnostic';\n\ninterface DashboardsThermostatsCycleViewArgs {\n model?: CycleDiagnostic;\n summaryView?: boolean;\n testMode?: boolean;\n}\n\ntype CycleDiagnosticPropNames = 'avgCycleRuntimeForMode' | 'numLongCyclesForMode' | 'numCyclesForMode';\ntype FakeCycleDiagnostic = Pick<\n CycleDiagnostic,\n CycleDiagnosticPropNames | 'severeLongCyclingThreshold' | 'displayMode'\n>;\n\n/**\n * @classdesc\n * Displays the summary and detail views for Cycle diagnostics.\n */\nexport default class DashboardsThermostatsCycleView extends Component {\n @service declare intl: ADCIntlService;\n\n get model(): CycleDiagnostic | FakeCycleDiagnostic {\n const { model } = this.args;\n assert('You must pass a thermostat-diagnostic model to the cycle-view component', !!model);\n\n return (\n model ?? {\n avgCycleRuntimeForMode: 0,\n numLongCyclesForMode: 0,\n numCyclesForMode: 0\n }\n );\n }\n\n /**\n * Determines if the cycle runtime value was valid.\n */\n @computed('model.avgCycleRuntimeForMode')\n get hasValidCycleRuntime(): boolean {\n return isNumber(this.model.avgCycleRuntimeForMode);\n }\n\n /**\n * The ceiling of the display graphic. Cycle length may go beyond this value,\n * but the graphic will use this value as its upper bound.\n * Cycle lengths greater than this value are considered severe.\n */\n @computed('model.severeLongCyclingThreshold')\n get displayMax(): number {\n return (this.model.severeLongCyclingThreshold ?? 0) + 60;\n }\n\n /**\n * Returns the Avg Cycle Time title for the given mode.\n */\n @computed('model.displayMode')\n get avgCycleTimeTitle(): string {\n const { displayMode } = this.model,\n key = displayMode\n ? {\n heat: 'avgHeatCycleTime',\n cool: 'avgCoolCycleTime'\n }[displayMode]\n : 'avgCycleTime';\n\n return this.intl.t(`generic.thermostats.${key}`);\n }\n\n @action updateTestData(n: CycleDiagnosticPropNames, evt: Event & { target: HTMLInputElement }): void {\n set(this.model, n, Number(evt.target.value));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::CycleView': typeof DashboardsThermostatsCycleView;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n

    \\n {{@model.thermostatDescription}}\\n \\n {{t \\'dashboards.thermostats.thermostat.lastTwentyFourHours\\'}}\\n \\n

    \\n\\n
    \\n
    \\n
    \\n {{yield}}\\n
    \\n\\n {{#if (or @model.avgTargetSetpoint (or @weather))}}\\n
    \\n {{! TODO Weather will be handled post-beta }}\\n {{#if @weather}}\\n
    \\n \\n \\n {{! TODO }}\\n \\n
    \\n {{! TODO }}\\n
    \\n
    \\n {{/if}}\\n\\n {{#if @model.avgTargetSetpoint}}\\n
    \\n

    \\n \\n {{safe-html (t \\'generic.valueDegree\\' value=@model.avgTargetSetpoint)}}\\n

    \\n\\n

    \\n {{@model.avgTargetLabel}}\\n

    \\n
    \\n {{/if}}\\n
    \\n {{/if}}\\n
    \\n\\n {{#if (or @model.bannerDescription (or @model.summary))}}\\n
    \\n {{#if @model.bannerDescription}}\\n

    \\n \\n {{@model.bannerDescription}}\\n

    \\n {{/if}}\\n\\n {{#if @model.summary}}\\n

    \\n {{@model.summary}}\\n

    \\n {{/if}}\\n
    \\n {{/if}}\\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/detail-view/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type ThermostatDiagnostic from 'customer-site/models/dashboards/thermostat-diagnostic';\n\nexport interface DashboardsThermostatsDetailViewSignature {\n Args: {\n model: ThermostatDiagnostic;\n weather?: any; // TODO: Add when weather is built out\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DashboardsThermostatsDetailView = templateOnlyComponent();\nexport default DashboardsThermostatsDetailView;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::DetailView': typeof DashboardsThermostatsDetailView;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n\\n \\n {{!-- @glint-expect-error This will start working when this is converted to PageView --}}\\n \\n {{yield}}\\n \\n \\n\\n \\n \\n\\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/detail-view-container.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './detail-view-container.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { DashboardsThermostatsDetailViewSignature } from './detail-view/index';\n\nexport interface DashboardsThermostatsDetailViewContainerSignature {\n Args: {\n model:\n | Promise\n | DashboardsThermostatsDetailViewSignature['Args']['model'];\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DashboardsThermostatsDetailViewContainer =\n templateOnlyComponent();\nexport default DashboardsThermostatsDetailViewContainer;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::DetailViewContainer': typeof DashboardsThermostatsDetailViewContainer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{#if @summaryView}}\\n {{#if @model.previewSummary}}\\n

    {{@model.previewSummary}}

    \\n {{/if}}\\n {{/if}}\\n\\n \\n
    \\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/efficiency-view/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { computed } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { Unknown as UnknownSeverity } from 'customer-site/enums/SeverityStatus';\nimport { Heat, Unknown } from 'customer-site/enums/ThermostatStatus';\nimport ThermostatStatusMap from 'customer-site/enums/ThermostatStatusMap';\n\nimport './_style.scss';\nimport type EfficiencyDiagnostic from 'customer-site/models/dashboards/efficiency-diagnostic';\n\ninterface DashboardThermostatsEfficiencyViewSignature {\n Args: {\n model?: EfficiencyDiagnostic;\n summaryView?: boolean;\n testMode?: boolean;\n };\n}\n\n/**\n * @classdesc\n * Displays the summary and detail views for Efficiency diagnostics.\n */\nexport default class DashboardThermostatsEfficiencyView extends Component {\n get model(): EfficiencyDiagnostic | Pick {\n const { model } = this.args;\n assert('You must pass a thermostat-diagnostic model to the efficiency-view component', !!model);\n\n return (\n model ?? {\n displayMode: ThermostatStatusMap[Unknown],\n severityStatus: UnknownSeverity\n }\n );\n }\n\n @equal('model.displayMode', ThermostatStatusMap[Heat])\n declare isHeatMode: boolean;\n\n get iconType(): string {\n return this.isHeatMode ? 'furnace' : 'ac';\n }\n\n /**\n * Determines the correct image to display given the model's displaying temperature mode and severity status.\n *\n * Possible images:\n * - furnace.png\n * - furnace-no-data.png\n * - ac.png\n * - ac-no-data.png\n */\n @computed('iconType', 'isHeatMode', 'model.severityStatus')\n get imageSource(): string {\n const src = [this.iconType];\n\n if (this.model.severityStatus === UnknownSeverity) {\n src.push('no', 'data');\n }\n\n return `images/dashboards/thermostats/${src.join('-')}.png`;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::EfficiencyView': typeof DashboardThermostatsEfficiencyView;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if @title}}\\n

    \\n {{@title}}\\n

    \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/highlight-statistic/hour-minute-highlight-statistic/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { isNumber } from 'customer-site/utils/math-methods';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { DashboardsThermostatsHighlightStatisticSignature } from '../index';\n\ninterface HourMinuteHighlightStatisticComponentSignature {\n Args: Pick & {\n totalMinutes: number;\n title?: string;\n titleCss?: string;\n };\n}\n\n/**\n * @classdesc\n * Given some value for totalMinutes, this component produces a stylized display of minutes\n * (or hours and minutes if totalMinutes >= 60).\n */\nexport default class HourMinuteHighlightStatisticComponent extends Component {\n @service declare intl: ADCIntlService;\n\n get hasValidData(): boolean {\n const { totalMinutes } = this.args;\n return isNumber(totalMinutes) && totalMinutes >= 0;\n }\n\n get highlightedValue(): number {\n const { totalMinutes } = this.args,\n integerHours = Math.floor(Math.max(0, totalMinutes / 60));\n\n return integerHours > 0 ? integerHours : Math.round(totalMinutes % 60);\n }\n\n private trimNumber(v: string): string {\n return v.replace(/[0-9.-]/g, '').trim();\n }\n\n private getHours(): number {\n return Math.floor(Math.max(0, this.args.totalMinutes / 60));\n }\n\n get topString(): string {\n const num = this.getHours();\n if (num > 0) {\n return this.trimNumber(\n this.intl.t('generic.hours', {\n num\n })\n );\n }\n\n return '';\n }\n\n get bottomString(): string {\n const { totalMinutes } = this.args,\n { intl } = this;\n\n if (this.getHours() > 0) {\n return intl.t('generic.minutes', {\n num: Math.round(totalMinutes % 60)\n });\n }\n\n return this.trimNumber(\n intl.t('generic.minutes', {\n num: totalMinutes\n })\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::HighlightStatistic::HourMinuteHighlightStatistic': typeof HourMinuteHighlightStatisticComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{yield}}\\n\\n

    \\n \\n {{@highlightedValue}}\\n \\n {{@topString}}\\n
    \\n {{@bottomString}}\\n

    \\n
    \\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/highlight-statistic/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface DashboardsThermostatsHighlightStatisticSignature {\n Element: HTMLDivElement;\n Args: {\n errorState: boolean;\n highlightedValueCss?: string;\n highlightedValue?: number;\n topString?: string;\n bottomString?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DashboardsThermostatsHighlightStatistic =\n templateOnlyComponent();\nexport default DashboardsThermostatsHighlightStatistic;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::HighlightStatistic': typeof DashboardsThermostatsHighlightStatistic;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: CircleGauge needs to be converted to TS, and I think that all the this.model should probably be converted to @model. }}\\n
    \\n
    \\n \\n
    \\n\\n \\n\\n {{! Input UI is used for testing. }}\\n
    \\n {{#if (and @testMode (not @summaryView))}}\\n \\n {{/if}}\\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/dashboards/thermostats/runtime-view/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { computed, action, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isNumber } from '../../../../utils/math-methods';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type RuntimeDiagnostic from 'customer-site/models/dashboards/runtime-diagnostic';\n\ninterface DashboardsThermostatsRuntimeViewArgs {\n model?: RuntimeDiagnostic;\n summaryView?: boolean;\n testMode?: boolean;\n}\n\n/**\n * @classdesc\n * Displays the summary and detail views for Runtime diagnostics.\n */\nexport default class DashboardsThermostatsRunTimeView extends Component {\n @service declare intl: ADCIntlService;\n\n get model():\n | RuntimeDiagnostic\n | Pick {\n const { model } = this.args;\n assert('You must pass a thermostat-diagnostic model to the runtime-view component', !!model);\n\n return (\n model ?? {\n totalRuntimeMinutes: 0\n }\n );\n }\n\n /**\n * Determines if the total runtime value was valid.\n */\n @computed('model.totalRuntimeMinutes')\n get hasValidTotalRuntime(): boolean {\n return isNumber(this.model?.totalRuntimeMinutes);\n }\n\n /**\n * The ceiling of the display graphic (in minutes). Runtime may go beyond this value,\n * but the graphic will use this value as its upper bound.\n * Runtime greater than this value is considered severe.\n */\n @computed('model.severeLongRuntimeThreshold')\n get displayMax(): number {\n // The ceiling value should not exceed 24 hours (allow two hour buffer).\n return Math.min((this.model?.severeLongRuntimeThreshold ?? 0) + 60 * 2, 60 * 24);\n }\n\n /**\n * Returns the Total Runtime title for the given mode.\n */\n @computed('model.displayMode')\n get totalRuntimeTitle(): string {\n const { displayMode } = this.model,\n key = displayMode\n ? {\n heat: 'totalHeatRuntime',\n cool: 'totalCoolRuntime'\n }[displayMode]\n : 'totalRuntime';\n\n return this.intl.t(`generic.thermostats.${key}`);\n }\n\n @action updateTestData(n: 'totalRuntimeMinutes', evt: Event & { target: HTMLInputElement }): void {\n set(this.model, n, Number(evt.target.value));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Dashboards::Thermostats::RuntimeView': typeof DashboardsThermostatsRunTimeView;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n \\n \\n
    \\n\",{ moduleName: \"customer-site/components/modals/enterprise/groups/rename-system-group/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { set } from '@ember/object';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Modal for renaming enterprise group.\n */\n@intlPath({ path: 'modals/enterprise/groups/rename-system-group' })\nexport default class RenameSystemGroup extends Component {\n @service intl;\n @service modals;\n @service contextManager;\n\n /** @override */\n constructor(owner, args) {\n super(owner, args);\n\n this.title =\n set(this, 'newGroupDescription', this.args.model.group.description) || this.intl.t('generic.rename');\n }\n\n /**\n * The name of the existing system group.\n *\n @type {String}\n @default ''\n */\n title = '';\n\n /**\n * The new name of the group.\n *\n * @type {String}\n * @default ''\n */\n newGroupDescription = '';\n\n /**\n * The button for saving the new group / group name.\n *\n * @type {Array}\n */\n @computed('args.model.group.description', 'newGroupDescription')\n get buttons() {\n return [\n getModalFooterButton(\n this.intl.t('generic.done'),\n async () => {\n await this.args.model.onModalSave(\n ...getObjProperties(this, 'newGroupDescription', 'args.model.group')\n );\n this.modals.closeModal();\n this.contextManager.refreshAvailableSystems();\n },\n 'btn-color-primary',\n !this.args.model.isValidGroupDescription(\n ...getObjProperties(this, 'args.model.group', 'newGroupDescription')\n )\n )\n ];\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias, equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\nimport RenameSystemGroupModal from 'customer-site/components/modals/enterprise/groups/rename-system-group/index';\nimport { Owner } from 'customer-site/enums/CustomerRole';\nimport {\n NO_DIRECT_ACCESS_LOGIN_ROLE_ID,\n LoginRoleOnSystemOrGroup,\n MOBILE_APP_AS_KEY_LOGIN_ROLE_ID\n} from 'customer-site/transforms/system-group-login-roles-list';\nimport { processValidationErrorsFromResponse } from '@adc/ajax/utils/validation-error-processing';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport ContainerObject from '../../../utils/container-object';\n\n/**\n * Updates the name of the given group.\n *\n * @param {String} newName\n * @param {models.systems.SystemGroup} group\n * @static\n * @returns {Promise}\n */\nexport function renameGroup(newName, group) {\n // Save the group name.\n group.set('description', newName?.trim());\n return group.save().catch((error) => {\n group.rollbackAttributes();\n\n // Set a validation error message to the property set by the server\n this.descriptionError = '';\n processValidationErrorsFromResponse.call(this, error);\n throw error;\n });\n}\n\n/**\n * Opens up the modal for renaming the system group.\n *\n * @param {models.systems.SystemGroup} group\n * @param {services.modals} modals\n * @param {String} instructionsTextResource\n * @param {String} placeholderTextResource\n * @static\n * @returns {Object}\n */\nexport function openRenameGroupModal(group, modals, instructionsTextResource, placeholderTextResource) {\n return modals.showModal(RenameSystemGroupModal, {\n instructionsTextResource: instructionsTextResource,\n placeholderResource: placeholderTextResource,\n group: group,\n onModalSave: renameGroup,\n isValidGroupDescription: (systemGroup, newGroupDescription) => {\n const trimmedName = newGroupDescription?.trim();\n return isPresent(trimmedName) && systemGroup.description !== trimmedName;\n }\n });\n}\n\n/**\n * @classdesc\n * A class that contains all the information needed for an item-row component\n *\n * @class components.enterprise.groups.BaseItemRow\n * @inner\n */\nexport default class BaseItemRow extends ContainerObject {\n @service contextManager;\n @service intl;\n @service modals;\n @service systemGroupsManager;\n\n @tracked model;\n\n /**\n * @override\n * @param {Object} host\n * @param {Object} model\n */\n constructor(host, model) {\n super(host);\n\n this.model = model;\n this.host = host;\n this.id = model.id;\n }\n\n /**\n * The host of this class' instantiator.\n *\n * @type {Object}\n */\n host;\n\n /**\n * Name of the system or group\n *\n * @type {String}\n */\n @alias('model.description')\n description;\n\n /**\n * Whether or not this item is selected (true if the checkbox or radio button is checked)\n *\n * @type {boolean}\n * @default false\n */\n @tracked isSelected = false;\n\n /**\n * Whether or not the Mobile App as Key checkbox has been selected.\n */\n @equal('selectedRole', MOBILE_APP_AS_KEY_LOGIN_ROLE_ID)\n isMobileAppAsKeySelected;\n\n /**\n * An array of child groups on the current item. Null if none exist.\n *\n * @type {Array}\n */\n get childGroups() {\n return [];\n }\n\n /**\n * The parent group or location item row associated with this current item.\n *\n * @type {Array}\n */\n parentItem = null;\n\n /**\n * Should the current row expand if it has child groups or systems?\n *\n * @type {boolean}\n * @default true\n */\n showDropdown = true;\n\n /**\n * Whether or not this item has something inside of it to show\n *\n * @type {boolean}\n */\n get canExpand() {\n return false;\n }\n\n /**\n * Whether or not the dropdown is open (returns false if the current item doesn't have a dropdown)\n *\n * @type {boolean}\n * @default false\n */\n @tracked isOpen = false;\n\n /**\n * Whether or not the row can be selected\n *\n * @type {boolean}\n * @default false\n */\n @tracked isSelectable = false;\n\n /**\n * Whether or not the child list element should use the list view (this is used for locations only)\n *\n * @type {boolean}\n * @default false\n */\n useListViewForChildren = false;\n\n /**\n * The icon to be shown in front of the description in the row\n *\n * @type {String}\n */\n icon;\n\n // region Login Role properties - When using a group row to show what roles a login has on that group\n\n /**\n * All of the available roles (login templates) the login can be assigned on all of the groups\n * 'within scope'. 'Within scope' means all of the groups on which the end-user can assign roles to logins.\n *\n * @type {models.enterprise.settings.LoginTemplatesForGroups}\n */\n availableLoginRolesWithinScope;\n\n /**\n * @override\n *\n * Determines which role to select for the group or location in the dropdown.\n *\n * @type {string|null|undefined}\n */\n @computed(\n 'availableLoginRolesWithinScope',\n 'login.{isNew,isScheduledDeviceLogin,loginRolesItems}',\n 'rerenderRole',\n 'model.{id,parentGroup.id}',\n 'parentItem.{selectedRole,id}'\n )\n get selectedRole() {\n const loginRolesItems = this.login?.loginRolesItems,\n identifierId = Number(this.model.id),\n isScheduledDeviceLogin = this.login?.isScheduledDeviceLogin;\n\n if (!loginRolesItems || !identifierId) {\n return NO_DIRECT_ACCESS_LOGIN_ROLE_ID;\n }\n\n // If there isn't an entry for the current system or group, make a default one.\n loginRolesItems[identifierId] ??= new LoginRoleOnSystemOrGroup(null);\n\n // For scheduled logins, if the parent item is selected, we also want the child item to be selected.\n if (\n isScheduledDeviceLogin &&\n this.parentItem !== null &&\n loginRolesItems[this.parentItem.id]?.role === MOBILE_APP_AS_KEY_LOGIN_ROLE_ID\n ) {\n return loginRolesItems[this.parentItem.id]?.role;\n }\n\n // Now, get the role that this login has on the group or location.\n return loginRolesItems[identifierId]?.role || NO_DIRECT_ACCESS_LOGIN_ROLE_ID;\n }\n\n /**\n * Sets the role selected for this group or system.\n */\n setSelectedRole(role) {\n const loginRolesItems = this.login?.loginRolesItems,\n identifierId = Number(this.model.id);\n\n if (!loginRolesItems || !identifierId) {\n return;\n }\n\n // First, remove the previous role.\n const systemGroupLoginRoleToModify = loginRolesItems[identifierId] ?? new LoginRoleOnSystemOrGroup(null);\n systemGroupLoginRoleToModify.removeRole();\n\n // Append or remove the selected group id to the selectedGroupIds list.\n // If we have selected a group for the login to access, add the role defined in the dropdown.\n if (role !== NO_DIRECT_ACCESS_LOGIN_ROLE_ID) {\n systemGroupLoginRoleToModify.addRole(role);\n }\n\n this.rerenderRole = !this.rerenderRole;\n }\n\n @computed('login.loginRolesItems', 'model.id', 'isSystem')\n get isPrimaryLoginForSystem() {\n const { loginRolesItems } = this.login ?? {},\n identifierId = Number(this.model.id);\n\n return this.isSystem && loginRolesItems && Number(loginRolesItems[identifierId]?.originalRole) === Owner;\n }\n\n /**\n * Property to tell us if the checkbox should be partially selected.\n * This is used for Scheduled Device Logins.\n * If some units are selected in a group, but not the group itself, we want to show it's checkbox as dashed.\n */\n @computed('childItems.@each.{selectedRole,partiallySelected}', 'rerenderRole', 'login.loginRolesItems')\n get partiallySelected() {\n return (async () => {\n const loginRolesItems = this.login?.loginRolesItems;\n if (!loginRolesItems) {\n return false;\n }\n\n const childItems = await this.childItems;\n if ((this.childItems?.length ?? 0) === 0) {\n return false;\n }\n\n for (let i = 0; i < this.childItems.length; i++) {\n const childItem = childItems[i];\n if (\n loginRolesItems[childItem.id].role == MOBILE_APP_AS_KEY_LOGIN_ROLE_ID ||\n (await childItem.partiallySelected)\n ) {\n return true;\n }\n }\n\n return false;\n })();\n }\n\n /**\n * The login that we are editing.\n *\n * @type {models.logins.SystemGroupLogin}\n */\n @tracked login;\n\n /**\n * Property to for rerender the selected role.\n */\n @tracked rerenderRole;\n\n // endregion\n\n /**\n * The items in the dropdown kabob menu (if any)\n *\n * @type {Array}\n */\n @computed('model.{canRenameAndDelete,isSystemlessGroup}')\n get menuItems() {\n const { model } = this;\n\n return model.canRenameOrDelete ? this.getMenuItems(model) : null;\n }\n\n @computed('model.{childGroups,systems}')\n get childItems() {\n return this.getChildItems();\n }\n\n /**\n * Class name to use for the list of any child rows\n *\n * @type {String}\n */\n childClass;\n\n /**\n * Class name to use for this row.\n *\n * @type {String}\n */\n class;\n\n /**\n * Subset of base-item-rows to display\n *\n * @type {Array}\n */\n getChildItems() {\n return null;\n }\n\n /**\n * Gets inline and kabob menu items for the given item row object.\n *\n * @param {models.systems.SystemGroup || models.systems.System} model\n */\n getMenuItems(model) {\n const menuItems = [\n [\n this.disabled ? 'enterprise.groups.index.renameEnterpriseHiddenPC' : 'rename',\n 'edit',\n () =>\n openRenameGroupModal(\n model,\n this.modals,\n 'enterprise.groups.new-enterprise.enterNewEnterpriseNameMessage',\n 'enterprise.groups.new-enterprise.newEnterpriseName'\n )\n ]\n ];\n\n // If login is not PointCentral then add the delete option in menu item\n if (!this.contextManager.identityModel.isPointCentral || model.isSystemlessGroup) {\n const deleteOption = [\n this.disabled ? 'enterprise.groups.index.deleteEnterpriseHiddenPC' : 'delete',\n 'trash',\n () => {\n this.modals.showConfirmationDialog(\n this.intl.t('components.enterprise.groups.deleteBtnTitle'),\n // We may have extra info to give to the end-user in the confirmation message.\n // Using exported function from groups/controller.js to delete subgroups now\n this.intl.t('components.enterprise.groups.deleteConfirmationDescription', {\n groupName: model.description\n }),\n {\n text: this.intl.t('generic.delete'),\n css: 'btn-color-danger',\n action: async () => {\n await this.systemGroupsManager.deleteSystemGroup(model);\n }\n }\n );\n }\n ];\n menuItems.push(deleteOption);\n }\n\n return menuItems.map(([key, iconTitle, action]) =>\n DropdownActionItem.create({\n name: this.intl.t(`${this.disabled ? '' : 'generic.'}${key}`),\n iconTitle: iconTitle,\n className: key === 'delete' ? 'manage-groups-dropdown-delete-action' : null,\n disabled: this.disabled,\n action\n })\n );\n }\n\n /**\n * Whether or not the item row is a system (i.e. not a group)\n *\n * @type {boolean}\n * @default false\n */\n isSystem = false;\n\n /**\n * Whether or not the checkbox is hidden\n *\n * @type {boolean}\n * @default false\n */\n checkboxHidden = false;\n\n /**\n * Whether or not the group is point central LTR\n *\n * @type {boolean}\n * @default false\n */\n disabled = false;\n\n /**\n * How deeply nested this item row is. The root node has a depth of 0.\n *\n * @type {number}\n * @default 0\n */\n nodeDepth = 0;\n\n /**\n * Whether this item should show the \"inheriting role\" dropdown in place of\n * the \"no access\" dropdown when selecting login roles.\n *\n * @type {boolean}\n */\n @computed('parentItem.{canInheritRole,selectedRole}')\n get canInheritRole() {\n const { canInheritRole, selectedRole } = this.parentItem || {};\n\n return canInheritRole || (isPresent(selectedRole) && selectedRole !== NO_DIRECT_ACCESS_LOGIN_ROLE_ID);\n }\n\n /**\n * Collection of login permissions for the current context.\n *\n * @type {LoginPermissionsCollection}\n */\n loginPermissionsCollection = undefined;\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- @glint-nocheck The filters type is too broad, so it doesn\\'t know about these other properties. --}}\\n\\n {{yield}}\\n\\n\",{ moduleName: \"customer-site/components/filters/date-time-range-filter/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { DateRangePickerComponentSignature } from '@adc/ui-components/components/date-range-picker';\nimport type DateRangeFilter from 'customer-site/classes/helpers/filters/date-range-filter';\n\ninterface FiltersDateTimeRangeFilterSignature {\n Element: DateRangePickerComponentSignature['Element'];\n Args: {\n filter: DateRangeFilter;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst FiltersDateTimeRangeFilter = templateOnlyComponent();\nexport default FiltersDateTimeRangeFilter;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Filters::DateTimeRangeFilter': typeof FiltersDateTimeRangeFilter;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n
    \\n \\n {{#unless @dateTimeFilter.searchByDateOnly.value}}\\n \\n {{/unless}}\\n
    \\n
    \",{ moduleName: \"customer-site/components/filters/date-time-filter/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { debounceTask } from 'ember-lifeline';\nimport { intlPath } from '@adc/i18n/path';\nimport { isValid } from 'date-fns';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DateTimeFilter from 'customer-site/classes/helpers/filters/date-time-filter';\n\ninterface FiltersDateTimeFilterSignature {\n Args: {\n dateTimeFilter: DateTimeFilter;\n };\n}\n\n@intlPath({ path: 'filters/date-time-filter' })\nexport default class FiltersDateTimeFilter extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * Schedules the date time filter value change (after appropriate delay for key strokes).\n */\n @action changeDateTime(filter: DateTimeFilter, dateValue: Date): void {\n debounceTask(this, 'updateDateTime', filter, dateValue, 50);\n }\n\n /**\n * Determines whether we need to apply the filter after the 'Search entire day' checkbox's value changes.\n */\n @action changeSearchByDateOnlyFlag(evt: Event): void {\n const filter = this.args.dateTimeFilter;\n filter.searchByDateOnly.value = (evt.target as HTMLInputElement).checked;\n\n if (!isEmpty(filter.selectedDate.value)) {\n this.updateDateTime(filter, filter.selectedDate.value as Date);\n }\n }\n\n /**\n * Update the selected date value as well as whether we are searching an entire day, a date and time.\n */\n private updateDateTime(filter: DateTimeFilter, dateValue: Date): void {\n const { dateTimeFilter } = this.args || {},\n { selectedDate, searchByDateOnly } = filter;\n\n // Return if no date time filter passed-in.\n if (!dateTimeFilter?.apply || !isValid(dateValue)) {\n return;\n }\n\n dateTimeFilter.apply({\n selectedDateFieldName: selectedDate.filteringFieldName,\n dateValue: dateValue,\n searchByDateOnlyFieldName: searchByDateOnly.filteringFieldName,\n searchByDateOnly: filter.searchByDateOnly.value\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Filters::DateTimeFilter': typeof FiltersDateTimeFilter;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- @glint-nocheck The filters type is too broad, so it doesn\\'t know about these other properties. --}}\\n
    \\n {{#each @filtersManager.filters as |filter|}}\\n {{#unless (await filter.skip)}}\\n \\n {{#if filter.description}}\\n

    {{filter.description}}

    \\n {{/if}}\\n\\n {{#if filter.isDateRangeSelector}}\\n \\n\\n {{else if filter.isSearchFilter}}\\n \\n\\n {{else if filter.isCheckList}}\\n \\n\\n <:content as |item|>\\n {{#if item.props.tooltipText}}\\n \\n {{/if}}\\n \\n \\n\\n\\n {{else if filter.isDropdown}}\\n {{#if filter.isMultiSelect}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{else if filter.isDateSelector}}\\n \\n {{else if filter.isDateTimeFilter}}\\n \\n\\n {{/if}}\\n
    \\n {{/unless}}\\n {{/each}}\\n
    \\n\",{ moduleName: \"customer-site/components/filters/filter-panel/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type FilterManager from 'customer-site/classes/helpers/filter-manager';\n\nexport interface FilterPanelSignature {\n Element: HTMLDivElement;\n Args: {\n filtersManager?: FilterManager;\n isHidden?: boolean;\n rightPanel?: boolean;\n };\n}\n\nconst FilterPanelComponent = templateOnlyComponent();\nexport default FilterPanelComponent;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Filters::FilterPanel': typeof FilterPanelComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{!-- @glint-expect-error glint hates when we render components like this. --}}\\n {{#if this.data.contentComponent}}\\n {{!-- @glint-expect-error glint hates when we render components like this. --}}\\n \\n {{else}}\\n {{#each this.data.content as |part|}}\\n {{safe-html part}}\\n {{else}}\\n

    {{safe-html this.data.content}}

    \\n {{/each}}\\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/modals/help-tour/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { getProperties, computed, action, set } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\n\nimport './_style.scss';\nimport type { ModalButtonConfig } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport type { SimpleDialogSignature } from '@adc/ui-components/components/modals/dialog-modals/simple/simple-dialog';\nimport type StepContent from 'customer-site/components/help-tour/step-content';\nimport type HelpTourService from 'customer-site/services/help-tour';\n\ninterface HelpTourModalComponentSignature {\n Element: SimpleDialogSignature['Element'];\n Args: {\n model: {\n modalData: {\n data: StepContent;\n };\n };\n };\n}\n\n/**\n * Modal component for running step of a help tour.\n */\nexport default class HelpTourModalComponent extends Component {\n @service declare helpTour: HelpTourService;\n\n /**\n * The data for the modal.\n */\n @alias('args.model.modalData.data')\n declare data: StepContent;\n\n /**\n * Should the buttons be shown in the modal?\n */\n shouldShowButtons = true;\n\n /**\n * Makes sure that the component will have a size class.\n * Defaults to small (modal-sm), can be changed to medium (modal-md) or large (modal-lg).\n */\n @computed('data.cssClass')\n get cssClassWithSize(): string {\n const cssClasses = (this.data?.cssClass ?? '').split(/\\s+/),\n sizeClasses = ['modal-sm', 'modal-md', 'modal-lg'];\n\n // If cssClass doesn't already contain a size class, append the default to it.\n return (\n cssClasses.any(sizeClasses.includes, sizeClasses) ? cssClasses : cssClasses.concat(sizeClasses[0])\n ).join(' ');\n }\n\n /**\n * Footer buttons.\n */\n @computed('data.buttons', 'shouldShowButtons')\n get buttons(): ModalButtonConfig[] {\n const buttons = this.data.buttons;\n\n // Should we show the buttons at all?\n if (!this.shouldShowButtons || isEmpty(buttons)) {\n return [];\n }\n\n // Create buttons.\n return buttons?.map((button: any) => {\n const { text, cssClass, fn, isPrimary } = getProperties(button, 'text', 'cssClass', 'fn', 'isPrimary');\n\n return getModalFooterButton(\n text,\n () => {\n fn();\n return false;\n },\n cssClass,\n false,\n isPrimary\n );\n });\n }\n\n /**\n * Show or hide buttons for the modal.\n */\n @action showButtons(show: boolean): void {\n set(this, 'shouldShowButtons', show);\n }\n\n /**\n * Stops the help tour.\n */\n @action closeModal(): void {\n this.helpTour.stop();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::HelpTour': typeof HelpTourModalComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.showPopover}}\\n \\n {{#if this.model.title}}\\n \\n \\n \\n {{/if}}\\n\\n \\n {{!-- @glint-expect-error Glint is never going to like this, we should find a different way to do this (using named blocks?). --}}\\n {{#if this.model.contentComponent}}\\n {{!-- @glint-expect-error Glint is never going to like this, we should find a different way to do this (using named blocks?). --}}\\n \\n {{else}}\\n

    {{safe-html this.model.content}}

    \\n {{/if}}\\n
    \\n\\n {{#if this.model.buttons}}\\n \\n {{!-- @glint-expect-error model buttons property is typed incorrectly, please fix this. --}}\\n {{#each this.model.buttons as |button|}}\\n \\n {{/each}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n\",{ moduleName: \"customer-site/components/help-tour/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { scrollIntoViewIfNeeded } from '@adc/ember-utils/utils/browser-helpers';\nimport { schedule } from '@adc/ember-utils/utils/runloop';\nimport { get, set, setProperties } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport HelpTourModalComponent from '../modals/help-tour/index';\nimport { StepDisplayType } from './step';\n\nimport type Step from './step';\nimport type StepContent from './step-content';\nimport './_style.scss';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type HelpTourService from 'customer-site/services/help-tour';\n\ninterface Rectangle {\n left: number;\n top: number;\n height: number;\n width: number;\n}\n\ninterface Container {\n left?: number;\n top?: number;\n height?: number;\n width?: number;\n svgHeight?: number | string;\n svgWidth?: number | string;\n svgLeft?: number;\n svgTop?: number;\n isWindow: boolean;\n}\n\ninterface ModalData {\n data?: StepContent;\n}\n\nconst HIGHLIGHT_POINTER_CLASS = 'highlight-pointer';\n\n/**\n * Adds mask to an element so that other parts are not clickable.\n */\nexport function addElementMask(\n element?: HTMLElement | null,\n transparent = false,\n containerElement: HTMLElement | (Window & typeof globalThis) | null = window,\n elementHasPointerEvents = false,\n padding = 4\n): SVGElement {\n const fnCreateSvgElement = (tagName: string, attributes: Record = {}) => {\n const el = document.createElementNS('http://www.w3.org/2000/svg', tagName);\n\n Object.keys(attributes).forEach((key: string) => el.setAttribute(key, attributes[key]));\n\n return el;\n },\n svg = fnCreateSvgElement('svg', { class: 'element-mask' }),\n rect = element?.getBoundingClientRect(),\n fnGetContainerData = (containerEl: HTMLElement | (Window & typeof globalThis) | null) => {\n const data = {\n top: 0,\n left: 0\n },\n isWindow = containerEl === window;\n\n let height = 0,\n width = 0,\n svgLeft = 0,\n svgTop = 0,\n svgHeight: number | string = 0,\n svgWidth: number | string = 0;\n\n if (isWindow) {\n const { innerHeight, innerWidth } = window;\n height = innerHeight;\n width = innerWidth;\n svgHeight = '100%';\n svgWidth = '100%';\n } else {\n const rect = (containerEl as HTMLElement).getBoundingClientRect();\n\n height = svgHeight = rect.height;\n width = svgWidth = rect.width;\n svgLeft = rect.left;\n svgTop = rect.top;\n }\n\n return {\n ...data,\n height,\n width,\n svgHeight,\n svgWidth,\n svgLeft,\n svgTop,\n isWindow\n };\n };\n\n const containerData = fnGetContainerData(containerElement),\n isWindowContainer = containerData.isWindow;\n\n let elementData: Rectangle | undefined;\n\n if (element) {\n // Calculate position of the mask and adjust for padding.\n elementData = ['left', 'top', 'width', 'height'].reduce((cache, property, index) => {\n // Do negative difference for left and top, but do double positive for width and height.\n // Warning: If the order changes, this should get changed.\n const diff = padding * (index >= 2 ? 2 : -1);\n\n (cache as Rectangle)[property as keyof Rectangle] = rect\n ? (rect[property as keyof DOMRect] as number) + diff\n : diff;\n\n return cache;\n }, {}) as Rectangle;\n\n // If container is not window, element's left and top needs to be adjusted by the containers svg offsets because the whole svg will be moved.\n if (!isWindowContainer) {\n ['left', 'top'].forEach(\n (key) =>\n ((elementData![key as keyof Rectangle] as number) -= containerData[\n camelize(`svg-${key}`) as keyof Container\n ] as number)\n );\n }\n }\n\n ['left', 'top', 'width', 'height'].forEach(\n (property) =>\n ((svg.style[property as keyof Omit] as\n | string\n | number\n | boolean) =\n containerData[camelize(`svg-${property}`) as keyof Container] + (!isWindowContainer ? 'px' : ''))\n );\n\n const modal = document.body.querySelector('.modal'),\n isInModal = modal && modal.contains((element || containerElement) as Node);\n\n svg.classList.toggle('in-modal', !!isInModal);\n svg.classList.toggle('no-pointer-events', elementHasPointerEvents);\n svg.classList.toggle('transparent', transparent);\n\n const fnGenerateRectangle = (data?: Rectangle) => {\n if (!data) {\n return null;\n }\n\n const { left, top, height, width } = data;\n\n return `M${left} ${top} h ${width} v ${height} h -${width} z`;\n };\n\n const g = fnCreateSvgElement('g'),\n path = fnCreateSvgElement('path', {\n d: [fnGenerateRectangle(containerData), fnGenerateRectangle(elementData)].join(' '),\n 'fill-rule': 'evenodd'\n });\n\n g.appendChild(path);\n svg.appendChild(g);\n document.body.appendChild(svg);\n\n return svg;\n}\n\n/**\n * Displays the help tour steps.\n */\nexport default class HelpTourComponent extends Component {\n @service declare helpTour: HelpTourService;\n @service declare modals: ModalsService;\n @service declare media: ADCResponsiveMediaService;\n\n /**\n * The type of the step.\n */\n type?: StepDisplayType;\n\n /**\n * The step's content.\n */\n model?: StepContent;\n\n /**\n * The data for the modal dialog.\n */\n declare modalData: ModalData;\n\n /**\n * Should the step be displayed in a modal dialog?\n */\n @equal('type', StepDisplayType.Modal)\n declare isModal: boolean;\n\n /**\n * Should the step be displayed in a popover?\n */\n @equal('type', StepDisplayType.Popover)\n declare isPopover: boolean;\n\n /**\n * Show the popover?\n */\n showPopover?: boolean;\n\n /**\n * The element to highlight.\n */\n elementToHighlight?: HTMLElement;\n\n /**\n * The element mask.\n */\n elementMask?: SVGElement;\n\n /**\n * The element with highlight pointer.\n */\n\n elementWithHighlightPointer?: HTMLElement;\n\n constructor(owner: unknown, args: any) {\n super(owner, args);\n\n this.helpTour.setHelpTourComponent(this);\n }\n\n /**\n * Closes the current step.\n */\n async closeCurrentStep(nextStep?: Step): Promise {\n const { type: currentStepType, elementWithHighlightPointer } = this,\n wasPopover = currentStepType === StepDisplayType.Popover;\n\n if (!currentStepType) {\n return Promise.resolve();\n }\n\n elementWithHighlightPointer?.classList.remove(HIGHLIGHT_POINTER_CLASS);\n\n if (wasPopover) {\n set(this, 'showPopover', false);\n } else {\n if (get(nextStep || {}, 'type') !== StepDisplayType.Modal) {\n this.modals.closeModal();\n }\n }\n\n const mask = this.elementMask,\n { model } = this;\n\n if (model?.stepClosed) {\n model.stepClosed(this.elementToHighlight);\n }\n\n if (!nextStep) {\n set(this, 'type', undefined);\n }\n\n this.elementMask = undefined;\n this.elementToHighlight = undefined;\n this.elementWithHighlightPointer = undefined;\n\n await schedule('afterRender', async () => {\n if (wasPopover) {\n mask?.remove();\n }\n });\n }\n\n /**\n * Show the passed in step.\n */\n showStep(newStep: Step): Promise {\n const { type, model } = newStep,\n showPopover = type === StepDisplayType.Popover;\n\n const modalData = this.modalData || {};\n if (!showPopover) {\n set(modalData, 'data', model);\n\n if (!this.isModal) {\n this.modals.showModal(HelpTourModalComponent, {\n modalData\n });\n }\n }\n\n let svgMask = undefined,\n elementToHighlight: HTMLElement | undefined,\n elementWithHighlightPointer = undefined;\n\n if (showPopover) {\n const { attachTo, scrollAlignToTop = true, highlightElement, showHighlightPointer } = model,\n element = typeof attachTo === 'string' ? document.querySelector(attachTo) : attachTo;\n\n elementToHighlight = element as HTMLElement;\n\n if (!highlightElement) {\n elementToHighlight = undefined;\n } else if (highlightElement !== true) {\n elementToHighlight =\n typeof highlightElement === 'string'\n ? (document.querySelector(highlightElement) as HTMLElement)\n : highlightElement;\n }\n\n if (elementToHighlight) {\n this.media.isMobile\n ? elementToHighlight.scrollIntoView(scrollAlignToTop)\n : scrollIntoViewIfNeeded(elementToHighlight || element, { padding: 8 });\n }\n\n svgMask = addElementMask(elementToHighlight, !elementToHighlight);\n\n if (showHighlightPointer) {\n element?.classList.add(HIGHLIGHT_POINTER_CLASS);\n\n elementWithHighlightPointer = element as HTMLElement;\n }\n }\n\n setProperties(this, {\n type,\n model,\n modalData,\n showPopover,\n elementToHighlight,\n elementMask: svgMask,\n elementWithHighlightPointer\n });\n\n model?.stepOpened?.(elementToHighlight);\n\n return Promise.resolve();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n HelpTour: typeof HelpTourComponent;\n }\n}\n","import EmberObject from '@ember/object';\n\nexport type HelpTourButton = {\n text: string;\n action?: string;\n fn: () => void;\n cssClass?: boolean;\n show?: boolean;\n isPrimary?: boolean;\n isLink?: boolean;\n};\n\n/**\n * Returns the selector for the element to attach the popover.\n */\nexport function getAnchorSelector(value: string): string {\n return `*[data-tour-anchor=\"${value}\"]`;\n}\n\n/**\n * Returns the selector for the element to hughlight.\n */\nexport function getHighlightSelector(value: string): string {\n return `*[data-tour-highlight=\"${value}\"]`;\n}\n\n/**\n * The content for the help tour step.\n */\nexport default class StepContent extends EmberObject {\n /**\n * The css class names.\n */\n cssClass?: string;\n\n /**\n * The title of the step.\n */\n step?: string;\n\n /**\n * The title of the step.\n */\n title?: string;\n\n /**\n * The content of the step.\n */\n content?: string;\n\n /**\n * Should highlight the element?\n */\n highlightElement: boolean | string = true;\n\n /**\n * Should show highlight pointer?\n */\n showHighlightPointer?: boolean;\n\n /**\n * The element to attach to.\n */\n attachTo?: HTMLElement | string;\n\n /**\n * Should scroll to top?\n */\n scrollAlignToTop?: boolean;\n\n /**\n * The buttons for the step.\n */\n buttons?: Record;\n\n /**\n * The placement for the popover menu.\n */\n placement?: string;\n\n /**\n * Action to execute when the step is opened.\n */\n stepOpened?: (el?: HTMLElement) => void;\n\n /**\n * Action to execute when the step is closed.\n */\n stepClosed?: (el?: HTMLElement) => void;\n}\n","import EmberObject from '@ember/object';\nimport StepContent from './step-content';\n\nexport enum StepDisplayType {\n Popover = 1,\n Modal = 2\n}\n\n/**\n * Description of a help tour step.\n */\nexport default class Step extends EmberObject {\n /**\n * Type of the current step.\n */\n type = StepDisplayType.Modal;\n\n /**\n * Model for the behavior of the step.\n */\n model: StepContent;\n\n constructor(...args: any) {\n super(...args);\n\n this.model = StepContent.create();\n }\n\n /**\n * Should anything happen before step gets rendered?\n */\n async onBeforeOpen(): Promise {}\n\n /**\n * Should anything happen after step is closed?\n */\n async onAfterClose(): Promise {}\n\n /**\n * Should anything happen before the step availability check?\n */\n async beforeIsStepAvailable(): Promise {}\n\n /**\n * Is this step currently available to be displayed? The reasons can be many for it not to be:\n * - Not available on small screens\n * - Model permissions not available.\n */\n async isStepAvailable(): Promise {\n await this.beforeIsStepAvailable();\n\n // In general modals should always be available.\n if (this.type === StepDisplayType.Modal) {\n return true;\n }\n\n const attachTo = this.model.attachTo;\n return !!(typeof attachTo === 'string' ? document.querySelector(attachTo) : attachTo);\n }\n}\n","import EmberObject from '@ember/object';\n\nimport type Step from './step';\n\n/**\n * Description of a help tour.\n */\nexport default class Tour extends EmberObject {\n /**\n * List of steps that the tour should go through.\n */\n steps?: Step[];\n\n /**\n * The name of the tour;\n */\n name = '';\n\n /**\n * To be executed before the tour should start.\n */\n async beforeStart(): Promise {}\n\n /**\n * To be executed after the tour has ended.\n */\n async afterEnd(): Promise {}\n}\n","import { registerDestructor } from '@ember/destroyable';\nimport { inject as service } from '@ember/service';\nimport Modifier from 'ember-modifier';\nimport { NUM_MILLISECONDS_IN_MINUTE } from 'customer-site/utils/datetime';\nimport { getTimezoneOffset } from 'date-fns-tz';\nimport merge from 'deepmerge';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Owner from '@ember/owner';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { ArgsFor } from 'ember-modifier';\nimport type Highcharts from 'highcharts';\nimport type { HTMLDOMElement, Options } from 'highcharts';\n\ntype Chart = {\n highchartsOptions: Options;\n};\n\ninterface DrawChartSignature {\n Args: {\n Named: {\n [highcharts: string]: typeof Highcharts;\n };\n Positional: [Chart];\n };\n Element: HTMLDOMElement;\n}\n\n/**\n * @classdesc A template modifier for rendering a chart via Highcharts on the element.\n *\n * @example\n * {{draw-chart this.chart highcharts=this.highcharts}}\n */\nexport default class DrawChartModifier extends Modifier {\n @service declare identityManager: IdentityManager;\n @service declare intl: ADCIntlService;\n @service declare media: ADCResponsiveMediaService;\n\n constructor(owner: Owner, args: ArgsFor) {\n super(owner, args);\n registerDestructor(this, this.cleanup);\n }\n\n /**\n * The Chart object returned by Highcharts.\n */\n chartInstance?: Highcharts.Chart;\n\n /**\n * Whether we've received the highcharts module and initialized it with our global defaults.\n */\n isHighchartsInitialized = false;\n\n // See: https://www.highcharts.com/docs/getting-started/how-to-set-options#global-options\n get optionsForAllCharts(): Highcharts.Options {\n const { isPrefersReducedMotion } = this.media;\n\n return {\n chart: {\n animation: !isPrefersReducedMotion,\n numberFormatter: (number, decimals) => {\n const fmtOptions: Parameters[2] = {};\n\n // Highcharts expects that a value of -1 preserves the amount in the input number.\n if (decimals !== -1) {\n const clamp = (num: number, min: number, max: number) => Math.min(Math.max(num, min), max);\n\n // Intl.NumberFormat supports the range [0, 20] for both `minimumFractionDigits` and `maximumFractionDigits`.\n const minimumFractionDigits = 0,\n maximumFractionDigits = 20,\n numDigits = clamp(decimals, minimumFractionDigits, maximumFractionDigits);\n\n fmtOptions.minimumFractionDigits = fmtOptions.maximumFractionDigits = numDigits;\n }\n\n return this.intl.formatNumber(number, fmtOptions);\n }\n },\n credits: {\n enabled: false\n },\n lang: {\n /**\n * For now, let's avoid shortening numbers in axis labels as the implementation\n * for this gets a bit hairy (and we don't really have a strong need to do this\n * on any charts currently on the customer site).\n *\n * @see https://api.highcharts.com/highcharts/lang.numericSymbols\n */\n numericSymbols: []\n },\n plotOptions: {\n series: {\n animation: !isPrefersReducedMotion\n }\n },\n time: {\n /**\n * For more details, please refer to:\n * - https://api.highcharts.com/highcharts/time.getTimezoneOffset\n * - https://github.com/marnusw/date-fns-tz#gettimezoneoffset\n */\n getTimezoneOffset: (msSinceEpoch: number) => {\n return (\n -getTimezoneOffset(this.identityManager.getTimezone() ?? '', msSinceEpoch) /\n NUM_MILLISECONDS_IN_MINUTE\n );\n }\n },\n title: {\n text: ''\n }\n };\n }\n\n /**\n * Initializes highcharts with global defaults and then renders a chart with the specified chart options.\n *\n * @note Assumes that the caller will not hotswap the highcharts named arg at runtime.\n */\n modify(element: HTMLElement, positional: [Chart], named: { [highcharts: string]: typeof Highcharts }): void {\n const chart = positional[0],\n { highcharts } = named;\n\n if (!highcharts || !chart) {\n return;\n }\n\n if (!this.isHighchartsInitialized) {\n this.initializeHighcharts(highcharts);\n }\n\n this.drawChart(highcharts, chart, element);\n }\n\n /**\n * Renders a chart with the given options against the specified element via Highcharts.\n *\n * @note The `data-render-state` attribute can be used to track whether Highcharts has finished rendering the\n * chart.\n */\n drawChart(highcharts: typeof Highcharts, chart: Chart, element: HTMLDOMElement) {\n const renderStateDataAttr = 'data-render-state',\n renderStateSettled = 'settled';\n\n element.removeAttribute(renderStateDataAttr);\n const chartOptions = merge(\n {\n chart: {\n events: {\n render: () => {\n element.setAttribute(renderStateDataAttr, renderStateSettled);\n }\n }\n }\n },\n chart.highchartsOptions\n );\n\n this.chartInstance = highcharts.chart(element, chartOptions);\n }\n\n /**\n * Initializes Highcharts with a set of global default options and loads any additional desired modules.\n */\n initializeHighcharts(highcharts: typeof Highcharts) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n const formatDate = (ts: number, cfg: Intl.DateTimeFormatOptions) => this.intl.formatDate(new Date(ts), cfg);\n\n highcharts.setOptions(this.optionsForAllCharts);\n\n // Some charts our icn SVGs inline inline in the charts, so we need to explicitly allow that here.\n // See: https://www.highcharts.com/docs/chart-concepts/security for more details.\n highcharts.AST.allowedTags.push('use');\n\n /**\n * Custom formatters for showing localized date-times. In general, you probably want to define a formatter for\n * any compound date-time strings, as various locales may arrange/represent the values differently.\n *\n * Avoid overriding the built-in format keys: https://api.highcharts.com/class-reference/Highcharts.Time#dateFormat\n */\n highcharts.dateFormats.C = (timestamp) => formatDate(timestamp, { hour: 'numeric', minute: 'numeric' });\n\n this.isHighchartsInitialized = true;\n }\n\n /**\n * Tears down the chart instance from the Highcharts library.\n */\n cleanup = () => {\n this.chartInstance?.destroy();\n };\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'draw-chart': typeof DrawChartModifier;\n }\n}\n","import tzParseTimezone from '../_lib/tzParseTimezone/index.js'\n\n/**\n * @name getTimezoneOffset\n * @category Time Zone Helpers\n * @summary Gets the offset in milliseconds between the time zone and Universal Coordinated Time (UTC)\n *\n * @description\n * Returns the time zone offset from UTC time in milliseconds for IANA time zones as well\n * as other time zone offset string formats.\n *\n * For time zones where daylight savings time is applicable a `Date` should be passed on\n * the second parameter to ensure the offset correctly accounts for DST at that time of\n * year. When omitted, the current date is used.\n *\n * @param {String} timeZone - the time zone of this local time, can be an offset or IANA time zone\n * @param {Date|Number} [date] - the date with values representing the local time\n * @returns {Number} the time zone offset in milliseconds\n *\n * @example\n * const result = getTimezoneOffset('-07:00')\n * //=> -18000000 (-7 * 60 * 60 * 1000)\n * const result = getTimezoneOffset('Africa/Johannesburg')\n * //=> 7200000 (2 * 60 * 60 * 1000)\n * const result = getTimezoneOffset('America/New_York', new Date(2016, 0, 1))\n * //=> -18000000 (-5 * 60 * 60 * 1000)\n * const result = getTimezoneOffset('America/New_York', new Date(2016, 6, 1))\n * //=> -14400000 (-4 * 60 * 60 * 1000)\n */\nexport default function getTimezoneOffset(timeZone, date) {\n return -tzParseTimezone(timeZone, date)\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    \",{ moduleName: \"customer-site/components/highcharts/simple-chart/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport merge from 'deepmerge';\n\nimport './_style.scss';\nimport type { Options, ASTNode } from 'highcharts';\nimport type Highcharts from 'highcharts/es-modules/masters/highcharts.src';\n\n/**\n * Refer to the custom theme set up in the component's stylesheet for the underlying color associated\n * with the given index.\n *\n * @see https://api.highcharts.com/highcharts/plotOptions.series.colorIndex for more details.\n */\nexport enum Color {\n AccentOrange = 0,\n AccentLime = 1,\n AccentBlue = 2,\n AccentYellow = 3,\n AccentPink = 4,\n AccentCyanBlue = 5,\n AccentPurple = 6,\n AccentGreenCyan = 7,\n AccentRed = 8,\n Gray80 = 9\n}\n\nexport type Chart = { highchartsOptions: Options };\n\nexport interface HighchartsSignature {\n Args: {\n chart: Chart;\n onHighchartsImported?: () => Promise;\n useAdcBranding?: boolean;\n };\n}\n\nexport default class HighchartsSimpleChart extends Component {\n /**\n * Enable `styledMode` for Highcharts in order to use the custom\n * theme defined in this component's styling.\n *\n * @see https://www.highcharts.com/docs/chart-design-and-style/custom-themes-in-styled-mode\n */\n get brandedChart(): Chart {\n const defs: { [key: string]: ASTNode } = {};\n for (let i = 0; i < 10; i++) {\n defs['gradient' + i] = {\n tagName: 'linearGradient',\n attributes: {\n id: 'gradient-' + i,\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 1\n },\n children: [\n {\n tagName: 'stop',\n attributes: { offset: 0 }\n },\n {\n tagName: 'stop',\n attributes: { offset: 1 }\n }\n ]\n };\n }\n\n return merge(\n {\n highchartsOptions: {\n chart: {\n styledMode: true\n },\n defs\n }\n },\n {\n highchartsOptions: this.args.chart.highchartsOptions\n }\n );\n }\n\n /**\n * The chart options to pass to the `draw-chart` modifier.\n */\n get chart(): Chart {\n return merge(\n {\n highchartsOptions: {\n chart: {\n /**\n * By default, Highcharts will throw a warning if you do not import the accessibility\n * module AND you do not explicitly specify this option in the chart options.\n */\n accessibility: {\n enabled: false\n }\n }\n }\n },\n {\n highchartsOptions: this.useAdcBranding\n ? this.brandedChart.highchartsOptions\n : this.args.chart.highchartsOptions\n }\n );\n }\n\n get highcharts(): Promise {\n return import('highcharts/es-modules/masters/highcharts.src').then((module) => {\n return (this.args.onHighchartsImported?.() ?? Promise.resolve()).then(() => {\n return module.default;\n });\n });\n }\n\n /**\n * Whether we should use Highcharts' `styledMode` with the stylesheets provided by this component.\n */\n get useAdcBranding(): boolean {\n return this.args.useAdcBranding ?? true;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Highcharts::SimpleChart': typeof HighchartsSimpleChart;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{yield}}\\n
    \\n\",{ moduleName: \"customer-site/components/icons/circles/circle-fill/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface CircleFillSignature {\n Element: HTMLDivElement;\n Blocks: {\n default: [];\n };\n}\n\nconst IconCircleFill = templateOnlyComponent();\nexport default IconCircleFill;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Icons::Circles::CircleFill': typeof IconCircleFill;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/icons/circles/device-status/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { getSFGStateCSS } from 'customer-site/utils/sfg-devices';\nimport { getAccessPointStateCSS } from '../../../../utils/access-control-access-point';\nimport { getGarageStateCSS } from '../../../../utils/garages';\nimport { getGateStateCSS } from '../../../../utils/gates';\nimport { getLightStateCSS, lightCustomIcons } from '../../../../utils/lights';\nimport { getLockStateCSS } from '../../../../utils/locks';\nimport { getMpersDeviceStateCSS } from '../../../../utils/mpers-devices';\nimport { getPartitionStateCSS } from '../../../../utils/partitions';\nimport { getSensorStateCSS, getNoiseSensorStateCSS } from '../../../../utils/sensors';\nimport { getShadeStateCSS } from '../../../../utils/shades';\nimport { getSumpPumpStateCSS } from '../../../../utils/sump-pumps';\nimport { getSwitchStateCSS } from '../../../../utils/switch';\nimport { getThermostatStateCSS } from '../../../../utils/thermostats';\nimport { getWaterMeterStateCSS } from '../../../../utils/water-meters';\nimport { getWaterSensorStateCSS } from '../../../../utils/water-sensors';\nimport { getWaterValveStateCSS } from '../../../../utils/water-valves';\n\nimport './_style.scss';\nimport type { CircleIconSignature } from '@adc/ui-components/components/circle-icon';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type BaseManagedDevice from 'customer-site/models/devices/base-managed-device';\nimport type WaterMeter from 'customer-site/models/devices/water-meter';\n\ntype CircleIconArgs = CircleIconSignature['Args'];\n\nexport interface DeviceStatusIconSignature {\n Element: CircleIconSignature['Element'];\n Args: Pick & {\n useHd?: boolean;\n device?: DeviceModel;\n state?: number;\n iconType: string;\n iconState?: string;\n inListView?: boolean;\n css?: string;\n };\n}\n\n// BaseManagedDevice extends BaseDevice so I'm not sure why this is necessary\n// but otherwise there's a glint error.\ntype DeviceModel = (BaseDevice | BaseManagedDevice) & {\n pairedWaterMeter?: WaterMeter;\n managedDeviceIcon?: string;\n getStateIcon?: (colored: boolean) => string;\n temperatureStateIcon?: string;\n uniqueSensorIconType?: string;\n};\n\n// ICON constants.\nexport const ICON_GARAGE = 'garage';\nexport const ICON_LOCK = 'lock';\nexport const ICON_DOOR = 'access-control-access-point-device';\nexport const ICON_ACCESS_CONTROL = 'user-control';\nexport const ICON_PARTITION = 'partition';\nexport const ICON_SYSTEM = 'system';\nexport const ICON_SENSOR = 'sensor';\nexport const ICON_WATER_SENSOR = 'water-sensor';\nexport const ICON_WATER_VALVE = 'water-valve';\nexport const ICON_SUMP_PUMP = 'sump-pump';\nexport const ICON_WATER_METER = 'water-meter';\nexport const ICON_LIGHT = 'light';\nexport const ICON_THERMOSTAT = 'thermostat';\nexport const ICON_TEMPERATURE = 'temperature';\nexport const ICON_REMOTE_TEMPERATURE = 'remote-temperature';\nexport const ICON_SHADES = 'shade';\nexport const ICON_GATE = 'gate';\nexport const ICON_SWITCH = 'switch';\nexport const ICON_SWITCH_ON = 'switch-on';\nexport const ICON_NOISE_SENSOR = 'noise-sensor';\nexport const ICON_MPERS_DEVICE = 'mpers-device';\nexport const ICON_ADDL_ACCESS = 'additional-access';\nexport const ICON_FOG_DEVICE = 'fog-shield';\nexport const ICON_ALARM = 'alarm';\nexport const ICON_ELEVATOR = 'elevator';\n\n// State constants.\nexport const STATE_HIDDEN = 'hidden-status';\nexport const STATE_ON = 'on';\nexport const STATE_OFF = 'off';\nexport const STATE_OPEN = 'open';\nexport const STATE_CLOSED = 'closed';\n\n/**\n * @classdesc\n * Displays animated icons based on device state.\n */\nexport default class DeviceStatus extends Component {\n /**\n * Specify that icons should be HD\n */\n @computed('args.useHd')\n get useHd(): boolean {\n return this.args.useHd ?? true;\n }\n\n /**\n * Compute the icon name for a given device and state\n */\n @computed(\n 'args.{device,iconType,inListView,state,device.pairedWaterMeter.displayIssueIcon,device.activeState,device.css,device.temperatureStateIcon,device.uniqueSensorIconType}',\n 'useHd'\n )\n get computedIconName(): string {\n const { stateCSS } = this,\n { device, iconType } = this.args;\n\n // Is the icon loading?\n if (stateCSS === 'loading') {\n // If water meter, show generic icon\n // Otherwise, don't show\n if (iconType === ICON_WATER_METER) {\n return 'water-meter-idle-hd';\n }\n\n return '';\n }\n\n if (\n iconType === ICON_WATER_VALVE &&\n this.args.device &&\n this.args.device.pairedWaterMeter &&\n this.args.inListView\n ) {\n // There are three icons to potentially be displayed, icn-issue, icn-water-meter-closed-hd, icn-water-meter-normal-hd\n return this.args.device.pairedWaterMeter.displayIssueIcon\n ? 'issue'\n : `${ICON_WATER_METER}-${stateCSS == 'closed' ? 'closed' : 'normal'}-hd`;\n }\n\n if (iconType === ICON_THERMOSTAT) {\n if (isEmpty(device)) {\n return 'circle-x';\n }\n\n if (device?.managedDeviceIcon) {\n return device.managedDeviceIcon;\n }\n\n return device?.getStateIcon?.(true) ?? '';\n }\n\n if (iconType === ICON_TEMPERATURE) {\n // Temperatures card has thermostats and RTS\n return device ? get(device, 'temperatureStateIcon') ?? '' : '';\n }\n\n if (iconType === ICON_REMOTE_TEMPERATURE) {\n return iconType;\n }\n\n if (iconType === ICON_DOOR) {\n // Hidden status devices don't have a special icon.\n if (stateCSS == STATE_HIDDEN) {\n return `${ICON_ACCESS_CONTROL}-closed`;\n }\n\n return `${ICON_ACCESS_CONTROL}-${stateCSS}`;\n }\n\n if (iconType === ICON_ELEVATOR) {\n if (stateCSS == STATE_OPEN) {\n return `${ICON_ELEVATOR}-unlocked-hd`;\n }\n if (stateCSS == STATE_CLOSED) {\n return `${ICON_ELEVATOR}-locked-hd`;\n }\n // Hidden status devices don't have a special icon.\n if (stateCSS == STATE_HIDDEN) {\n return `${ICON_ELEVATOR}-locked-hd`;\n }\n\n return `${ICON_ELEVATOR}-${stateCSS}-hd`;\n }\n\n if (iconType === ICON_ADDL_ACCESS) {\n return `${ICON_ADDL_ACCESS}`;\n }\n\n if (iconType === ICON_SHADES) {\n return `${ICON_SHADES}-${stateCSS}`;\n }\n\n if (iconType === ICON_NOISE_SENSOR) {\n return `${ICON_NOISE_SENSOR}-${stateCSS}`;\n }\n\n if (iconType === ICON_PARTITION || iconType?.includes(ICON_SYSTEM)) {\n // Hidden status devices don't have a special icon.\n if (stateCSS == STATE_HIDDEN) {\n return `system`;\n }\n\n // Use \"system\".\n if (!this.useHd) {\n return `system-${stateCSS}`;\n }\n\n return `system-${stateCSS}-hd`;\n }\n\n if (iconType === ICON_SWITCH) {\n return `${ICON_SWITCH}-${stateCSS}`;\n }\n\n // Sensors require additional icon logic due to unique sensor icons\n if (iconType === ICON_SENSOR) {\n // Trouble sensors use generic issue and ok icons, determined by the state\n if (stateCSS === 'issue') {\n return 'issue';\n }\n\n if (stateCSS === 'ok') {\n return 'circle-check';\n }\n\n // If the sensor is a deviceType or in a role with a unique icon,\n // use the computed uniqueSensorIconType property\n const uniqueIconType = get(device, 'uniqueSensorIconType');\n if (uniqueIconType != null) {\n return `${uniqueIconType}-${stateCSS}`;\n }\n }\n\n if (iconType === ICON_MPERS_DEVICE) {\n return ICON_MPERS_DEVICE;\n }\n\n if (iconType === ICON_LOCK) {\n // Hidden status devices don't have a special icon.\n if (stateCSS == STATE_HIDDEN) {\n return `${ICON_LOCK}`;\n }\n }\n\n if (iconType === ICON_GARAGE) {\n // Hidden status devices don't have a special icon.\n if (stateCSS == STATE_HIDDEN) {\n return `${iconType}`;\n }\n }\n\n if (iconType === ICON_GATE) {\n // Hidden status devices don't have a special icon.\n if (stateCSS == STATE_HIDDEN) {\n return `${iconType}`;\n }\n }\n\n if (iconType === ICON_FOG_DEVICE) {\n // use default icon for unknown state.\n if (stateCSS === 'unknown') {\n return `${iconType}`;\n }\n return `${iconType}-${stateCSS}-hd`;\n }\n\n // Lights allow custom icons which don't showcase state.\n if (iconType != ICON_LIGHT && lightCustomIcons.includes(iconType)) {\n // Switch icons in \"offline\" or \"no state\" are displayed with the \"switch on\" icon.\n if (iconType == ICON_SWITCH_ON && (stateCSS == STATE_ON || stateCSS == STATE_OFF))\n return `${ICON_SWITCH}-${stateCSS}`;\n return `${iconType}`;\n }\n\n if (iconType == ICON_ALARM) {\n return iconType;\n }\n\n // Return icon type + state.\n if (!this.useHd) {\n return `${iconType}-${stateCSS}`;\n }\n\n return `${iconType}-${stateCSS}-hd`;\n }\n\n /**\n * The icon type specific CSS Class.\n */\n @computed('args.iconType')\n get deviceCSS(): string {\n const { iconType } = this.args;\n // Light custom icons should adhere to light specific CSS.\n if (lightCustomIcons.includes(iconType)) return `icon-light-status`;\n return iconType ? `icon-${iconType}-status` : '';\n }\n\n /**\n * Returns the CSS class to use for the current state.\n */\n @computed('args.{device,device.css,iconState,iconType,state}')\n get stateCSS(): string {\n const { iconState, iconType, device, state } = this.args;\n\n if (iconState) {\n return iconState;\n }\n\n // Do we have device model CSS?\n if (device?.css) {\n // Use that.\n return device.css;\n }\n\n // Get CSS function based on type.\n const fnStateCSS = {\n [ICON_GARAGE]: getGarageStateCSS,\n [ICON_LOCK]: getLockStateCSS,\n [ICON_DOOR]: getAccessPointStateCSS,\n [ICON_ELEVATOR]: getAccessPointStateCSS,\n [ICON_ADDL_ACCESS]: getAccessPointStateCSS,\n [ICON_PARTITION]: getPartitionStateCSS,\n [ICON_WATER_VALVE]: getWaterValveStateCSS,\n [ICON_SUMP_PUMP]: getSumpPumpStateCSS,\n [ICON_SENSOR]: getSensorStateCSS,\n [ICON_WATER_METER]: getWaterMeterStateCSS,\n [ICON_LIGHT]: getLightStateCSS,\n [ICON_WATER_SENSOR]: getWaterSensorStateCSS,\n [ICON_THERMOSTAT]: getThermostatStateCSS,\n [ICON_SHADES]: getShadeStateCSS,\n [ICON_GATE]: getGateStateCSS,\n [ICON_SWITCH]: getSwitchStateCSS,\n [ICON_NOISE_SENSOR]: getNoiseSensorStateCSS,\n [ICON_MPERS_DEVICE]: getMpersDeviceStateCSS,\n [ICON_FOG_DEVICE]: getSFGStateCSS\n }[iconType];\n\n // Do we have a type specific CSS function?\n if (fnStateCSS && state !== undefined) {\n // Return CSS function result for static state.\n return fnStateCSS(state);\n }\n\n // Nothing found.\n return '';\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Icons::Circles::DeviceStatus': typeof DeviceStatus;\n }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { transitionToCreateRule } from '../../../../utils/video/rule-transition';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Interstitial modal for suggesting new rule creation.\n */\nexport default class NewRulesModal extends Component {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n\n /**\n * Transitions to the indicated route, passing the query parameters.\n */\n @action transitionToCreateRule(routeID: number, queryParams: Record = {}): void {\n transitionToCreateRule(routeID, queryParams, this.contextManager);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    {{tc this \\'select\\'}}
    \\n\\n
      \\n {{#each @model.videoSchedules as |schedule|}}\\n
    • \\n \\n
      \\n
      {{schedule.name}}
      \\n
      {{schedule.actionText}}
      \\n
      \\n \\n \\n
    • \\n {{/each}}\\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/modals/automation/rules/new-video-schedule/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { action } from '@ember/object';\nimport { EmberVideoSelectSvrSchedule } from 'customer-site/enums/CustomerPageUrl';\nimport { intlPath } from '@adc/i18n/path';\nimport { SvrRecordingSchedule } from '../../../../../enums/RuleCatalogItemType';\nimport NewRules from '../new-rules';\n\nimport type RuleSuggestion from 'customer-site/models/automation/rules/rule-suggestion';\n\ninterface NewVideoScheduleSignature {\n Args: {\n model: {\n videoSchedules: RuleSuggestion[];\n };\n };\n}\n\n/**\n * @classdesc\n * New video schedule dialog.\n */\n@intlPath({ path: 'modals/automation/rules/new-video-schedule' })\nexport default class NewVideoSchedule extends NewRules {\n /**\n * Transitions to the create video schedule page.\n */\n @action createSchedule(videoSchedule: RuleSuggestion): void {\n if (videoSchedule.type === SvrRecordingSchedule) {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(EmberVideoSelectSvrSchedule);\n return;\n }\n\n this.transitionToCreateRule(videoSchedule.addEditRouteId, videoSchedule.addEditPageQueryParameters);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{yield}}\\n
    \\n\",{ moduleName: \"customer-site/components/modals/enterprise/groups/base-manage-groups-modal-wrapper/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { SimpleDialogSignature } from '@adc/ui-components/components/modals/dialog-modals/simple/simple-dialog';\n\nexport interface EnterpriseGroupsBaseManageGroupsModalWrapperSignature {\n Args: Pick;\n Blocks: {\n default: [];\n };\n}\n\nconst EnterpriseGroupsBaseManageGroupsModalWrapper =\n templateOnlyComponent();\nexport default EnterpriseGroupsBaseManageGroupsModalWrapper;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Enterprise::Groups::BaseManageGroupsModalWrapper': typeof EnterpriseGroupsBaseManageGroupsModalWrapper;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    \\n \\n
    \\n
    \\n

    {{tc this \\'description\\'}}

    \\n
    \\n
    \\n\\n\",{ moduleName: \"customer-site/components/modals/video/calibration-snapshot-info/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\n\nimport type { ModalButtonConfig } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * @classdesc\n * This is a modal for displaying information about Video Analytics Detection options\n */\n@intlPath({ path: 'modals/video/calibration-snapshot-info' })\nexport default class CalibrationSnapshotInfoModal extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * Configure the \"Done\" button to display in the modal footer.\n */\n get doneButton(): ModalButtonConfig[] {\n // Modal buttons automatically close the modal on-click, so we can just pass an empty function here\n return [getModalFooterButton(this.intl.t('generic.done'), () => {}, 'btn btn-primary')];\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Video::CalibrationSnapshotInfo': typeof CalibrationSnapshotInfoModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:header as |DialogHeader|>\\n \\n {{#if this.isDownloadActive}}\\n \\n {{/if}}\\n \\n \\n\\n <:default>\\n {{#unless this.isDownloadActive}}\\n
    \\n
    {{safe-html (tc this \\'selectedClips\\' value=@model.media.length) }}
    \\n\\n
    {{safe-html (tc this \\'totalSize\\' value=this.totalMediaSizeInMB) }}
    \\n
    \\n {{tc this \\'fileFormat\\'}}\\n \\n
    \\n\\n \\n
    \\n {{/unless}}\\n \\n\\n <:footer as |DialogFooter|>\\n {{#unless this.isDownloadActive}}\\n \\n {{/unless}}\\n \\n\\n\\n\",{ moduleName: \"customer-site/components/modals/video/download-options/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { alias, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { timeout, task } from 'ember-concurrency';\nimport DownloadOptionsModal from 'customer-site/components/modals/video/download-options/index';\nimport ENV from 'customer-site/config/environment';\nimport { POST, JSON_REQUEST } from '@adc/ajax/services/adc-ajax';\nimport { intlPath } from '@adc/i18n/path';\nimport { downloadFile } from '@adc/ui-components/utils/download-file';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport { Cell_download_default } from '../../../../enums/VideoClipFormat';\n\nimport './_style.scss';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type CookieManager from '@adc/app-infrastructure/services/cookie-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type DownloadFormat from '@adc/login-setup-addon/models/video/download-format';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type BaseMediaEvent from 'customer-site/models/video/base-media-event';\nimport type AjaxService from 'customer-site/services/ajax';\n\nconst { sitePrefix } = ENV,\n cookieName = 'skip_video_format_dialog';\n\ntype DownloadOptionsModel = {\n media: BaseMediaEvent[];\n formats: DownloadFormat[];\n closed: boolean;\n};\n\n/**\n * @classdesc\n * Media download options modal.\n */\n@intlPath({ path: 'modals/video/download-options' })\nexport default class DownloadOptions extends Component<{ model: DownloadOptionsModel }> {\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare cookieManager: CookieManager;\n @service declare modals: ModalService;\n\n /**\n * Indicates whether to save the selected format to the server.\n */\n shouldCacheFormat = false;\n\n /**\n * The currently selected download format ID.\n */\n selectedFormatId = Cell_download_default;\n\n /**\n * Current users profile model.\n */\n @alias('contextManager.identityModel.profile')\n declare profile: Profile;\n\n /**\n * The total size of media to be downloaded, rounded to 2 decimal places.\n */\n @computed('args.model.media.[]')\n get totalMediaSizeInMB(): string {\n return (this.args.model.media.mapBy('size').reduce((total, size) => total + size) / 1024).toFixed(2);\n }\n\n /**\n * The possible download format items.\n */\n @computed('args.model.formats', 'model.formats')\n get formatItems(): Array {\n return (this.args.model.formats ?? []).map(({ id: value, description: name }) =>\n DropdownSelectItem.create({ value, name })\n );\n }\n\n /**\n * Initiate the download of the selected files.\n */\n downloadMedia = task({ drop: true }, async (selectedFormatId: number) => {\n const { media } = this.args.model,\n ids = media.mapBy('id').join(','),\n token = new Date().toUTCString(),\n fnIsOpen = () => this.modals.modalIsOpen(DownloadOptionsModal);\n\n // Initiate download.\n downloadFile(\n `${sitePrefix}/Video/StreamVideo.ashx?${[\n 'download=true',\n `download_format_id=${selectedFormatId}`,\n `correlated_id=${ids}`,\n `download_progress_token=${token}`,\n media.length > 1 ? 'zipit=true' : undefined\n ]\n .compact()\n .join('&')}`\n );\n\n for (;;) {\n await timeout(750);\n\n const { success: status } = await this.ajax\n .request(\n `${sitePrefix}/WebServices/VideoWebService.asmx/GetDownloadProgressBarStatus`,\n JSON_REQUEST,\n {\n correlatedId: ids,\n tokenDownloadTime: token\n },\n POST\n )\n .then(({ d }) => JSON.parse(d));\n\n // Is modal closed OR is download complete (for any reason)?\n if (!fnIsOpen() || status > 2) {\n break;\n }\n }\n\n if (fnIsOpen()) {\n this.modals.closeModal();\n }\n });\n\n /**\n * Indicates files are downloading.\n */\n @reads('downloadMedia.isRunning')\n declare isDownloadActive: boolean;\n\n /**\n * Called when the user hits the save button.\n */\n @action save(): boolean {\n const { selectedFormatId } = this;\n\n // Should we cache the format value?\n if (this.shouldCacheFormat) {\n (async () => {\n // Set flag to skip formats next time.\n this.cookieManager.setEssentialCookie(cookieName, 'true');\n\n // Update server for new selected format.\n const { profile } = this,\n fmt = this.args.model.formats.findBy('id', String(selectedFormatId));\n\n if (fmt) {\n profile.videoDownloadFormat = fmt as unknown as AsyncBelongsTo;\n profile.save();\n }\n })();\n }\n\n // Begin download and return false so dialog doesn't close.\n this.downloadMedia.perform(selectedFormatId);\n return false;\n }\n\n /**\n * Initiates immediate download if the cookie is set AND we already know what format to use.\n */\n @action async initiateDownload(): Promise {\n // Do we know the download format to use?\n const format = await this.profile.videoDownloadFormat;\n if (format) {\n const id = (this.selectedFormatId = parseInt(format.id, 10));\n\n // Should we immediately download (if we can)?\n if (this.cookieManager.hasEssentialCookieTruthyValue(cookieName)) {\n this.downloadMedia.perform(id);\n }\n }\n }\n\n @action\n updateSelectedFormatId(value: string): void {\n this.selectedFormatId = Number(value);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Video::DownloadOptions': typeof DownloadOptions;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#each this.newsUpdates as |update|}}\\n
    \\n

    \\n {{#if update.isNew}}\\n {{t \\'generic.new\\'}}!\\n {{/if}}\\n {{update.title}} ({{update.dateModifiedString}})\\n

    \\n {{safe-html update.body}}\\n
    \\n{{/each}}\\n\",{ moduleName: \"customer-site/components/news-updates/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { set } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport './_style.scss';\n\n/**\n * @classdesc Gets the News and Updates items from the server and displays them.\n *\n * @class NewsUpdates\n * @extends Ember.Component\n * @memberof components.initial-setup\n */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/require-tagless-components\nexport default class NewsUpdates extends Component {\n @service ajax;\n\n classNames = ['news-updates'];\n\n /**\n * A collection of news updates.\n *\n * @type {Object}\n */\n newsUpdates;\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-hooks\n init() {\n super.init(...arguments);\n\n // Requests the news and updates object from the server.\n this.ajax.apiRequest('newsUpdates/newsUpdates', null, null, 'GET').then((newsUpdates) => {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (!isDestroyed(this)) {\n set(this, 'newsUpdates', newsUpdates.value);\n }\n });\n }\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-component-lifecycle-hooks\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n\n // Update when the current login last viewed the News and Updates page.\n this.ajax.apiRequest('newsUpdates/newsUpdates/updateLastViewTimestamp', null, null, 'POST');\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @dealer}}\\n \\n {{@dealer.supportPhone}}\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/service-appointments/header/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type Dealer from 'customer-site/models/dealers/dealer';\n\nexport interface ServiceAppointmentsHeaderSignature {\n Args: {\n dealer?: Dealer;\n };\n}\n\nconst ServiceAppointmentsHeader = templateOnlyComponent();\nexport default ServiceAppointmentsHeader;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ServiceAppointments::Header': typeof ServiceAppointmentsHeader;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n

    \\n \\n {{tc this (if @request.isAppointmentConfirmed \\'appointmentConfirmation\\' \\'appointmentPending\\')}}\\n

    \\n\\n
    \\n
    {{tc this \\'issues\\'}}
    \\n {{#each @request.requestedReasons as |reason|}}\\n
    \\n \\n {{reason.description}}\\n
    \\n {{/each}}\\n\\n
    {{tc this \\'times\\'}}
    \\n {{#each this.times as |timeframe|}}\\n
    \\n \\n \\n
    \\n {{/each}}\\n\\n {{#if @request.note}}\\n
    {{tc this \\'note\\'}}
    \\n
    {{@request.note}}
    \\n {{/if}}\\n
    \\n\\n\",{ moduleName: \"customer-site/components/service-appointments/appt-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { A } from '@ember/array';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type Store from '@ember-data/store';\nimport type Request from 'customer-site/models/service-appointments/request';\nimport type Timeframe from 'customer-site/models/service-appointments/timeframe';\n\nexport interface ServiceAppointmentsApptCardSignature {\n Args: {\n request: Request;\n };\n}\n\n@intlPath({ path: 'service-appointments/appt-card' })\nexport default class ServiceAppointmentsApptCard extends Component {\n @service declare store: Store;\n\n get times(): Timeframe[] {\n return A(this.args.request.requestedTimes.slice()).sortBy('localStartTime');\n }\n\n @action async deleteAppointment(): Promise {\n const m = await this.store.findRecord('service-appointments/request', this.args.request.id, {\n backgroundReload: false\n });\n m.destroyRecord();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ServiceAppointments::ApptCard': typeof ServiceAppointmentsApptCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n\\n {{#each this.sortedRequests as |request|}}\\n \\n {{else}}\\n \\n

    \\n {{tc this \\'noRequests\\'}}\\n

    \\n
    \\n {{/each}}\\n\\n \\n \\n \\n
    \\n\",{ moduleName: \"customer-site/components/service-appointments/request-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { A } from '@ember/array';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { EmberServiceAppointment } from 'customer-site/enums/CustomerPageUrl';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type DealerModel from 'customer-site/models/dealers/dealer';\nimport type RequestModel from 'customer-site/models/service-appointments/request';\n\nexport interface ServiceAppointmentsRequestListSignature {\n Args: {\n requests?: Awaited>;\n dealer?: Awaited>;\n };\n}\n\n@intlPath({ path: 'service-appointments/request-list' })\nexport default class ServiceAppointmentsRequestList extends Component {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n /**\n * The sorted list of requests to render.\n * if there are no appointments skip this page and go to the next\n */\n get sortedRequests(): RequestModel[] {\n return A(this.args.requests?.slice() ?? []).sortBy('id');\n }\n\n /**\n * Redirects to ember page for the newly created service appointment.\n */\n @action createAppointment(): void {\n this.navigation.transitionToRouteId(EmberServiceAppointment, 'new');\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'ServiceAppointments::RequestList': typeof ServiceAppointmentsRequestList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n

    {{this.notesCategoryTitle}}

    \\n
    \\n\\n \\n <:icon>\\n \\n \\n <:detail>\\n \\n {{#unless this.isPermanent}}\\n
    \\n \\n {{format-date-tz item.expirationDate month=\\\"2-digit\\\" day=\\\"2-digit\\\" year=\\\"numeric\\\"}}\\n
    \\n {{/unless}}\\n \\n <:value>\\n \\n \\n \\n
    \\n
    \",{ moduleName: \"customer-site/components/settings/monitoring-station/property-notes-simple-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type PropertyNote from 'customer-site/models/settings/monitoring-station/property-note';\nimport './_style.scss';\n\ninterface PropertyNotesSimpleListSignature {\n Args: {\n items: PropertyNote[];\n };\n}\n\nexport const PERMANENT_ICON = 'favorite';\nexport const TEMPORARY_ICON = 'sensor-bypass-time';\n\n@intlPath({ path: 'settings/monitoring-station/property-notes-simple-list' })\nexport default class SettingsMonitoringStationPropertyNotesSimpleList extends Component {\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n @service declare notificationManager: NotificationManager;\n\n /**\n * Check if 'args.items' contain PERMANENT property notes\n */\n @computed('args.items.expirationDate')\n get isPermanent(): boolean {\n return !this.args.items[0]?.expirationDate;\n }\n\n /**\n * Notes category icon\n */\n @computed('isPermanent')\n get notesCategoryIcon(): string {\n return this.isPermanent ? PERMANENT_ICON : TEMPORARY_ICON;\n }\n\n /**\n * Notes category title\n */\n @computed('isPermanent')\n get notesCategoryTitle(): string {\n return this.intl.tc(this, this.isPermanent ? 'permanent' : 'temporary');\n }\n\n /**\n * Method used to delete property note\n */\n private async deleteNote(noteID: string): Promise {\n await (await this.store.findRecord('settings/monitoring-station/property-note', noteID)).destroyRecord();\n this.notificationManager.addSuccess(this.intl.tc(this, 'noteDeleted'));\n }\n\n /**\n * Action to render Property Note Delete modal.\n */\n @action\n deletePropertyNote(noteID: string, noteName: string): void {\n this.modals.showDeleteModal({\n message: this.intl.tc(this, 'text', { noteName }),\n delete: () => this.deleteNote(noteID),\n title: this.intl.tc(this, 'title')\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Settings::MonitoringStation::PropertyNotesSimpleList': typeof SettingsMonitoringStationPropertyNotesSimpleList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{#if @isCard }}\\n \\n {{#if item.icon}}\\n \\n <:icon>\\n \\n \\n <:detail>\\n
    \\n

    {{item.description}}

    \\n

    {{item.details}}

    \\n
    \\n \\n <:value>\\n \\n \\n
    \\n {{/if}}\\n
    \\n {{else}}\\n {{#each this.discountData as |discount|}}\\n
    \\n \\n {{discount.text}}\\n
    \\n {{else}}\\n
    \\n \\n {{tc this \\'devicesNotFound\\'}}\\n
    \\n {{/each}}\\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/smart-coverage/discount-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport SmartCoverageDiscountType from 'customer-site/enums/SmartCoverageDiscountType';\nimport { intlPath } from '@adc/i18n/path';\nimport SimpleListItem from '@adc/ui-components/components/simple-list/list-item';\n\nimport type { SafeString } from '@ember/template';\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\ninterface SmartCoverageDiscountCardSignature {\n Args: {\n discounts: SmartCoverageDiscountType[];\n isCommercial: boolean;\n isCard: boolean;\n };\n}\n\ninterface DiscountData {\n icon: string;\n text: string;\n subtitle: string | SafeString;\n color?: Colors;\n}\n\ntype Colors = 'red' | 'navy' | 'cyanblue' | 'orange';\n\n@intlPath({ path: 'smart-coverage/discount-card' })\nexport default class SmartCoverageDiscountCard extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * Gets the items for the SimpleList component.\n */\n get items(): SimpleListItem<{ color?: Colors }>[] {\n return this.discountData.map(\n (discount) =>\n new SimpleListItem({\n icon: discount.icon,\n description: discount.text,\n details: discount.subtitle,\n css: 'card-padding',\n props: { color: discount.color }\n })\n );\n }\n\n /**\n * Map an incoming discount to discountData, which will show the correct icon, text, and color for the discount.\n */\n get discountData(): DiscountData[] {\n const { intl } = this;\n const { isCommercial } = this.args;\n const discountMapping: Partial> = {\n [SmartCoverageDiscountType.Security]: {\n icon: 'police',\n color: 'navy',\n text: intl.tc(this, 'security'),\n subtitle: isCommercial\n ? htmlSafe(intl.tc(this, 'securityDiscountAvailable'))\n : intl.tc(this, 'discountUnlocked')\n },\n [SmartCoverageDiscountType.Fire]: {\n icon: 'fire',\n color: 'red',\n text: intl.tc(this, 'fire'),\n subtitle: intl.tc(this, 'discountUnlocked')\n },\n [SmartCoverageDiscountType.WaterShutoffValve]: {\n icon: 'water-valve-closed',\n color: 'cyanblue',\n text: intl.tc(this, 'waterShutoffValve'),\n subtitle: isCommercial ? intl.tc(this, 'insuranceDiscountAvailable') : intl.tc(this, 'discountUnlocked')\n },\n [SmartCoverageDiscountType.ShooterDetectionSystem]: {\n icon: 'gunshot-detected',\n color: 'orange',\n text: intl.tc(this, 'shooterDetectionSystem'),\n subtitle: isCommercial\n ? htmlSafe(intl.tc(this, 'sdsDiscountAvaliable'))\n : intl.tc(this, 'discountUnlocked')\n },\n [SmartCoverageDiscountType.WaterSensor]: {\n icon: 'feature-water',\n color: 'cyanblue',\n text: intl.tc(this, 'waterSensor'),\n subtitle: intl.tc(this, 'discountUnlocked')\n }\n };\n return this.args.discounts.map((discount) => discountMapping[discount] ?? { icon: '', text: '', subtitle: '' });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'SmartCoverage::DiscountCard': typeof SmartCoverageDiscountCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/smart-coverage/redirect-notification-button/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { EmberSmartCoverageSelectProperties } from 'customer-site/enums/CustomerPageUrl';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\nimport type SourceOfCustomer from 'customer-site/enums/SourceOfCustomer';\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { ButtonSimpleSignature } from '@adc/ui-components/components/button/simple';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type Navigation from 'customer-site/services/navigation';\n\ninterface SmartCoverageRedirectNotificationButtonSignature {\n Element: ButtonSimpleSignature['Element'];\n Args: {\n selectedUnitIds: Record;\n customerSource: SourceOfCustomer;\n buttonText: ButtonSimpleSignature['Args']['text'];\n policyType?: SmartCoveragePolicyType;\n isPropertySelection?: boolean;\n buttonCss?: string;\n };\n}\n\n@intlPath({ path: 'smart-coverage/redirect-notification-button' })\nexport default class SmartCoverageRedirectNotificationButton extends Component {\n @service declare modals: ModalService;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare navigation: Navigation;\n @service declare notificationManager: NotificationManager;\n\n /**\n * If no property is selected, the button should be disabled\n */\n get isNoPropertySelected(): boolean {\n return !Object.values(this.args.selectedUnitIds).some(Boolean);\n }\n\n /**\n * The task to redirect users to the smart coverage page\n */\n redirect = task({ restartable: true }, async () => {\n const { ajax, notificationManager, modals, intl, args, navigation } = this;\n try {\n await timeout(3000);\n const response = await ajax.apiRequestForValue(\n 'smartCoverage/policies',\n undefined,\n {\n UnitIds: this.eligibleUnitIds,\n PolicyType: args.policyType,\n Source: args.customerSource\n },\n POST,\n true\n );\n navigation.transitionToUrlInNewBrowserWindow(response);\n } catch (e) {\n notificationManager.addError(intl.tc(this, 'errorRedirecting'));\n } finally {\n modals.closeModal();\n }\n });\n\n /**\n * Gets the unit ids that have been selected and/or are eligible.\n */\n get eligibleUnitIds(): string[] {\n return Object.keys(this.args.selectedUnitIds).filter((id) => this.args.selectedUnitIds[id]);\n }\n\n /**\n * Generates modal popup and starts the execution of redirect task.\n */\n @action\n async getQuoteBtnClick(): Promise {\n const { modals, redirect, navigation, intl, args } = this;\n // If the user has 1 eligible property, or the user is on the select-properties page, open modal and initiate redirect task.\n if ((!args.isPropertySelection && this.eligibleUnitIds.length === 1) || args.isPropertySelection) {\n modals.showInfoModal(\n {\n css: 'smart-coverage-info-modal',\n title: '',\n info: intl.tc(this, 'leavingAppBody'),\n disableBackdropClose: false,\n disableHeaderClose: true,\n resizableOnMobile: true\n },\n () => {\n redirect.cancelAll(); // Cancel the task if the user closes the modal\n }\n );\n redirect.perform();\n }\n // The user has more than 1 eligible property, and are on the landing page, so we transition to select-properties page.\n else {\n navigation.transitionToRouteId(EmberSmartCoverageSelectProperties, {\n queryParams: {\n mktsrc: args.customerSource\n }\n });\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'SmartCoverage::RedirectNotificationButton': typeof SmartCoverageRedirectNotificationButton;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/timezones/timezone-selector/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, set, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { dropTask } from 'ember-concurrency';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\n\n/**\n * @classdesc\n * A simple dropdown select for viewing a list of supported timezones and setting the login's preferred one\n */\nexport default class TimezoneSelector extends Component {\n @service contextManager;\n @service ajax;\n\n constructor() {\n super(...arguments);\n\n this.getTimezoneList.perform();\n }\n\n /**\n * List of dropdown items for each timezone.\n *\n * @type {Array}\n */\n @tracked\n timezoneList = [];\n\n /**\n * Login's current preferred timezone.\n */\n @alias('contextManager.identityModel.preferredTimezone')\n selectedTimezone;\n\n /**\n * The initial value for the dropdown\n */\n @computed('selectedTimezone', 'timezoneList')\n get initialTimezone() {\n const selectedTz = this.selectedTimezone === 'UTC' ? 'GMT' : this.selectedTimezone;\n return isEmpty(this.timezoneList) ? undefined : selectedTz;\n }\n\n /**\n * Process the timezone list for use with the dropdown select component\n *\n * @returns {Array}\n */\n @computed('timezoneList', 'selectedTimezone')\n get timezoneDropdownItems() {\n return this.timezoneList.sortBy('sortOrder').map(({ intlId, desc }) =>\n DropdownSelectItem.create({\n name: desc,\n value: intlId,\n state: intlId === this.selectedTimezone ? SELECTED : UNSELECTED\n })\n );\n }\n\n /**\n * Fetch the timezone list.\n */\n @dropTask()\n *getTimezoneList() {\n const timezones = yield this.ajax.apiRequest('timezones/getList');\n this.timezoneList = timezones.value ?? [];\n }\n\n /**\n * Update the current timezone client side and make a call to set the database value\n *\n * @param timezone {String}\n */\n @action\n selectNewTimezone(timezone) {\n // Get the id for the new timezone to pass along to backend\n const newTimezone = this.timezoneList.findBy('intlId', timezone);\n\n if (newTimezone) {\n set(this.contextManager.identityModel, 'preferredTimezone', timezone);\n this.ajax.apiRequest(`api/timezones/setPreferred/${newTimezone.timezoneId}`, null, null, POST);\n }\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n
    \\n \\n\\n {{@title}}\\n
    \\n\\n
    \\n {{#if (has-block \\\"action-button\\\")}}\\n {{yield to=\\\"action-button\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
    \\n
    \\n\\n {{#if this.isExpanded}}\\n
    \\n {{yield}}\\n
    \\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/ui/actionable-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nimport './_style.scss';\nimport type { ExpandButtonSignature } from '@adc/ui-components/components/expand-button';\nimport type { InsetGroupSignature } from '@adc/ui-components/components/inset-group';\n\nexport interface UiActionableCardSignature {\n Element: InsetGroupSignature['Element'];\n Args: {\n icon: string;\n title: string;\n collapsible?: boolean;\n sectionExpanded?: boolean;\n direction?: ExpandButtonSignature['Args']['direction'];\n actionButton?: CallableFunction;\n transparentButton?: boolean;\n };\n Blocks: {\n default: [];\n 'action-button': [];\n };\n}\n\nexport default class UiActionableCard extends Component {\n @tracked\n isExpanded = true;\n\n get transparentButton(): boolean {\n return this.args.transparentButton ?? false;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::ActionableCard': typeof UiActionableCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{#if @icon}}\\n \\n {{/if}}\\n {{#if (and @header @text)}}\\n
    \\n

    {{@header}}

    \\n

    {{@text}}

    \\n
    \\n {{else if @text}}\\n {{@text}}\\n {{/if}}\\n
    \",{ moduleName: \"customer-site/components/ui/badge-label/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface UiBadgeLabelSignature {\n Element: HTMLDivElement;\n Args: {\n header?: string;\n text?: string;\n icon?: string;\n iconTitle?: string;\n noBackground?: boolean;\n };\n}\n\nconst UiBadgeLabel = templateOnlyComponent();\nexport default UiBadgeLabel;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::BadgeLabel': typeof UiBadgeLabel;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"customer-site/components/ui/blue-dot/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface UiBlueDotSignature {\n Args: {\n isPulsing?: boolean;\n };\n}\n\nconst UiBlueDot = templateOnlyComponent();\nexport default UiBlueDot;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::BlueDot': typeof UiBlueDot;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n {{#each this.gaugeArcs as |arc|}}\\n \\n \\n {{/each}}\\n {{#if @icon}}\\n \\n \\n {{else if @showValue}}\\n \\n {{@value}}\\n \\n {{#if @centerDescription}}\\n \\n {{@centerDescription}}\\n \\n {{/if}}\\n {{/if}}\\n \\n {{#if this.displayIndicatorKey}}\\n
    \\n
    \\n
    \\n
    {{@indicatorKey}}
    \\n
    \\n
    \\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/ui/circle-gauge/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed, action, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isNumber } from 'customer-site/utils/math-methods';\nimport { intlPath } from '@adc/i18n/path';\nimport { NONE, getAnimationCSS } from '@adc/ui-components/utils/animations';\n\nimport './_style.scss';\n\n/**\n * The width of the SVG.\n * A round number makes it easier to reason about relativistic math and percentages.\n * Users of this component can set the height/width of the component as they wish\n * without affecting the relative size values here (see note in ./_style.scss).\n */\nconst svgWidth = 100;\n\n/**\n * The height of the SVG.\n * A round number makes it easier to reason about relativistic math and percentages.\n * Users of this component can set the height/width of the component as they wish\n * without affecting the relative size values here (see note in ./_style.scss).\n */\nconst svgHeight = 100;\n\n/**\n * The width/height of the area containing the gauge elements (1:1).\n */\nconst gaugeAreaSide = 100;\n\n/**\n * The default width of the arc stroke.\n * Equal to 7% of the width of the gauge area.\n */\nconst strokeWidth = gaugeAreaSide * 0.07;\n\n/**\n * The radius of the circle-gauge circle elements.\n */\nconst radius = (gaugeAreaSide - strokeWidth) / 2;\n\n/**\n * The horizontal center of the gauge area.\n */\nconst centerX = gaugeAreaSide / 2;\n\n/**\n * The vertical center of the gauge area.\n */\nconst centerY = gaugeAreaSide / 2;\n\n/**\n * The circumference of the circle-gauge circle elements.\n */\nconst circumference = 2 * 3.14159 * radius;\n\n/**\n * The linear length of the full gauge arc.\n * A full gauge is equal to 3/4 of the circumference.\n */\nconst fullGauge = circumference * 0.75;\n\n/**\n * The dial range is anywhere between -135 degrees (0%) to 135 degrees (100%).\n */\nconst rotateDegrees = 135;\n\n/**\n * Returns a string containing a stroke and a gap value to make the circle-gauge appear to fill.\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n *\n * @param fillValue\n * @returns {String}\n */\nfunction getDasharray(fillValue) {\n return `${fillValue} ${circumference}`;\n}\n\n/**\n * @classdesc\n *\n * A 3/4 circle gauge display ranging from 0 to the provided ceiling value.\n */\n@intlPath({ path: 'ui.circle-gauge' })\nexport default class CircleGaugeComponent extends Component {\n @service locale;\n\n tagName = '';\n /**\n * The colour to be used for the low colour region of the gauge, defaulting to green.\n * Additional colour choices can be added to circle-gauge/_style.scss\n *\n * @type {String}\n */\n lowColor = 'green';\n\n /**\n * The colour to be used for the middle colour region of the gauge, defaulting to yellow.\n *\n * @type {String}\n */\n mediumColor = 'yellow';\n\n /**\n * The colour to be used for the high colour region of the gauge, defaulting to red.\n *\n * @type {String}\n */\n highColor = 'red';\n\n /**\n * The current animation state.\n *\n * @type {number}\n */\n animationState = NONE;\n\n @computed('showIndicatorDescription', 'indicatorValue')\n get displayIndicatorKey() {\n return this.showIndicatorDescription && this.indicatorValue != undefined;\n }\n\n /**\n * Binding for the SVG's `viewBox` attribute.\n *\n * @type {String}\n */\n viewBox = `0 0 ${svgWidth} ${svgHeight}`;\n\n /**\n * Accessor for the horizontal center of the SVG.\n *\n * @type {number}\n */\n centerX = centerX;\n\n /**\n * Computes the x-axis coordinate of the centre of the circle based on whether user's locale is ltr or rtl\n *\n * @type {number}\n */\n @computed('locale.isRtl')\n get arcCenterX() {\n return this.locale.isRtl ? -1 * centerX : centerX;\n }\n\n /**\n * Accessor for the vertical center of the SVG.\n *\n * @type {number}\n */\n centerY = centerY;\n\n /**\n * Accessor for the icon's y-offset, defaulting to the offset previously hardcoded in the template\n *\n * @type {String}\n */\n iconY = '25.5';\n\n /**\n * Accessor for the radius of the circle-gauge circle elements.\n *\n * @type {number}\n */\n arcRadius = radius;\n\n /**\n * Accessor for the gauge's degree range.\n *\n * @type {number}\n */\n rotateDegrees = rotateDegrees;\n\n /**\n * Returns an array of arcs used in the circle-gauge, with their expected property values.\n *\n * @type {Array<{classList: String, strokeDasharray: String, strokeWidth: number}>}\n */\n @computed(\n 'indicatorValue',\n 'fullDasharray',\n 'valueDasharray',\n 'indicationValueDasharray',\n 'colorStyle',\n 'indicatorDashOffset'\n )\n get gaugeArcs() {\n const {\n indicatorValue,\n fullDasharray,\n valueDasharray,\n indicationValueDasharray,\n colorStyle,\n indicatorDashOffset\n } = this;\n\n let gauges = [\n {\n classList: 'background-arc',\n strokeDasharray: fullDasharray,\n strokeOffset: 0,\n strokeWidth: strokeWidth\n },\n {\n classList: `inner-arc value-arc ${colorStyle}`,\n strokeDasharray: valueDasharray,\n strokeOffset: 0,\n strokeWidth: strokeWidth\n }\n ];\n\n if (indicatorValue) {\n gauges.push(\n {\n classList: 'background-arc',\n strokeDasharray: indicationValueDasharray,\n strokeOffset: indicatorDashOffset,\n strokeWidth: strokeWidth * 2\n },\n {\n classList: 'indicator-background-arc',\n strokeDasharray: indicationValueDasharray,\n strokeOffset: indicatorDashOffset,\n strokeWidth: strokeWidth * 1.8\n },\n {\n classList: `indicator-point-arc value-arc ${colorStyle}`,\n strokeDasharray: indicationValueDasharray,\n strokeOffset: indicatorDashOffset,\n strokeWidth: strokeWidth * 1.25\n }\n );\n }\n\n return gauges;\n }\n\n /**\n * Determines whether the calling code has passed data that will produce a valid circle-gauge.\n * Invalid data is null, undefined, or a non-numeric string.\n * We expect `lowColorMax` <= `mediumColorMax` <= `ceiling`.\n * `ceiling` must be > 0.\n *\n * @type {number}\n */\n @computed('value', 'lowColorMax', 'mediumColorMax', 'ceiling')\n get hasValidData() {\n const { value, lowColorMax, mediumColorMax, ceiling } = this;\n\n let hasNumericInput = isNumber(value) && isNumber(lowColorMax) && isNumber(mediumColorMax) && isNumber(ceiling);\n\n let hasValidOrdering = lowColorMax <= mediumColorMax <= ceiling;\n\n return hasNumericInput && hasValidOrdering && ceiling > 0;\n }\n\n /**\n * Computes the correct svg transform for the gauge, primarily dependent on the user's locale.\n *\n * @type {String}\n */\n @computed('locale.isRtl')\n get transform() {\n const { rotateDegrees, locale, centerX, centerY } = this;\n\n return locale.isRtl\n ? `rotate(${360 - rotateDegrees} ${centerX} ${centerY}) scale(-1, 1)`\n : `rotate(${rotateDegrees} ${centerX} ${centerY})`;\n }\n\n /**\n * Normalizes the value of `ceiling` (if invalid) to avoid unsafe arithmetic.\n * We display an `error-state` UI in the `didReceiveAttrs()` hook when `ceiling` is invalid.\n * `ceiling` must be > 0 to be valid.\n *\n * @type {number}\n */\n @computed('ceiling')\n get normalizedCeiling() {\n const { ceiling } = this;\n\n return ceiling > 0 ? ceiling : 1;\n }\n\n /**\n * Computes the fill value as a percentage of the ceiling.\n *\n * e.g. if value = 6 and ceiling = 24, then normalizedValue = 0.25,\n * and the gauge will be 25% full.\n *\n * @returns {number}\n */\n _normalizedValueHelper = function (normalizedCeiling, value) {\n // If value is \"falsy\", default to 0 to avoid unsafe arithmetic.\n value = parseFloat(value) || 0;\n\n // Ensure 0 <= value <= ceiling.\n value = Math.max(value, 0);\n value = Math.min(value, normalizedCeiling);\n\n return value / normalizedCeiling;\n };\n\n @computed('value', 'normalizedCeiling')\n get normalizedValue() {\n const { normalizedCeiling } = this;\n let { value } = this;\n\n return this._normalizedValueHelper(normalizedCeiling, value);\n }\n\n @computed('indicatorValue', 'normalizedCeiling')\n get normalizedIndicatorValue() {\n const { normalizedCeiling } = this;\n let { indicatorValue } = this;\n\n return this._normalizedValueHelper(normalizedCeiling, indicatorValue);\n }\n\n /**\n * Calculates the stroke length for the fill value as a percentage of the `fullGauge` length.\n *\n * @type {number}\n */\n @computed('normalizedValue')\n get valueDasharray() {\n return getDasharray(fullGauge * this.normalizedValue);\n }\n\n get indicationValueDasharray() {\n return getDasharray(0);\n }\n\n /**\n * Calculates the stroke offset for the point value as a percentage of the `fullGauge` length.\n *\n * @type {number}\n */\n @computed('normalizedIndicatorValue')\n get indicatorDashOffset() {\n return -(fullGauge * this.normalizedIndicatorValue);\n }\n\n /**\n * Returns a string containing a stroke and a gap value for the full circle-gauge.\n *\n * @type {String}\n */\n get fullDasharray() {\n return getDasharray(fullGauge);\n }\n\n /**\n * Returns the CSS class for the color region that `value` corresponds to.\n *\n * @type {String}\n */\n @computed('lowColor', 'lowColorMax', 'mediumColor', 'mediumColorMax', 'showHighColorFill', 'value')\n get colorStyle() {\n const { value, highColor } = this;\n if (this.showHighColorFill) {\n return highColor;\n }\n\n if (value < this.lowColorMax) {\n return this.lowColor;\n }\n\n if (value < this.mediumColorMax) {\n return this.mediumColor;\n }\n\n return highColor;\n }\n\n /**\n * The animation CSS class to show.\n *\n * @returns {String}\n */\n @computed('animationState')\n get animationCSS() {\n return getAnimationCSS(this.animationState);\n }\n\n /**\n * Show 'error state' styling when incoming data cannot produce a valid circle-gauge.\n */\n @action\n updateErrorState() {\n set(this, 'errorState', !this.hasValidData);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n \\n {{yield}}\\n
    \\n {{#if @name}}\\n \\n {{/if}}\\n
    \",{ moduleName: \"customer-site/components/ui/colored-icon/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { SvgSymbolSignature } from '@adc/svg-system/components/svg-symbol';\n\nexport interface UiColoredIconSignature {\n Element: HTMLDivElement;\n Args: {\n iconName: string;\n colorName?: SvgSymbolSignature['Args']['fillColor'];\n name?: string;\n colorJustIcon?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst UiColoredIcon = templateOnlyComponent();\nexport default UiColoredIcon;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::ColoredIcon': typeof UiColoredIcon;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
      \\n {{#each @items as |item index|}}\\n
    • \\n {{yield item index this.isTrapFocusActive this.updateCurrentIndex}}\\n
    • \\n {{/each}}\\n
    \\n\\n {{#each-in this.buttons as |type key|}}\\n \\n {{/each-in}}\\n
    \\n\",{ moduleName: \"customer-site/components/ui/horizontal-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { activateFocusTrap } from '@adc/ember-utils/utils/a11y';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed, action, set, setProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { schedule } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { isPresent } from '@ember/utils';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type LocaleService from '@adc/app-infrastructure/services/locale';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type AccessibilityService from '@adc/ui-components/services/accessibility';\n\ntype Page = { min: number; max: number; x: number };\ntype SlideDirection = 'left' | 'right';\n\n/**\n * Returns information about one \"page\" of the list.\n *\n * @param x The left position of this \"page\".\n * @param min The index of the first item in this \"page\".\n * @param max The index of the last item in this \"page\".\n */\nfunction getPage(x: number, min = x, max = min): Page {\n return { x, min, max };\n}\n\n/**\n * Calculates and returns the page positions.\n */\nfunction getComputedPages(this: HorizontalList, el: HTMLDivElement, scrollOffset = 0): null | Page[] {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n return null;\n }\n\n const { isRtl } = this,\n [elBox, ulBox] = [el, el.querySelector('ul')!].map((el) => el.getBoundingClientRect()),\n viewportStart = isRtl ? ulBox.right : ulBox.left,\n // Apply an offset to account for how far the list has been scrolled from its initial position.\n viewportWidth = isRtl\n ? viewportStart - scrollOffset - elBox.left\n : elBox.right - (viewportStart + scrollOffset),\n liElements = Array.from(el.querySelectorAll('li'));\n\n // Calculate the positions of each page.\n return liElements.reduce(\n (pages, li, idx) => {\n const { left, right } = li.getBoundingClientRect(),\n start = isRtl ? viewportStart - right : left - viewportStart,\n end = isRtl ? viewportStart - left : right - viewportStart,\n previousPage = pages.slice().pop();\n\n if (previousPage) {\n // Is the last edge of this item outside the viewport?\n if (end - previousPage.x > viewportWidth) {\n // Add page for this item.\n pages.push(getPage(start, idx));\n } else {\n // Add this index as the potential max item for this page.\n previousPage.max = idx;\n }\n }\n\n return pages;\n },\n [getPage(0)]\n );\n}\n\nexport interface HorizontalListSignature {\n Element: HTMLDivElement;\n Args: {\n items: T[];\n currentIndex?: number;\n isKeyboardInteractive?: boolean;\n obscureList?: boolean;\n };\n Blocks: {\n default: [T, number, HorizontalList['isTrapFocusActive'], HorizontalList['updateCurrentIndex']];\n };\n}\n\n/**\n * @classdesc\n * Horizontal list for paging between items.\n */\n@intlPath({ path: 'ui/horizontal-list' })\nexport default class HorizontalList extends Component> {\n @service declare locale: LocaleService;\n @service declare intl: ADCIntlService;\n @service declare accessibility: AccessibilityService;\n\n /**\n * The index of the currently selected item (via keyboard or passed in).\n */\n @tracked _currentIndex?: number;\n get currentIndex(): number {\n return this._currentIndex ?? this.args.currentIndex ?? 0;\n }\n set currentIndex(value: number | undefined) {\n this._currentIndex = value;\n }\n\n /**\n * An array of information about the \"pages\" of this list.\n */\n pages?: Page[];\n\n /**\n * The index of the currently visible page.\n */\n @tracked pageIndex = 0;\n\n /**\n * Focus trap options.\n */\n focusTrapOptions = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true\n };\n\n /**\n * Is the focus trap active.\n */\n @tracked isTrapFocusActive = false;\n\n /**\n * Indicates the the interface is right to left.\n */\n @alias('locale.isRtl')\n declare isRtl: boolean;\n\n /**\n * The current visible list page.\n */\n @computed('pages', 'pageIndex')\n get activePage(): Page {\n const { pages, pageIndex } = this;\n\n return (pages && pages[pageIndex]) || getPage(0);\n }\n\n /**\n * CSS Style for the list to set page position.\n */\n @computed('activePage.x', 'isRtl')\n get listTransformStyle(): ReturnType {\n return htmlSafe(`transform: translateX(${this.isRtl ? '' : '-'}${this.activePage.x}px)`);\n }\n\n /**\n * Information about which list scroll buttons to show.\n */\n @computed('pages', 'pageIndex', 'args.obscureList')\n get buttons(): { left?: string; right?: string } {\n const { pages, pageIndex } = this,\n { obscureList } = this.args,\n buttons = {} as { left?: string; right?: string };\n\n // Are there no pages yet OR are is the list obscured right now?\n if (!isPresent(pages) || obscureList) {\n // No buttons are visible.\n return buttons;\n }\n\n // Is there more than one page?\n if (pageIndex > 0) {\n buttons.left = 'Left';\n }\n\n // Is the active page NOT the last page?\n if (pages && isPresent(pages[pageIndex + 1])) {\n buttons.right = 'Right';\n }\n\n return buttons;\n }\n\n /**\n * Scroll list.\n */\n @action scroll(direction: SlideDirection): void {\n this.pageIndex = this.pageIndex + (direction === 'left' ? -1 : 1);\n }\n\n /**\n * Handles setting the state of the focus trap and resetting pageIndex if needed.\n */\n @action updateTrapFocusHandler(state: boolean): void {\n this.isTrapFocusActive = state;\n\n if (!state) {\n this.pageIndex = 0;\n }\n }\n\n /**\n * Called when a keyup event happens on the list element.\n */\n @action activateFocusTrap(event: KeyboardEvent & { target: HTMLUListElement }): void {\n const { target } = event;\n activateFocusTrap(event, target, 'collection', this.updateTrapFocusHandler, () =>\n target.querySelector(`li:nth-child(${this.activePage.min + 1})`)\n );\n }\n\n /**\n * Makes sure the page with the current selected index is visible.\n *\n * @param _ Ignored\n * @param {number} currentIndex The current selected index (updated via keyboard navigation or passed in).\n */\n @action ensureItemIsVisible(_: HTMLElement, [currentIndex]: [number]): void {\n const { pages } = this,\n page = pages?.find(({ min, max }) => min <= currentIndex && max >= currentIndex);\n\n if (pages && page) {\n this.pageIndex = pages.indexOf(page);\n }\n }\n\n /**\n * Updates the current index.\n *\n * @param currentIndex The current selected index (updated via keyboard navigation or passed in).\n */\n @action updateCurrentIndex(currentIndex: number): void {\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => set(this, 'currentIndex', currentIndex));\n }\n\n /**\n * Recalculates the item page positions.\n */\n @action updateListPagePositions(el: HTMLDivElement): void {\n const pages = getComputedPages.call(this, el);\n\n if (pages) {\n setProperties(this, {\n pages,\n pageIndex: 0\n });\n }\n }\n\n isFirstResize = false;\n\n /**\n * Called when the list is resized to recalculate page positions.\n */\n @action listResized(el: HTMLDivElement): void {\n if (!this.isFirstResize) {\n this.isFirstResize = true;\n return;\n }\n\n let { currentIndex } = this;\n const { activePage } = this,\n pages = getComputedPages.call(this, el, activePage.x);\n if (pages) {\n set(this, 'pages', pages);\n\n // Ensure the current index (or if N/A the first item on the current page) is visible.\n currentIndex =\n currentIndex >= activePage.min && currentIndex <= activePage.max ? currentIndex : activePage.min;\n this.ensureItemIsVisible(el, [currentIndex]);\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::HorizontalList': typeof HorizontalList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n {{#unless this.isMobile}}\\n \\n {{@tooltipText}}\\n \\n {{/unless}}\\n\",{ moduleName: \"customer-site/components/ui/icon-tooltip/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isEnterOrSpaceCode } from '@adc/ember-utils/utils/a11y';\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { modalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface UiIconTooltipSignature {\n Element: HTMLButtonElement;\n Args: {\n tooltipText: string;\n icon?: string;\n tooltipId?: string;\n };\n}\n\n/**\n * This component builds on the ToolTip component to standardize the UI for hovering over an icon to show more info.\n * Use this to display mobile-supported content instead of using the SvgSymbol \"title\" tag for tooltips on web.\n * On web, the tooltip appears on hover and pressing the space or enter key.\n * On mobile, an info dialog modal appears when you tap on the SvgSymbol.\n */\nexport default class UiIconTooltip extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Is the browser a mobile user agent?\n */\n @computed('isMobileApp')\n get isMobile(): boolean {\n return isMobileBrowser() || this.isMobileApp;\n }\n\n /**\n * Whether the tooltip that appears on hover is visible.\n * This should always be false when viewing on mobile.\n */\n @tracked\n isTooltipVisible = false;\n\n /**\n * If the enter or space key is pressed, toggle the tooltip's display.\n *\n * @param event Keyboard event.\n */\n @action\n handleKeyUp(event: KeyboardEvent): void {\n if (isEnterOrSpaceCode(event.code)) {\n this.isTooltipVisible = !this.isTooltipVisible;\n }\n }\n\n /**\n * Show an InfoDialog modal when the tooltip is clicked on mobile.\n */\n @action\n showInfoModal(): void {\n if (!this.isMobile) {\n return;\n }\n\n this.modals.showInfoModal({\n info: htmlSafe(this.args.tooltipText),\n title: '',\n disableHeaderClose: true,\n buttons: [modalFooterButton(this.intl.t('generic.dismiss'), () => {})],\n css: 'icon-tooltip-modal'\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::IconTooltip': typeof UiIconTooltip;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if this.showProgressIndicator}}\\n \\n {{/if}}\\n\\n {{#if this.errorState}}\\n

    {{this.errorState}}

    \\n {{/if}}\\n\\n {{yield}}\\n\\n\",{ moduleName: \"customer-site/components/ui/images/state-image/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed, action, set, setProperties } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * An image that will optionally show a progress spinner as the source loads, and an error message if loading failed.\n */\n@intlPath({ path: 'ui.images.state-image' })\nexport default class StateImage extends Component {\n tagName = '';\n\n @service intl;\n\n // region Passed properties\n\n /**\n * Optional error text to display if image loading fails.\n *\n * @type {string}\n */\n errorText = '';\n\n /**\n * The alt text of the image.\n *\n * @type {string}\n */\n altText = '';\n\n /**\n * If the error text should be centered.\n *\n * @type {string}\n */\n isErrorTextCentered = false;\n\n /**\n * Optional passed handler called when the image load is complete.\n */\n imageLoaded = () => {};\n\n /**\n * Optional passed handler called when the image load fails.\n */\n imageFailed = () => {};\n\n // endregion\n\n // region Component state\n\n /**\n * Indicates the image is currently loading.\n *\n * @type {boolean}\n */\n sourceIsLoading = true;\n\n /**\n * Indicates the image load has failed.\n *\n * @type {boolean}\n */\n loadHasFailed = false;\n\n // endregion\n\n // region Computed properties\n\n /**\n * The computed CSS class for this element.\n *\n * @type {String}\n */\n @computed('isSelectable', 'sourceIsLoading', 'loadHasFailed')\n get elementCss() {\n return htmlSafe(\n [\n 'ui-state-image',\n this.sourceIsLoading ? 'is-loading' : undefined,\n this.loadHasFailed ? 'failed' : undefined\n ]\n .compact()\n .join(' ')\n );\n }\n\n /**\n * Indicates we should show the loading indicator.\n *\n * @type {boolean}\n */\n @computed('loadHasFailed', 'sourceIsLoading')\n get showProgressIndicator() {\n // Has the load NOT failed AND is the image still loading?\n return !this.loadHasFailed && this.sourceIsLoading;\n }\n\n /**\n * The error message to show.\n *\n * @type {string}\n */\n @computed('loadHasFailed', 'sourceIsLoading', 'errorText')\n get errorState() {\n // Is the image loading OR has the image load NOT failed?\n if (!this.loadHasFailed || this.sourceIsLoading) {\n // No error to show.\n return '';\n }\n\n // Show passed message or default.\n return this.errorText || this.intl.tc(this, 'loadFailed');\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Updates state to show that image loading is complete.\n */\n @action\n imageLoadComplete() {\n set(this, 'sourceIsLoading', false);\n this.imageLoaded();\n }\n\n /**\n * Updates component state to show that image loading has failed.\n */\n @action\n imageLoadFailed() {\n setProperties(this, {\n sourceIsLoading: false,\n loadHasFailed: true\n });\n this.imageFailed();\n }\n\n /**\n * Checks the image.\n */\n @action\n checkImage() {\n // Is the image source a promise?\n if (this.imageSource?.then) {\n // Update image load failed on promise failure.\n this.imageSource.catch(() => this.imageLoadFailed());\n }\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if (and this.imageVisible @imageSource (not this.failed))}}\\n
    \\n \\n
    \\n {{/if}}\\n\\n {{#if (has-block)}}\\n
    \\n {{yield}}\\n
    \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/ui/images/stateless-image/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed, action, set } from '@ember/object';\nimport { htmlSafe } from '@ember/template';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * A simple, stateless, selectable image.\n */\nexport default class StatelessImage extends Component {\n tagName = '';\n\n /**\n * The image source URL to display.\n *\n * @type {string}\n */\n imageSource = '';\n\n /**\n * Indicates the image may be selected and should show the standard selected state.\n *\n * @type {boolean}\n */\n isSelectable = false;\n\n /**\n * Whether to show the entire image, or have the image overflow it's container.\n *\n * @type {boolean}\n */\n showEntireImage = false;\n\n /**\n * Whether to show the image.\n *\n * @type {boolean}\n */\n imageVisible = true;\n\n /**\n * Optional alt text for the image element.\n *\n * @type {string}\n */\n altText = '';\n\n /**\n * Optional CSS style string applied to the image element container.\n *\n * @type {string}\n */\n imageStyle = '';\n\n /**\n * Optional passed handler called when the image load is complete.\n */\n imageLoaded = () => {};\n\n /**\n * Optional passed handler called when the image load fails.\n */\n imageFailed = () => {};\n\n /**\n * Indicates the image loading failed, in which case we will hide the broken image.\n *\n * @type {boolean}\n */\n failed = false;\n\n /**\n * The computed CSS class for this element.\n *\n * @type {String}\n */\n @computed('isSelectable')\n get elementCss() {\n return htmlSafe(['ui-stateless-image', this.isSelectable ? 'is-selectable' : undefined].compact().join(' '));\n }\n\n /**\n * A sanitized version of the passed image style.\n *\n * @type {string}\n */\n @computed('imageStyle')\n get computedImageStyle() {\n return htmlSafe(this.imageStyle);\n }\n\n /**\n * Checks the image.\n */\n @action\n checkImage() {\n if (this.imageSource === '') {\n this.imageHasFailed();\n }\n }\n\n /**\n * Called when the image load is complete.\n */\n @action\n imageHasLoaded() {\n set(this, 'failed', false);\n this.imageLoaded();\n }\n\n /**\n * Called if image load has failed.\n */\n @action\n imageHasFailed() {\n set(this, 'failed', true);\n this.imageFailed();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n
    \\n
    \\n\\n {{#if @showTextValue}}\\n
    \\n
    \\n
    {{this.textValue}}
    \\n
    \\n
    \\n {{/if}}\\n
    \\n\\n\",{ moduleName: \"customer-site/components/ui/progress-bar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { htmlSafe } from '@ember/template';\n\nimport './_style.scss';\nimport type { SafeString } from 'handlebars';\n\nexport interface ProgressBarSignature {\n Args: {\n barColor: BarColor;\n barSize?: BarSize;\n bestThresholdValue?: number; // The threshold value at which the progress is considered \"best\".\n ceiling: number;\n goodThresholdValue?: number; // The threshold value at which the progress is considered \"good\".\n maxTextValue?: number;\n showTextValue?: boolean;\n value: number;\n };\n Element: HTMLDivElement;\n}\n\ntype BarColor = 'red' | 'yellow' | 'green' | 'blue' | 'orange';\nexport type BarSize = 'x-small' | 'small' | 'medium';\ntype CssThreshold = 'poor' | 'good' | 'best';\n\n/**\n * @classdesc\n * An animated progress bar.\n */\nexport default class ProgressBar extends Component {\n tagName = '';\n\n /**\n * CSS class added through bindings indicating the size (thickness).\n */\n @computed('args.barSize')\n get barSizeCss(): string {\n switch (this.args.barSize) {\n case 'x-small':\n case 'small':\n return `${this.args.barSize}-bar`;\n default:\n return '';\n }\n }\n\n /**\n * CSS class added through bindings indicating which color to set the progress bar.\n */\n @computed('args.barColor')\n get barColorCss(): string {\n switch (this.args.barColor) {\n case 'red':\n case 'yellow':\n case 'green':\n case 'blue':\n return `color-${this.args.barColor}`;\n default:\n return 'color-orange';\n }\n }\n\n // endregion\n\n // region computed properties\n\n /**\n * The computed progress categorization.\n */\n @computed('args.{bestThresholdValue,goodThresholdValue,value}')\n get cssThreshold(): CssThreshold {\n const { value, goodThresholdValue = value, bestThresholdValue = value } = this.args;\n\n if (value >= bestThresholdValue) {\n return 'best';\n }\n\n if (value >= goodThresholdValue) {\n return 'good';\n }\n\n return 'poor';\n }\n\n /**\n * The text value to display in the progress bar.\n */\n @computed('args.{maxTextValue,value}')\n get textValue(): string {\n const { args } = this,\n { ceiling, maxTextValue, value } = args,\n textValue = Math.min(value, ceiling);\n\n if (!maxTextValue) {\n return textValue.toString();\n }\n\n return textValue > maxTextValue ? `${maxTextValue}+` : textValue.toString();\n }\n\n /**\n * Style attribute value for the progress bar.\n */\n @computed('args.{ceiling,value}')\n get progressStyle(): SafeString {\n return htmlSafe(`transform: translateX(-${(1 - Math.min(this.args.value / this.args.ceiling, 1)) * 100}%);`);\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::ProgressBar': typeof ProgressBar;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n \\n \\n\\n {{#if this.loginContactAddressDescriptionText}}\\n

    {{this.loginContactAddressDescriptionText}}

    \\n {{/if}}\\n
    \\n\\n {{#if this.isPhone}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if (and this.isEmail this.permissions.canChangeEmailFormat)}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.isMobile}}\\n \\n \\n \\n\\n {{#unless this.isPointCentral}}\\n \\n \\n \\n {{/unless}}\\n {{/if}}\\n\\n {{#if (and this.permissions.canViewLinkLoginsAndUsersUI this.addressRolesStrings.length)}}\\n
      \\n {{#each this.addressRolesStrings as |role|}}\\n
    • {{role}}
    • \\n {{/each}}\\n
    \\n {{/if}}\\n
    \\n
    \\n\\n{{#unless this.isEnableHidden}}\\n
    \\n
    \\n {{!-- Not a huge fan of putting this in its own section but it looked much better this way --}}\\n \\n
    \\n
    \\n{{/unless}}\",{ moduleName: \"customer-site/components/users/item/edit-contact-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { assert } from '@ember/debug';\nimport { computed, action } from '@ember/object';\nimport { alias, equal, not, or, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { isEmpty } from '@ember/utils';\nimport { LoginPrimary, TwoFactorAuthentication } from 'customer-site/enums/ContactAddressRole';\nimport { HtmlAndText, TextOnly } from 'customer-site/enums/EmailSendingFormat';\nimport { Home, Mobile as PhoneMobile, Other, Work } from 'customer-site/enums/PhoneType';\nimport { getCarriersForSelectedCountry } from 'customer-site/utils/contact-addresses';\nimport { intlPath } from '@adc/i18n/path';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\n/** Collection of possible email formats.\n *\n * @type {Object.}\n *\n * @private\n * @static\n */\nconst EMAIL_FORMATS = {\n plainText: TextOnly,\n html: HtmlAndText\n};\n\n/**\n * Collection of possible email formats.\n *\n * @type {Object.}\n *\n * @private\n * @static\n */\nconst PHONE_TYPE_OPTIONS = {\n home: Home,\n work: Work,\n mobile: PhoneMobile,\n other: Other\n};\n\n/**\n * Translation path.\n *\n * @type {string}\n *\n * @private\n * @static\n */\nconst PATH = 'users.edit.contact-information.';\n\n/**\n * Path to the base translations.\n *\n * @type {String}\n *\n * @private\n * @static\n */\nconst baseResourcesLocation = 'classes.users.edit';\n\n/**\n * @classdesc\n * A component to edit a contact address.\n *\n * @class components.users.item.EditContactInformationComponent\n * @extends Ember.Component\n * @param {models.users.ContactAddress} The contact address to edit.\n * @param {models.users.BasePermissionsCollection} The permissions that determine the actions that are allowed on this contact address and user.\n */\n@intlPath({ path: 'users.item.edit-contact-information' })\nexport default class EditContactInformationComponent extends Component {\n @service contextManager;\n @service notificationManager;\n @service intl;\n\n /** @override */\n tagName = '';\n\n /** override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-component-lifecycle-hooks\n didReceiveAttrs() {\n super.didReceiveAttrs();\n\n assert(\n 'The contact address to edit must be passed to the edit contact info component.',\n this.contactAddress !== null\n );\n assert('Permissions must be passed to the edit contact info component.', this.permissions !== null);\n }\n\n /**\n * The contact address to edit.\n *\n * @type {models.users.ContactAddress}\n */\n contactAddress = null;\n\n /**\n * The permissions that determine the actions we are allowed to do on this contact address and user.\n *\n * @type {models.users.BasePermissionsCollection}\n */\n permissions = null;\n\n /**\n * Should we hide the 'Enable' button?\n *\n * @type {boolean}\n */\n isEnableHidden = false;\n\n /**\n * Can the address not be changed?\n *\n * @function\n * @returns {boolean}\n */\n @not('contactAddress.canBeEdited')\n isAddressReadOnly;\n\n /**\n * Is this a contact address for a primary user?\n *\n * @function\n * @returns {boolean}\n */\n @alias('contactAddress.user.isPrimary')\n isAddressOfPrimaryUser;\n\n /**\n * List of address roles as strings.\n *\n * NOTE: This is a temporary method for testing the initial Linked Logins and Users UI.\n *\n * @function\n * @returns {boolean}\n */\n @computed('contactAddress.addressRoles')\n get addressRolesStrings() {\n let addressRoleStrings = [];\n\n const addressRoles = this.contactAddress.addressRoles;\n\n if (addressRoles) {\n addressRoles.forEach((addressRole) => {\n switch (addressRole) {\n case LoginPrimary:\n addressRoleStrings.push(this.intl.tc(this, 'addressRoleLoginPrimary'));\n break;\n case TwoFactorAuthentication:\n addressRoleStrings.push(this.intl.tc(this, 'addressRoleTwoFactorAuthentication'));\n break;\n }\n });\n }\n\n return addressRoleStrings;\n }\n\n /**\n * The description to show under a contact address that is used by a login.\n *\n * @function\n * @returns {string}\n */\n @computed('contactAddress.addressRoles', 'isAddressReadOnly', 'isEmail', 'isMobile', 'isPhone')\n get loginContactAddressDescriptionText() {\n if (\n (!this.isAddressReadOnly && !this.contactAddress.addressRoles?.includes(TwoFactorAuthentication)) ||\n (!this.isPhone && !this.isEmail && !this.isMobile)\n ) {\n return undefined;\n }\n\n return this.intl.t(`${baseResourcesLocation}.loginContactAddressDescription`);\n }\n\n /**\n * Returns simplified path for the address type.\n *\n * @function\n * @returns {String}\n */\n @computed('contactAddress')\n get addressTypePath() {\n return this.contactAddress.getModelName().split('/').pop();\n }\n\n /**\n * Label text for the address part of contact address.\n *\n * @function\n * @returns {String}\n */\n @computed('addressTypePath')\n get addressLabel() {\n return this.intl.t(`${PATH}${camelize(`${this.addressTypePath}-label`)}`);\n }\n\n /**\n * Placeholder text for the address part of contact address.\n *\n * @function\n * @returns {String}\n */\n @computed('addressTypePath')\n get addressPlaceholder() {\n return this.intl.t(`${PATH}${camelize(`${this.addressTypePath}-placeholder`)}`);\n }\n\n /**\n * Is the contact address an email?\n *\n * @function\n * @returns {boolean}\n */\n @equal('contactAddress.addressType', ContactTypeEnum.Email)\n isEmail;\n\n /**\n * Is the contact address a mobile device (SMS)?\n *\n * @function\n * @returns {boolean}\n */\n @equal('contactAddress.addressType', ContactTypeEnum.Mobile)\n isMobile;\n\n /**\n * Is the contact address a voice phone?\n *\n * @function\n * @returns {boolean}\n */\n @equal('contactAddress.addressType', ContactTypeEnum.Phone)\n isPhone;\n\n /**\n * Is the contact address a phone number?\n *\n * @function\n * @returns {boolean}\n */\n @or('isMobile', 'isPhone')\n isPhoneNumber;\n\n // region Phone.\n\n /**\n * The list of phone type options.\n *\n * @function\n * @returns {Array.<{name: String, value: number}>}\n */\n @computed()\n get phoneTypes() {\n return Object.keys(PHONE_TYPE_OPTIONS).map((key) =>\n DropdownSelectItem.create({\n name: this.intl.t(`${PATH}${key}`),\n value: PHONE_TYPE_OPTIONS[key]\n })\n );\n }\n\n // endregion\n\n // region Email.\n\n /**\n * The list of email formats the user can select from.\n *\n * @function\n * @returns {Array.<{label: String, value: number}>}\n */\n @computed()\n get emailFormats() {\n return Object.keys(EMAIL_FORMATS).map((key) =>\n DropdownSelectItem.create({\n name: this.intl.t(`${PATH}${key}`),\n value: EMAIL_FORMATS[key]\n })\n );\n }\n\n // endregion\n\n // region SMS.\n\n /**\n * Gets a dictionary of countries each containing available carriers.\n *\n * @function\n * @returns {DS.PromiseArray}\n */\n @alias('permissions.countryMobileCarriers')\n countries;\n\n /**\n * The list of countries.\n */\n @computed('countries', 'countries.isFulfilled')\n get countryListItems() {\n if (!this.countries) {\n return [];\n }\n\n return this.countries.map((country) =>\n DropdownSelectItem.create({\n value: country.id,\n name: country.countryName\n })\n );\n }\n\n /**\n * List of carriers applicable for the selected country.\n *\n * @function\n * @returns {DS.PromiseArray}\n */\n @computed('contactAddress.country', 'countries', 'countries.isFulfilled')\n get carriers() {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-get, ember/classic-decorator-no-classic-methods\n return getCarriersForSelectedCountry(this.countries, this.get('contactAddress.country'));\n }\n\n /**\n * Should the carrier select be disabled?\n *\n * @function\n * @returns {boolean}\n */\n @computed('contactAddress.country', 'carriers', 'carriers.isFulfilled')\n get disableCarrierSelect() {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-get, ember/classic-decorator-no-classic-methods\n return !this.get('contactAddress.country') || isEmpty(this.carriers);\n }\n\n /**\n * Do we have the carrier lookup beta enrollment?\n * @type {boolean}\n */\n @reads('contextManager.identityModel.isPointCentral')\n isPointCentral;\n\n // endregion\n\n // region Actions\n\n /**\n * Updates properties when the country selection is changed.\n *\n * @param {String} country - The value of the option element corresponding to the newly selected country.\n */\n @action\n countryChanged(country) {\n // Set country and providerId, because the country changed.\n const selectedCountry = this.countries.findBy('id', country),\n carrierKeys = Object.keys(selectedCountry ? selectedCountry['carriers'] : {});\n\n // If user is Pointcentral we want to tell the backend the provider is unknown, this will trigger the backend to lookup the carrier.\n const defaultProvider = this.isPointCentral ? 'unknown_us' : carrierKeys[0];\n\n this.contactAddress.setProperties({\n country,\n // Set providerId to default to first in list, since the dropdown is setting it to that.\n providerId: carrierKeys.length ? defaultProvider : undefined\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if this.userIcon}}\\n \\n {{else}}\\n \\n {{@user.avatar.initials}}\\n \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/users/item/user-avatar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { Duress, StandardUser } from 'customer-site/enums/AccessPointUserType';\nimport { Unknown } from 'customer-site/enums/PointCentralUserType';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type ContextManagerService from 'customer-site/services/context-manager';\n\nexport interface UserAvatarComponentSignature {\n Element: HTMLDivElement;\n Args: {\n user?: BaseUser;\n noBackground?: boolean;\n forceShowIcon?: boolean;\n };\n}\n\n/**\n * @classdesc\n * The user avatar, could be a picture, initials or an icon.\n */\n@intlPath({ path: 'users/item/user-avatar' })\nexport default class UserAvatarComponent extends Component {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManagerService;\n\n /**\n * Is this an enterprise user and are we in a single system context?\n */\n @computed(\n 'contextManager.identityModel.isEnterprise',\n 'args.user.{isEditSupported,isEnterprise,isPointCentralResidentViewingSelf}'\n )\n get isEnterpriseUserInSingleSystemContext(): boolean {\n const { user } = this.args;\n\n // If the user is not an enterprise then they are on a location and if the user is an enterprise user then they are\n // part of a group which is not editable at the location level\n // @ts-expect-error Not all users passed in will have a isPointCentralResidentViewingSelf property, we need to change this to check the instanceof before we do that.\n if (!this.contextManager.identityModel.isEnterprise && !user?.isPointCentralResidentViewingSelf) {\n return !!user && get(user, 'isEnterprise');\n }\n\n // If user is not editable then the user exists at another level above the current context.\n return !!user && !get(user, 'isEditSupported');\n }\n\n /**\n * The title of the icon to display if a cursor is hovered above the user avatar.\n */\n @computed(\n 'isEnterpriseUserInSingleSystemContext',\n 'args.user.{deviceAccess.pointCentralUserType,deviceAccess.userType,userType}',\n 'args.forceShowIcon',\n 'userIcon',\n 'contextManager.isPointCentral'\n )\n get iconTitle(): string {\n const { intl } = this;\n\n //Return an empty string if we have no userIcon\n if (isEmpty(this.userIcon)) {\n return '';\n }\n\n // If forceShowIcon is enabled, it doesn't matter what level it's from. We will not display enterprise user.\n // If this is an enterprise user, and we are in a single system context, note that it's an enterprise user.\n if (!this.args.forceShowIcon && this.isEnterpriseUserInSingleSystemContext) {\n return intl.tc(this, 'enterpriseUser');\n }\n\n const { user } = this.args;\n\n if (user?.isDuress ?? false) {\n return intl.tc(this, `accessPointUserTypeDescription-${Duress}`);\n }\n\n const userType = user\n ? get(get(user, 'deviceAccess') ?? {}, 'resolvedUserType')\n : this.contextManager.isPointCentral\n ? Unknown\n : StandardUser;\n\n if (userType !== StandardUser && userType !== Unknown) {\n return intl.t(\n `components.users.user-attributes.user-attribute-list.pointCentralUserTypeDescription-${userType}`\n );\n }\n\n return '';\n }\n\n /**\n * The icon to display for the user avatar.\n */\n @computed('isEnterpriseUserInSingleSystemContext', 'args.{user.avatar.icon,forceShowIcon}')\n get userIcon(): string | undefined {\n // If forceShowIcon is enabled, it doesn't matter what level it's from. We will use the users avatar icon.\n // If this is an enterprise user, and we are in a single system context, we always show the business icon, so it's\n // clear that this is an enterprise user.\n if (!this.args.forceShowIcon && this.isEnterpriseUserInSingleSystemContext) {\n return 'business';\n }\n\n return this.args.user?.avatar.icon ?? '';\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::UserAvatar': typeof UserAvatarComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n\\n \\n\\n \\n
    \\n
    \\n {{this.displayName}}\\n
    \\n\\n {{#if this.accessSummaryBadge}}\\n
    \\n \\n
    \\n {{/if}}\\n
    \\n\\n {{yield}}\\n \\n\\n\",{ moduleName: \"customer-site/components/users/list/base-user-item/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport {\n EmberEnterpriseAccessControlUserPromoteUser,\n EmberAccessControlUserPromoteUser,\n EmberMergeUsersList,\n EmberEnterpriseMergeUsersList,\n EmberAccessControlMergeUsersList,\n EmberEnterpriseAccessControlMergeUsersList\n} from 'customer-site/enums/CustomerPageUrl';\nimport { NotificationsOnly } from 'customer-site/enums/PointCentralUserType';\nimport { Resident, Guest } from 'customer-site/enums/PointCentralUserType';\nimport AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport { intlPath } from '@adc/i18n/path';\nimport { ActionItem, EditActionItem, DeleteActionItem } from '@adc/ui-components/utils/action-item';\nimport { None } from '../../../../enums/AccessPointUserType';\n\nimport './_style.scss';\n\nconst MAX_GROUP_SIZE_FOR_ALL_ACCESS_MESSAGE = 50;\n\n/**\n * Deletes the specified user.\n *\n * @param {models.users.User} user\n * @param {ADCIntlService} intl We use this translation service to get translated strings.\n * @param {ModalsService} modals\n * @param {notificationManager} notificationManager\n * @param {BasePermissionsCollection} permissions contains permissions that may prevent deleting a user in certain cases\n * @param {() => Promise} [fnDelete] Optional function called after user delete.\n */\nexport function deleteUser(user, intl, modals, notificationManager, permissions, fnDelete) {\n (async () => {\n const userName = user.displayName ?? intl.t('generic.na'),\n fnGetTranslationValue = (translationKey, tokens) => {\n // Since this function is exported, we need to specify the absolute path for the translations here.\n return intl.t(`components.users.list.base-user-item.${translationKey}`, tokens);\n },\n accessPointCollectionsSummary = await user.deviceAccess?.get('accessPointCollectionsSummary'),\n // the three options for the delete confirmation message are the armed partitions, linked login, or default\n confirmDeleteKey = !isEmpty(accessPointCollectionsSummary?.selectedUnchangeablePartitionAccessPoints)\n ? 'confirmDeleteWithArmedPartitions'\n : user.loginId\n ? 'confirmDeleteWithLinkedLogin'\n : 'confirmDelete';\n // block deletion of AD Users\n if (user instanceof AccessControlUser && user.activeDirectoryFlag) {\n notificationManager.addError(fnGetTranslationValue('errorADUserDelete', { userName }));\n return;\n }\n\n modals.showConfirmationDialog(\n fnGetTranslationValue('deleteUserTitle'),\n fnGetTranslationValue(confirmDeleteKey, { userName }),\n {\n text: intl.t('generic.delete'),\n css: 'btn-color-danger',\n action: async () => {\n try {\n await user.destroyRecord();\n await fnDelete?.(user.id);\n notificationManager.addSuccess(fnGetTranslationValue('userDeleted', { userName }));\n } catch (e) {\n notificationManager.addError(fnGetTranslationValue('errorUserDelete', { userName }));\n }\n }\n }\n );\n })();\n}\n\n/**\n * Base user item to display in a users list. Contains a users name and initials\n *\n * NOTE: Please avoid loading the AccessPointCollectionsSummary model on this component for enterprise users since it will drastically impact performance.\n *\n * @class components.users.list.BaseUserItemComponent\n * @extends Ember.Component\n */\n@intlPath({ path: 'users.list.base-user-item' })\nexport default class BaseUserItemComponent extends Component {\n /** @override */\n tagName = '';\n\n @service notificationManager;\n @service modals;\n @service contextManager;\n @service identityManager;\n @service('users.share-user') shareUser;\n @service('users.pointcentral-share-user') pointCentralShareUser;\n @service media;\n @service intl;\n @service store;\n @service navigation;\n\n /**\n * The user model.\n *\n * @type {models.users.User}\n */\n user = null;\n\n /**\n * CSS classes that will be passed to the list-row component.\n *\n * @type {String}\n */\n classes = '';\n\n /**\n * @function\n * @returns {models.access-control.AccessControlPermissionsCollection}\n */\n permissions = null;\n\n /**\n * Information to display under the user's name instead of the standard access summary.\n *\n * @type {String | undefined}\n */\n extraInfo = undefined;\n\n /**\n * Are we in an enterprise context?\n *\n * @type {Boolean}\n */\n @alias('contextManager.isEnterprise')\n isEnterprise;\n\n /**\n * Are we in a PointCentral context?\n *\n * @type {Boolean}\n */\n @alias('contextManager.identityModel.isPointCentral')\n isPointCentral;\n\n /**\n * Are we using the mobile app?\n *\n * @type {Boolean}\n */\n @alias('identityManager.isMobileApp')\n isMobileApp;\n\n /**\n * The device access of the passed-in user.\n *\n * @type {models.users.access.DeviceAccess}\n */\n @alias('user.deviceAccess')\n deviceAccess;\n\n /**\n * Is this user a resident visitor?\n */\n @alias('user.isResidentVisitor')\n isResidentVisitor;\n\n /**\n * Determines whether we want to send an editUser action when this item is clicked anywhere.\n * Also helps us determine if the action buttons should be shown or not.\n *\n * @type {boolean}\n */\n @tracked\n editOnItemClick = true;\n\n @computed(\n 'deviceAccess.isAccessPaused',\n 'user.{isResidentVisitor,isPaused,activeDirectoryFlag,adDisabledOrDeleted}'\n )\n get pauseClass() {\n return (async () => {\n const deviceAccess = await this.deviceAccess;\n const user = await this.user;\n\n // Resident visitor contacts should not be paused\n if (user?.isResidentVisitor) {\n return '';\n }\n\n if (typeof deviceAccess !== 'undefined' && deviceAccess.isAccessPaused) {\n return 'is-paused';\n }\n\n if (user?.isPaused || (user?.activeDirectoryFlag && user?.adDisabledOrDeleted)) {\n return 'is-paused';\n }\n\n return '';\n })();\n }\n @computed('deviceAccess.{hasNoDeviceAccess,isAccessPaused,user}', 'user.{isPaused,lastPauseDate}')\n get pauseText() {\n return (async () => {\n const deviceAccess = await this.deviceAccess;\n const user = await this.user;\n\n if (typeof deviceAccess !== 'undefined') {\n if (deviceAccess.hasNoDeviceAccess || deviceAccess.isAccessPaused) {\n return this.intl.tc(this, 'pausedNoAccess');\n }\n } else {\n if (user.isPaused) {\n let lastPauseDate = this.intl.formatDateTz(user.lastPauseDate, {\n month: 'long',\n year: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n });\n return this.intl.tc(this, 'paused', { lastPauseDate });\n }\n }\n\n return '';\n })();\n }\n\n /**\n * The share user service to use for this component.\n *\n * @type {services.users.ShareUser}\n */\n @computed('isPointCentral')\n get shareUserService() {\n return this.isPointCentral ? this.pointCentralShareUser : this.shareUser;\n }\n\n /**\n * Icon and text to display in a badge or undefined if no badge should be shown\n *\n * The reason why we to separate how we get the access summary badge for PointCentral enterprise users is because having\n * the access point collections summary as a watched property causes it to load automatically and will greatly reduce\n * loading performance for enterprise PointCentral accounts.\n *\n * @type {Promise<{icon: String, text: String}> | {icon: String, text: String} | undefined}\n */\n @computed('accessSummaryBadgeEnhancedPerformance', 'accessSummaryBadgeNormal', 'shouldLoadAccessPointInformation')\n get accessSummaryBadge() {\n return this.shouldLoadAccessPointInformation\n ? this.accessSummaryBadgeNormal\n : this.accessSummaryBadgeEnhancedPerformance;\n }\n\n /**\n * Icon and text to display in a badge or undefined if no badge should be shown for a user when we want to enhance loading time\n * on the users list page.\n *\n * @type {Promise<{icon: String, text: String}> | {icon: String, text: String} | undefined}\n */\n @computed(\n 'user.{isDuress,isPrimary}',\n 'extraInfo',\n 'deviceAccess.{isAllAccessUser,userType,hasNoDeviceAccess,hasAllLocationAccess,temporarySchedule,weeklySchedule,temporarySchedule.description}',\n 'isEnterprise',\n 'media.isMobile',\n 'shouldLoadAccessPointInformation'\n )\n get accessSummaryBadgeEnhancedPerformance() {\n return this.getAccessSummaryBadge();\n }\n\n /**\n * Icon and text to display in a badge or undefined if no badge should be shown for a user.\n *\n * @type {Promise<{icon: String, text: String}> | {icon: String, text: String} | undefined}\n */\n @computed(\n 'user.{isDuress,isPrimary}',\n 'extraInfo',\n 'deviceAccess.accessPointCollectionsSummary.{hasAllDeviceAccess,isFulfilled}',\n 'deviceAccess.{isAllAccessUser,pointCentralUserType,userType,hasNoDeviceAccess,hasAllLocationAccess,temporarySchedule,weeklySchedule,temporarySchedule.description}',\n 'isEnterprise',\n 'media.isMobile',\n 'shouldLoadAccessPointInformation'\n )\n get accessSummaryBadgeNormal() {\n return this.getAccessSummaryBadge();\n }\n\n /**\n * Gets the access badge information for the user item.\n *\n * @type {Promise<{icon: String, text: String}> | {icon: String, text: String} | undefined}\n */\n getAccessSummaryBadge() {\n const { user, extraInfo, intl } = this;\n if (!user || isDestroyed(user) || user.isDuress) {\n return undefined;\n }\n\n if (user.isPanelMaster) {\n return {\n icon: 'favorite',\n text: intl.tc(this, 'master')\n };\n }\n\n if (user.isPrimary) {\n return {\n icon: 'favorite',\n text: intl.tc(this, 'primary')\n };\n }\n\n if (extraInfo) {\n return {\n icon: '',\n text: extraInfo\n };\n }\n\n return (async () => {\n const deviceAccess = await this.deviceAccess,\n { isEnterprise, isResidentVisitor } = this;\n\n let text = '',\n icon = '';\n\n if (isResidentVisitor) {\n text = intl.tc(\n this,\n this.identityManager.identityModel?.isPointCentralSTR ? 'homeOwnerVisitor' : 'residentVisitor'\n );\n } else if (isEnterprise === false && !deviceAccess.get('accessPointCollectionsSummary.isFulfilled')) {\n text = '';\n } else if (isEnterprise && (deviceAccess.isAllAccessUser || deviceAccess.hasExistingPlusFutureAccess)) {\n text = intl.tc(this, 'existingPlusFutureDevices');\n } else if (\n deviceAccess.userType === None ||\n deviceAccess.pointCentralUserType === NotificationsOnly ||\n deviceAccess.hasNoDeviceAccess\n ) {\n text = intl.t('generic.noAccess');\n icon = 'access-none';\n }\n // Loading the accessPointCollectionsSummary is very expensive for large enterprise groups, so don't load it in those cases.\n else if (\n this.shouldLoadAccessPointInformation &&\n deviceAccess.get('accessPointCollectionsSummary.hasAllDeviceAccess')\n ) {\n text = intl.t('generic.fullAccess');\n } else {\n text = intl.t(\n isEnterprise && !this.shouldLoadAccessPointInformation\n ? 'generic.devices.access'\n : 'generic.partialAccess'\n );\n }\n\n // For Temporary users, on mobile show the start and end dates instead of description\n if (this.media.isMobile && !deviceAccess.hasNoDeviceAccess && deviceAccess.hasTemporarySchedule) {\n text = deviceAccess.temporarySchedule.description;\n }\n\n return { icon, text };\n })();\n }\n\n /**\n * Whether we should show \"All Access\" and \"Partial Access\" or just \"Access\".\n * This can dramatically improve page load times for large groups.\n *\n * @type {boolean}\n */\n @computed('deviceAccess.totalAvailableUnitsCount', 'isEnterprise', 'isPointCentral')\n get shouldLoadAccessPointInformation() {\n // Always allow the all-access text on single-system.\n if (this.isEnterprise === false) {\n return true;\n }\n\n // Never show the all-access text for PointCentral.\n if (this.isPointCentral === true) {\n return false;\n }\n\n // For non-PC enterprise users, only allow the all-access text on small groups.\n return (this.deviceAccess?.get('totalUnitsAvailableCount') || 0) <= MAX_GROUP_SIZE_FOR_ALL_ACCESS_MESSAGE;\n }\n\n /**\n * Returns whether or not the user has been expired. Only checks expiration of non Access Control users.\n *\n * @type {boolean}\n */\n @computed('user.deviceAccess.{hasTemporarySchedule,temporarySchedule}')\n get isExpired() {\n const deviceAccess = this.user?.deviceAccess;\n if (!deviceAccess) {\n return false;\n }\n\n const { hasTemporarySchedule, temporarySchedule } = deviceAccess.getProperties(\n 'hasTemporarySchedule',\n 'temporarySchedule'\n );\n return hasTemporarySchedule && temporarySchedule.isExpired;\n }\n\n /**\n * Returns the collection of action items for this user.\n *\n * @returns {Array}\n */\n @action\n getActionItems() {\n const { user, intl, permissions } = this,\n isAccessControlUser = user instanceof AccessControlUser;\n\n if (!user || isDestroyed(user) || !this.editOnItemClick) {\n return [];\n }\n\n let anchorSelector = `div[id=\"${user.id}\"]`,\n deviceAccess = user.deviceAccess || [],\n { hasNoDeviceAccess, isAccessPaused, canPauseUnpause, pointCentralUserType } = deviceAccess.getProperties(\n 'hasNoDeviceAccess',\n 'isAccessPaused',\n 'canPauseUnpause',\n 'pointCentralUserType'\n );\n\n // only allow pausing if the user has credentials (for Access Control)\n canPauseUnpause = isAccessControlUser\n ? permissions.accessControlPausedContacts &&\n (user.accessCards.length > 0 || user.pinCodes.length > 0) &&\n !user.isPrimary &&\n !user.activeDirectoryFlag\n : canPauseUnpause && !this.isExpired;\n\n let isPaused = isAccessControlUser ? user.isPaused : isAccessPaused;\n\n // Show the option to share user code through the popup dialog for non-PC users and resident visitors\n const showNativeShareOption = !(isAccessControlUser || this.isPointCentral) || user.isResidentVisitor,\n showAllSharingOptions = this.shareUserService.showAllSharingOptions(this.user),\n shouldShowShareUserCodeButton = this.shareUserService.shouldShowShareUserCodeButton(user),\n canPromoteUser =\n !this.isMobileApp && isAccessControlUser && permissions.canPromoteUser && user.canShowPromoteUserOption,\n isGuestOrResident =\n this.isPointCentral && (pointCentralUserType == Resident || pointCentralUserType == Guest),\n canMergeUser = user.canBeMerged && this.canLoginMergeUser;\n return [\n DeleteActionItem.create({\n action: () =>\n deleteUser(user, intl, this.modals, this.notificationManager, permissions, (userId) =>\n this.afterUserDeleted?.(userId)\n ),\n disabled: !user.canBeDeleted\n }),\n\n EditActionItem.create({\n action: () => this.editUser(user)\n }),\n\n // Create other action items.\n ...[\n // Share user code.\n [\n () => this.shareUserService.shareUserCode(user, anchorSelector),\n !shouldShowShareUserCodeButton,\n showNativeShareOption,\n 'upload',\n 'components.users.list.base-user-item.share',\n 'components.users.list.base-user-item.share',\n 'components.users.list.base-user-item.share'\n ],\n // Share user code by text for resident visitors.\n [\n () => this.shareUserService.shareUserCodeSms(user),\n !showAllSharingOptions || !shouldShowShareUserCodeButton,\n showAllSharingOptions && !isGuestOrResident,\n 'sms',\n 'services.users.pointcentral-share-user.sendSmsPinCode',\n 'services.users.pointcentral-share-user.sendSmsPinCode',\n 'services.users.pointcentral-share-user.sendSmsPinCode'\n ],\n // Share new welcome text for PC residents\n [\n () => this.shareUserService.sendPointCentralWelcomeText(user),\n !showAllSharingOptions || !shouldShowShareUserCodeButton,\n showAllSharingOptions && isGuestOrResident,\n 'sms',\n 'services.users.pointcentral-share-user.sendSmsPinCode',\n 'services.users.pointcentral-share-user.sendSmsPinCode',\n 'services.users.pointcentral-share-user.sendSmsPinCode'\n ],\n // Share user code by email for resident visitors.\n [\n () => this.shareUserService.shareUserCodeEmail(user),\n !showAllSharingOptions || !shouldShowShareUserCodeButton,\n showAllSharingOptions,\n 'email',\n 'services.users.pointcentral-share-user.sendEmailPinCode',\n 'services.users.pointcentral-share-user.sendEmailPinCode',\n 'services.users.pointcentral-share-user.sendEmailPinCode'\n ],\n // Pause/unpause user.\n [\n () => this.pauseUnpauseUser(!isPaused),\n isAccessPaused ? false : hasNoDeviceAccess || false,\n canPauseUnpause,\n isPaused ? 'play' : 'video-pause',\n isPaused ? 'components.users.list.base-user-item.unpause' : 'generic.video.pause',\n isPaused ? 'components.users.list.base-user-item.unpause' : 'generic.video.pause',\n isPaused ? 'components.users.list.base-user-item.unpause' : 'generic.video.pause'\n ],\n // Promote user.\n [\n () => this.navigateToPromoteUser(user),\n false,\n canPromoteUser,\n 'arrow-up',\n 'generic.promote',\n 'generic.promote',\n 'generic.promote'\n ],\n // Merge users.\n [\n () => this.navigateToMergeUser(user),\n false,\n canMergeUser,\n 'feature-users',\n 'components.users.list.base-user-item.mergeTo',\n 'components.users.list.base-user-item.mergeTo',\n 'components.users.list.base-user-item.mergeTo'\n ]\n ].map(([action, disabled, visible, icon, iconTitle, name, text]) =>\n ActionItem.create({\n action,\n disabled,\n visible,\n icon,\n iconTitle: intl.t(iconTitle),\n name: intl.t(name),\n text: intl.t(text)\n })\n )\n ];\n }\n\n /**\n * Gets the name to display for the user.\n *\n * @type {String}\n */\n @computed(\n 'deviceAccess.{hasTemporarySchedule,isAccessPaused}',\n 'user.{deviceAccess,displayName}',\n 'isExpired',\n 'isPointCentral'\n )\n get displayName() {\n const { intl } = this,\n user = this.user || [],\n displayName = user.get('displayName'),\n deviceAccess = user.get('deviceAccess') || [],\n { hasTemporarySchedule, temporarySchedule } = deviceAccess.getProperties(\n 'hasTemporarySchedule',\n 'temporarySchedule'\n );\n\n // If a user's access has expired, display the user with the (Expired) tag.\n if (this.isExpired) {\n return intl.tc(this, 'accessExpired', { name: displayName });\n }\n\n // If a user's access is inactive, display the user with the (Inactive) tag.\n if (hasTemporarySchedule && temporarySchedule.isInactive) {\n if (this.isPointCentral) {\n return intl.tc(this, 'accessFuture', { name: displayName });\n }\n return intl.tc(this, 'accessInactive', { name: displayName });\n }\n\n // If the user is not fully loaded, display an empty string.\n return displayName || '';\n }\n\n /**\n * Pause or unpause this user's access.\n *\n * @function\n * @param {boolean} pause If true, pause this user. If false, unpause this user.\n */\n async pauseUnpauseUser(pause) {\n try {\n const { user, notificationManager } = this;\n\n if (!pause) {\n if (user instanceof AccessControlUser && user.activeDirectoryFlag && user.adDisabledOrDeleted) {\n notificationManager.addError(this.intl.t('users.index.adUnpauseFailure'));\n return;\n }\n }\n\n await user.pauseUnpauseUser(pause);\n notificationManager.addSuccess(\n this.intl.t(pause ? 'users.index.successfulPause' : 'users.index.successfulUnpause', {\n firstName: user.firstName,\n lastName: user.lastName\n })\n );\n user.reload();\n if (!(user instanceof AccessControlUser)) {\n this.deviceAccess.reload();\n }\n } catch {\n // The backend controller will return an error if this was not successful.\n }\n }\n\n async navigateToPromoteUser(user) {\n const response = await user.canPromoteUser();\n\n // If the user can be promote, navigate to the correct page.\n // Otherwise, display the error passed in the response.\n if (response.value.canPromoteUser === true) {\n let routeId = this.isEnterprise\n ? EmberEnterpriseAccessControlUserPromoteUser\n : EmberAccessControlUserPromoteUser;\n this.navigation.transitionToRouteId(routeId, user.id);\n } else {\n this.notificationManager.addError(response.value.errorReason);\n }\n }\n\n navigateToMergeUser(user) {\n const isAccessControl = user instanceof AccessControlUser;\n\n if (this.identityManager.isEnterprise) {\n if (isAccessControl) {\n this.navigation.transitionToRouteId(EmberEnterpriseAccessControlMergeUsersList, user.id);\n return;\n }\n\n this.navigation.transitionToRouteId(EmberEnterpriseMergeUsersList, user.id);\n return;\n }\n\n if (isAccessControl) {\n this.navigation.transitionToRouteId(EmberAccessControlMergeUsersList, user.id);\n return;\n }\n\n this.navigation.transitionToRouteId(EmberMergeUsersList, user.id);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.spinnerSize}}\\n
    \\n \\n
    \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/users/loading-spinner/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\n\nimport './style.scss';\nimport type { SpinnerSvgSignature } from '@adc/ui-components/components/spinner-svg';\n\nexport interface UsersLoadingSpinnerSignature {\n Element: HTMLDivElement;\n Args: {\n inFlight: boolean;\n loaded: number;\n total: number;\n };\n}\n\nenum SpinnerSize {\n Large,\n Medium,\n None\n}\n\nexport default class UsersLoadingSpinner extends Component {\n get size(): SpinnerSize {\n const { args } = this,\n { loaded } = args;\n\n if (args.inFlight) {\n return loaded === 0 ? SpinnerSize.Large : SpinnerSize.Medium;\n }\n\n if (loaded > 0 && loaded !== args.total) {\n return SpinnerSize.Medium;\n }\n\n return SpinnerSize.None;\n }\n\n get spinnerSize(): SpinnerSvgSignature['Args']['size'] {\n return {\n [SpinnerSize.Large]: 'large',\n [SpinnerSize.Medium]: 'medium',\n [SpinnerSize.None]: ''\n }[this.size] as SpinnerSvgSignature['Args']['size'];\n }\n\n /**\n * Indicates the spinner should be shown as an item at the bottom of the list.\n */\n get isItem(): boolean {\n return this.size === SpinnerSize.Medium;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::LoadingSpinner': typeof UsersLoadingSpinner;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @editor.dropdownActionItems}}\\n \\n \\n \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/video/clips/action-menu/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { MediaEditor } from 'customer-site/classes/video/clips/helpers/clip-management';\n\nexport interface VideoClipsActionMenuSignature {\n Args: {\n editor: MediaEditor;\n icon: string;\n };\n}\n\nconst VideoClipsActionMenu = templateOnlyComponent();\nexport default VideoClipsActionMenu;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::ActionMenu': typeof VideoClipsActionMenu;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n {{#if @showCondensed}}\\n \\n {{else}}\\n {{#each @actions as |button|}}\\n {{!-- @glint-expect-error: actions type is too broad, so it doesn\\'t have menuItems, please fix this. --}}\\n {{#if button.menuItems}}\\n \\n \\n \\n {{else}}\\n \\n {{/if}}\\n {{/each}}\\n {{/if}}\\n\\n {{#if @showPlayButton}}\\n \\n {{/if}}\\n
    \",{ moduleName: \"customer-site/components/video/clips/action-toolbar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { MediaAction, MediaEditor, ActionGroup } from 'customer-site/classes/video/clips/helpers/clip-management';\n\nexport interface VideoClipsActionToolbarSignature {\n Args: {\n actions?: (MediaAction | ActionGroup)[];\n editor?: MediaEditor;\n showPlayButton?: boolean;\n showCondensed?: boolean;\n };\n}\n\nconst VideoClipsActionToolbar = templateOnlyComponent();\nexport default VideoClipsActionToolbar;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::ActionToolbar': typeof VideoClipsActionToolbar;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @icon}}\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/video/clips/analytics-icon/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface VideoClipsAnalyticsIconSignature {\n Args: {\n icon?: string;\n };\n}\n\nconst VideoClipsAnalyticsIcon = templateOnlyComponent();\nexport default VideoClipsAnalyticsIcon;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::AnalyticsIcon': typeof VideoClipsAnalyticsIcon;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{#each @videos as |videoItem|}}\\n {{#if videoItem.isVideo}}\\n \\n {{#if (is-fulfilled videoItem.videoSource)}}\\n {{#if videoItem.isActive}}\\n \\n {{/if}}\\n {{/if}}\\n \\n {{else}}\\n {{#if (is-fulfilled videoItem.videoSource)}}\\n \\n {{/if}}\\n {{/if}}\\n {{/each}}\\n
    \\n\\n
    \\n
    \\n \\n\\n \\n\\n
    \\n\\n \\n
    \\n\\n
    \\n {{yield}}\\n
    \\n\\n \\n\\n
    \\n\\n \\n\\n
    \\n\\n\",{ moduleName: \"customer-site/components/video/clips/multi-player/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { addWeakListener, removeListener } from '@adc/ember-utils/utils/event-listeners';\nimport { get } from '@ember/object';\nimport { computed, action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { guidFor } from '@ember/object/internals';\nimport { inject as service } from '@ember/service';\nimport VideoEvent from 'customer-site/models/video/video-event';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\nimport ContainerObject from '../../../../utils/container-object';\nimport { isBrowserFullScreen, toggleFullScreen } from '../../../../utils/dom';\n\nimport './_style.scss';\nimport type CookieManager from '@adc/app-infrastructure/services/cookie-manager';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { MediaItem } from 'customer-site/classes/video/clips/helpers/clip-management';\nimport type { VideoItem } from '../video-modal/index';\n\nconst muteCookieName = 'saved_clips_mute';\n\ninterface MultiPlayerSignature {\n Args: {\n videos: VideoItem[];\n };\n Blocks: {\n default: [];\n };\n}\n\n/**\n * @classdesc\n * The play interface for a single playable media.\n *\n */\nexport class PlayableMedia extends ContainerObject {\n @service declare envSettings: EnvSettingsService;\n @service declare cookieManager: CookieManager;\n\n declare id: string;\n @tracked item: MediaItem;\n\n /**\n * @param {Object} host An ember application framework object.\n * @param {classes.video.clips.helpers.MediaItem} item The item to play\n * @param {boolean} isPlaying Indicates this media should be playing.\n * @param {boolean} isMuted Indicates this media should be muted.\n */\n constructor(host: unknown, item: MediaItem, isPlaying: boolean, isMuted?: boolean) {\n super(host);\n\n this.id = guidFor(this);\n this.item = item;\n this.isPlaying = isPlaying;\n this.isActive = isPlaying;\n this.isMuted = isMuted ?? this.cookieManager.hasEssentialCookieTruthyValue(muteCookieName);\n }\n\n /**\n * Whether the media should be available to download.\n *\n */\n @reads('item.canDownload')\n declare canDownload: boolean;\n\n /**\n * Whether the media can be viewed as picture in picture.\n *\n */\n @reads('item.canViewPictureInPicture')\n declare canViewPictureInPicture: boolean;\n\n /**\n * Indicates this media is currently playing.\n *\n */\n @tracked isPlaying = false;\n\n /**\n * Indicates the media is active and may play soon, so the video source should be loaded.\n *\n */\n @tracked isActive = false;\n\n /**\n * Indicates the media should be muted.\n *\n */\n @tracked isMuted = false;\n\n /**\n * The URL for the thumbnail of this media.\n *\n */\n @reads('item.model.thumbnail')\n declare thumbnail: string;\n\n /**\n * The camera aspect ratio.\n *\n */\n @reads('item.model.aspectRatio')\n declare aspectRatio: string;\n\n /**\n * The URL for the video source of this media item.\n *\n */\n @computed('item.model')\n get videoSource(): Promise {\n return this.item.model.getPlaybackUrl();\n }\n\n /**\n * Whether the media is a video (not an image).\n */\n @computed('item.model')\n get isVideo() {\n return this.item.model instanceof VideoEvent;\n }\n\n /**\n * Synchronize the video element playback state to match the state of this video item.\n */\n @action syncPlayState(video: HTMLVideoElement): void {\n if (this.isPlaying) {\n video.play();\n } else {\n video.pause();\n video.currentTime = (this.item.model as VideoEvent).timestampToStartClip || 0;\n }\n }\n\n /**\n * Skips the video player (if found in the DOM) back 30 seconds.\n */\n @action skipBack(): void {\n const video: HTMLVideoElement | null = document.querySelector(`#${this.id}`);\n if (video) {\n video.currentTime = Math.max(video.currentTime - 30, 0);\n }\n }\n\n /**\n * Skips the video player (if found in the DOM) forward 30 seconds.\n */\n @action skipForward(): void {\n const video: HTMLVideoElement | null = document.querySelector(`#${this.id}`);\n if (video) {\n const { duration } = video;\n if (!window.isNaN(duration)) {\n video.currentTime = Math.min(video.currentTime + 30, duration);\n }\n }\n }\n}\n\n/**\n * Plays the video in the collection at the specified index difference from the passed video.\n * @param videoItem The current video item.\n * @param indexDifference A negative index is before the videoitem, positive index is after.\n */\nfunction selectVideo(this: MultiClipPlayer, videoItem: VideoItem, indexDifference: number): void {\n const { videos } = this.args,\n videoToPlay = videos[videos.indexOf(videoItem) + indexDifference];\n\n if (videoToPlay) {\n videoItem.isPlaying = false;\n videoToPlay.isPlaying = true;\n }\n}\n\n/**\n * @classdesc\n * A video player for playing and editing multiple media items.\n */\n@intlPath({ path: 'video/clips/multi-player' })\nexport default class MultiClipPlayer extends Component {\n @service declare envSettings: EnvSettingsService;\n @service declare intl: ADCIntlService;\n @service declare cookieManager: CookieManager;\n\n evtHandles?: string[];\n\n /**\n * The current playback speed.\n *\n */\n @tracked playbackSpeed = 1;\n\n /**\n * Indicates the video player is currently full screen.\n *\n */\n @tracked isFullscreen = false;\n\n /**\n * Stateful information about the full screen button.\n *\n */\n get fullScreenButton(): { icon: string; text: string } {\n const { isFullscreen } = this;\n\n return {\n icon: isFullscreen ? 'screen-exit-full' : 'screen-fullscreen',\n text: this.intl.t(`generic.video.videoStreamingPlayers.${isFullscreen ? 'exitFullScreen' : 'fullScreen'}`)\n };\n }\n\n /**\n * The playback speed choices.\n *\n */\n @computed('playbackSpeed')\n get speeds(): DropdownSelectItem[] {\n return [0.5, 1, 2, 4, 8].map((value) =>\n DropdownSelectItem.create({\n name: this.intl.t('generic.speed', { value }),\n value: value.toString(),\n state: this.playbackSpeed === value ? SELECTED : UNSELECTED\n })\n );\n }\n\n /**\n * The VideoItem that should be currently playing.\n *\n */\n @computed('args.videos.@each.isPlaying')\n get currentVideo(): VideoItem | undefined {\n return this.args.videos.find((item) => get(item, 'isPlaying'));\n }\n\n /**\n * Should the \"skip forward\" button be enabled?\n */\n @computed('args.videos.length', 'currentVideo.{index,isVideo}')\n get canSkipForward(): boolean {\n return (\n !!this.currentVideo && (this.currentVideo.isVideo || this.currentVideo.index < this.args.videos.length - 1)\n );\n }\n\n /**\n * Should the \"skip back\" button be enabled?\n */\n @computed('currentVideo.{index,isVideo}')\n get canSkipBack(): boolean {\n return !!this.currentVideo && (this.currentVideo.isVideo || this.currentVideo.index > 0);\n }\n\n /**\n * Plays the passed video.\n */\n @action playVideo(selectedVideo: VideoItem): void {\n this.args.videos.setEach('isPlaying', false);\n selectedVideo.isPlaying = true;\n }\n\n /**\n * Changes the playback speed of the video HTML element.\n */\n @action adjustSpeed(video: HTMLVideoElement): void {\n video.playbackRate = this.playbackSpeed;\n }\n\n /**\n * Synchronizes clip play state and adjusts collection of loading clips.\n */\n @action syncVideoState(videoItem: VideoItem, video: HTMLVideoElement): void {\n // Is this the currently active\n if (videoItem.isPlaying) {\n const { videos } = this.args,\n index = videos.indexOf(videoItem);\n\n // Ensure that the two clips after the current clip are loaded and ready to play.\n videos.forEach((clip: VideoItem, idx: number) => (clip.isActive = idx >= index && idx <= index + 2));\n }\n\n const { timestampToStartClip } = videoItem.item.model as VideoEvent;\n if (timestampToStartClip) {\n video.currentTime = timestampToStartClip;\n }\n\n videoItem.syncPlayState(video);\n }\n\n /**\n * Updates the video playback speed.\n */\n @action changePlaybackSpeed(speed: string): void {\n this.playbackSpeed = Number(speed);\n }\n\n // region Events\n\n /**\n * Called when the video element is ready to play.\n */\n @action videoCanPlay(videoItem: VideoItem, evt: any): void {\n this.syncVideoState(videoItem, evt.target);\n }\n\n /**\n * Stop any playback streams.\n */\n @action stopStreams(videoItem: VideoItem, video: HTMLVideoElement): void {\n // Remove playing state to prevent the oncanplay event from playing video.\n videoItem.isPlaying = false;\n\n // This will pause the video and adjust its current time just in case the video already started playing.\n videoItem.syncPlayState(video);\n }\n\n /**\n * Updates video mute state for all videos.\n */\n @action updateMuteState(evt: Event & { target: HTMLVideoElement }): void {\n const isMuted = !!evt.target.muted;\n\n this.cookieManager.setEssentialCookie(muteCookieName, isMuted.toString());\n this.args.videos.setEach('isMuted', isMuted);\n }\n\n /**\n * Plays the previous video in the collection after the passed video.\n * @param videoItem The current videoItem.\n */\n @action selectPreviousVideo(videoItem: VideoItem): void {\n selectVideo.call(this, videoItem, -1);\n }\n\n /**\n * Plays the next video in the collection after the passed video.\n * @param videoItem The current videoItem.\n */\n @action selectNextVideo(videoItem: VideoItem): void {\n selectVideo.call(this, videoItem, 1);\n }\n\n /**\n * Called to toggle full screen on this component.\n */\n @action toggleFullscreen(): void {\n const switchToFullScreen = !isBrowserFullScreen();\n (async () =>\n await toggleFullScreen(\n switchToFullScreen,\n switchToFullScreen ? (document.querySelector(`#${guidFor(this)}`) as HTMLElement) : undefined\n ))();\n }\n\n /**\n * Called as the component element is inserted, to attach global event listeners.\n */\n @action setupListeners(): void {\n this.evtHandles = ['', 'moz', 'webkit', 'ms'].map((prefix) =>\n addWeakListener(\n this,\n document,\n `${prefix}fullscreenchange`,\n () => (this.isFullscreen = !!isBrowserFullScreen())\n )\n );\n }\n\n /**\n * Called before the component element is destroyed, to detach global event listeners.\n */\n @action tearDownListeners(): void {\n this.evtHandles?.forEach((id: string) => removeListener(id));\n }\n\n /**\n * Disables the right-click contextMenu if necessary.\n */\n @action contextMenuHandler(isContextMenuEnabled: boolean): boolean {\n // If the contextMenu isn't enabled, return false to prevent it from opening.\n return isContextMenuEnabled;\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::MultiPlayer': typeof MultiClipPlayer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n \\n {{#if @showDuration}}\\n \\n {{/if}}\\n
    \\n {{#if @mediaItem.stateIcons}}\\n
    \\n {{#each @mediaItem.stateIcons as |icon|}}\\n \\n {{/each}}\\n
    \\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/video/clips/saved-clip/info/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { EmberVisualVerificationFlagging, EmberVisualVerificationResponder } from 'customer-site/enums/CustomerPageUrl';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { MediaItem } from 'customer-site/classes/video/clips/helpers/clip-management';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface VideoClipsSavedClipInfoSignature {\n Args: {\n mediaItem: MediaItem;\n showDuration?: boolean;\n };\n}\n\nexport default class Info extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare identityModel: IdentityModel;\n\n @computed('args.mediaItem.model.timestamp', 'contextManager.identityModel.preferredTimezone')\n get time(): Promise {\n return (async () => {\n const { contextManager, intl, identityModel } = this;\n const timezone = (await contextManager.showPreferredTimezone)\n ? identityModel.preferredTimezone\n : intl.timeZone;\n const isOnVVorEE = contextManager.isCurrentRoute(\n EmberVisualVerificationFlagging,\n EmberVisualVerificationResponder\n );\n\n // Show date + time of day for VV, show just time of day for regular saved clips page.\n return intl.formatDateTz(\n this.args.mediaItem.model.timestamp,\n isOnVVorEE\n ? {\n format: 'shortDateTimeFormat',\n timeZone: timezone\n }\n : {\n hour: 'numeric',\n minute: '2-digit',\n timeZone: timezone\n }\n );\n })();\n }\n\n @computed('args.mediaItem.model.clipDurationMs')\n get clipDuration(): string {\n const { intl } = this,\n totalSeconds = Math.round(this.args.mediaItem.model.clipDurationMs! / 1000),\n minutes =\n Math.trunc(totalSeconds / 60).toString().length === 1\n ? `0${Math.trunc(totalSeconds / 60)}`\n : Math.trunc(totalSeconds / 60),\n seconds =\n Math.trunc(totalSeconds % 60).toString().length === 1\n ? `0${Math.trunc(totalSeconds % 60)}`\n : Math.trunc(totalSeconds % 60);\n\n return intl.t('generic.minutesSeconds', { minutes, seconds });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::SavedClip::Info': typeof Info;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- @glint-expect-error mediaItem doesn\\'t have a isEventDeleted property, please fix this type. --}}\\n{{#if @mediaItem.isEventDeleted}}\\n
    \\n
    \\n

    {{t \\'components.video.clips.saved-clip.deletedClip\\'}}

    \\n\\n \\n
    \\n
    \\n{{else}}\\n \\n \\n\\n {{yield}}\\n \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/video/clips/saved-clip/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { VideoClipsSavedClipInfoSignature } from './info/index';\n\nexport interface VideoClipsSavedClipSignature {\n Element: HTMLDivElement;\n Args: Pick;\n Blocks: {\n default: [];\n };\n}\n\nconst VideoClipsSavedClip = templateOnlyComponent();\nexport default VideoClipsSavedClip;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Clips::SavedClip': typeof VideoClipsSavedClip;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n <:header as |DialogHeader|>\\n \\n \\n \\n \\n <:default>\\n
    \\n \\n {{#if this.isVisualVerification}}\\n
    \\n
    \\n {{#if (and this.isOnLatestSession this.supportedFeatures.enableSD)}}\\n \\n {{/if}}\\n {{#if (and this.isOnLatestSession this.supportedFeatures.enableSVR)}}\\n \\n {{/if}}\\n
    \\n
    \\n {{#if this.ruleId}}\\n \\n {{/if}}\\n
    \\n
    \\n {{/if}}\\n\\n {{#if this.showCarousel}}\\n {{#if ( or (media \\'isMobile\\') (media \\'tabletPortrait\\'))}}\\n
    \\n {{#each this.videos as |videoItem|}}\\n \\n \\n {{t \\'components.video.clips.video-modal.nowPlaying\\'}}\\n
    \\n \\n {{/each}}\\n
    \\n {{else}}\\n
    \\n \\n \\n \\n {{t \\'components.video.clips.video-modal.nowPlaying\\'}}\\n
    \\n \\n \\n
    \\n {{/if}}\\n {{/if}}\\n \\n \\n \\n\\n\",{ moduleName: \"customer-site/components/video/clips/video-modal/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed, action } from '@ember/object';\nimport { gt, alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport ENV from 'customer-site/config/environment';\nimport { EmberVisualVerificationSD, EmberVisualVerificationSVR } from 'customer-site/enums/CustomerPageUrl';\nimport { PlayableMedia } from '../multi-player/index';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { MediaItem, VVClipItem } from 'customer-site/classes/video/clips/helpers/clip-management';\nimport type Rule from 'customer-site/models/automation/rules/rule';\nimport type PageFeature from 'customer-site/models/visual-verification/page-feature';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport const NotOperatorSite = 0,\n VisualVerificationOperatorSite = 1,\n EscalatedEventsOperatorSite = 2;\n\n/**\n * @classdesc\n * An object that represent the state of one video item.\n */\nexport class VideoItem extends PlayableMedia {\n @service declare intl: ADCIntlService;\n\n declare index: number;\n\n /**\n * @param host An ember application framework object.\n * @param item The video item to play\n * @param isPlaying Indicates this video item should be playing.\n * @param idx The index of this video item within the overall collection.\n */\n constructor(host: unknown, item: MediaItem, isPlaying: boolean, idx: number) {\n super(host, item, isPlaying, ENV.environment === 'test');\n\n this.index = idx;\n }\n\n /**\n * The video analytics icon for this video clip.\n */\n @alias('item.vaIcon')\n declare icon: string;\n\n /**\n * The title text for this video clip.\n */\n @computed('item.{cameraName,model.description,model.isScreenRecording}')\n get title(): Promise {\n return (async () => {\n const { item } = this,\n cameraName = item.model.isScreenRecording\n ? this.intl.t('components.video.clips.video-modal.screenRecording')\n : await item.cameraName;\n\n return this.intl.t('components.video.clips.video-modal.title', {\n cameraName,\n clipDescription: item.model.description\n });\n })();\n }\n}\n\n/**\n * @classdesc\n * A modal for playing multiple saved video clips.\n */\nexport default class VideoClipsModal extends Component {\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare navigation: NavigationService;\n\n tagName = '';\n\n declare model: {\n media: MediaItem[];\n selectedIndex: number;\n operatorSiteEnum: number;\n isVisualVerification: boolean;\n supportedFeatures: PageFeature | undefined;\n };\n\n /**\n * A resolved array of information about the video clips to play.\n */\n @computed('model.media')\n get videos(): Array {\n const { media, selectedIndex } = this.model;\n return media.map(\n (mediaItem: MediaItem, idx: number) => new VideoItem(this, mediaItem, idx === selectedIndex, idx)\n );\n }\n\n /**\n * Is the modal called from a Visual Verification page?\n */\n @alias('model.isVisualVerification')\n declare isVisualVerification: boolean;\n\n /**\n * Is the modal called from ther latest Visual Verification session?\n */\n @alias('model.isOnLatestSession')\n declare isOnLatestSession: boolean;\n\n /**\n * Enabled Visual Verification page features\n */\n @alias('model.supportedFeatures')\n declare supportedFeatures: PageFeature | undefined;\n\n /**\n * RuleId extracted from the vvEvent\n */\n @alias('currentVideo.item.vvEvent.ruleId')\n declare ruleId: string;\n\n /**\n * Indicates whether to show the carousel of other videos to play.\n */\n @gt('videos.length', 1)\n declare showCarousel: boolean;\n\n /**\n * Information about the video item currently playing.\n */\n @computed('videos.@each.isPlaying')\n get currentVideo(): VideoItem | undefined {\n return this.videos.find((item) => item.isPlaying);\n }\n\n /**\n * Action to retrieve rule object\n */\n @computed('currentVideo.item.vvEvent')\n get retrieveRuleItem(): Rule | object {\n const vvEvent = (this.currentVideo?.item as unknown as VVClipItem).vvEvent;\n return vvEvent.ruleId ? vvEvent.rule : {};\n }\n\n /**\n * Plays the passed video item.\n */\n @action playVideo(selectedVideo: VideoItem): void {\n const { ajax } = this,\n { operatorSiteEnum } = this.model,\n { id } = selectedVideo.item.model;\n\n if (operatorSiteEnum === VisualVerificationOperatorSite || operatorSiteEnum === EscalatedEventsOperatorSite) {\n ajax.apiRequest(`visualVerification/events/v-${id}/viewed`, undefined, null, 'POST');\n }\n\n this.videos.forEach((item) => (item.isPlaying = false));\n selectedVideo.isPlaying = true;\n }\n\n /**\n * Transitions to the visual verification's SD Timeline route.\n */\n @action\n transitionToSD(): void {\n this.navigation.transitionToRouteId(EmberVisualVerificationSD);\n }\n\n /**\n * Transitions to the visual verification's SVR Timeline route.\n */\n @action\n transitionToSVR(): void {\n this.navigation.transitionToRouteId(EmberVisualVerificationSVR);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n {{this.snapshotAltText}}\\n\\n
    \\n
    \\n {{yield (component \\'empty-container\\') to=\\'overlay\\'}}\\n
    \\n
    \\n
    \\n
    \\n{{yield (component \\'video/rules/draw-window/players/player-info\\'\\n displayStreamRestartButton=false) to=\\'player-info\\'}}\",{ moduleName: \"customer-site/components/video/rules/draw-window/players/snapshot/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\n\n@intlPath({ path: 'video/rules/draw-window/players/snapshot' })\nexport default class VideoRulesDrawWindowPlayersSnapshot extends Component {\n @service intl;\n\n /**\n * How often (in milliseconds) we will attempt to refresh the snapshot\n */\n get refreshRate() {\n return 1000;\n }\n\n /**\n * Alternate text for when the snapshot has problems displaying\n */\n @computed('args.camera.description')\n get snapshotAltText() {\n const cameraName = get(this.args, 'camera.description');\n return cameraName ? this.intl.t('generic.video.liveStreamCameraSnapshot', { cameraName }) : '';\n }\n\n /**\n * Will reload the snapshot image in the amount of milliseconds specified\n * @param milliseconds\n */\n @action\n async onReloadImage(milliseconds) {\n const snapshot = await get(this.args, 'camera.snapshot');\n snapshot.reloadSnapshotLater(milliseconds);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n
    \\n {{! If we are on the VSR privacy zones page, we\\'ll be displaying\\n the drawing instructions in an inline alert below the player.}}\\n {{#if (and this.isMobileBrowser (not @isVSR))}}\\n
    \\n {{#if this.displayMobileDrawingHeaderText}}\\n \\n {{/if}}\\n
    \\n \\n
    \\n
    \\n {{/if}}\\n
    \\n \\n {{#let\\n (if this.useSnapshots (component \\'video/rules/draw-window/players/snapshot\\') (component \\'video/rules/draw-window/players/analytics-live-view-player\\'))\\n as |PlayerComponent|\\n }}\\n \\n <:overlay as |Overlay|>\\n \\n {{! Return false on contextmenu to prevent the menu that pops up when you right click. }}\\n \\n {{! drawing-instructions go above the player on mobile }}\\n {{! If we are on the VSR privacy zones page, we\\'ll be displaying\\n the drawing instructions in an inline alert below the player.}}\\n {{#if (and this.shouldShowDrawingInstructionsOnCanvas (not @isVSR))}}\\n
    \\n \\n
    \\n {{/if}}\\n {{#unless this.allDrawingsEnabled}}\\n
    \\n {{/unless}}\\n \\n \\n <:player-info as |PlayerInfo|>\\n {{#unless @hidePlayerInfo}}\\n \\n {{/unless}}\\n \\n \\n {{/let}}\\n \\n {{#if (and @isVSR this.shouldDisplayDrawingInstructions)}}\\n \\n {{/if}}\\n {{#if this.supportsMultipleDrawings}}\\n \\n
    \\n
    \\n {{#if this.multipleDrawingsHeader}}\\n

    {{this.multipleDrawingsHeader}}

    \\n {{/if}}\\n {{#if @onToggleDrawingsEnabled}}\\n \\n \\n

    {{@toggleStatusDisabledText}}

    \\n \\n {{/if}}\\n
    \\n {{#if this.multipleDrawingsText}}\\n

    {{this.multipleDrawingsText}}

    \\n {{/if}}\\n
    \\n
    \\n {{#each this.selectedDrawingButtons as |drawingButton|}}\\n \\n \\n
    \\n \\n {{drawingButton.text}}\\n
    \\n \\n \\n
    \\n {{/each}}\\n
    \\n {{#unless this.allDrawingsEnabled}}\\n \\n {{/unless}}\\n
    \\n \\n \\n {{/if}}\\n
    \\n
    \\n\\n {{#if this.displaySpecificRuleSettings}}\\n
    \\n {{#if this.displayGroundZoneDurationOptions}}\\n
    \\n {{#if @useStoriesUI}}\\n
    \\n {{tc this \\'duration\\'}}\\n
    \\n {{else}}\\n
    \\n {{tc this \\'duration\\'}}\\n
    \\n {{/if}}\\n \\n
    \\n {{else if this.displayTripwireDirectionOptions}}\\n
    \\n {{#if @useStoriesUI}}\\n
    \\n {{tc this \\'direction\\'}}\\n
    \\n {{else}}\\n
    \\n {{tc this \\'direction\\'}}\\n
    \\n {{/if}}\\n\\n \\n\\n \\n
    \\n {{/if}}\\n
    \\n {{/if}}\\n \\n\",{ moduleName: \"customer-site/components/video/rules/draw-window/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { constrainRange } from '@adc/ember-utils/utils/math';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { action, computed } from '@ember/object';\nimport { and, equal, gt, or, reads } from '@ember/object/computed';\nimport { addListener, removeListener } from '@ember/object/events';\nimport { guidFor } from '@ember/object/internals';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { None, Line, CustomShape, Rectangle } from 'customer-site/enums/DrawShape';\nimport { AnalyticsRulesLearnMoreModalOpened } from 'customer-site/enums/TrackedEvent';\nimport { EVENT_CLEAR_SELECTED_DRAWING } from 'customer-site/services/video/draw-window-event-bus';\nimport { logEventIfHasNoOvRules } from 'customer-site/utils/video/rules-stats';\nimport { sentryWithScopeAndError } from '@adc/app-infrastructure/utils/sentry';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport { LeftToRight, RightToLeft, AnyDirection } from '../../../../enums/TripwireDirection';\nimport {\n MAXIMUM_NUMBER_OF_GROUND_ZONE_POINTS,\n MAXIMUM_NUMBER_OF_POINTS_FOR_BATTERY_ANALYTICS,\n MAXIMUM_NUMBER_OF_TRIPWIRE_POINTS,\n MINIMUM_NUMBER_OF_GROUND_ZONE_POINTS,\n MAXIMUM_NUMBER_OF_RECTANGLE_POINTS,\n ANALYTICS_POINT_SIZE,\n newPointValidation,\n pointValidation,\n shapeIntersectsWarningZonesValidation,\n arePointsClose,\n computeRectanglePoints\n} from '../../../../utils/analytics-shape-validation';\nimport {\n clearShape,\n normalize,\n denormalize,\n getMouseCoordinate,\n getDefaultAnalyticsShapePoints,\n moveShape,\n drawArrow,\n drawShape,\n drawSingleCornerPoint\n} from '../../../../utils/canvas';\nimport { isPointInShape } from '../../../../utils/math-methods';\n// This is only used as a type, but we can't import type for .js files.\n// eslint-disable-next-line no-unused-vars\nimport { Point } from '../../../../utils/math-methods';\n\nimport './_style.scss';\n\n// region Draw-Window Constant Values.\n\n/**\n * Default height and width for analytics video players and snapshots.\n *\n * @type {number}\n *\n * @private\n * @memberof video.rules.DrawWindow\n */\nconst DEFAULT_HEIGHT = 360,\n DEFAULT_WIDTH = 640;\n\n/**\n * The maximum number of pixels for the video player.\n *\n * @type {number}\n */\nconst MAX_NUM_PLAYER_PIXELS = 350000;\n\n/**\n * Colors used for video canvas drawings.\n *\n * @type {string}\n *\n * @private\n * @memberof video.rules.DrawWindow\n */\nconst LIGHT_TRANSPARENT_GREEN = 'rgba(0, 225, 0, 0.2)',\n DARK_GREEN = 'rgba(0, 225, 0, 0.8)',\n LIGHT_TRANSPARENT_BLUE = 'rgba(0, 0, 255, 0.2)',\n DARK_BLUE = 'rgba(0, 0, 255, 0.8)',\n LIGHT_TRANSPARENT_ORANGE = 'rgba(255, 165, 0, 0.2)',\n DARK_ORANGE = 'rgba(255, 165, 0, 0.8)';\n\n/**\n * The style objects we use when drawing on the canvas for different situations.\n *\n * @type {CanvasContextStyleValueType}\n *\n * @private\n * @memberof video.rules.DrawWindow\n */\nconst SHAPE_0_STYLE = { strokeStyle: DARK_GREEN, fillStyle: LIGHT_TRANSPARENT_GREEN },\n SHAPE_0_POINT_ARROW_STYLE = { strokeStyle: DARK_GREEN, fillStyle: DARK_GREEN },\n SHAPE_1_STYLE = { strokeStyle: DARK_BLUE, fillStyle: LIGHT_TRANSPARENT_BLUE },\n SHAPE_1_POINT_ARROW_STYLE = { strokeStyle: DARK_BLUE, fillStyle: DARK_BLUE },\n SHAPE_2_STYLE = { strokeStyle: DARK_ORANGE, fillStyle: LIGHT_TRANSPARENT_ORANGE },\n SHAPE_2_POINT_ARROW_STYLE = { strokeStyle: DARK_ORANGE, fillStyle: DARK_ORANGE };\n\n/**\n * Gets the styling for a given shape index.\n *\n * @param index The shape index.\n * @return {Array<{strokeStyle?: string, fillStyle?: string}>} Styling for a shape and its corners/arrows.\n */\nfunction getShapeStyleByIndex(index) {\n switch (index) {\n case 0:\n return [SHAPE_0_STYLE, SHAPE_0_POINT_ARROW_STYLE];\n case 1:\n return [SHAPE_1_STYLE, SHAPE_1_POINT_ARROW_STYLE];\n case 2:\n return [SHAPE_2_STYLE, SHAPE_2_POINT_ARROW_STYLE];\n default:\n return [SHAPE_0_STYLE, SHAPE_0_POINT_ARROW_STYLE];\n }\n}\n\n/**\n * The wrapper class for the selected video player.\n * This is either the wrapper for the snapshot or WebRTC player.\n *\n * @type {string}\n *\n * @private\n * @memberof video.rules.DrawWindow\n */\nconst VIDEO_COMPONENT_CLASS = '.locomote-wrapper';\n\n/**\n * The class for the canvas element.\n *\n * @type {string}\n */\nconst CANVAS_CLASS = '.window-canvas';\n\n/**\n * The maximum time (in seconds) that a detection duration should be displayed as seconds.\n * Any larger value should be displayed in minutes.\n *\n * @type {number}\n *\n * @private\n * @memberof video.rules.DrawWindow\n */\nconst MaxDetectionDurationDisplaySeconds = 120;\n\n// endregion\n\n// region Canvas Drawing Private Functions.\n\n/**\n * Redraw all lines, points, and arrows.\n *\n * @param {HTMLCanvasElement} canvas The canvas HTML element.\n * @param {CanvasRenderingContext2D} canvasContext The canvas' corresponding canvas context.\n * @param {Array} points All points including mouse move point during draw.\n * @param {Object., direction: number, duration: number, drawingCompleted: boolean}>} allDrawings\n * A dictionary of all the drawings, include those not currently selected.\n * @param {number} selectedDrawingIndex The index of the selected drawing.\n * @param {boolean} closeShape Whether the shape should be closed.\n * @param {number} shapeOfDrawing The shape of the drawing (Line, CustomShape).\n *\n * @private\n * @static\n * @memberof video.rules.DrawWindow\n */\nexport function redrawAll(\n canvas,\n canvasContext,\n points,\n allDrawings,\n selectedDrawingIndex,\n closeShape,\n shapeOfDrawing\n) {\n // Clear any shape drawn from a prior render.\n clearShape(canvas, canvasContext);\n\n const isLine = shapeOfDrawing === Line,\n shapeIndexes = Object.keys(allDrawings).map((index) => parseInt(index));\n\n // Draw the shapes that aren't selected first so they're on bottom.\n shapeIndexes.forEach((index) => {\n if (index !== selectedDrawingIndex) {\n const { points, direction } = allDrawings[index],\n denormalizedPoints = denormalize(points, canvas.width, canvas.height);\n\n draw(canvas, canvasContext, denormalizedPoints, index, false, isLine ? direction : null, true);\n }\n });\n\n if (!points || !points.length) {\n return;\n }\n\n const selectedDrawingDirection = isLine ? allDrawings[selectedDrawingIndex].direction : null;\n\n // Draw the selected shape last so it's on top.\n draw(canvas, canvasContext, points, selectedDrawingIndex, true, selectedDrawingDirection, closeShape);\n}\n\n/**\n * Draw a single shape.\n *\n * @param {HTMLCanvasElement} canvas The canvas HTML element.\n * @param {CanvasRenderingContext2D} canvasContext The canvas' corresponding canvas context.\n * @param {Array} points The points to draw.\n * @param {number} shapeIndex The index of the shape, used to get the shape styling.\n * @param {boolean} drawCorners Whether to draw corners on the shape.\n * @param {number|undefined} direction If the shape is a line, the direction of the line.\n * @param {boolean} closeShape Whether the shape should be closed.\n */\nfunction draw(canvas, canvasContext, points, shapeIndex, drawCorners, direction, closeShape) {\n if (!points.length) {\n return;\n }\n\n const [shapeStyle, shapePointArrowStyle] = getShapeStyleByIndex(shapeIndex);\n\n // Draw shape.\n drawShape(canvasContext, points, closeShape, shapeStyle);\n\n if (drawCorners) {\n points.forEach((point) =>\n drawSingleCornerPoint(canvasContext, point, ANALYTICS_POINT_SIZE, shapePointArrowStyle)\n );\n }\n\n if (direction != null) {\n drawArrow(\n canvasContext,\n direction,\n points,\n shapePointArrowStyle,\n canvasContext.showEnterExitText,\n canvasContext.intl\n );\n }\n}\n\n// endregion\n\n// region Shape resize event handlers\n\n/**\n * Sets common properties needed for all shape resize event handlers.\n *\n * @param pointsToDraw\n * @param normalizedPoints\n *\n * @instance\n * @private\n * @memberOf components.video.rules.DrawWindow\n */\nfunction setShapeResizeProperties(pointsToDraw, normalizedPoints) {\n this.setNormalizedPoints(normalizedPoints);\n\n this.setProperties({\n pointsForAdjustedCanvas: pointsToDraw,\n userHasInteractedWithDraw: true\n });\n}\n\n/**\n * Called as the mouse or touch event moves to continue a shape resize.\n *\n * @param {Object} context\n * @param {Event} e\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction resizeMove(context, e) {\n // Get the canvas's 2D context and current set of points.\n const {\n pointsForAdjustedCanvas,\n canvas,\n canvasHeight,\n canvasWidth,\n normalizedPoints,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n shapeOfDrawing\n } = this,\n { resizeShapeInfo } = context;\n\n // Get coordinates of the current mouse position and a copy of the current set of points.\n const { x, y } = context.getCoordinates(e),\n pointsToDraw = pointsForAdjustedCanvas.slice();\n\n const i = resizeShapeInfo.index;\n\n // Update the point being dragged and store it.\n pointsToDraw[i] = { x, y };\n\n // Update points as fraction of canvas to hold new point position for canvas size\n normalizedPoints[i] = {\n x: x / canvasWidth,\n y: y / canvasHeight\n };\n\n // When resizing a rectangle, the two vertices with edges attached to the vertex being moved\n // also need to be updated.\n if (shapeOfDrawing === Rectangle) {\n // cornerAIndex specifies the attached vertex whose y-position needs to be updated.\n const cornerAIndex = (5 - i) % 4;\n\n // cornerBIndex specifies the attached vertex whose x-position needs to be updated.\n const cornerBIndex = (3 - i) % 4;\n\n pointsToDraw[cornerAIndex].y = pointsToDraw[i].y;\n pointsToDraw[cornerBIndex].x = pointsToDraw[i].x;\n\n normalizedPoints[cornerAIndex] = {\n x: normalizedPoints[cornerAIndex].x,\n y: pointsToDraw[i].y / canvas.height\n };\n\n normalizedPoints[cornerBIndex] = {\n x: pointsToDraw[i].x / canvas.width,\n y: normalizedPoints[cornerBIndex].y\n };\n }\n\n setShapeResizeProperties.call(this, pointsToDraw, normalizedPoints);\n\n // Redraw everything.\n redrawAll(\n canvas,\n this.canvasContext,\n pointsToDraw,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n true,\n shapeOfDrawing\n );\n}\n\n/**\n * Called on mouseup or touchend to complete a shape resize.\n *\n * @param {Object} context\n *\n * @returns {boolean} True so that the events are detached.\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction resizeEnd(context) {\n const {\n canvas,\n shapeOfDrawing,\n normalizedPoints,\n drawingCompleted,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n isMobileBrowser,\n warningZones,\n warningZoneInstructions\n } = this,\n { index: movedPointIndex, points: oldPoints, normalizedPoints: oldNormalizedPoints } = context.resizeShapeInfo;\n\n // Once we are done moving the point, confirm its new position is valid.\n const pointsForValidRes = denormalize(normalizedPoints, this.resolutionWidth, this.resolutionHeight);\n let draggedPointError = pointValidation.call(\n this,\n pointsForValidRes,\n movedPointIndex,\n true,\n true,\n shapeOfDrawing,\n this.intl.t.bind(this.intl)\n );\n\n // If we got a validation error, revert the dragging changes.\n if (draggedPointError) {\n setShapeResizeProperties.call(this, oldPoints, oldNormalizedPoints);\n redrawAll(\n canvas,\n this.canvasContext,\n oldPoints,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingCompleted,\n shapeOfDrawing\n );\n }\n\n // If there is no current dragged point error, check if the drawing intersects any warning zones.\n if (!draggedPointError && shapeIntersectsWarningZonesValidation(normalizedPoints, warningZones)) {\n draggedPointError = warningZoneInstructions;\n }\n\n // Display the validation error that occurred, or clear the drawing instructions if null and on desktop.\n if (draggedPointError || !isMobileBrowser) {\n this.drawingInstructions = draggedPointError;\n }\n\n return true;\n}\n\n// endregion\n\n// region Shape \"move\" event handlers\n\n/**\n * Called as the mouse or touch event moves to continue a shape shift.\n *\n * @param {Object} context\n * @param {Event} e\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction shiftMove(context, e) {\n // Get the canvas's 2D context and current set of points, as well as the current mouse position.\n const {\n canvas,\n canvasContext,\n pointsForAdjustedCanvas,\n shapeOfDrawing,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingInstructions\n } = this,\n { x, y } = context.getCoordinates(e),\n pointsToDraw = moveShape.call(this, canvas, pointsForAdjustedCanvas, context.shapeShiftInfo, x, y);\n\n if (drawingInstructions != null) {\n this.clearDrawingInstructionsOnDesktop();\n }\n\n // Redraw everything.\n redrawAll(canvas, canvasContext, pointsToDraw, dictionaryOfDrawings, selectedDrawingIndex, true, shapeOfDrawing);\n}\n\n/**\n * Called on mouseup or touchend to complete a shape move.\n *\n * @param {Object} context\n *\n * @returns {boolean} True so the event handlers are detached\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction shiftEnd(context) {\n const {\n canvas,\n canvasHeight,\n canvasWidth,\n pointsForAdjustedCanvas,\n canvasContext,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n shapeOfDrawing,\n warningZones,\n warningZoneInstructions\n } = this,\n { shapeShiftInfo, lastX, lastY } = context;\n\n const pointsToDraw = moveShape.call(this, canvas, pointsForAdjustedCanvas, shapeShiftInfo, lastX, lastY),\n normalizedPoints = normalize(pointsToDraw, canvasWidth, canvasHeight);\n\n this.setNormalizedPoints(normalizedPoints);\n this.pointsForAdjustedCanvas = pointsToDraw;\n this.clearDrawingInstructionsOnDesktop();\n\n // If the shape drawn overlaps with any warning zones, update the drawing instructions to display a warning.\n if (shapeIntersectsWarningZonesValidation(normalizedPoints, warningZones)) {\n this.drawingInstructions = warningZoneInstructions;\n }\n\n redrawAll(canvas, canvasContext, pointsToDraw, dictionaryOfDrawings, selectedDrawingIndex, true, shapeOfDrawing);\n\n return true;\n}\n\n// endregion\n\n// region Shape \"drawing\" event handlers\n\n/**\n * Called as the mouse or touch event moves to draw shape lines as they are added.\n *\n * @param {Object} context\n * @param {Event} e\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction moveDraw(context, e) {\n if (!this.normalizedPoints.length || this.drawingCompleted) {\n return;\n }\n\n let closeShape = false;\n let points = [...this.pointsForAdjustedCanvas, context.getCoordinates(e)];\n\n if (this.shapeOfDrawing === Rectangle) {\n points = computeRectanglePoints(points);\n closeShape = true;\n }\n\n // Draw shape with temporary final point.\n redrawAll(\n this.canvas,\n this.canvasContext,\n points,\n this.dictionaryOfDrawings,\n this.selectedDrawingIndex,\n closeShape,\n this.shapeOfDrawing\n );\n}\n\n// endregion\n\n// region Initiate shape event operations.\n\n/**\n * Called to initiate a drag operation (shape move or resize).\n *\n * @param {Object} context\n * @param {Event} e\n *\n * @returns {{}|{move: function, end: function}} An object with move and end event handlers for the computed operation.\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction startDrag(context, e) {\n const { canvas, resolutionWidth, resolutionHeight, normalizedPoints, pointsForAdjustedCanvas } = this;\n\n // Get coordinates of the current mouse position.\n const { x: cX, y: cY } = context.getCoordinates(e);\n\n // Use valid resolution point positions when checking positions\n const validResX = (cX / canvas.width) * resolutionWidth,\n validResY = (cY / canvas.height) * resolutionHeight,\n cornerIndex = denormalize(normalizedPoints, resolutionWidth, resolutionHeight).reduce(\n (cornerIndex, { x, y }, index) =>\n cornerIndex !== undefined\n ? cornerIndex\n : arePointsClose(\n { x: validResX, y: validResY },\n {\n x,\n y\n }\n )\n ? index\n : undefined,\n undefined\n );\n\n // Is the point close to a corner?\n if (cornerIndex !== undefined) {\n // Set the dragging corner to be the adjusted canvas point\n context.resizeShapeInfo = {\n index: cornerIndex,\n points: [...pointsForAdjustedCanvas],\n normalizedPoints: [...normalizedPoints]\n };\n\n // Operation is resize.\n return {\n move: resizeMove,\n end: resizeEnd\n };\n }\n\n // Is the point inside the existing shape?\n if (isPointInShape(pointsForAdjustedCanvas, cX, cY)) {\n // Add shape info to context.\n context.shapeShiftInfo = {\n mouseX: cX,\n mouseY: cY,\n lastValidDeltaX: 0,\n lastValidDeltaY: 0\n };\n\n // Operation is a shift.\n return {\n move: shiftMove,\n end: shiftEnd\n };\n }\n\n // Nothing to do.\n return {};\n}\n\n/**\n * Called to initiate the shape drawing operation.\n *\n * @returns {{move: function, end: function}} An object with move and end event handlers for the computed operation.\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction startDraw(context) {\n // Don't need touchmove or touchend for drawing shapes.\n return context.isTouch\n ? {}\n : {\n move: moveDraw\n };\n}\n\n// endregion\n\n// region Setup canvas.\n\n/**\n * Called to attach the appropriate events to the canvas for shape manipulation.\n *\n * @param {HTMLCanvasElement} canvas\n *\n * @instance\n * @private\n * @memberof components.video.rules.DrawWindow\n */\nfunction attachCanvasEvents(canvas) {\n let evtStart = 'mousedown',\n evtMove = 'mousemove',\n evtEnd = 'mouseup';\n const isTouch = this.isMobileBrowser;\n\n if (isTouch) {\n evtStart = 'touchstart';\n evtMove = 'touchmove';\n evtEnd = 'touchend';\n }\n\n // Attach canvas element listener to begin.\n this.dom.addListener(\n this,\n canvas,\n evtStart,\n (e) => {\n // Calculate \"start\" event handler.\n const fnStartEvent = (() => {\n // Is this a multi-touch events?\n if (isTouch && e.touches.length > 1) {\n // We don't support multi-touch events.\n return;\n }\n\n // Is the drawing completed?\n if (this.drawingCompleted) {\n // Must be a window drag, or a shape resize/shift.\n return startDrag;\n }\n\n // Is this a touch event OR a left mouse click?\n if (isTouch || e.which === 1) {\n // Add point.\n setPoint.call(this, false, e);\n\n const { detachShapeListeners } = this;\n\n // Are the shape listeners already attached?\n if (detachShapeListeners) {\n // Is the drawing complete?\n if (this.drawingCompleted) {\n // Detach listeners.\n detachShapeListeners();\n }\n\n // Nothing to do.\n return undefined;\n }\n\n // This is the first point so use startDraw to initiate.\n return startDraw;\n }\n\n // Nothing to do.\n return undefined;\n })();\n\n // Was no start event found?\n if (!fnStartEvent) {\n // Nothing to do.\n return;\n }\n\n // Prevent the default action of drag scrolling when touching the canvas.\n e.preventDefault();\n\n const { left, top } = canvas.getBoundingClientRect(),\n { width, height } = canvas,\n context = {\n isTouch,\n getCoordinates(e) {\n // Get client coordinates from event (allow for touch).\n const [{ clientX, clientY }] = e.touches || [e];\n\n // Get coordinates of the current mouse position constrained to within the canvas element, and cache on context.\n const x = (this.lastX = constrainRange(clientX - left, 0, width)),\n y = (this.lastY = constrainRange(clientY - top, 0, height));\n\n return { x, y };\n }\n },\n { move, end } = fnStartEvent.call(this, context, e);\n\n // Attach event listeners (if appropriate).\n const listeners = [\n move && this.dom.addListener(this, window, evtMove, move.bind(this, context), false, false, false),\n end &&\n this.dom.addListener(this, window, evtEnd, () => {\n // Is the operation complete?\n if (end.call(this, context)) {\n this.detachShapeListeners();\n }\n })\n ].compact();\n\n // Are there attached listeners?\n if (listeners.length) {\n // Add instance method to clear attached listeners (required for keyboard events).\n this.detachShapeListeners = () => {\n // Remove listeners and delete this method.\n listeners.forEach((id) => this.dom.removeListener(this, id));\n delete this.detachShapeListeners;\n };\n }\n },\n false,\n false,\n false\n );\n}\n\n/**\n * Sets up the canvas for video feed display and point display based on current window size.\n *\n * @param {Object} videoPlayer The video player element (img, Flash, or WebRTC tag).\n * @param {Object} canvas The canvas element.\n *\n * @private\n * @memberof video.rules.DrawWindow\n * @instance\n */\nfunction setUpCanvas(videoPlayer, canvas) {\n let {\n shapeOfDrawing,\n didClearCanvas,\n initialLoad,\n defaultEntireFieldOfView,\n showEnterExitText,\n intl,\n canEditPoints,\n normalizedPoints,\n drawingCompleted,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingIndexes,\n aspectRatio,\n maxAllowableWidth,\n supportsMultipleDrawings,\n drawDefaultShapeOnInit\n } = this,\n pointsForAdjustedCanvas = [];\n const shapeIndexes = Object.keys(dictionaryOfDrawings).map((index) => parseInt(index)),\n allPointsInitiallyEmpty = shapeIndexes.every((index) => !dictionaryOfDrawings[index].points.length),\n canvasContext = canvas.getContext('2d'),\n canvasAndButtons = document.querySelector(`#${this.id} .drawing-and-multi-drawing-buttons .canvas-and-buttons`),\n playerInfo = canvasAndButtons.querySelector('.player-info'),\n disabledOverlay = document.querySelector(`#${this.id} .locomote-wrapper .disabled-drawings-overlay`);\n\n // Note that these don't actually exist on the CanvasRenderingContext2D type.\n canvasContext.showEnterExitText = showEnterExitText;\n canvasContext.intl = intl;\n\n let canvasWidth = Math.min(videoPlayer.clientWidth, maxAllowableWidth),\n canvasHeight = canvasWidth / aspectRatio;\n\n // Make sure we can draw on the canvas.\n if (canvasHeight === 0 || canvasWidth === 0) {\n return;\n }\n\n // Adjust player size to calculated height and max-width.\n videoPlayer.style.cssText = htmlSafe(`height: ${canvasHeight}px; max-width: ${maxAllowableWidth}px;`);\n\n // Adjust the overlay so it's the same size as the video player.\n if (disabledOverlay) {\n disabledOverlay.style.cssText = htmlSafe(`height: ${canvasHeight}px; max-width: ${maxAllowableWidth}px;`);\n }\n\n // Adjust the canvas-and-buttons bottom margins to account for the player-info.\n if (playerInfo) {\n canvasAndButtons.style.cssText = htmlSafe(`margin-bottom: ${playerInfo.clientHeight}px;`);\n }\n\n // If the canvas was cleared, do not continue to loading points.\n if (didClearCanvas && allPointsInitiallyEmpty) {\n // Set canvas context to allow for proper resizing of blank canvas.\n this.setProperties({\n canvas,\n canvasContext,\n canvasHeight,\n canvasWidth\n });\n\n return;\n }\n\n // If this is the initial load and setup of the component, we need to initialize some values.\n if (initialLoad) {\n // If on initial load we have no points, then set those points to a sample default set.\n // Don't draw points if we default to the entire field of view, or if a user can create multiple drawings.\n if (\n allPointsInitiallyEmpty &&\n !defaultEntireFieldOfView &&\n !supportsMultipleDrawings &&\n drawDefaultShapeOnInit\n ) {\n // Populate points for a default rectangle or line (depending on if this rule is ground zone or tripwire).\n pointsForAdjustedCanvas = getDefaultAnalyticsShapePoints(canvasWidth, canvasHeight, shapeOfDrawing);\n\n // Create an array to store the points after adjusting to fraction of canvas.\n normalizedPoints = normalize(pointsForAdjustedCanvas, canvasWidth, canvasHeight);\n this.setNormalizedPoints(normalizedPoints);\n\n this.drawingInstructions = this.editShapeInstructions;\n this.infoModalInstructions = this.drawingInstructions;\n drawingCompleted = true;\n }\n\n // Set a default direction of left to right for Line drawings.\n if (shapeOfDrawing === Line) {\n drawingIndexes.forEach((index) => {\n if (dictionaryOfDrawings[index].direction === -1) {\n dictionaryOfDrawings[index].direction = LeftToRight;\n }\n });\n }\n\n // Set some initial load properties - others are set at the end of the function.\n this.setDrawingCompleted(drawingCompleted);\n\n this.setProperties({\n initialLoad: false,\n resolutionHeight: DEFAULT_HEIGHT,\n resolutionWidth: DEFAULT_WIDTH\n });\n\n // Add the mouse/touch listeners to the canvas just the once.\n // Only do this when we can edit the points on the canvas.\n if (canEditPoints) {\n attachCanvasEvents.call(this, canvas);\n }\n }\n\n // If we already have points, adjust points array from fractions of canvas to current canvas (x, y) coordinates.\n if (!allPointsInitiallyEmpty) {\n pointsForAdjustedCanvas = denormalize(normalizedPoints, canvasWidth, canvasHeight);\n }\n\n // Draw everything. Do not draw if we default the entire field of view.\n if (!defaultEntireFieldOfView || !allPointsInitiallyEmpty) {\n redrawAll(\n canvas,\n canvasContext,\n pointsForAdjustedCanvas,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingCompleted,\n shapeOfDrawing\n );\n\n this.set('userHasInteractedWithDraw', true);\n } else {\n // Put the canvas in drawing mode so that the user is able to draw an AOI at any time if they choose.\n this.setDrawingCompleted(false);\n\n this.setProperties({\n didClearCanvas: true\n });\n }\n\n // Store all of the properties we have adjusted above.\n this.setProperties({\n canvas,\n canvasContext,\n canvasHeight,\n canvasWidth,\n pointsForAdjustedCanvas\n });\n}\n\n/**\n * Sets a point where mouse is pressed, or completes the shape if mouse is on first point or Enter key is pressed.\n * Should only be called once we've verified that drawingCompleted is false.\n *\n * @param {boolean} isAutoComplete\n * @param {Event} e\n *\n * @private\n * @instance\n * @memberof video.rules.DrawWindow\n */\nfunction setPoint(isAutoComplete, e) {\n let x,\n y,\n {\n canvas,\n canvasContext,\n pointsForAdjustedCanvas,\n shapeOfDrawing,\n maxPoints,\n resolutionWidth,\n resolutionHeight,\n normalizedPoints,\n drawingCompleted,\n dictionaryOfDrawings,\n warningZones,\n warningZoneInstructions,\n selectedDrawingIndex\n } = this;\n const supportsAutoComplete = shapeOfDrawing === CustomShape,\n isRectangle = shapeOfDrawing === Rectangle;\n\n // If this is an auto-complete event.\n if (isAutoComplete) {\n if (!supportsAutoComplete) {\n return;\n }\n\n // Exits function if Enter key was pressed but there are fewer than 3 points because it cannot complete a shape.\n if (pointsForAdjustedCanvas.length < MINIMUM_NUMBER_OF_GROUND_ZONE_POINTS) {\n return;\n }\n\n // Get the first point so we can close on it.\n [{ x, y }] = pointsForAdjustedCanvas;\n } else {\n // Get coordinates of the current mouse position.\n [x, y] = getMouseCoordinate(canvas, e.touches ? e.touches[0] : e);\n }\n\n // Use valid point positions when checking position validations\n const pointsForValidRes = denormalize(normalizedPoints, resolutionWidth, resolutionHeight),\n resolutionPoint = {\n x: (x / canvas.width) * resolutionWidth,\n y: (y / canvas.height) * resolutionHeight\n };\n\n // Make sure newly-drawn line and point aren't invalid.\n const drawingErrorMessage = newPointValidation.call(\n this,\n pointsForValidRes,\n resolutionPoint,\n shapeOfDrawing,\n this.intl.t.bind(this.intl)\n );\n\n // If the point drawn was invalid, don't add it - just display the error returned.\n if (drawingErrorMessage) {\n this.drawingInstructions = drawingErrorMessage;\n return;\n }\n\n // If this is not an auto-complete and it's the user manually drawing.\n if (!isAutoComplete) {\n const shapeIsComplete = function () {\n switch (shapeOfDrawing) {\n case CustomShape:\n return (\n pointsForAdjustedCanvas.length &&\n pointsForValidRes.length &&\n arePointsClose(resolutionPoint, pointsForValidRes[0])\n );\n case Line:\n case Rectangle:\n return pointsForAdjustedCanvas.length === maxPoints;\n default:\n return false;\n }\n };\n\n // If the shape isn't completed on the canvas yet, then the user is still drawing.\n if (!shapeIsComplete()) {\n // If we've reached max number of points and we're not completing the shape.\n if (pointsForAdjustedCanvas.length === maxPoints) {\n // Let user know that max points are reached and to close the shape, then do not let user add more points.\n this.drawingInstructions = this.intl.tc(this, 'maxPoints');\n return;\n }\n\n // Else wise, user is drawing a new point.\n pointsForAdjustedCanvas.push({ x, y });\n\n // Create new normalized points to store to rule\n const newNormalizedPoints = normalize(pointsForAdjustedCanvas, canvas.width, canvas.height);\n\n // Store the new points.\n this.setNormalizedPoints(newNormalizedPoints);\n\n this.setProperties({\n // Store points for adjusted canvas\n pointsForAdjustedCanvas,\n userHasInteractedWithDraw: true\n });\n }\n\n // If this was the last point drawn on canvas or a line was completed for tripwire.\n if (shapeIsComplete()) {\n drawingCompleted = true;\n\n if (isRectangle) {\n this.setNormalizedPoints(computeRectanglePoints(dictionaryOfDrawings[selectedDrawingIndex].points));\n pointsForAdjustedCanvas = computeRectanglePoints(pointsForAdjustedCanvas);\n\n this.set('pointsForAdjustedCanvas', pointsForAdjustedCanvas);\n }\n }\n } else if (shapeOfDrawing === CustomShape) {\n // Enter key was pressed in ground zone mode, so complete the shape.\n drawingCompleted = true;\n }\n\n // If the drawing is complete.\n if (drawingCompleted) {\n this.setDrawingCompleted(true);\n\n const normalizedWarningZones = warningZones.map((warningZone) =>\n denormalize(warningZone, resolutionWidth, resolutionHeight)\n );\n\n // If the shape drawn overlaps with any warning zones, update the drawing instructions to display a warning.\n if (shapeIntersectsWarningZonesValidation(pointsForValidRes, normalizedWarningZones)) {\n this.drawingInstructions = warningZoneInstructions;\n return;\n }\n\n // Then update model properties so that we confirmed the drawing is complete, clear the toast notification, and set that the canvas has points to load.\n this.setProperties({\n didClearCanvas: false\n });\n }\n\n // If we successfully clicked a point, remove the drawing instructions (only on desktop).\n // Either the instructions are in the way of the drawing, or the shape is done so we don't need them.\n this.clearDrawingInstructionsOnDesktop();\n\n // Redraw everything.\n redrawAll(\n canvas,\n canvasContext,\n pointsForAdjustedCanvas,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingCompleted,\n shapeOfDrawing\n );\n}\n\n// endregion\n\n/**\n * @classdesc\n * An object that represents a shape on the DrawWindow.\n *\n * @class components.video.rules.DrawWindow.Drawing\n */\nexport class Drawing {\n @tracked points;\n @tracked direction;\n @tracked duration;\n @tracked drawingCompleted;\n\n constructor(points, direction, duration) {\n this.points = points || [];\n this.direction = direction;\n this.duration = duration;\n this.drawingCompleted = !!this.points.length;\n }\n}\n\n/**\n * Draw area of interest window for the rule.\n */\n@intlPath({ path: 'video.rules.draw-window' })\nexport default class DrawWindow extends Component {\n tagName = '';\n\n @service contextManager;\n @service dom;\n @service intl;\n @service notificationManager;\n @service modals;\n @service store;\n @service stats;\n @service('video.draw-window-event-bus') drawWindowEventBus;\n\n /**\n * Whether points can be edited on the canvas.\n *\n * @type {boolean}\n */\n canEditPoints = true;\n\n /**\n * Keep track of if the canvas should be considered recently cleared (double click and before a drawing is completed).\n *\n * @type {boolean}\n */\n didClearCanvas = false;\n\n /**\n * Whether or not we should display the \"Learn More about creating a ...\" link in the player buttons section.\n */\n displayMoreInfoLink = true;\n\n /**\n * A unique ID used to lookup our outermost div element.\n */\n id = guidFor(this);\n\n /**\n * If current device is mobile\n *\n * @type {boolean}\n */\n isMobileBrowser = isMobileBrowser();\n\n /**\n * Whether we should use the live-view or snapshots player\n *\n * @type {boolean}\n */\n useSnapshots = isMobileBrowser();\n\n /**\n * The maximum height the component is allowed to be.\n *\n * @type {number|undefined}\n */\n maxHeight = undefined;\n\n /**\n * The shape of the drawings.\n *\n * @type {number}\n */\n @tracked shapeOfDrawing = CustomShape;\n\n /**\n * Whether to display the ground zone duration options.\n *\n * @return {boolean}\n */\n @computed('shapeOfDrawing', 'supportsDurationAreaOfInterest')\n get displayGroundZoneDurationOptions() {\n return this.shapeOfDrawing === CustomShape && this.supportsDurationAreaOfInterest;\n }\n\n /**\n * Whether to display the tripwire direction options.\n *\n * @return {boolean}\n */\n @computed('shapeOfDrawing', 'hideDirectionToggle')\n get displayTripwireDirectionOptions() {\n return this.shapeOfDrawing === Line && !this.hideDirectionToggle;\n }\n\n /**\n * Whether we want to show the specific rule settings section or not.\n */\n @or('displayGroundZoneDurationOptions', 'displayTripwireDirectionOptions')\n displaySpecificRuleSettings;\n\n /**\n * Whether this draw window should support multiple drawings.\n */\n @gt('drawingIndexes.length', 1)\n supportsMultipleDrawings;\n\n /**\n * A header to display above the buttons to switch between multiple drawings.\n *\n * @type {string}\n */\n multipleDrawingsHeader = '';\n\n /**\n * Text to display below the heading giving instructions or context about multiple drawings.\n *\n * @type {string}\n */\n multipleDrawingsText = '';\n\n /**\n * For the buttons to select which drawing to edit, what should we call the shape?\n * e.g. Shape 1, Shape 2, Shape 3....\n *\n * @type {string}\n */\n shapeResourceForSelectedDrawingButtons = 'components.video.rules.draw-window.shape';\n\n /**\n * The icon to display next to the shape name for the drawing select buttons.\n *\n * @return {string}\n */\n @computed('shapeOfDrawing')\n get shapeIconForDrawingSelectButtons() {\n return this.shapeOfDrawing === Line ? 'line' : 'rectangle';\n }\n\n /**\n * Whether the multi-drawing controls should be disabled.\n *\n * @return {boolean}\n */\n @computed('allDrawingsEnabled', 'canEditPoints')\n get selectedDrawingButtonsDisabled() {\n return !(this.canEditPoints && this.allDrawingsEnabled);\n }\n\n /**\n * Allows user to select which drawing they're currently editing.\n *\n * @return {Array<{id: number, primaryIcon: string, primaryIconColor: string, secondaryIcon: string, secondaryIconAction: function, selected: boolean, text: string}>}\n */\n @computed(\n 'dictionaryOfDrawings',\n 'drawingIndexes',\n 'normalizedPoints',\n 'onClearShape',\n 'onSelectDrawing',\n 'selectedDrawingIndex',\n 'shapeIconForDrawingSelectButtons',\n 'shapeResourceForSelectedDrawingButtons'\n )\n get selectedDrawingButtons() {\n const {\n dictionaryOfDrawings,\n drawingIndexes,\n onClearShape,\n onSelectDrawing,\n selectedDrawingIndex,\n shapeIconForDrawingSelectButtons,\n shapeResourceForSelectedDrawingButtons\n } = this;\n\n return drawingIndexes.map((index) => {\n const drawing = dictionaryOfDrawings[index],\n drawingHasPoints = !!drawing.points.length;\n\n return {\n id: index,\n primaryIcon: shapeIconForDrawingSelectButtons,\n primaryIconColor: getShapeStyleByIndex(index)[0].strokeStyle,\n secondaryIcon: drawingHasPoints ? 'trash' : 'add',\n secondaryIconAction: drawingHasPoints ? onClearShape : onSelectDrawing,\n secondaryIconText: drawingHasPoints ? 'clearShape' : 'createShape',\n selected: index === selectedDrawingIndex,\n text: this.intl.t(shapeResourceForSelectedDrawingButtons, { number: index + 1 })\n };\n });\n }\n\n /**\n * A dictionary containing all the drawings currently on the window.\n *\n * @type {Object.}}\n */\n @tracked dictionaryOfDrawings = null;\n\n /**\n * An array of point values that issue a warning if the drawing enters it.\n * @type {Array>}\n */\n @tracked warningZones = [];\n\n /**\n * Instructions to display on the draw-window if a shape intersects a warning zone.\n * @type {string}\n */\n @tracked warningZoneInstructions = null;\n\n /**\n * The keys (indexes) for the dictionary of drawings.\n *\n * @return {Array}\n */\n @computed('dictionaryOfDrawings')\n get drawingIndexes() {\n return Object.keys(this.dictionaryOfDrawings).map((index) => parseInt(index));\n }\n\n /**\n * The index of the current drawing that is selected. This is often used to slice into dictionaryOfDrawings.\n */\n @tracked selectedDrawingIndex = 0;\n\n /**\n * The current drawing that is selected.\n *\n * @returns {Drawing}\n */\n @computed('dictionaryOfDrawings', 'selectedDrawingIndex')\n get selectedDrawing() {\n return this.dictionaryOfDrawings[this.selectedDrawingIndex];\n }\n\n /**\n * The points from the drawing that is currently selected.\n *\n * @type {Array}\n */\n @reads('selectedDrawing.points')\n normalizedPoints;\n\n /**\n * Sets the points on the drawing that is currently selected.\n *\n * @param points\n */\n setNormalizedPoints(points) {\n this.dictionaryOfDrawings[this.selectedDrawingIndex].points = points;\n }\n\n /**\n * Whether the drawing that is currently selected is completed.\n *\n * @type {boolean}\n */\n @reads('selectedDrawing.drawingCompleted')\n drawingCompleted;\n\n /**\n * Sets whether the drawing that is currently selected is completed.\n *\n * @param drawingCompleted\n */\n setDrawingCompleted(drawingCompleted) {\n this.dictionaryOfDrawings[this.selectedDrawingIndex].drawingCompleted = drawingCompleted;\n }\n\n /**\n * The direction of the current drawing.\n *\n * @type {number}\n */\n @reads('selectedDrawing.direction')\n direction;\n\n /**\n * Sets the direction of the drawing that is currently selected.\n *\n * @param direction\n */\n setDirection(direction) {\n this.dictionaryOfDrawings[this.selectedDrawingIndex].direction = direction;\n }\n\n /**\n * The duration associated with the current drawing.\n *\n * @type {number}\n */\n @reads('selectedDrawing.duration')\n duration;\n\n /**\n * Sets the duration associated with the drawing that is currently selected.\n *\n * @param duration\n */\n setDuration(duration) {\n this.dictionaryOfDrawings[this.selectedDrawingIndex].duration = duration;\n }\n\n /**\n * Whether all the drawings are currently toggle to be enabled.\n *\n * @type {boolean}\n */\n @tracked allDrawingsEnabled = true;\n\n /**\n * Whether to show the popover menu when a user attempts to edit drawings while they're disabled.\n *\n * @type {boolean}\n */\n @tracked shouldShowDisabledPopover = false;\n\n /**\n * Whether to display the mobile drawing header text.\n *\n * @type {boolean}\n */\n displayMobileDrawingHeaderText = true;\n\n /**\n * The text to display above the drawing instructions and video player on mobile.\n *\n * @function\n * @return {string}\n */\n @computed('shapeOfDrawing')\n get mobileDrawingHeaderText() {\n const resource = this.shapeOfDrawing === Line ? 'createTripwire' : 'createGroundZone';\n\n return this.intl.tc(this, resource);\n }\n\n /**\n * Stores the instructions for the rule creation or error message (or null if no message and on desktop).\n *\n * @type {String | null}\n */\n @tracked drawingInstructions = null;\n\n /**\n * If the user is on desktop, clear the drawing instructions.\n */\n clearDrawingInstructionsOnDesktop() {\n if (!this.isMobileBrowser) {\n this.drawingInstructions = null;\n }\n }\n\n /**\n * Text that shows up by the popup for the best practices modal\n *\n * @type {String}\n */\n @tracked infoModalInstructions = null;\n\n /**\n * Text that shows up by the popup for the best practices modal\n *\n * @type {String}\n */\n @computed('infoModalLearnMoreOverride', 'shapeOfDrawing')\n get infoModalLearnMore() {\n if (this.infoModalLearnMoreOverride) {\n return this.infoModalLearnMoreOverride;\n }\n\n return this.intl.tc(this, `${this.shapeOfDrawing === Line ? 'tripwireInfo' : 'groundZoneInfo'}.learnMore`);\n }\n\n /**\n * Should we display the drawing instructions?\n */\n @computed('drawingInstructions')\n get shouldDisplayDrawingInstructions() {\n return this.drawingInstructions !== null;\n }\n\n /**\n * Should we display the info inline alert? If not, display the warning one for error messages.\n */\n @computed('drawingInstructions', 'newShapeInstructions', 'editShapeInstructions')\n get inlineAlertTypeForDrawingInstructions() {\n const { drawingInstructions, newShapeInstructions, editShapeInstructions } = this,\n infoInstructions = [newShapeInstructions, editShapeInstructions];\n\n if (infoInstructions.includes(drawingInstructions)) {\n return 'info';\n }\n\n return 'warning';\n }\n\n /**\n * Text and HTML to display on the more info modal.\n *\n * @return {{title: String, info: SafeString}}\n */\n @computed('moreInfoModalDataOverride', 'shapeOfDrawing')\n get moreInfoModalData() {\n if (this.moreInfoModalDataOverride) {\n return this.moreInfoModalDataOverride;\n }\n\n const { intl, shapeOfDrawing } = this;\n let title, info;\n\n switch (shapeOfDrawing) {\n case Line: {\n title = intl.tc(this, 'tripwireInfo.title');\n info = htmlSafe(`${intl.tc(this, 'tripwireInfo.bulletListTitle')}\n
      \n
    • ${intl.tc(this, 'tripwireInfo.bulletList1')}
    • \n
    • ${intl.tc(this, 'tripwireInfo.example')}\n
    • ${intl.tc(this, 'tripwireInfo.example1')}
    • \n
    \n ${intl.tc(this, 'tripwireInfo.numberedListTitle')}\n
      \n
    1. ${intl.tc(this, 'tripwireInfo.numberedList1')}
    2. \n
    3. ${intl.tc(this, 'tripwireInfo.numberedList2')}
    4. \n
    5. ${intl.tc(this, 'tripwireInfo.numberedList3')}
    6. \n
    7. ${intl.tc(this, 'tripwireInfo.numberedList4')}
    8. \n
    9. ${intl.tc(this, 'tripwireInfo.numberedList5')}
    10. \n
    `);\n break;\n }\n case CustomShape: {\n title = intl.tc(this, 'groundZoneInfo.title');\n info = htmlSafe(`${intl.tc(this, 'groundZoneInfo.bulletListTitle')}\n
      \n
    • ${intl.tc(this, 'groundZoneInfo.bulletList1')}
    • \n
    • ${intl.tc(this, 'groundZoneInfo.bulletList2')}
    • \n
    • ${intl.tc(this, 'groundZoneInfo.examples')}
    • \n
    • ${intl.tc(this, 'groundZoneInfo.example1')}
      \n ${intl.tc(this, 'groundZoneInfo.example1Description')}
    • \n
    • ${intl.tc(this, 'groundZoneInfo.example2')}
      \n ${intl.tc(this, 'groundZoneInfo.example2Description')}
    • \n
    \n ${intl.tc(this, 'groundZoneInfo.numberedListTitle')}\n
      \n
    1. ${intl.tc(this, 'groundZoneInfo.numberedList1')}
    2. \n
    3. ${intl.tc(this, 'groundZoneInfo.numberedList2')}
    4. \n
    5. ${intl.tc(this, 'groundZoneInfo.numberedList3')}
    6. \n
    7. ${intl.tc(this, 'groundZoneInfo.numberedList4')}
    8. \n
    9. ${intl.tc(this, 'groundZoneInfo.numberedList5')}
    10. \n
    `);\n break;\n }\n }\n\n return { title, info };\n }\n\n /**\n * Whether or not we should draw a default shape on the draw window when setting up (assuming that\n * other criteria are met).\n *\n * @type {boolean}\n */\n drawDefaultShapeOnInit = true;\n\n /**\n * Stores a boolean that tracks if this is the first loading of the rule wherein we know the cameras valid resolution.\n *\n * @type {boolean}\n */\n initialLoad = true;\n\n /**\n * Stores a boolean that tracks if the user has interacted with the player to draw. Helps us keep track of whether or not\n * to display the 'Clear Ground Zone' button to the user. We want to hide this from the user until they start drawing.\n * This is used by certain rule types, like Person Detection, to discourage the user from drawing an AOI.\n */\n userHasInteractedWithDraw = false;\n\n /**\n * Max number of points based on rule type.\n *\n * @function\n * @returns {number}\n */\n @computed('maxPointsOverride', 'shapeOfDrawing', 'camera.isUsingOvBatteryAnalytics')\n get maxPoints() {\n if (this.maxPointsOverride) {\n return this.maxPointsOverride;\n }\n\n switch (this.shapeOfDrawing) {\n case CustomShape:\n return this.camera.isUsingOvBatteryAnalytics\n ? MAXIMUM_NUMBER_OF_POINTS_FOR_BATTERY_ANALYTICS\n : MAXIMUM_NUMBER_OF_GROUND_ZONE_POINTS;\n case Rectangle:\n return MAXIMUM_NUMBER_OF_RECTANGLE_POINTS;\n case Line:\n return MAXIMUM_NUMBER_OF_TRIPWIRE_POINTS;\n default:\n return 0;\n }\n }\n\n /**\n * Whether or not we should hide the direction toggle UI on tripwire rules.\n *\n * @type {boolean}\n */\n hideDirectionToggle = false;\n\n /**\n * The options to display in the detection duration dropdown.\n * Pass in this value to the component.\n *\n * @type {Array|null}\n */\n detectionDurationOptions = null;\n\n /**\n * Determines the instructions depending on the device and rule type.\n *\n * @return {string}\n */\n @computed(\n 'editShapeInstructionsOverride',\n 'canEditPoints',\n 'defaultEntireFieldOfView',\n 'drawingCompleted',\n 'shapeOfDrawing'\n )\n get editShapeInstructions() {\n if (this.editShapeInstructionsOverride) {\n return this.editShapeInstructionsOverride;\n }\n\n const { canEditPoints, defaultEntireFieldOfView, drawingCompleted, shapeOfDrawing, isMobileBrowser } = this;\n\n let resource;\n if (shapeOfDrawing === CustomShape) {\n if (defaultEntireFieldOfView && !drawingCompleted) {\n resource = canEditPoints\n ? isMobileBrowser\n ? 'instructionsGroundZoneEntireFOVMobile'\n : 'instructionsGroundZoneEntireFOV'\n : 'instructionsCannotDrawGroundZone';\n } else {\n resource = canEditPoints\n ? isMobileBrowser\n ? 'instructionsGroundZoneMobile'\n : 'instructionsGroundZone'\n : 'instructionsCannotAdjustGroundZone';\n }\n } else {\n resource = canEditPoints\n ? isMobileBrowser\n ? 'instructionsTripwireMobile'\n : 'instructionsTripwire'\n : 'instructionsCannotAdjustTripwire';\n }\n\n return this.intl.tc(this, resource);\n }\n\n /**\n * Computed value to store the new shape instructions once per rule type change\n * instead of needing to calculate it every time it is needed.\n * For ground zone, we also tell user to click the first point to close shape (not necessary for tripwire).\n *\n * @type {String}\n */\n @computed('shapeOfDrawing', 'defaultEntireFieldOfView', 'isMobileBrowser', 'newShapeInstructionsOverride')\n get newShapeInstructions() {\n if (this.newShapeInstructionsOverride) {\n return this.newShapeInstructionsOverride;\n }\n\n const { defaultEntireFieldOfView, isMobileBrowser, shapeOfDrawing } = this,\n drawNewShape = this.intl.tc(this, isMobileBrowser ? 'drawNewShapeMobile' : 'drawNewShape'),\n customShape = this.intl.tc(this, 'instructionsCustomShape'),\n customShapeFinish =\n shapeOfDrawing === CustomShape ? this.intl.tc(this, 'instructionsCustomShapeFinish') : '',\n entireFieldOfView = defaultEntireFieldOfView ? this.intl.tc(this, 'instructionsCustomShapeEntireFOV') : '';\n\n return `${drawNewShape} ${customShape} ${customShapeFinish} ${entireFieldOfView}`;\n }\n\n /**\n * Selection of detection durations.\n *\n * @function\n * @returns {Array<{value: number, name: String}>}\n */\n @computed('detectionDurationOptions')\n get detectionDurations() {\n if (!this.detectionDurationOptions) {\n return [];\n }\n\n return this.detectionDurationOptions.map((value) =>\n DropdownSelectItem.create({\n value,\n name:\n value > MaxDetectionDurationDisplaySeconds\n ? this.intl.t('generic.minutes', { num: value / 60 })\n : this.intl.t('generic.seconds', { num: value })\n })\n );\n }\n\n /**\n * Whether the drawing instructions should be shown above the canvas.\n */\n @computed('drawingInstructions', 'hideCanvas', 'isMobileBrowser')\n get shouldShowDrawingInstructionsOnCanvas() {\n return this.drawingInstructions && !this.isMobileBrowser && !this.hideCanvas;\n }\n\n /**\n * Enables the switch directions button and both directions checkbox\n * if there are points on the canvas and if points can be edited.\n *\n * @function\n * @returns {boolean}\n */\n @and('normalizedPoints.length', 'canEditPoints')\n drawButtonsEnabled;\n\n /**\n * We want to hide the 'Clear Canvas' button from the user if and only if:\n * the camera supports entire FOV by default and they haven't begun drawing an AOI.\n * In all other cases, display the clear canvas button.\n *\n * @function\n * @returns {boolean}\n */\n @computed('defaultEntireFieldOfView', 'supportsMultipleDrawings', 'userHasInteractedWithDraw')\n get displayClearButton() {\n return !this.supportsMultipleDrawings && (!this.defaultEntireFieldOfView || this.userHasInteractedWithDraw);\n }\n\n /**\n * Text that is displayed on the button used to clear a shape.\n *\n * @return {string}\n */\n @computed('shapeOfDrawing', 'clearButtonTextOverride')\n get clearButtonText() {\n if (this.clearButtonTextOverride) {\n return this.clearButtonTextOverride;\n }\n\n switch (this.shapeOfDrawing) {\n case Line:\n return this.intl.tc(this, 'clearShapeTripwire');\n case CustomShape:\n return this.intl.tc(this, 'clearShapeGroundZone');\n default:\n return this.intl.tc(this, 'generic.clear');\n }\n }\n\n /**\n * Whether or not the line is currently set to use any direction.\n *\n * @type {boolean}\n */\n @equal('direction', AnyDirection)\n usingAnyDirection;\n\n /**\n * Gets the camera's forced aspect ratio.\n *\n * @return {number}\n */\n @computed('camera.forcedAspectRatio')\n get aspectRatio() {\n return this.camera.get('forcedAspectRatio') || DEFAULT_WIDTH / DEFAULT_HEIGHT;\n }\n\n /**\n * Gets the maximum allowable width for the video.\n * This is either based on the MAX_NUM_PLAYER_PIXELS or the maxHeight value, depending on which factor is more limiting.\n *\n * @return {number}\n */\n @computed('aspectRatio', 'maxHeight')\n get maxAllowableWidth() {\n const { aspectRatio, maxHeight } = this,\n maxWidthBasedOnAspectRatio = Math.sqrt(aspectRatio * MAX_NUM_PLAYER_PIXELS),\n maxHeightBasedOnAspectRatio = maxWidthBasedOnAspectRatio / aspectRatio;\n\n if (maxHeight && maxHeightBasedOnAspectRatio > maxHeight) {\n return maxHeight * aspectRatio;\n }\n\n return maxWidthBasedOnAspectRatio;\n }\n\n // region Component Lifecycle Hooks.\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-hooks\n init() {\n super.init(...arguments);\n\n this.verifyDrawingIndexAssumptions();\n\n if (this.shapeOfDrawing === None) {\n const { id, deviceModel, firmwareVersion } = this.camera,\n sentryExtras = {\n deviceId: id,\n deviceModel,\n firmwareVersion\n },\n sentryTags = { deviceModel, firmwareVersion },\n fullErrorMessage = 'Attempted to draw with shape of None';\n\n sentryWithScopeAndError(fullErrorMessage, sentryExtras, sentryTags);\n\n // Take a guess which shape the user should be drawing.\n const hasLineDrawing = this.drawingIndexes.some(\n (index) => this.dictionaryOfDrawings[index].points.length === MAXIMUM_NUMBER_OF_TRIPWIRE_POINTS\n );\n this.shapeOfDrawing = hasLineDrawing ? Line : CustomShape;\n }\n\n const {\n shapeOfDrawing,\n detectionDurations,\n supportsDurationAreaOfInterest,\n dictionaryOfDrawings,\n drawingIndexes\n } = this;\n\n // Set a default duration value to the smallest value if we have a CustomShape drawing with a default -1 duration.\n if (shapeOfDrawing === CustomShape && supportsDurationAreaOfInterest && detectionDurations.length) {\n drawingIndexes.forEach((index) => {\n if (dictionaryOfDrawings[index].duration === -1) {\n dictionaryOfDrawings[index].duration = detectionDurations[0].value;\n }\n });\n }\n\n // Set initial drawing instructions for editing a shape.\n this.drawingInstructions =\n this.normalizedPoints.length || this.defaultEntireFieldOfView\n ? this.editShapeInstructions\n : this.newShapeInstructions;\n\n this.infoModalInstructions = this.drawingInstructions;\n\n // Initialize pointsForAdjustedCanvas array in order to hold points adjusted to the page's canvas size for display purposes.\n this.pointsForAdjustedCanvas = [];\n\n // Method to rerender the Draw Window\n const resizeListener = () => {\n const videoPlayer = document.querySelector(`#${this.id} ${VIDEO_COMPONENT_CLASS}`),\n canvas = videoPlayer.querySelector(CANVAS_CLASS);\n\n if (canvas) {\n setUpCanvas.call(this, videoPlayer, canvas);\n }\n };\n\n // Set a window resize event to rerender the Draw Window\n this.dom.addListener(this, window, 'resize', resizeListener);\n\n // TODO(VID-49776): This is a short-term band-aid to allow an external component to clear\n // the selected drawing on the draw-window. In the longer term, we should to refactor this\n // component to be reactive to its arguments instead.\n this.clearSelectedShapeEventListener = this.onClearShape.bind(this, this.selectedDrawingIndex);\n addListener(this.drawWindowEventBus, EVENT_CLEAR_SELECTED_DRAWING, this.clearSelectedShapeEventListener);\n }\n\n /**\n * Teardown any event listeners that we've setup at runtime.\n */\n @action onWillDestroy() {\n removeListener(this.drawWindowEventBus, EVENT_CLEAR_SELECTED_DRAWING, this.clearSelectedShapeEventListener);\n }\n\n /**\n * This function checks that the dictionary of drawings we've been passed has valid indexes.\n * If we find bad values, we'll log specific errors and also reindex the dictionary.\n */\n verifyDrawingIndexAssumptions() {\n const { drawingIndexes, dictionaryOfDrawings } = this,\n hasIndexesLt0 = drawingIndexes.some((index) => index < 0),\n hasIndexesGteLength = drawingIndexes.some((index) => index >= drawingIndexes.length);\n\n if (hasIndexesLt0) {\n console.error(`Drawing dictionary had index below 0: ${drawingIndexes}`);\n }\n\n if (hasIndexesGteLength) {\n console.error(\n `Drawing dictionary had index greater than or equal to the number of drawings: ${drawingIndexes}`\n );\n }\n\n // Re-index the dictionary of drawings from 0 if there were any issues.\n if (hasIndexesLt0 || hasIndexesGteLength) {\n let reIndexedDictionaryOfDrawings = {};\n\n drawingIndexes.forEach((oldIndex, arrayIndex) => {\n reIndexedDictionaryOfDrawings[arrayIndex] = dictionaryOfDrawings[oldIndex];\n delete dictionaryOfDrawings[oldIndex];\n });\n\n // This sets the values in a way that it propagates back up to where they're initially passed in.\n drawingIndexes.forEach((_, arrayIndex) => {\n dictionaryOfDrawings[arrayIndex] = reIndexedDictionaryOfDrawings[arrayIndex];\n });\n\n // This triggers computed properties that rely on the dictionaryOfDrawings.\n this.dictionaryOfDrawings = dictionaryOfDrawings;\n }\n }\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-component-lifecycle-hooks\n didRender() {\n super.didRender(...arguments);\n\n const videoPlayer = document.querySelector(`#${this.id} ${VIDEO_COMPONENT_CLASS}`),\n canvas = videoPlayer.querySelector(CANVAS_CLASS);\n\n // When the popover becomes visible, it may try to resize\n // the video player despite the popover's absolute positioning.\n if (canvas && !this.shouldShowDisabledPopover) {\n // Set up the canvas used to display points and video feed.\n setUpCanvas.call(this, videoPlayer, canvas);\n }\n }\n\n // endregion\n\n // region Component event listeners.\n\n /**\n * Handles key presses on the draw window component.\n *\n * @param {KeyboardEvent} e\n */\n @action keyPressed(e) {\n const { detachShapeListeners, drawingCompleted } = this;\n\n // Is this the enter key AND is the shape NOT complete AND are we currently drawing?\n if (String(e.key) === 'Enter' && !drawingCompleted && detachShapeListeners) {\n // Finish drawing and detach event listeners.\n setPoint.call(this, true, e);\n detachShapeListeners();\n }\n }\n\n // endregion\n\n /**\n * Selects the drawing that we want to edit.\n *\n * @param {number} id The id of the button that was clicked.\n */\n @action\n onSelectDrawing(id) {\n const { normalizedPoints, drawingCompleted, dictionaryOfDrawings, selectedDrawingIndex } = this;\n\n // The current drawing is already selected.\n if (id === selectedDrawingIndex) {\n return true;\n }\n\n if (normalizedPoints.length && !drawingCompleted) {\n // Add error message and block user from changing the selected drawing.\n this.notificationManager.addError(this.intl.tc(this, 'cannotChangeShape'));\n return false;\n }\n\n this.selectedDrawingIndex = id;\n\n // Set the drawing instructions for the newly selected drawing.\n const newDrawing = dictionaryOfDrawings[id];\n this.drawingInstructions = newDrawing.points.length ? this.editShapeInstructions : this.newShapeInstructions;\n\n return true;\n }\n\n /**\n * Store the currently selected detection duration in the dirty instance.\n *\n * @param {string} detectionDuration\n */\n @action\n onDetectionDurationChange(detectionDuration) {\n this.setDuration(parseFloat(detectionDuration));\n }\n\n /**\n * Swap the direction in the model.\n */\n @action\n onSwitchDirections() {\n // Get current rule data needed for redrawing.\n let {\n canvas,\n canvasContext,\n shapeOfDrawing,\n direction,\n drawingCompleted,\n pointsForAdjustedCanvas,\n dictionaryOfDrawings,\n selectedDrawingIndex\n } = this;\n\n // If it's any direction.\n if (this.usingAnyDirection) {\n // Then don't update.\n return;\n }\n\n // Swap direction.\n direction = direction === RightToLeft ? LeftToRight : RightToLeft;\n this.setDirection(direction);\n\n // Draw everything.\n redrawAll(\n canvas,\n canvasContext,\n pointsForAdjustedCanvas,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingCompleted,\n shapeOfDrawing\n );\n }\n\n /**\n * Update model to use both directions.\n *\n * @param {Event} evt Change event from the checkbox input.\n */\n @action\n onBothDirectionsClicked(evt) {\n const { canvasContext, dictionaryOfDrawings, selectedDrawingIndex, pointsForAdjustedCanvas } = this;\n\n // If we are showing labels we want to keep the 'Enter' text on the same side.\n if (canvasContext.showEnterExitText && this.direction === RightToLeft) {\n // Reverse the points in the dictionary.\n dictionaryOfDrawings[selectedDrawingIndex].points.reverse();\n pointsForAdjustedCanvas.reverse();\n }\n\n this.setDirection(evt.target.checked ? AnyDirection : LeftToRight);\n\n // Draw everything.\n redrawAll(\n this.canvas,\n canvasContext,\n pointsForAdjustedCanvas,\n dictionaryOfDrawings,\n selectedDrawingIndex,\n this.drawingCompleted,\n this.shapeOfDrawing\n );\n }\n\n /**\n * Toggle whether the selected drawing is enabled/disabled.\n *\n * @param {number} index The index of the shape we want to enable/disable.\n */\n @action\n toggleDrawingEnabled(index) {\n // Make sure the drawing we're editing is selected.\n if (!this.onSelectDrawing(index)) {\n return;\n }\n }\n\n /**\n * Toggles the value of shouldShowDisabledPopover.\n */\n @action\n toggleDrawingsDisabledPopover() {\n this.shouldShowDisabledPopover = !this.shouldShowDisabledPopover;\n }\n\n /**\n * Erases the shape entered by the user (or the default if they haven't drawn one yet).\n *\n * @param {number} index The index of the shape to erase.\n */\n @action\n onClearShape(index) {\n // Get the canvas's 2D context.\n const {\n canvas,\n canvasContext,\n newShapeInstructions,\n shapeOfDrawing,\n drawingCompleted,\n dictionaryOfDrawings,\n selectedDrawingIndex\n } = this;\n\n // Make sure the drawing we're editing is selected.\n if (!this.onSelectDrawing(index)) {\n return;\n }\n\n // Get the canvas and its 2D context and clear the entire space.\n clearShape.call(this, canvas, canvasContext);\n\n this.setNormalizedPoints([]);\n this.pointsForAdjustedCanvas = [];\n this.setDrawingCompleted(false);\n this.drawingInstructions = newShapeInstructions;\n this.didClearCanvas = true;\n\n // Draw remaining points.\n redrawAll(\n canvas,\n this.canvasContext,\n [],\n dictionaryOfDrawings,\n selectedDrawingIndex,\n drawingCompleted,\n shapeOfDrawing\n );\n }\n\n /**\n * Fired when the svg-info icon is clicked on.\n */\n @action\n showMoreInfoModal() {\n const { modals, moreInfoModalData, store, stats } = this,\n { title, info } = moreInfoModalData;\n\n logEventIfHasNoOvRules(store, stats, AnalyticsRulesLearnMoreModalOpened);\n\n modals.showInfoModal({\n title,\n info,\n css: 'recording-rule-draw-window-modal-info-dialog'\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n \\n {{yield (component \\'empty-container\\') to=\\\"overlay\\\"}}\\n \\n \\n
    \\n
    \\n{{yield (component\\n \\'video/rules/draw-window/players/player-info\\'\\n displayStreamRestartButton=this.isDisconnected\\n restartButtonDisabled=(not this.canStreamVideo)\\n restartButtonText=this.disconnectedButtonText\\n restartButtonAction=this.onRetry)\\n to=\\\"player-info\\\"\\n}}\",{ moduleName: \"customer-site/components/video/rules/draw-window/players/analytics-live-view-player/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { next } from '@ember/runloop';\nimport { task } from 'ember-concurrency';\nimport BaseLivePlayer from 'customer-site/components/video/video-player/base-live-player/index';\nimport { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport { NoPermissions } from 'customer-site/enums/VideoSourceError';\nimport { getPlayerId } from '@adc/video-player/components/base-player';\nimport { BaseVideoIdPrefix } from '@adc/video-player/components/live-video-player';\n\nimport './_style.scss';\n\nexport default class AnalyticsLiveViewPlayer extends BaseLivePlayer {\n /**\n * GUID used for the webrtc device ID.\n *\n * @type {string}\n */\n guid = guidFor(this);\n\n /** @override */\n playerType = StreamUsage.LiveViewAnalytics;\n\n /**\n * AnalyticsLiveViewPlayer uses `video/videoSources/analyticsVideoSources` under the hood.\n */\n useHdStream = false;\n\n /**\n * The playback state controllers for each player.\n */\n playbackStateControllers = null;\n\n /**\n * Refers to index of controllers.\n *\n * @type {int}\n */\n @tracked index = 0;\n\n /**\n * Controller for live-view\n *\n * @type {OespPlaybackStateController}\n */\n @tracked playbackStateController = null;\n\n /**\n * The player id we want to use for the WebRTC player.\n * This id needs the camera's id since we sometimes use that in base-video-player.js.\n * However this also needs to be unique since the analytics draw page may sometimes show two WebRTC players.\n *\n * @type {string}\n */\n @computed('camera.id', 'guid')\n get analyticsDeviceId() {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-get, ember/classic-decorator-no-classic-methods\n return `${this.guid}_${this.get('camera.id')}`;\n }\n\n /**\n * Whether or not we can stream the video.\n *\n * @type {boolean}\n */\n @computed('errorEnum')\n get canStreamVideo() {\n return NoPermissions !== this.errorEnum;\n }\n\n /**\n * The text to show on the restart stream button when the stream has disconnected.\n *\n * @function\n * @returns {string}\n */\n @computed('hasAutoplayFailed', 'hasStreamTimedOut', 'intl', 'isDisconnected')\n get disconnectedButtonText() {\n if (!this.isDisconnected) {\n return null;\n }\n\n return this.hasStreamTimedOut || this.hasAutoplayFailed\n ? this.intl.t('generic.video.play')\n : this.intl.t('generic.retry');\n }\n\n /**\n * Attaches the camera's playback state controller to the OESP controller and starts the live view relay\n *\n * @param {ThirdPartyAnalyticsCamera} camera\n * @param {OespPlaybackStateController} playbackStateController\n */\n @action\n onAttachToOespController(camera, playbackStateController) {\n camera.playbackStateController = playbackStateController;\n\n playbackStateController.setupPlayers(null, 1, this.useHdStream);\n playbackStateController.startOespLiveRelay();\n }\n\n /**\n * Sets the oesp properties after initializing the videosource.\n *\n * @param {OespPlaybackStateController} controller The playback state controller used for OESP live view relays.\n *\n * @type {Task}\n */\n @task *setOespProperties(controller) {\n // This delays sending the playbackStateController to the openeye-player.\n // We want the player to be rendered before we attempt to connect the controller.\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n yield next(() => {});\n this.hasStreamConnected = false;\n this.index = controller.playerCount++;\n this.playbackStateController = controller;\n }\n\n /**\n * Restarts video playback for web players.\n */\n @action\n onRetry() {\n // Need to call play() on the video player here because when auto-play is disabled,\n // play() has to be called as a direct result of a user action, otherwise the play promise\n // will be rejected again during the stream connection process.\n if (this.hasAutoplayFailed) {\n const webrtcPlayerId = getPlayerId(BaseVideoIdPrefix, this.analyticsDeviceId);\n document.getElementById(webrtcPlayerId).play();\n }\n\n this.initializeVideoSource.perform();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n {{#if @displayMoreInfoLink}}\\n \\n {{@infoModalLearnMore}}\\n \\n {{/if}}\\n
    \\n
    \\n
    \\n {{#if @displayClearButton}}\\n \\n {{/if}}\\n {{#if @displayStreamRestartButton}}\\n \\n {{/if}}\\n
    \\n
    \",{ moduleName: \"customer-site/components/video/rules/draw-window/players/player-info/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\ninterface VideoRulesDrawWindowPlayersPlayerInfoSignature {\n Element: HTMLDivElement;\n Args: {\n infoModalInstructions: string;\n displayMoreInfoLink: boolean;\n showMoreInfoModal: VoidFunction;\n infoModalLearnMore: string;\n displayClearButton: boolean;\n clearButtonDisabled?: boolean;\n clearButtonText: string;\n clearButtonAction: VoidFunction;\n displayStreamRestartButton: boolean;\n restartButtonDisabled?: boolean;\n restartButtonText: string;\n restartButtonAction: VoidFunction;\n };\n}\n\nconst VideoRulesDrawWindowPlayersPlayerInfo = templateOnlyComponent();\nexport default VideoRulesDrawWindowPlayersPlayerInfo;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Rules::DrawWindow::Players::PlayerInfo': typeof VideoRulesDrawWindowPlayersPlayerInfo;\n }\n}\n","import { action } from '@ember/object';\n\nexport const SHOW_MESSAGE = 'showMessage',\n CLEAR_MESSAGE = 'clearMessage',\n RESUME = 'resume',\n PAUSE = 'pause',\n SEEK = 'seek',\n SET_SPEED = 'setSpeed',\n RESET = 'reset';\n\nconst commandNames = [SHOW_MESSAGE, CLEAR_MESSAGE, RESUME, PAUSE, SEEK, SET_SPEED, RESET];\n\n/**\n * @classDesc\n *\n * Class to store and execute player control functions.\n *\n * @class PlayersControl\n * @memberOf components.video.utils\n */\nexport default class PlayersControl {\n /**\n * Sets up the individual sub-maps for each command.\n * Also sets up the commands so they are callable from instances of this class.\n */\n constructor() {\n // A map of command names to sub-maps of video player indices to functions\n // Structured as Map>\n this.playerCommands = new Map();\n\n commandNames.forEach((commandName) => {\n this.playerCommands.set(commandName, new Map());\n });\n\n this[SHOW_MESSAGE] = (...args) => this._baseFunction(SHOW_MESSAGE, ...args);\n this[CLEAR_MESSAGE] = (...args) => this._baseFunction(CLEAR_MESSAGE, ...args);\n this[RESUME] = (...args) => this._baseFunction(RESUME, ...args);\n this[PAUSE] = (...args) => this._baseFunction(PAUSE, ...args);\n this[SEEK] = (...args) => this._baseFunction(SEEK, ...args);\n this[SET_SPEED] = (...args) => this._baseFunction(SET_SPEED, ...args);\n this[RESET] = (...args) => this._baseFunction(RESET, ...args);\n }\n\n /**\n * A private base function meant to execute all of the functions matching a given commandName.\n *\n * @param {String} commandName\n * @param {...any} args\n * @returns {boolean} If all functions succeeded\n */\n _baseFunction(commandName, ...args) {\n const playerCommandFunctions = this.playerCommands.get(commandName).values();\n\n // If any of the player functions have failed.\n let playerFunctionsFailed = false,\n // All players must return false for controller commands to be skipped, since controller are shared.\n shouldRunControllerCommands = null;\n\n for (const playerCommandFunction of playerCommandFunctions) {\n const returnValue = playerCommandFunction(...args);\n\n if (returnValue) {\n // If there is a return value, expect it to be the result of the function and if we want to run the controller commands.\n const { result, runControllerCommands } = returnValue;\n\n playerFunctionsFailed = playerFunctionsFailed || result === false;\n shouldRunControllerCommands = shouldRunControllerCommands || runControllerCommands;\n }\n }\n\n let controllerFunctionFailed = false;\n if (shouldRunControllerCommands ?? true) {\n const result = this.controllerCommands(commandName, ...args);\n\n if (result === false) {\n controllerFunctionFailed = true;\n }\n }\n\n // Return if we have no failures\n return !playerFunctionsFailed && !controllerFunctionFailed;\n }\n\n /**\n * Action to delete the stored commands for the video player associated with the camera index.\n *\n * @param {number} cameraIndex\n */\n @action deletePlayerCommands(cameraIndex) {\n commandNames.forEach((commandName) => {\n this.playerCommands.get(commandName).delete(cameraIndex);\n });\n }\n\n /**\n * Action to store the passed in functions, so they can be called from an instance of this class.\n *\n * @param {number|null} cameraIndex\n * @param {Array} commandFunctions\n */\n @action updateCommands(cameraIndex, commandFunctions) {\n // When no camera index is passed in, then we are setting the playback controller commands.\n if (cameraIndex == null) {\n this.controllerCommands = commandFunctions;\n } else {\n // Sets command functions for the video player matching the camera index in video-streaming-players.\n commandFunctions.forEach(([commandName, commandFunction]) => {\n this.playerCommands.get(commandName).set(cameraIndex, commandFunction);\n });\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed, action, setProperties, set } from '@ember/object';\nimport { equal, or } from '@ember/object/computed';\nimport { getOwner } from '@ember/owner';\nimport { inject as service } from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport Step, { StepDisplayType } from 'customer-site/components/help-tour/step';\nimport StepContent from 'customer-site/components/help-tour/step-content';\nimport Tour from 'customer-site/components/help-tour/tour';\nimport { MICROPHONE_ACCESS_COOKIE_NAME } from 'customer-site/components/video/video-player/base-video-player';\nimport { FULL_PTZ_PRESET } from 'customer-site/components/video/video-player/overlay/base-overlay';\nimport { getOrCreateOespControllerWithUpdate } from 'customer-site/components/video/video-streaming/video-streaming-features/index';\nimport ForcedStreamingMethodEnum from 'customer-site/enums/ForcedStreamingMethod';\nimport { WarningSoundFeatureTour } from 'customer-site/enums/HelpTourType';\nimport { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport { PlayerRetryConnection } from 'customer-site/enums/TrackedEvent';\nimport {\n PLAYING_STATE,\n INITIALIZING_STATE,\n LOADING_STATE,\n FROZEN_STATE,\n DISCONNECTED_STATE\n} from 'customer-site/enums/VideoPlayerStateEnum';\nimport {\n AutoplayFailed,\n LiveStreamTimeout,\n LiveStreamConnectionFailed,\n StreamDisconnected,\n WebRtcIceNegotiationFailed,\n StunReconnectionFailed\n} from 'customer-site/enums/VideoSourceError';\nimport { OESP } from 'customer-site/enums/WebStreamingPlayer';\nimport { areMicrophonePermissionsAllowed } from 'customer-site/utils/dom';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport WebrtcEndToEndStateController from '@adc/video-player/classes/state-controllers/webrtc-end-to-end-state-controller';\nimport WebrtcProxyPlaybackStateController from '@adc/video-player/classes/state-controllers/webrtc-proxy-playback-state-controller';\nimport { getPlayerId } from '@adc/video-player/components/base-player';\nimport { BaseVideoIdPrefix } from '@adc/video-player/components/live-video-player';\nimport { Disconnected } from '@adc/video-player/constants/player-messages';\nimport { WebRTCWaveFrontApiEndpoint } from '@adc/video-player/constants/wavefront';\nimport { getVideoSource, attemptProxy, reloadVideoSource } from '../../../../utils/video/general';\nimport BaseVideoPlayer from '../base-video-player';\n\n/**\n * Threshold to retry end-to-end if an issue occurs midstream.\n */\nconst RetryEndToEndMidstreamThresholdMs = 30000;\n\n/**\n * Reset the live view url, set the current state to the initializing state, and reset other stream variables.\n *\n * @private\n */\nfunction resetStreamStatus() {\n if (this.shouldResetEndToEndStreamFailed) {\n this.endToEndStreamFailed = false;\n }\n\n if (!this.retriedDirectAfterMidstreamIssue) {\n this.cachedWebRtcLogId = null;\n }\n\n // Any property that is NOT tracked that is computed/listened in the template/etc will need to use set.\n setProperties(this, {\n connectionStartTime: Date.now(),\n currentVideoSource: null,\n endToEndWebrtcConnectionInfo: null,\n proxyWebrtcConnectionInfo: null,\n hasAutoplayFailed: false,\n hasStreamConnected: false,\n hasStreamTimedOut: false,\n hasWebrtcIceNegotiationFailed: false,\n janusToken: null,\n playerState: INITIALIZING_STATE,\n playerUrl: '',\n webRtcLogId: null\n });\n this.shouldRetryEndToEndMidstream = false;\n this.isEndToEndStreamUsingTurn = false;\n this.haveReceivedWebrtcStats = false;\n}\n\n/**\n * Changes the stream quality of the current stream after quality has changed.\n * Currently, this is between HD and non-HD (roughly \"Medium\") streams.\n * End-to-End WebRTC streams send a new stream quality message; Proxy WebRTC and MJPEG streams restart their streams.\n *\n * @private\n */\nfunction changeStreamQuality() {\n const { isMjpeg, useHdStream, currentStreamIsEndToEnd, webrtcStateController, playerUsage } = this;\n\n // Toggling HD is already handled by video-streaming-features toggleStreamResolution\n if (playerUsage === OESP) {\n return;\n }\n\n if (!isMjpeg && currentStreamIsEndToEnd) {\n // WebRTC End-to-End is the only direct-to-device stream type. Here we send a message to change stream quality.\n webrtcStateController.setStreamQuality(useHdStream);\n } else {\n // All other stream cases (WebRTC proxy, MJPEG) currently just restart the whole stream connection.\n this.shouldResetEndToEndStreamFailed = true;\n this.initializeVideoSource.perform();\n }\n}\n\n/**\n * Show the Warning Sound feature tour if it has never been shown before.\n */\nfunction showWarningSoundTourIfFirstTime() {\n const { camera, shouldShowWarningSoundHelpTour } = this,\n { canSirenBeActivatedByLogin } = camera;\n\n if (shouldShowWarningSoundHelpTour && canSirenBeActivatedByLogin) {\n this.onWarningSoundTourShown();\n showWarningSoundHelpTour.call(this);\n }\n}\n\n/**\n * Start the help tour for the Warning Sound feature.\n */\nfunction showWarningSoundHelpTour() {\n const { contextManager, intl } = this;\n const { anchorSelector, tourTextKey } = getWarningSoundTourAnchorAndText.call(this);\n\n const warningSoundButtonStep = Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n attachTo: anchorSelector,\n content: intl.tc(this, `warningSoundTour.${tourTextKey}`),\n placement: 'top',\n scrollAlignToTop: false,\n stepOpened: () => (this.forceShowWarningSoundForHelpTour = true),\n stepClosed: () => (this.forceShowWarningSoundForHelpTour = false),\n buttons: {\n next: {\n show: true,\n text: intl.t('generic.ok')\n }\n }\n })\n });\n\n contextManager.helpTour.start(\n Tour.create({\n name: 'warning-sound-tour',\n steps: [warningSoundButtonStep],\n afterEnd() {\n contextManager.identityModel.markHelpTourAsCompleted(WarningSoundFeatureTour);\n }\n })\n );\n}\n\n/**\n * Get the anchor point and the localization key for the Warning Sound tour.\n *\n * @returns {{anchorSelector: string, tourTextKey: string}}\n */\nfunction getWarningSoundTourAnchorAndText() {\n const { playerIdHtml } = this,\n playerElementId = `#${playerIdHtml}`;\n\n let anchorSelector = `${playerElementId} .warning-sound-button`,\n tourTextKey = 'warningSoundButtonTour';\n\n // If the Warning Sound button is not present when the camera can use it\n // The anchor should be the \"more options\" popover button\n if (!document.querySelector(anchorSelector)) {\n anchorSelector = `${playerElementId} .more-options-button`;\n tourTextKey = 'moreOptionsButtonTour';\n }\n\n return {\n anchorSelector,\n tourTextKey\n };\n}\n\n/**\n * Retry end-to-end or fall back to proxy midstream (called if we get any midstream issues).\n */\nfunction handleEndToEndMidstreamReconnection() {\n if (this.shouldRetryEndToEndMidstream) {\n this.cachedWebRtcLogId = this.webRtcLogId;\n this.hasStreamRestartedMidstream = true;\n this.initializeVideoSource.perform();\n } else {\n this.attemptProxyReconnection();\n // Set forceProxy to true so once we go to proxy, we will continue retrying proxy upon stream timeout.\n this.forceProxy = !this.forceEndToEndFromQueryParam;\n }\n}\n\n/**\n * Sets the current state of the player as disconnected.\n *\n * @param {boolean} connectedThroughProxy Did we ever successfully connect through proxy before disconnecting?\n *\n * @private\n */\nfunction setDisconnectedState(connectedThroughProxy) {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n return;\n }\n\n const { hasAutoplayFailed, hasStreamConnected, hasWebrtcIceNegotiationFailed } = this,\n // We assume the stream has timed out if: 1) we actually set the timeout bool from a WebRTC timeout message,\n // or we are using the MJPEG player and we were connected through the proxy.\n // MJPEG doesn't get a timeout message on disconnect, so we assume proxy disconnections are from a timeout.\n hasStreamTimedOut = this.hasStreamTimedOut || (this.isMjpeg && connectedThroughProxy);\n\n if (hasWebrtcIceNegotiationFailed) {\n set(this, 'streamConnectionErrorEnum', WebRtcIceNegotiationFailed);\n } else if (hasStreamTimedOut) {\n set(this, 'streamConnectionErrorEnum', LiveStreamTimeout);\n } else if (hasStreamConnected) {\n set(this, 'streamConnectionErrorEnum', StreamDisconnected);\n } else if (hasAutoplayFailed) {\n set(this, 'streamConnectionErrorEnum', AutoplayFailed);\n } else if (this.shouldForceEndToEndWithExtendedTimeouts) {\n set(this, 'streamConnectionErrorEnum', StunReconnectionFailed);\n } else {\n set(this, 'streamConnectionErrorEnum', LiveStreamConnectionFailed);\n }\n\n this.shouldForceEndToEndWithExtendedTimeouts = false;\n this.didTwoWayAudioConnectionRefresh = false;\n this.displayPanTiltOptions = false;\n this.displayPanTiltPopover = false;\n this.forceProxyAfterDbRefresh = false;\n this.shouldResetEndToEndStreamFailed = true;\n this.retriedDirectAfterMidstreamIceFailure = false;\n this.hasIceFailedAgainUponMidstreamReload = false;\n this.cameraSpeakerAlreadyInUse = false;\n this.displayAssociatedDevicesActionPopover = false;\n this.displayOperatorAudioNotAvailablePopover = false;\n this.cameraRetriedInOperatorSite = false;\n setProperties(this, {\n hasStreamTimedOut,\n playerState: DISCONNECTED_STATE\n });\n\n // Pass along disconnected state to International Video test page if this player is being used by the page\n this.internationalWebRtcEvent && this.internationalWebRtcEvent(this.camera.id, Disconnected);\n\n // Are we here because we are transitioning from a playing state to a not-playing state?\n if (hasStreamConnected) {\n this.onPlayEndedForCamera?.();\n }\n\n this.camera.turnOffInactiveCameraLights?.();\n}\n\n/**\n * Is the given query parameter present in the URL in the format paramName=1?\n *\n * @param {string} paramName the query param to check?\n *\n * @returns {boolean}\n */\nexport function hasQueryParam(paramName) {\n return window.location.search.indexOf(`${paramName}=1`) > 0;\n}\n\n/**\n * @classdesc\n * Component for displaying a video player for live view.\n */\nexport default class BaseLivePlayer extends BaseVideoPlayer {\n /** @override */\n playerType = StreamUsage.LiveView;\n\n @service contextManager;\n @service intl;\n @service modals;\n @service stats;\n @service envSettings;\n\n tagName = '';\n\n /**\n * The camera model we are connecting to for streaming.\n *\n * @type {BaseCamera}\n */\n camera = null;\n\n /**\n * The current video source (HD or SD) selected for this stream.\n * This comes from camera.currentVideoSource (which is a computed property) when we have a current stream.\n *\n * @type {LiveVideoSource|LiveVideoHighestResSource}\n */\n @tracked currentVideoSource;\n\n /**\n * The state controller we are using for WebRTC streams.\n * This can do things like updating stream quality or audio status for WebRTC end-to-end streams.\n *\n * @type {WebrtcEndToEndStateController}\n */\n @tracked webrtcStateController;\n\n //#region Overlay and Sizing\n\n /**\n * The WebRTC player id.\n *\n * @function\n * @returns {string}\n */\n @computed('camera', 'playerType', 'playerId')\n get webrtcPlayerId() {\n const { camera, playerType, playerId } = this;\n\n const analyticsDeviceId = `${playerId}_${camera.id}`;\n\n return playerType === StreamUsage.LiveViewAnalytics\n ? getPlayerId(BaseVideoIdPrefix, analyticsDeviceId)\n : getPlayerId(BaseVideoIdPrefix, camera.id);\n }\n\n //#endregion Overlay and Sizing\n\n //#region HD Streaming\n\n /**\n * Should we attempt to use the Hd stream? This is toggled outside of this component.\n *\n * @type {boolean}\n */\n useHdStream = true;\n\n //#endregion HD Streaming\n\n //#region Player States\n\n /**\n * The current state of the player.\n *\n * @type {number}\n */\n playerState = INITIALIZING_STATE;\n\n /**\n * The ForcedStreamingMethodEnum used to represent if we're forcing a stream type via query param.\n *\n * @type {number}\n */\n @tracked\n forcedStreamingMethodFromQueryParam = ForcedStreamingMethodEnum.NoForcedStreamingMethod;\n\n /**\n * A component variable for whether we want to force a proxy stream to occur.\n * This is based on the query param passed in, and sometimes other state changes within the stream's lifetime.\n *\n * @type {boolean}\n */\n forceProxy = false;\n\n /**\n * Should we force the player to only connect through proxy based on the page's query param?\n *\n * @type {boolean}\n */\n @equal('forcedStreamingMethodFromQueryParam', ForcedStreamingMethodEnum.ForceWebRTCProxy)\n forceProxyFromQueryParam;\n\n /**\n * Should we force the player to only connect through end-to-end based on the page's query param?\n *\n * @type {boolean}\n */\n @equal('forcedStreamingMethodFromQueryParam', ForcedStreamingMethodEnum.ForceWebRTCEndToEnd)\n forceEndToEndFromQueryParam;\n\n /**\n * Should we force this live stream to use OESP streaming based on the page's query param?\n * This is only relevant for cameras that support both WebRTC and OESP streaming.\n *\n * @type {boolean}\n */\n @equal('forcedStreamingMethodFromQueryParam', ForcedStreamingMethodEnum.ForceOESP)\n forceOespFromQueryParam;\n\n /**\n * The percentage amount that the camera feed has loaded.\n *\n * @type {number}\n */\n loadingPercentage = 0;\n\n /**\n * Is the video player currently initializing before we start loading the stream?\n *\n * @function\n * @returns {boolean}\n */\n @equal('playerState', INITIALIZING_STATE)\n isInitializing;\n\n /**\n * Is the camera currently loading the stream?\n *\n * @function\n * @returns {boolean}\n */\n @equal('playerState', LOADING_STATE)\n isLoading;\n\n /**\n * Is the camera feed currently playing?\n *\n * @function\n * @returns {boolean}\n */\n @equal('playerState', PLAYING_STATE)\n isPlaying;\n\n /**\n * Is the camera stream frozen?\n *\n * @function\n * @returns {boolean}\n */\n @equal('playerState', FROZEN_STATE)\n isFrozen;\n\n /**\n * Is the camera stream playing or frozen?\n *\n * @function\n * @returns {boolean}\n */\n @or('isPlaying', 'isFrozen')\n isPlayingOrFrozen;\n\n //#endregion Player States\n\n //#region Live View Stream Issue Handling\n\n /**\n * Did this camera attempt a WebRTC end-to-end stream that then failed?\n *\n * @type {boolean}\n */\n endToEndStreamFailed = false;\n\n /**\n * Should we retry end-to-end if we get an issue midstream?\n *\n * @type {boolean}\n */\n @tracked shouldRetryEndToEndMidstream = false;\n\n /**\n * Have we retried an end-to-end stream after an ICE negotiation failure midstream? If true, show the disconnected overlay.\n *\n * @type {boolean}\n */\n @tracked retriedDirectAfterMidstreamIceFailure = false;\n\n /**\n * Have we retried an end-to-end stream due to any midstream issues? If true, don't reset the cached WebRTC log id.\n *\n * @type {boolean}\n */\n @or('retriedDirectAfterMidstreamIceFailure', 'shouldRetryEndToEndMidstream')\n retriedDirectAfterMidstreamIssue;\n\n /**\n * Our operator site (VV/EE) sometimes disconnect end-to-end streams on purpose to end a recording,\n * or we disconnect end-to-end streams on purpose due to TURN usage. Timeout the end-to-end stream in those cases.\n *\n * @returns {boolean}\n */\n @computed('isStreamingEndToEnd', 'isOperatorSite', 'isEndToEndStreamUsingTurn')\n get shouldTimeoutEndToEndStream() {\n return (this.isOperatorSite || this.isEndToEndStreamUsingTurn) && this.isStreamingEndToEnd;\n }\n\n /**\n * Have we detected that the camera speaker may already be in use for this camera?\n *\n * @type {boolean}\n */\n @tracked cameraSpeakerAlreadyInUse = false;\n\n //#endregion Live View Stream Issue Handling\n\n //#region Live View Logging\n\n /**\n * The datetime that we started retrieving the video source to stream.\n *\n * @type {Date|null}\n */\n connectionStartTime = null;\n\n //#endregion Live View Logging\n\n //#region BaseVideoPlayer Overrides\n\n /** @override */\n onPlayStarted() {\n super.onPlayStarted(...arguments);\n\n if (this.currentStreamIsEndToEnd) {\n this.enableRetryEndToEndMidstreamTask.perform();\n\n // Because the stream quality can change outside of the stream,\n // let's send a stream quality message to ensure the stream starts at HD/non-HD properly.\n this.toggleHdStream();\n }\n\n // Reset retriedDirectAfterMidstreamIceFailure upon onPlayStarted, so if we get an ICE failure midstream\n // we will attempt to restart the stream before showing the disconnected overlay.\n this.retriedDirectAfterMidstreamIceFailure = false;\n // Reset cachedWebRtcLogId to upon onPlayStarted, since there is a new webRtcLogId for the current stream.\n this.cachedWebRtcLogId = null;\n\n // If we previously had failed a WebRTC end-to-end stream but we are connecting now, then we have a successful proxy stream.\n // We log to Wavefront for cases where end-to-end fails but proxy works.\n const { endToEndStreamFailed, endToEndWebrtcConnectionInfo } = this;\n if (endToEndStreamFailed && !endToEndWebrtcConnectionInfo) {\n const report = this.store.createRecord('video/stream-logs/webrtc-wavefront-report-message', {\n message: 'EndToEndFallbackToProxy',\n isProxy: false,\n isVirtualCamera: this.camera.isVirtualCamera\n });\n\n this.ajax.apiRequest(WebRTCWaveFrontApiEndpoint, undefined, report, POST);\n }\n\n showWarningSoundTourIfFirstTime.call(this);\n\n this.onPlayStartedForCamera?.();\n }\n\n /** @override */\n onTimeout() {\n // If we get an onTimeout message from the WebRTC player, we know that it is from an actual proxy timeout, an end-to-end TURN timeout, or a purposeful VV/EE disconnection.\n // For MJPEG, we currently fake that assumption because we get a generic disconnect message.\n set(this, 'hasStreamTimedOut', true);\n this.attemptProxyReconnection();\n\n this.onCameraTimeout && this.onCameraTimeout();\n }\n\n /** @override */\n onPlayEnded() {\n if (this.isStreamingEndToEnd) {\n handleEndToEndMidstreamReconnection.call(this);\n } else {\n this.attemptProxyReconnection();\n }\n }\n\n /** @override */\n onAutoplayFailure() {\n super.onAutoplayFailure(...arguments);\n\n setDisconnectedState.call(this, false);\n }\n\n /** @override */\n onIceFailure() {\n super.onIceFailure(...arguments);\n\n // If we have successfully connected through direct, then we are getting an ICE failure midstream.\n // If we haven't retried direct after ICE failure, attempt to restart the stream. If we have, show the disconnected overlay.\n if (this.isStreamingEndToEnd && !this.retriedDirectAfterMidstreamIceFailure) {\n // Need to save the webRtcLogId here or else it will get reset to null (in resetStreamStatus) before we update the log.\n this.cachedWebRtcLogId = this.webRtcLogId;\n this.retriedDirectAfterMidstreamIceFailure = true;\n this.initializeVideoSource.perform();\n } else {\n this.hasIceFailedAgainUponMidstreamReload = this.retriedDirectAfterMidstreamIceFailure;\n this.attemptProxyReconnection();\n }\n }\n\n /** @override */\n onFrozen(playerId, { streamStuckAtFrozen } = {}) {\n super.onFrozen(...arguments);\n\n // If the stream has frozen for over 10 seconds, then we will call\n // handleEndToEndMidstreamReconnection to either retry end-to-end or fall back to proxy.\n if (streamStuckAtFrozen && this.isStreamingEndToEnd) {\n handleEndToEndMidstreamReconnection.call(this);\n }\n }\n\n /** @override */\n onCameraSpeakerAlreadyInUse(/* playerId */) {\n this.cameraSpeakerAlreadyInUse = true;\n }\n\n /** @override */\n attemptProxyReconnection(/* globalDeviceId, isTimeout */) {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n return;\n }\n\n const {\n attemptedDirectAndProxy,\n hasStreamConnected,\n forceProxyFromQueryParam,\n forceEndToEndFromQueryParam,\n isMjpeg,\n usesOesp,\n shouldTimeoutEndToEndStream,\n shouldForceEndToEndWithExtendedTimeouts\n } = this,\n attemptedDirectStream = !attemptedDirectAndProxy,\n connectedThroughProxy = attemptedDirectAndProxy && hasStreamConnected,\n // Note: WebRTC doesn't support MJPEG streaming; WebRTC is specifically only used with the new player for RTSP streams.\n usingWebRtc = !isMjpeg && !usesOesp,\n // If we are forcing proxy or end-to-end via testing query param, that is the only stream type we want to use. Don't retry.\n usingQueryParam = forceProxyFromQueryParam || forceEndToEndFromQueryParam,\n currentVideoSource = this.camera.get('currentVideoSource'),\n shouldNotAttemptProxy =\n attemptedDirectAndProxy ||\n usingQueryParam ||\n shouldTimeoutEndToEndStream ||\n shouldForceEndToEndWithExtendedTimeouts;\n\n if (attemptedDirectStream && usingWebRtc) {\n this.endToEndStreamFailed = true;\n }\n\n // If we don't want to fallback to proxy midstream during a direct connection, don't go to proxy. Show the disconnect screen.\n // Or, if we retried direct streaming after a midstream ICE negotiation failure and was unsuccessful, don't go to proxy. Show the disconnect screen.\n // Otherwise, we want to attempt the proxy connection. If that fails, show the disconnect screen.\n if (!attemptProxy.call(this, currentVideoSource, shouldNotAttemptProxy)) {\n setDisconnectedState.call(this, connectedThroughProxy);\n } else {\n this.createCurrentWebrtcStateController();\n }\n }\n\n /** @override */\n initializeVideoSource = task({}, async () => {\n // These are used to track the success of wakeUpBatteryCamera async to maintain load speeds\n let cameraRequestPromise = undefined;\n let failedWakeUpBatteryCamera = false;\n\n // If this is a battery camera let's wake it up to speed load time.\n if (\n (this.camera.get('usingGatewayForBackendAccess') || this.camera.get('deviceModel') === 'ADC-V731B') &&\n !this.isLoginAsLogin\n ) {\n cameraRequestPromise = this.ajax\n .apiRequest(`video/devices/cameras/wakeUpBatteryCamera?id=${this.camera.get('id')}`, null, {}, 'POST')\n .catch(() => (failedWakeUpBatteryCamera = true));\n }\n\n // Set on the camera is still required here, otherwise the function does not continue.\n this.camera.set('hdSelected', this.useHdStream);\n\n // Reset the stream for now so we force it to reconnect in case the stream has connected before.\n resetStreamStatus.call(this);\n\n // Cache values after the await so we have the most up-to-date values.\n const {\n camera,\n cannotDoBrowserUploadsForOperatorSite,\n useHdStream,\n hasGoneToPanTiltPreset,\n currentPreset,\n forceProxyFromQueryParam,\n forceEndToEndFromQueryParam: forceEndToEnd,\n forceOespFromQueryParam: forceOesp,\n forceProxyAfterDbRefresh,\n shouldForceEndToEndWithExtendedTimeouts\n } = this,\n videoSource = getVideoSource(camera, useHdStream),\n // Clicking \"Try Direct Connection\" should force STUN even when we have a QP.\n forceProxy =\n (forceProxyFromQueryParam || forceProxyAfterDbRefresh || cannotDoBrowserUploadsForOperatorSite) &&\n !shouldForceEndToEndWithExtendedTimeouts;\n\n const streamingProperties = await reloadVideoSource.call(this, videoSource, {\n forceProxy,\n forceEndToEnd,\n forceOesp\n });\n\n if (!streamingProperties) {\n // Get is required as videoSource is a proxy.\n set(this, 'videoSourceErrorEnum', videoSource.get('errorEnum'));\n\n setDisconnectedState.call(this, false);\n return false;\n }\n\n setProperties(this, streamingProperties);\n\n const {\n apexConnectionInfo,\n endToEndWebrtcConnectionInfo,\n proxyWebrtcConnectionInfo,\n didTwoWayAudioConnectionRefresh\n } = this;\n\n this.createCurrentWebrtcStateController();\n\n // Check if the user already has microphone permissions enabled for this site - if so, start two-way audio automatically.\n const areMicrophonePermissionsEnabled =\n didTwoWayAudioConnectionRefresh || (await areMicrophonePermissionsAllowed.call(this));\n\n set(this, 'hasStreamConnected', false);\n\n if (apexConnectionInfo?.apexId) {\n const oespControllerUpdateResult = getOrCreateOespControllerWithUpdate(\n getOwner(this),\n this.playbackStateControllers,\n apexConnectionInfo,\n true,\n // Try direct connection button will override the forced streaming method enforced by the queryparam.\n this.shouldForceEndToEndWithExtendedTimeouts\n ? ForcedStreamingMethodEnum.ForceWebRTCEndToEnd\n : this.forcedStreamingMethodFromQueryParam\n );\n this.playbackStateControllers = oespControllerUpdateResult.playbackStateControllers;\n const controller = oespControllerUpdateResult.controller;\n if (controller.token !== apexConnectionInfo.apexProxyToken) {\n controller.token = apexConnectionInfo.apexProxyToken;\n controller.setupPlayers(null, 1, this.useHdStream);\n controller.startOespLiveRelay();\n } else {\n this.setOespProperties.perform(controller);\n }\n\n apexConnectionInfo.isMicrophoneConnected = areMicrophonePermissionsEnabled;\n\n return;\n }\n\n if (endToEndWebrtcConnectionInfo) {\n endToEndWebrtcConnectionInfo.shouldForceEndToEndWithExtendedTimeouts =\n this.shouldForceEndToEndWithExtendedTimeouts;\n\n endToEndWebrtcConnectionInfo.isMicrophoneConnected = areMicrophonePermissionsEnabled;\n }\n\n if (proxyWebrtcConnectionInfo) {\n // For the operator portal, prevent audio if it is not allowed due to connection problems to VVCLIP.\n if (cannotDoBrowserUploadsForOperatorSite) {\n proxyWebrtcConnectionInfo.supportsAudio = false;\n }\n\n proxyWebrtcConnectionInfo.isMicrophoneConnected = areMicrophonePermissionsEnabled;\n }\n\n // If the camera has a preferred PTZ preset, only go there once while on this page.\n if (camera.preferredPanTiltPreset && !hasGoneToPanTiltPreset) {\n this.selectPreset(camera.preferredPanTiltPreset);\n this.hasGoneToPanTiltPreset = true;\n return true;\n }\n\n // If a camera can otherwise pan tilt, show the pan tilt arrows EXCEPT if we are in the (622) Full (unzoomed) preset,\n // since the camera cannot pan or tilt while not zoomed in.\n if (camera.canPanTilt && currentPreset !== FULL_PTZ_PRESET) {\n this.displayPanTiltOptions = true;\n }\n\n if (this.camera.supportsSiren && this.camera.isSirenPlaying) {\n const sirenInfo = await this.camera.get('cameraSiren').reload();\n if (sirenInfo.get('isActive')) {\n this.updateWarningSoundDisplayTask.perform(sirenInfo);\n }\n }\n\n // If we have a camera request, let's wait for it to complete async.\n if (cameraRequestPromise) {\n const waitForCameraResponse = async (promise) => {\n await promise;\n if (failedWakeUpBatteryCamera) {\n // The request could fail due to cert validation failures, so we should cut the stream\n this.playerUrl = '';\n setDisconnectedState.call(this, false);\n }\n };\n\n waitForCameraResponse(cameraRequestPromise);\n }\n\n return true;\n });\n\n //#endregion BaseVideoPlayer Overrides\n\n //#region Component Hooks\n\n /**\n * A function to turn off camera lights when the stream is inactive.\n * Set when starting to stream, and removed when the player is destroyed.\n */\n beforeUnloadEventListener = null;\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-hooks\n init() {\n super.init(...arguments);\n\n this.hasBlockedMicrophoneAccess =\n this.cookieManager.hasEssentialCookieTruthyValue(MICROPHONE_ACCESS_COOKIE_NAME);\n this.physicalPtzPosition = {\n panTiltX: 0,\n panTiltY: 0,\n zoomLevel: 0\n };\n\n const beforeUnloadEventListener = () => {\n this.camera.turnOffInactiveCameraLights?.();\n };\n\n // Add event listener for beforeunload\n window.addEventListener('beforeunload', beforeUnloadEventListener);\n\n this.beforeUnloadEventListener = beforeUnloadEventListener;\n\n this.initializeVideoSource.perform();\n }\n\n /** @override */\n willDestroy() {\n // Is the player we are destroying currently in an active playing state?\n if (this.hasStreamConnected && !this.isDisconnected) {\n this.onPlayEndedForCamera?.();\n }\n\n window.removeEventListener('beforeunload', this.beforeUnloadEventLisetner);\n\n // Ensure that camera lights are turned off when navigating to another page\n this.camera.turnOffInactiveCameraLights?.();\n\n this.webrtcStateController?.willDestroy();\n super.willDestroy(...arguments);\n }\n\n //#endregion Component Hooks\n\n //#region Actions\n\n /**\n * If the camera times out or auto-play fails, retry the connection upon clicking the 'retry' or 'play' button, respectively.\n */\n @action retryConnection() {\n // Need to call play() on the video player here because when auto-play is disabled,\n // play() has to be called as a direct result of a user action, otherwise the play promise\n // will be rejected again during the stream connection process.\n if (this.hasAutoplayFailed) {\n document.getElementById(this.webrtcPlayerId).play();\n } else {\n this.stats.logEvent(PlayerRetryConnection);\n }\n\n this.initializeVideoSource.perform();\n }\n\n /**\n * Toggles the HD stream quality of our video feed.\n */\n @action toggleHdStream() {\n changeStreamQuality.call(this);\n }\n\n //#endregion Actions\n\n //#region Tasks\n\n /**\n * Task to enable retrying end-to-end midstream if stream is able to run for 30 seconds.\n */\n @task *enableRetryEndToEndMidstreamTask() {\n yield timeout(RetryEndToEndMidstreamThresholdMs);\n this.shouldRetryEndToEndMidstream = this.isPlaying;\n }\n\n //#endregion Tasks\n\n //#region Helper Methods\n\n /**\n * Creates the current WebRTC state controller based on the current stream type.\n */\n createCurrentWebrtcStateController() {\n if (this.isMjpeg || this.playerUsage === OESP) {\n return;\n }\n\n if (this.currentStreamIsEndToEnd) {\n this.webrtcStateController = new WebrtcEndToEndStateController();\n } else {\n this.webrtcStateController = new WebrtcProxyPlaybackStateController(\n this.envSettings.getEnvironment()?.rootURL\n );\n }\n }\n\n //#endregion Helper Methods\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { action, computed, set, get, setProperties } from '@ember/object';\nimport { notEmpty, and, alias, equal, or } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { type Registry as ServiceRegistry } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { task, timeout } from 'ember-concurrency';\nimport {\n CLEAR_MESSAGE,\n PAUSE,\n RESET,\n RESUME,\n SEEK,\n SET_SPEED,\n SHOW_MESSAGE\n} from 'customer-site/components/video/utils/players-control';\nimport { PlayerSize } from 'customer-site/components/video/video-player/overlay/player-buttons/index';\nimport {\n FourPlusTwoPlusFourView,\n HybridView,\n OnePlusFiveView,\n OnePlusSevenView,\n TwoPlusEightView\n} from 'customer-site/components/video/video-streaming/video-streaming-features/index';\nimport { RelativeDirection } from 'customer-site/enums/RelativeDirection';\nimport {\n PLAYING_STATE,\n INITIALIZING_STATE,\n LOADING_STATE,\n FROZEN_STATE,\n DISCONNECTED_STATE,\n READY_STATE\n} from 'customer-site/enums/VideoPlayerStateEnum';\nimport WebStreamType from 'customer-site/enums/WebStreamType';\nimport { syncDewarpConfig } from 'customer-site/models/video/dewarp-config';\nimport {\n convertAbsolutePtzValuesToPctBased,\n convertPctBasedPtzValuesToAbsolute\n} from 'customer-site/models/video/digital-ptz-position';\nimport { propertiesObserverTrigger } from 'customer-site/utils/properties-observe';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { sentryWithScopeAndError, sentryWithScopeAndWarn } from '@adc/app-infrastructure/utils/sentry';\nimport WebRtcProxyPlaybackStateController from '@adc/video-player/classes/state-controllers/webrtc-proxy-playback-state-controller';\nimport { isUserCausedDisconnection } from '@adc/video-player/components/webrtc-player';\nimport { StreamingTypeLive, StreamingTypePlayback } from '@adc/video-player/constants/generic';\nimport {\n Initializing,\n Connecting,\n Playing,\n Paused,\n FailedToConnect,\n Disconnected,\n TimedOut,\n // renaming because otherwise this causes \"Throw Error(\" lines to fail\n Error as PlayerError,\n AutoplayFailure,\n IceFailure,\n Log,\n UpdateOsd,\n Frozen,\n PoorStartingConnection,\n CameraSpeakerAlreadyInUse\n} from '@adc/video-player/constants/player-messages';\nimport addDays from 'date-fns/addDays';\nimport { StreamUsage } from '../../../enums/StreamUsage';\nimport { NoError } from '../../../enums/VideoSourceError';\nimport { WebRTC, OESP, MJPEG } from '../../../enums/WebStreamingPlayer';\nimport {\n EndToEndSucceeded,\n EndToEndFailedNoFallback,\n ProxySucceeded,\n ProxyFailed,\n FallbackAndSucceededProxy,\n FallbackAndFailedProxy\n} from '../../../enums/WebrtcStreamConnectionResult';\nimport { getGlobalDeviceIdFromPlayerId } from '../../../utils/video/general';\n\nimport type BaseStateController from '@adc/video-player/classes/state-controllers/base-state-controller';\nimport type OespPlaybackStateController from '@adc/video-player/classes/state-controllers/oesp-playback-state-controller';\nimport type { StateInfo } from '@adc/video-player/components/base-player';\nimport type { SafeString } from '@ember/template';\nimport type { Pane } from '@oecommon/oscar-js';\nimport type { PlayerInfo } from 'customer-site/components/video/video-streaming/video-streaming-features/types';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type DewarpConfig from 'customer-site/models/video/dewarp-config';\nimport type DigitalPtzPosition from 'customer-site/models/video/digital-ptz-position';\nimport type WebrtcStreamLog from 'customer-site/models/video/stream-logs/webrtc-stream-log';\nimport type WebrtcStreamUpdateLog from 'customer-site/models/video/stream-logs/webrtc-stream-update-log';\nimport type ApexConnectionInfo from 'customer-site/models/video/video-sources/apex-connection-info';\nimport type { Task } from 'ember-concurrency';\nimport type {\n Limitations,\n Position,\n RelativeDirections,\n DigitalZoomPanMethod\n} from '../../../../../../addons/adc-ui-components/package/src/components/zoom-pan-overlay';\nimport type { EndToEndWebrtcConnectionInfo } from '../../../../../../addons/adc-video-player/package/src/types.ts';\nimport type { Dimensions, LayoutProperties, OEAudioInfo } from '../video-streaming/video-streaming-features/types';\nimport type PlaybackFeatures from './playback-features/index.ts';\n\n/**\n * The length of the 'wss://' string before the signalling server node in the signalling server URL.\n */\nconst beforeSSNodeLength = 6;\n\nconst CachedProperties = 'cachedProperties';\n\nconst MAX_XXSMALL_PLAYER_WIDTH = 180;\nconst MAX_XSMALL_PLAYER_WIDTH = 280;\nexport const MAX_SMALL_PLAYER_WIDTH = 420;\nconst MAX_MEDIUM_PLAYER_WIDTH = 560;\nconst DigitalPtzSaveWaitTimeMs = 10000;\n\n/**\n * Disconnection reasons for midstream ICE failures (used for WebRTC stream logs).\n */\nconst IceFailedMidstreamDisconnectionReason = 'ICE negotiation failed midstream.',\n IceFailedUponMidstreamReloadDisconnectionReason = 'ICE negotiation failed again upon midstream reload attempt.';\n\n/**\n * Functions used by updateCommands in playersControl\n */\nexport type Commands = Array<[string, (msg?: string | number) => void]>;\n\nexport type ErrorInfo = {\n errorMessage?: string | null;\n shouldRestartPlayer?: boolean;\n shouldRestartWebrtcModule?: boolean;\n};\n\nexport const MICROPHONE_ACCESS_COOKIE_NAME = 'hasBlockedMicrophoneAccess';\n\n/**\n * Properties relates to OSD\n */\ntype OsdProperties = Pick;\n\n/**\n * An object of the relative direction enums\n */\nexport function getRelativeDirections(): RelativeDirections {\n return {\n left: RelativeDirection.Left,\n down: RelativeDirection.Down,\n right: RelativeDirection.Right,\n up: RelativeDirection.Up,\n in: RelativeDirection.In,\n out: RelativeDirection.Out,\n reset: RelativeDirection.Reset\n };\n}\n\n/**\n * Function to house the playback state controller commands.\n *\n * @param commandName The name of the command being called\n * @param {any} value The matching value for the command being called or null when unneeded.\n *\n * @returns Functions return false on failure, and true otherwise.\n *\n * @memberOf components.video.VideoStreamingPlayers\n */\nexport function doOnPlaybackControllers(this: any, commandName: string, value?: string): boolean {\n // Seek and set speed require a value.\n if (!value && [SEEK, SET_SPEED].includes(commandName)) {\n return false;\n }\n\n const { playbackStateControllers } = this,\n // Webrtc controllers should not execute resume, seek, and setSpeed commands.\n // TODO: Video please clean up \"any\" types here\n controllers = [RESUME, SEEK, SET_SPEED].includes(commandName)\n ? playbackStateControllers?.filter(\n (controller: any) => !(controller instanceof WebRtcProxyPlaybackStateController)\n )\n : playbackStateControllers;\n\n let commandSucceeded = true;\n\n controllers?.forEach((controller: any) => {\n switch (commandName) {\n case SHOW_MESSAGE:\n case CLEAR_MESSAGE:\n // No actions need to be taken here.\n break;\n case RESUME:\n controller.playing = true;\n break;\n case PAUSE:\n controller.playing = false;\n break;\n case SEEK:\n (controller as any).seek(value);\n break;\n case SET_SPEED:\n controller.speed = parseInt(value || '');\n break;\n case RESET:\n controller.resetPlayers();\n break;\n default:\n console.warn(commandName + ' is not a valid command function');\n commandSucceeded = false;\n break;\n }\n });\n return commandSucceeded;\n}\n\n/**\n * Gets the player from the passed in playerDimensions.\n *\n * @param playerDimensions The dimensions of the player\n * @param defaultValue The fallback value to use when there are no player dimensions\n * @returns The player size used to determine a sizing class.\n *\n */\nexport function getPlayerSize(playerDimensions: Dimensions | null, defaultValue: number): number | null {\n const width = playerDimensions?.width ?? defaultValue;\n\n if (width <= 0) {\n return null;\n }\n\n if (width <= MAX_XXSMALL_PLAYER_WIDTH) {\n return PlayerSize.XXSmall;\n } else if (width <= MAX_XSMALL_PLAYER_WIDTH) {\n return PlayerSize.XSmall;\n } else if (width <= MAX_SMALL_PLAYER_WIDTH) {\n return PlayerSize.Small;\n } else if (width <= MAX_MEDIUM_PLAYER_WIDTH) {\n return PlayerSize.Medium;\n }\n\n return PlayerSize.Large;\n}\n\n/**\n * Tracks the local state at the video-player level.\n * Should only be used if we're not tracking the page state.\n *\n * @param newState The state to change the player state to\n * @param errorEnum\n */\nfunction updatePlayerState(this: BaseVideoPlayer, newState: number, errorEnum = NoError): void {\n this.setProperties({\n playerState: newState,\n streamConnectionErrorEnum: errorEnum,\n loadingPercentage: 0\n });\n}\n\n/**\n * This forces a db refresh of the camera's info, keeps track of that refresh, and either restarts the stream on success\n * or attempts proxy/disconnects the stream on failure.\n *\n * @param shouldRestartPlayer Should we force a db refresh on the camera and try to reload the video source?\n */\nfunction forceDbRefreshOrAttemptProxy(this: BaseVideoPlayer, playerId: string, shouldRestartPlayer?: boolean): void {\n const { restartCount, hasStreamConnected } = this,\n globalDeviceId = getGlobalDeviceIdFromPlayerId(playerId);\n\n if (!globalDeviceId) {\n return;\n }\n\n if (shouldRestartPlayer && !hasStreamConnected && restartCount < 1) {\n // Sometimes WebRTC streams fail due to outdated VPN IPs. Reload the camera from the db and attempt to connect one more time,\n // or just attempt proxy or disconnect if for some reason the db refresh fails.\n // Only do this if streams fail to connect on the first go, not if the stream has connected already.\n this.incrementProperty('restartCount');\n set(this, 'isRefreshingCameraFromDb', true);\n this.ajax\n .apiRequest(`video/devices/cameras/${globalDeviceId}/forceDbRefresh`, undefined, null, POST)\n .then(() => {\n set(this, 'isRefreshingCameraFromDb', false);\n\n // When we reinitialize this video source, force a proxy stream through since this refresh was for the proxy stream.\n // If we don't do this, end-to-end cameras will just refresh streams infinitely.\n this.shouldResetEndToEndStreamFailed = false;\n this.forceProxyAfterDbRefresh = true;\n return this.initializeVideoSource.perform(globalDeviceId);\n })\n .catch(() => {\n set(this, 'isRefreshingCameraFromDb', false);\n return this.attemptProxyReconnection(globalDeviceId);\n });\n return;\n }\n\n // In other error cases, we will just want to attempt proxy (if direct) or disconnect the stream.\n this.attemptProxyReconnection(globalDeviceId);\n}\n\n/**\n * Sets the web streaming log type on the webrtc/oe stream log based on the player type.\n */\nexport function setWebStreamingLogType(this: BaseVideoPlayer | PlaybackFeatures): void {\n switch (this.playerType) {\n case StreamUsage.Svr:\n this.webStreamingLogType = WebStreamType.Svr;\n break;\n case StreamUsage.SDCard:\n this.webStreamingLogType = WebStreamType.SdCard;\n break;\n case StreamUsage.LiveView:\n this.webStreamingLogType = WebStreamType.LiveView;\n break;\n case StreamUsage.LiveViewAnalytics:\n this.webStreamingLogType = WebStreamType.LiveViewAnalytics;\n break;\n case StreamUsage.LiveViewFieldOfView:\n this.webStreamingLogType = WebStreamType.LiveViewFieldOfView;\n break;\n default:\n break;\n }\n}\n\n/**\n * If a timing metric is negative, log the issue to Sentry along with the connection times.\n *\n * @param streamIceCompletionTimeMs The time it took for ICE negotiation to complete.\n * @param streamConnectionTimeMs The time it took for stream connection to complete (80%).\n * @param streamStartTimeMs The time it took from stream initialization to play started.\n */\nfunction logToSentryIfTimingMetricIsNegative(\n streamIceCompletionTimeMs: number,\n streamConnectionTimeMs: number,\n streamStartTimeMs: number\n): void {\n if (streamIceCompletionTimeMs < 0 || streamStartTimeMs - streamConnectionTimeMs < 0 || streamStartTimeMs < 0) {\n sentryWithScopeAndWarn(\n 'One or more WebRTC timing metrics is negative.',\n {\n streamIceCompletionTimeMs,\n streamConnectionTimeMs,\n streamStartTimeMs\n },\n undefined\n );\n }\n}\n\n/**\n * @classdesc\n *\n * Helps with the implementation of the @adc/locomote addon.\n */\nexport default class BaseVideoPlayer extends Component {\n @service declare cookieManager: ServiceRegistry['cookie-manager'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare store: ServiceRegistry['store'];\n @service declare locale: ServiceRegistry['locale'];\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-hooks\n init(): void {\n super.init();\n\n const { camera, playerType } = this;\n\n if (!camera || !playerType) {\n return;\n }\n\n const usageProtocolMapping = get(camera, 'usageProtocolMapping') as Record,\n playerUsage = usageProtocolMapping?.[playerType];\n\n if (playerUsage) {\n set(this, 'playerUsage', playerUsage);\n }\n\n setWebStreamingLogType.call(this);\n }\n\n /** @override */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-component-lifecycle-hooks\n didReceiveAttrs(): void {\n super.didReceiveAttrs();\n\n if (!this.updateCommands) {\n return;\n }\n\n if (propertiesObserverTrigger.call(this, ['playerUrl'], CachedProperties)) {\n const { cameraIndex, commands } = this,\n functions: Commands = commands.map(([commandFunctionName, commandFunction]) => [\n commandFunctionName,\n commandFunction.bind(this)\n ]);\n\n this.updateCommands(cameraIndex, functions);\n }\n }\n\n /** @override */\n willDestroy(): void {\n // Controller functions are normally called by PlayersControl.\n // But since this function isn't, we need to call it ourselves here.\n // This is also required to properly terminate OESP streams.\n doOnPlaybackControllers.call(this, RESET);\n\n this.deletePlayerCommands && this.deletePlayerCommands(this.cameraIndex);\n super.willDestroy();\n }\n\n /**\n * Argument function passed down.\n */\n updateShouldForceEndToEndWithExtendedTimeouts?: (newShouldForce: boolean) => void;\n\n /**\n * Enum for MJPEG\n */\n MJPEG: number = MJPEG;\n\n /**\n * Enum for OESP\n */\n OESP: number = OESP;\n\n /**\n * Enum for webrtc\n */\n WebRTC: number = WebRTC;\n\n /**\n * The camera model.\n */\n camera?: Promise | Camera;\n\n /**\n * The playback state controllers for each player.\n */\n playbackStateControllers?: BaseStateController[];\n\n /**\n * The index of the camera in the cameras array.\n */\n viewIndex?: number;\n\n /**\n * The dynamic dimensions of the video player.\n */\n dynamicVideoPlayerDimensions?: Dimensions;\n\n /**\n * Data needed for OESP streaming.\n */\n apexConnectionInfo?: ApexConnectionInfo;\n\n /**\n * If the videosource is using oesp for streaming instead of mjpeg/webrtc.\n */\n @notEmpty('apexConnectionInfo.apexId')\n declare usesOesp: boolean;\n\n /**\n * This tracks the SVR and Camera Player id currently playing audio.\n */\n oeAudioInfo?: OEAudioInfo;\n\n tagName = '';\n\n /**\n * The parameters which to provide to the video player component.\n */\n player: PlayerInfo | null = null;\n\n /**\n * The message to display on the player.\n */\n message: string | null = null;\n\n /**\n * Keep track if we've tried both direct and proxy URLs. We don't want to keep trying if both have been tried.\n */\n attemptedDirectAndProxy = false;\n\n /**\n * Is the current/latest-attempted stream going end-to-end (formerly \"direct\")?\n * True if end-to-end, false if proxy, and null if we did not get either stream url.\n */\n @tracked\n currentStreamIsEndToEnd: boolean | null = null;\n\n /**\n * Should we force a STUN stream during an end-to-end stream load with extended timeouts?\n */\n @tracked shouldForceEndToEndWithExtendedTimeouts = false;\n\n /**\n * Has the user blocked access to the microphone in the browser?\n *\n * @type {boolean}\n */\n @tracked hasBlockedMicrophoneAccess = false;\n\n /**\n * Has the stream actually connected? We sometimes use this to display different error messages\n * depending on whether the stream failed with or without connecting in the first place.\n */\n @tracked hasStreamConnected = false;\n\n /**\n * Are we currently streaming WebRTC end-to-end and has the stream started playing?\n */\n @and('currentStreamIsEndToEnd', 'hasStreamConnected')\n declare isStreamingEndToEnd: boolean;\n\n /**\n * Is the system enterprise?\n */\n isEnterprise = false;\n\n /**\n * URL we should use right now to play the stream with.\n */\n @tracked\n playerUrl: string | null = null;\n\n /**\n * The current state of the player.\n */\n playerState = INITIALIZING_STATE;\n\n /**\n * Is the camera stream disconnected?\n */\n @equal('playerState', DISCONNECTED_STATE)\n declare isDisconnected: boolean;\n\n /**\n * The percentage that the video source / camera feed has loaded.\n */\n loadingPercentage = 0;\n\n /**\n * The video source error enum used for displaying error messages specifically related to the video source.\n */\n videoSourceErrorEnum = NoError;\n\n /**\n * The current error enum from the stream connection.\n */\n streamConnectionErrorEnum = NoError;\n\n /**\n * The error enum used for if the player is disconnected or otherwise not able to stream.\n */\n @or('videoSourceErrorEnum', 'streamConnectionErrorEnum')\n declare errorEnum: boolean;\n\n /**\n * Has the stream timed out?\n */\n hasStreamTimedOut = false;\n\n /**\n * Is the player currently paused?\n */\n isPaused = false;\n\n /**\n * Is this player in the expanded state? This is toggled through the expand/minimize button.\n */\n isCameraExpanded = false;\n\n /**\n * The index of the player on the page\n */\n cameraIndex?: number;\n\n /**\n * A collection of simple properties related to the current layout. (Check the video-streaming-features component for the list of properties)\n */\n layoutProperties?: LayoutProperties;\n\n /**\n * The type of the player (live, sd card, svr, analytics).\n */\n playerType?: StreamUsage;\n\n /**\n * The type of the stream the player is using (WebRTC, OESP, MJPEG, Flash).\n */\n playerUsage?: number;\n\n /**\n * Log Id for the device, if OESP\n */\n oeLogId?: number;\n\n /**\n * The type of the log the WebRTC/OE stream is sending (SVR, SD Card, Live View, Live View Analytics, Live View FOV).\n */\n webStreamingLogType?: number;\n\n /**\n * Are we in single view (looking at just one camera independent of a camera group)?\n */\n singlePlayer = true;\n\n /**\n * If the popover should be made visible\n */\n showPopover = false;\n\n /**\n * Whether we are in RTL.\n */\n @alias('locale.isRtl')\n declare isRtl: boolean;\n\n /**\n * The id of the player in the html.\n */\n @computed('camera.id')\n get playerIdHtml(): SafeString {\n return htmlSafe(`player-${get(this.camera, 'id')}`);\n }\n\n /**\n * An object with the relative direction enum values\n */\n get relativeDirections(): RelativeDirections {\n return getRelativeDirections();\n }\n\n /**\n * The current hybrid swap icon class to show, or null if we should not display the hybrid swap icon.\n */\n @computed('isCameraExpanded', 'layoutProperties.{isHybridWide,layoutType}', 'viewIndex')\n get hybridSwapIconToShow(): string | null {\n const { isCameraExpanded, layoutProperties, viewIndex } = this,\n { isHybridWide, layoutType } = layoutProperties || {};\n\n // should only show the swap icon if we're on a page which has a layout (live video and svr/sd playback) and the view Index isn't 0\n // view index = 0 means the video is in the spotlight position already\n if (isCameraExpanded || viewIndex === 0 || !layoutType) {\n return null;\n }\n\n // We dont show the hybrid swap (spotlight) icon unless we're in one of these views\n if (\n ![HybridView, OnePlusFiveView, OnePlusSevenView, TwoPlusEightView, FourPlusTwoPlusFourView].includes(\n layoutType\n )\n ) {\n return null;\n }\n\n switch (layoutType) {\n case HybridView:\n return isHybridWide ? 'view-3+1-focus' : 'view-1+3-focus';\n case OnePlusFiveView:\n return 'view-1+5-focus';\n case OnePlusSevenView:\n return 'view-1+7-focus';\n case TwoPlusEightView:\n return 'view-2+8-focus';\n case FourPlusTwoPlusFourView:\n return 'view-4+2+4-focus';\n }\n\n return null;\n }\n\n /**\n * The current player size based on the player width.\n */\n @computed('dynamicVideoPlayerDimensions', 'dynamicVideoPlayerDimensions.width')\n get playerSize(): number | null {\n const { dynamicVideoPlayerDimensions } = this;\n\n if (!dynamicVideoPlayerDimensions) {\n return null;\n }\n\n return getPlayerSize(dynamicVideoPlayerDimensions, 0);\n }\n\n /**\n * Is this player using an MJPEG stream (as opposed to an RTSP stream)?\n */\n isMjpeg = false;\n\n /**\n * Are we showing the detailed OSD?\n */\n hasDetailedOsdEnabled = false;\n\n /**\n * Properties relates to OSD\n */\n osdProperties?: OsdProperties;\n\n /**\n * The zoom pan limitations for the camera.\n */\n zoomPanLimitations?: Limitations;\n\n /*\n * The style string for manipulating the video element\n */\n @tracked styleString: SafeString = htmlSafe('');\n\n /**\n * The element selector used by the ZoomPanOverlay.\n */\n @tracked zoomPanOverlaySelector: string | null = null;\n\n /**\n * Sets the element selector used by the ZoomPanOverlay.\n */\n @action setZoomPanOverlaySelector(zoomPanOverlaySelector: string | null): void {\n this.zoomPanOverlaySelector = zoomPanOverlaySelector;\n }\n\n // region WebRTC\n\n /**\n * The unique stream name we are using for this camera (or camera/svr combo).\n * This is used for logging within the WebRTCProxy machine.\n * By default, we assume this is a Live stream - other playback types need to return a new value based on player type.\n */\n @computed('camera.{macAddress,svrVideoSource.svr.macAddress}', 'playerType')\n get computedStreamName(): string {\n // TODO VID-66140 - convert to ember concurrency\n // eslint-disable-next-line ember/no-get\n const cameraMac = get(this, 'camera.macAddress');\n switch (this.playerType) {\n case StreamUsage.Svr:\n // eslint-disable-next-line ember/no-get\n return `${get(this, 'camera.svrVideoSource.svr.macAddress')}_SVR_${cameraMac}`;\n case StreamUsage.SDCard:\n return `${cameraMac}_SD`;\n case StreamUsage.LiveViewAnalytics:\n return `${cameraMac}_Analytics`;\n case StreamUsage.LiveViewFieldOfView:\n return `${cameraMac}_FOV`;\n default:\n return `${cameraMac}_Live`;\n }\n }\n\n /**\n * A wrapper to safely access the stream name variable.\n * TODO VID-66140 - convert to ember concurrency\n */\n get streamName(): string {\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n return '';\n }\n\n return this.computedStreamName;\n }\n\n /**\n * Is the end-to-end stream using the TURN server? If so, don't reattempt the connection or fall back to proxy.\n */\n @tracked\n isEndToEndStreamUsingTurn = false;\n\n /**\n * Do we want to present advanced WebRTC troubleshooting steps if video fails?\n * Specifically, if ICE negotiation fails, do we want to give the option to enable microphone access\n * to help with the connection process?\n * Otherwise, video disconnects will look like failed to connect messages.\n *\n * @note See VID-29847. This will either be removed or turned on for all customers in the future.\n * @note If this value is true, then hasWebrtcIceNegotiationFailed can be set to true.\n */\n allowAdvancedWebrtcTroubleshooting = false;\n\n /**\n * Has the WebRTC player detected that ICE negotiation steps failed?\n *\n * @note See VID-29847 for full context.\n * @note This value can only be turned on if allowAdvancedWebrtcTroubleshooting is also true.\n */\n hasWebrtcIceNegotiationFailed = false;\n\n /**\n * Have we retried an end-to-end stream after an ICE negotiation failure midstream? If true, show the disconnected overlay.\n */\n @tracked\n retriedDirectAfterMidstreamIceFailure = false;\n\n /**\n * Has ICE negotiation failed again during the reload for a midstream ICE negotiation failure?\n */\n hasIceFailedAgainUponMidstreamReload = false;\n\n /**\n * Has the WebRTC player failed to autoplay video?\n */\n hasAutoplayFailed = false;\n\n /**\n * How many times have we restarted this stream due to error?\n *\n * @note This is currently used for WebRTC streams that fail due to an \"Authentication Error\" or \"Device Not Reachable\" error.\n * @note This is sometimes due to an outdated VPN IP, so we will refresh db info and restart the stream up to 1 time.\n */\n restartCount = 0;\n\n /**\n * Is the player currently attempting to restart a stream after an error occurred?\n * This is true between the point where we begin the restart and when we start to refresh the video source.\n *\n * @note This is related to restartCount, and is used for skipping processing WebRTC logs when we are refreshing from the db.\n */\n isRefreshingCameraFromDb = false;\n\n /**\n * Immediately after doing a DB refresh of camera data and reinitializing the video source model, do we want\n * to force a proxy stream to go through?\n *\n * @note This is necessary to track now that failed WebRTC End-to-End streams attempt proxy afterwards.\n * @note Without this, we call initializeVideoSource, which attempts End-to-End by default,\n * @note which sends us into an infinite loop attempting E2E and proxy over and over.\n */\n forceProxyAfterDbRefresh = false;\n\n /**\n * Should we reset endToEndStreamFailed? This will be true in all cases except when we force proxy after DB refresh.\n *\n * @note This flag will be used in resetStreamStatus to indicate whether or not we should reset endToEndStreamFailed.\n * @note This is necessary because we call initializeVideoSource (which calls resetStreamStatus and resets the endToEndStreamFailed)\n * @note in forceDbRefreshOrAttemptProxy in between setting endToEndStreamFailed in attemptProxyReconnection and using it in onPlayStarted.\n * @note Without this, endToEndStreamFailed will always be false when we reach onPlayStarted, and we won't ever send EndToEndFallbackToProxy to Wavefront.\n */\n shouldResetEndToEndStreamFailed = true;\n\n /**\n * If the end to end stream failed\n */\n endToEndStreamFailed = false;\n\n // region WebRTC Logs\n\n /**\n * Have we received WebRTC stats from the video-player addon (set to true in OnStreamStatus).\n * Used to determine if we should display the WebRTC stream type button.\n */\n @tracked\n haveReceivedWebrtcStats = false;\n\n /**\n * The row/log id for the initial WebRTC log.\n * We save this so we can use the same id when updating the WebRTC log later after stream start.\n */\n webRtcLogId: number | null = null;\n\n /**\n * An array of stored WebRTC logs we'll store until the stream connects for the first time.\n * The use case is if a camera attempts an end-to-end stream and then a proxy stream -\n * we want to set a value on the log after determining if all streams fail or if proxy eventually succeeds,\n * so we must store them in the meantime.\n */\n logsArray?: Array;\n\n /**\n * The row/log id for the initial WebRTC log.\n * We save this so we can use the same id when updating the WebRTC log later if we want to log a midstream disconnection reason.\n */\n cachedWebRtcLogId: number | null = null;\n\n /**\n * Strings indicating the streaming type used in the WebRTC proxy player.\n * This is either 'Live' or 'Playback'.\n */\n @computed('playerType')\n get webrtcStreamingType(): string {\n switch (this.playerType) {\n case StreamUsage.Svr:\n case StreamUsage.SDCard:\n return StreamingTypePlayback;\n default:\n // All other streams are live streams.\n return StreamingTypeLive;\n }\n }\n\n /**\n * The connection start time, used within WebRTC stream logging.\n */\n @alias('connectionStartTime')\n declare connectionStartTimeForLogging: number;\n\n /**\n * The time that the stream has started.\n */\n @tracked\n streamStartTime: number | null = null;\n\n /**\n * Has this stream restarted midstream? This can be from an e2e stream freezing or otherwise suddenly disconnecting, so we tried to restart it.\n */\n hasStreamRestartedMidstream = false;\n\n /**\n * The EndToEndWebrtcConnectionInfo model received with streaming properties needed for WebRTC end-to-end.\n */\n endToEndWebrtcConnectionInfo?: EndToEndWebrtcConnectionInfo;\n\n /**\n * Should we mute the audio for this SVR and camera?\n * Note: This setting applies only to OpenEye players. OpenEye supports audio playback from just one camera per SVR at a time.\n * To ensure consistent audio management across the system, we manually mute all other SVRs on the account that do not match this specific svrId.\n * @type { OEShouldMuteAudioInfo }\n */\n @computed(\n 'apexConnectionInfo.apexId',\n 'camera.id',\n 'oeAudioInfo.{playerIdWithAudio,svrIdWithAudio}',\n 'player.svrId',\n 'playerType'\n )\n get oeShouldMuteAudioInfo(): { shouldMutePlayer: boolean; shouldMuteSVR: boolean } | null {\n const { apexConnectionInfo, camera, oeAudioInfo, player } = this;\n\n // or if not instance of oesp player\n if (!oeAudioInfo) {\n return null;\n }\n\n // VID-67486: Unify Playback and LiveView to have apexConnectionInfo\n let svrId = apexConnectionInfo?.apexId;\n\n if (!svrId && player?.svrId) {\n svrId = player.svrId;\n }\n\n return {\n shouldMutePlayer: oeAudioInfo.playerIdWithAudio !== get(camera, 'id'),\n shouldMuteSVR: oeAudioInfo.svrIdWithAudio !== svrId\n };\n }\n\n // endregion\n\n /**\n * The commands to expose to the parent.\n */\n @computed('clearMessage', 'showMessage')\n get commands(): Commands {\n return [\n [SHOW_MESSAGE, this.showMessage],\n [CLEAR_MESSAGE, this.clearMessage]\n ];\n }\n\n /**\n * Shows a message within the specified player.\n *\n * @param message The message to be displayed.\n */\n showMessage(message: string): void {\n set(this, 'message', message);\n }\n\n /**\n * Clears any messages within the specified player.\n */\n clearMessage(): void {\n setProperties(this, {\n message: null,\n streamConnectionErrorEnum: NoError\n });\n }\n\n /**\n * Commands related to deleting a player\n */\n deletePlayerCommands?: (cameraIndex?: number) => void;\n\n /**\n * A method for using digital pan tilt zoom\n */\n digitalZoomPanMethod?: DigitalZoomPanMethod;\n\n /**\n * Event to Pass along disconnected state to International Video test page if this player is being used\n */\n internationalWebRtcEvent?: (_id: string, _eventName: string) => void;\n\n /**\n * Placeholder method for onInitialize.\n */\n onInitialize(): void {}\n\n /**\n * Placeholder method for onPlayStarted.\n */\n onPlayStarted(): void {\n setProperties(this, {\n playerState: PLAYING_STATE,\n hasStreamConnected: true,\n loadingPercentage: 0\n });\n }\n\n /**\n * Placeholder method for onPlayPaused.\n */\n onPlayPaused(): void {\n set(this, 'isPaused', true);\n this['updatePageAndPlayerState']?.(READY_STATE) || updatePlayerState.call(this, READY_STATE);\n }\n\n /**\n * Placeholder method for onPlayEnded.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onPlayEnded(_globalDeviceId: string, _args: { isTimeout?: boolean; isEndOfStream?: boolean } = {}): void {}\n\n /**\n * Placeholder method for onFrozen.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onFrozen(_playerId: string, _args: { streamStuckAtFrozen?: boolean } | undefined): void {\n this['updatePageAndPlayerState']?.(FROZEN_STATE) || updatePlayerState.call(this, FROZEN_STATE);\n }\n\n /**\n * Placeholder method for onPoorStartingConnection\n */\n onPoorStartingConnection(): void {}\n\n /**\n * Placheolder method for onCameraSpeakerAlreadyInUse\n */\n onCameraSpeakerAlreadyInUse(): void {}\n\n /**\n * Called when the page goes to/from full screen\n */\n onToggleFullSize(): void {}\n\n /**\n * Method for setting the loading percentage of the player\n */\n setLoadingPercentage?: (percentage?: number) => void;\n\n /**\n * Calls playersControl to update the player commands\n */\n updateCommands?: (cameraIndex: number | undefined, commands: Commands) => void;\n\n /**\n * Updates the page and player state for the player\n */\n updatePageAndPlayerState?: (state: number) => void;\n\n /**\n * Placeholder method for onProgress.\n */\n onProgress(_playerId: string, { percentage: loadingPercentage }: { percentage?: number } = {}): void {\n this['updatePageAndPlayerState']?.(LOADING_STATE) || updatePlayerState.call(this, LOADING_STATE);\n this['setLoadingPercentage'] && this['setLoadingPercentage'](loadingPercentage);\n set(this, 'loadingPercentage', loadingPercentage || 0);\n }\n\n /**\n * Placeholder method for onStreamStatus.\n */\n async onStreamStatus(playerId: string, streamStatus: StateInfo = {}): Promise {\n // In integration tests this method can get called at the end when the store or context is getting destroyed\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n\n const { camera, playerUsage, store, webStreamingLogType } = this,\n cameraId = get(camera, 'id') || playerId;\n\n if (!cameraId) {\n sentryWithScopeAndWarn('Could not retrieve camera id for player, failed to send webrtc/oesp log', {\n playerId,\n streamStatus\n });\n return;\n }\n\n // Logging for the WebRTC Player\n if (playerUsage === WebRTC) {\n const {\n ajax,\n isRefreshingCameraFromDb,\n restartCount,\n connectionStartTimeForLogging,\n hasStreamRestartedMidstream,\n endToEndWebrtcConnectionInfo\n } = this,\n { isInitialLog, iceStartTime, iceCompletionTime, usedTurn } = streamStatus;\n\n // We still get a log even if we want to restart the stream after a DB refresh. Discard this log and wait for the next.\n if (isRefreshingCameraFromDb) {\n return;\n }\n\n this.haveReceivedWebrtcStats = true;\n const signallingServerUrl = endToEndWebrtcConnectionInfo?.signallingServerUrl,\n signallingServerNode = signallingServerUrl?.substring(\n beforeSSNodeLength,\n signallingServerUrl.indexOf('.')\n );\n\n if (isInitialLog) {\n const streamStartTime = Date.now(),\n streamConnectionTimeMs = iceCompletionTime\n ? iceCompletionTime - connectionStartTimeForLogging\n : null,\n streamIceCompletionTimeMs =\n iceCompletionTime && iceStartTime ? iceCompletionTime - iceStartTime : null,\n streamStartTimeMs = streamStartTime - connectionStartTimeForLogging,\n logAttributes = Object.assign(streamStatus, {\n // We use .get here because camera could be a proxy object (which is true on analytics rules), which requires the use of .get\n customerId: get(camera, 'system.id'),\n deviceModel: get(camera, 'deviceModel'),\n // If ICE negotiation fails again during the stream reload due to a midstream ICE negotiation failure, log that disconnection reason to backend.\n disconnectionReason: this.hasIceFailedAgainUponMidstreamReload\n ? IceFailedUponMidstreamReloadDisconnectionReason\n : streamStatus.disconnectionReason,\n firmwareVersion: get(camera, 'firmwareVersion'),\n globalId: cameraId,\n isLogFromMidstreamRestart: hasStreamRestartedMidstream,\n retries: restartCount,\n signallingServerNode,\n streamConnectionTimeMs,\n streamIceCompletionTimeMs,\n streamStartTimeMs,\n webrtcStreamType: webStreamingLogType\n });\n\n // If timing metric is negative, log stream connection times to Sentry so we can identify which value is negative.\n logToSentryIfTimingMetricIsNegative.call(\n this,\n streamIceCompletionTimeMs,\n streamConnectionTimeMs,\n streamStartTimeMs\n );\n\n this.streamStartTime = streamStartTime;\n this.isEndToEndStreamUsingTurn = usedTurn || false;\n\n const log = store.createRecord('video/stream-logs/webrtc-stream-log', logAttributes);\n\n // Temporary for VID-33849: if we attempted e2e and it failed (and now we are attempting proxy), log to backend.\n // VID-40810 ignores the \"Player destroyed\" and \"User left page\" reasons since that can happen when someone just navigates away from the page.\n if (log.direct && log.failed && !isUserCausedDisconnection(log.disconnectionReason)) {\n ajax.apiRequest(\n 'video/streamLogs/webrtcStreamLogs/reportEndToEndFailure',\n undefined,\n {\n mac: get(camera, 'macAddress'),\n model: get(camera, 'deviceModel'),\n firmware: get(camera, 'firmwareVersion'),\n error: log.disconnectionReason\n },\n POST\n );\n }\n\n if (this.logsArray === undefined) {\n this.logsArray = [];\n }\n\n this.logsArray.push(log);\n\n const hasPlayerDisconnected = this.playerState === DISCONNECTED_STATE;\n\n if (this.playerState === PLAYING_STATE || hasPlayerDisconnected) {\n let connectionResult: number;\n\n if (streamStatus.direct) {\n connectionResult = streamStatus.failed ? EndToEndFailedNoFallback : EndToEndSucceeded;\n } else if (!this.endToEndStreamFailed) {\n connectionResult = streamStatus.failed ? ProxyFailed : ProxySucceeded;\n } else {\n connectionResult =\n streamStatus.failed || hasPlayerDisconnected\n ? FallbackAndFailedProxy\n : FallbackAndSucceededProxy;\n }\n\n this.logsArray.forEach((log) => {\n // because we are in an if (isInitialLog) block, we can assume this is a WebrtcStreamLog type\n (log as WebrtcStreamLog).connectionResult = connectionResult;\n });\n\n let lastResponse: { value: number } | undefined;\n\n for (const log of this.logsArray) {\n lastResponse = await ajax.apiRequest(\n 'video/streamLogs/webrtcStreamLogs/sendInitialWebrtcStreamLog',\n undefined,\n log,\n POST\n );\n }\n\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (!isDestroyed(this) && lastResponse) {\n setProperties(this, {\n restartCount: 0,\n webRtcLogId: lastResponse.value\n });\n }\n\n this.logsArray = undefined;\n }\n } else {\n if (!streamStatus) {\n console.warn('No streamStatus object received for WebRTC update log.', streamStatus);\n return;\n }\n\n const logAttributes = Object.assign(streamStatus, {\n // We use .get here because camera could be a proxy object (which is true on analytics rules), which requires the use of .get\n deviceModel: get(camera, 'deviceModel'),\n // If we get a midstream ICE failure, log that disconnection reason to the backend.\n disconnectionReason: this.retriedDirectAfterMidstreamIceFailure\n ? IceFailedMidstreamDisconnectionReason\n : streamStatus.disconnectionReason,\n duration: Date.now() - (this.streamStartTime || 0),\n firmwareVersion: get(camera, 'firmwareVersion'),\n isOneMinuteUpdateLog: streamStatus.disconnectionReason === undefined,\n logId: this.webRtcLogId || this.cachedWebRtcLogId,\n signallingServerNode,\n usedTurn: this.isEndToEndStreamUsingTurn,\n webrtcStreamType: webStreamingLogType\n });\n\n const log = store.createRecord('video/stream-logs/webrtc-stream-update-log', logAttributes);\n\n ajax.apiRequest('video/streamLogs/webrtcStreamLogs/updateWebrtcStreamLog', undefined, log, POST);\n }\n } else if (playerUsage === OESP) {\n const { ajax, connectionStartTimeForLogging, oeLogId } = this,\n {\n isInitialLog,\n time,\n failed,\n stats,\n direct,\n directFailureReason,\n relayFailureReason,\n selectedCandidatePairTypes\n } = streamStatus;\n\n this.haveReceivedWebrtcStats = true;\n\n if (isInitialLog) {\n const logAttributes = {\n // We use .get here because camera could be a proxy object (which is true on analytics rules), which requires the use of .get\n customerId: get(camera, 'system.id'),\n deviceModel: get(camera, 'deviceModel'),\n globalId: cameraId,\n oeStats: JSON.stringify(stats),\n streamStartTimeMs: (time as any as number) - connectionStartTimeForLogging,\n failed,\n direct,\n directFailureReason: directFailureReason,\n relayFailureReason: relayFailureReason,\n oeStreamType: webStreamingLogType,\n selectedCandidatePairTypes\n };\n\n const log = store.createRecord('video/stream-logs/oe-stream-log', logAttributes);\n ajax.apiRequest('video/streamLogs/oeStreamLogs/sendInitialOeStreamLog', undefined, log, POST).then(\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n (response: { value: number }) => !isDestroyed(this) && set(this, 'oeLogId', response.value)\n );\n\n return;\n }\n\n // Return early if the log ID does not exist.\n if (!oeLogId) {\n return;\n }\n\n const logAttributes = {\n logId: oeLogId,\n oeStats: JSON.stringify(stats)\n },\n log = store.createRecord('video/stream-logs/oe-stream-update-log', logAttributes);\n\n ajax.apiRequest('video/streamLogs/oeStreamLogs/updateOeStreamLog', undefined, log, POST);\n }\n }\n\n /**\n * Placeholder method for onTimeout.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onTimeout(_playerId: string): void {}\n\n /**\n * Placeholder method for onFailedToConnect.\n */\n onFailedToConnect(playerId: string, { shouldRestartPlayer }: { shouldRestartPlayer?: boolean } = {}): void {\n forceDbRefreshOrAttemptProxy.call(this, playerId, shouldRestartPlayer);\n }\n\n /**\n * Placeholder method for onError.\n */\n onError(playerId: string, { errorMessage, shouldRestartPlayer, shouldRestartWebrtcModule }: ErrorInfo = {}): void {\n const { camera, isMjpeg, playerUsage } = this;\n\n const useWebRtc = playerUsage === WebRTC;\n\n if (useWebRtc) {\n // If we got a \"Camera not yet dialed in\" message, we'll want to restart the module.\n if (shouldRestartWebrtcModule) {\n this.ajax.apiRequest(\n `video/devices/cameras/${get(camera, 'globalDeviceId')}/restartWebrtc`,\n undefined,\n null,\n POST\n );\n }\n\n // For WebRTC, shouldRestartPlayer is true for Authentication Error and Device Not Reachable,\n // so refresh the video source and try again.\n forceDbRefreshOrAttemptProxy.call(this, playerId, shouldRestartPlayer);\n }\n\n const logToSentry = !!errorMessage;\n if (logToSentry) {\n // Log an error to sentry. Send extra data to help better track the problem.\n const sentryExtras = {\n deviceId: get(camera, 'id'),\n deviceModel: get(camera, 'deviceModel')\n },\n // isMjpeg is sometimes set for LiveViewPlayer components, otherwise will be falsy and print the error line correct anyway.\n errorMessageIntro = `${isMjpeg ? 'MJPEG' : 'WebRTC'} player error`,\n sentryTags = { deviceModel: get(camera, 'deviceModel') as string },\n fullErrorMessage = `${errorMessageIntro}: ${errorMessage}`;\n\n sentryWithScopeAndError(fullErrorMessage, sentryExtras, sentryTags);\n }\n }\n\n /**\n * Placeholder method for onAutoplayFailure.\n * The WebRTC player failed to play the video because autoplay was disabled.\n */\n onAutoplayFailure(): void {\n set(this, 'hasAutoplayFailed', true);\n }\n\n /**\n * Placeholder method for onIceError.\n * The WebRTC player failed its ICE negotiation process and requires more permissions via microphone request.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onIceFailure(_playerId: string): void {\n if (this.allowAdvancedWebrtcTroubleshooting) {\n set(this, 'hasWebrtcIceNegotiationFailed', true);\n }\n }\n\n /**\n * Placeholer method for onUpdateOsd\n * This is used by openeye-player to relay the current stream's time and stats.\n *\n * @param osdProperties An object containing renderTime and streamStats\n */\n onUpdateOsd(_playerId: string, osdProperties: OsdProperties): void {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (!isDestroyed(this)) {\n set(this, 'osdProperties', osdProperties);\n }\n }\n\n /**\n * If we failed to connect to the camera, see if we should connect again through proxy or if we should let the connection fail.\n * If proxy is already attempted, then it will end the stream and show a message.\n *\n * @function\n * @param globalDeviceId\n * @param isTimeout Optional param to specify we're attempting to reconnect to a connection with a timeout.\n */\n attemptProxyReconnection(globalDeviceId: string, isTimeout?: boolean, isEndOfStream?: boolean): void {\n throw new Error(\n `attemptProxyReconnection must be overridden. Global Device ID = ${globalDeviceId}, Is Timeout = ${isTimeout}, isEndOfStream = ${isEndOfStream}`\n );\n }\n\n /**\n * Refresh the video source and begin initializing live video or playback.\n */\n initializeVideoSource: Task = task({}, async (globalDeviceId: string) => {\n throw new Error(`initializeVideoSource must be overridden. Global Device ID = ${globalDeviceId}.`);\n });\n\n //#region Actions\n\n /**\n * Update property.\n */\n updateCurrentStreamIsEndToEnd = (isEndToEnd: boolean): void => {\n this.currentStreamIsEndToEnd = isEndToEnd;\n };\n\n /**\n * Handles the event sent by the webrtc player.\n *\n * @param eventName The event that occurred.\n * @param playerId The id of the player that had the event.\n * @param args An object containing arguments for the state that occurred.\n */\n @action\n webRtcEvent(eventName: string, playerId: string, args?: StateInfo): void {\n // We try to extract and use the global device id if possible, and default to the playerId when extracting fails\n const globalDeviceIdPattern = /\\d+-\\d+/,\n matches = playerId.match(globalDeviceIdPattern),\n id = matches ? matches[0] : playerId;\n\n // Sends webRtcEvent to internationalWebRtcEvent function in international-tests controller\n this.internationalWebRtcEvent && this.internationalWebRtcEvent(id, eventName);\n\n switch (eventName) {\n // The component holding the webrtc player is currently initializing.\n case Initializing:\n this.onInitialize();\n break;\n // The component has received a progress update.\n case Connecting:\n this.onProgress(playerId, args);\n break;\n // Streaming has begun.\n case Playing:\n this.onPlayStarted();\n break;\n // Streaming has been paused.\n case Paused:\n this.onPlayPaused();\n break;\n // We failed to connect to the stream and begin video playback.\n case FailedToConnect:\n this.onFailedToConnect(playerId, args);\n break;\n // The player is no longer streaming video due to a disconnection.\n case Disconnected:\n this.onPlayEnded(playerId, args);\n break;\n // The player is no longer streaming video due to a proxy timeout.\n case TimedOut:\n this.onTimeout(playerId);\n break;\n // The player experienced an error and may need to be restarted.\n case PlayerError:\n this.onError(playerId, args);\n break;\n // The player failed to stream due to an autoplay failure.\n case AutoplayFailure:\n this.onAutoplayFailure();\n break;\n // The WebRTC player failed its ICE negotiation, and we need to request more permissions to try again.\n case IceFailure:\n this.onIceFailure(playerId);\n break;\n // We received info on the WebRTC stream for logging.\n case Log:\n this.onStreamStatus(playerId, args);\n break;\n // The stream has been frozen for a couple of seconds.\n case Frozen:\n this.onFrozen(playerId, args);\n break;\n // The stream has been trying to connect but has been experiencing a poor starting connection.\n case PoorStartingConnection:\n this.onPoorStartingConnection();\n break;\n // The player has detected the camera's speaker is already in use.\n case CameraSpeakerAlreadyInUse:\n this.onCameraSpeakerAlreadyInUse();\n break;\n default:\n console.warn('Unhandled event occurred: ' + eventName);\n }\n }\n\n /**\n * Handles the event sent by the OESP player.\n *\n * @param eventName The event that occurred.\n * @param playerId The id of the player that had the event.\n * @param args An object containing arguments for the state that occurred.\n */\n @action\n oespEvent(eventName: string, playerId: string, args: StateInfo): void {\n switch (eventName) {\n // The component has received a progress update.\n case Connecting:\n this.onProgress(playerId, args);\n break;\n // Playback has begun.\n case Playing:\n this.onPlayStarted();\n break;\n // Playback has been paused.\n case Paused:\n this.onPlayPaused();\n break;\n // The player is no longer streaming video due to a disconnection.\n case Disconnected:\n this.onPlayEnded(playerId, args);\n break;\n // We received info on the OESP stream for logging.\n case Log:\n this.onStreamStatus(playerId, args);\n break;\n // We received osd properties from the openeye player.\n case UpdateOsd:\n this.onUpdateOsd(playerId, args);\n break;\n // The stream has been frozen for a couple of seconds.\n case Frozen:\n this.onFrozen(playerId, args);\n break;\n default:\n console.warn('Unhandled event occurred: ' + eventName);\n }\n }\n\n /**\n * Handles a user clicking the full size button and changing the state of the component.\n * Note: the component stores this state, but ultimately relies on the dynamicVideoPlayerDimensions object for sizing.\n *\n * @param isFullSize Are we changing this camera to be in the full size state?\n */\n @action\n toggleFullSize(isFullSize: boolean): void {\n set(this, 'isCameraExpanded', isFullSize);\n this.onToggleFullSize();\n }\n\n /**\n * Triggers a zoom or pan action on the player object.\n *\n * @param direction. The RelativeDirection enum value for the command being requested.\n */\n @action\n digitalZoomPan(direction: RelativeDirection): void {\n this.digitalZoomPanMethod && this.digitalZoomPanMethod(direction);\n }\n\n /**\n * The video player component calls this and sends up a method for this component to interact with the video player for doing digital pans or zooms.\n *\n * @param {method} digitalZoomPanMethod. A method sent up from the video player object which enables doing a digital zoom or pan.\n */\n @action\n async attachDigitalZoomPanMethod(digitalZoomPanMethod: DigitalZoomPanMethod): Promise {\n const { dynamicVideoPlayerDimensions } = this;\n set(this, 'digitalZoomPanMethod', digitalZoomPanMethod);\n\n const digitalPtzPosition = (await get(this.camera, 'digitalPtzPosition')) as DigitalPtzPosition;\n\n if (!digitalPtzPosition || digitalPtzPosition?.error || !dynamicVideoPlayerDimensions) {\n return;\n }\n\n const { digiPtzPanRightPercent, digiPtzPanDownPercent, digiPtzZoom } = digitalPtzPosition;\n\n if (!digiPtzPanRightPercent && !digiPtzPanDownPercent && digiPtzZoom === 1) {\n // All values are the default, so dont do anything\n return;\n }\n\n const topLeftValues = convertPctBasedPtzValuesToAbsolute(\n digiPtzPanDownPercent,\n digiPtzPanRightPercent,\n dynamicVideoPlayerDimensions\n );\n\n this.digitalZoomPanMethod?.(undefined, {\n left: topLeftValues.left,\n top: topLeftValues.top,\n scale: digiPtzZoom\n });\n }\n\n /**\n * The limitations for the video player (in terms of panning or zooming) have been updated. IE we can no longer pan right (because we're panned to the border)\n *\n * @param limitations\n */\n @action\n zoomPanLimitationsUpdated(limitations: Limitations, position: Position): void {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n return;\n }\n\n set(this, 'zoomPanLimitations', limitations);\n\n this.saveDigitalZoomLevelTask.perform(position);\n }\n\n /**\n * Toggles if the detailed OSD is visible.\n */\n @action\n toggleDetailedOsd(): void {\n set(this, 'hasDetailedOsdEnabled', !this.hasDetailedOsdEnabled);\n }\n\n /**\n * Syncs a dewarp config.\n */\n @action\n syncDewarpConfig(\n dewarpConfig: DewarpConfig,\n apexId: string,\n oespPlaybackStateController: OespPlaybackStateController\n ): void {\n syncDewarpConfig.call(this, dewarpConfig, apexId, oespPlaybackStateController);\n }\n\n /**\n * This retries the stream + we ask for microphone permissions, but the user can deny it if they want.\n * Optionally this forces a STUN connection with extended timeouts during each step of the load process.\n */\n @action async retryEndToEndWithAudioRequest(forceEndToEndWithExtendedTimeouts: boolean) {\n if (forceEndToEndWithExtendedTimeouts) {\n this.shouldForceEndToEndWithExtendedTimeouts = true;\n this.updateShouldForceEndToEndWithExtendedTimeouts?.(true);\n }\n\n switch (this.playerUsage) {\n case WebRTC: {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false });\n // Immediately stop the streaming tracks, otherwise the microphone usage icon still shows in tabs.\n stream.getTracks().forEach((track) => track.stop());\n this.cookieManager.setEssentialCookie(MICROPHONE_ACCESS_COOKIE_NAME, '');\n } catch {\n this.hasBlockedMicrophoneAccess = true;\n this.cookieManager.setEssentialCookie(\n MICROPHONE_ACCESS_COOKIE_NAME,\n 'true',\n addDays(new Date(), 30)\n );\n }\n\n this.initializeVideoSource.perform('');\n\n break;\n }\n case OESP: {\n const camera = await this.camera;\n if (camera) {\n this.initializeVideoSource.perform(camera.id);\n }\n\n break;\n }\n }\n }\n\n //#endregion Actions\n\n //#region Tasks\n\n /**\n * Waits a few seconds and then saves the current digital PTZ position information to the database.\n */\n saveDigitalZoomLevelTask: Task = task(\n { restartable: true },\n async (currentPosition: Position) => {\n const { dynamicVideoPlayerDimensions } = this;\n\n // dont wait so long if this is an integration test, since we dont want to slow down tests\n // Though we do need to wait a non-zero amount of time, otherwise tests mess up by trying to save and load simultaneously\n const yieldTime = this.envSettings.isTestEnvironment() ? 100 : DigitalPtzSaveWaitTimeMs;\n\n // Doing a timeout here, so that if this method gets called several times in a row (a row modifies their PTZ position several times), we only call the API once\n await timeout(yieldTime);\n\n const digitalPtzPosition = (await get(this.camera, 'digitalPtzPosition')) as DigitalPtzPosition;\n\n if (!digitalPtzPosition || digitalPtzPosition.error || !dynamicVideoPlayerDimensions) {\n return;\n }\n\n const { digiPtzPanRightPercent, digiPtzPanDownPercent, digiPtzZoom } = digitalPtzPosition,\n { top, left, scale } = currentPosition;\n\n const percentPanValues = convertAbsolutePtzValuesToPctBased(left, top, dynamicVideoPlayerDimensions);\n\n // if the current position is the same as the model/db position\n if (\n digiPtzPanDownPercent === percentPanValues.panDownPct &&\n digiPtzPanRightPercent === percentPanValues.panRightPct &&\n scale === digiPtzZoom\n ) {\n return;\n }\n\n const newPtzParams = {\n digiPtzPanRightPercent: percentPanValues.panRightPct,\n digiPtzPanDownPercent: percentPanValues.panDownPct,\n digiPtzZoom: scale\n };\n\n digitalPtzPosition.setProperties(newPtzParams);\n\n try {\n digitalPtzPosition.save();\n } catch (e) {\n sentryWithScopeAndError(\n 'could not save digital PTZ info for camera',\n { cameraId: get(this.camera, 'id'), e, newPtzParams },\n undefined\n );\n }\n }\n );\n\n //#endregion Tasks\n}\n\n/**\n * @typedef {{\n * url: String,\n * playerId: String,\n * deviceId: number\n * }} Player\n *\n * @property {String} url Streaming URL for player to play.\n * @property {String} playerId ID of the player itself.\n * @property {number} deviceId ID of the device the player is associated with.\n *\n * @memberof components.video.video-player.BaseVideoPlayer\n */\n","import Component from '@glimmer/component';\nimport { action, computed, set, setProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\nimport { PlayerTroubleshootConnection } from 'customer-site/enums/TrackedEvent';\nimport { DataUsageCritical, StunReconnectionFailed } from 'customer-site/enums/VideoSourceError';\nimport { InstallAdvancedTroubleshootingVideoGeneric } from 'customer-site/enums/WizardUrl';\nimport { buildKnowledgeBaseURL } from 'customer-site/helpers/knowledge-base-link';\nimport { intlPath } from '@adc/i18n/path';\nimport { FisheyeMode } from '@oecommon/oscar-js';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type {\n DigitalZoomPanMethod,\n Limitations,\n RelativeDirections\n} from '@adc/ui-components/components/zoom-pan-overlay';\nimport type OespPlaybackStateController from '@adc/video-player/classes/state-controllers/oesp-playback-state-controller';\nimport type OespPtzOverlay from '@adc/video-player/components/oesp-ptz/overlay';\nimport type { SafeString } from '@ember/template';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type DewarpConfig from 'customer-site/models/video/dewarp-config';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type Stats from 'customer-site/services/stats';\nimport type { Dimensions, PlayerInfo } from '../../video-streaming/video-streaming-features/types';\nimport type { OEShouldMuteAudioInfo } from './two-way-audio-buttons';\n\nexport type DisconnectedButtons = Array<{ disabled: boolean; text: string; action: () => void }> | null;\n\nexport const FULL_PTZ_PRESET = 'Full',\n CENTER_PTZ_PRESET = 'Center',\n CENTER_PRESET_ZOOM_AMOUNT = 10;\n\nexport interface BaseVideoOverlayArgs {\n apexId?: string;\n camera: Camera;\n changeCameraAudio: () => void;\n dewarpConfig: DewarpConfig | null;\n digitalZoomPan: DigitalZoomPanMethod;\n enableDigitalZoomPan: boolean;\n enableZoomPan: boolean;\n errorEnum: number;\n hasWebrtcIceNegotiationFailed: boolean;\n hasStreamConnected: boolean;\n hasStreamTimedOut: boolean;\n haveReceivedWebrtcStats: boolean;\n hybridSwapIconToShow: string | null;\n moreThanOneCameraTimedOut: boolean;\n isEnterprise: boolean;\n isOeStream: boolean;\n isOperatorSite: boolean;\n isPlayerExpanded: boolean;\n isSelectedForKeyboardPress: boolean;\n isStreamingEndToEnd: boolean;\n loadingPercentage: number;\n oeShouldMuteAudioInfo: OEShouldMuteAudioInfo;\n onFisheyePanTiltZoomEnd: () => void;\n playbackStateController?: OespPlaybackStateController;\n player: PlayerInfo;\n playerDimensions: Dimensions | null;\n playerSize: number;\n relativeDirections: RelativeDirections;\n restartCount: number;\n retry: () => void;\n retryAllTimedOutCameras: () => void;\n retryEndToEndWithAudioRequest: () => void;\n selectCameraWithLargeHybridCamera: () => void;\n sendDigitalZoomPanMethod: (digitalZoomPanMethod: DigitalZoomPanMethod) => void;\n setStyleString: (newStyleString: SafeString) => void;\n singlePlayer: boolean;\n supportsMicrophone: boolean;\n supportsVolume: boolean;\n toggleDetailedOsd: () => void;\n toggleFullSize: () => void;\n zoomPanLimitations: Limitations;\n zoomPanLimitationsUpdated: () => void;\n zoomPanOverlaySelector: string | null;\n}\n/**\n * @classdesc\n * Base overlay class for shared properties\n *\n * @abstract\n */\n@intlPath({ path: 'video/video-player/overlay' })\nexport default class BaseVideoOverlay extends Component {\n @service declare intl: ADCIntlService;\n @service declare stats: Stats;\n @service declare contextManager: ContextManager;\n\n /**\n * Has the stream timed out?\n *\n */\n get hasStreamTimedOut(): boolean {\n return false;\n }\n\n /**\n * Is the stream disconnected?\n *\n */\n declare isDisconnected: boolean;\n\n /**\n * Has the time reached the end of stream?\n *\n */\n get hasReachedEndOfStream(): boolean {\n return false;\n }\n\n /**\n * Is there just one player currently being displayed?\n *\n */\n singlePlayer = true;\n\n /**\n * Is the system enterprise?\n *\n */\n isEnterprise = false;\n\n /**\n * Is this a Visual Verification or Remote Video Monitoring Console session?\n *\n */\n isOperatorSite = false;\n\n /**\n * Indicates if the ptz popover should be connected to the pan tilt button.\n *\n */\n usePanTiltAnchor = true;\n\n /**\n * Should the camera buttons popover be displayed?\n *\n */\n displayCameraButtonsPopover = false;\n\n /**\n * Should the pan tilt popover be displayed?\n *\n */\n displayPanTiltPopover = false;\n\n /**\n * Does this overlay support showing buttons when in disconnected status?\n *\n */\n supportsDisconnectedButtons = true;\n\n /**\n * Can we stream the video?\n *\n */\n get canStreamVideo(): boolean {\n throw new Error('canStreamVideo must be overridden.');\n }\n\n /**\n * Show troubleshoot button regardless if we could view the stream or not.\n *\n */\n showTroubleshootButton = false;\n\n /**\n * If detailed OSD with stream stats is available.\n *\n */\n @alias('contextManager.identityModel.hasInternalBetaAccess')\n declare hasDetailedOsdOption: boolean;\n\n /**\n * The selector to anchor the ptz popover for pan-tilt.\n */\n @computed('args.camera.id', 'usePanTiltAnchor')\n get panTiltPopoverAnchorSelector(): string {\n const buttonSelector = this.usePanTiltAnchor ? '.pan-tilt-button' : '.more-options-button';\n return `#player-${this.args.camera?.id} ${buttonSelector}`;\n }\n\n /**\n * The set of buttons to display on the overlay when disconnected.\n *\n */\n @computed(\n 'args.{moreThanOneCameraTimedOut,hasWebrtcIceNegotiationFailed,hasStreamTimedOut,isOperatorSite,errorEnum,camera.shouldHideTroubleshootingWizard}',\n 'isDisconnected',\n 'showTroubleshootButton',\n 'canStreamVideo',\n 'hasReachedEndOfStream',\n 'stats',\n 'supportsDisconnectedButtons'\n )\n get disconnectedButtons(): DisconnectedButtons {\n if (\n !this.isDisconnected ||\n !this.supportsDisconnectedButtons ||\n this.hasReachedEndOfStream ||\n this.args.errorEnum == DataUsageCritical\n ) {\n return null;\n }\n\n const {\n moreThanOneCameraTimedOut,\n hasWebrtcIceNegotiationFailed,\n hasStreamTimedOut,\n isOperatorSite,\n errorEnum,\n camera\n } = this.args;\n\n const { showTroubleshootButton, canStreamVideo } = this,\n fnGetButton = (key: string, action: () => void, disabled = !canStreamVideo) => ({\n disabled,\n text: this.intl.t(`generic.${key}`),\n action\n });\n\n // This is primarily used by live streaming overlays.\n if (hasWebrtcIceNegotiationFailed) {\n return [\n fnGetButton('enable', () => this.requestMicrophonePermissionsAndRetry()),\n fnGetButton('info', () => this.openMicrophonePermissionInfoPage())\n ];\n }\n\n if (hasStreamTimedOut) {\n return [\n moreThanOneCameraTimedOut\n ? fnGetButton('resumeAll', () => this.args.retryAllTimedOutCameras())\n : fnGetButton('resume', () => this.args.retry())\n ];\n }\n\n // We want to add the troubleshoot button to non-operator players if video can be streamed or if the show troubleshoot button has been set to true.\n const addTroubleshootButton =\n (canStreamVideo || showTroubleshootButton) &&\n !isOperatorSite &&\n !camera.shouldHideTroubleshootingWizard,\n retryButtonText = errorEnum === StunReconnectionFailed ? 'retryDefault' : 'retry';\n return [\n fnGetButton(retryButtonText, () => this.args.retry()),\n addTroubleshootButton\n ? fnGetButton(\n 'troubleshoot',\n () => this.troubleshoot(),\n showTroubleshootButton ? !canStreamVideo : false\n )\n : undefined\n ].compact();\n }\n\n /**\n * Should the player use the OESP PTZ Overlay?\n */\n get isOespPtzOverlayEnabled(): boolean {\n const { apexId, playbackStateController, camera } = this.args,\n { has3PCPanTilt, has3PCZoom } = camera;\n\n if (!apexId || !playbackStateController) {\n return false;\n }\n\n return this.fisheyeMode === FisheyeMode.Ptz || has3PCPanTilt || has3PCZoom;\n }\n\n /**\n * The fisheye mode used by this player.\n */\n get fisheyeMode(): FisheyeMode | undefined {\n // TODO(VID-68007): Look into apexId being undefined\n // The playbackStateController may not exist until the user creates one from starting playback.\n const { apexId, playbackStateController } = this.args;\n if (!apexId || !playbackStateController || !playbackStateController.fisheyeModes.has(apexId)) {\n return;\n }\n\n return playbackStateController.fisheyeModes.get(apexId);\n }\n\n /**\n * Returns the PTZ usage for the OespPtzOverlay.\n */\n get ptzUsage(): OespPtzOverlay['args']['usage'] {\n if (this.args.dewarpConfig !== null) {\n return 'fisheye';\n }\n\n const camera = this.args.camera;\n if (camera.has3PCPanTilt || camera.has3PCZoom) {\n return 'ptz';\n }\n\n // Default to fisheye\n return 'fisheye';\n }\n\n /**\n * Opens a Knowledge Base article in a separate tab about requesting microphone permissions for WebRTC.\n *\n * @note This link will only work in the PROD environment.\n */\n @action openMicrophonePermissionInfoPage(): void {\n // The url for the knowledge base article on WebRTC advanced troubleshooting with microphone permissions.\n const knowledgeBaseLink = buildKnowledgeBaseURL(\n CustomerKnowledgeBase.WebRTCAdvancedTroubleshooting,\n this.contextManager\n );\n window.open(knowledgeBaseLink, '_blank');\n }\n\n /**\n * If the WebRTC player fails due to ICE negotiation issues, we will request microphone permissions and restart the stream.\n * This is not because we need the microphone, but because microphone access provides more\n * networking information that sometimes helps WebRTC feeds connect that otherwise fail.\n */\n @action requestMicrophonePermissionsAndRetry(): void {\n navigator.mediaDevices.getUserMedia({ audio: true }).then(() => this.args.retry && this.args.retry());\n }\n\n /**\n * Sends the user to the video troubleshooting wizard for this particular camera.\n */\n @action troubleshoot(): void {\n const { contextManager, stats } = this,\n currentRouteId = contextManager.currentRouteData?.routeItem?.routeId,\n queryParams = {\n macAddress: this.args.camera.macAddress,\n returnEnumId: currentRouteId,\n wizardEnum: InstallAdvancedTroubleshootingVideoGeneric\n };\n\n stats.logEvent(PlayerTroubleshootConnection);\n contextManager.transitionToWizard(queryParams.wizardEnum, '', queryParams, queryParams.returnEnumId);\n }\n\n /**\n * Toggles the pan tilt preset popover visibility.\n *\n */\n @action togglePanTiltOptions(usePanTiltAnchor: boolean): void {\n setProperties(this, {\n usePanTiltAnchor,\n displayCameraButtonsPopover: false,\n displayPanTiltPopover: !this.displayPanTiltPopover\n });\n }\n\n /**\n * Display the popover containing all other buttons options for this camera that have been hidden\n * from the bottom camera display bar due to video player size.\n */\n @action toggleMoreOptions(): void {\n set(this, 'displayCameraButtonsPopover', !this.displayCameraButtonsPopover);\n }\n\n /**\n * Report streaming error to WaveFront.\n *\n * @abstract\n */\n reportStreamingErrorToWaveFront(): Promise | void {\n throw new Error('reportStreamingErrorToWaveFront must be overridden.');\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- template-lint-disable no-nested-interactive --}}\\n\\n \\n {{#if @isOespPtzOverlayEnabled}}\\n \\n {{else if @enableZoomPan}}\\n \\n {{/if}}\\n\\n {{#if this.isInitializing}}\\n
    \\n {{#if (and @camera @camera.description)}}\\n \\n {{#if (and @isEnterprise @camera.system)}}\\n \\n {{/if}}\\n {{else}}\\n \\n {{/if}}\\n
    \\n\\n {{else if this.isLoadingAndNotInGap}}\\n
    \\n \\n \\n \\n
    \\n\\n {{else if this.isFrozen}}\\n
    \\n \\n
    \\n\\n {{else if @hasAutoplayFailed}}\\n
    \\n \\n \\n
    \\n\\n {{else if this.isDisconnected}}\\n
    \\n \\n \\n {{#if @disconnectedButtons}}\\n
    \\n {{#each @disconnectedButtons as |btn|}}\\n \\n {{/each}}\\n
    \\n {{/if}}\\n
    \\n {{/if}}\\n\\n {{yield}}\\n\\n \\n\\n\",{ moduleName: \"customer-site/components/video/video-player/overlay/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed, action, set } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { timeout, task } from 'ember-concurrency';\nimport { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport {\n PLAYING_STATE,\n INITIALIZING_STATE,\n LOADING_STATE,\n FROZEN_STATE,\n DISCONNECTED_STATE\n} from 'customer-site/enums/VideoPlayerStateEnum';\nimport {\n DeviceNotFound,\n DeviceNotConnected,\n NoPermissions,\n SdCardNotWorking,\n SdCardRemoved,\n StreamNotAvailable,\n PlaybackStreamTimeout,\n PlaybackStreamConnectionFailed,\n PlaybackEnded,\n LiveStreamTimeout,\n LiveStreamConnectionFailed,\n StreamDisconnected,\n NoPlaybackVideoAvailable,\n PlaybackServerConnectionFailed,\n NoError,\n RecentlyAddedRecordingSchedule,\n SdCardHasRecordingsFromAnotherCamera,\n WebRtcIceNegotiationFailed,\n SdCardNotSupported,\n AutoplayFailed,\n StunReconnectionFailed,\n SdCardHasRecordingsFromAnotherCustomer,\n SdCardIsBusy,\n SdCardNotSupported4Mp,\n DataUsageCritical\n} from 'customer-site/enums/VideoSourceError';\nimport { getPlayerSize } from '../base-video-player';\nimport { PlayerSize } from './player-buttons/index';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type {\n RelativeDirections,\n DigitalZoomPanMethod,\n Limitations,\n Position\n} from '@adc/ui-components/components/zoom-pan-overlay';\nimport type OespPlaybackStateController from '@adc/video-player/classes/state-controllers/oesp-playback-state-controller';\nimport type OespPtzOverlay from '@adc/video-player/components/oesp-ptz/overlay';\nimport type { BarSize } from 'customer-site/components/ui/progress-bar';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type Stats from 'customer-site/services/stats';\nimport type { Task } from 'ember-concurrency';\nimport type { SafeString } from 'handlebars';\nimport type { Dimensions } from '../../video-streaming/video-streaming-features/types';\nimport type { DisconnectedButtons } from './base-overlay';\n\ninterface VideoPlayerOverlaySignature {\n Args: {\n apexId?: string;\n camera: Camera; // The camera model currently being connected to / streamed.\n disconnectedButtons: DisconnectedButtons; // The set of buttons to display on the overlay when disconnected.\n elementSelector: string | null;\n enableZoomPan: boolean;\n errorEnum: number; // The error enum used for if the player is disconnected or otherwise not able to stream.\n hasAutoplayFailed?: boolean; // Has auto-play failed for the stream?\n hasStreamTimedOut: boolean;\n isEnterprise?: boolean; // Is the system enterprise?\n isHoveringOrClicking: boolean; // Are we currently hovering or clicking over the camera feed?\n isOespPtzOverlayEnabled: boolean;\n isSelectedForKeyboardPress: boolean;\n loadingPercentage: number;\n onFisheyePanTiltZoomEnd: () => void;\n playbackStateController?: OespPlaybackStateController;\n playerDimensions: Dimensions | null;\n playerSize: PlayerSize;\n playerState: number;\n playerType?: StreamUsage; // The type of player we have (sd/live/svr)\n ptzUsage: OespPtzOverlay['args']['usage'];\n relativeDirections: RelativeDirections;\n restartCount: number; // How many times have we restarted this stream due to error?\n retry: () => void;\n sendDigitalZoomPanMethod: (digitalZoomPanMethod: DigitalZoomPanMethod) => void;\n setIsHoveringOrClicking?: (isHoveringOrClicking: boolean) => void;\n transparentBackground?: boolean;\n zoomPanLimitationsUpdated: (limitations: Limitations, position: Position) => void;\n zoomPanStyle: (style: SafeString) => void;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLDivElement;\n}\n\n/**\n * The timeout in milliseconds for mouse actions.\n */\nconst MOUSE_ACTION_YIELD_MS = 2000;\n\n/**\n * Returns a size style class used for css which matches the given player size\n */\nexport function getSizeStyleClassFromPlayerSize(playerSize: PlayerSize): string {\n switch (playerSize) {\n case PlayerSize.XXSmall:\n return 'xxsmall-width';\n case PlayerSize.XSmall:\n return 'xsmall-width';\n case PlayerSize.Small:\n return 'small-width';\n case PlayerSize.Medium:\n return 'medium-width';\n default:\n return 'large-width';\n }\n}\n\n/**\n * Converts an error enum into an error message.\n * Some resources have a 'Short' version that is used for small player widths.\n */\nfunction getErrorMessageStringFromEnum(this: VideoPlayerOverlay): string | null {\n const { args } = this,\n { errorEnum, playerSize } = args,\n smallPlayerSize = [PlayerSize.Small, PlayerSize.XSmall, PlayerSize.XXSmall].includes(playerSize);\n\n let resource = '';\n\n // NOTE: all messages longer than 48 characters should have small player (short) translation options\n switch (errorEnum) {\n case NoError:\n return null;\n case DeviceNotFound:\n resource = 'deviceNotFound';\n break;\n case DeviceNotConnected:\n resource = smallPlayerSize ? 'deviceNotConnectedShort' : 'deviceNotConnected';\n break;\n case LiveStreamConnectionFailed:\n resource = smallPlayerSize ? 'failedToConnectShort' : 'failedToConnect';\n break;\n case StreamDisconnected:\n resource = 'streamHasDisconnected';\n break;\n case LiveStreamTimeout:\n case PlaybackStreamTimeout:\n resource = smallPlayerSize ? 'streamHasTimedOutShort' : 'streamHasTimedOut';\n break;\n case NoPermissions:\n resource = smallPlayerSize ? 'noPermissionsShort' : 'noPermissions';\n break;\n case NoPlaybackVideoAvailable:\n resource = 'noVideoAvailable';\n break;\n case PlaybackEnded:\n resource = smallPlayerSize ? 'playbackEndedMessageShort' : 'playbackEndedMessage';\n break;\n case PlaybackServerConnectionFailed:\n resource = 'cannotConnectToServer';\n break;\n case PlaybackStreamConnectionFailed:\n resource = 'connectionFailedMessage';\n break;\n case SdCardNotWorking:\n resource = smallPlayerSize ? 'sdCardNotWorkingShort' : 'sdCardNotWorking';\n break;\n case SdCardRemoved:\n resource = smallPlayerSize ? 'sdCardRemovedShort' : 'sdCardRemoved';\n break;\n case StreamNotAvailable:\n resource = 'streamNotAvailable';\n break;\n case RecentlyAddedRecordingSchedule:\n resource = smallPlayerSize ? 'recentlyAddedRecordingScheduleShort' : 'recentlyAddedRecordingSchedule';\n break;\n case SdCardHasRecordingsFromAnotherCamera:\n resource = smallPlayerSize\n ? 'sdCardHasRecordingsFromAnotherCameraShort'\n : 'sdCardHasRecordingsFromAnotherCamera';\n break;\n case WebRtcIceNegotiationFailed:\n resource = smallPlayerSize ? 'webRtcIceNegotiationFailedShort' : 'webRtcIceNegotiationFailed';\n break;\n case SdCardNotSupported:\n resource = smallPlayerSize ? 'sdCardNotSupportedShort' : 'sdCardNotSupported';\n break;\n case AutoplayFailed:\n resource = smallPlayerSize ? 'autoplayHasFailedShort' : 'autoplayHasFailed';\n break;\n case StunReconnectionFailed:\n resource = 'stunReconnectionFailed';\n break;\n case SdCardHasRecordingsFromAnotherCustomer:\n resource = smallPlayerSize\n ? 'sdCardHasRecordingsFromAnotherCustomerShort'\n : 'sdCardHasRecordingsFromAnotherCustomer';\n break;\n case SdCardIsBusy:\n resource = 'sdCardIsBusy';\n break;\n case SdCardNotSupported4Mp:\n resource = smallPlayerSize ? 'sdCardNotSupported4MpShort' : 'sdCardNotSupported4Mp';\n break;\n case DataUsageCritical:\n resource = smallPlayerSize ? 'dataUsageCriticalShort' : 'dataUsageCritical';\n break;\n default:\n console.error(`Invalid value for errorEnum=${errorEnum}.`);\n return null;\n }\n\n return this.intl.t(`generic.video.streamingErrors.${resource}`);\n}\n\n/**\n * The overlay that fits on top of the player and displays information about the current streaming status.\n */\nexport default class VideoPlayerOverlay extends Component {\n tagName = '';\n\n // region Services.\n\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare stats: Stats;\n\n // endregion\n\n // region Player States.\n\n /**\n * Is the player currently playing?\n */\n @equal('args.playerState', PLAYING_STATE)\n declare isPlaying: boolean;\n\n /**\n * Is the player currently initializing?\n */\n @equal('args.playerState', INITIALIZING_STATE)\n declare isInitializing: boolean;\n\n /**\n * Is the player currently loading?\n */\n @equal('args.playerState', LOADING_STATE)\n declare isLoading: boolean;\n\n /**\n * Is the player currently frozen?\n */\n @equal('args.playerState', FROZEN_STATE)\n declare isFrozen: boolean;\n\n /**\n * Is the player currently disconnected?\n */\n @equal('args.playerState', DISCONNECTED_STATE)\n declare isDisconnected: boolean;\n\n // endregion\n\n // region Size Properties.\n\n /**\n * The class given to the base-player-overlay that depends on the width of the player.\n */\n sizeStyleClass = '';\n\n // endregion\n\n /**\n * If the camera is in a loading state and also not currently in a gap (gap only relevant for playback)\n */\n @computed('isLoading', 'args.camera.isInGap')\n get isLoadingAndNotInGap(): boolean {\n const { args, isLoading } = this,\n { isInGap } = args.camera || {};\n\n return isLoading && !isInGap;\n }\n\n /**\n * The name to show as connecting to in the overlay\n */\n @computed('args.{playerType,camera.svrVideoSource.svr.isFulfilled}')\n get deviceName(): Promise {\n const { args } = this,\n { camera, playerType } = args;\n\n return (async () => {\n if (playerType === StreamUsage.Svr) {\n const svrVideoSource = await camera.svrVideoSource;\n const svr = await svrVideoSource?.svr;\n\n // If no svr description, then use default SVR string\n return svr?.description || this.intl.t('generic.video.svrSingular');\n }\n\n return camera.description;\n })();\n }\n\n /**\n * The text to show in the initialization state.\n * We use a different text if we are automatically retrying a connection to a camera.\n */\n @computed('deviceName', 'args.restartCount')\n get initializingText(): Promise {\n return this.deviceName.then((cameraName: string) => {\n const translationString = this.args.restartCount\n ? 'generic.video.retryingConnectionToCamera'\n : 'generic.video.connectingToCamera';\n\n return this.intl.t(translationString, {\n cameraName\n });\n });\n }\n\n /**\n * The video source error message to display on the overlay if disconnected\n * based on videoSourceErrorEnum and the size of the player.\n */\n @computed('args.{errorEnum,playerSize}')\n get errorMessage(): string {\n return getErrorMessageStringFromEnum.call(this) || '';\n }\n\n /**\n * The size of the progress bar component.\n */\n @computed('args.playerSize')\n get progressBarSize(): BarSize {\n return [PlayerSize.XXSmall, PlayerSize.XSmall, PlayerSize.Small].includes(this.args.playerSize)\n ? 'x-small'\n : 'medium';\n }\n\n /**\n * The svg icon to display.\n */\n @computed('args.{errorEnum,hasStreamTimedOut}')\n get svgIcon(): string {\n return this.args.hasStreamTimedOut || this.args.errorEnum === RecentlyAddedRecordingSchedule\n ? 'clock'\n : 'issue';\n }\n\n /**\n * The name of the system for the camera\n */\n @computed('args.camera.system.description')\n get systemDescription(): Promise {\n return (async () => {\n const system = await this.args.camera.system;\n\n return system.description;\n })();\n }\n\n /**\n * Handles a user hovering or clicking over one of the players.\n */\n @action handleMouseAction(isHoveringOrClicking: boolean): void {\n this.handleMouseActionTask.perform(isHoveringOrClicking);\n }\n\n /**\n * Sets the size style class of the base-player-overlay,\n * so the style can be adjusted for smaller players.\n */\n @action updateOverlaySize(el: HTMLDivElement): void {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n return;\n }\n\n const playerSize = getPlayerSize(this.args.playerDimensions, el.clientWidth);\n\n if (playerSize == null) {\n return;\n }\n\n // Assigns a class to the player-overlay, depending on the size of the player.\n set(this, 'sizeStyleClass', getSizeStyleClassFromPlayerSize(playerSize));\n }\n\n /**\n * Task for handling a user hovering or clicking over one of the players\n */\n handleMouseActionTask: Task = task(\n { restartable: true },\n async (isHoveringOrClicking: boolean) => {\n if (!this.args.setIsHoveringOrClicking) {\n return;\n }\n\n this.args.setIsHoveringOrClicking(isHoveringOrClicking);\n if (isHoveringOrClicking) {\n await timeout(MOUSE_ACTION_YIELD_MS);\n this.args.setIsHoveringOrClicking(false);\n }\n }\n );\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::VideoPlayer::Overlay': typeof VideoPlayerOverlay;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{#if @model.isCameraLowDataMode}}\\n

    \\n {{if this.isOeStream (tc this \\'svrLowDataModeStreamInfo\\' timeoutMinutes=this.timeoutMinutes) (tc this \\'cameraLowDataModeStreamInfo\\' timeoutMinutes=this.timeoutMinutes)}}\\n {{#if @model.canViewKnowledgeBase}}\\n {{t \\'generic.learnMore\\'}}\\n {{/if}}\\n

    \\n {{else if @model.isStreamingInfinitelyUsingStun}}\\n

    \\n {{if this.isOeStream (tc this \\\"svrStunModalStreamInfo\\\") (tc this \\'cameraStunModalStreamInfo\\')}}\\n {{#if @model.canViewKnowledgeBase}}\\n {{t \\'generic.learnMore\\'}}\\n {{/if}}\\n

    \\n {{else}}\\n

    \\n {{if this.isOeStream (tc this \\'svrProxyModalStreamInfo\\' timeoutMinutes=this.timeoutMinutes) (tc this \\'cameraTurnAndProxyModalStreamInfo\\' timeoutMinutes=this.timeoutMinutes)}}\\n {{#if @model.canViewKnowledgeBase}}\\n {{t \\'generic.learnMore\\'}}\\n {{/if}}\\n

    \\n {{#unless this.isOeStream}}\\n

    {{tc this \\'turnModalTryDirectStreamInfo\\'}}

    \\n {{/unless}}\\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/modals/video/webrtc-streaming-details/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\nimport { WebRTCStreamTypeButtonRefreshedStream } from 'customer-site/enums/TrackedEvent';\nimport { buildKnowledgeBaseURL } from 'customer-site/helpers/knowledge-base-link';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type Stats from 'customer-site/services/stats';\n\ninterface WebrtcStreamingDetailsModalArgs {\n model: {\n canViewKnowledgeBase: boolean;\n isEndToEndStreamUsingTurn: boolean;\n isStreamingInfinitelyUsingStun: boolean;\n isCameraLowDataMode: boolean;\n retryEndToEndWithAudioRequest(forceStunWithExtendedTimeouts: boolean): void;\n isOeStream: boolean;\n };\n}\n/**\n * Hashes to add to the end of our KB article to link to the appropriate STUN/TURN/proxy section.\n */\nexport const WebRTCStreamingKnowledgeBaseSTUNHash = `#WebRTC_Direct_Connection_streaming`,\n WebRTCStreamingKnowledgeBaseTURNHash = `#WebRTC_Relayed_Connection_streaming`,\n WebRTCStreamingKnowledgeBaseProxyHash = `#WebRTC_Proxy_streaming`;\n\n/**\n * @classdesc\n * A dialog for displaying additional TURN stream information and the option to retry a STUN stream.\n */\n@intlPath({ path: 'modals/video/webrtc-streaming-details' })\nexport default class WebrtcStreamingDetailsModal extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n @service declare stats: Stats;\n\n tagName = '';\n\n /**\n * Is this an OE stream?\n */\n @reads('args.model.isOeStream')\n declare isOeStream: boolean;\n\n /**\n * The WebRTC streaming knowledge URL, linking to either the STUN, TURN, or proxy section.\n */\n @computed('args.model.{isEndToEndStreamUsingTurn,isStreamingInfinitely}')\n get webrtcStreamingKnowledgeBaseUrl(): string {\n const { isEndToEndStreamUsingTurn, isStreamingInfinitelyUsingStun } = this.args.model;\n let urlHash = WebRTCStreamingKnowledgeBaseProxyHash;\n\n if (isStreamingInfinitelyUsingStun) {\n urlHash = WebRTCStreamingKnowledgeBaseSTUNHash;\n } else if (isEndToEndStreamUsingTurn) {\n urlHash = WebRTCStreamingKnowledgeBaseTURNHash;\n }\n\n return buildKnowledgeBaseURL(CustomerKnowledgeBase.WebRTCStreamingEndToEnd, this.contextManager, {\n hash: urlHash\n });\n }\n\n /**\n * The timeout minutes to show for TURN or proxy streams in their messaging.\n */\n @computed('args.model.{isCameraLowDataMode,isEndToEndStreamUsingTurn}', 'isOeStream')\n get timeoutMinutes(): number {\n if (this.isOeStream) {\n return 10;\n }\n\n return this.args.model.isEndToEndStreamUsingTurn || this.args.model.isCameraLowDataMode ? 15 : 3;\n }\n\n /**\n * The \"Try Direct Connection\" and \"Ok\" buttons to display in the modal footer,\n * depending on the stream state.\n */\n get modalButtons() {\n const { intl, modals } = this,\n { isStreamingInfinitelyUsingStun, retryEndToEndWithAudioRequest } = this.args.model,\n tryDirectConnectionButton = getModalFooterButton(intl.tc(this, 'tryDirectConnection'), () => {\n this.stats.logEvent(WebRTCStreamTypeButtonRefreshedStream);\n retryEndToEndWithAudioRequest(true);\n }),\n okButton = getModalFooterButton(intl.t('generic.ok'), () => modals.closeModal(), 'btn btn-primary');\n\n return isStreamingInfinitelyUsingStun ? [okButton] : [tryDirectConnectionButton, okButton];\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Video::WebrtcStreamingDetails': typeof WebrtcStreamingDetailsModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    {{@buttonText}}
    \\n \\n \\n \\n
    \",{ moduleName: \"customer-site/components/video/video-player/overlay/player-buttons/arrow-button/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\ninterface VideoPlayerButtonsArrowButtonSignature {\n Args: {\n buttonText: string;\n };\n}\n\nconst VideoPlayerButtonsArrowButton = templateOnlyComponent();\nexport default VideoPlayerButtonsArrowButton;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::VideoPlayer::Overlay::PlayerButtons::ArrowButton': typeof VideoPlayerButtonsArrowButton;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.shouldDisplayWebRtcStreamTypeButton}}\\n
    \\n \\n
    \\n{{/if}}\\n\\n{{#if this.linkToOtherStreamingPage}}\\n \\n \\n \\n{{/if}}\\n\\n\\n {{! Using a key to avoid unnecessary re-rendering. }}\\n {{#each this.buttonSections key=\\'isSectionVisible isLast\\' as |section|}}\\n {{#if section.isSectionVisible}}\\n
    \\n {{! Using a key to avoid re-rendering when there\\'s no functional change in the buttons. }}\\n {{#each section.buttons key=\\'classPrefix\\' as |btn|}}\\n {{! @glint-expect-error This button doesn\\'t seem to have a shouldHideButton property, please fix this. }}\\n {{#unless btn.shouldHideButton}}\\n
    \\n {{#if section.isSpinning}}\\n \\n {{else}}\\n {{! @glint-expect-error Multiple errors with Button args, please fix this. }}\\n \\n {{#if @areButtonsInPopover}}\\n \\n {{btn.text}}\\n \\n {{/if}}\\n {{#if section.isPulsating}}\\n \\n {{/if}}\\n {{/if}}\\n
    \\n {{/unless}}\\n {{/each}}\\n
    \\n {{/if}}\\n {{/each}}\\n\",{ moduleName: \"customer-site/components/video/video-player/overlay/player-buttons/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { get } from '@ember/object';\nimport { computed, action } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { guidFor } from '@ember/object/internals';\nimport { inject as service } from '@ember/service';\nimport { compare } from '@ember/utils';\nimport WebrtcStreamingDetailsModal from 'customer-site/components/modals/video/webrtc-streaming-details/index';\nimport { On } from 'customer-site/enums/LightStatus';\nimport { transitionToSettings } from 'customer-site/utils/video/general';\nimport { getContextAwareSvrTimelinePage } from 'customer-site/video/svr-timeline/route';\nimport { intlPath } from '@adc/i18n/path';\nimport DataUsageModeEnum from '@adc/video-player/enums/DataUsageModeEnum';\nimport {\n EmberEnterpriseVideoClips,\n EmberEnterpriseVideoLiveView,\n EmberEnterpriseVideoSvrTimeline,\n EmberSDCard,\n EmberVideoClips,\n EmberVideoLiveView,\n EmberVideoSvrTimeline,\n VideoCameraSettingsOverview\n} from '../../../../../enums/CustomerPageUrl';\nimport {\n PlayerPTZ,\n PlayerRecordClip,\n PlayerSettings,\n PlayerSnapshot,\n WebRTCStreamTypeButtonClicked,\n OperatorAudioNotAvailableButtonClicked\n} from '../../../../../enums/TrackedEvent';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type Store from '@ember-data/store';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type Stats from 'customer-site/services/stats';\nimport type { OperatorAudioNotAvailableButtonContents } from '../general-overlay-features/index';\nimport type VideoLiveOverlay from '../live-overlay';\n\nexport enum PlayerSize {\n XXSmall,\n XSmall,\n Small,\n Medium,\n Large\n}\n\nexport const ButtonPanTilt = 1,\n ButtonRequestRecordingAndSnapshot = 2,\n ButtonDownload = 3,\n ButtonSettings = 4,\n ButtonMoreOptions = 5,\n ButtonDetailedOsd = 6,\n /**Warning sound deterrence button. */\n ButtonDeterrent = 7,\n ButtonAdvancedVideoSearch = 8,\n ButtonOperatorLastViewed = 9,\n ButtonOperatorAudioNotAvailable = 10,\n ButtonAssociatedDeviceActions = 11,\n /**Camera-attached lights like the VC729P's floodlights. */\n ButtonLight = 12;\n\nexport const ButtonPixelsWide = 40;\nconst SectionExtraPixelsWideLargeMode = 20;\nconst WebRtcButtonPixelsWide = 32;\n\n/**\n * The player buttons that will never be ellipsized to display.\n */\nconst StreamingPageLinkOnly = 0,\n StreamingPageLinkAndWebRtcButton = 1,\n NeitherStreamingPageLinkOrWebRtcButton = 2;\n\n/**\n * The `ButtonAnimation` is a promise that settles with a boolean based on the result/rejection from the button action.\n */\ntype ButtonAnimation = Promise;\n\ntype ButtonAction = (...args: any[]) => any;\n\ninterface PlayerButton {\n action: ButtonAction;\n classPrefix: string;\n icon: string;\n text: string;\n shouldDisable: boolean;\n}\n\ninterface ButtonSection {\n buttons: (PlayerButton | undefined)[];\n displayOrder?: number;\n ellipsisPriority: number;\n isLast?: boolean;\n isSectionVisible: boolean;\n isPulsating?: boolean;\n isSpinning?: boolean;\n}\n\ninterface StreamingPageLink {\n caption: string;\n text: string;\n pageEnum: number;\n}\n\ninterface WebrtcStreamTypeButton {\n svg: string;\n text: string;\n}\n\ninterface PlayerButtonsSignature {\n Args: {\n areButtonsInPopover: boolean;\n availableButtonSpace: number;\n camera: Camera;\n cannotDoBrowserUploadsForOperatorSite: boolean;\n canZoomPtzOut: boolean;\n lightState?: number;\n enabledButtons: number[];\n lightAction: () => void;\n goToAvsSearch?: (cameraId: string) => void;\n isDownloadTaskRunning: boolean;\n isEndToEndStreamUsingTurn?: boolean;\n isLiveVideo: boolean;\n isOeStream: boolean;\n isOperatorSite?: boolean;\n isSelectedForKeyboardPress: boolean;\n isUploadClipTaskRunning?: boolean;\n haveReceivedWebrtcStats: boolean;\n isStreamingEndToEnd: boolean;\n hasStreamConnected: boolean;\n isWarningSoundOn: boolean;\n onBottomBarUpdate?: () => void;\n operatorAudioNotAvailableButtonContents?: OperatorAudioNotAvailableButtonContents;\n operatorLastViewedAction: (areButtonsInPopover: boolean) => void;\n playerSize: number;\n ptzIsPhysical: boolean;\n /** An action from Live Overlay or a noop */\n requestRecording: VideoLiveOverlay['requestRecording'] | VoidFunction;\n retryEndToEndWithAudioRequest: (forceStunWithExtendedTimeouts: boolean) => void;\n /** An action from Live Overlay or a noop */\n saveSnapshot: VideoLiveOverlay['saveSnapshot'] | VoidFunction;\n showDownloadPopover: (areButtonsInPopover: boolean) => void;\n toggleDetailedOsd: () => void;\n toggleMoreOptions: () => void;\n togglePanTiltOptions: (usePanTiltAnchor: boolean) => void;\n /** An action from Live Overlay or a noop */\n warningSoundAction: VideoLiveOverlay['onWarningSoundAction'] | VoidFunction;\n associatedDevicesAction: () => void;\n };\n}\n\n/**\n * Returns the properties needed for creating a button component\n *\n * @param action\n * @param classPrefix\n * @param icon\n * @param text\n * @param shouldHideButton\n * @param shouldDisable\n */\nfunction createButton(\n action: ButtonAction,\n classPrefix: string,\n icon: string,\n text: string,\n shouldHideButton = false,\n shouldDisable = false\n): PlayerButton | undefined {\n return shouldHideButton ? undefined : { action, classPrefix, icon, text, shouldDisable };\n}\n\n/**\n * Transitions to a video settings route.\n *\n * @param routeEnum The enum for the route we want to transition to.\n */\nexport function transitionToSettingsRoute(\n contextManager: ContextManager,\n store: Store,\n camera: Camera,\n enabledButtons: number[],\n routeEnum: number\n): void {\n const canViewSettings = enabledButtons.includes(ButtonSettings);\n transitionToSettings(contextManager, store, camera, routeEnum, canViewSettings);\n}\n\nfunction WarningSoundAndLightButtonsSection(this: PlayerButtons): {\n buttons: (PlayerButton | undefined)[];\n visibility: boolean;\n} {\n const { intl, identityManager, clickWarningSound } = this,\n { camera, lightState, lightAction, enabledButtons, isWarningSoundOn } = this.args;\n const warningSoundIconKey = 'alarm',\n warningSoundLabelKey = isWarningSoundOn\n ? 'generic.video.warningSound.cancelWarningSound'\n : 'generic.video.warningSound.activateWarningSound',\n warningSoundCssClass = isWarningSoundOn ? 'warning-sound-active' : 'warning-sound',\n warningSoundLabel = intl.t(warningSoundLabelKey),\n canSirenBeActivatedByLogin = camera.canSirenBeActivatedByLogin,\n supportsSiren = camera.supportsSiren,\n isLoginAsLoginRep = identityManager.isLoginAsLoginRep,\n // Check whether warning sounds are not available because it is a rep login (without 24/7 Managed Access and not during EE/VV operator session). In this case the button should be visible but disabled.\n // This logic is also meant to keep button enabled for 24/7 Managed Access logins and operators on EE/VV live view (when given permission), where isLoginAsLoginRep is true but canSirenBeActivatedByLogin is also true.\n // -----\n // There are Visual Verification and Remote Video Monitoring instances where we do not want to have the warning sound button disabled or not displayed for the rep.\n // We want to allow an VV/EE rep to use warning sounds if the central station supports operator triggered warning sounds. The operator session combined with central station permission check is included in camera.canSirenBeActivatedByLogin\n isWarningSoundDisabled = !canSirenBeActivatedByLogin && supportsSiren && isLoginAsLoginRep,\n // If the warning sound button is disabled and the rep is an EE/VV operator then we do not want to display the warning sound button\n isWarningSoundVisible =\n enabledButtons.includes(ButtonDeterrent) && (camera.canSirenBeActivatedByLogin || isWarningSoundDisabled);\n\n const isLightOn = lightState === On,\n lightIconKey = isLightOn ? 'light-on' : 'light',\n lightLabelKey = isLightOn ? 'toggleLightOff' : 'toggleLightOn',\n lightCssClass = isLightOn ? 'light-on' : 'light-off',\n lightLabel = intl.tc(this, lightLabelKey),\n isLightDisabled = isWarningSoundOn && isLoginAsLoginRep,\n isLightVisible = enabledButtons.includes(ButtonLight) && camera.supportsLight && lightState != null;\n\n const warningSoundAndLightButtons = [];\n\n isWarningSoundVisible &&\n warningSoundAndLightButtons.push(\n createButton(\n () => clickWarningSound(),\n warningSoundCssClass,\n warningSoundIconKey,\n warningSoundLabel,\n false,\n isWarningSoundDisabled\n )\n );\n isLightVisible &&\n warningSoundAndLightButtons.push(\n createButton(lightAction, lightCssClass, lightIconKey, lightLabel, false, isLightDisabled)\n );\n\n return {\n buttons: warningSoundAndLightButtons,\n visibility: isWarningSoundVisible || isLightVisible\n };\n}\n\n/**\n * @classdesc\n *\n * Component to output all of the player buttons we need for the live view player.\n * We output different buttons depending on the player size and whether this component is within the live view player 'more options' popover.\n */\n@intlPath({ path: 'video/video-player/overlay/player-buttons' })\nexport default class PlayerButtons extends Component {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare stats: Stats;\n @service declare modals: ModalService;\n\n /**\n * How many pixels wide is the streaming page link\n */\n @tracked streamingPageLinkSize = 0;\n\n /**\n * The unique identifier that ember gives for this component when it is instantiated\n */\n @tracked guid: string;\n\n constructor(host: unknown, args: PlayerButtonsSignature['Args']) {\n super(host, args);\n\n this.guid = guidFor(this);\n }\n\n /**\n * Should we display the streaming type button? Only display if we can display both the streaming page link and the WebRTC stream type button.\n */\n @equal('neverEllipsizedButtonsToDisplay', StreamingPageLinkAndWebRtcButton)\n declare shouldDisplayWebRtcStreamTypeButton: boolean;\n\n /**\n * The id to give the player-buttons-sections div.\n */\n get idForPlayerButtons(): string {\n return `player-buttons-sections-${this.guid}`;\n }\n\n /**\n * Returns an object with info for displaying a link to an other streaming page for the same device\n */\n @computed(\n 'args.{areButtonsInPopover,isLiveVideo}',\n 'args.camera.{hasSdRecordingSchedule,hasSvrSchedule}',\n 'contextManager.identityModel.isEnterprise',\n 'neverEllipsizedButtonsToDisplay'\n )\n get linkToOtherStreamingPage(): StreamingPageLink | null {\n const { areButtonsInPopover, camera, isLiveVideo } = this.args,\n { contextManager, neverEllipsizedButtonsToDisplay, intl } = this,\n { isEnterprise } = contextManager.identityModel;\n\n if (areButtonsInPopover || neverEllipsizedButtonsToDisplay === NeitherStreamingPageLinkOrWebRtcButton) {\n return null;\n }\n\n if (isLiveVideo) {\n let pageEnum, captionResource;\n\n if (\n camera.hasSvrSchedule &&\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n (contextManager.getRouteItem(EmberVideoSvrTimeline) ||\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(EmberEnterpriseVideoSvrTimeline))\n ) {\n pageEnum = getContextAwareSvrTimelinePage(isEnterprise);\n captionResource = 'viewSvr';\n\n // checking for enterprise for SD since there is not (yet) an enterprise page for this.\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n } else if (contextManager.getRouteItem(EmberSDCard) && camera.hasSdRecordingSchedule && !isEnterprise) {\n pageEnum = EmberSDCard;\n captionResource = 'viewOnboard';\n } else if (\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(EmberEnterpriseVideoClips) ||\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(EmberVideoClips)\n ) {\n pageEnum = isEnterprise ? EmberEnterpriseVideoClips : EmberVideoClips;\n captionResource = 'viewClips';\n } else {\n return null;\n }\n\n return {\n caption: intl.tc(this, captionResource),\n text: intl.t('generic.video.recordings'),\n pageEnum\n };\n } else if (\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(EmberVideoLiveView) ||\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(EmberEnterpriseVideoLiveView)\n ) {\n return {\n caption: intl.tc(this, 'viewLive'),\n text: intl.t('generic.video.live'),\n pageEnum: isEnterprise ? EmberEnterpriseVideoLiveView : EmberVideoLiveView\n };\n }\n\n return null;\n }\n\n /**\n * The content of the WebRTC stream type button.\n * Returns the correct svg and text to use.\n */\n @computed('args.{camera.dataUsageMode,isEndToEndStreamUsingTurn,isStreamingEndToEnd}')\n get webRtcStreamTypeButtonContent(): WebrtcStreamTypeButton {\n let svg = 'e2e-off',\n resourceKey = 'proxyStreamInfo';\n\n if (this.args.isStreamingEndToEnd) {\n svg = 'e2e';\n resourceKey = 'endToEndStreamInfo';\n\n if (\n this.args.isEndToEndStreamUsingTurn ||\n this.args.camera.dataUsageMode === DataUsageModeEnum.LowDataMode\n ) {\n svg = 'schedule';\n resourceKey = 'turnStreamInfo';\n }\n }\n\n return {\n svg,\n text: this.intl.tc(this, resourceKey)\n };\n }\n\n /**\n * Returns the button sections that should be available for the player-buttons component to use. This is essentially the same as buttonSections except we haven't yet\n * factored in whether or not the button should be in the bottom bar or the popover. (buttonsSections figures that out)\n */\n @computed(\n 'args.{canZoomPtzOut,enabledButtons,isDownloadTaskRunning,isWarningSoundOn,operatorAudioNotAvailableButtonContents,playerSize,ptzIsPhysical,lightState,areButtonsInPopover,isLiveVideo}',\n 'contextManager.{identityModel.isOperatorSite}',\n 'identityManager.{isEnterprise,isLoginAsLoginRep}',\n 'args.camera.{supportsRecording,canPanTilt,canRequestRecording,canSirenBeActivatedByLogin,canTakeSnapshot,supportsSnapShot}'\n )\n get availableButtonSections(): ButtonSection[] {\n const {\n areButtonsInPopover,\n camera,\n canZoomPtzOut,\n enabledButtons,\n isDownloadTaskRunning,\n operatorAudioNotAvailableButtonContents,\n ptzIsPhysical\n } = this.args,\n panTiltIcon = canZoomPtzOut ? 'video-pantilt-bluedot' : 'video-pantilt';\n\n const warningSoundAndLightButtonsSection = WarningSoundAndLightButtonsSection.call(this);\n\n // the display order represents the left to right order of the buttons when they are displayed\n // the ellipsis priority represents how we determine which buttons (when all of them dont fit in the bottom bar) to keep in the bottom bar vs putting\n // in the more-options (ellipsizing). IE if there's room to show one button in the bottom bar, the one with the lowest ellipsisPriority will win out.\n const buttonSections: ButtonSection[] = [\n // Associated Devices Action Button: Buzz/Unlock/Lock Door\n {\n isSectionVisible: enabledButtons.includes(ButtonAssociatedDeviceActions),\n buttons: [\n createButton(\n () => this.clickAssociatedDevicesActionButton(),\n 'associated-devices-actions',\n 'tap',\n this.intl.t('generic.actions')\n )\n ],\n displayOrder: 1,\n ellipsisPriority: 1\n },\n // Advanced Video Search Section\n {\n isSectionVisible: enabledButtons.includes(ButtonAdvancedVideoSearch),\n buttons: [\n createButton(\n () => this.args.goToAvsSearch?.(camera.id),\n 'advanced-video-search',\n 'search',\n this.intl.t('generic.search')\n )\n ],\n displayOrder: 2,\n ellipsisPriority: 6\n },\n // The Operator Last Viewed Camera Section\n {\n isSectionVisible: enabledButtons.includes(ButtonOperatorLastViewed),\n buttons: [\n createButton(\n () => this.args.operatorLastViewedAction(areButtonsInPopover),\n 'operator-last-viewed',\n 'monitoring',\n this.intl.t('generic.operatorLastViewed')\n )\n ],\n displayOrder: 3,\n ellipsisPriority: 2\n },\n // Lights/Warning Sound Section\n {\n isSectionVisible: warningSoundAndLightButtonsSection.visibility,\n buttons: warningSoundAndLightButtonsSection.buttons,\n displayOrder: 4,\n ellipsisPriority: 3\n },\n // The Snapshot/Recording Section\n {\n isSectionVisible:\n enabledButtons.includes(ButtonRequestRecordingAndSnapshot) &&\n (camera.supportsRecording || camera.supportsSnapShot),\n buttons: [\n createButton(\n (buttonAnimation: ButtonAnimation) => this.clickSnapshot(buttonAnimation),\n 'snapshot',\n 'camera',\n this.intl.t('generic.video.takeASnapshot'),\n !camera.supportsSnapShot,\n !camera.canTakeSnapshot\n ),\n // Exclude Request Recording from playback pages because there is an export clip function and onboard recording.\n this.args.isLiveVideo &&\n createButton(\n (buttonAnimation: ButtonAnimation) => this.clickRequestRecording(buttonAnimation),\n 'request-recording',\n 'video-record',\n this.intl.t('generic.video.requestRecording'),\n !camera.supportsRecording,\n !camera.canRequestRecording\n )\n ].filter((item): item is PlayerButton => !!item),\n displayOrder: 5,\n ellipsisPriority: 4\n },\n // The Download Section\n {\n isSectionVisible: enabledButtons.includes(ButtonDownload),\n buttons: [\n createButton(\n () => this.clickDownload(),\n 'download',\n 'download',\n this.intl.t('generic.video.exportVideo')\n )\n ],\n isSpinning: isDownloadTaskRunning,\n displayOrder: 6,\n ellipsisPriority: 5\n },\n // The Operator Portal Audio Section\n {\n isSectionVisible: enabledButtons.includes(ButtonOperatorAudioNotAvailable),\n buttons: [\n createButton(\n () => this.clickOperatorAudioNotAvailable(),\n operatorAudioNotAvailableButtonContents?.streamRetryable\n ? 'operator-audio-not-available'\n : 'not-retryable operator-audio-not-available',\n operatorAudioNotAvailableButtonContents?.icon || 'mic-muted',\n this.intl.tc(this, 'audioNotAvailable')\n )\n ],\n displayOrder: 7,\n ellipsisPriority: 7\n },\n // The Pan Tilt Section\n {\n isSectionVisible: enabledButtons.includes(ButtonPanTilt),\n buttons: [\n createButton(\n () => this.clickPanTilt(),\n 'pan-tilt',\n panTiltIcon,\n this.intl.t(`generic.video.${ptzIsPhysical ? 'panTilt' : 'digitalZoom'}`)\n )\n ],\n displayOrder: 8,\n ellipsisPriority: 8\n },\n // The OSD Section\n {\n isSectionVisible: enabledButtons.includes(ButtonDetailedOsd),\n buttons: [\n createButton(\n () => this.args.toggleDetailedOsd(),\n 'osd',\n 'video-osd',\n this.intl.t('generic.video.detailedOsd')\n )\n ],\n displayOrder: 9,\n ellipsisPriority: 10\n },\n // The Settings Section\n {\n isSectionVisible: enabledButtons.includes(ButtonSettings),\n buttons: [\n createButton(() => this.navigateToSettings(), 'settings', 'cog', this.intl.t('generic.settings'))\n ],\n // The display order is intentionally different from the ellipsis priority. (users expect to see Settings at the end of the list)\n displayOrder: 10,\n ellipsisPriority: 9\n }\n ];\n\n return buttonSections\n .filter((section) => !!section.isSectionVisible)\n .sort((a, b) => a.ellipsisPriority - b.ellipsisPriority) as ButtonSection[];\n }\n\n /**\n * The width size of all button sections\n */\n get sizeOfAllButtonSections(): number {\n const { playerSize } = this.args,\n { availableButtonSections } = this,\n extraSpacePerSection = playerSize === PlayerSize.Large ? SectionExtraPixelsWideLargeMode : 0;\n\n let sizeOfAllSections = 0;\n\n availableButtonSections.forEach((buttonSection) => {\n sizeOfAllSections += ButtonPixelsWide * buttonSection.buttons.length + extraSpacePerSection;\n });\n\n return sizeOfAllSections;\n }\n\n /**\n * Which buttons that never ellipsize should we display?\n * Only display the WebRTC stream type button if we are streaming WebRTC live view, the camera supports end-to-end streaming,\n * and there is enough space to display all buttons non-ellipsized, the streaming page link, and this button.\n * Only display the streaming page link (which goes to either a LIVE or RECORDINGS page for device) if there is enough space to display all buttons non-ellipsized and also this link.\n */\n @computed(\n 'args.{availableButtonSpace,camera,haveReceivedWebrtcStats,hasStreamConnected}',\n 'sizeOfAllButtonSections',\n 'streamingPageLinkSize'\n )\n get neverEllipsizedButtonsToDisplay(): number {\n const { sizeOfAllButtonSections, streamingPageLinkSize } = this,\n { camera, availableButtonSpace, haveReceivedWebrtcStats, hasStreamConnected, isLiveVideo } = this.args,\n enoughSpaceForStreamingPageLink = sizeOfAllButtonSections + streamingPageLinkSize < availableButtonSpace,\n enoughSpaceForWebRtcStreamTypeButton =\n sizeOfAllButtonSections + streamingPageLinkSize + WebRtcButtonPixelsWide < availableButtonSpace,\n supportsWebRtc = isLiveVideo ? camera.supportsEndToEndWebRTCStreaming : camera.svrSupportsWebRtc;\n\n if (enoughSpaceForWebRtcStreamTypeButton && hasStreamConnected && haveReceivedWebrtcStats && supportsWebRtc) {\n return StreamingPageLinkAndWebRtcButton;\n } else if (enoughSpaceForStreamingPageLink) {\n return StreamingPageLinkOnly;\n }\n\n return NeitherStreamingPageLinkOrWebRtcButton;\n }\n\n /**\n * How many pixels of extra space does each button section take up. (In large player size it has borders/margins)\n */\n get extraSpacePerSection(): number {\n return this.args.playerSize === PlayerSize.Large ? SectionExtraPixelsWideLargeMode : 0;\n }\n\n /**\n * The different button sections to display on the player:\n * pan-tilt, snapshot/record, live view display, settings, and more options.\n */\n @computed(\n 'args.{areButtonsInPopover,enabledButtons,availableButtonSpace}',\n 'extraSpacePerSection',\n 'availableButtonSections',\n 'sizeOfAllButtonSections'\n )\n get buttonSections(): ButtonSection[] {\n const { areButtonsInPopover, enabledButtons } = this.args,\n { extraSpacePerSection, availableButtonSections, sizeOfAllButtonSections } = this;\n\n let { availableButtonSpace } = this.args,\n bottomBarSections: ButtonSection[] = [],\n buttonSpaceUsed = 0;\n\n const popoverSections: ButtonSection[] = [];\n\n if (!availableButtonSpace) {\n return [];\n }\n\n if (sizeOfAllButtonSections < availableButtonSpace) {\n // all buttons can fit in the bottom bar. Woooot\n bottomBarSections = availableButtonSections.slice();\n } else {\n // subtracting one button space from availableButtonSpace because we're going to need to save room for the ellipsis button\n availableButtonSpace -= ButtonPixelsWide;\n\n availableButtonSections.forEach((buttonSection) => {\n const nextSectionSize = ButtonPixelsWide * buttonSection.buttons.length + extraSpacePerSection;\n\n // If there's room to add this button, add it to the bottom bar. Otherwise add to the popover.\n if (buttonSpaceUsed + nextSectionSize < availableButtonSpace) {\n buttonSpaceUsed += nextSectionSize;\n bottomBarSections.push(buttonSection);\n } else {\n popoverSections.push(buttonSection);\n }\n });\n }\n\n if (areButtonsInPopover) {\n [...popoverSections].sort((a, b) => compare(get(a, 'displayOrder'), get(b, 'displayOrder')));\n return popoverSections;\n }\n\n // Now that we know whether the buttons are in the popover or the bottom bar, lets sort them by their display order\n [...bottomBarSections].sort((a, b) => compare(get(a, 'displayOrder'), get(b, 'displayOrder')));\n\n if (popoverSections.length) {\n // The More Options Section\n bottomBarSections.push({\n isSectionVisible: enabledButtons.includes(ButtonMoreOptions),\n buttons: [\n createButton(\n () => this.clickMoreOptions(),\n 'more-options',\n 'more-h',\n this.intl.t('generic.moreOptions')\n )\n ],\n ellipsisPriority: 1000 // This will always go last\n });\n }\n\n if (bottomBarSections.length) {\n bottomBarSections[bottomBarSections.length - 1].isLast = true;\n }\n\n return bottomBarSections;\n }\n\n @action onBottomBarUpdate(): void {\n this.args.onBottomBarUpdate?.();\n }\n\n // endregion\n\n /**\n * Sends an action up indicating the pan tilt button was selected.\n */\n @action clickPanTilt(): void {\n this.stats.logEvent(PlayerPTZ);\n\n this.args.togglePanTiltOptions(!this.args.areButtonsInPopover);\n }\n\n /**\n * Sends an action up indicating the operator audio not available button was selected.\n */\n @action clickOperatorAudioNotAvailable(): void {\n this.stats.logEvent(OperatorAudioNotAvailableButtonClicked);\n\n this.args.operatorAudioNotAvailableButtonContents?.buttonAction?.(this.args.areButtonsInPopover);\n }\n\n /**\n * Sends an action up indicating the download button was selected.\n */\n @action clickDownload(): void {\n this.args.showDownloadPopover(!this.args.areButtonsInPopover);\n }\n\n /**\n * Sends an action indicating that the warning sound button was clicked.\n */\n @action clickWarningSound(): Promise | boolean | void {\n return this.args.warningSoundAction(this.args.areButtonsInPopover);\n }\n\n /**\n * Sends action indicating that Associated Devices Action Button was selected.\n */\n @action clickAssociatedDevicesActionButton(): void {\n this.args.associatedDevicesAction();\n }\n\n /**\n * Saves a current snapshot from the camera to the customer's computer.\n */\n @action clickSnapshot(buttonAnimation: ButtonAnimation): void | Promise {\n this.stats.logEvent(PlayerSnapshot);\n return this.args.saveSnapshot(buttonAnimation);\n }\n\n /**\n * Requests a recording from the camera, to be saved on the Saved Clips page.\n */\n @action clickRequestRecording(buttonAnimation: ButtonAnimation): void | Promise {\n this.stats.logEvent(PlayerRecordClip);\n return this.args.requestRecording(buttonAnimation);\n }\n\n /**\n * Navigate to the general settings route for this camera.\n */\n @action navigateToSettings(): void {\n const { contextManager, store } = this,\n { camera, enabledButtons } = this.args;\n this.stats.logEvent(PlayerSettings);\n transitionToSettingsRoute(contextManager, store, camera, enabledButtons, VideoCameraSettingsOverview);\n }\n\n /**\n * Sends an action up indicating the 'more options' button was selected.\n */\n @action clickMoreOptions(): void {\n this.args.toggleMoreOptions();\n }\n\n /**\n * Displays a modal with more information on the video stream.\n */\n @action showAdditionalStreamDetails(): void {\n const {\n cannotDoBrowserUploadsForOperatorSite,\n isStreamingEndToEnd,\n isEndToEndStreamUsingTurn,\n retryEndToEndWithAudioRequest,\n isOeStream,\n camera\n } = this.args,\n canViewKnowledgeBase = this.contextManager.identityModel.canViewKnowledgeBase;\n\n // If a temporary operator site access blocker prevents browser recording,\n // don't open the modal that gives access to audio streaming.\n if (cannotDoBrowserUploadsForOperatorSite) {\n return;\n }\n\n this.stats.logEvent(WebRTCStreamTypeButtonClicked);\n\n this.modals.showModal(WebrtcStreamingDetailsModal, {\n canViewKnowledgeBase,\n isEndToEndStreamUsingTurn,\n isStreamingInfinitelyUsingStun: isStreamingEndToEnd && !isEndToEndStreamUsingTurn,\n isCameraLowDataMode: camera.dataUsageMode === DataUsageModeEnum.LowDataMode,\n retryEndToEndWithAudioRequest,\n isOeStream\n });\n }\n\n /**\n * Navigates to a streaming page link for the device\n *\n * @param pageEnum\n */\n @action navigateToOtherStreamingPage(pageEnum: number): void {\n const { contextManager } = this,\n { camera } = this.args;\n\n if ([EmberEnterpriseVideoClips, EmberVideoClips].includes(pageEnum)) {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(pageEnum, {\n cameras: camera.id\n });\n } else {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(pageEnum, {\n cameraId: camera.id,\n cameraGroupId: null\n });\n }\n }\n\n /**\n * Called whenever the streaming page link renders or is resized. Sets streamingPageLinkSize so we can determine if there is room for it to be displayed.\n *\n * @param streamingPageLink\n */\n @action onStreamingPageLinkResize(el: HTMLButtonElement): void {\n const { clientWidth } = el;\n\n if (this.streamingPageLinkSize || !clientWidth) {\n // don't set if its already been set once\n return;\n }\n\n this.streamingPageLinkSize = clientWidth;\n }\n\n /**\n * Clicks the ADCButton associated with this element.\n * The reason we do this instead of calling the button's action directly, is so that the delayed handler for the button properly displays a spinner.\n *\n * @param classPrefix\n */\n @action clickButton(classPrefix: string): void {\n const buttonSelector = `#${this.idForPlayerButtons} .${classPrefix}-button`,\n button = document.querySelector(buttonSelector);\n\n button?.click();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::VideoPlayer::Overlay::PlayerButtons': typeof PlayerButtons;\n }\n}\n","// This file contains functions to camera items on live view and SVR/SD playback pages\n\nimport { DISCONNECTED_STATE } from 'customer-site/enums/VideoPlayerStateEnum';\n\nimport type { CachedCameraItemParameters } from 'customer-site/components/video/video-streaming/video-streaming-features/types';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type { CameraItem } from './types';\n\n/**\n * The list of properties that can be used with the SetCameraProperties function in camera-items\n */\ntype SetCameraPropertiesOptions = {\n connectionStartTime?: number;\n forceShowOverlayForExport?: boolean;\n globalDeviceId?: string;\n hasReachedEndOfStream?: boolean;\n hasStreamTimedOut?: boolean;\n isInGap?: boolean;\n isPaused?: boolean;\n isPlaying?: boolean;\n loadingPercentage?: number;\n playerState?: number;\n streamConnectionErrorEnum?: number;\n};\n\nexport const ALL_CAMERAS_ID = '-1',\n ALL_CONNECTED_CAMERAS_ID = '-2';\n\n/**\n * Returns true if camera items are changed from their cached values. If either the device ids are different or if we are on a different page.\n *\n * @param cameraItems An array of camera/stream objects\n * @param newPage the new page we are on\n * @param newTotalPages the new total number of pages\n */\nexport function cameraItemsIsChanged(\n cachedCameraItemParameters: CachedCameraItemParameters | null,\n cameraItems: Array,\n newPage: number,\n newTotalPages: number\n): boolean {\n let newDeviceSelection = false;\n\n if (!cameraItems || !cachedCameraItemParameters) {\n return true;\n }\n\n const { displayedDeviceIds, page, totalPages } = cachedCameraItemParameters;\n\n if (newPage !== page || newTotalPages !== totalPages) {\n return true;\n }\n\n if (cameraItems.length === displayedDeviceIds.length) {\n for (let i = 0; i < cameraItems.length; i++) {\n if (cameraItems[i]!.model!.globalDeviceId !== displayedDeviceIds[i]) {\n newDeviceSelection = true;\n }\n }\n\n if (!newDeviceSelection) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getCameraItemByGlobalDeviceId(\n globalDeviceId: string,\n cameraItems: Array\n): CameraItem | null {\n if (!cameraItems) {\n return null;\n }\n\n for (let i = 0; i < cameraItems.length; i++) {\n const cameraItem = cameraItems[i],\n cameraModel = cameraItem.model;\n\n if (!cameraModel) {\n continue;\n }\n\n const cameraId = cameraModel.get('id');\n\n if (globalDeviceId === cameraId) {\n return cameraItem;\n }\n }\n\n return null;\n}\n\n/**\n * Reorders the cameraGroup model and saves it to match the order of the cameraItems passed in (based on their viewIndex value)\n *\n * @param cameraGroup\n * @param cameraItems\n * @param startIndex if we aren't on the first page, the startIndex represents the index for the first cameraItem. IE page 3 with 4 cameras per page, startIndex is 8\n */\nexport async function saveCameraGroupOrderFromCameraItemsOrder(\n cameraGroup: CameraGroup,\n cameraItems: Array,\n startIndex: number\n): Promise {\n if (!cameraGroup) {\n return false;\n }\n\n const newCameraOrder: Record = {};\n\n cameraGroup.cameras.forEach((camera, i) => {\n const cameraId = camera.id,\n matchingCameraItem = getCameraItemByGlobalDeviceId(cameraId, cameraItems);\n\n // A matching camera item might not be found, if (for example) the item is on page 2 (if a camera isn't on a page we are looking at, its not in the\n // cameraItems object. In this use case we set the order to i, which basically leaves its order unchanged)\n if (!matchingCameraItem) {\n newCameraOrder[cameraId] = i;\n return;\n }\n\n newCameraOrder[cameraId] = matchingCameraItem.viewIndex + startIndex;\n });\n\n cameraGroup.set('cameraOrder', newCameraOrder);\n\n await cameraGroup.save();\n return true;\n}\n\n/**\n * Sets the isPlaying property inside the camera model for the camera specified (or all cameras if camera unspecified).\n * When globalDeviceId is set to ALL_CAMERAS_ID we will make the change for all cameras.\n */\nexport function setCameraIsPlayingProperty(cameras: Camera[] | null, isPlaying: boolean, globalDeviceId: string) {\n setCameraProperties(\n cameras,\n {\n isPlaying\n },\n globalDeviceId\n );\n}\n\n/**\n * Sets properties inside the camera model for the camera specified (or all cameras if camera unspecified).\n * When globalDeviceId is set to ALL_CAMERAS_ID we will make the change for all cameras.\n */\nexport function setCameraProperties(\n cameras: Camera[] | null,\n properties: SetCameraPropertiesOptions,\n globalDeviceId: string\n) {\n if (!cameras || !globalDeviceId) {\n return;\n }\n\n if (globalDeviceId === ALL_CAMERAS_ID) {\n cameras.forEach((camera) => {\n camera.setProperties(properties);\n });\n } else if (globalDeviceId === ALL_CONNECTED_CAMERAS_ID) {\n const connectedCams = cameras.filter((camera) => camera.playerState !== DISCONNECTED_STATE);\n\n connectedCams.forEach((camera) => {\n camera.setProperties(properties);\n });\n } else {\n const camera = cameras.findBy('id', globalDeviceId);\n\n if (camera) {\n camera.setProperties(properties);\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberObject, { set, setProperties } from '@ember/object';\nimport { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport {\n FULL_SCREEN_TOGGLE,\n logEventConditionToWavefront,\n THEATER_MODE_TOGGLE\n} from 'customer-site/utils/video/wavefront-stats';\nimport { sentryWithScopeAndError } from '@adc/app-infrastructure/utils/sentry';\nimport { toggleFullScreen } from '../../../../utils/dom';\nimport {\n HdAspectRatio,\n AutoView,\n HybridView,\n OnePlusFiveView,\n OnePlusSevenView,\n TwoPlusEightView,\n FourPlusTwoPlusFourView,\n HybridNarrowAspectRatio,\n HybridWideAspectRatio,\n ToolbarPixelThreshold,\n PaginationHeight,\n MinimumPlayersHeight,\n getNumberOfPages\n} from './index';\n\nimport type Owner from '@ember/owner';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type Stats from 'customer-site/services/stats';\nimport type {\n AutoViewLayoutOption,\n AutoViewProperties,\n AutoViewZoomAbility,\n Dimensions,\n PixelUsage,\n LayoutType,\n HybridLayoutZoomAbility,\n LayoutProperties,\n LayoutZoomAbility\n} from './types';\n\n/**\n * A control for controlling various layout related functions on video streaming features\n */\nexport default class LayoutControl extends EmberObject {\n constructor(\n initialLayoutType: LayoutType,\n maxVideosPerPageAutoView: number,\n autoViewMaxVideosPerPageLimit: number,\n stats: Stats,\n isTestEnvironment: boolean,\n pageOwner?: Owner\n ) {\n super();\n\n this.layoutProperties.layoutType = initialLayoutType;\n this.maxVideosPerPageAutoView = maxVideosPerPageAutoView;\n this.autoViewMaxVideosPerPageLimit = autoViewMaxVideosPerPageLimit;\n this.pageOwner = pageOwner;\n this.stats = stats;\n this.isTestEnvironment = isTestEnvironment;\n }\n\n /**\n * The stats service\n */\n stats: Stats;\n\n /**\n * Is the user in the test environment\n */\n isTestEnvironment: boolean;\n\n /**\n * The largest value allowed for the max videos per page in auto view\n * This is 16 by default, but 4 in playback pages. (Due to certain device restrictions)\n */\n autoViewMaxVideosPerPageLimit = 0;\n\n /**\n * The best (minimizes whitespace) view for showing the selected players (while in auto view) in terms of how many rows of players to use,\n * how many columns, and the sizing of them all.\n */\n @tracked\n bestAutoView?: AutoViewProperties;\n\n /**\n * Whether the latest full screen change was made by the toolbar button or by the user's keyboard.\n */\n fullScreenChangeMadeByButton = false;\n\n /**\n * If the user has done a layout zoom since opening the component\n */\n haveUsedLayoutZoom = false;\n\n /**\n * The maximum height allotted to the camera-selector.\n */\n @tracked\n maxCameraSelectorHeight = 0;\n\n /**\n * What is the maximum allowed videos per page while using auto-view. This number can change while using the auto-view zoom feature.\n * This value will get set to autoViewMaxVideosPerPageLimit inside of the dataLoaded method\n */\n @tracked\n maxVideosPerPageAutoView = 0;\n\n /**\n * How many more cameras on the page are we showing than the user intended? Most of the times this is zero, however (for example), if the user loads the page\n * with 9 cameras in a 3x3 grid, then shortens the page, and we switch to a 5x2 grid, we show 10 cameras to prevent gaps - this value becomes 1.\n * This is so if the user switches back to the 3x3 grid, we know to go back to showing 9 cameras instead of trying to show 10+.\n */\n maxVideosPerPageDisparity = 0;\n\n /**\n * The getOwner value for the current page context\n */\n pageOwner?: Owner;\n\n /**\n * Dimensions for the players component. Set manually at various points.\n */\n @tracked\n playersDimensions: Dimensions = { width: 0, height: 0 };\n\n /**\n * If we should prioritize 2+8 view over 4+2+4 view for viewing 10 cameras. This is used with layout zooming\n */\n preferTwoPlusEightView = true;\n\n /**\n * Dimensions for a page with only one camera - used in the players component. Set manually at various points.\n */\n @tracked\n singlePlayerDimensions: Dimensions = { width: 0, height: 0 };\n\n /**\n * The height of the search toolbar.\n */\n toolbarHeight = 0;\n\n /**\n * Whether we have cached toolbarHeight.\n */\n toolbarHeightCached = false;\n\n /**\n * A collection of simple properties related to the current layout\n */\n @tracked\n layoutProperties: LayoutProperties = {\n cameraExpanded: false,\n expandedCameraIndex: undefined,\n isFullScreen: false,\n isHybridWide: false,\n isTheaterMode: false,\n isTheaterModeOrFullScreen: false,\n largeHybridCameraId: null,\n layoutType: AutoView\n };\n\n /**\n * Gets the available width and available height for putting the videos in\n */\n private calculateAvailableSpaceDimensions(showPagination: boolean): Dimensions | null {\n const playersAndSidebarDiv = document.querySelector('.players-and-sidebar'),\n videoStreamingPlayersDiv = document.querySelector('.video-streaming-players');\n\n if (!playersAndSidebarDiv || !playersAndSidebarDiv.clientHeight || !videoStreamingPlayersDiv) {\n return null;\n }\n\n const footerHeight = showPagination ? PaginationHeight : 0,\n availableWidth = videoStreamingPlayersDiv.clientWidth;\n let availableHeight = playersAndSidebarDiv.clientHeight - footerHeight;\n\n if (availableHeight < MinimumPlayersHeight) {\n availableHeight = MinimumPlayersHeight;\n }\n\n return {\n width: availableWidth,\n height: availableHeight\n };\n }\n\n /**\n * Returns the number of maxCamerasPerPage that would result if we do a zoom action. Returns undefined if the action is impossible\n */\n private getAutoViewZoomMaxCamsPerPage(\n isZoomIn: boolean,\n activeCameras: Camera[],\n showPagination: boolean,\n bestAutoView?: AutoViewProperties\n ): number | undefined {\n const availableSpaceDimensions = this.calculateAvailableSpaceDimensions(showPagination);\n const { autoViewMaxVideosPerPageLimit, maxVideosPerPageAutoView } = this;\n\n if (!bestAutoView || !availableSpaceDimensions || !maxVideosPerPageAutoView) {\n return;\n }\n\n // If we're trying to zoom out while already showing all cameras\n if (!isZoomIn && maxVideosPerPageAutoView >= activeCameras!.length) {\n return;\n }\n\n const { columns, rows } = bestAutoView;\n\n const adjustedRowsLayout = {\n columns,\n rows: rows + (isZoomIn ? -1 : 1)\n },\n adjustedColumnsLayout = {\n rows,\n columns: columns + (isZoomIn ? -1 : 1)\n };\n\n let adjustedRowsLayoutMaxCameras = adjustedRowsLayout.rows * adjustedRowsLayout.columns,\n adjustedColumnsLayoutMaxCameras = adjustedColumnsLayout.rows * adjustedColumnsLayout.columns;\n\n if (adjustedRowsLayoutMaxCameras > autoViewMaxVideosPerPageLimit) {\n // setting to zero so this doesn't give adjusting rows as an option\n adjustedRowsLayoutMaxCameras = 0;\n }\n\n if (adjustedColumnsLayoutMaxCameras > autoViewMaxVideosPerPageLimit) {\n // setting to zero so this doesn't give adjusting columns as an option\n adjustedColumnsLayoutMaxCameras = 0;\n }\n\n const adjustedRowsLayoutUsageInfo = this.getPixelUsageInfoForAutoViewLayout(\n adjustedRowsLayout.columns,\n adjustedRowsLayout.rows,\n adjustedRowsLayoutMaxCameras,\n availableSpaceDimensions\n );\n const adjustedColumnsLayoutUsageInfo = this.getPixelUsageInfoForAutoViewLayout(\n adjustedColumnsLayout.columns,\n adjustedColumnsLayout.rows,\n adjustedColumnsLayoutMaxCameras,\n availableSpaceDimensions\n );\n\n if (!adjustedColumnsLayoutUsageInfo || !adjustedRowsLayoutUsageInfo) {\n if (adjustedColumnsLayoutUsageInfo) {\n return adjustedColumnsLayoutMaxCameras;\n } else if (adjustedRowsLayoutUsageInfo) {\n return adjustedRowsLayoutMaxCameras;\n }\n return;\n }\n\n const adjustColumns =\n adjustedColumnsLayoutUsageInfo.totalPixelUsage > adjustedRowsLayoutUsageInfo.totalPixelUsage,\n newMaxCamerasPerPage = adjustColumns ? adjustedColumnsLayoutMaxCameras : adjustedRowsLayoutMaxCameras;\n\n // if the new max cameras per page matches the current, there's nothing to do\n // this can happen if we're trying to zoom out while already at the max zoomed out level, for instance\n if (newMaxCamerasPerPage === maxVideosPerPageAutoView) {\n return;\n }\n\n return newMaxCamerasPerPage;\n }\n\n /**\n * Returns the best view (minimizes white space) for displaying the players while in AUTO view\n */\n private getBestFittedAutoView(\n camerasAmount: number,\n availableSpaceDimensions: Dimensions,\n autoViewLayoutOptions: AutoViewLayoutOption[]\n ): AutoViewProperties | null {\n if (!camerasAmount) {\n return {\n rows: 1,\n columns: 1,\n playersDimensions: { width: 0, height: 0 }\n };\n }\n\n const compatibleAutoViewLayoutOptions = autoViewLayoutOptions.filter(\n (dynamicGridLayout) =>\n camerasAmount >= dynamicGridLayout.minSupportedCameras &&\n camerasAmount <= dynamicGridLayout.maxSupportedCameras\n );\n\n let bestPixelUsage = 0,\n bestView: AutoViewLayoutOption | null = null;\n\n compatibleAutoViewLayoutOptions.forEach((layoutOption: AutoViewLayoutOption) => {\n const { rows, columns } = layoutOption;\n\n const pixelUsageInfoForView = this.getPixelUsageInfoForAutoViewLayout(\n columns,\n rows,\n camerasAmount,\n availableSpaceDimensions\n ),\n { playersDimensionsForLayout, totalPixelUsage } = pixelUsageInfoForView!;\n\n // The goal for picking the best layout should be in picking the layout which maximizes video pixel usage (minimizes white space)\n if (totalPixelUsage > bestPixelUsage) {\n bestView = layoutOption;\n bestView.playersDimensions = playersDimensionsForLayout;\n bestPixelUsage = totalPixelUsage;\n }\n });\n\n return bestView;\n }\n\n /**\n * Returns the appropriate dimensions for a div of the specified aspect ratio, given the available space the div should fit into.\n *\n * @param availableSpaceDimensions The height and width of the space the div should fit into.\n * @param aspectRatio The aspect ratio of the div.\n */\n private getDimensionsForAspectRatio(availableSpaceDimensions: Dimensions, aspectRatio: number): Dimensions | null {\n if (!availableSpaceDimensions) {\n return null;\n }\n\n const { width, height } = availableSpaceDimensions;\n\n // If the aspect ratio of the available space is wider than the aspect ratio of the div, we should use the available height as the div's height and make its\n // width relative. Otherwise, we should use the available width as the div's width and make its height relative.\n return width / height > aspectRatio\n ? { width: height * aspectRatio, height }\n : { width, height: width / aspectRatio };\n }\n\n /**\n * Returns the total amount of pixel usage for a particular view, as well as the playersDimensions for that view (when using auto layout)\n */\n private getPixelUsageInfoForAutoViewLayout(\n columns: number,\n rows: number,\n camerasAmount: number,\n availableSpaceDimensions: Dimensions\n ): PixelUsage | null {\n if (!columns || !rows || !camerasAmount) {\n return null;\n }\n\n const aspectRatioForLayoutOption = (HdAspectRatio * columns) / rows,\n percentOfCameraSlotsFilled = camerasAmount / (columns * rows);\n\n const playersDimensionsForLayout = this.getDimensionsForAspectRatio(\n availableSpaceDimensions,\n aspectRatioForLayoutOption\n ) as Dimensions;\n\n const totalPixelUsage =\n playersDimensionsForLayout.width * playersDimensionsForLayout.height * percentOfCameraSlotsFilled;\n\n return {\n playersDimensionsForLayout,\n totalPixelUsage\n };\n }\n\n /**\n * Sets the fullscreen status on the application controller.\n */\n private setFullScreenStatus(switchToFullScreen: boolean): void {\n if (this.pageOwner) {\n this.pageOwner.lookup('controller:application')?.set('isFullScreen', switchToFullScreen);\n }\n }\n\n /**\n * Sets the maxVideosPerPageAutoView and maxVideosPerPageDisparity values. Will set the disparity value to zero if not passed in\n */\n private setMaxVideosPerPageAndDisparity(maxVideosPerPageAutoView: number, disparityValue = 0): void {\n set(this, 'maxVideosPerPageDisparity', disparityValue);\n set(this, 'maxVideosPerPageAutoView', maxVideosPerPageAutoView);\n }\n\n /**\n * If the specified auto view layout and the number of cameras on the page results in \"gaps\" where the view is capable of showing more of the users cameras\n */\n _specifiedAutoViewHasGaps(\n camerasOnPage: number,\n autoView: AutoViewProperties,\n maxVideosPerPageAutoView: number\n ): boolean {\n if (!autoView || camerasOnPage < maxVideosPerPageAutoView) {\n return false;\n }\n\n const { rows, columns } = autoView,\n newMaxVideosPerPageAutoView = rows * columns;\n\n return maxVideosPerPageAutoView !== newMaxVideosPerPageAutoView;\n }\n\n /**\n * If we're displaying as many cameras as maxVideosPerPageAutoView, this sets the maxVideosPerPageAutoView equal to the number of rows times the number of columns,\n * to make sure there are no gaps on the page when using Auto View\n */\n private updateMaxVideosPerPageAutoViewToFillGaps(camerasOnPage: number): void {\n const { bestAutoView, maxVideosPerPageAutoView } = this;\n\n const { rows, columns } = bestAutoView!,\n newMaxVideosPerPageAutoView = rows * columns;\n\n if (this._specifiedAutoViewHasGaps(camerasOnPage, bestAutoView!, maxVideosPerPageAutoView)) {\n this.setMaxVideosPerPageAndDisparity(\n newMaxVideosPerPageAutoView,\n newMaxVideosPerPageAutoView - maxVideosPerPageAutoView\n );\n }\n }\n\n // region public methods\n\n /**\n * Executes full screen changes.\n *\n * @param switchToFullScreen Are we switching to full screen mode?\n * @param fromToolbarButton Are we toggling full screen mode from the toolbar?\n */\n executeFullScreenChange(switchToFullScreen: boolean, fromToolbarButton: boolean): void {\n // Entering full screen.\n if (fromToolbarButton) {\n this.stats && logEventConditionToWavefront(this.stats, FULL_SCREEN_TOGGLE, switchToFullScreen);\n if (!this.isTestEnvironment) {\n toggleFullScreen(switchToFullScreen);\n }\n }\n\n this.setFullScreenStatus(switchToFullScreen);\n\n set(this.layoutProperties, 'isFullScreen', switchToFullScreen);\n set(this.layoutProperties, 'isTheaterMode', false);\n set(this, 'fullScreenChangeMadeByButton', fromToolbarButton);\n }\n\n /**\n * Returns an array of all possible auto-view layouts, in terms of how many videos per row/column, and what amount of cameras the view is compatible with.\n *\n * @param maxRowsOrColumns the maximum number of rows or columns that the page supports\n * @param autoViewMaxVideosPerPageLimit The largest value allowed for the max videos per page in auto view\n * @returns\n */\n getAutoViewLayoutOptions(\n maxRowsOrColumns: number,\n autoViewMaxVideosPerPageLimit: number\n ): Array {\n const autoViewLayoutOptions = [];\n\n for (let rows = 1; rows <= maxRowsOrColumns; rows++) {\n for (let columns = 1; columns <= maxRowsOrColumns; columns++) {\n const maxSupportedCameras = rows * columns;\n\n // technically this isn't the minimum amount of cameras that a view can support. (a 3x3 view \"can\" support showing 4 cameras ofcourse)\n // however certain views will never be optimal no matter the screen shape. IE A 3x3 view only ever be the best view for 9, 8, or 7 cameras.\n const minSupportedCameras = maxSupportedCameras - (Math.min(rows, columns) - 1);\n\n if (minSupportedCameras > autoViewMaxVideosPerPageLimit) {\n break;\n }\n\n autoViewLayoutOptions.push({\n rows,\n columns,\n minSupportedCameras,\n maxSupportedCameras\n });\n }\n }\n\n return autoViewLayoutOptions;\n }\n\n /**\n * The resulting max cameras per page if a user tries to zoom in or out (or undefined if the action is not possible)\n */\n getAutoViewZoomAbility(activeCameras: Camera[] | null, showPagination: boolean): AutoViewZoomAbility {\n if (this.layoutProperties.layoutType !== AutoView || !activeCameras) {\n return { zoomInMaxCams: undefined, zoomOutMaxCams: undefined };\n }\n\n return {\n zoomInMaxCams: this.getAutoViewZoomMaxCamsPerPage(true, activeCameras, showPagination, this.bestAutoView),\n zoomOutMaxCams: this.getAutoViewZoomMaxCamsPerPage(false, activeCameras, showPagination, this.bestAutoView)\n };\n }\n\n /**\n * Returns the resulting hybrid layout if a user tries to zoom in or out (or undefined if the action is not possible)\n */\n getHybridViewZoomAbility(cameras: Array | null, playerType: number | undefined): HybridLayoutZoomAbility {\n const { layoutType } = this.layoutProperties;\n\n // Can't hybrid zoom while in AutoView\n if (layoutType === AutoView || !cameras) {\n return { zoomInLayout: null, zoomOutLayout: null };\n }\n\n const cameraCount = cameras.length,\n usingLiveVideo = playerType === StreamUsage.LiveView;\n let zoomInLayout: LayoutType | null = null,\n zoomOutLayout: LayoutType | null = null;\n\n switch (layoutType) {\n case OnePlusFiveView:\n zoomInLayout = HybridView;\n break;\n case OnePlusSevenView:\n zoomInLayout = OnePlusFiveView;\n break;\n case TwoPlusEightView:\n case FourPlusTwoPlusFourView:\n zoomInLayout = OnePlusSevenView;\n break;\n }\n\n switch (layoutType) {\n case HybridView:\n zoomOutLayout = OnePlusFiveView;\n break;\n case OnePlusFiveView:\n zoomOutLayout = OnePlusSevenView;\n break;\n case OnePlusSevenView:\n zoomOutLayout = this.preferTwoPlusEightView ? TwoPlusEightView : FourPlusTwoPlusFourView;\n break;\n }\n\n if (!this.layoutIsAllowedForScenario(zoomOutLayout!, cameraCount, usingLiveVideo)) {\n zoomOutLayout = null;\n }\n\n if (!this.layoutIsAllowedForScenario(zoomInLayout!, cameraCount, usingLiveVideo)) {\n zoomInLayout = null;\n }\n\n return {\n zoomInLayout,\n zoomOutLayout\n };\n }\n\n /**\n * If a user can do layout zooms in or out\n */\n getLayoutZoomAbility(\n autoViewZoomAbility: AutoViewZoomAbility,\n hybridLayoutZoomAbility: HybridLayoutZoomAbility\n ): LayoutZoomAbility | null {\n // layout zooming can't be used while a camera is expanded\n if (this.layoutProperties.cameraExpanded) {\n return null;\n }\n\n if (this.layoutProperties.layoutType === AutoView) {\n return {\n canZoomIn: !!autoViewZoomAbility.zoomInMaxCams,\n canZoomOut: !!autoViewZoomAbility.zoomOutMaxCams\n };\n }\n\n return {\n canZoomIn: !!hybridLayoutZoomAbility.zoomInLayout,\n canZoomOut: !!hybridLayoutZoomAbility.zoomOutLayout\n };\n }\n\n /**\n * Return max cameras by layout type\n */\n getMaxCamerasByLayout(layoutType: LayoutType): number {\n switch (layoutType) {\n case OnePlusFiveView:\n return 6;\n case OnePlusSevenView:\n return 8;\n case TwoPlusEightView:\n case FourPlusTwoPlusFourView:\n return 10;\n case AutoView:\n return this.maxVideosPerPageAutoView;\n default:\n return 4;\n }\n }\n\n /**\n * When changing layouts, the current page number might change in order to keep (roughly) the same cameras visible on the screen, this method is for figuring\n * what page number should be the new page number.\n */\n getPageNumberAfterLayoutChange(\n activeCameras: Camera[] | null,\n page: number,\n maxCamsInCurrentLayout: number,\n maxCamsInNewLayout: number\n ): number {\n const activeCamerasLength = activeCameras!.length,\n pagesInNewLayout = getNumberOfPages(activeCamerasLength, maxCamsInNewLayout);\n let newPage: number | undefined;\n\n if (maxCamsInCurrentLayout === maxCamsInNewLayout) {\n newPage = page;\n } else if (maxCamsInCurrentLayout > maxCamsInNewLayout) {\n const camerasBeforeThisPage = (page - 1) * maxCamsInCurrentLayout,\n camerasOnThisPage = activeCamerasLength % maxCamsInCurrentLayout,\n indexForMiddleCameraOnPage = camerasBeforeThisPage + (camerasOnThisPage + 1) / 2;\n newPage = Math.round(pagesInNewLayout * (indexForMiddleCameraOnPage / activeCamerasLength));\n } else {\n newPage = Math.round(page / (maxCamsInNewLayout / maxCamsInCurrentLayout));\n }\n\n // Occasionally the above equation can create a page which is outside of the bounds, lets make sure that doesnt happen\n if (newPage > pagesInNewLayout) {\n newPage = pagesInNewLayout;\n } else if (newPage < 1) {\n newPage = 1;\n }\n\n return newPage;\n }\n\n /**\n * Handles full screen change events, dealing with the case when the user exits full screen without using the button.\n */\n handleFullScreenChange(): void {\n const { fullScreenChangeMadeByButton } = this;\n\n // If the action flagged the full screen change as having been made by the button, then we don't care.\n if (fullScreenChangeMadeByButton) {\n set(this, 'fullScreenChangeMadeByButton', false);\n return;\n }\n\n // Otherwise, we need to toggle the view.\n this.executeFullScreenChange(!this.layoutProperties.isFullScreen, false);\n }\n\n /**\n * If the current scenario (the amount of cameras we have and if we're on the live video page) allows the selected layout\n */\n layoutIsAllowedForScenario(layoutType: LayoutType, camerasCount: number, isLiveViewPage: boolean): boolean {\n switch (layoutType) {\n case AutoView:\n return true;\n case HybridView:\n return camerasCount >= 2;\n case OnePlusFiveView:\n case TwoPlusEightView:\n case FourPlusTwoPlusFourView:\n return isLiveViewPage && camerasCount >= 5;\n case OnePlusSevenView:\n return isLiveViewPage && camerasCount >= 7;\n }\n }\n\n /**\n * Makes sure layoutProperties.layoutType is set to a value that is currently supported (based on number of cameras, beta access, and the page they are on)\n */\n makeSureLayoutIsSetCorrectly(camerasCount: number, isLiveViewPage: boolean): void {\n // Sometimes the page (due to a cookie most likely) will try to load a layout type that is currently invalid (due to how many cameras they have maybe)\n // if this layout is invalid, lets switch to auto view, since that view is always available\n if (!this.layoutIsAllowedForScenario(this.layoutProperties.layoutType, camerasCount, isLiveViewPage)) {\n set(this.layoutProperties, 'layoutType', AutoView);\n }\n\n // For some reason, the user has a non-supported layout. (maybe they have a cookie of a legacy layout stored?)\n if (\n ![\n AutoView,\n HybridView,\n OnePlusFiveView,\n OnePlusSevenView,\n TwoPlusEightView,\n FourPlusTwoPlusFourView\n ].includes(this.layoutProperties.layoutType)\n ) {\n set(this.layoutProperties, 'layoutType', AutoView);\n }\n }\n\n /**\n * Performs a page zoom for increasing or decreasing the number of players on the screen\n */\n performLayoutZoom(\n isZoomIn: boolean,\n activeCameras: Camera[] | null,\n layoutZoomAbility: LayoutZoomAbility | null,\n page: number,\n autoViewZoomAbility: AutoViewZoomAbility,\n hybridLayoutZoomAbility: HybridLayoutZoomAbility,\n callback: (newPage: number) => void\n ): void {\n const { layoutProperties, maxVideosPerPageAutoView } = this,\n { layoutType } = layoutProperties;\n\n if (\n !layoutZoomAbility ||\n (isZoomIn && !layoutZoomAbility.canZoomIn) ||\n (!isZoomIn && !layoutZoomAbility.canZoomOut)\n ) {\n return;\n }\n\n let newPage = 1;\n\n if (layoutType === AutoView) {\n const { zoomInMaxCams, zoomOutMaxCams } = autoViewZoomAbility,\n newMaxCamerasPerPage = isZoomIn ? zoomInMaxCams : zoomOutMaxCams;\n\n if (!newMaxCamerasPerPage) {\n return;\n }\n\n newPage = this.getPageNumberAfterLayoutChange(\n activeCameras,\n page,\n maxVideosPerPageAutoView,\n newMaxCamerasPerPage\n );\n\n this.setMaxVideosPerPageAndDisparity(newMaxCamerasPerPage);\n } else {\n const newLayout = isZoomIn ? hybridLayoutZoomAbility.zoomInLayout : hybridLayoutZoomAbility.zoomOutLayout;\n\n if (!newLayout) {\n return;\n }\n\n // Update preferTwoPlusEightView if we're in one of the 10 camera views so that we remember which one to go back to if we zoom back out\n if (isZoomIn && [TwoPlusEightView, FourPlusTwoPlusFourView].includes(layoutType)) {\n set(this, 'preferTwoPlusEightView', layoutType === TwoPlusEightView);\n }\n\n this.updateLayoutType(newLayout, activeCameras, page, (_newPage: number) => {\n newPage = _newPage;\n });\n }\n\n callback(newPage);\n }\n\n /**\n * Sets the expandedCameraIndex and cameraExpanded values based on a passed in cameraIndex\n */\n setExpandedCameraIndex(newExpandedCameraIndex?: number): void {\n set(this.layoutProperties, 'expandedCameraIndex', newExpandedCameraIndex);\n set(this.layoutProperties, 'cameraExpanded', newExpandedCameraIndex != null);\n }\n\n /**\n * Sets sizing properties of the page so that when players get sized they know how much area they can fill.\n */\n setPageSizingProperties(\n activeCameras: Camera[] | null,\n autoViewLayoutOptions: AutoViewLayoutOption[],\n showPagination: boolean,\n useStreamingToolbar: boolean\n ): void {\n const { toolbarHeightCached } = this;\n\n // Cache toolbar height once when we can grab the element from the DOM.\n if (!toolbarHeightCached) {\n const toolbarEl = document.querySelector('.search-toolbar');\n\n // If either the toolbar is rendered, or we aren't trying to render it, save the toolbar height value\n if (toolbarEl || !useStreamingToolbar) {\n setProperties(this, {\n toolbarHeight: toolbarEl?.clientHeight || 0,\n toolbarHeightCached: true\n });\n\n this.updatePlayersDimensions(activeCameras, autoViewLayoutOptions, showPagination);\n }\n }\n }\n\n /**\n * Toggles whether we are in theater mode.\n */\n toggleTheaterMode(): void {\n const { isFullScreen, isTheaterMode } = this.layoutProperties,\n switchToFullScreen = !isTheaterMode;\n\n // If we're going from fullscreen to theater mode.\n if (isFullScreen) {\n this.executeFullScreenChange(false, true);\n }\n\n this.stats && logEventConditionToWavefront(this.stats, THEATER_MODE_TOGGLE, switchToFullScreen);\n\n set(this.layoutProperties, 'isTheaterMode', switchToFullScreen);\n\n this.setFullScreenStatus(switchToFullScreen);\n }\n\n /**\n * Updates the layout type to the selected new layout type.\n * layoutChangeCallback is an action passed in with one param \"newPage\" which is a void\n */\n updateLayoutType(\n newLayoutType: LayoutType,\n activeCameras: Camera[] | null,\n page: number,\n callback?: (newPage: number) => void\n ): void {\n const currentLayoutType = this.layoutProperties.layoutType,\n maxCamsInCurrentLayout = this.getMaxCamerasByLayout(currentLayoutType),\n maxCamsInNewLayout = this.getMaxCamerasByLayout(newLayoutType);\n\n if (currentLayoutType === newLayoutType) {\n return;\n }\n\n const newPage: number = this.getPageNumberAfterLayoutChange(\n activeCameras,\n page,\n maxCamsInCurrentLayout,\n maxCamsInNewLayout\n );\n\n set(this.layoutProperties, 'layoutType', newLayoutType);\n callback?.(newPage);\n }\n\n /**\n * Updates playersDimensions, so the component has appropriate dimensions.\n */\n updatePlayersDimensions(\n activeCameras: Camera[] | null,\n autoViewLayoutOptions: AutoViewLayoutOption[],\n showPagination: boolean\n ): void {\n const { layoutProperties, toolbarHeightCached } = this,\n { isFullScreen, layoutType } = layoutProperties,\n playersAndSidebarDiv = document.querySelector('.players-and-sidebar');\n\n // We need to have the size of the players-and-sidebar, the event-history sizes, and the toolbar to continue here.\n if (!playersAndSidebarDiv || !toolbarHeightCached || !activeCameras) {\n return;\n }\n\n set(\n this,\n 'maxCameraSelectorHeight',\n playersAndSidebarDiv.clientHeight + (isFullScreen ? -ToolbarPixelThreshold : 0)\n );\n\n const availableSpaceDimensions: Dimensions | null = this.calculateAvailableSpaceDimensions(showPagination);\n\n if (!availableSpaceDimensions) {\n return;\n }\n\n // First we figure out how much space we have to work with. The width is obvious, but we need to calculate the height we have available.\n // Next, we calculate what the dimensions for the players component should be.\n // If we are in grid view, it's pretty simple - just use a standard 16:9 aspect ratio.\n // If we are in hybrid view, we need to figure out whether we should be in the wide (small players on the right) or narrow (small players on the bottom) view.\n // To do that, we get the theoretical dimensions for both views using the helper function. Then, we choose between them by figuring out in which view the\n // larger player would be larger.\n // We can figure out which larger player will be larger simply by looking at their heights. We can get the height of the large player in the narrow view\n // by multiplying the width of the entire narrow view (i.e., the width of the large player) by 9/16, i.e. 16/9 ^ -1.\n // We can use similar logic to figure out whether we should be in the narrow (players stacked) or wide (players side by side) view with two players in grid view.\n const { maxVideosPerPageDisparity } = this,\n isScreenWide = (wideDimensions: Dimensions, narrowDimensions: Dimensions) =>\n wideDimensions!.height > narrowDimensions!.width / HdAspectRatio,\n gridDimensions = this.getDimensionsForAspectRatio(availableSpaceDimensions, HdAspectRatio),\n wideHybridDimensions = this.getDimensionsForAspectRatio(availableSpaceDimensions, HybridWideAspectRatio),\n narrowHybridDimensions = this.getDimensionsForAspectRatio(\n availableSpaceDimensions,\n HybridNarrowAspectRatio\n ),\n isHybridWide = isScreenWide(wideHybridDimensions!, narrowHybridDimensions!);\n\n let playersDimensions: Dimensions | null;\n\n if ([OnePlusFiveView, OnePlusSevenView, TwoPlusEightView, FourPlusTwoPlusFourView].includes(layoutType)) {\n playersDimensions = gridDimensions as Dimensions;\n } else if (layoutType === AutoView) {\n let camerasOnPage = Math.min(activeCameras.length, this.maxVideosPerPageAutoView);\n let bestView = this.getBestFittedAutoView(camerasOnPage, availableSpaceDimensions, autoViewLayoutOptions);\n\n // If the bestFittedAuto view for the current number of cameras has a gap, lets revert back to the users intended max videos per page,\n // which is equal to maxVideosPerPageAutoView - maxVideosPerPageDisparity. The reason we do this is if a user starts out viewing 9 cameras in a 3x3 grid,\n // then shortens the browser, we switch to a 5x2 grid with 10 cameras (maxVideosPerPageDisparity gets set to 1). Then if they make the browser taller again,\n // this block of code gets hit, and we know to revert back to a 3x3 grid.\n if (\n maxVideosPerPageDisparity &&\n this._specifiedAutoViewHasGaps(camerasOnPage, bestView!, this.maxVideosPerPageAutoView)\n ) {\n const usersIntendedMaxVideosPagePage = this.maxVideosPerPageAutoView - maxVideosPerPageDisparity;\n this.setMaxVideosPerPageAndDisparity(usersIntendedMaxVideosPagePage);\n\n camerasOnPage = Math.min(activeCameras.length, usersIntendedMaxVideosPagePage);\n bestView = this.getBestFittedAutoView(camerasOnPage, availableSpaceDimensions, autoViewLayoutOptions);\n }\n\n if (!bestView) {\n sentryWithScopeAndError(\n 'Unable to find a matching bestView for given scenario',\n {\n camerasOnPage,\n availableSpaceDimensions\n },\n undefined\n );\n return;\n }\n\n set(this, 'bestAutoView', bestView);\n this.updateMaxVideosPerPageAutoViewToFillGaps(camerasOnPage);\n\n playersDimensions = bestView.playersDimensions;\n } else {\n playersDimensions = (isHybridWide ? wideHybridDimensions : narrowHybridDimensions) as Dimensions;\n }\n\n set(this.layoutProperties, 'isHybridWide', isHybridWide);\n set(this, 'playersDimensions', playersDimensions);\n set(this, 'singlePlayerDimensions', gridDimensions!);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport {\n T_KEY,\n F_KEY,\n N_KEY,\n B_KEY,\n E_KEY,\n LEFT_ARROW_KEY,\n RIGHT_ARROW_KEY,\n DOWN_ARROW_KEY,\n UP_ARROW_KEY,\n nodeHandlesKeyboardInput\n} from '@adc/ember-utils/utils/a11y';\nimport { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { action, computed, set, setProperties } from '@ember/object';\nimport { alias, equal, gt, or } from '@ember/object/computed';\nimport { getOwner } from '@ember/owner';\nimport { scheduleOnce } from '@ember/runloop';\nimport { throttle } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { Normal as UserCreatedGroup } from 'customer-site/enums/CameraGroupType';\nimport ForcedStreamingMethodEnum from 'customer-site/enums/ForcedStreamingMethod';\nimport { PlayerExpand, PlayerRestore } from 'customer-site/enums/TrackedEvent';\nimport { getStringArrayIfJsonString } from 'customer-site/utils/json';\nimport { propertiesObserverTrigger } from 'customer-site/utils/properties-observe';\nimport {\n COOKIE_LAYOUT,\n COOKIE_MAX_VIDEOS_PER_PAGE_AUTO_VIEW,\n COOKIE_SELECTED_CAMERA_GROUP,\n COOKIE_SELECTED_CAMERAS,\n storeCookieForPage\n} from 'customer-site/utils/video/cookies';\nimport { CAMERA_GROUPS, HD_TOGGLE, logEventConditionToWavefront } from 'customer-site/utils/video/wavefront-stats';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { sentryWithScopeAndWarn } from '@adc/app-infrastructure/utils/sentry';\nimport OespPlaybackStateController from '@adc/video-player/classes/state-controllers/oesp-playback-state-controller';\nimport { OeRelayFallbackTimeout, ForceOeWebrtcTimeout } from '@adc/video-player/components/openeye-player';\nimport { Highest, Medium } from '../../../../enums/Resolution';\nimport { updateCameraOrderFromCameras } from '../../../../models/video/camera-group';\nimport { cameraItemsIsChanged, saveCameraGroupOrderFromCameraItemsOrder } from './camera-items';\nimport LayoutControl from './layout-control';\n\nimport type { EmberEnterpriseVideoCameraGroups, EmberVideoCameraGroups } from 'customer-site/enums/CustomerPageUrl';\nimport type { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type { SafeString } from 'handlebars';\nimport './_style.scss';\nimport type CookieManager from '@adc/app-infrastructure/services/cookie-manager';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type DomService from '@adc/ember-utils/services/dom';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type BaseStateController from '@adc/video-player/classes/state-controllers/base-state-controller';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type Owner from '@ember/owner';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type Stats from 'customer-site/services/stats';\nimport type PlaybackInfoCacheManager from 'customer-site/services/video/playback-info-cache-manager';\nimport type ApexConnectionInfo from '../../../../models/video/video-sources/apex-connection-info';\nimport type { AVSDataObject } from '../../advanced-video-search/page/index';\nimport type {\n AutoViewLayoutOption,\n AutoViewZoomAbility,\n CachedCameraItemParameters,\n CameraItem,\n HybridLayoutZoomAbility,\n LayoutType,\n LayoutZoomAbility,\n OEAudioInfo,\n OespControllerUpdateResult\n} from './types';\n\nexport const HdAspectRatio = 16 / 9,\n DefaultIsHdStatus = true,\n AutoView = 'auto-view',\n HybridView = 'hybrid-view',\n OnePlusFiveView = 'one-plus-five-view',\n OnePlusSevenView = 'one-plus-seven-view',\n TwoPlusEightView = 'two-plus-eight-view',\n FourPlusTwoPlusFourView = 'four-plus-two-plus-four-view',\n HybridNarrowAspectRatio = 4 / 3,\n HybridWideAspectRatio = (16 + 3 * (16 / 9)) / 9,\n PaginationHeight = 28,\n ToolbarPixelThreshold = 48,\n EventHistoryMargin = 8,\n MinimumPlayersHeight = 25;\n\n/**\n * Extension of Location model for adding other properties specific to this page\n */\ninterface LocationModelExtended extends LocationModel {\n cameras: Array;\n order: number;\n}\n\n// region Exported Public Constants and Functions.\n\nexport enum VideoStreamingFeaturesType {\n Live,\n Playback\n}\n\n// How recently two layout zooms done with the mouse can be from eachother in milliseconds\nexport const LayoutZoomMouseThrottleMS = 750;\n\n/**\n * Retrieves an existing OespPlaybackStateController that matches specific criteria, or creates a new one if no matching controller is found.\n * Returns a tuple where the first element is the updated list of playbackStateControllers including the new or found controller,\n * and the second element is the index of the OespPlaybackStateController that was retrieved or created.\n */\nexport function getOrCreateOespControllerWithUpdate(\n owner: Owner,\n playbackStateControllers: BaseStateController[],\n { apexId, apexProxyServerAddress, apexProxyToken, allowWebrtc, stunServer }: ApexConnectionInfo,\n isLiveVideo: boolean,\n forcedStreamingMethodFromQueryParam: ForcedStreamingMethodEnum\n): OespControllerUpdateResult {\n let controller: OespPlaybackStateController | undefined;\n\n playbackStateControllers ??= [];\n for (const c of playbackStateControllers) {\n if (c.id === apexId && c instanceof OespPlaybackStateController) {\n controller = c;\n break;\n }\n }\n\n // We must split up the OESP controllers based on device.\n if (!controller) {\n controller = new OespPlaybackStateController(owner);\n controller.id = apexId;\n controller.host = apexProxyServerAddress;\n controller.token = apexProxyToken;\n controller.isLiveVideo = isLiveVideo;\n controller.stunServer = stunServer;\n\n playbackStateControllers.push(controller);\n } else if (!controller.token) {\n controller.token = apexProxyToken;\n }\n\n // Allow WebRTC only if streaming via websocket is not forced.\n controller.allowWebrtc =\n forcedStreamingMethodFromQueryParam != ForcedStreamingMethodEnum.ForceWebRTCProxy && allowWebrtc;\n // If OE player is set to force a direct WebRTC connection, use a long timeout to keep trying Webrtc until the player itself times out\n localStorage.setItem(\n 'webrtc.timeout',\n forcedStreamingMethodFromQueryParam == ForcedStreamingMethodEnum.ForceWebRTCEndToEnd\n ? ForceOeWebrtcTimeout.toString()\n : OeRelayFallbackTimeout.toString()\n );\n\n return { playbackStateControllers, controller };\n}\n\n// endregion Exported Public Constants and Functions.\n\n// region Private Constants and Functions.\n\nconst ObservedPropertiesCameraIds = ['cameraId', 'cameraGroupId'],\n CachedProperties = 'cachedProperties',\n MaxVideoRowsOrColumns = 8;\n\n/**\n * Returns the number of pages for the number of cameras based on how many pages are allowed on each page.\n *\n * @param numberOfCameras The number of cameras we are currently viewing.\n * @param maxCameras The max number of cameras per page given the current layout.\n */\nexport function getNumberOfPages(numberOfCameras: number, maxCameras: number): number {\n return Math.ceil(numberOfCameras / maxCameras);\n}\n\n/**\n * Generates the location camera groups for the enterprise live view page\n */\nexport function createLocationCameraGroups(\n currentOrder: number,\n cameras: Array,\n locationCameraGroupInfos: Array\n) {\n locationCameraGroupInfos.forEach((group) => {\n // Emptying out the cameras from the model in case this was filled from a previous load. We need to fill it again because the list of cameras will\n // vary depending on which page we are on. IE cameras list will be different if we are on the SVR page vs the live video page.\n group.cameras = [];\n });\n\n cameras.forEach((camera) => {\n const locationId = camera.id.split('-')[0],\n locationCameraGroupInfo = locationCameraGroupInfos.findBy('id', locationId);\n\n if (locationCameraGroupInfo) {\n if (!locationCameraGroupInfo.cameras!.length) {\n locationCameraGroupInfo.order = currentOrder;\n ++currentOrder;\n }\n\n locationCameraGroupInfo.cameras.push(camera);\n }\n });\n\n return locationCameraGroupInfos\n .filter(({ cameras }) => cameras.length)\n .map((locationCameraGroupInfo) => {\n const locationCameraGroup = locationCameraGroupInfo.cameraGroup;\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This code should be replaced with `locationCameraGroup.cameras.setObjects(locationCameraGroupInfo.cameras);`.\n locationCameraGroup.cameras = locationCameraGroupInfo.cameras;\n locationCameraGroup.order = locationCameraGroupInfo.order;\n\n return locationCameraGroup;\n });\n}\n\n/**\n * Creates location camera groups (enterprise groups), if passed in, and adds them to the list of camera groups\n *\n * @param locationCameraGroupInfos\n * @param cameraGroups All the camera groups available in the context.\n * @param cameras\n */\nexport function addLocationGroupsToCameraGroups(\n this: VideoStreamingFeatures,\n locationCameraGroupInfos: Array,\n cameraGroups: Array,\n cameras: Array\n) {\n // Create Location camera groups if we are in the enterprise context and\n // there exists locations with cameras\n if (locationCameraGroupInfos?.length) {\n const currentOrder = cameraGroups.reduce((acc, cur) => Math.max(acc, cur['order']), 0) + 1;\n\n const locationCameraGroups = createLocationCameraGroups.call(\n this,\n currentOrder,\n cameras,\n locationCameraGroupInfos\n );\n locationCameraGroups.forEach(updateCameraOrderFromCameras);\n set(this, 'locationCameraGroups', locationCameraGroups as unknown as AsyncBelongsTo[]);\n cameraGroups.push(...locationCameraGroups);\n }\n}\n\n/**\n * Sets the activeCameras list\n */\nexport function setActiveCameras(this: VideoStreamingFeatures, newActiveCameras: Camera[]) {\n newActiveCameras.forEach((newCam) => {\n newCam.set('globalDeviceId', newCam.get('id'));\n });\n\n if (this.componentType === VideoStreamingFeaturesType.Live) {\n newActiveCameras = newActiveCameras.filter((cam) => cam.supportsLiveView);\n }\n\n set(this, 'activeCameras', newActiveCameras);\n}\n\n/**\n * Updates the camera group and camera when query params change.\n *\n * @param cameraGroups All available camera groups.\n * @param cameras All available cameras within the current context.\n */\nexport function updateCameraGroupAndCamera(\n this: VideoStreamingFeatures,\n cameraGroups: Array,\n cameras: Array\n) {\n const { cameraGroup, cameraGroupId, cameraId } = this,\n cameraGroupOrSingleCameraHasBeenSet = cameraGroup || cameraGroupId || cameraId,\n cameraGroupIdHasChanged = !!cameraGroupId && cameraGroupId !== cameraGroup?.id;\n\n // Update camera group if we've never set a camera group or single camera to display,\n // or we have a new id that doesn't match the current camera group.\n if (!cameraGroupOrSingleCameraHasBeenSet || cameraGroupIdHasChanged) {\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, updateCameraGroup, cameraGroups);\n return;\n }\n\n // Update single selected camera if we have a new camera id param, we have an outdated camera id param\n // that does not match the current active camera, or the current active camera does not support live view.\n if (\n cameraId &&\n (this.activeCameras?.length !== 1 ||\n cameraId !== (this.activeCameras[0] || {}).id ||\n !this.activeCameras[0]?.supportsLiveView)\n ) {\n // Move call to updateCamera out of the runloop to avoid infinite rendering.\n // todo: We should use the router service to transition query parameters (see VID-37514)\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, updateCamera, cameras);\n }\n}\n\n/**\n * Updates the camera group.\n *\n * @param cameraGroups All available camera groups.\n */\nfunction updateCameraGroup(this: VideoStreamingFeatures, cameraGroups: Array) {\n const { cameraGroupId } = this;\n\n if (!cameraGroups || !cameraGroups.length) {\n return;\n }\n\n let cameraGroup = cameraGroups.findBy('id', cameraGroupId as string); // Please fix this cast\n\n if (!cameraGroup || isDestroyed(cameraGroup)) {\n if (cameraGroupId) {\n console.log('selected camera group didnt exist, selecting the first camera group');\n }\n\n cameraGroup = cameraGroups.firstObject;\n selectCameraGroup.call(this, cameraGroup!.id);\n }\n\n setProperties(this, {\n cameraGroup,\n page: 1\n });\n\n cameraGroup!.orderedCameras.then((cams) => {\n setActiveCameras.call(this, cams);\n });\n}\n\n/**\n * Updates the camera.\n *\n * @param cameras All available cameras.\n */\nfunction updateCamera(this: VideoStreamingFeatures, cameras: Array) {\n const { cameraId } = this,\n newActiveCameras: Array = [];\n\n if (!cameras || !cameraId) {\n return;\n }\n\n // The cameraId property will either be a json list of camera id's or a singular camera id.\n const cameraIdsParsed: Array = getStringArrayIfJsonString(cameraId) || [cameraId],\n cameraIdsFilteredOut: Array = [];\n\n if (cameraIdsParsed.length) {\n cameraIdsParsed.forEach(function (cameraId) {\n const camera = cameras.findBy('id', cameraId);\n\n if (!camera) {\n // if we get here, it (likely means) one of our selected camera id's isn't compatible with the page\n // this is relevant for modifiedCameraSelection only\n cameraIdsFilteredOut.push(cameraId);\n }\n\n if (camera && camera.supportsLiveView) {\n newActiveCameras.push(camera);\n }\n });\n\n // merge the filtered out cameras with the previously filtered ones without duplicates\n this.filteredOutCameraIds = [...new Set([...this.filteredOutCameraIds, ...cameraIdsFilteredOut])];\n\n if (newActiveCameras.length) {\n setActiveCameras.call(this, newActiveCameras);\n } else {\n console.log('selected cameras didnt exist, selecting the first camera group');\n const cameraGroup = this.cameraGroups!.firstObject;\n selectCameraGroup.call(this, cameraGroup!.id);\n }\n } else {\n // the user intentionally selected zero cameras. Lets give them what they want ¯\\_(ツ)_/¯\n setActiveCameras.call(this, newActiveCameras);\n }\n\n this.layoutControl.setExpandedCameraIndex(undefined);\n set(this, 'page', 1);\n}\n\n/**\n * Updates the camera group and camera when query params change.\n *\n * @param cameraGroupId The ID of the camera group user wants to view\n */\nexport function selectCameraGroup(this: VideoStreamingFeatures, cameraGroupId: string) {\n this.layoutControl.setExpandedCameraIndex(undefined);\n\n setProperties(this, {\n page: 1,\n cameraId: null,\n cameraGroupId\n });\n\n storeCookieForPage.call(this, COOKIE_SELECTED_CAMERA_GROUP, cameraGroupId, this.hasModifiedCameraSelection);\n // Make sure to clear out the selected cameras cookie, if one exists.\n storeCookieForPage.call(this, COOKIE_SELECTED_CAMERAS, '', this.hasModifiedCameraSelection);\n\n this.contextManager.overwriteQueryParamsOnCurrentRoute({ cameraGroupId }, true);\n}\n\n/**\n * Sets up the necessary properties after initial setup has been completed.\n */\nexport function setInitialSetupDone(this: VideoStreamingFeatures) {\n setProperties(this, {\n initialSetupDone: true,\n showCameraItems: !!this.queryParamExists\n });\n}\n\n/**\n * Updates the default stream resolution value in the database.\n *\n * @param useHdStream Are we setting the default value to HD or non-HD?\n */\nfunction updateDefaultStreamResolution(useHdStream: boolean, ajax: AjaxService) {\n const newResolution = useHdStream ? Highest : Medium;\n ajax.apiRequest(\n `video/videoSources/liveVideoSources/setDefaultResolution?resolution=${newResolution}`,\n undefined,\n null,\n POST\n );\n}\n\n// endregion Private Constants and Functions.\n\n// region Hotkeys\n\n/**\n * Checks if any modifier keys were pressed during an event.\n */\nexport function eventFiredWithModifier(event: KeyboardEvent): boolean {\n return event.ctrlKey || event.altKey || event.metaKey;\n}\n\n// endregion Hotkeys\n\n/**\n * @classdesc\n *\n * Shared features across video streaming pages.\n */\n// eslint-disable-next-line ember/require-tagless-components\nexport default class VideoStreamingFeatures extends Component {\n // region Services.\n\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare dom: DomService;\n @service declare cookieManager: CookieManager;\n @service declare modals: ModalService;\n @service declare store: Store;\n @service declare stats: Stats;\n @service declare envSettings: EnvSettingsService;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service('video.playback-info-cache-manager') declare playbackInfoCacheManager: PlaybackInfoCacheManager;\n\n // endregion Services.\n\n // region Hooks.\n\n /** @override */\n // eslint-disable-next-line ember/classic-decorator-hooks\n init() {\n super.init();\n\n this.dom.addListener(this, document, 'keydown', (event: KeyboardEvent & { target: Node }) =>\n this.keyDownHandler(event)\n );\n set(\n this,\n 'layoutControl',\n new LayoutControl(\n this.initialLayoutType,\n this.maxVideosPerPageAutoView,\n this.autoViewMaxVideosPerPageLimit,\n this.stats,\n this.envSettings.isTestEnvironment(),\n getOwner(this)\n )\n );\n }\n\n /** @override */\n // eslint-disable-next-line ember/no-component-lifecycle-hooks\n didRender() {\n super.didRender();\n\n this.layoutControl.setPageSizingProperties(\n this.activeCameras,\n this.autoViewLayoutOptions,\n this.showPagination,\n this.useStreamingToolbar\n );\n }\n\n // endregion Hooks.\n\n /**\n * The component type. This should get overwritten.\n */\n get componentType(): VideoStreamingFeaturesType | undefined {\n logMissingAbstractMember(this, 'componentType must be implemented');\n return;\n }\n\n /**\n * The function used to determine if we should show the hd button toggle in the toolbar.\n * This takes in a list of active cameras and returns a bool. By default we just return true.\n */\n showHdButtonFn: (cameras: Camera[]) => boolean = () => true;\n\n // region Properties.\n\n /**\n * Controller for various layout related methods\n */\n declare layoutControl: LayoutControl;\n\n /**\n * Whether the setup done in the init is done.\n */\n initialSetupDone = false;\n\n /**\n * The type of player this page utilize.\n */\n playerType?: StreamUsage;\n\n /**\n * The string value for the player type, usually for logging purposes\n */\n playerTypeString = '';\n\n /**\n * Does the user have permission to view camera groups? This should get overwritten when permissions load\n */\n @tracked\n canViewManageCameraGroups = true;\n\n /**\n * Does the user have permission to edit camera groups? This should get overwritten when permissions load\n */\n @tracked\n canEditCameraGroups = true;\n\n /**\n * A ForcedStreamingMethodEnum for if streaming is being forced to a certain type via query param.\n */\n declare forcedStreamingMethodFromQueryParam: ForcedStreamingMethodEnum;\n\n /**\n * Route ID for manage groups page.\n */\n declare manageGroupsRouteId: typeof EmberVideoCameraGroups | typeof EmberEnterpriseVideoCameraGroups;\n\n /**\n * Whether we are in enterprise context.\n */\n @alias('contextManager.identityModel.isEnterprise')\n declare isEnterprise: boolean;\n\n /**\n * If the user is a commercial user\n */\n @alias('contextManager.identityModel.isCommercial')\n declare isCommercial: boolean;\n\n /**\n * If the user has can view event sidebar permissions.\n */\n @alias('model.videoStreamingPermissions.canViewEventSidebar')\n declare canViewEventSidebarPermissions: boolean;\n\n /**\n * Can the user set the default resolution for streaming (HD or non-HD)?\n */\n @alias('model.videoStreamingPermissions.canSetDefaultResolution')\n declare canSetDefaultResolution: boolean;\n\n /**\n * If we should use the modified camera selection, so that changing cameras on one of live/sd/svr playback pages impacts selected cameras on the others\n */\n @alias('model.videoStreamingPermissions.hasModifiedCameraSelection')\n declare hasModifiedCameraSelection: boolean;\n\n /**\n * Does the account have internal beta enabled\n */\n @alias('contextManager.identityModel.hasInternalBetaAccess')\n declare hasInternalBetaAccess: boolean;\n\n /**\n * Can the customer upload video clip from timeline to the cloud?\n */\n @alias('model.videoStreamingPermissions.canUploadFrom247ToCloud')\n declare canUploadFrom247ToCloud: boolean;\n\n /**\n * If the video streaming cameras selector is open\n */\n @tracked camerasSelectorIsOpen = false;\n\n /**\n * All cameras within the current context.\n */\n cameras: Array | null = null;\n\n /**\n * The id of the selected camera. (if any)\n */\n cameraId: string | null = null;\n\n /**\n * The id of the selected camera group (if any)\n */\n cameraGroupId: string | null = null;\n\n /**\n * The selected camera group\n */\n cameraGroup?: CameraGroup;\n\n /**\n * All camera groups within the current context.\n *\n * @type {Array}\n */\n cameraGroups: Array | null = null;\n\n /**\n * The virtual camera group that stores all of the context's streamable cameras.\n *\n * @type {models.video.CameraGroup|null}\n */\n allCamerasGroup: CameraGroup | null = null;\n\n /**\n * The location groups visible on the current page, if any\n */\n locationCameraGroups?: AsyncBelongsTo[];\n\n /**\n * The active cameras within a camera group. Typically this is just the camera group's cameras,\n * This value is set manually at various points.\n */\n activeCameras: Camera[] | null = null;\n\n /**\n * An array of camera id's that we were requested to be loaded (by the querystring or cookie), but could not be loaded\n */\n filteredOutCameraIds: Array = [];\n\n /**\n * Do we have no active cameras?\n */\n @equal('activeCameras.length', 0)\n declare noActiveCameras: boolean;\n\n /**\n * Does this context have more than one camera capable of streaming?\n */\n moreThanOneSupportedCamera = false;\n\n /**\n * Does this context have no cameras capable of streaming on this page?\n */\n noSupportedCameras = false;\n\n /**\n * Should we currently stream HD or non-HD streams?\n */\n useHdStream = DefaultIsHdStatus;\n\n /**\n * Whether we show the toolbar in full screen mode.\n */\n showToolbar = false;\n\n /**\n * Whether we show the footer (w/ pagination) in full screen.\n */\n showFooter = false;\n\n /**\n * The layout type to set the page to on initial load\n */\n initialLayoutType: LayoutType = AutoView;\n\n /**\n * The page we are currently on\n */\n page = 1;\n\n /**\n * What is the maximum allowed videos per page while using auto-view. This number can change while using the auto-view zoom feature.\n * This value will get set to autoViewMaxVideosPerPageLimit inside of the dataLoaded method\n */\n maxVideosPerPageAutoView = 0;\n\n /**\n * The largest value allowed for the max videos per page in auto view\n * This should get overridden\n */\n autoViewMaxVideosPerPageLimit = 0;\n\n /**\n * Have we lowered the stream quality from HD to SD automatically due to a detected poor streaming connection?\n */\n hasLoweredStreamQualityDueToPoorConnection = false;\n\n // endregion Properties.\n\n // region Playback\n\n /**\n * The playback state controllers for each player.\n */\n @tracked\n playbackStateControllers: BaseStateController[] | null = null;\n\n /**\n * AVS specific data\n */\n avsDataObject?: AVSDataObject;\n\n // endregion\n\n // region Computed Properties\n\n /**\n * If the user intentionally selected a new camera or set of cameras. This is used to track user triggered cameraItems computes.\n */\n userSelectedNewCameras = false;\n\n /**\n * Whether the streaming toolbar will be made visible on the page. This gets overridden by live video and playback features.\n */\n get useStreamingToolbar(): boolean {\n return false;\n }\n\n /**\n * Height styling for footer. We need to do this because we need the value for the players container size calculations, and it won't be in the DOM if\n * we are switching from a group with only one page.\n */\n @computed()\n get footerCss(): SafeString {\n return htmlSafe(`height:${PaginationHeight}px`);\n }\n\n /**\n * Whether we show the pagination buttons.\n */\n @computed('layoutControl.layoutProperties.{cameraExpanded,isFullScreen}', 'showCameraItems', 'totalPages')\n get showPagination(): boolean {\n return this.showCameraItems && !this.layoutControl.layoutProperties.cameraExpanded && this.totalPages > 1;\n }\n\n /**\n * The total number of pages for the current camera group & layout type.\n */\n @computed('activeCameras.[]', 'layoutProperties.layoutType', 'maxCamerasPerPage')\n get totalPages(): number {\n const { activeCameras } = this;\n\n if (!activeCameras) {\n return 0;\n }\n\n return getNumberOfPages(activeCameras.length, this.maxCamerasPerPage);\n }\n\n /**\n * Is this a login-as-login or CSVV?\n */\n @alias('identityManager.isLoginAsLoginRep')\n declare isLoginAsLogin: boolean;\n\n /**\n * Is this a managed 24/7 access login?\n */\n @alias('contextManager.identityModel.isManagedAccessLogin')\n declare isManagedAccessLogin: boolean;\n\n /**\n * Is this login restricted from viewing a live video feed?\n */\n @computed('isLoginAsLogin', 'isManagedAccessLogin')\n get isLoginRestrictedFromLiveVideo(): boolean {\n return this.isLoginAsLogin && !this.isManagedAccessLogin;\n }\n\n /**\n * Whether we have camera or camera group query param.\n */\n @or('cameraId', 'cameraGroupId')\n declare queryParamExists: boolean;\n\n /**\n * The cameras currently visible on the screen\n */\n @tracked cameraItems: CameraItem[] = [];\n\n /**\n * An object containing information about the cached camera items on the page.\n * This is used for detecting when camera Items actually change as oppose to being re-computed without changing.\n */\n cachedCameraItemParameters: CachedCameraItemParameters | null = null;\n\n /**\n * Returns an array of all possible auto-view layouts, in terms of how many videos per row/column, and what amount of cameras the view is compatible with.\n */\n get autoViewLayoutOptions(): Array {\n return this.layoutControl.getAutoViewLayoutOptions(MaxVideoRowsOrColumns, this.autoViewMaxVideosPerPageLimit);\n }\n\n /**\n * The resulting max cameras per page if a user tries to zoom in or out (or undefined if the action is not possible)\n */\n @computed(\n 'activeCameras',\n 'layoutControl.{bestAutoView,getAutoViewZoomAbility,maxVideosPerPageAutoView}',\n 'autoViewMaxVideosPerPageLimit',\n 'layoutProperties.layoutType',\n 'showPagination'\n )\n get autoViewZoomAbility(): AutoViewZoomAbility {\n return this.layoutControl.getAutoViewZoomAbility(this.activeCameras, this.showPagination);\n }\n\n /**\n * Returns the resulting hybrid layout if a user tries to zoom in or out (or undefined if the action is not possible)\n */\n @computed(\n 'cameras',\n 'playerType',\n 'layoutControl.{getHybridViewZoomAbility,layoutProperties.layoutType,preferTwoPlusEightView}'\n )\n get hybridLayoutZoomAbility(): HybridLayoutZoomAbility {\n return this.layoutControl.getHybridViewZoomAbility(this.cameras, this.playerType);\n }\n\n /**\n * If a user can do layout zooms in or out\n */\n @computed(\n 'autoViewZoomAbility',\n 'layoutControl.layoutProperties.{cameraExpanded,layoutType}',\n 'hybridLayoutZoomAbility'\n )\n get layoutZoomAbility(): LayoutZoomAbility | null {\n return this.layoutControl.getLayoutZoomAbility(this.autoViewZoomAbility, this.hybridLayoutZoomAbility);\n }\n\n /**\n * How many cameras are allowed on each page.\n */\n @computed('layoutControl.{layoutProperties.layoutType,maxVideosPerPageAutoView}')\n get maxCamerasPerPage(): number {\n const { layoutControl } = this;\n\n return layoutControl.getMaxCamerasByLayout(layoutControl.layoutProperties.layoutType);\n }\n\n /**\n * If there is more than one item in cameraItems array (more than one visible camera).\n */\n @gt('cameraItems.length', 1)\n declare moreThanOneCameraItem: boolean;\n\n /**\n * Further component specific processing to do after camera items have been set.\n */\n afterCameraItemsProcessing() {}\n\n /**\n * Saves the current playback times on the page into the playback info cache manager.\n * This should only be used on playback features\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n savePlaybackTimesToCache(_deviceId: string[]) {}\n\n /**\n * Whether we should show any players.\n */\n showCameraItems = false;\n\n /**\n * This tracks the SVR and Camera Player id currently playing audio.\n * oeAudioInfo = null means that no player is playing audio\n *\n * @type {OEAudioInfo|null}\n */\n @tracked oeAudioInfo: OEAudioInfo | null = null;\n\n // endregion Computed Properties.\n\n // region Render Modifier Actions\n\n /**\n * Sets cameraItems, stores cached camera item properties, saves playback times to cache, and other processing\n */\n @action\n cameraItemsProcessing() {\n const { showCameraItems, activeCameras, componentType, userSelectedNewCameras, maxCamerasPerPage } = this;\n\n if (!showCameraItems || !activeCameras) {\n this.cameraItems = [];\n return;\n }\n\n const createCameraItem = (model: Camera, idx: number) => ({\n model,\n viewIndex: idx,\n isSelectedForKeyboardPress: false,\n playerId: idx.toString()\n });\n\n const { cachedCameraItemParameters, page, totalPages } = this,\n pageIndex: number = page - 1,\n startIndex: number = pageIndex * maxCamerasPerPage,\n newCameraItems: Array = activeCameras\n .slice(startIndex, startIndex + maxCamerasPerPage)\n .map(createCameraItem);\n\n // this method will trigger more times than things have actually changed (IE several properties changed at once) so we need to make sure\n // that either the camera Items have actually changed or if a user selected new cameras.\n if (\n userSelectedNewCameras ||\n cameraItemsIsChanged(this.cachedCameraItemParameters, newCameraItems, page, totalPages)\n ) {\n // Save playback times to the cache only if the cached cameraItems were length one. This is because savePlaybackTimesToCache is based off\n // of using one deviceId currently. savePlaybackTimesToCache should be refactored to support multiple device ids or a group id. todo\n if (\n componentType === VideoStreamingFeaturesType.Playback &&\n cachedCameraItemParameters?.displayedDeviceIds.length === 1\n ) {\n // Save the times to the cache before changing cameraItems.\n this.savePlaybackTimesToCache(cachedCameraItemParameters.displayedDeviceIds);\n }\n\n this.storeCachedCameraItemParameters(newCameraItems, page, totalPages);\n set(this, 'userSelectedNewCameras', false);\n\n this.cameraItems = newCameraItems.sortBy('viewIndex');\n this.afterCameraItemsProcessing();\n this.oeAudioInfo = null;\n return;\n }\n\n // Can retrieve the last cached cameraItems property since its unchanged.\n this.cameraItems = cachedCameraItemParameters!.cameraItems;\n }\n\n /**\n * Action to update certain camera properties once we receive all properties.\n */\n @action\n updateCameraProperties() {\n const { cameraGroups, cameras, queryParamExists, initialSetupDone } = this;\n\n if (cameraGroups && cameras && queryParamExists && initialSetupDone) {\n if (propertiesObserverTrigger.call(this, ['queryParamExists'], CachedProperties)) {\n set(this, 'showCameraItems', queryParamExists && initialSetupDone);\n }\n\n if (propertiesObserverTrigger.call(this, ObservedPropertiesCameraIds, CachedProperties)) {\n updateCameraGroupAndCamera.call(this, cameraGroups, cameras);\n }\n }\n }\n\n /**\n * Action to add DOM listeners upon insert for this component.\n */\n @action\n addDomListenersUponInsert() {\n this.dom.addListener(this, this.element, 'mousemove', (event: MouseEvent) => this.handleMouseMove(event));\n\n ['fullscreenchange', 'mozfullscreenchange', 'webkitfullscreenchange', 'MSFullscreenChange'].forEach(\n (eventType) =>\n this.dom.addListener(this, document, eventType, () => this.layoutControl.handleFullScreenChange())\n );\n }\n\n /**\n * Observer to update players whenever needed.\n */\n @action\n playerDimensionsObserver() {\n this.layoutControl.updatePlayersDimensions(this.activeCameras, this.autoViewLayoutOptions, this.showPagination);\n }\n\n // endregion Render Modifier Actions\n\n /**\n * If the opened/closed status of the video streaming cameras selected updates\n *\n * @param isOpened true if it was just opened, false if it was just closed\n */\n @action\n cameraSelectorStatusChange(isOpened: boolean) {\n logEventConditionToWavefront(this.stats, CAMERA_GROUPS, isOpened);\n this.camerasSelectorIsOpen = isOpened;\n\n if (isOpened && this.layoutControl.layoutProperties.isFullScreen && this.layoutControl.toolbarHeightCached) {\n set(this, 'showToolbar', isOpened);\n }\n }\n\n /**\n * Handles when a new camera is set to be the large camera in components.video-player.video-streaming.video-streaming-players\n *\n * @param largeHybridCameraId the id of the new large camera.\n */\n @action\n setLargeHybridCamera(largeHybridCameraId: string) {\n set(this.layoutControl.layoutProperties, 'largeHybridCameraId', largeHybridCameraId);\n }\n\n // region Toolbar Actions\n\n /**\n * Toggles the streams between HD and non-HD.\n */\n @action\n toggleStreamResolution(): boolean {\n const { stats } = this;\n set(this, 'useHdStream', !this.useHdStream);\n\n // Handles the OESP toggle\n this.playbackStateControllers?.forEach((controller) => {\n if (controller instanceof OespPlaybackStateController) {\n controller.setStreamQuality(this.useHdStream);\n }\n });\n\n // Handles the WebRTC toggle\n if (this.canSetDefaultResolution) {\n updateDefaultStreamResolution(this.useHdStream, this.ajax);\n }\n this.refreshStream();\n\n logEventConditionToWavefront(stats, HD_TOGGLE, this.useHdStream);\n\n // We return false so the button doesn't show the green promise checkmark\n // since the cameras may all reload at different speeds.\n return false;\n }\n\n /**\n * Toggles theater mode being enabled and disabled.\n */\n @action\n toggleTheaterMode() {\n this.layoutControl.toggleTheaterMode();\n }\n\n /**\n * Toggles whether we are full screen.\n */\n @action\n toggleFullScreen() {\n this.layoutControl.executeFullScreenChange(!this.layoutControl.layoutProperties.isFullScreen, true);\n }\n\n /**\n * Resets the expanded camera index value.\n */\n @action\n resetExpandedCamera() {\n this.stats.logEvent(PlayerRestore);\n this.layoutControl.setExpandedCameraIndex(undefined);\n }\n\n /**\n * Sets the expanded camera index value.\n */\n @action\n setExpandedCamera(cameraIndex: number) {\n this.stats.logEvent(PlayerExpand);\n this.layoutControl.setExpandedCameraIndex(cameraIndex);\n }\n\n /**\n * Handles a user clicking a button to go to the previous or next page. Should get overwritten\n * @abstract\n */\n @action\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n changePage(_page: number) {}\n\n /**\n * Selects a new camera group.\n *\n * @param groupId The ID of the group to select.\n */\n @action\n selectCameraGroup(groupId: string) {\n set(this, 'userSelectedNewCameras', true);\n\n selectCameraGroup.call(this, groupId);\n }\n\n /**\n * Selects a set of new cameras\n */\n @action\n setNewActiveCameras(newActiveCameraIds: Array) {\n setProperties(this, {\n cameraId: JSON.stringify(newActiveCameraIds),\n cameraGroup: undefined,\n cameraGroupId: null,\n userSelectedNewCameras: true\n });\n\n // when modified camera selection is turned on, any cameras that were filtered out for being incompatible with the current page\n // we store to the cookie for the page, so that when we go to a different page (such as live view) we try to load them again.\n const cameraIdsToStoreToCookie = this.hasModifiedCameraSelection\n ? newActiveCameraIds.concat(this.filteredOutCameraIds)\n : newActiveCameraIds;\n\n storeCookieForPage.call(\n this,\n COOKIE_SELECTED_CAMERAS,\n JSON.stringify(cameraIdsToStoreToCookie),\n this.hasModifiedCameraSelection\n );\n // Make sure to clear out the selected camera group cookie, if one exists.\n storeCookieForPage.call(this, COOKIE_SELECTED_CAMERA_GROUP, '', false);\n }\n\n /**\n * A camera group has just been saved. Adds the group to the cameraGroups array and selects it (if a new group)\n *\n * @param groupId\n * @param isNewGroup if the group created is a new group (otherwise overwriting a current group)\n * @returns {Promise.}\n */\n @action\n async groupSaved(groupId: string, isNewGroup: boolean) {\n const { store } = this,\n newRecord = await store.peekRecord('video/camera-group', groupId);\n\n if (!newRecord) {\n sentryWithScopeAndWarn('Couldnt find camera group', { groupId: groupId }, undefined);\n return;\n }\n\n if (isNewGroup) {\n this.addNewGroupBeforeSpecialGroups(newRecord);\n }\n\n selectCameraGroup.call(this, groupId);\n }\n\n /**\n * Reorders the cameraGroup model and saves it to match the order of the cameraItems passed in (based on their viewIndex value)\n */\n @action\n async saveCameraGroupOrderFromCamItemsOrder() {\n const pageIndex = this.page - 1,\n startIndex = pageIndex * this.maxCamerasPerPage;\n\n await saveCameraGroupOrderFromCameraItemsOrder(this.cameraGroup!, this.cameraItems, startIndex);\n }\n\n /**\n * Updates playersDimensions, so the component has appropriate dimensions.\n */\n @action\n updatePlayersDimensions() {\n this.layoutControl.updatePlayersDimensions(this.activeCameras, this.autoViewLayoutOptions, this.showPagination);\n }\n\n /**\n * Changes the current page to the page selected.\n *\n * @param newPage the new page to selected.\n */\n @action\n setPageNumber(newPage: number) {\n set(this, 'page', newPage);\n }\n\n /**\n * Whenever the layout changes, we want to set our autoPlay flag, our page number to the correct page, hide the 5+ tour, and store the layout cookie.\n */\n @action\n layoutChangeCallback(newPage: number) {\n this.setAutoPlayWhenReady();\n this.setPageNumber(newPage);\n storeCookieForPage.call(this, COOKIE_LAYOUT, this.layoutControl.layoutProperties.layoutType, false);\n storeCookieForPage.call(\n this,\n COOKIE_MAX_VIDEOS_PER_PAGE_AUTO_VIEW,\n this.layoutControl.maxVideosPerPageAutoView,\n false\n );\n }\n\n /**\n * Sets the autoPlayWhenReady value (overwritten in playbackFeatures)\n */\n @action\n setAutoPlayWhenReady() {}\n\n /**\n * Sets layout type query param.\n *\n * @param layoutType The layout type user wants to use\n */\n @action\n updateLayoutType(layoutType: LayoutType) {\n this.layoutControl.updateLayoutType(layoutType, this.activeCameras, this.page, this.layoutChangeCallback);\n }\n\n /**\n * Zooming the layouts in or out\n */\n @action\n performLayoutZoom(isZoomIn: boolean) {\n this.layoutControl.performLayoutZoom(\n isZoomIn,\n this.activeCameras,\n this.layoutZoomAbility,\n this.page,\n this.autoViewZoomAbility,\n this.hybridLayoutZoomAbility,\n this.layoutChangeCallback\n );\n }\n\n /**\n * When the user does a mouse wheel event combined with the shift key (while in auto view) we use the auto-view zoom feature\n */\n @action\n onMouseWheelEvent(event: WheelEvent) {\n if (!event.shiftKey) {\n return;\n }\n\n // Combined with capture=true for this event, we want to prevent the ptz feature in zoom-pan-overlay from hearing this event\n event.stopPropagation();\n\n const layoutZoomFunction = () => this.performLayoutZoom(event.deltaY < 0);\n\n // throttle added to prevent a user from accidentally over-scrolling and calling more zooms than expected\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline throttleTask.\n // eslint-disable-next-line ember/no-runloop\n throttle(this, layoutZoomFunction, LayoutZoomMouseThrottleMS);\n }\n\n /**\n * Updates the value of isTheaterModeOrFullScreen based on isFullScreen and isTheaterMode\n */\n @action\n updateIsTheaterModeOrFullScreen() {\n const { layoutControl } = this,\n { layoutProperties } = layoutControl,\n { isFullScreen, isTheaterMode } = layoutProperties;\n\n set(this.layoutControl.layoutProperties, 'isTheaterModeOrFullScreen', isFullScreen || isTheaterMode);\n }\n\n /**\n * A camera detected it has a poor connection on stream start.\n * If we haven't done so and we're streaming HD, let's try lowering the stream quality to see if that improves things.\n *\n * @note We will do this max once per page visit, so we track with a separate boolean from useHdStream.\n * @note In particular, if a customer raises their stream resolution again, we won't lower it a second time.\n */\n @action\n onCameraHasPoorStartingConnection() {\n if (this.hasLoweredStreamQualityDueToPoorConnection || !this.useHdStream) {\n return;\n }\n\n // Toggle will set stream resolution from HD to SD.\n this.toggleStreamResolution();\n this.hasLoweredStreamQualityDueToPoorConnection = true;\n this.notificationManager.addInfo(\n this.intl.t('components.video.video-streaming.video-streaming-features.videoStreamLoadingSlowlyInfo')\n );\n }\n\n /**\n * OESP only supports audio from one camera on one SVR at a time.\n * playerIdWithAudio will be the camera player currently playing audio\n * svrIdWithAudio will be the SVR currently playing audio,\n * We keep track of both to consistently only play audio from one camera and one SVR at a time,\n * and we propagate them to all of the lower components to mute the other players that don't have this playerId or svrId\n *\n * @param {boolean} shouldMute Should this camera player mute?\n * @param {string} playerId Id of the camera player that should play audio\n * @param {string} svrId Id of the SVR that should play audio\n */\n @action setOEAudioInfo(shouldMute: boolean, playerId: string, svrId: string) {\n // setting oeAudioInfo to null ensures that no existing OE players are assigned to play audio, effectively muting them.\n this.oeAudioInfo = shouldMute ? null : { playerIdWithAudio: playerId, svrIdWithAudio: svrId };\n }\n\n /**\n * Adds a new group to the cameraGroups list so that it is inserted at the end of user created groups but before special groups (all cameras or location)\n */\n private addNewGroupBeforeSpecialGroups(newUserGroup: CameraGroup) {\n const { cameraGroups } = this;\n\n if (!cameraGroups) {\n return;\n }\n\n const specialGroups = cameraGroups.filter(({ groupType }) => groupType !== UserCreatedGroup);\n\n // If we've got non-user created (special) groups, we need to insert this new group before the first special group.\n // We do this by incrementing the order value of the special groups by one and setting the new group's order to what was originally the lowest\n if (specialGroups.length) {\n let lowestOrder: number | null = null;\n\n specialGroups.forEach((group) => {\n const { order } = group;\n\n if (lowestOrder === null || order < lowestOrder) {\n lowestOrder = order;\n }\n\n group.set('order', order + 1);\n });\n\n newUserGroup.set('order', lowestOrder);\n\n cameraGroups.push(newUserGroup);\n\n set(this, 'cameraGroups', cameraGroups.sortBy('order'));\n } else {\n cameraGroups.push(newUserGroup);\n }\n }\n\n /**\n * When there is an expanded camera, cycle to the next one\n *\n * @param isForward If this should cycle forwards. If false, then cycle to previous.\n */\n private cycleExpandedCamera(isForward: boolean) {\n const { activeCameras, cameraItems, layoutControl, maxCamerasPerPage, page, totalPages } = this,\n { layoutProperties } = layoutControl,\n { expandedCameraIndex } = layoutProperties,\n count = cameraItems?.length ?? 0;\n\n if (expandedCameraIndex == null || isNaN(expandedCameraIndex) || !activeCameras) {\n return;\n }\n\n let newCameraIndex = expandedCameraIndex + (isForward ? 1 : -1),\n newPage = page;\n\n // if we've passed the last camera on this page\n if (newCameraIndex === count) {\n newPage++;\n\n // if we've past the last page\n if (newPage > totalPages) {\n newPage = 1;\n }\n\n newCameraIndex = 0;\n } else if (newCameraIndex === -1) {\n // if we've passed the first camera on this page (going backwards)\n newPage--;\n\n // if we've passed the first page (going backwards) we need to figure out how many cameras are on\n // that page before we set the newCameraIndex\n if (newPage < 1) {\n newPage = totalPages;\n newCameraIndex = activeCameras.length - (totalPages - 1) * maxCamerasPerPage - 1;\n } else {\n newCameraIndex = maxCamerasPerPage - 1;\n }\n }\n\n this.layoutControl.setExpandedCameraIndex(newCameraIndex);\n set(this, 'page', newPage);\n }\n\n /**\n * Handles when we show/hide the toolbar in full screen mode.\n */\n private handleMouseMove(event: MouseEvent) {\n const { camerasSelectorIsOpen, layoutControl, showToolbar } = this,\n { layoutProperties, toolbarHeight, toolbarHeightCached } = layoutControl,\n { isFullScreen } = layoutProperties;\n\n // We only care about this in full screen mode, and we want to make sure the toolbar height has been cached before proceeding.\n if (!isFullScreen || !toolbarHeightCached) {\n return;\n }\n\n const mouseVerticalCoord = event.clientY;\n\n // If the toolbar is currently shown but the user has navigated outside of it, we want to hide it.\n // With the exception of if the video streaming cameras selector is open, otherwise they cant change the selected camera.\n if (showToolbar && mouseVerticalCoord > toolbarHeight && !camerasSelectorIsOpen) {\n set(this, 'showToolbar', false);\n }\n\n // If the toolbar is hidden and the user has entered the zone between the top player buttons and the very top of the screen, we want to show the toolbar.\n if (!showToolbar && 0 <= mouseVerticalCoord && mouseVerticalCoord < ToolbarPixelThreshold) {\n set(this, 'showToolbar', true);\n }\n }\n\n /**\n * Keydown event handler which is added to the document on didInsert\n */\n private keyDownHandler(event: KeyboardEvent & { target: Node }) {\n const { keyCode, shiftKey } = event,\n target = event.target,\n { avsDataObject, layoutControl } = this;\n\n // If the target node already handles keyboard input or if keydown event fired with a modifier held.\n // or if the timeline is hidden while in an AVS context\n if (nodeHandlesKeyboardInput(target) || eventFiredWithModifier(event) || avsDataObject?.svrTimelineIsHidden) {\n return;\n }\n\n switch (keyCode) {\n case T_KEY:\n layoutControl.toggleTheaterMode();\n break;\n case F_KEY:\n layoutControl.executeFullScreenChange(!this.layoutControl.layoutProperties.isFullScreen, true);\n break;\n case N_KEY:\n this.cycleExpandedCamera(true);\n break;\n case B_KEY:\n this.cycleExpandedCamera(false);\n break;\n case E_KEY:\n this.toggleExpandedMode();\n break;\n case LEFT_ARROW_KEY:\n if (shiftKey && this.page > 1) {\n this.changePage(this.page - 1);\n }\n\n break;\n case RIGHT_ARROW_KEY:\n if (shiftKey && this.page < this.totalPages) {\n this.changePage(this.page + 1);\n }\n\n break;\n case DOWN_ARROW_KEY:\n if (shiftKey) {\n this.performLayoutZoom(true);\n }\n\n break;\n case UP_ARROW_KEY:\n if (shiftKey) {\n this.performLayoutZoom(false);\n }\n\n break;\n }\n }\n\n /**\n * Refreshes the video streams.\n */\n private refreshStream() {\n const { cameraGroups, cameras } = this;\n\n updateCameraGroupAndCamera.call(this, cameraGroups, cameras);\n }\n\n /**\n * Stores the displayedDeviceIds array based on the device ids passed in as a cameraItems property and also page information inside of cachedCameraItemParameters\n *\n * @param cameraItems An array of camera/stream objects\n * @param page the page we are on\n * @param totalPages the total number of pages on the screen\n */\n private storeCachedCameraItemParameters(cameraItems: Array, page: number, totalPages: number) {\n const displayedDeviceIds = cameraItems.map((cameraItem) => cameraItem!.model!.globalDeviceId) as Array;\n\n set(this, 'cachedCameraItemParameters', {\n cameraItems,\n displayedDeviceIds,\n page,\n totalPages\n });\n }\n\n /**\n * Toggle in and out of expanded mode. If we aren't currently in expanded mode,\n * we'll expand the first camera on the page.\n */\n private toggleExpandedMode() {\n const { cameraItems, layoutControl } = this,\n { layoutProperties } = layoutControl,\n { expandedCameraIndex } = layoutProperties;\n\n if (!cameraItems?.length) {\n return;\n }\n\n if (!isNaN(expandedCameraIndex!)) {\n this.actions.resetExpandedCamera.call(this);\n } else {\n this.actions.setExpandedCamera.call(this, 0);\n }\n }\n}\n","export default {\"modulePrefix\":\"customer-site\",\"isProduction\":true,\"isDevelopment\":false,\"environment\":\"production\",\"releaseId\":\"\",\"podModulePrefix\":\"\",\"locationType\":\"history\",\"requestJsonApiResponse\":true,\"sitePrefix\":\"/web\",\"siteUrl\":\"https://www.alarm.com\",\"rootURL\":\"/web/system/\",\"addDeviceEngine\":{\"engineApiPrefix\":\"/web\",\"parentApplication\":\"customer-site\"},\"loginSetupEngine\":{\"engineApiPrefix\":\"/web\",\"parentApplication\":\"customer-site\"},\"networkConfigEngine\":{\"engineApiPrefix\":\"/web\",\"parentApplication\":\"customer-site\",\"iconPath\":\"/web/system/assets/icons.svg\"},\"apiBaseUrl\":\"/web/api\",\"rootStaticResourcesServerURL\":\"/web/CustomerLibraryFiles/\",\"logoutPage\":\"/web/Logout.aspx\",\"intercomVisitorDirectoryUrls\":{\"local\":\"https://intercom.dev.adcinternal.com/directory\",\"development\":\"https://intercom.dev.adcinternal.com/directory\",\"test\":\"https://intercom.test-us.adcinternal.com/directory\",\"production\":\"https://intercom.alarm.com/directory\"},\"EmberENV\":{\"FEATURES\":{\"ds-extended-errors\":true},\"EXTEND_PROTOTYPES\":{\"Date\":false,\"String\":false},\"_APPLICATION_TEMPLATE_WRAPPER\":false,\"_DEFAULT_ASYNC_OBSERVERS\":true,\"_JQUERY_INTEGRATION\":false,\"_TEMPLATE_ONLY_GLIMMER_COMPONENTS\":true},\"APP\":{\"GTM_ID\":\"GTM-TQ5L39XF\",\"name\":\"customer-site\",\"version\":\"0.4.0+6af73ae2\"},\"screenBreakpoints\":{\"mobileMax\":540,\"tabletPortraitMax\":768,\"tabletMax\":1024,\"desktopMax\":1439,\"desktopLargeMax\":1920,\"desktopGiantMix\":1921},\"ember-metrics\":{\"includeAdapters\":[\"Pendo\"]},\"ember-cli-mirage\":{\"enabled\":false,\"excludeFilesFromBuild\":true,\"usingProxy\":false,\"useDefaultPassthroughs\":true},\"errorReporting\":{\"dsn\":\"https://237efc217fef494b8f84e8d5705beb52@o80433.ingest.sentry.io/1377221\"},\"@sentry/ember\":{\"ignoreEmberOnErrorWarning\":false,\"disablePerformance\":true},\"ember-a11y-testing\":{\"componentOptions\":{\"turnAuditOff\":true}}};","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed, getProperties } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { UpsellOfferCart, UpsellOfferContact } from 'customer-site/enums/CustomerPageUrl';\nimport { SolarIntegration } from '../../enums/UpsellCampaignHardware';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for CustomerShop Item route.\n */\nexport default class Controller extends EmberController {\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n queryParams = ['src'];\n @tracked src?: string;\n\n declare model: ResolvedModelFrom;\n\n /**\n * Is the item actually available to order? Eg. does it have pricing?\n */\n @computed('model.{offerId,oneTimeCost,monthlyFee,isOrderable}')\n get isOrderable(): boolean {\n const { offerId, oneTimeCost, monthlyFee, isOrderable } = this.model!;\n return offerId > 0 && oneTimeCost !== undefined && monthlyFee !== undefined && isOrderable;\n }\n\n /**\n * HTML formatted text block for pricing.\n */\n @computed('isOrderable', 'model.{supportsHardwarePricing,supportsServicePackagePricing,monthlyFee,oneTimeCost}')\n get priceText(): string {\n const { supportsHardwarePricing, supportsServicePackagePricing, oneTimeCost, monthlyFee } = this.model!;\n if (!this.isOrderable || (!supportsHardwarePricing && !supportsServicePackagePricing)) {\n return '';\n }\n\n const oneTimeHardwarePriceString = `${oneTimeCost}`,\n monthlyPriceString = `${monthlyFee}/${this.intl.tc(this, 'month')}`;\n\n // Only display the correct pricing if the offer supports custom hardware pricing, service package pricing, or both\n if (supportsHardwarePricing && supportsServicePackagePricing) {\n return `${oneTimeHardwarePriceString}
    ${monthlyPriceString}`;\n }\n\n if (supportsHardwarePricing) {\n return oneTimeHardwarePriceString;\n }\n\n return monthlyPriceString;\n }\n\n @equal('resolvedModel.upsellHardwarePartId', SolarIntegration)\n declare isSolar: boolean;\n\n /**\n * Adds the item to the cart.\n */\n @action\n async addToCart(): Promise {\n const { src } = this,\n model = this.model!,\n data = {\n ...getProperties(model, 'dealerItemId', 'offerId'),\n src\n };\n\n try {\n const response = await this.ajax.apiRequestForValue<{\n isSuccess: boolean;\n }>('customer-shop/AddToCart', undefined, data, 'POST', true);\n\n if (response.isSuccess) {\n this.navigation.transitionToRouteId(UpsellOfferCart, {\n queryParams: {\n src\n }\n });\n }\n } catch (e) {\n console.error(e);\n this.notificationManager.addError(this.intl.tc(this, 'cartError'));\n\n throw e;\n }\n }\n\n /**\n * Redirects the user to a page where they can ask for more information.\n */\n @action\n async goToSubmitInquiry(): Promise> {\n const model = this.model!,\n queryParams: Record = {\n upsellOffer_type: model.upsellFeatureTypeId,\n src: this.src\n };\n\n if (model.offerId > 0) {\n queryParams.upsellOffer_id = model.offerId;\n }\n\n return this.navigation.transitionToRouteId(UpsellOfferContact, {\n queryParams\n });\n }\n\n /**\n * Tracks the customer as starting the NomoHub lead funnel process\n *\n * Redirects to the Dealer's unique lead funnel URL.\n */\n @action\n async trackCustomerAsNomoHubLead(): Promise {\n const { intl, notificationManager } = this;\n\n try {\n const response = await this.ajax.apiRequestForValue<{\n leadId: number;\n }>(\n 'customer-shop/TrackCustomerAsSolarLead',\n undefined,\n getProperties(this.model!, 'offerId'),\n 'POST',\n true\n );\n\n if (response.leadId) {\n // We'll add the leadId in the URL so NomoHub can loop back to us with the progress of the customer's lead\n // E.g. https://my.solarsmarthome.com/ADCConnect/Alarm/1\n this.navigation.transitionToUrlInNewBrowserWindow(\n `${this.model!.solarIntegrationUrl}${response.leadId}`\n );\n } else {\n notificationManager.addError(intl.tc(this, 'solarLeadError'));\n }\n } catch (e) {\n console.error(e);\n notificationManager.addError(intl.tc(this, 'solarLeadError'));\n\n throw e;\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'customer-shop/item': Controller;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberCustomerShopItemDetails, UpsellOffersDashboard } from '../../enums/CustomerPageUrl';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ENV from 'customer-site/config/environment';\nimport type Ajax from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport './_style.scss';\n\n/**\n * @classdesc\n * This route is responsible for displaying the details for an item and letting the user add it to the cart.\n */\nexport default class Route extends AdcBaseRoute {\n routeId = EmberCustomerShopItemDetails;\n\n @service declare ajax: Ajax;\n @service declare contextManager: ContextManager;\n @service declare envSettings: EnvSettingsService;\n @service declare navigation: NavigationService;\n\n /**\n * Constructs the model to pass down to the controller\n */\n async model(params: QueryParams): Promise {\n const { ajax, contextManager } = this,\n { visitedRoutesStack } = contextManager;\n\n // Remove UpsellOfferDetail2 from the stack of visited pages so the back button can go back to Discover\n const index = visitedRoutesStack?.findIndex(\n (routeData) =>\n routeData.routeName == 'legacy-page' &&\n (routeData.queryParams?.url as string).includes('UpsellOfferDetail2')\n );\n\n if (index) {\n visitedRoutesStack.splice(index, 1);\n }\n\n const itemId = Number.parseInt(params.id_item);\n\n if (!itemId || itemId < 0) {\n this.navigation.transitionToRouteId(UpsellOffersDashboard);\n return;\n }\n\n try {\n const response = await ajax.apiRequestForValue(\n `customer-shop/item/${itemId}`,\n undefined,\n null,\n 'GET',\n false\n );\n\n response.stockImageUrl = this.createImageUrl(response.stockImageUrl);\n response.heroImageUrl = this.createImageUrl(response.heroImageUrl);\n response.sectionOneImageUrl = this.createImageUrl(response.sectionOneImageUrl);\n return response;\n } catch (e) {\n console.error(e);\n this.navigation.transitionToRouteId(UpsellOffersDashboard);\n }\n\n return undefined;\n }\n\n /**\n * Creates a fully formed URL based on images as we store them in the DB that are application relative.\n */\n private createImageUrl(imageUrl: string): string {\n return imageUrl.replace(\n '~/CustomerLibraryFiles/',\n this.envSettings.getEnvironment()?.rootStaticResourcesServerURL ?? ''\n );\n }\n}\n\ninterface QueryParams {\n /**\n * This is the dealerItemId.\n */\n id_item: string;\n}\n\ninterface ItemModel {\n /**\n * The PK identifier for the item being displayed.\n */\n dealerItemId: number;\n\n /**\n * DealerId of the item. Generally this will always equal the customer dealer ID but we may introduce default dealer=0 items.\n */\n dealerId: number;\n\n /**\n * The UpsellHardwarePartEnum on the server.\n */\n upsellHardwarePartId: number;\n\n /**\n * The Feature enum on the server. Can be viewed as the category that the item belongs in.\n */\n upsellFeatureTypeId: number;\n /**\n * Name of the item for sale.\n */\n itemName: string;\n stockImageUrl: string;\n heroImageUrl: string;\n mainHeader: string;\n mainText: string;\n sectionOneHeader: string;\n sectionOneText: string;\n sectionOneImageUrl: string;\n offerId: number;\n /**\n * Is the offer orderable? If not it will be inquiry only. This is for a select few offer types\n * e.g. LTE Upgrade, Interactive Security w/ Builder Program, and Autogenerated Solar Offers\n */\n isOrderable: boolean;\n /**\n * Does the offer support hardware pricing? If not, @see {@link oneTimeCost } will be hidden on the template\n */\n supportsHardwarePricing: boolean;\n /**\n * Does the offer support custom service package pricing? If not, @see {@link monthlyFee } will be hidden on the template\n */\n supportsServicePackagePricing: boolean;\n /**\n * Upfront Cost already string formatted for local culture.\n */\n oneTimeCost: string;\n /**\n * Monthly Fee already string formatted for local culture.\n */\n monthlyFee: string;\n /**\n * The list of key features that the part contains\n */\n keyFeatures?: Array;\n /**\n * Guards whether or not the \"(vary by model)\" text shows up on the template\n */\n doKeyFeaturesVaryByModel?: boolean;\n /**\n * If the customer's dealer/sub-dealer is integrated with NomoHub, then we'll populate this field with their custom url\n */\n solarIntegrationUrl?: string;\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../classes/base-route';\nimport { EmberHvacDashboardThermostats } from '../../../enums/CustomerPageUrl';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\n\n/**\n * @classDesc\n * Index route for HVAC Dashboard which lists all the thermostats associated with the current account.\n */\nexport default class DashboardsThermostatsIndexRoute extends AdcBaseRoute {\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n routeId = EmberHvacDashboardThermostats;\n\n model(): { thermostats: ADCAsyncStoreFindAll } {\n return {\n thermostats: this.store.findAll('devices/thermostat')\n };\n }\n\n /**\n * Updates this route's title for the back-navigation display.\n * The subnav title should remain as defined by the server.\n */\n getRouteItemTitle(): string {\n return this.intl.tc(this, 'thermostats');\n }\n}\n","import Controller from '@ember/controller';\nimport { computed } from '@ember/object';\n\nimport type ThermostatDiagnostic from 'customer-site/models/dashboards/thermostat-diagnostic';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classDesc\n * The base controller for all HVAC Dashboard detail controllers.\n */\nexport default abstract class BaseHvacDashboardDetailController extends Controller {\n declare model: ModelFrom;\n\n /**\n * The 'testMode' query param can be manually included in order to expose testing tools within pages associated with this controller.\n */\n get isTestMode(): boolean {\n return new URLSearchParams(document.location.search).get('testMode') === 'true';\n }\n\n /**\n * The diagnostic type associated with the controller.\n */\n abstract diagnosticType: number;\n\n /**\n * Returns the thermostat-diagnostic record that corresponds to the current controller's diagnosticType.\n * Requires {model.heatModeActive} as a dependent property so activeDiagnostic can update when heatModeActive changes.\n */\n @computed('diagnosticType', 'model.diagnosticModel.{filteredDiagnostics,heatModeActive}')\n get activeDiagnostic(): ThermostatDiagnostic {\n return this.model.diagnosticModel.filteredDiagnostics.findBy('diagnosticType', this.diagnosticType)!;\n }\n}\n","import { Comfort } from 'customer-site/enums/ThermostatDiagnosticType';\nimport BaseHvacDashboardDetailController from '../base-hvac-dashboard-detail-controller';\n\n/**\n * @classdesc\n * Controller for the HVAC Dashboard Comfort route.\n */\nexport default class DashboardsThermostatsComfortController extends BaseHvacDashboardDetailController {\n diagnosticType = Comfort;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'dashboards/thermostats/thermostat/comfort': DashboardsThermostatsComfortController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberHvacDashboardComfort } from 'customer-site/enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * Comfort details route for the HVAC Dashboard.\n */\nexport default class DashboardsThermostatsDetailComfortRoute extends AdcBaseRoute {\n routeId = EmberHvacDashboardComfort;\n}\n","import { Cycle } from 'customer-site/enums/ThermostatDiagnosticType';\nimport BaseHvacDashboardDetailController from '../base-hvac-dashboard-detail-controller';\n\n/**\n * @classdesc\n * Controller for the HVAC Dashboard Cycle route.\n */\nexport default class DashboardsThermostatsCycleController extends BaseHvacDashboardDetailController {\n diagnosticType = Cycle;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'dashboards/thermostats/thermostat/cycle': DashboardsThermostatsCycleController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberHvacDashboardCycle } from 'customer-site/enums/CustomerPageUrl';\n\n/**\n * @classDesc\n * Cycle details route for the HVAC Dashboard.\n */\nexport default class DashboardsThermostatsDetailCycleRoute extends AdcBaseRoute {\n routeId = EmberHvacDashboardCycle;\n}\n","import { Efficiency } from '../../../../enums/ThermostatDiagnosticType';\nimport BaseHvacDashboardDetailController from '../base-hvac-dashboard-detail-controller';\n\n/**\n * @classDesc\n * Controller for the HVAC Dashboard Efficiency route.\n */\nexport default class DashboardsThermostatsEfficiencyController extends BaseHvacDashboardDetailController {\n diagnosticType = Efficiency;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'dashboards/thermostats/thermostat/efficiency': DashboardsThermostatsEfficiencyController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberHvacDashboardEfficiency } from 'customer-site/enums/CustomerPageUrl';\n\n/**\n * @classDesc\n * Efficiency details route for the HVAC Dashboard.\n */\nexport default class DashboardsThermostatsDetailEfficiencyRoute extends AdcBaseRoute {\n routeId = EmberHvacDashboardEfficiency;\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberHvacDashboardSummary } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type ThermostatDiagnostic from 'customer-site/models/dashboards/thermostat-diagnostic';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * An object that wraps an array of thermostat-diagnostic records for the current route's thermostat id.\n * Also maintains an array of diagnostics that are filtered according to the heatModeActive boolean.\n * This array of filtered diagnostics is ultimately what gets printed to the UI.\n *\n * @inner\n */\nexport class ThermostatDiagnosticsModel {\n /**\n * An array of thermostat-diagnostic records for the current route's thermostat id.\n */\n @tracked diagnostics: ADCAsyncStoreQuery;\n\n @tracked heatModeActive?: boolean;\n\n constructor(diagnostics: ADCAsyncStoreQuery) {\n this.diagnostics = diagnostics;\n\n (async () => {\n const d = (await diagnostics) as ADCRecordArray;\n this.heatModeActive = d.meta.heatModeActive;\n })();\n }\n\n /**\n * Returns the subset of thermostat-diagnostic records that correspond to the currently active temperature mode display.\n */\n @computed('diagnostics', 'heatModeActive')\n get filteredDiagnostics(): ThermostatDiagnostic[] {\n return (this.diagnostics ?? []).filterBy('displayMode', this.heatModeActive ? 'heat' : 'cool');\n }\n\n @action toggleHeatMode(): void {\n this.heatModeActive = !this.heatModeActive;\n }\n}\n\n/**\n * @classDesc\n * Base Route for the HVAC Dashboard summary and details pages.\n * This route is responsible for fetching the diagnostic models for the given thermostat id slug.\n */\nexport default class DashboardsThermostatRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n\n routeId = EmberHvacDashboardSummary;\n\n model({ id_thermostat }: { id_thermostat: string }): { diagnosticModel: ThermostatDiagnosticsModel } {\n return {\n diagnosticModel: new ThermostatDiagnosticsModel(\n this.store.query('dashboards/thermostat-diagnostic', {\n globalThermostatId: id_thermostat\n })\n )\n };\n }\n}\n","import { Runtime } from '../../../../enums/ThermostatDiagnosticType';\nimport BaseHvacDashboardDetailController from '../base-hvac-dashboard-detail-controller';\n\n/**\n * @classdesc\n * Controller for the HVAC Dashboard Runtime route.\n */\nexport default class DashboardsThermostatsRuntimeController extends BaseHvacDashboardDetailController {\n diagnosticType = Runtime;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'dashboards/thermostats/thermostat/runtime': DashboardsThermostatsRuntimeController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberHvacDashboardRuntime } from 'customer-site/enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * Runtime details route for the HVAC Dashboard.\n */\nexport default class DashboardsThermostatsDetailRuntimeRoute extends AdcBaseRoute {\n routeId = EmberHvacDashboardRuntime;\n}\n","import { inject as service } from '@ember/service';\nimport { EmberDefaultNotificationRedirect, NotificationEdit } from 'customer-site/enums/CustomerPageUrl';\nimport AdcBaseRoute from '../classes/base-route';\n\n/**\n * @classdesc\n *\n * A route that can be navigated to by the @adc/add-device-engine in order to redirect to the notification edit page.\n *\n */\nexport default class DefaultNotificationRedirect extends AdcBaseRoute {\n @service contextManager;\n\n /** @override */\n routeId = EmberDefaultNotificationRedirect;\n\n /**\n * Redirects to the notification edit page.\n */\n redirect() {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(NotificationEdit);\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../classes/base-route';\n\n/**\n * @classdesc\n *\n * A route for adding a new empty group.\n */\nexport default class baseNewGroupRoute extends AdcBaseRoute {\n @service store;\n @service identityManager;\n\n /**\n * The path to the template file that should be used for both the \"edit\" and new\" routes.\n *\n * @type {String}\n */\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-shared-templates\n templateName = 'enterprise/groups/new-group';\n\n /** @override **/\n model() {\n return {\n systemGroups: this.store.findAll('systems/system-group'),\n loginPermissionsCollection: this.store.findRecord(\n 'logins/login-permissions-collection',\n this.identityManager.getSelectedSystemGroupId()\n )\n };\n }\n\n /**\n * Destroys the new group record if we navigate\n * away from the page before saving.\n *\n * @override\n * @inheritdoc\n */\n async rollbackModelOnTransition() {\n const { newGroup } = this;\n\n if (newGroup?.isNew && !newGroup.isSaving) {\n newGroup.deleteRecord();\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { A } from '@ember/array';\nimport EmberController from '@ember/controller';\nimport { action, computed, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type LocationInfo from 'customer-site/enterprise/locations/helper-objects/location-info';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseLocationsSubrouteRoute from './base-locations-subroute-route';\n\ntype Group = { systemGroup?: SystemGroup; locations: LocationInfo[] };\ntype ColumnHeaders = { header: string; extraClass: string }[];\n\n/**\n * @classdesc\n * Base controller for locations subroutes\n */\nexport default abstract class BaseLocationsSubrouteController extends EmberController {\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare intl: ADCIntlService;\n\n @tracked declare model: ModelFrom;\n\n /**\n * Creates LocationInfo object as batches of locations are received.\n */\n @computed('model.locations.[]')\n get locationInfos(): LocationInfo[] {\n return this.createLocationInfos(this.model.locations ?? []);\n }\n\n @action\n resetStartIndexes(): void {\n const { selectedSystemGroup } = this.identityManager.identityModel ?? {};\n if (!selectedSystemGroup) {\n return;\n }\n\n const allGroups = get(selectedSystemGroup, 'childGroups') ?? [];\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Both selectedSystemGroup and childGroups are async, so we should await it before we query it's properties.\n allGroups.forEach((g) => {\n const { groupedLocationsStartIndexes } = this.model;\n if (groupedLocationsStartIndexes) {\n groupedLocationsStartIndexes.set(g.id.toString(), this.model.groupedLocationsBatchSize ?? 0);\n }\n });\n }\n\n /**\n * Get all child groups returned and their associated LocationSummaryInfos under them\n */\n @computed(\n 'identityManager.identityModel.selectedSystemGroup.childGroups',\n 'locationInfos',\n 'model.{groupedLocationsBatchSize,groupedLocationsStartIndexes.size,groupStates.size}'\n )\n get groups(): Group[] {\n const { selectedSystemGroup } = this.identityManager.identityModel ?? {};\n if (!selectedSystemGroup) {\n return [];\n }\n\n const allGroups = get(selectedSystemGroup, 'childGroups') ?? [];\n\n // Pull only the groups available to us\n const groupIds = A(this.locationInfos.map((locationInfo) => locationInfo.model.groupId)).uniq();\n\n // Reset our start indexes\n if (this.model.groupedLocationsStartIndexes?.size == 0) {\n this.resetStartIndexes();\n }\n\n // Create our groups and filter out fake locations to allow for empty groups to display\n return groupIds.map((groupId) => ({\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Both selectedSystemGroup and allGroups are async, so we should await it before we query it's properties.\n systemGroup: allGroups.find((g) => g.id === String(groupId)),\n locations: this.locationInfos.filter(\n (locationInfo) => locationInfo.model.groupId === groupId && locationInfo.model.description != null\n )\n }));\n }\n\n /**\n * Alias to validate if the page is being displayed in a mobile app.\n */\n @alias('identityManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Maps locations to LocationInfo objects\n */\n abstract createLocationInfos(_locations: LocationModel[]): LocationInfo[];\n\n /**\n * Info for the column headers.\n */\n abstract get columnHeadersInfo(): ColumnHeaders;\n\n /**\n * Returns the column headers for the sub route.\n */\n @computed('columnHeadersInfo')\n get columnHeaders(): Promise {\n return (async () => {\n const columnHeadersInfo = await this.columnHeadersInfo;\n\n columnHeadersInfo.unshift({\n header: this.intl.t('generic.name'),\n extraClass: 'name-column'\n });\n\n return columnHeadersInfo;\n })();\n }\n\n /**\n * Get the last group in the list of groups.\n */\n @computed('groups.length')\n get lastGroup(): Group {\n return this.groups[this.groups.length - 1];\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { set, action } from '@ember/object';\nimport { on } from '@ember/object/evented';\nimport AdcBaseRoute from '../../classes/base-route';\nimport { SingleSystemDetail } from '../../enums/LocationDataType';\n\nimport type Transition from '@ember/routing/transition';\nimport type EnterpriseLocationsController from 'customer-site/enterprise/locations/controller';\nimport type { EnterpriseLocationsRouteModel } from 'customer-site/enterprise/locations/route';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\n\ninterface BaseLocationsSubrouteRouteModel extends EnterpriseLocationsRouteModel {\n groupStates?: Map;\n locations?: LocationModel[];\n locationDataType?: number;\n filters?: Record;\n batchSize?: number;\n groupBatchSize?: number;\n updateExpandAll?: (isExpandAll: boolean, defaultExpandState: boolean | null) => void;\n groupedLocationsStartIndexes?: Map;\n groupedLocationsBatchSize?: number;\n currentFilters?: Record;\n meta?: {\n groupLocationCounts: number[];\n isMetric: boolean;\n loginCurrentDateUtc: string;\n };\n}\n\n/**\n * Gets app content wrapper\n */\nfunction getAppContentWrapper(): HTMLElement | null {\n return document.getElementById('app-content-wrapper');\n}\n\n/**\n * The names of the single-system sub-routes.\n */\nconst singleSystemRouteNames = [\n 'panel',\n 'access-points',\n 'thermostats',\n 'edit.index',\n 'manual-move-in',\n 'manage-residents'\n];\n\n/**\n * @classdesc\n * Base for locations sub routes.\n */\nexport default abstract class BaseLocationsSubrouteRoute extends AdcBaseRoute {\n declare currentModel: BaseLocationsSubrouteRouteModel;\n locationId?: string;\n\n model(): BaseLocationsSubrouteRouteModel {\n const model: BaseLocationsSubrouteRouteModel =\n this.modelFor('enterprise.locations'),\n { locationDataType, showWideFilters } = this;\n\n // Add updateExpandAll method onto model so that we can toggle the property on the controller.\n const controller = this.controllerFor('enterprise.locations');\n set(model, 'updateExpandAll', controller.updateExpandAll);\n\n // Keep the filters if either this route or the previous route was the single system detail view except when the\n // locations are loaded but not the filters. This happens when the user navigates to and from legacy Edit Locations page\n // and back to the Locations page.\n const keepFilters =\n [locationDataType, model.locationDataType].includes(SingleSystemDetail) &&\n !(model.locations !== undefined && model.filters === undefined);\n\n // Update the model properties for the current route, and load locations and filters.\n model.setViewProperties(locationDataType, showWideFilters);\n\n // If we are not in single system view or the locations haven't been loaded on the model, load locations.\n if (model.locations === undefined || locationDataType !== SingleSystemDetail) {\n // If we are in single system only load the single location.\n model.getLocationsAndFilters(keepFilters, locationDataType === SingleSystemDetail ? this.locationId : '');\n }\n\n // Set up map to store each group's expanded state\n // If we are transitioning because of search, pull the previous state.\n this.currentModel === undefined\n ? set(model, 'groupStates', model.groupStates)\n : set(model, 'groupStates', this.currentModel.groupStates);\n\n return model;\n }\n\n /**\n * The location data type we want from the server.\n */\n abstract locationDataType: number;\n\n /**\n * Whether we want to show wide or normal-width filters.\n */\n showWideFilters = false;\n\n /**\n * The saved scroll top.\n */\n @tracked\n savedScrollTop = 0;\n\n /**\n * Sets scroll top, if we have one saved.\n */\n setScrollTop = on('didTransition', () => {\n const appContentWrapper = getAppContentWrapper();\n if (appContentWrapper) {\n appContentWrapper.scrollTop = this.savedScrollTop;\n }\n });\n\n /**\n * Check that we aren't transitioning to single-system route, and save scroll top.\n */\n @action\n willTransition(transition: Transition & { targetName: string }): void {\n // Check that we aren't transitioning to single-system route.\n if (\n singleSystemRouteNames.every((route) => transition.targetName !== `enterprise.locations.location.${route}`)\n ) {\n this.send('clearFilters');\n }\n\n // Save scroll top.\n this.savedScrollTop = getAppContentWrapper()?.scrollTop ?? 0;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { or } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { isEmpty } from '@ember/utils';\nimport { Home } from '@adc/app-infrastructure/enums/NativeView';\nimport { ICON_LOCK, ICON_GARAGE, ICON_ACCESS_CONTROL } from '../../../components/icons/circles/device-status/index';\nimport {\n Buzz,\n Open as AccessControlOpen,\n Closed as AccessControlClosed,\n Unknown as AccessControlUnknown\n} from '../../../enums/CardReaderState';\nimport { EmberLocationsLocationAccessPoints } from '../../../enums/CustomerPageUrl';\nimport {\n Open as GarageDoorOpen,\n Closed as GarageDoorClosed,\n Unknown as GarageDoorUnknown\n} from '../../../enums/GarageDoorStatus';\nimport { Locked, Unlocked, Unknown as LockUnknown } from '../../../enums/LockStatus';\nimport LocationInfo from './location-info';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the summary route of the locations page.\n *\n * @class LocationAccessPointInfo\n */\nexport default class LocationAccessPointInfo extends LocationInfo {\n @service intl;\n\n constructor(model, isOccupancy = false) {\n super(model);\n this.isOccupancy = isOccupancy;\n }\n\n @tracked\n isOccupancy;\n\n /** @override */\n getNativeViewId() {\n return Home;\n }\n\n /**\n * Holds information about access points buttons that we can iterate through in the template.\n *\n * @type {Array<{items: Array, noDevices: boolean, multipleDevices: boolean, buttonText: String, buttonIcon: String}>}\n */\n @computed(\n 'model.{accessControlAccessPointDevices,garageDoors,locks}',\n 'model.summaryPageDeviceInfo.{accessControlAccessPointDevices,garageDoors,locks}',\n 'isOccupancy',\n 'translationPath'\n )\n get accessPointsButtons() {\n const infoDict = {\n accessControlAccessPointDevices: {\n enums: [AccessControlUnknown, AccessControlOpen, AccessControlClosed, Buzz],\n iconType: ICON_ACCESS_CONTROL\n },\n locks: {\n enums: [Locked, Unlocked, LockUnknown],\n iconType: ICON_LOCK\n },\n garageDoors: {\n enums: [GarageDoorClosed, GarageDoorOpen, GarageDoorUnknown],\n iconType: ICON_GARAGE\n }\n };\n\n const keys = Object.keys(infoDict);\n\n return (async () => {\n let devices;\n\n if (this.isOccupancy) {\n devices = await Promise.all([\n await this.model.accessControlAccessPointDevices,\n await this.model.locks,\n await this.model.garageDoors\n ]);\n } else {\n const summaryPageDeviceInfo = await this.model.summaryPageDeviceInfo;\n devices = await Promise.all([\n await summaryPageDeviceInfo.accessControlAccessPointDevices,\n await summaryPageDeviceInfo.locks,\n await summaryPageDeviceInfo.garageDoors\n ]);\n }\n\n return devices.reduce((accessPointsButtons, deviceList, idx) => {\n const currentKey = keys[idx],\n deviceButtons = [],\n currentEntry = infoDict[currentKey];\n\n currentEntry.enums.forEach((state) => {\n const filteredItems = deviceList.filter((device) => device.state === state);\n\n if (!isEmpty(filteredItems)) {\n const { css, stateText, description } = filteredItems[0];\n\n deviceButtons.push({\n items: filteredItems,\n multipleDevices: filteredItems.length > 1,\n buttonText: this.intl.t(`${this.translationPath}.${camelize(css + ' ' + currentKey)}`, {\n [`${css}Count`]: filteredItems.length\n }),\n buttonIcon: `${currentEntry.iconType}-${css}`,\n deviceType: currentKey,\n css,\n stateText,\n description\n });\n }\n });\n\n if (!isEmpty(deviceButtons)) {\n accessPointsButtons.push(deviceButtons);\n }\n\n return accessPointsButtons;\n }, []);\n })();\n }\n\n /**\n * Whether this location has any access points.\n *\n * @type {boolean}\n */\n @or('model.summaryPageDeviceInfo.{locks.length,garageDoors.length,accessControlAccessPointDevices.length}')\n hasAccessPoints;\n\n /**\n * Navigates to the single system sub route for access points.\n *\n * @param {Boolean} isMobileApp\n */\n @action changeAccessPointState(isMobileApp = false) {\n if (!isMobileApp) {\n return this.switchToSingleSystemSubRoute(EmberLocationsLocationAccessPoints);\n }\n }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport AccessPointDevicesCard from 'customer-site/components/dashboard-cards/devices/access-control-access-point-devices-card';\nimport GarageCard from 'customer-site/components/dashboard-cards/devices/garage-card';\nimport LockCard from 'customer-site/components/dashboard-cards/devices/lock-card';\nimport PartitionCard from 'customer-site/components/dashboard-cards/devices/partition-card';\nimport { Home } from '@adc/app-infrastructure/enums/NativeView';\nimport LocationInfo from './location-info';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the summary route of the locations page.\n *\n * @class LocationSummaryInfo\n */\nexport default class LocationDeviceAccessInfo extends LocationInfo {\n @service intl;\n\n constructor(model) {\n super(model);\n }\n\n /** @override */\n getNativeViewId() {\n return Home;\n }\n\n /**\n * Returns a promise array with all the devices we want to display.\n *\n * @type {Ember.RSVP.PromiseArray}\n */\n @computed('model.{locks,accessControlAccessPointDevices,garageDoors,partitions}')\n get devices() {\n return Promise.all(\n [\n ['accessControlAccessPointDevices', AccessPointDevicesCard],\n ['locks', LockCard],\n ['garageDoors', GarageCard],\n ['partitions', PartitionCard]\n ].map(async ([model, path]) => ({\n devicesList: await this.model.get(model),\n cardPath: path\n }))\n );\n }\n\n /**\n * Indicates there are no access points for this location.\n *\n * @type {Promise}\n */\n @computed('devices.[]')\n get hasNoDevices() {\n return (async () => {\n const devices = await this.devices;\n\n return devices.every((device) => isEmpty(device.devicesList));\n })();\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias, bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { roundFuelUsed } from 'customer-site/utils/fleet';\nimport { Home, Fleet } from '@adc/app-infrastructure/enums/NativeView';\nimport LocationInfo from './location-info';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type CarIssueItem from 'customer-site/models/fleet/car-issue-item';\nimport type TripAlertItem from 'customer-site/models/fleet/trip-alert-item';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the fleet route of the locations page.\n *\n * @class enterprise.locations.helper-objects.LocationFleetInfo\n * @extends enterprise.locations.helper-objects.LocationInfo\n */\nexport default class LocationFleetInfo extends LocationInfo {\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n @tracked\n isMetric: boolean;\n @tracked\n loginCurrentDateUtc: string;\n\n constructor(\n model: LocationModel,\n { isMetric, loginCurrentDateUtc }: { isMetric: boolean; loginCurrentDateUtc: string }\n ) {\n super(model);\n\n this.isMetric = isMetric;\n this.loginCurrentDateUtc = loginCurrentDateUtc;\n }\n\n /** @override */\n getNativeViewId(): typeof Home | typeof Fleet {\n return this.hasFleetDevices ? Fleet : Home;\n }\n\n @alias('model.allCarMonitors.length')\n declare numberOfVehicles: number;\n\n @bool('numberOfVehicles')\n declare hasFleetDevices: boolean;\n\n icon = this.model.icon;\n\n /**\n * Returns the number of vehicles driven today out of the total number of vehicles.\n */\n @computed('model.vehiclesDrivenToday', 'numberOfVehicles')\n get numberOfVehiclesDrivenTranslation(): string {\n const {\n intl,\n numberOfVehicles,\n model: { vehiclesDrivenToday }\n } = this;\n\n return intl.t('enterprise.locations.fleet.numberOfVehiclesDriven', {\n vehiclesDrivenToday,\n numberOfVehicles\n });\n }\n\n /**\n * Returns fuel used followed by gallons or liters based on context culture.\n */\n @computed('model.fuelUsedToday', 'isMetric')\n get fuelUsedTranslation(): string {\n const { intl, isMetric } = this;\n\n const fuelUsedToday = roundFuelUsed(this.model.fuelUsedToday);\n return intl.t(`enterprise.locations.fleet.fuelUsed${isMetric ? 'Metric' : 'Imperial'}`, {\n fuelUsedToday\n });\n }\n\n /**\n * Returns a list of car monitors and their alerts of the given type.\n */\n async getAlertItemsMap(\n alertItemsKey: 'carIssueItems' | 'tripAlertItems'\n ): Promise> {\n const carMonitors = await this.model.allCarMonitors,\n carMonitorsWithAlerts = (await Promise.all(\n carMonitors.map(async (carMonitor) => {\n const alertItems = await carMonitor[alertItemsKey];\n return [carMonitor.description, alertItems.toArray()];\n })\n )) as unknown as Array<[string, CarIssueItem[] | TripAlertItem[]]>;\n\n return carMonitorsWithAlerts.filter((entry) => entry[1].length);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\nimport { didCancel } from 'ember-concurrency';\nimport { LOCATION_GROUP_PREFIX } from 'customer-site/models/video/camera-group';\nimport { EnterpriseToSingleSystem } from '@adc/app-infrastructure/enums/ContextSwitchType';\nimport {\n EmberLocationsEditManualMoveIn,\n EmberLocationsEdit,\n EmberEnterpriseVideoLiveView,\n EmberLocationsManageResidents,\n EmberLocationsManageResidentsV2,\n EmberManageDevices\n} from '../../../enums/CustomerPageUrl';\nimport ContainerObject from '../../../utils/container-object';\n\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\n\n/**\n * @classdesc\n * An object for representing information about a location to display on the Locations page.\n */\nexport default abstract class LocationInfo extends ContainerObject {\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare nativeBridge: NativeBridgeService;\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare store: ServiceRegistry['store'];\n\n /**\n * The location model\n */\n @tracked model: LocationModel;\n\n constructor(model: LocationModel) {\n super(model);\n\n this.model = model;\n }\n\n /**\n * Path to the translations.\n */\n translationPath = 'enterprise.locations.helper-objects.location-info';\n\n /**\n * Gets the id of the Native View that we should transition to if in the app.\n */\n abstract getNativeViewId(): number;\n\n /**\n * Switches to single-system sub route.\n */\n @action switchToSingleSystemSubRoute(routeId: number): void {\n this.navigation.transitionToRouteId(routeId, this.model.id);\n }\n\n /**\n * Navigates to the Ember Edit Location page for the provided location.\n */\n @action editLocation(): void {\n this.switchToSingleSystemSubRoute(EmberLocationsEdit);\n }\n\n /**\n * Navigates to the Manual Move-In page for the provided location, so that the user can input tenant data and\n * perform a manual move-in for the tenant.\n */\n @action moveInTenant(): void {\n return this.switchToSingleSystemSubRoute(EmberLocationsEditManualMoveIn);\n }\n\n /**\n * If we're on the native app, try to transition to the appropriate native view.\n * If we're on the customer site, switch to the location's context.\n */\n @action selectSystemOrGroup(): void {\n const { nativeBridge, navigation, identityManager, store } = this,\n nativeViewId = this.getNativeViewId(),\n location = this.model,\n rowClickDestination = location.singleSystemDestinationPage,\n customerId = location.customerId;\n\n // If this is the mobile app, transition to the native view if the app supports it (otherwise, do nothing).\n if (identityManager.identityModel?.isMobileApp) {\n if (nativeBridge.doesSupportTransitionToNativeViewWithId(nativeViewId)) {\n nativeBridge.transitionToNativeView(nativeViewId, {\n contextSwitchType: EnterpriseToSingleSystem,\n customerId\n });\n }\n } else if (rowClickDestination === EmberEnterpriseVideoLiveView) {\n // If we are at parent group context, navigate to the subgroup context first\n if (get(identityManager.identityModel?.selectedSystemGroup, 'isParentGroup')) {\n const group = store.peekRecord('systems/available-system-item', 'group-' + location.groupId);\n\n identityManager.switchContext(group).then(() =>\n navigation.transitionToRouteId(rowClickDestination, {\n queryParams: {\n cameraGroupId: `${LOCATION_GROUP_PREFIX}${location.id}`\n }\n })\n );\n } else {\n // On the Video dashboard, we want to keep the same context when we transition to the Enterprise Video Live View page\n navigation.transitionToRouteId(rowClickDestination, {\n queryParams: { cameraGroupId: `${LOCATION_GROUP_PREFIX}${location.id}` }\n });\n }\n } else {\n identityManager\n .switchContext(location)\n .then(() => {\n if (isPresent(rowClickDestination)) {\n navigation.transitionToRouteId(rowClickDestination);\n }\n })\n .catch((e: Error) => {\n if (!didCancel(e)) {\n throw e;\n }\n });\n }\n }\n\n /*\n * Navigates to the Manage Residents page for the provided location, so that the user can input tenant data and\n * perform a manual move-in for the tenant and perform manual move outs on existing tenants.\n */\n @action manageResidents(): void {\n return this.switchToSingleSystemSubRoute(EmberLocationsManageResidents);\n }\n\n @action manageResidentsV2(): void {\n return this.switchToSingleSystemSubRoute(EmberLocationsManageResidentsV2);\n }\n\n /**\n * Navigates to the Manage Devices page for the provided location\n */\n @action manageDevices(): void {\n this.model.singleSystemDestinationPage = EmberManageDevices;\n this.selectSystemOrGroup();\n }\n}\n","import { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Home } from '@adc/app-infrastructure/enums/NativeView';\nimport { default as DropdownSelectItem, SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\nimport { Cleaned, Inspected, Occupied, Vacant } from '../../../enums/ModifiableOccupancyState';\nimport LocationInfo from './location-info';\n\n/**\n * A mapping between a modifiable state, and its name and relevant property on the occupancy-state model.\n *\n * @type {Object}\n *\n * @memberof enterprise.locations.helper-objects.LocationOccupancyInfo\n */\nexport const modifiableStateProperties = [\n [Cleaned, 'cleaned'],\n [Inspected, 'inspected'],\n [Occupied, 'occupied'],\n [Vacant, 'vacant']\n].reduce(\n (props, [key, name]) => ({\n ...props,\n [key]: {\n name,\n checkWhetherIsSelectedProperty: `${name}ModifiableStateIsChecked`\n }\n }),\n {}\n);\n\n/**\n * Creates the DropdownSelectItems for the given state type (Occupancy or Readiness).\n *\n * @param {String} statesPropertyKey\n * @param {OccupancyState} currentState\n * @returns {Array}\n *\n * @private\n * @instance\n * @memberOf enterprise.locations.helper-objects.LocationOccupancyInfo\n */\nfunction createStateOptions(statesPropertyKey, currentState) {\n const states = currentState.get(statesPropertyKey);\n\n return states.map((state) => {\n const { name, checkWhetherIsSelectedProperty } = modifiableStateProperties[state],\n isSelected = currentState[checkWhetherIsSelectedProperty];\n\n return DropdownSelectItem.create({\n name: this.intl.t(`${this.translationPath}.${name}`),\n value: state,\n state: isSelected ? SELECTED : UNSELECTED\n });\n });\n}\n\n/**\n * Creates a header DropDownSelectItem for the given state type (Occupancy or Readiness).\n *\n * @param {String} name\n * @param {Array} subitems\n * @returns {DropdownSelectItem}\n *\n * @private\n * @static\n * @memberOf enterprise.locations.helper-objects.LocationOccupancyInfo\n */\nfunction createStateOptionsHeader(name, subitems) {\n return DropdownSelectItem.create({\n name,\n isSelectable: false,\n subitems\n });\n}\n\n/**\n * Helper method for generating the DropdownSelectItems for the state changing dropdowns.\n *\n * @param {string} statusType\n * @param {object} locationOccupancyInfoInstance\n * @returns {Promise>}\n */\nasync function generateStatusChangerItems(statusType, locationOccupancyInfoInstance) {\n const currentState = await locationOccupancyInfoInstance.occupancyState;\n const options = createStateOptions.call(\n locationOccupancyInfoInstance,\n `modifiable${statusType}States`,\n currentState\n );\n const stateHeader = createStateOptionsHeader(\n locationOccupancyInfoInstance.intl.t(`${locationOccupancyInfoInstance.translationPath}.update${statusType}`),\n options\n );\n\n return stateHeader.subitems.length ? [stateHeader] : [];\n}\n\n/**\n * @classdesc\n * An object for representing the relevant information for the occupancy route of the locations page.\n *\n * @class LocationOccupancyInfo\n */\nexport default class LocationOccupancyInfo extends LocationInfo {\n @service intl;\n\n @reads('model.occupancyState')\n occupancyState;\n\n /**\n * The items to display in the readiness status changer dropdown.\n *\n * @type {Promise>}\n */\n @computed('occupancyState.currentState')\n get readinessStatusChangerItems() {\n return generateStatusChangerItems('Readiness', this);\n }\n\n /**\n * The items to display in the occupancy status changer dropdown.\n *\n * @type {Promise>}\n */\n @computed('occupancyState.currentState')\n get occupancyStatusChangerItems() {\n return generateStatusChangerItems('Occupancy', this);\n }\n\n /**\n * String representing the date range of the reservation.\n *\n * @type {Promise}\n */\n @computed('occupancyState.{checkInDate,checkOutDate}')\n get reservationDateRange() {\n return (async () => {\n const occupancyState = await this.occupancyState;\n return `${occupancyState.checkInDate} - ${occupancyState.checkOutDate}`;\n })();\n }\n\n /**\n * The reservation status and name of the current or next occupant.\n *\n * @type {Promise}\n */\n @computed('occupancyState.{statusDescription,statusAddendum}')\n get occupiedByMobileText() {\n return (async () => {\n const occupancyState = await this.occupancyState;\n return `${occupancyState.statusDescription} - ${occupancyState.statusAddendum}`;\n })();\n }\n\n /**\n * The readiness state of the location.\n *\n * @type {Promise}\n */\n @computed('occupancyState.{locationReadinessDescription,locationReadinessAddendum}')\n get locationReadinessMobileText() {\n return (async () => {\n const { locationReadinessDescription, locationReadinessAddendum } = await this.occupancyState;\n\n // The addendum can be empty, so we have to account for that.\n return locationReadinessAddendum\n ? `${locationReadinessDescription} - ${locationReadinessAddendum}`\n : locationReadinessDescription;\n })();\n }\n\n /** @override */\n getNativeViewId() {\n return Home;\n }\n}\n","import { computed } from '@ember/object';\nimport { alias, filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Home, Ambient } from '@adc/app-infrastructure/enums/NativeView';\nimport LocationInfo from './location-info';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the personal safety route of the locations page.\n */\nexport default class LocationPersonalSafetyInfo extends LocationInfo {\n @service intl;\n\n constructor(model) {\n super(model);\n }\n\n /** @override */\n getNativeViewId() {\n return this.mpersDevices.length ? Ambient : Home;\n }\n\n /**\n * The mpers devices for this location.\n */\n @alias('model.mpersDevices')\n mpersDevices;\n\n /**\n * The devices currently in emergency.\n */\n @filterBy('mpersDevices', 'emergencyEvent')\n activeEmergencyDevices;\n\n /**\n * The text to show for the number of devices with an active emergency.\n */\n @computed('activeEmergencyDevices.length', 'mpersDevices.length', 'translationPath')\n get activeEmergencyText() {\n return this.intl.t(`${this.translationPath}.numDevicesWithEmergency`, {\n devicesWithEmergency: this.activeEmergencyDevices.length,\n totalDevices: this.mpersDevices.length\n });\n }\n\n /**\n * The devices that currently have a low battery.\n */\n @computed('mpersDevices.@each.batteryDetails')\n get lowBatteryDevices() {\n return this.mpersDevices.filter((mpersDevice) => mpersDevice.batteryDetails.isLow);\n }\n\n /**\n * The text to show for the number of low battery devices.\n */\n @computed('lowBatteryDevices.length', 'translationPath')\n get lowBatteryText() {\n return this.intl.t(`${this.translationPath}.numBatteryStatus`, {\n numDevices: this.lowBatteryDevices.length\n });\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport DS from 'ember-data';\nimport { EmberLocationsLocationPanel } from '../../../enums/CustomerPageUrl';\nimport { Open as SensorOpen } from '../../../enums/SensorStatus';\nimport {\n NotSet,\n Pending,\n Complete,\n ManuallyVerifiedComplete,\n Failed as TenantTurnoverFailed\n} from '../../../enums/TenantTurnoverStatus';\nimport { getPartitionStateCSS, getPartitionStateIcon, getPartitionStateText } from '../../../utils/partitions';\nimport LocationAccessPointInfo from './location-access-point-info';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the summary route of the locations page.\n *\n * @class LocationSummaryInfo\n */\nexport default class LocationSummaryInfo extends LocationAccessPointInfo {\n @service intl;\n @service ajax;\n @service identityManager;\n\n showBusinessStatus;\n showAccessPoints;\n showPanels;\n showTenantTurnoverStatus;\n\n constructor(model, showBusinessStatus, showAccessPoints, showPanels, showTenantTurnoverStatus) {\n super(model);\n\n this.showBusinessStatus = showBusinessStatus;\n this.showAccessPoints = showAccessPoints;\n this.showPanels = showPanels;\n this.showTenantTurnoverStatus = showTenantTurnoverStatus;\n }\n\n /**\n * Stores CSS, icon, text, and description for each partition.\n *\n * @type {Ember.RSVP.PromiseArray}\n */\n @computed(\n 'model.{hubStatus,summaryPageDeviceInfo.partitions.@each.state,summaryPageDeviceInfo.sensors.@each.state}',\n 'translationPath'\n )\n get partitions() {\n const hubStatus = this.model.get('hubStatus');\n\n if (hubStatus !== 0) {\n const hubOffline = hubStatus === 1,\n hubData = {\n stateIcon: `smart-gateway${hubOffline ? '-offline' : ''}`,\n stateText: this.intl.t(`${this.translationPath}.hub${hubOffline ? 'Offline' : 'Online'}`)\n };\n\n return [\n {\n stateIcon: hubData.stateIcon,\n stateText: hubData.stateText,\n showPartitionsCardModal: false,\n hasOpenSensors: false\n }\n ];\n }\n\n return (async () => {\n const summaryPageDeviceInfo = await this.model.summaryPageDeviceInfo,\n partitions = await summaryPageDeviceInfo.partitions,\n openSensors = await summaryPageDeviceInfo.sensors;\n\n return (partitions || []).map((partition) => {\n const state = partition.get('state'),\n numPartitionSensors = openSensors.filter(\n (sensor) =>\n sensor.get('state') === SensorOpen &&\n sensor.get('isMonitoringEnabled') &&\n partition.hasMany('sensors').ids().includes(sensor.get('id'))\n ).length,\n hasOpenSensors = numPartitionSensors > 0,\n description = partition.description,\n hasActiveAlarm = partition.hasActiveAlarm;\n\n return state !== -1\n ? {\n stateCss: getPartitionStateCSS(state),\n stateIcon: getPartitionStateIcon(state),\n stateText: getPartitionStateText.call(this, state, (key) => this.intl.t(key)),\n description,\n showPartitionsCardModal: true,\n openSensorsText: htmlSafe(\n hasOpenSensors\n ? this.intl.t(`${this.translationPath}.openSensors`, {\n openSensorCount: numPartitionSensors\n })\n : ''\n ),\n hasOpenSensors,\n hasActiveAlarm\n }\n : {};\n });\n })();\n }\n\n /**\n * True if the system has more than one partition.\n *\n * @type {boolean}\n */\n @computed('partitions.length')\n get hasMultiplePartitions() {\n return (async () => {\n const partitions = await this.partitions;\n return partitions.length > 1;\n })();\n }\n\n /**\n * Whether or not to show the business events popover.\n *\n * @type {boolean}\n */\n @tracked showOpenCloseHistoryPopover = false;\n\n /**\n * Returns the open close event history for this location.\n *\n * @type {Promise<{ value: Array<{ icon: String, openCloseTime: number, openCloseInfo: String, eventHistoryQuery: String }>, metaData: { hasWarningEvent: boolean } }>}\n */\n @computed('model')\n get openCloseHistory() {\n return this.model.getOpenCloseHistory();\n }\n\n /**\n * The list of open close events for this location.\n *\n * @type {Ember.RSVP.PromiseArray}\n */\n @computed('openCloseHistory')\n get openCloseEvents() {\n return DS.PromiseArray.create({\n promise: this.openCloseHistory.then((history) => history.value)\n });\n }\n\n /**\n * The most recent open close event in the history.\n *\n * @type {Object}\n */\n @computed('openCloseEvents.[]')\n get mostRecentOpenCloseEvent() {\n return (async () => {\n const openCloseEvents = await this.openCloseEvents;\n return openCloseEvents[0];\n })();\n }\n\n /**\n * Whether or not to show the warning icon next to the business events popover caret.\n *\n * @type {boolean}\n */\n @computed('openCloseHistory')\n get showWarningIcon() {\n return this.openCloseHistory.then((history) => history.metaData.hasWarningEvent);\n }\n\n /**\n * Navigates to the panel subroute for the indicated location.\n *\n * @param {Boolean} isMobileApp\n */\n @action changeArmingState(isMobileApp = false) {\n if (!isMobileApp) {\n this.switchToSingleSystemSubRoute(EmberLocationsLocationPanel);\n }\n }\n\n /**\n * The tenant turnover status should be populate when the status indicate the location is currently in progress.\n */\n @computed('model.tenantTurnoverStatus')\n get isTenantTurnoveInProgress() {\n // Tenant turnover status that mean there is no tenant turnover in progress.\n const noDisplayStatus = [NotSet, Pending, Complete, ManuallyVerifiedComplete];\n return !noDisplayStatus.includes(this.model.tenantTurnoverStatus);\n }\n\n /**\n * Check to see if the current status for tenant turnover is failed.\n */\n @equal('model.tenantTurnoverStatus', TenantTurnoverFailed)\n isTenantTurnoverFailed;\n\n @action\n retryResidentReset() {\n this.ajax.apiRequest(`enterprise/locations/locations/retryResidentReset?customerId=${this.model.customerId}`);\n this.identityManager.refreshApplication(true, false);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Home } from '@adc/app-infrastructure/enums/NativeView';\nimport LocationInfo from './location-info';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the temperatures route of the locations page.\n *\n * @class LocationTemperaturesInfo\n * @extends Ember.Object\n * @memberOf enterprise.locations.helper-objects\n */\nexport default class LocationTemperaturesInfo extends LocationInfo {\n @service intl;\n @service envSettings;\n\n constructor(model) {\n super(model);\n }\n\n /**\n * Todays date.\n */\n @computed()\n get today() {\n return !this.envSettings.isTestEnvironment() ? new Date() : new Date(1587668663232); // \"2020-04-23T19:04:23.232Z\n }\n\n /** @override */\n getNativeViewId() {\n return Home;\n }\n\n /**\n * The sensors on this location that have an active threshold break\n *\n * @type {Array<{name: String, status: String, temperature: String, icon: String, color: String}>}\n */\n @computed('model.{commercialTemperatureSensors.[],temperatureSensorGroups.[]}')\n get issueItems() {\n return (async () => {\n const groups = await this.model.get('temperatureSensorGroups'),\n sensors = await this.model.get('commercialTemperatureSensors');\n\n return (\n sensors\n // filter out sensors that are within their bounds\n .filter((cts) => !cts.isInRange)\n // map them to objects we can use\n .map((cts) => {\n const group = groups.find((g) => g.sensors.includes(cts));\n return {\n name: cts.description,\n status: this.intl.t(\n `enterprise.locations.temperatures.${\n cts.ambientTemp < cts.lowThreshold ? 'tooCold' : 'tooWarm'\n }`\n ),\n temperature: cts.temperatureText,\n icon: group ? group.icon : 'remote-temperature',\n color: group ? group.color : 'black'\n };\n })\n );\n })();\n }\n\n @computed('model.commercialTemperatureSensors.[]')\n get outOfRangeSensorCount() {\n return (async () => {\n const sensors = await this.model.get('commercialTemperatureSensors');\n const count = sensors.filter((s) => !s.isInRange).length;\n\n return this.intl.t('enterprise.locations.temperatures.temperatureProblems', { count });\n })();\n }\n\n @computed('model.earliestActiveThresholdBreak', 'today')\n get earliestBreak() {\n const { today, intl } = this,\n aMonthAgo = new Date(new Date(today.valueOf()).setDate(today.getDate() - 30)),\n earliestBreak = this.model.get('earliestActiveThresholdBreak');\n\n if (earliestBreak) {\n const timeStamp = intl.formatDateTz(earliestBreak, {\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short'\n });\n\n // check if the break started today\n if (\n today.getFullYear() === earliestBreak.getFullYear() &&\n today.getMonth() === earliestBreak.getMonth() &&\n today.getDate() === earliestBreak.getDate()\n ) {\n return this.intl.t('enterprise.locations.temperatures.reportedToday', {\n start: timeStamp\n });\n }\n\n if (earliestBreak.valueOf() < aMonthAgo) {\n // the date was more than a month ago, so show some more generic text\n return intl.t('enterprise.locations.temperatures.reportedLastMonth');\n }\n\n // the date was sometime between 30 days ago and today, show the date and time\n return this.intl.t('enterprise.locations.temperatures.reportedAt', {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n datetime: intl.formatDate(earliestBreak, { month: 'long', day: 'numeric' }),\n start: timeStamp\n });\n }\n\n return '';\n }\n\n /**\n * Whether or not to show the temperature status popover\n *\n * @type {boolean}\n */\n @tracked showTemperatureStatusPopover = false;\n}\n","import { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { Home, Thermostats } from '@adc/app-infrastructure/enums/NativeView';\nimport { EmberLocationsLocationThermostats } from '../../../enums/CustomerPageUrl';\nimport LocationInfo from './location-info';\nimport PointCentralThermostatRow from './pointcentral-thermostat-row';\nimport ThermostatRow from './thermostat-row';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the thermostats route of the locations page.\n *\n * @class LocationThermostatsInfo\n */\nexport default class LocationThermostatsInfo extends LocationInfo {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n\n /**\n * Holds the display info for each thermostat.\n *\n * Note: if you are making a change to ThermostatRow and believe that the change should affect the PointCentral thermostats page,\n * please edit PointCentralThermostatRow as well.\n */\n @computed('identityManager.{isPointCentral,pointCentralIdentity.isPointCentralSTR}', 'model.thermostats.[]')\n get thermostatRows(): Promise {\n return (async () => {\n const isPointCentral = this.identityManager.isPointCentral,\n isPointCentralSTR = this.identityManager.pointCentralIdentity?.isPointCentralSTR,\n thermostats = await this.model.thermostats;\n\n return thermostats.map((thermostat: ThermostatModel) => {\n return isPointCentral\n ? // Do not copy this incorrect usage, please fix it.\n // @ts-expect-error The `isPointCentralSTR` property should be a boolean, but in this code it could be `undefined`.\n new PointCentralThermostatRow(thermostat, isPointCentralSTR)\n : new ThermostatRow(thermostat);\n });\n })();\n }\n\n /** @override */\n getNativeViewId(): number {\n return isEmpty(this.model.thermostats) ? Home : Thermostats;\n }\n\n /**\n * Navigates to the single system thermostats location route.\n *\n * @param {Boolean} isMobileApp\n */\n @action controlThermostat(isMobileApp = false): void {\n if (!isMobileApp) {\n this.switchToSingleSystemSubRoute(EmberLocationsLocationThermostats);\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { Home, Video } from '@adc/app-infrastructure/enums/NativeView';\nimport LocationInfo from './location-info';\n\n/**\n * @classdesc\n * An object for representing the relevant information for the video route of the locations page.\n *\n * @class enterprise.locations.helper-objects.LocationVideoInfo\n * @extends enterprise.locations.helper-objects.LocationInfo\n */\nexport default class LocationVideoInfo extends LocationInfo {\n @service intl;\n\n canSelectSingleSystem;\n rowClickDestination;\n\n constructor(model, canSelectSingleSystem, rowClickDestination) {\n super(model);\n\n this.canSelectSingleSystem = canSelectSingleSystem;\n this.rowClickDestination = rowClickDestination;\n }\n\n /**\n * Returns a list of offline devices mapped by their device info\n *\n * @param {String} deviceType\n * @type {Promise}\n */\n getIssueDevices(deviceType) {\n return (async () => {\n const issueDevices = await get(this, deviceType);\n return issueDevices\n .filterBy('isUnreachable')\n .map(({ description, deviceModel, macAddress, lastSuccessfulSupervision }) => ({\n name: description,\n deviceModel: deviceModel,\n macAddress: macAddress,\n lastDate: lastSuccessfulSupervision\n }));\n })();\n }\n\n /**\n * Returns the ratio of online devices to total devices\n *\n * @param {String} deviceType\n * @type {Promise}\n */\n getOnlineDevices(deviceType) {\n return (async () => {\n const allDevices = await get(this, deviceType);\n return this.intl.t('enterprise.locations.video.onlineDevice', {\n onlineDevices: allDevices.rejectBy('isUnreachable').length,\n totalDevices: allDevices.length\n });\n })();\n }\n\n /** @override */\n getNativeViewId() {\n return !isEmpty(this.model.allCameras) ? Video : Home;\n }\n\n /**\n * Creates a list of cameras currently experiencing issues. That list contains info about the camera device\n *\n * @type {Array}\n */\n @computed('model.allCameras.@each.isUnreachable')\n get issueCameras() {\n return this.getIssueDevices('model.allCameras');\n }\n\n /**\n * Creates a list of svrs currently experiencing issues. That list contains info about the svr device\n *\n * @type {Array}\n */\n @computed('model.allSvrs.@each.isUnreachable')\n get issueSvrs() {\n return this.getIssueDevices('model.allSvrs');\n }\n\n /**\n * Generates a list of svrs and their associated cameras\n *\n * @type {Promise}\n */\n @computed('model.allSvrs.@each.isUnreachable')\n get onlineSvrsAndCams() {\n return (async () => {\n const svrs = await this.model.get('allSvrs'),\n results = await Promise.all(\n svrs.rejectBy('isUnreachable').map(async (svr) => {\n const cameras = await svr.get('cameras');\n const cameraDescriptions = cameras.mapBy('description');\n if (cameraDescriptions.length === 0) {\n return {\n description: svr.description,\n cameras: ''\n };\n }\n\n let joiner = (acc, curr) =>\n this.intl.t('enterprise.locations.video.camerasList', { 0: acc, 1: curr });\n let unified = cameraDescriptions.slice(1).reduce(joiner, cameraDescriptions[0]);\n\n return {\n description: svr.description,\n cameras: unified\n };\n })\n );\n return results;\n })();\n }\n\n /**\n * Gives the ratio of online cameras to total cameras\n *\n * @type {String}\n */\n @computed('model.allCameras.@each.isUnreachable')\n get onlineCamerasTranslation() {\n return this.getOnlineDevices('model.allCameras');\n }\n\n /**\n * Gives the ratio of online svrs to total svrs\n *\n * @type {String}\n */\n @computed('model.allSvrs.@each.isUnreachable')\n get onlineSvrsTranslation() {\n return this.getOnlineDevices('model.allSvrs');\n }\n\n /**\n * Returns the maximum duration of recording among all recorded video devices\n *\n * @type {int}\n */\n @computed('model.{allSvrs.@each.cachedDaysOfRecordedVideo,allSdCardCameras.@each.sdCardCameraUsageInfo}')\n get totalRecordedVideoTranslation() {\n return (async () => {\n const svrs = this.model.allSvrs ? await this.model.get('allSvrs') : [],\n svrCachedInfos = await Promise.all(svrs.map(async (svr) => await svr.get('cachedDaysOfRecordedVideo'))),\n sdCardCameras = this.model.allSdCardCameras ? await this.model.get('allSdCardCameras') : [],\n sdCardCameraUsageInfos = await Promise.all(\n sdCardCameras.map(async (camera) => await camera.get('sdCardCameraUsageInfo'))\n );\n\n return this.intl.t('enterprise.locations.video.recordedDays', {\n count: Math.max(\n ...svrCachedInfos.mapBy('daysOfRecordedVideo'),\n ...sdCardCameraUsageInfos.mapBy('daysOfSdRecording'),\n 0\n )\n });\n })();\n }\n\n /**\n * Returns whether this location has an svr or SD Card Camera\n *\n * @type {boolean}\n */\n @computed('model.{allSvrs.length,allSdCardCameras.length}')\n get hasRecordedVideoDevice() {\n return (async () => {\n return this.model.allSvrs.length || this.model.allSdCardCameras.length;\n })();\n }\n\n /**\n * Returns whether the location does not contain any video devices\n *\n * @type {boolean}\n */\n @computed('model.{allCameras.length,allSvrs.length}')\n get hasNoVideoDevices() {\n return !(this.model.allCameras.length || this.model.allSvrs.length);\n }\n\n /**\n * Returns information about the recorded clips\n */\n @computed(\n 'model.{alarmTriggeredClips,cameraTriggeredClips,clipsUploaded,eventTriggeredClips,isExceedingClipRateLimit,videoQuotaClips}'\n )\n get getClipData() {\n const {\n cameraTriggeredClips,\n eventTriggeredClips,\n videoQuotaClips,\n alarmTriggeredClips = 0,\n isExceedingClipRateLimit,\n id\n } = this.model;\n\n return {\n cameraTriggeredClips,\n eventTriggeredClips,\n clipsUploaded: cameraTriggeredClips + eventTriggeredClips + alarmTriggeredClips,\n videoQuotaClips,\n alarmTriggeredClips,\n isExceedingClipRateLimit,\n id\n };\n }\n\n /**\n * Whether or not to show the video status popover\n *\n * @type {boolean}\n */\n @tracked showVideoCameraStatusPopover = false;\n\n /**\n * Whether or not to show the svr status popover\n *\n * @type {boolean}\n */\n @tracked showSvrStatusPopover = false;\n\n /**\n * Whether or not to show the recorded video status popover\n *\n * @type {boolean}\n */\n @tracked showRecordedVideoStatusPopover = false;\n}\n","import { tracked } from '@glimmer/tracking';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed } from '@ember/object';\nimport { Off } from '../../../enums/ThermostatStatus';\nimport ThermostatRow from './thermostat-row';\n\n/**\n * @classdesc\n * A class that modifies ThermostatRow for PointCentral use cases.\n *\n * @class PointCentralThermostatRow\n */\nexport default class PointCentralThermostatRow extends ThermostatRow {\n @tracked isPointCentralSTR;\n\n constructor(thermostat, isPointCentralSTR) {\n super(thermostat);\n\n this.isPointCentralSTR = isPointCentralSTR;\n }\n\n /**\n * @override\n *\n * Gets icons that may or may not be visible depending on whether the thermostat supports them. Do not show the schedules for\n * PointCentral VRM groups.\n *\n * @function\n * @returns {Array}\n */\n @computed(\n 'isPointCentralSTR',\n 'thermostat.{supportsSchedules,scheduleIconName,scheduleClass,' +\n 'supportsFanMode,supportsLocalDisplayLocking,localDisplayLockingIconName,localDisplayLockingClass}'\n )\n get optionalIcons() {\n const { thermostat } = this,\n scheduleTitle = thermostat.scheduleTitleShort,\n localDisplayLockingTitle = thermostat.getLocalDisplayLockingTitle();\n\n const icons = [\n this.isPointCentralSTR\n ? []\n : ['supportsSchedules', 'scheduleIconName', scheduleTitle, 'schedule-icon', true],\n [\n 'supportsLocalDisplayLocking',\n 'localDisplayLockingIconName',\n localDisplayLockingTitle,\n 'local-display-locking-icon',\n false\n ]\n ].filter((e) => e.length);\n\n return icons.map(([name, iconSrc, title, css, isScheduleIcon]) => {\n const [visible, icon] = getObjProperties(thermostat, name, iconSrc),\n // For the schedule icon, we want to use the thermostat's class (so that the icon is the heat or cool color) only if the thermostat\n // is on and the schedule is on; otherwise, we want to avoid using the thermostat's class so the icon will remain its default, gray.\n useThermostatClass =\n isScheduleIcon && thermostat.get('state') !== Off && thermostat.get('scheduleMode');\n\n return {\n visible,\n icon,\n title: visible ? title : '',\n css,\n useThermostatClass\n };\n });\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Auto, Cool, Heat, AuxHeat, Off } from '../../../enums/ThermostatStatus';\nimport { LOADING_STATE } from '../../../models/devices/base-device';\nimport ContainerObject from '../../../utils/container-object';\nimport { getModifiedThermostatStateText } from '../helpers/thermostats';\n\n/**\n * @classdesc\n * A class that holds the info necessary to display a thermostat's row on the locations page.\n *\n * @class ThermostatRow\n * @extends Ember.Object\n * @inner\n * @memberOf enterprise.locations.helper-objects\n */\nexport default class ThermostatRow extends ContainerObject {\n @service intl;\n\n /**\n * The Ember model for the thermostat.\n *\n * @type {models.devices.Thermostat}\n */\n @tracked thermostat;\n\n constructor(thermostat) {\n super(thermostat);\n\n this.thermostat = thermostat;\n }\n\n /**\n * Gets the icon for the current thermostat state.\n *\n * @type {String}\n */\n @computed('thermostat.activeState')\n get stateIcon() {\n return this.thermostat.getStateIcon(true);\n }\n\n /**\n * The class for the state icon (colors the icon if it's Heat or Cool).\n *\n * @type {String}\n */\n @computed('thermostat.activeState')\n get stateIconClass() {\n return this.thermostat.getStateIconClass();\n }\n\n /**\n * Gets icons that may or may not be visible depending on whether the thermostat supports them.\n *\n * Note: PointCentralThermostatRow overrides this method. If you believe your change should affect the thermostats\n * page for PointCentral, please update PointCentralThermostatRow as well.\n *\n * @type {Array}\n */\n @computed(\n 'thermostat.{supportsSchedules,scheduleIconName,scheduleClass,supportsFanMode,supportsLocalDisplayLocking,localDisplayLockingIconName,localDisplayLockingClass}'\n )\n get optionalIcons() {\n const { thermostat } = this,\n scheduleTitle = thermostat.scheduleTitleShort,\n localDisplayLockingTitle = thermostat.getLocalDisplayLockingTitle();\n\n return [\n ['supportsSchedules', 'scheduleIconName', scheduleTitle, 'schedule-icon', true],\n [\n 'supportsLocalDisplayLocking',\n 'localDisplayLockingIconName',\n localDisplayLockingTitle,\n 'local-display-locking-icon',\n false\n ]\n ].map(([name, iconSrc, title, css, isScheduleIcon]) => {\n const [visible, icon] = getObjProperties(thermostat, name, iconSrc),\n // For the schedule icon, we want to use the thermostat's class (so that the icon is the heat or cool color) only if the thermostat\n // is on and the schedule is on; otherwise, we want to avoid using the thermostat's class so the icon will remain its default, gray.\n useThermostatClass =\n isScheduleIcon && thermostat.get('state') !== Off && thermostat.get('scheduleMode');\n\n return {\n visible,\n icon,\n title: visible ? title : '',\n css,\n useThermostatClass\n };\n });\n }\n\n /**\n * Shows the cool and/or heat setpoint, depending on the current state.\n *\n * @type {String}\n */\n @computed('thermostat.activeState')\n get modifiedStateText() {\n const [heatSetpoint, coolSetpoint, state] = getObjProperties(\n this.thermostat,\n 'heatSetpoint',\n 'coolSetpoint',\n 'activeState'\n );\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return this.intl.t('generic.loading');\n }\n\n return getModifiedThermostatStateText(\n {\n [Heat]: [heatSetpoint],\n [AuxHeat]: [heatSetpoint],\n [Cool]: [coolSetpoint],\n [Auto]: [heatSetpoint, coolSetpoint]\n }[state] || [],\n (key) => this.intl.t(key)\n );\n }\n}\n","/**\n * Accepts a string of numbers separated by a comma. Returns an array of numbers.\n *\n * @param { string | null } selectedFiltersString\n * @returns { Array | undefined }\n */\nexport function toArrayOfNumber(selectedFiltersString: string | null): Array | undefined {\n return selectedFiltersString ? selectedFiltersString.split(',').map((item) => parseInt(item, 10)) : undefined;\n}\n\n/**\n * Creates the occupancy filter selection object for the backend from the filter values.\n *\n * @param { string | undefined } checkIn\n * @param { string | undefined } checkOut\n * @param { Array | undefined } occupancyStatus\n * @param { Array | undefined } cleaningStatus\n * @param { Array | undefined } inspectionStatus\n * @param { Array | undefined } propertyStatus\n * @returns\n */\nexport function getOccupancyFilterSelection(\n checkIn: Date | null,\n checkOut: Date | null,\n occupancyStatus: string | null,\n cleaningStatus: string | null,\n inspectionStatus: string | null,\n propertyStatus: string | null\n): {\n checkIn: string | undefined;\n checkOut: string | undefined;\n occupancyStatus: Array | undefined;\n cleaningStatus: Array | undefined;\n inspectionStatus: Array | undefined;\n propertyStatus: Array | undefined;\n} {\n return {\n checkIn: checkIn ? checkIn.toISOString() : undefined,\n checkOut: checkOut ? checkOut.toISOString() : undefined,\n occupancyStatus: toArrayOfNumber(occupancyStatus),\n cleaningStatus: toArrayOfNumber(cleaningStatus),\n inspectionStatus: toArrayOfNumber(inspectionStatus),\n propertyStatus: toArrayOfNumber(propertyStatus)\n };\n}\n","/**\n * Returns the setpoint or setpoint range, depending on the setpoints provided.\n *\n * @memberof enterprise.locations.helpers\n *\n * @param setpoints\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {String}\n */\nexport function getModifiedThermostatStateText(setpoints, getTranslation) {\n const { length } = setpoints,\n [heatSetpoint, coolSetpoint] = setpoints,\n fnTranslate = (key, tokens) => getTranslation(`home.thermostats.${key}`, tokens);\n\n if (!length) {\n return fnTranslate('off');\n }\n\n if (length === 1) {\n return fnTranslate('setpoint', {\n setpoint: setpoints[0]\n });\n }\n\n return fnTranslate('setpointRange', { heatSetpoint, coolSetpoint });\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport ENV from 'customer-site/config/environment';\nimport { EmberGroupSettingsActiveDirectoryEnterpriseGroupMapping } from 'customer-site/enums/CustomerPageUrl';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type { ActiveDirectorySetupIndexRouteModel } from './route.d.ts';\n\nexport async function hasLinkedADInstance(ajax: ServiceRegistry['ajax'], isEnterprise: boolean): Promise {\n return ajax\n .apiRequest(\n 'activeDirectoryUserManagement/activeDirectoryUsers/hasLinkedADInstance?isEnterprise=' + isEnterprise\n )\n .then((result: { value: string }) => {\n if (result) {\n return result.value;\n }\n\n return 'False';\n });\n}\n\n/**\n * @class EnterpriseActiveDirectorySetupController\n * @extends ActiveDirectorySetupController\n * @memberof enterprise.settings.active-directory-setup\n */\nexport default class EnterpriseActiveDirectorySetupController extends EmberController {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare browser: ServiceRegistry['browser'];\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n\n declare model: ActiveDirectorySetupIndexRouteModel;\n\n @alias('model.activeDirectoryClientIdentifier.adStatus')\n adStatus?: number;\n\n @alias('model.activeDirectoryClientIdentifier.canBeModified')\n canBeModified?: boolean;\n\n @alias('identityManager.identityModel.selectedSystemGroup')\n selectedSystemGroup?: SystemGroup;\n\n @tracked\n accessToken?: string;\n\n @tracked\n showCopyButton = false;\n\n @tracked\n selectedAuthProvider?: string;\n\n baseSCIMUrl = `${ENV.siteUrl}/web/api/scim/`;\n\n // NOTE, this needs to be updated whenever we decide to support more Auth providers\n authProviders = [\n { name: 'Entra', id: 38 },\n { name: 'Okta', id: 43 }\n ];\n\n get authProviderDropdownItems(): DropdownSelectItem[] {\n return this.authProviders.map((authProvider) => {\n return DropdownSelectItem.create({ value: String(authProvider.id), name: authProvider.name });\n });\n }\n\n @computed('adStatus')\n get hasExistingLinkAndEnabled(): boolean {\n return this.adStatus !== -1 && this.adStatus !== 3;\n }\n\n @computed('adStatus')\n get isDisabled(): boolean {\n return this.adStatus === 3;\n }\n\n @action\n editEnterpriseGroups(): void {\n this.contextManager.transitionToNativeRoute(EmberGroupSettingsActiveDirectoryEnterpriseGroupMapping);\n }\n\n @action\n generateAndViewOAuthToken(): void {\n this.ajax\n .apiRequest(\n `settings/activeDirectorySetup/activeDirectoryClientIdentifiers/getOAuth2Token/${this.selectedAuthProvider}`\n )\n .then((result: { value: string }) => {\n if (result) {\n this.accessToken = result.value;\n this.showCopyButton = true;\n } else {\n this.accessToken = this.intl.tc(this, 'generateOAuthTokenDescription');\n }\n });\n }\n\n @action\n async copyToClipboard(copySuccess: string, copyString: string, anchorSelector: string): Promise {\n const anchorElement = document.querySelector(anchorSelector),\n copySuccessString = this.intl.tc(this, copySuccess);\n\n if (!anchorElement) {\n this.notificationManager.addError(this.intl.t('generic.failedToCopyToClipboard'));\n return;\n }\n\n const result = await this.browser.universalCopyToClipboard(copySuccessString, anchorElement, copyString);\n if (result && !this.nativeBridge.doesSupportLaunchShareActionDialog) {\n this.notificationManager.addSuccess(copySuccessString);\n return;\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'enterprise/settings/active-directory-setup/index': EnterpriseActiveDirectorySetupController;\n }\n}\n","/**\n * Create a File object from a file name and data url.\n *\n * @param {string} fileName\n * @param {string} dataUrl\n * @returns\n */\nexport function dataUrlToFile(fileName: string | undefined, dataUrl: string): File | null {\n if (!fileName || !dataUrl || !isDataUrl(dataUrl)) {\n return null;\n }\n\n const data = dataUrl.split(',');\n const byteString = atob(data[1]);\n const fileType = data[0].split(':')[1].split(';')[0];\n\n const bytes = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n bytes[i] = byteString.charCodeAt(i);\n }\n\n return new File([bytes.buffer], fileName, { type: fileType });\n}\n\n/**\n * Whether the provided string is a data url.\n *\n * @param {string} str\n * @returns\n */\nexport function isDataUrl(str: string): boolean {\n return str.match('^data:') != null;\n}\n\n/**\n * Whether the provided string is a url link.\n * @param {string} str\n * @returns\n */\nexport function isUrlLink(str: string): boolean {\n return str.match('^https:') != null;\n}\n","import { isEmpty } from '@ember/utils';\nimport { LTR, STR, None } from '../../../enums/RentalPropertyLengthType';\n\n/**\n * A filter function that returns the error message that will be used in the item row template (components.enterprise.groups.item-row).\n * These error messages are for PointCentral-specific groups and check each iterated group's rental term type with the\n * current group's rental term type.\n * **The ember file using this method would need to be in Ember Octane. **\n *\n * @param {models.systems.SystemGroup} group The group that we are looking at\n * @param {number} selectedGroupTermType The rental term type of the group we are currently in\n * @param {Service} intl this.intl(We will use this to get translated strings)\n * @returns {string|*} the error message\n */\nexport function getRentalTermTypeErrorMessage(group, selectedGroupTermType, intl) {\n const { rentalTermType } = group;\n\n // If a group is being passed into the params, rentalTermType should never be undefined/null. Also if\n // selectedGroupTermType === rentalTermType, we don't need an error message. However, if the group is empty,\n // we need to return a seperate empty group error message\n if (group.isSystemlessGroup) {\n return getText(intl, 'emptyGroupError');\n } else if (isEmpty(rentalTermType) || selectedGroupTermType === rentalTermType) {\n return '';\n }\n\n const key =\n {\n // The group we are iterating over is Long Term Rental(LTR), but the selected group is Short Term Rental\n [LTR]: 'ShortTerm',\n\n // The group we are iterating over is Short Term Rental(STR), but the selected group is Long Term Rental\n [STR]: 'LongTerm'\n }[rentalTermType] || 'PointCentral'; // The group we are iterating over is not PointCentral at all\n\n return getText(intl, `not${key}GroupError`);\n}\n\n/**\n * A filter function that returns the error message that will be used in the item row template (components.enterprise.groups.item-row).\n * These error messages are to check whether the iterated group is PointCentral.\n * **The ember file using this method would need to be in Ember Octane. **\n *\n * @param {models.systems.SystemGroup} group The group that we are looking at\n * @param {Service} intl this.intl(We will use this to get translated strings)\n * @returns {string|*} the error message\n */\nexport function getIsPointCentralErrorMessage(group, intl) {\n let iteratedGroupTermType = group.rentalTermType;\n\n let errMessage = '';\n // If a group is being passed into the params, iteratedGroupTermType should never be undefined/null. The group we are\n // iterating over is not PointCentral at all. We need to also check and see if the group is empty.\n if (group.isSystemlessGroup) {\n errMessage = getText(intl, 'emptyGroupError');\n } else if (iteratedGroupTermType == null || iteratedGroupTermType === None) {\n errMessage = getText(intl, 'notPointCentralGroupError');\n }\n\n return errMessage;\n}\n\n/**\n * A filter function to check if the group is empty.\n *\n * @param {models.systems.SystemGroup} group The group that we are looking at\n * @param {Service} intl this.intl(We will use this to get translated strings)\n * @returns {string|*} the error message\n */\nexport function getIsEmptyGroupErrorMessage(group, intl) {\n let errMessage = '';\n\n // Check and see if the group is empty.\n if (group.isSystemlessGroup) {\n errMessage = getText(intl, 'emptyGroupError');\n }\n\n return errMessage;\n}\n\n/**\n * Determines if the passed-in group has a duplicate template.\n *\n * @param {models.systems.SystemGroup} group\n * @param {models.systems.SystemGroup[]} groupsWithDuplicateTemplate\n * @param {Service} intl\n */\nexport function getGroupHasDuplicateTemplate(group, groupsWithDuplicateTemplate, intl) {\n let errMessage = '';\n\n // Check and see if the group is empty.\n if (groupsWithDuplicateTemplate.any((g) => g.id.toString() === group.id)) {\n errMessage = getText(intl, 'groupHasDuplicateTemplate');\n }\n\n return errMessage;\n}\n\n/**\n * Helper function that is used to get translated PointCentral-specific error strings.\n *\n * @param {Service} intl this.intl(We will use this to get translated strings)\n * @param {String} key the key that maps to the translated error string\n * @returns {String} the error message\n */\nfunction getText(intl, key) {\n return intl.t(`generic.pointCentral.${key}`);\n}\n","import { schedule } from '@adc/ember-utils/utils/runloop';\nimport Step, { StepDisplayType } from 'customer-site/components/help-tour/step';\nimport StepContent, { getAnchorSelector } from 'customer-site/components/help-tour/step-content';\nimport Tour from 'customer-site/components/help-tour/tour';\nimport { UsersQuickFiltersTour } from 'customer-site/enums/HelpTourType';\n\n/**\n * Gets the specific text for a translation from intl.\n *\n * @param translationKey\n * @param propertyName\n * @returns {String}\n */\nfunction getTranslation(translationKey, propertyName) {\n return this.intl.t(`enterprise.users.quick-filters-tour.${translationKey}.${propertyName}`);\n}\n\n/**\n * Gets the properties for the step title and content\n *\n * @param translationKey\n * @returns {{title: String, content: String}}\n */\nfunction getStepTextTranslation(translationKey) {\n let buttonKey = 'next';\n if (translationKey === 'intro') {\n buttonKey = 'continue';\n } else if (translationKey === 'right-nav') {\n buttonKey = 'done';\n }\n\n return {\n title: getTranslation.call(this, translationKey, 'title'),\n content: getTranslation.call(this, translationKey, 'content'),\n buttons: {\n next: {\n text: this.intl.t('generic.' + buttonKey)\n }\n }\n };\n}\n\n/**\n * Create a popover step.\n *\n * @param {Object} translationKey The key that corresponds to the translation tables for this step\n * @param {String} attachTo The css class to attach the popover modal to.\n * @param {String} placement The placement to bias the modal towards.\n * @param {function} modelProps Optional parameter, properties to pass into model.\n *\n * @returns {Step}\n */\nfunction getPopoverStep(translationKey, attachTo, placement, modelProps = {}) {\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n attachTo,\n placement,\n scrollAlignToTop: false,\n cssClass: `popover-step-${attachTo.slice(1)}`,\n ...getStepTextTranslation.call(this, translationKey),\n ...modelProps\n }),\n isStepAvailable: () => {\n return document.querySelector(attachTo) !== null;\n }\n });\n}\n\n/**\n * Returns a configuration to display a modal dialog tour step.\n *\n * @param {Object} translationKey The key that corresponds to the translation tables for this step\n *\n * @returns {Step}\n *\n * @private\n * @instance\n */\nfunction getWelcomeModal(translationKey) {\n return Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n cssClss: 'light-text',\n ...getStepTextTranslation.call(this, translationKey)\n })\n });\n}\n\n/**\n * Gets an array of step for the tour\n *\n * @returns {*[]}\n */\nfunction getTourSteps() {\n return [\n getWelcomeModal.call(this, 'intro'),\n getPopoverStep.call(this, 'filters', getAnchorSelector('filter-button'), 'bottom'),\n getPopoverStep.call(this, 'right-nav', getAnchorSelector('enterprise-users-right-nav-toggle'), 'bottom')\n ];\n}\n\n/**\n * Starts the tour for the ember users page.\n */\nexport function startQuickFiltersTour() {\n const { contextManager } = this,\n { identityModel } = contextManager;\n\n const tour = Tour.create({\n name: 'tour',\n steps: getTourSteps.call(this),\n async beforeStart() {\n await schedule('afterRender', () => {});\n },\n afterEnd() {\n identityModel.markHelpTourAsCompleted(UsersQuickFiltersTour);\n }\n });\n\n return contextManager.get('helpTour').start(tour);\n}\n","enum AIDeterrenceLanguageType {\n English_US_Azure = 0,\n Spanish_Mexico_Azure = 1,\n French_Canada_Azure = 2\n}\n\nexport default AIDeterrenceLanguageType;\n","enum AIDeterrenceMessageType {\n None = -1,\n Deterrence = 0,\n ProfessionallyMonitored = 1,\n Trespassing = 2,\n NotAcceptingVisitors = 3,\n ExpectingDelivery = 4,\n CommercialPropertyClosed = 5,\n LeaveAMessage = 6,\n CommercialPropertyClosedLight = 7,\n DeterrenceWithSceneDescription = 8\n}\n\nexport default AIDeterrenceMessageType;\n","enum AIDeterrenceVoiceType {\n SteveAngry = 0,\n SteveNormal = 1,\n SteveNeutral = 2,\n SteveUnfriendly = 3,\n JohnAngry = 4,\n TomAngry = 5,\n TomNormal = 6,\n MaryNormal = 7,\n MaryUnfriendly = 8,\n KarenCheerful = 9,\n KarenNormal = 10,\n KarenUnfriendly = 11,\n AdamNormal = 12,\n KarenFriendly = 13,\n}\n\nexport default AIDeterrenceVoiceType;","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NoAIPerimeterGuard = 0;\n/**\n * @enum {number}\n */\nexport const TextToSpeechWithoutImage = 1;\n/**\n * @enum {number}\n */\nexport const TextToSpeechWithImage = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const LoiterAreaAction = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Pass = 1;\n/**\n * @enum {number}\n */\nexport const PassMarginal = 2;\n/**\n * @enum {number}\n */\nexport const Fail = 3;\n/**\n * @enum {number}\n */\nexport const Ineligible = 4;\n/**\n * @enum {number}\n */\nexport const MarginalVoltage = 5;\n/**\n * @enum {number}\n */\nexport const MarginalPower = 6;\n/**\n * @enum {number}\n */\nexport const InsufficientPower = 7;\n/**\n * @enum {number}\n */\nexport const InvalidPowerSourceType = 8;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Success = 1;\n/**\n * @enum {number}\n */\nexport const UnexpectedException = 2;\n/**\n * @enum {number}\n */\nexport const DeviceCommandFailed = 3;\n/**\n * @enum {number}\n */\nexport const NoSdCard = 4;\n/**\n * @enum {number}\n */\nexport const SdCardNotFormatted = 5;\n/**\n * @enum {number}\n */\nexport const SdCardNotCompatible = 6;\n/**\n * @enum {number}\n */\nexport const ContainFootagesFromAnotherCamera = 7;\n/**\n * @enum {number}\n */\nexport const NoEncryptionKey = 8;\n/**\n * @enum {number}\n */\nexport const IncorrectEncryptionKeyInDevice = 9;\n/**\n * @enum {number}\n */\nexport const SdCardNotMounted = 10;\n/**\n * @enum {number}\n */\nexport const IncorrectAudioParameters = 11;\n/**\n * @enum {number}\n */\nexport const ContainBadDataForAudioRecording = 12;\n/**\n * @enum {number}\n */\nexport const ContainUnexpectedFiles = 13;\n/**\n * @enum {number}\n */\nexport const SdrDataNeedsToBeMigrated = 14;\n/**\n * @enum {number}\n */\nexport const IncorrectEncryptionKeyInDb = 15;\n/**\n * @enum {number}\n */\nexport const ContainFootagesFromAnotherCustomer = 16;\n/**\n * @enum {number}\n */\nexport const SdrDatabaseMoveFailed = 17;\n/**\n * @enum {number}\n */\nexport const AccessCheckInProgress = 18;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Default = 0;\n/**\n * @enum {number}\n */\nexport const Lockdown = 1;\n/**\n * @enum {number}\n */\nexport const RestrictedAccess = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Active = 0;\n/**\n * @enum {number}\n */\nexport const Pending = 1;\n/**\n * @enum {number}\n */\nexport const Expired = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ViewAccessPlan = 0;\n/**\n * @enum {number}\n */\nexport const ModifyUsers = 1;\n/**\n * @enum {number}\n */\nexport const ModifyAccessPoints = 2;\n/**\n * @enum {number}\n */\nexport const ModifyTimetables = 3;\n/**\n * @enum {number}\n */\nexport const ModifyPlanName = 4;\n/**\n * @enum {number}\n */\nexport const ModifyUserTypes = 5;\n/**\n * @enum {number}\n */\nexport const NotSet = -1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const General = 0;\n/**\n * @enum {number}\n */\nexport const AllDeviceAccess = 1;\n/**\n * @enum {number}\n */\nexport const Personal = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Partitions = 1;\n/**\n * @enum {number}\n */\nexport const Locks = 2;\n/**\n * @enum {number}\n */\nexport const Voice = 3;\n/**\n * @enum {number}\n */\nexport const AccessPlans = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Pending = 1;\n/**\n * @enum {number}\n */\nexport const Failed = 2;\n/**\n * @enum {number}\n */\nexport const Confirmed = 3;\n/**\n * @enum {number}\n */\nexport const Duplicated = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Manager = 1;\n/**\n * @enum {number}\n */\nexport const Other = 3;\n/**\n * @enum {number}\n */\nexport const Vendor = 5;\n/**\n * @enum {number}\n */\nexport const Contractor = 6;\n/**\n * @enum {number}\n */\nexport const Guest = 7;\n/**\n * @enum {number}\n */\nexport const Employee = 8;\n/**\n * @enum {number}\n */\nexport const Owner = 9;\n/**\n * @enum {number}\n */\nexport const Cleaning = 10;\n/**\n * @enum {number}\n */\nexport const Inspection = 11;\n/**\n * @enum {number}\n */\nexport const Maintenance = 12;\n/**\n * @enum {number}\n */\nexport const Duress = 13;\n/**\n * @enum {number}\n */\nexport const OneTimeUser = 14;\n/**\n * @enum {number}\n */\nexport const MasterCodeUser = 15;\n/**\n * @enum {number}\n */\nexport const BackupCode = 17;\n/**\n * @enum {number}\n */\nexport const WorkOrder = 18;\n/**\n * @enum {number}\n */\nexport const ProspectiveResident = 19;\n/**\n * @enum {number}\n */\nexport const Dealer = 20;\n/**\n * @enum {number}\n */\nexport const Installer = 21;\n/**\n * @enum {number}\n */\nexport const StandardUser = 23;\n/**\n * @enum {number}\n */\nexport const Resident = 25;\n/**\n * @enum {number}\n */\nexport const Guard = 29;\n/**\n * @enum {number}\n */\nexport const PreloadedCodeInactive = 31;\n/**\n * @enum {number}\n */\nexport const RequestedCode = 32;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const TwoFourGHz = 1;\n/**\n * @enum {number}\n */\nexport const FiveGHz = 2;\n/**\n * @enum {number}\n */\nexport const DualBandTwoFourAndFiveGHz = 3;\n/**\n * @enum {number}\n */\nexport const Wired = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Primary = 1;\n/**\n * @enum {number}\n */\nexport const Guest = 2;\n/**\n * @enum {number}\n */\nexport const Security = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Enabled = 1;\n/**\n * @enum {number}\n */\nexport const Partial = 2;\n/**\n * @enum {number}\n */\nexport const Disabled = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Undefined = 0;\n/**\n * @enum {number}\n */\nexport const Commercial = 1;\n/**\n * @enum {number}\n */\nexport const Security = 2;\n/**\n * @enum {number}\n */\nexport const StandAloneVideo = 3;\n/**\n * @enum {number}\n */\nexport const StandAlone = 4;\n/**\n * @enum {number}\n */\nexport const Wellness = 5;\n/**\n * @enum {number}\n */\nexport const PointCentral = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Custom = 0;\n/**\n * @enum {number}\n */\nexport const ComingHome = 1;\n/**\n * @enum {number}\n */\nexport const GoingAway = 2;\n/**\n * @enum {number}\n */\nexport const Goodnight = 3;\n/**\n * @enum {number}\n */\nexport const WakeUp = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Thermostat = 2;\n/**\n * @enum {number}\n */\nexport const WaterValve = 3;\n/**\n * @enum {number}\n */\nexport const Chime = 6;\n/**\n * @enum {number}\n */\nexport const Lock = 7;\n/**\n * @enum {number}\n */\nexport const Light = 8;\n/**\n * @enum {number}\n */\nexport const Arming = 9;\n/**\n * @enum {number}\n */\nexport const AccessControl = 10;\n/**\n * @enum {number}\n */\nexport const ImageCapture = 11;\n/**\n * @enum {number}\n */\nexport const Scenes = 12;\n/**\n * @enum {number}\n */\nexport const Siren = 13;\n/**\n * @enum {number}\n */\nexport const Shades = 14;\n/**\n * @enum {number}\n */\nexport const SmartChime = 16;\n/**\n * @enum {number}\n */\nexport const WarningLight = 24;\n","enum ActivityFilterOptionsCategoryEnum {\n SecuritySystem = 0,\n Commercial = 1,\n Sensors = 2,\n ImageSensors = 3,\n Locks = 4,\n GarageDoors = 5,\n Video = 6,\n Cars = 7,\n Lights = 8,\n Thermostats = 9,\n Water = 10,\n Users = 11,\n Other = 12,\n Locations = 13,\n}\n\nexport default ActivityFilterOptionsCategoryEnum;","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Audio = 1;\n/**\n * @enum {number}\n */\nexport const DoorbellCamera = 2;\n/**\n * @enum {number}\n */\nexport const EnergyMonitoring = 3;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 4;\n/**\n * @enum {number}\n */\nexport const LightingApplianceControl = 5;\n/**\n * @enum {number}\n */\nexport const Lock = 6;\n/**\n * @enum {number}\n */\nexport const Other = 7;\n/**\n * @enum {number}\n */\nexport const Security = 8;\n/**\n * @enum {number}\n */\nexport const Thermostat = 9;\n/**\n * @enum {number}\n */\nexport const VideoCamera = 10;\n/**\n * @enum {number}\n */\nexport const ShadeAndShutter = 11;\n/**\n * @enum {number}\n */\nexport const CarConnector = 12;\n/**\n * @enum {number}\n */\nexport const GoogleNest = 14;\n/**\n * @enum {number}\n */\nexport const WaterValveMeter = 15;\n/**\n * @enum {number}\n */\nexport const Solar = 16;\n/**\n * @enum {number}\n */\nexport const Sensor = 17;\n/**\n * @enum {number}\n */\nexport const Detector = 18;\n/**\n * @enum {number}\n */\nexport const Matter = 19;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const GoogleNestThermostat = 26;\n/**\n * @enum {number}\n */\nexport const WeiserSmartcode10Touchpad = 31;\n/**\n * @enum {number}\n */\nexport const Kwikset916Touchscreen = 32;\n/**\n * @enum {number}\n */\nexport const WeiserSmartcode10Touchscreen = 33;\n/**\n * @enum {number}\n */\nexport const JascoEnbrightenSmartLEDBulb = 34;\n/**\n * @enum {number}\n */\nexport const JascoPlugInSmartSwitch = 35;\n/**\n * @enum {number}\n */\nexport const JascoPlugInSmartDimmer = 36;\n/**\n * @enum {number}\n */\nexport const YRD156Lock = 37;\n/**\n * @enum {number}\n */\nexport const Lutron = 38;\n/**\n * @enum {number}\n */\nexport const Kwikset910Deadbolt = 39;\n/**\n * @enum {number}\n */\nexport const YaleYRL210KeypadLever = 44;\n/**\n * @enum {number}\n */\nexport const ADCS2000RemoteTemperatureSensor = 47;\n/**\n * @enum {number}\n */\nexport const SalusSmartPlug = 48;\n/**\n * @enum {number}\n */\nexport const PhilioPan08RollerShutterController = 49;\n/**\n * @enum {number}\n */\nexport const ClimaxSCM5ZWRollerShutterController = 50;\n/**\n * @enum {number}\n */\nexport const ClimaxPowerSwitchPSM29ZW = 51;\n/**\n * @enum {number}\n */\nexport const ClimaxPowerSwitchPSS29ZW = 52;\n/**\n * @enum {number}\n */\nexport const DanaLockV3 = 53;\n/**\n * @enum {number}\n */\nexport const AeotecSmartDimmer6 = 54;\n/**\n * @enum {number}\n */\nexport const AeotecSmartSwitch6 = 55;\n/**\n * @enum {number}\n */\nexport const AeotecNanoDimmerZW111 = 56;\n/**\n * @enum {number}\n */\nexport const AeotecNanoSwitchZW116 = 57;\n/**\n * @enum {number}\n */\nexport const ADCT3000SmartThermostat = 58;\n/**\n * @enum {number}\n */\nexport const LUXKONOzwThermostat = 61;\n/**\n * @enum {number}\n */\nexport const PhilioPan03MeterSwitch = 62;\n/**\n * @enum {number}\n */\nexport const GenieAladdinConnect = 63;\n/**\n * @enum {number}\n */\nexport const Deako = 65;\n/**\n * @enum {number}\n */\nexport const Tuya = 66;\n/**\n * @enum {number}\n */\nexport const Everspring500sSwitch = 67;\n/**\n * @enum {number}\n */\nexport const JascoInWallToggleSwitch = 68;\n/**\n * @enum {number}\n */\nexport const JascoInWallToggleDimmer = 69;\n/**\n * @enum {number}\n */\nexport const JascoInWallPaddleSwitch = 70;\n/**\n * @enum {number}\n */\nexport const JascoInWallPaddleDimmer = 71;\n/**\n * @enum {number}\n */\nexport const EcobeeThermostats = 74;\n/**\n * @enum {number}\n */\nexport const YaleAssureLockForAndersen = 75;\n/**\n * @enum {number}\n */\nexport const GoogleNestDevice = 77;\n/**\n * @enum {number}\n */\nexport const LevitonDimmer = 78;\n/**\n * @enum {number}\n */\nexport const LevitonSwitch = 79;\n/**\n * @enum {number}\n */\nexport const KwiksetHomeConnect620 = 80;\n/**\n * @enum {number}\n */\nexport const Jasco52190 = 81;\n/**\n * @enum {number}\n */\nexport const HavenConnect = 86;\n/**\n * @enum {number}\n */\nexport const Somfy = 87;\n/**\n * @enum {number}\n */\nexport const STZ1_2GIG = 88;\n/**\n * @enum {number}\n */\nexport const Linear_GD00Z8GC = 89;\n/**\n * @enum {number}\n */\nexport const ClimaxGDC3 = 90;\n/**\n * @enum {number}\n */\nexport const SchlageJBE109 = 91;\n/**\n * @enum {number}\n */\nexport const SchlageJFE109 = 92;\n/**\n * @enum {number}\n */\nexport const ClimaxPSS29ZW_JP = 93;\n/**\n * @enum {number}\n */\nexport const ClimaxPSM29ZW_JP = 94;\n/**\n * @enum {number}\n */\nexport const iDevices = 95;\n/**\n * @enum {number}\n */\nexport const Baldwin8252_8285 = 97;\n/**\n * @enum {number}\n */\nexport const JascoOutdoorPlugInSmartSwitch = 98;\n/**\n * @enum {number}\n */\nexport const JascoInWallSmartOutlet = 99;\n/**\n * @enum {number}\n */\nexport const ZipatoMultiColorBulb2 = 100;\n/**\n * @enum {number}\n */\nexport const HankMultiColorBulb = 101;\n/**\n * @enum {number}\n */\nexport const JascoProSeriesBulb64637 = 102;\n/**\n * @enum {number}\n */\nexport const ADCSmartNoiseMonitor = 103;\n/**\n * @enum {number}\n */\nexport const Phyn = 105;\n/**\n * @enum {number}\n */\nexport const Moen = 106;\n/**\n * @enum {number}\n */\nexport const WaterDragon = 107;\n/**\n * @enum {number}\n */\nexport const Orro = 110;\n/**\n * @enum {number}\n */\nexport const PhynKohler = 112;\n/**\n * @enum {number}\n */\nexport const Sensibo = 113;\n/**\n * @enum {number}\n */\nexport const Enphase = 114;\n/**\n * @enum {number}\n */\nexport const AlfredML2 = 115;\n/**\n * @enum {number}\n */\nexport const Nami = 116;\n/**\n * @enum {number}\n */\nexport const WeiserHomeConnect620 = 117;\n/**\n * @enum {number}\n */\nexport const ClimaxMotionSensorIRP16ZW = 118;\n/**\n * @enum {number}\n */\nexport const ClimaxWaterensorWLS23ZW = 119;\n/**\n * @enum {number}\n */\nexport const ClimaxDoorWindowContactSensorDC23ZW = 120;\n/**\n * @enum {number}\n */\nexport const SomfyEU = 122;\n/**\n * @enum {number}\n */\nexport const MiwaDTRS = 123;\n/**\n * @enum {number}\n */\nexport const MiwaPiACKII = 124;\n/**\n * @enum {number}\n */\nexport const YaleYRD410 = 126;\n/**\n * @enum {number}\n */\nexport const YaleYRD420 = 127;\n/**\n * @enum {number}\n */\nexport const YaleYRD430 = 128;\n/**\n * @enum {number}\n */\nexport const YaleYRD450 = 129;\n/**\n * @enum {number}\n */\nexport const InovelliLZW42Bulb = 130;\n/**\n * @enum {number}\n */\nexport const InovelliLZW30Switch = 131;\n/**\n * @enum {number}\n */\nexport const InovelliLZW31Dimmer = 132;\n/**\n * @enum {number}\n */\nexport const SengledV11N13_US = 133;\n/**\n * @enum {number}\n */\nexport const GoControlSwitchWS15Z51 = 134;\n/**\n * @enum {number}\n */\nexport const GoControlDimmerWD500Z51 = 135;\n/**\n * @enum {number}\n */\nexport const LinearOutletWO15Z1 = 136;\n/**\n * @enum {number}\n */\nexport const LocklyPGD728ZPU = 137;\n/**\n * @enum {number}\n */\nexport const KaadasKA211 = 139;\n/**\n * @enum {number}\n */\nexport const KaadasKA200 = 140;\n/**\n * @enum {number}\n */\nexport const KaadasKA201 = 141;\n/**\n * @enum {number}\n */\nexport const GenericSecuritySensor = 1003;\n/**\n * @enum {number}\n */\nexport const GenericMatterDevice = 1004;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Open = 0;\n/**\n * @enum {number}\n */\nexport const Wep = 1;\n/**\n * @enum {number}\n */\nexport const Wpa = 2;\n/**\n * @enum {number}\n */\nexport const Wpa2Personal = 3;\n/**\n * @enum {number}\n */\nexport const Wpa2Enterprise = 4;\n/**\n * @enum {number}\n */\nexport const Wpa3Personal = 5;\n/**\n * @enum {number}\n */\nexport const Unknown = 255;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const IncludeAlarmsEvent = 1;\n/**\n * @enum {number}\n */\nexport const IncludeLowBatteryEvent = 2;\n/**\n * @enum {number}\n */\nexport const IncludeLostPowerEvent = 3;\n/**\n * @enum {number}\n */\nexport const IncludeTamperEvent = 4;\n/**\n * @enum {number}\n */\nexport const IncludeWaterAlertEvent = 5;\n/**\n * @enum {number}\n */\nexport const IncludeCameraUnresponsiveEvent = 6;\n/**\n * @enum {number}\n */\nexport const IncludeGeneralFailureEvent = 7;\n/**\n * @enum {number}\n */\nexport const IncludeGunshotDetectedEvent = 8;\n/**\n * @enum {number}\n */\nexport const IncludeSimulatedGunshotDetectedEvent = 9;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Intel = 0;\n/**\n * @enum {number}\n */\nexport const ARM = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const BypassSensors = 0;\n/**\n * @enum {number}\n */\nexport const NoEntryDelay = 1;\n/**\n * @enum {number}\n */\nexport const SilentArming = 2;\n/**\n * @enum {number}\n */\nexport const NightArming = 3;\n/**\n * @enum {number}\n */\nexport const SelectivelyBypassSensors = 4;\n/**\n * @enum {number}\n */\nexport const ForceArm = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Disarmed = 1;\n/**\n * @enum {number}\n */\nexport const ArmedStay = 2;\n/**\n * @enum {number}\n */\nexport const ArmedAway = 3;\n/**\n * @enum {number}\n */\nexport const ArmedNight = 4;\n/**\n * @enum {number}\n */\nexport const Hidden = 5;\n","\n\n/**\n * Enums for the Appearance/Attribute Search Feature\n */\n\nexport enum AttributeTypeEnum {\n Person = 1,\n Vehicle = 2\n}\n\nexport enum ClassifierTypeEnum {\n Glasses = 1,\n Mask = 2,\n OutfitTop = 3,\n OutfitBottom = 4,\n VehicleType = 5,\n VehicleColor = 6\n}\n\nexport enum VehicleTypeEnum {\n Car = 1,\n Pickup = 2,\n Van = 3,\n Suv = 4,\n Truck = 5,\n Bus = 6\n}\n\nexport enum GlassesEnum {\n Glasses = 1,\n NoGlasses = 2,\n Sunglasses = 3\n}\n\nexport enum ColorEnum {\n White = 1,\n Black = 2,\n Gray = 3,\n Red = 4,\n Blue = 5,\n Green = 6,\n Yellow = 7,\n Orange = 8,\n Gold = 9,\n Brown = 10\n}","enum AvailableSystemItemsFilteringEnum {\n AllItems = 0,\n Reports = 1,\n APUMUsers = 2,\n AccessPoints = 3\n}\n\nexport default AvailableSystemItemsFilteringEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const High = 4;\n/**\n * @enum {number}\n */\nexport const Medium = 2;\n/**\n * @enum {number}\n */\nexport const Low = 1;\n/**\n * @enum {number}\n */\nexport const Critical = 0;\n","enum BrowserEnum {\n Unknown = 0,\n Chrome = 1,\n Edge = 2,\n Safari = 3,\n Firefox = 4,\n}\n\nexport default BrowserEnum;\n","enum BuildVersionInfoEnum {\n Seadragon = 1140\n}\n\nexport default BuildVersionInfoEnum;\n","/**\n * @module\n */\n/**\n * @enum {string}\n */\nexport const Priority = 'Priority';\n","/**\n * @module\n */\n/**\n * @enum {string}\n */\nexport const VideoDevicePrimaryLink = 'VideoDevicePrimaryLink';\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SnapshotsRequired = 1;\n/**\n * @enum {number}\n */\nexport const ReadyForCalibration = 2;\n/**\n * @enum {number}\n */\nexport const FeedbackRequired = 3;\n/**\n * @enum {number}\n */\nexport const Calibrated = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Http = 1;\n/**\n * @enum {number}\n */\nexport const Rtsp = 3;\n/**\n * @enum {number}\n */\nexport const Tcp = 4;\n/**\n * @enum {number}\n */\nexport const Udp = 6;\n/**\n * @enum {number}\n */\nexport const TcpUdp = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Normal = 0;\n/**\n * @enum {number}\n */\nexport const AllCameras = 1;\n/**\n * @enum {number}\n */\nexport const Location = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Invalid = 0;\n/**\n * @enum {number}\n */\nexport const Pending = 1;\n/**\n * @enum {number}\n */\nexport const Activated = 2;\n/**\n * @enum {number}\n */\nexport const Cancelling = 3;\n/**\n * @enum {number}\n */\nexport const Cancelled = 4;\n/**\n * @enum {number}\n */\nexport const Inactive = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Open = 1;\n/**\n * @enum {number}\n */\nexport const Closed = 2;\n/**\n * @enum {number}\n */\nexport const Buzz = 3;\n/**\n * @enum {number}\n */\nexport const Hidden = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Hero = 1;\n/**\n * @enum {number}\n */\nexport const Partitions = 2;\n/**\n * @enum {number}\n */\nexport const Sensors = 3;\n/**\n * @enum {number}\n */\nexport const RecentActivity = 4;\n/**\n * @enum {number}\n */\nexport const ImageSensors = 5;\n/**\n * @enum {number}\n */\nexport const GarageDoors = 6;\n/**\n * @enum {number}\n */\nexport const Locks = 7;\n/**\n * @enum {number}\n */\nexport const Lights = 8;\n/**\n * @enum {number}\n */\nexport const Thermostats = 9;\n/**\n * @enum {number}\n */\nexport const RemoteTemperatureSensors = 10;\n/**\n * @enum {number}\n */\nexport const WaterValves = 11;\n/**\n * @enum {number}\n */\nexport const WaterSensors = 12;\n/**\n * @enum {number}\n */\nexport const SumpPumps = 13;\n/**\n * @enum {number}\n */\nexport const WaterMeters = 14;\n/**\n * @enum {number}\n */\nexport const AccessControlAccessPointDevices = 15;\n/**\n * @enum {number}\n */\nexport const UnconfiguredBoilers = 16;\n/**\n * @enum {number}\n */\nexport const Wellness = 17;\n/**\n * @enum {number}\n */\nexport const LiveView = 18;\n/**\n * @enum {number}\n */\nexport const X10Lights = 19;\n/**\n * @enum {number}\n */\nexport const FeatureSuggestions = 20;\n/**\n * @enum {number}\n */\nexport const Shades = 21;\n/**\n * @enum {number}\n */\nexport const CommercialTemperatures = 24;\n/**\n * @enum {number}\n */\nexport const Gates = 25;\n/**\n * @enum {number}\n */\nexport const Switches = 26;\n/**\n * @enum {number}\n */\nexport const BusinessActivityAnalytics = 27;\n/**\n * @enum {number}\n */\nexport const Wifi = 29;\n/**\n * @enum {number}\n */\nexport const NoiseSensors = 30;\n/**\n * @enum {number}\n */\nexport const CommercialFleet = 31;\n/**\n * @enum {number}\n */\nexport const MpersDevices = 33;\n/**\n * @enum {number}\n */\nexport const AccessControlElevatorDevices = 34;\n/**\n * @enum {number}\n */\nexport const FogDevices = 36;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Off = 0;\n/**\n * @enum {number}\n */\nexport const Low = 1;\n/**\n * @enum {number}\n */\nexport const Medium = 2;\n/**\n * @enum {number}\n */\nexport const High = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Human = 0;\n/**\n * @enum {number}\n */\nexport const Vehicle = 1;\n/**\n * @enum {number}\n */\nexport const Unknown = 2;\n/**\n * @enum {number}\n */\nexport const Anything = 3;\n/**\n * @enum {number}\n */\nexport const Parcel = 4;\n/**\n * @enum {number}\n */\nexport const Animal = 101;\n/**\n * @enum {number}\n */\nexport const DeliveryVehicle = 102;\n/**\n * @enum {number}\n */\nexport const FamiliarVehicle = 103;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Human = 0;\n/**\n * @enum {number}\n */\nexport const Vehicle = 1;\n/**\n * @enum {number}\n */\nexport const Unknown = 2;\n/**\n * @enum {number}\n */\nexport const Anything = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Content = 1;\n/**\n * @enum {number}\n */\nexport const Error = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const SVR = 1;\n/**\n * @enum {number}\n */\nexport const SDCard = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Reduced = 1;\n/**\n * @enum {number}\n */\nexport const Standard = 2;\n/**\n * @enum {number}\n */\nexport const Highest = 3;\n/**\n * @enum {number}\n */\nexport const Fair = 4;\n/**\n * @enum {number}\n */\nexport const Normal = 5;\n/**\n * @enum {number}\n */\nexport const Excellent = 6;\n/**\n * @enum {number}\n */\nexport const Good = 7;\n/**\n * @enum {number}\n */\nexport const Better = 8;\n/**\n * @enum {number}\n */\nexport const Best = 9;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Low = 1;\n/**\n * @enum {number}\n */\nexport const LowDefault = 2;\n/**\n * @enum {number}\n */\nexport const StandardDefinition = 3;\n/**\n * @enum {number}\n */\nexport const Medium = 4;\n/**\n * @enum {number}\n */\nexport const MediumDefault = 5;\n/**\n * @enum {number}\n */\nexport const Hd = 6;\n/**\n * @enum {number}\n */\nexport const High = 7;\n/**\n * @enum {number}\n */\nexport const FullHd = 8;\n/**\n * @enum {number}\n */\nexport const FourMp = 9;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Manual = 0;\n/**\n * @enum {number}\n */\nexport const Weather = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Completed = 0;\n/**\n * @enum {number}\n */\nexport const Pending = 1;\n/**\n * @enum {number}\n */\nexport const Failed = 2;\n/**\n * @enum {number}\n */\nexport const Cancelled = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const AccessPoint = 1;\n/**\n * @enum {number}\n */\nexport const Camera = 2;\n/**\n * @enum {number}\n */\nexport const Bridge = 3;\n/**\n * @enum {number}\n */\nexport const Doorbell = 4;\n/**\n * @enum {number}\n */\nexport const AccessController = 5;\n/**\n * @enum {number}\n */\nexport const Svr = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Connected = 1;\n/**\n * @enum {number}\n */\nexport const Disconnected = 2;\n/**\n * @enum {number}\n */\nexport const Initializing = 3;\n/**\n * @enum {number}\n */\nexport const Paused = 4;\n","/**\n * @module ConnectionStatus An enum for wireless connection status.\n */\n\nenum ConnectionStatus {\n NotConnected = 0,\n Remembered = 1,\n Connected = 2\n}\n\nexport default ConnectionStatus;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const LoginPrimary = 1;\n/**\n * @enum {number}\n */\nexport const TwoFactorAuthentication = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Location = 8;\n/**\n * @enum {number}\n */\nexport const LicensePlate = 17;\n/**\n * @enum {number}\n */\nexport const CompanyName = 23;\n/**\n * @enum {number}\n */\nexport const Pets = 24;\n/**\n * @enum {number}\n */\nexport const PointCentralUserType = 33;\n/**\n * @enum {number}\n */\nexport const Manager = 34;\n/**\n * @enum {number}\n */\nexport const LostPhysicalAccessDateUtc = 35;\n/**\n * @enum {number}\n */\nexport const OptOutOfExpiredUserRemoval = 36;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const General = 0;\n/**\n * @enum {number}\n */\nexport const Duress = 1;\n/**\n * @enum {number}\n */\nexport const Temporary = 2;\n/**\n * @enum {number}\n */\nexport const OneTimeUser = 3;\n/**\n * @enum {number}\n */\nexport const MasterCodeUser = 4;\n/**\n * @enum {number}\n */\nexport const AllAccessUser = 6;\n/**\n * @enum {number}\n */\nexport const ShellContact = 7;\n/**\n * @enum {number}\n */\nexport const Unknown = -1;\n","export enum ContentBlockSubtype {\n Default = 0,\n TitleSectionHeaderText = 100,\n ParagraphSectionBodyText = 200,\n BulletedListKeyFeatures = 300,\n ImageProductStock = 400,\n ImageSectionBanner = 401,\n ImageSection = 402,\n}\n\nexport default ContentBlockSubtype;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Title = 1;\n/**\n * @enum {number}\n */\nexport const Paragraph = 2;\n/**\n * @enum {number}\n */\nexport const BulletedList = 3;\n/**\n * @enum {number}\n */\nexport const Image = 4;\n/**\n * @enum {number}\n */\nexport const Video = 5;\n/**\n * @enum {number}\n */\nexport const Feature = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Feature = 1;\n/**\n * @enum {number}\n */\nexport const Upsell = 2;\n/**\n * @enum {number}\n */\nexport const Series = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Open = 1;\n/**\n * @enum {number}\n */\nexport const Closed = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Generic = 225;\n/**\n * @enum {number}\n */\nexport const Light = 249;\n/**\n * @enum {number}\n */\nexport const Lock = 251;\n/**\n * @enum {number}\n */\nexport const Siren = 257;\n/**\n * @enum {number}\n */\nexport const Gate = 258;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const USA = 1;\n/**\n * @enum {number}\n */\nexport const Canada = 2;\n/**\n * @enum {number}\n */\nexport const Brazil = 3;\n/**\n * @enum {number}\n */\nexport const Mexico = 4;\n/**\n * @enum {number}\n */\nexport const Chile = 6;\n/**\n * @enum {number}\n */\nexport const Argentina = 7;\n/**\n * @enum {number}\n */\nexport const Colombia = 8;\n/**\n * @enum {number}\n */\nexport const NewZealand = 9;\n/**\n * @enum {number}\n */\nexport const Turkey = 10;\n/**\n * @enum {number}\n */\nexport const Venezuela = 14;\n/**\n * @enum {number}\n */\nexport const Ecuador = 16;\n/**\n * @enum {number}\n */\nexport const Peru = 18;\n/**\n * @enum {number}\n */\nexport const Australia = 21;\n/**\n * @enum {number}\n */\nexport const Spain = 27;\n/**\n * @enum {number}\n */\nexport const Portugal = 28;\n/**\n * @enum {number}\n */\nexport const Netherlands = 42;\n/**\n * @enum {number}\n */\nexport const Sweden = 44;\n/**\n * @enum {number}\n */\nexport const Fiji = 48;\n/**\n * @enum {number}\n */\nexport const Ireland = 49;\n/**\n * @enum {number}\n */\nexport const Norway = 52;\n/**\n * @enum {number}\n */\nexport const France = 55;\n/**\n * @enum {number}\n */\nexport const Israel = 62;\n/**\n * @enum {number}\n */\nexport const Dominica = 71;\n/**\n * @enum {number}\n */\nexport const Finland = 73;\n/**\n * @enum {number}\n */\nexport const Indonesia = 77;\n/**\n * @enum {number}\n */\nexport const Italy = 123;\n/**\n * @enum {number}\n */\nexport const Guam = 203;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Visa = 2;\n/**\n * @enum {number}\n */\nexport const Discover = 4;\n/**\n * @enum {number}\n */\nexport const JCB = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const English_US = 1;\n/**\n * @enum {number}\n */\nexport const French_Canada = 2;\n/**\n * @enum {number}\n */\nexport const Spanish_US = 3;\n/**\n * @enum {number}\n */\nexport const Portuguese_Brazil = 4;\n/**\n * @enum {number}\n */\nexport const Turkish_Turkey = 16;\n/**\n * @enum {number}\n */\nexport const DutchNetherlands = 21;\n/**\n * @enum {number}\n */\nexport const HebrewIsrael = 28;\n/**\n * @enum {number}\n */\nexport const Localization = 33;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Contacts = 1;\n/**\n * @enum {number}\n */\nexport const Motion = 2;\n/**\n * @enum {number}\n */\nexport const SmokeHeat = 3;\n/**\n * @enum {number}\n */\nexport const ControlPanel = 5;\n/**\n * @enum {number}\n */\nexport const OtherDevices = 6;\n/**\n * @enum {number}\n */\nexport const ZWaveLocks = 8;\n/**\n * @enum {number}\n */\nexport const Bedroom = 9;\n/**\n * @enum {number}\n */\nexport const Bathroom = 10;\n/**\n * @enum {number}\n */\nexport const Kitchen = 12;\n/**\n * @enum {number}\n */\nexport const Occupancy = 14;\n/**\n * @enum {number}\n */\nexport const Water = 15;\n/**\n * @enum {number}\n */\nexport const Panic = 16;\n/**\n * @enum {number}\n */\nexport const Thermostat = 18;\n/**\n * @enum {number}\n */\nexport const RemoteTemperatureSensor = 19;\n/**\n * @enum {number}\n */\nexport const Video = 20;\n/**\n * @enum {number}\n */\nexport const ImageSensor = 21;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 25;\n/**\n * @enum {number}\n */\nexport const Repeater = 26;\n/**\n * @enum {number}\n */\nexport const AccessControlDoor = 27;\n/**\n * @enum {number}\n */\nexport const GeoDevices = 28;\n/**\n * @enum {number}\n */\nexport const Gate = 29;\n/**\n * @enum {number}\n */\nexport const Shades = 30;\n/**\n * @enum {number}\n */\nexport const Car = 31;\n/**\n * @enum {number}\n */\nexport const Noise = 32;\n/**\n * @enum {number}\n */\nexport const GunshotSensor = 33;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Alarms = 1;\n/**\n * @enum {number}\n */\nexport const ArmDisarm = 2;\n/**\n * @enum {number}\n */\nexport const Logins = 5;\n/**\n * @enum {number}\n */\nexport const SensorActivity = 7;\n/**\n * @enum {number}\n */\nexport const VideoClips = 8;\n/**\n * @enum {number}\n */\nexport const CameraNotResponding = 9;\n/**\n * @enum {number}\n */\nexport const ImageEvents = 10;\n/**\n * @enum {number}\n */\nexport const Battery = 12;\n/**\n * @enum {number}\n */\nexport const LostPower = 14;\n/**\n * @enum {number}\n */\nexport const Tamper = 15;\n/**\n * @enum {number}\n */\nexport const Bypassed = 16;\n/**\n * @enum {number}\n */\nexport const DoorbellCall = 21;\n/**\n * @enum {number}\n */\nexport const Other = 24;\n/**\n * @enum {number}\n */\nexport const Backup = 25;\n/**\n * @enum {number}\n */\nexport const DoorAccessed = 30;\n/**\n * @enum {number}\n */\nexport const DoorHeldOpen = 32;\n/**\n * @enum {number}\n */\nexport const DoorForcedOpen = 33;\n/**\n * @enum {number}\n */\nexport const LocationOpenClose = 35;\n/**\n * @enum {number}\n */\nexport const BusinessHourWarnings = 36;\n/**\n * @enum {number}\n */\nexport const OpenedOnTime = 37;\n/**\n * @enum {number}\n */\nexport const ClosedOnTime = 38;\n/**\n * @enum {number}\n */\nexport const ClosedUnexpectedly = 40;\n/**\n * @enum {number}\n */\nexport const WellnessActivity = 43;\n/**\n * @enum {number}\n */\nexport const PlaybackPagesEventHistoryItems = 47;\n/**\n * @enum {number}\n */\nexport const AccessHistoryReport = 49;\n/**\n * @enum {number}\n */\nexport const Failures = 52;\n/**\n * @enum {number}\n */\nexport const PackageAlerts = 60;\n","enum CustomerKnowledgeBase {\n HomePage = 'https://answers.alarm.com',\n LinkMultipleAccountSystems = 'https://answers.alarm.com/Customer/Website_and_App/System_Management/System_Usage/How_can_multiple_account_systems_be_linked',\n VideoClipsChangeNumberOfDayBeforeDeletion = 'https://answers.alarm.com/Customer/Website_and_App/Video/Saved_Video/Change_the_number_of_days_to_keep_video_clips_before_deletion',\n VideoAnalyticsClipOtherClassification = 'https://answers.alarm.com/Subscriber/Website_and_App/Video/Recording_Video/How_does_a_Video_Analytics_clip_get_classified_as_Other',\n CommericalEnableConfigureBusinessHours = 'https://answers.alarm.com/Customer/Website_and_App/Commercial/Commercial_Management/Enable%2F%2Fconfigure_business_hours',\n PushAndTextNotificationsDifferences = 'https://answers.alarm.com/Subscriber/Website_and_App/System_Management/Notifications/What_are_the_differences_between_push_text_and_email_notifications',\n VideoClipStorageLimitReached = 'https://answers.alarm.com/Subscriber/Website_and_App/Video/Saved_Video/What_happens_when_an_account%27s_video_clip_online_storage_limit_is_reached%3F',\n ChangeCameraAnalyticsSettings = \"https://answers.alarm.com/Subscriber/Website_and_App/Video/Video_Settings/Change_a_camera's_Video_Analytics_settings\",\n ChangeCamaeraVideoDetectionSettings = \"https://answers.alarm.com/Customer/Website_and_App/Video/Video_Settings/Change_a_camera's_Video_Motion_Detection_settings\",\n WebRTCAdvancedTroubleshooting = 'https://answers.alarm.com/Subscriber/Website_and_App/Video/Live_Video/What_is_enable_advanced_networking_and_why_does_it_need_microphone_permission%3F',\n WebRTCStreamingEndToEnd = 'https://answers.alarm.com/Partner/Installation_and_Troubleshooting/Video_Devices/General_Video_Information/What_is_end-to-end_video_streaming',\n CreateParentGroup = 'https://answers.alarm.com/Customer/Website_and_App/Commercial/Multi-Location_Management/Create_a_parent_group',\n VideoSignalStrength = 'https://answers.alarm.com/Customer/Website_and_App/Video/Video_Settings/What_is_video_device_wireless_signal_strength',\n ProtectVideoClip = 'https://answers.alarm.com/Subscriber/Website_and_App/Video/Saved_Video/Protect_a_video_clip',\n ConfigureVideoAnalyticsRule = 'https://answers.alarm.com/Customer/Website_and_App/Video/Video_Settings/Configure_a_Video_Analytics_rule',\n ThirdPartyCamerasFeaturesBeta = 'https://answers.alarm.com/beta/What_features_are_supported_for_third-party_cameras%3F',\n DeviceStatusHistory = 'https://answers.alarm.com/Customer/Website_and_App/Video/Video_Settings/How_do_I_use_the_Device_Status_History',\n PCTroubleConditionDetailsReport = 'https://answers.alarm.com/PC/Property_Management_Support/Notification_Management/Create-manage_a_Trouble_Condition_Details_Report',\n PCCheckpointIdForSGT = 'https://answers.alarm.com/PC/Property_Management_Support/Self-Guided_Tours/CheckpointID_for_Self-Guided_Tours'\n}\n\nexport default CustomerKnowledgeBase;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const LocationOpenCloseReport = 36;\n/**\n * @enum {number}\n */\nexport const AlarmsIssuesReport = 37;\n/**\n * @enum {number}\n */\nexport const ArmingDisarmingReport = 41;\n/**\n * @enum {number}\n */\nexport const DoorbellCall = 43;\n/**\n * @enum {number}\n */\nexport const TemperatureHistoryReport = 54;\n/**\n * @enum {number}\n */\nexport const HVACHealthReport = 55;\n/**\n * @enum {number}\n */\nexport const VideoHealthReport = 66;\n/**\n * @enum {number}\n */\nexport const LineMonitoringReport = 68;\n/**\n * @enum {number}\n */\nexport const AccessHistoryReport = 72;\n/**\n * @enum {number}\n */\nexport const PeopleCountingReport = 75;\n/**\n * @enum {number}\n */\nexport const SBTMTemperatureHistoryReport = 77;\n/**\n * @enum {number}\n */\nexport const UserSummaryReport = 79;\n/**\n * @enum {number}\n */\nexport const ResidentSmartHomeActivityReport = 81;\n/**\n * @enum {number}\n */\nexport const BatteryLevelReport = 87;\n/**\n * @enum {number}\n */\nexport const OccupancyPlusPeopleCountingReport = 92;\n/**\n * @enum {number}\n */\nexport const UnattendedShowingsReport = 94;\n/**\n * @enum {number}\n */\nexport const CrowdGatheringReport = 95;\n/**\n * @enum {number}\n */\nexport const NoiseThresholdExceeded = 103;\n/**\n * @enum {number}\n */\nexport const TroubleConditionTrendsReport = 104;\n/**\n * @enum {number}\n */\nexport const ResidentDiscrepancyReport = 105;\n/**\n * @enum {number}\n */\nexport const TroubleConditionDetailsReport = 120;\n/**\n * @enum {number}\n */\nexport const UserActivityReport = 125;\n/**\n * @enum {number}\n */\nexport const VideoIntercomCall = 130;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const ThermostatSchedule = 20;\n/**\n * @enum {number}\n */\nexport const SceneEdit = 21;\n/**\n * @enum {number}\n */\nexport const ThermostatRuleEdit = 24;\n/**\n * @enum {number}\n */\nexport const EventTriggeredRuleEdit = 26;\n/**\n * @enum {number}\n */\nexport const ScheduleRuleEdit = 27;\n/**\n * @enum {number}\n */\nexport const AccessControlScheduleEdit = 37;\n/**\n * @enum {number}\n */\nexport const AddGarageGatewayV1 = 42;\n/**\n * @enum {number}\n */\nexport const LiftMasterInstallation = 43;\n/**\n * @enum {number}\n */\nexport const NotificationsCenter = 46;\n/**\n * @enum {number}\n */\nexport const NotificationEdit = 47;\n/**\n * @enum {number}\n */\nexport const EnterpriseNotificationsCenter = 48;\n/**\n * @enum {number}\n */\nexport const Users = 57;\n/**\n * @enum {number}\n */\nexport const UserAddEdit = 58;\n/**\n * @enum {number}\n */\nexport const EnterpriseUsers = 59;\n/**\n * @enum {number}\n */\nexport const ExportPanelSlotNumbers = 62;\n/**\n * @enum {number}\n */\nexport const DownloadUsers = 64;\n/**\n * @enum {number}\n */\nexport const ManageLogins = 67;\n/**\n * @enum {number}\n */\nexport const MonitoringStation = 70;\n/**\n * @enum {number}\n */\nexport const ReferAFriend = 73;\n/**\n * @enum {number}\n */\nexport const NameDevice = 74;\n/**\n * @enum {number}\n */\nexport const RemoveThermostatCover = 75;\n/**\n * @enum {number}\n */\nexport const RecordThermostatWiring = 76;\n/**\n * @enum {number}\n */\nexport const ReconnectThermostatCover = 77;\n/**\n * @enum {number}\n */\nexport const ConfigureThermostat = 78;\n/**\n * @enum {number}\n */\nexport const EnterpriseReportsCenter = 84;\n/**\n * @enum {number}\n */\nexport const ReportsCenter = 86;\n/**\n * @enum {number}\n */\nexport const Logout = 94;\n/**\n * @enum {number}\n */\nexport const WellnessActivity = 97;\n/**\n * @enum {number}\n */\nexport const ConfigureThermostatSuccess = 104;\n/**\n * @enum {number}\n */\nexport const EventHistory = 114;\n/**\n * @enum {number}\n */\nexport const VideoViewClips = 117;\n/**\n * @enum {number}\n */\nexport const VideoCameraSettingsOverview = 119;\n/**\n * @enum {number}\n */\nexport const BusinessHours = 120;\n/**\n * @enum {number}\n */\nexport const GeoServices = 128;\n/**\n * @enum {number}\n */\nexport const ManageLoginPermissions = 130;\n/**\n * @enum {number}\n */\nexport const ManageLoginAddLogin = 131;\n/**\n * @enum {number}\n */\nexport const MultiSiteGroupManagement = 135;\n/**\n * @enum {number}\n */\nexport const GroupSettingsThermostatScheduleTemplate = 144;\n/**\n * @enum {number}\n */\nexport const GroupSettingsBusinessHoursTemplate = 145;\n/**\n * @enum {number}\n */\nexport const ImageSensorRulesEdit = 148;\n/**\n * @enum {number}\n */\nexport const ImageSensorEventGallery = 149;\n/**\n * @enum {number}\n */\nexport const Sensors = 159;\n/**\n * @enum {number}\n */\nexport const VideoAddCloudRecordingSchedule = 174;\n/**\n * @enum {number}\n */\nexport const VideoEditEventTriggeredRecordingSchedule = 175;\n/**\n * @enum {number}\n */\nexport const VideoAddSvrRecordingSchedule = 176;\n/**\n * @enum {number}\n */\nexport const VideoMainSettings = 177;\n/**\n * @enum {number}\n */\nexport const VideoLiveViewSettings = 178;\n/**\n * @enum {number}\n */\nexport const VideoPanTiltSettings = 180;\n/**\n * @enum {number}\n */\nexport const VideoWirelessNetworkSettings = 181;\n/**\n * @enum {number}\n */\nexport const VideoSavedVideoSettings = 182;\n/**\n * @enum {number}\n */\nexport const VideoSvrDriveManagement = 183;\n/**\n * @enum {number}\n */\nexport const VideoSvrDiveCare = 184;\n/**\n * @enum {number}\n */\nexport const VideoNetworkSettings = 186;\n/**\n * @enum {number}\n */\nexport const VideoAddNewDevice = 188;\n/**\n * @enum {number}\n */\nexport const VideoAlexaVoiceServiceSetup = 195;\n/**\n * @enum {number}\n */\nexport const VideoSvrSettingsDisplayMgmt = 196;\n/**\n * @enum {number}\n */\nexport const VideoBusinessActivityAnalyticsReports = 200;\n/**\n * @enum {number}\n */\nexport const UpsellOfferContact = 202;\n/**\n * @enum {number}\n */\nexport const UpsellOfferDetail2 = 203;\n/**\n * @enum {number}\n */\nexport const UpsellOfferPriceList = 204;\n/**\n * @enum {number}\n */\nexport const UpsellOfferSummary2 = 205;\n/**\n * @enum {number}\n */\nexport const UpsellOfferCart = 206;\n/**\n * @enum {number}\n */\nexport const UpsellOffersDashboard = 207;\n/**\n * @enum {number}\n */\nexport const EnterpriseLoginTemplate = 214;\n/**\n * @enum {number}\n */\nexport const SingleSystemLoginTemplate = 215;\n/**\n * @enum {number}\n */\nexport const SupportCenter = 218;\n/**\n * @enum {number}\n */\nexport const SupportCenterCreateIssue = 220;\n/**\n * @enum {number}\n */\nexport const AppDownload = 226;\n/**\n * @enum {number}\n */\nexport const EmberHome = 301;\n/**\n * @enum {number}\n */\nexport const EmberDailySummary = 306;\n/**\n * @enum {number}\n */\nexport const EmberFeatureSuggestions = 307;\n/**\n * @enum {number}\n */\nexport const EmberNewsAndUpdates = 308;\n/**\n * @enum {number}\n */\nexport const EmberDefaultNotificationRedirect = 310;\n/**\n * @enum {number}\n */\nexport const EmberWizardLaunch = 311;\n/**\n * @enum {number}\n */\nexport const EmberGenericWizardDeepLinkLanding = 312;\n/**\n * @enum {number}\n */\nexport const EmberPartitions = 501;\n/**\n * @enum {number}\n */\nexport const EmberGarageDoors = 502;\n/**\n * @enum {number}\n */\nexport const EmberGates = 503;\n/**\n * @enum {number}\n */\nexport const EmberLocks = 504;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlAccessPointDevices = 505;\n/**\n * @enum {number}\n */\nexport const EmberSumpPumps = 506;\n/**\n * @enum {number}\n */\nexport const EmberSmartChime = 507;\n/**\n * @enum {number}\n */\nexport const EmberSmartChimeSettings = 508;\n/**\n * @enum {number}\n */\nexport const EmberSmartChimeWirelessNetworks = 509;\n/**\n * @enum {number}\n */\nexport const EmberThermostats = 510;\n/**\n * @enum {number}\n */\nexport const EmberWater = 511;\n/**\n * @enum {number}\n */\nexport const EmberLights = 512;\n/**\n * @enum {number}\n */\nexport const EmberLightsGroupDetails = 513;\n/**\n * @enum {number}\n */\nexport const EmberNoise = 514;\n/**\n * @enum {number}\n */\nexport const EmberNoiseSettings = 515;\n/**\n * @enum {number}\n */\nexport const EmberTemperatures = 516;\n/**\n * @enum {number}\n */\nexport const EmberTemperatureSensors = 517;\n/**\n * @enum {number}\n */\nexport const EmberTemperatureSensorEdit = 518;\n/**\n * @enum {number}\n */\nexport const EmberTemperatureSensorGroups = 519;\n/**\n * @enum {number}\n */\nexport const EmberTemperatureSensorGroupsEdit = 520;\n/**\n * @enum {number}\n */\nexport const EmberVoice = 522;\n/**\n * @enum {number}\n */\nexport const EmberVoiceEdit = 523;\n/**\n * @enum {number}\n */\nexport const EmberShades = 524;\n/**\n * @enum {number}\n */\nexport const EmberCcControl = 525;\n/**\n * @enum {number}\n */\nexport const EmberSwitches = 526;\n/**\n * @enum {number}\n */\nexport const EmberMpersDevices = 527;\n/**\n * @enum {number}\n */\nexport const EmberMpersDevicesEdit = 528;\n/**\n * @enum {number}\n */\nexport const EmberPanelAudio = 529;\n/**\n * @enum {number}\n */\nexport const EmberSensorNames = 530;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlElevatorDevices = 531;\n/**\n * @enum {number}\n */\nexport const EmberRemotesEdit = 532;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlDoorRules = 1001;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsSchedules = 1002;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsScheduleEdit = 1003;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsScheduleEditScheduleType = 1004;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsScheduleEditSetpoint = 1005;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsSmartScheduleAudit = 1006;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsPeakProtect = 1007;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsPeakProtectUtility = 1008;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsPeakProtectSchedule = 1009;\n/**\n * @enum {number}\n */\nexport const EmberRules = 1010;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilder = 1011;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderMobileNoSupport = 1012;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderTrigger = 1013;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderTriggerDetails = 1014;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderAction = 1015;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderActionDetails = 1016;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderRestrictions = 1017;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderNotifications = 1018;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderExtraRuleOption = 1019;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderNotificationsNewContact = 1020;\n/**\n * @enum {number}\n */\nexport const EmberScenes = 1021;\n/**\n * @enum {number}\n */\nexport const EmberAutomationSchedules = 1022;\n/**\n * @enum {number}\n */\nexport const EmberSmartArming = 1023;\n/**\n * @enum {number}\n */\nexport const EmberSmartArmingDisarmEdit = 1024;\n/**\n * @enum {number}\n */\nexport const EmberSmartArmingArmEdit = 1025;\n/**\n * @enum {number}\n */\nexport const EmberPartitionsSmartArming = 1026;\n/**\n * @enum {number}\n */\nexport const EmberArmingSchedulesAndAutoRearming = 1027;\n/**\n * @enum {number}\n */\nexport const EmberArmingSchedulesAndAutoRearmingCreate = 1028;\n/**\n * @enum {number}\n */\nexport const EmberArmingSchedulesAndAutoRearmingEdit = 1029;\n/**\n * @enum {number}\n */\nexport const EmberPartitionsRules = 1030;\n/**\n * @enum {number}\n */\nexport const EmberSensorsRules = 1031;\n/**\n * @enum {number}\n */\nexport const EmberLocksRules = 1032;\n/**\n * @enum {number}\n */\nexport const EmberGarageDoorsRules = 1033;\n/**\n * @enum {number}\n */\nexport const EmberGatesRules = 1034;\n/**\n * @enum {number}\n */\nexport const EmberLightsRules = 1035;\n/**\n * @enum {number}\n */\nexport const EmberThermostatsRules = 1036;\n/**\n * @enum {number}\n */\nexport const EmberWaterRules = 1037;\n/**\n * @enum {number}\n */\nexport const EmberImageSensorRules = 1038;\n/**\n * @enum {number}\n */\nexport const EmberLightsSchedules = 1039;\n/**\n * @enum {number}\n */\nexport const EmberShadesSchedules = 1040;\n/**\n * @enum {number}\n */\nexport const EmberBoilers = 1041;\n/**\n * @enum {number}\n */\nexport const EmberRemotes = 1042;\n/**\n * @enum {number}\n */\nexport const EmberThermostatGrouping = 1043;\n/**\n * @enum {number}\n */\nexport const EmberEditWifiSchedules = 1045;\n/**\n * @enum {number}\n */\nexport const EmberPartitionArmingSchedules = 1046;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilder = 1050;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilderAction = 1047;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilderActionDetails = 1049;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilderFollowUp = 1048;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilderTime = 1051;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilderAdditionalOption = 1052;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilderMobileNoSupport = 1053;\n/**\n * @enum {number}\n */\nexport const EmberThermostatRewardProgram = 1054;\n/**\n * @enum {number}\n */\nexport const EmberActivity = 1501;\n/**\n * @enum {number}\n */\nexport const EmberEventHistory = 1502;\n/**\n * @enum {number}\n */\nexport const EmberEventImage = 1503;\n/**\n * @enum {number}\n */\nexport const EmberEventVideo = 1504;\n/**\n * @enum {number}\n */\nexport const EmberActivityHeatMap = 1505;\n/**\n * @enum {number}\n */\nexport const EmberExtendedActivityHistory = 1506;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEventHistory = 1507;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEventImage = 1508;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEventVideo = 1509;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseExtendedActivityHistory = 1510;\n/**\n * @enum {number}\n */\nexport const EmberActivityGroupEventHistory = 1512;\n/**\n * @enum {number}\n */\nexport const EmberEventThumbnail = 1515;\n/**\n * @enum {number}\n */\nexport const EmberAlarmRecap = 1516;\n/**\n * @enum {number}\n */\nexport const EmberEventSnapshot = 1517;\n/**\n * @enum {number}\n */\nexport const EmberVideo = 2001;\n/**\n * @enum {number}\n */\nexport const EmberVideoRules = 2002;\n/**\n * @enum {number}\n */\nexport const EmberVideoSchedules = 2003;\n/**\n * @enum {number}\n */\nexport const EmberVideoSdCardSchedule = 2004;\n/**\n * @enum {number}\n */\nexport const EmberVideoSelectSvrSchedule = 2005;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameras = 2006;\n/**\n * @enum {number}\n */\nexport const EmberVideoCamera = 2007;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraCalibrate = 2008;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraCalibrateCapture = 2009;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraCalibrateEdit = 2010;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraCalibrateReview = 2011;\n/**\n * @enum {number}\n */\nexport const EmberVideoSetupPanelStreaming = 2012;\n/**\n * @enum {number}\n */\nexport const EmberOvReadySettings = 2013;\n/**\n * @enum {number}\n */\nexport const EmberOvReadyRuleSettings = 2014;\n/**\n * @enum {number}\n */\nexport const EmberOvReadyRule = 2015;\n/**\n * @enum {number}\n */\nexport const EmberOvReadyRuleSelect = 2016;\n/**\n * @enum {number}\n */\nexport const EmberOvReadyRuleDraw = 2017;\n/**\n * @enum {number}\n */\nexport const EmberClassifierVisualization = 2018;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraGroups = 2019;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraGroupsEdit = 2020;\n/**\n * @enum {number}\n */\nexport const EmberVideoLiveView = 2021;\n/**\n * @enum {number}\n */\nexport const EmberVideoClips = 2022;\n/**\n * @enum {number}\n */\nexport const EmberVideoClipsUsageReport = 2023;\n/**\n * @enum {number}\n */\nexport const EmberVideoClipFeedback = 2025;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoCameraGroups = 2026;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoCameraGroupsEdit = 2027;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoLiveView = 2028;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoClips = 2029;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoSvrTimeline = 2030;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoAdvancedVideoSearch = 2031;\n/**\n * @enum {number}\n */\nexport const EmberSDCard = 2032;\n/**\n * @enum {number}\n */\nexport const EmberVideoAddDeviceRedirect = 2033;\n/**\n * @enum {number}\n */\nexport const EmberVideoBusinessActivityAnalytics = 2034;\n/**\n * @enum {number}\n */\nexport const EmberVideoBusinessActivityAnalyticsRuleList = 2035;\n/**\n * @enum {number}\n */\nexport const EmberVideoBusinessActivityAnalyticsRule = 2036;\n/**\n * @enum {number}\n */\nexport const EmberVideoBusinessActivityAnalyticsRuleGroup = 2037;\n/**\n * @enum {number}\n */\nexport const EmberVideoBusinessActivityAnalyticsRuleGroupList = 2038;\n/**\n * @enum {number}\n */\nexport const EmberVideoBusinessActivityAnalyticsHeatMapping = 2039;\n/**\n * @enum {number}\n */\nexport const EmberVideoSvrTimeline = 2040;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraPostInstall = 2041;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraPostInstallPowerCheck = 2042;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraPostInstallWedgeSelect = 2043;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraPostInstallChimeSelect = 2044;\n/**\n * @enum {number}\n */\nexport const EmberVideoCameraPostInstallQualitativePowerCheck = 2045;\n/**\n * @enum {number}\n */\nexport const EmberVideoSdCardSettings = 2046;\n/**\n * @enum {number}\n */\nexport const EmberVideoVarifocalFovSettings = 2047;\n/**\n * @enum {number}\n */\nexport const EmberVideoDigitalFovSettings = 2048;\n/**\n * @enum {number}\n */\nexport const EmberVideoPrivacyZonesSettings = 2049;\n/**\n * @enum {number}\n */\nexport const EmberVideoInternationalTests = 2050;\n/**\n * @enum {number}\n */\nexport const EmberOnvifInstallation = 2051;\n/**\n * @enum {number}\n */\nexport const EmberOnvifInstallationTermsOfService = 2052;\n/**\n * @enum {number}\n */\nexport const EmberOnvifInstallationCredentials = 2053;\n/**\n * @enum {number}\n */\nexport const EmberOnvifInstallationNaming = 2054;\n/**\n * @enum {number}\n */\nexport const EmberOnvifInstallationNamingEdit = 2055;\n/**\n * @enum {number}\n */\nexport const EmberVideoAdvancedVideoSearch = 2056;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsAdvancedSetup = 2057;\n/**\n * @enum {number}\n */\nexport const EmberVideoLightGuardControlSettings = 2059;\n/**\n * @enum {number}\n */\nexport const EmberVideoLightGuardMotionDetectionSettings = 2060;\n/**\n * @enum {number}\n */\nexport const EmberVideoLightsSettings = 2061;\n/**\n * @enum {number}\n */\nexport const EmberVideoLightTriggers = 2062;\n/**\n * @enum {number}\n */\nexport const EmberVideoStreamSettings = 2063;\n/**\n * @enum {number}\n */\nexport const EmberVideoWebrtcTest = 2064;\n/**\n * @enum {number}\n */\nexport const EmberVideoDeviceSignalStrength = 2065;\n/**\n * @enum {number}\n */\nexport const EmberVideoSignalStrength = 2066;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsCamera = 2067;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsGeneral = 2068;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsNetworkInfo = 2069;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsAudio = 2070;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsVideoConfiguration = 2071;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentTerms = 2072;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollment = 2073;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarVehicles = 2074;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentVehiclesCameraAccess = 2075;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentVehiclesFeatureManagement = 2076;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentVehiclesIncorrectPhotos = 2077;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentVehiclesAdd = 2079;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentRecentImages = 2080;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsReview = 2081;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsReviewProfileEdit = 2082;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsReviewPhotoList = 2083;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsReviewSummary = 2084;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsClipFeedback = 2085;\n/**\n * @enum {number}\n */\nexport const EmberVisualVerificationSD = 2086;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsReviewFAQ = 2087;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsReviewNotifications = 2088;\n/**\n * @enum {number}\n */\nexport const EmberVisualVerificationSVR = 2089;\n/**\n * @enum {number}\n */\nexport const EmberVisualVerificationLiveView = 2090;\n/**\n * @enum {number}\n */\nexport const EmberVisualVerificationFlagging = 2091;\n/**\n * @enum {number}\n */\nexport const EmberVisualVerificationResponder = 2092;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsAlerts = 2093;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsLightsOverview = 2094;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsUpdateFirmware = 2096;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsClipLength = 2097;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsClipQuality = 2098;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsImage = 2099;\n/**\n * @enum {number}\n */\nexport const EmberOvReadyRuleDrawV2 = 2100;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsSdCardInfo = 2101;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsStreamVideoPanel = 2102;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsMotionConfiguration = 2103;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsPrivacyZones = 2104;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsThirdPartyStream = 2106;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsThirdPartyStreamEdit = 2107;\n/**\n * @enum {number}\n */\nexport const EmberVideoYoutubePlayer = 2108;\n/**\n * @enum {number}\n */\nexport const EmberVideoGallery = 2109;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoGallery = 2110;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomContact = 2111;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomContactEnrollment = 2112;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomContactEnrollmentEdit = 2113;\n/**\n * @enum {number}\n */\nexport const EmberVideoDroneInstall = 2114;\n/**\n * @enum {number}\n */\nexport const EmberVideoInstallOverview = 2115;\n/**\n * @enum {number}\n */\nexport const EmberVideoInstallTutorial = 2116;\n/**\n * @enum {number}\n */\nexport const EmberVideoReplaceTutorial = 2117;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomContactEnrollmentNotifications = 2118;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomContactEdit = 2119;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomSetup = 2120;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomVideoDeviceSelect = 2121;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsVarifocalFov = 2122;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsDigitalFov = 2123;\n/**\n * @enum {number}\n */\nexport const EmberVideoSvrRecordingSchedule = 2124;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomAssociatedDeviceSelect = 2125;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomCustomizeDirectory = 2126;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomQrCode = 2127;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomCreateDirectory = 2128;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsOverview = 2129;\n/**\n * @enum {number}\n */\nexport const EmberVideoMotionDetectionTest = 2130;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsDeviceStatus = 2131;\n/**\n * @enum {number}\n */\nexport const EmberVideoSettingsNetworkConfigChangeNetwork = 2132;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomAddDirectory = 2133;\n/**\n * @enum {number}\n */\nexport const EmberVideoBatteryMotionSensitivitySettings = 2134;\n/**\n * @enum {number}\n */\nexport const EmberVideoBatteryStatus = 2135;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomContactNotifications = 2138;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomEditDirectory = 2139;\n/**\n * @enum {number}\n */\nexport const EmberOperatorPersonalSafety = 2140;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarFaces = 2141;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentFacesRecentImages = 2142;\n/**\n * @enum {number}\n */\nexport const EmberVideoThumbnailSearch = 2143;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentFacesCameraAccess = 2144;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentFacesFeatureManagement = 2145;\n/**\n * @enum {number}\n */\nexport const EmberVideoFamiliarSubjectsEnrollmentFacesIncorrectPhotos = 2146;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoThumbnailSearch = 2147;\n/**\n * @enum {number}\n */\nexport const EmberOperatorSelectAlarm = 2148;\n/**\n * @enum {number}\n */\nexport const EmberVideoAppearanceSearchResults = 2149;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomConnectUnitToSystem = 2150;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomSetConcierge = 2151;\n/**\n * @enum {number}\n */\nexport const EmberVideoIntercomNameDirectoryList = 2152;\n/**\n * @enum {number}\n */\nexport const EmberUsers = 2501;\n/**\n * @enum {number}\n */\nexport const EmberUserEdit = 2502;\n/**\n * @enum {number}\n */\nexport const EmberUserEditNotSupported = 2503;\n/**\n * @enum {number}\n */\nexport const EmberEditUserInformation = 2504;\n/**\n * @enum {number}\n */\nexport const EmberEditUserDeviceAccess = 2506;\n/**\n * @enum {number}\n */\nexport const EmberEditUserAttributes = 2507;\n/**\n * @enum {number}\n */\nexport const EmberEditUserAttributesEdit = 2508;\n/**\n * @enum {number}\n */\nexport const EmberEditUserType = 2509;\n/**\n * @enum {number}\n */\nexport const EmberEditUserAccessPeriod = 2510;\n/**\n * @enum {number}\n */\nexport const EmberUserEditLanguage = 2511;\n/**\n * @enum {number}\n */\nexport const EmberEditUserContactInformation = 2512;\n/**\n * @enum {number}\n */\nexport const EmberUsersAddContactAddress = 2513;\n/**\n * @enum {number}\n */\nexport const EmberUsersAddContactAddressDuringUserCreation = 2514;\n/**\n * @enum {number}\n */\nexport const EmberUserEditFaceRecognition = 2515;\n/**\n * @enum {number}\n */\nexport const EmberUserEditFaceRecognitionReview = 2516;\n/**\n * @enum {number}\n */\nexport const EmberUserEditFaceRecognitionModify = 2517;\n/**\n * @enum {number}\n */\nexport const EmberUserEditFaceRecognitionInvalid = 2518;\n/**\n * @enum {number}\n */\nexport const EmberUsersUserAccessReview = 2519;\n/**\n * @enum {number}\n */\nexport const EmberUsersUserAccessReviewEdit = 2520;\n/**\n * @enum {number}\n */\nexport const EmberUsersUserAccessReviewEditAssignUser = 2521;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUsers = 2522;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUserEdit = 2523;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUserEditNotSupported = 2524;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserInformation = 2525;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserDeviceAccess = 2526;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserAttributes = 2527;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserAttributesEdit = 2528;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserDeviceAccessLocationDevices = 2529;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserDeviceAccessUserCode = 2530;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserDeviceAccessAccessType = 2531;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserType = 2532;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserAccessPeriod = 2533;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUserEditLanguage = 2534;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEditUserContactInformation = 2535;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUsersAddContactAddress = 2536;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUsersAddContactAddressDuringUserCreation = 2537;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUsersLinkLogin = 2538;\n/**\n * @enum {number}\n */\nexport const EmberUserSlotManagement = 2539;\n/**\n * @enum {number}\n */\nexport const EmberUsersLinkLogin = 2540;\n/**\n * @enum {number}\n */\nexport const EmberUsersUsername = 2541;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUsersUsername = 2542;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseLogins = 3001;\n/**\n * @enum {number}\n */\nexport const EmberAddEnterpriseLoginsOptions = 3002;\n/**\n * @enum {number}\n */\nexport const EmberElevateLogins = 3003;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlLogins = 3004;\n/**\n * @enum {number}\n */\nexport const EmberAddEnterpriseAccessControlLoginsOptions = 3005;\n/**\n * @enum {number}\n */\nexport const EmberElevateAccessControlLogins = 3006;\n/**\n * @enum {number}\n */\nexport const EmberEditEnterpriseLogin = 3007;\n/**\n * @enum {number}\n */\nexport const EmberNewEnterpriseLogin = 3008;\n/**\n * @enum {number}\n */\nexport const EmberNewMultiGroupLogin = 3009;\n/**\n * @enum {number}\n */\nexport const EmberAssociateEnterpriseLogin = 3010;\n/**\n * @enum {number}\n */\nexport const EmberAssociateMultiGroupLogin = 3011;\n/**\n * @enum {number}\n */\nexport const EmberEditMultiGroupLogin = 3012;\n/**\n * @enum {number}\n */\nexport const EmberNewScheduledDeviceLogin = 3013;\n/**\n * @enum {number}\n */\nexport const EmberEditScheduledDeviceLogin = 3014;\n/**\n * @enum {number}\n */\nexport const EmberNewScheduledDeviceLoginAccessControl = 3015;\n/**\n * @enum {number}\n */\nexport const EmberEditScheduledDeviceLoginAccessControl = 3016;\n/**\n * @enum {number}\n */\nexport const EmberLocations = 3017;\n/**\n * @enum {number}\n */\nexport const EmberLocationsDeviceAccess = 3018;\n/**\n * @enum {number}\n */\nexport const EmberLocationsSummary = 3019;\n/**\n * @enum {number}\n */\nexport const EmberLocationsOverview = 3020;\n/**\n * @enum {number}\n */\nexport const EmberLocationsFleet = 3021;\n/**\n * @enum {number}\n */\nexport const EmberLocationsPersonalSafety = 3022;\n/**\n * @enum {number}\n */\nexport const EmberLocationsThermostats = 3023;\n/**\n * @enum {number}\n */\nexport const EmberLocationsOccupancy = 3024;\n/**\n * @enum {number}\n */\nexport const EmberLocationsLocation = 3025;\n/**\n * @enum {number}\n */\nexport const EmberLocationsVideo = 3026;\n/**\n * @enum {number}\n */\nexport const EmberLocationsTemperatures = 3027;\n/**\n * @enum {number}\n */\nexport const EmberLocationsEdit = 3028;\n/**\n * @enum {number}\n */\nexport const EmberLocationsEditUsers = 3029;\n/**\n * @enum {number}\n */\nexport const EmberLocationsLocationPanel = 3030;\n/**\n * @enum {number}\n */\nexport const EmberLocationsLocationAccessPoints = 3031;\n/**\n * @enum {number}\n */\nexport const EmberLocationsLocationThermostats = 3032;\n/**\n * @enum {number}\n */\nexport const EmberLocationsEditManualMoveIn = 3033;\n/**\n * @enum {number}\n */\nexport const EmberLocationsManageResidents = 3034;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseThermostatSettingsTemplateEdit = 3035;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseGroups = 3037;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseNewGroup = 3038;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseGroupsAddLocation = 3039;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseReports = 3040;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseReportsCatalog = 3041;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseReportEdit = 3042;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessHistoryReportEdit = 3043;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUserSummaryReportEdit = 3044;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseVideoHealthReportEdit = 3045;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseBAAReportEdit = 3046;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAlarmsIssuesReportEdit = 3047;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseTroubleConditionReportEdit = 3048;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseBatteryLevelReportEdit = 3049;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettings = 3050;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsAccessSettings = 3051;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsCommunicationSettings = 3052;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsEnergySettings = 3053;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPanelSettings = 3054;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPermissionsAndIntegrations = 3055;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsTemporaryAccessCodeSettings = 3056;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsTemporaryAccessCodes = 3057;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsTemporaryAccessCodesAccessCodeDuration = 3058;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsTemporaryAccessCodesAccessCodeAvailabilitySchedule = 3059;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursCheckpointId = 3060;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedTours = 3061;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursAppointmentLength = 3062;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursCCVerification = 3063;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursCustomUrl = 3064;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursCustomerLogo = 3065;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursWebPrimaryColor = 3066;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursHoursOfOperation = 3067;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursSupportPhone = 3068;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursConfigureKnockCrm = 3069;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursGeofence = 3070;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursGateCode = 3071;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursCommunitySiteMap = 3072;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursTermsAndConditions = 3073;\n/**\n * @enum {number}\n */\nexport const EmberMultiGroupSettings = 3074;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlIndex = 3075;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlAccessPlans = 3076;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlAccessPlanEdit = 3077;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlAccessPlanNew = 3078;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlAccessPoints = 3079;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlAccessPointEdit = 3080;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUsers = 3081;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEdit = 3082;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditUserInformation = 3083;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditLanguage = 3084;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditAddContact = 3085;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditContactInformation = 3086;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditExpiringCredentials = 3087;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditUserGroup = 3088;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditAccessPlans = 3089;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlEditUserAttributes = 3090;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlEditUserAttributesEdit = 3091;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUsersLinkLogin = 3092;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserBulkCreate = 3093;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserGroups = 3094;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserGroupsNew = 3095;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserGroupsEdit = 3096;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlHolidaysEdit = 3097;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlElevators = 3098;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWelcomeMessage = 3099;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWaterSettings = 3100;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWaterMeterConfigurationTemplate = 3101;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWaterMeterConfigurationTemplateNew = 3102;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWaterMeterConfigurationTemplateEdit = 3103;\n/**\n * @enum {number}\n */\nexport const EmberBusinessHours = 3104;\n/**\n * @enum {number}\n */\nexport const EmberSingleSystemManageLogins = 3107;\n/**\n * @enum {number}\n */\nexport const EmberSingleSystemManageLoginsEdit = 3108;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsAccessControlRestrictedAccess = 3109;\n/**\n * @enum {number}\n */\nexport const EmberMultiSystemAccess = 3110;\n/**\n * @enum {number}\n */\nexport const EmberMultiSystemAccessSetup = 3111;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsOBTR = 3112;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsGuestLoginAccess = 3113;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSendFollowUpText = 3114;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsAutoRelock = 3115;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsHouseReadyEarly = 3116;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsBackupCodes = 3117;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingAutomaticallyEnableBackgroundCapture = 3118;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSendEmailByDefault = 3119;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsUserCodeTimes = 3120;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsThermostatSettingsTemplates = 3121;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsThermostatScheduleTemplates = 3122;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsBusinessHourTemplates = 3123;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsScheduleEmail = 3124;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsAutomaticPanelArming = 3125;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsLoginTemplates = 3126;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPropertyManagementIntegration = 3127;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsManagedAccountAccess = 3128;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectorySetup = 3129;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectoryEnterpriseGroupMapping = 3130;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectoryLocationGroupMapping = 3131;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectoryAuthenticationProviderToken = 3132;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectoryGroupToPlanMapping = 3133;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseNewEnterprise = 3134;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWelcomeEmail = 3135;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWelcomeEmailNew = 3136;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsWelcomeEmailEdit = 3137;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsOBPCR = 3138;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsOBPCREdit = 3139;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsOBPCRNew = 3140;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPoolControlFilterPumpSchedule = 3141;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPoolControlFilterPumpScheduleEdit = 3142;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPoolControlFilterPumpScheduleNew = 3143;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsNoiseMonitorSettings = 3144;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsNoiseMonitorSettingsTemplates = 3145;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseNoiseMonitorSettingsTemplateEdit = 3147;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSupportPhoneNumber = 3148;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsCompanyLogo = 3149;\n/**\n * @enum {number}\n */\nexport const EmberNewBusinessHourTemplates = 3150;\n/**\n * @enum {number}\n */\nexport const EmberNewBusinessHourTemplatesEdit = 3151;\n/**\n * @enum {number}\n */\nexport const EmberNewBusinessHourTemplatesApply = 3152;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsPreloadedCodesForUserCreation = 3153;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseUserActivityReportEdit = 3154;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsScheduleWelcomeMessage = 3155;\n/**\n * @enum {number}\n */\nexport const EmberArmingScheduleTemplates = 3156;\n/**\n * @enum {number}\n */\nexport const EmberArmingScheduleTemplatesEdit = 3157;\n/**\n * @enum {number}\n */\nexport const EmberArmingScheduleTemplatesApply = 3158;\n/**\n * @enum {number}\n */\nexport const EmberArmingScheduleTemplatesEditArmingSchedule = 3159;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsOBTREdit = 3160;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsOBTRNew = 3161;\n/**\n * @enum {number}\n */\nexport const EmberLocationsManageResidentsV2 = 3162;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsMobileBadge = 3163;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlSingleSystemManageLogins = 3164;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlSingleSystemManageLoginsEdit = 3165;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsUserSettings = 3166;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsDeleteExpiredUsers = 3167;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsCompanyName = 3168;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsDeleteInactiveUsers = 3169;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseLtrCommunityDashboard = 3170;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseEnergySaverRuleSettings = 3171;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseTroubleConditionDetailsReportEdit = 3172;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseSelfGuidedToursReportEdit = 3173;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAlertsIssues = 3174;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsSelfGuidedToursConfigureFunnelCrm = 3175;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectoryBulkPlanMapping = 3176;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsActiveDirectoryBulkLoginMapping = 3177;\n/**\n * @enum {number}\n */\nexport const EmberGroupSettingsCustomizeWelcomeEmail = 3178;\n/**\n * @enum {number}\n */\nexport const EmberReports = 3501;\n/**\n * @enum {number}\n */\nexport const EmberReportWebviewIFramePage = 3502;\n/**\n * @enum {number}\n */\nexport const EmberReportsCatalog = 3503;\n/**\n * @enum {number}\n */\nexport const EmberReportEdit = 3504;\n/**\n * @enum {number}\n */\nexport const EmberAccessHistoryReportEdit = 3505;\n/**\n * @enum {number}\n */\nexport const EmberUserSummaryReportEdit = 3506;\n/**\n * @enum {number}\n */\nexport const EmberVideoHealthReportEdit = 3507;\n/**\n * @enum {number}\n */\nexport const EmberBAAReportEdit = 3508;\n/**\n * @enum {number}\n */\nexport const EmberAlarmsIssuesReportEdit = 3509;\n/**\n * @enum {number}\n */\nexport const EmberSensorReports = 3512;\n/**\n * @enum {number}\n */\nexport const EmberThermostatReports = 3513;\n/**\n * @enum {number}\n */\nexport const EmberPartitionReports = 3514;\n/**\n * @enum {number}\n */\nexport const EmberBusinessActivityAnalyticsReports = 3515;\n/**\n * @enum {number}\n */\nexport const EmberConnectedFleetReports = 3516;\n/**\n * @enum {number}\n */\nexport const EmberCommercialTemperatureReports = 3517;\n/**\n * @enum {number}\n */\nexport const EmberWellnessReports = 3518;\n/**\n * @enum {number}\n */\nexport const EmberUserActivityReportEdit = 3519;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlIndex = 4001;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlAccessPlans = 4002;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlAccessPlanEdit = 4003;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlAccessPlanNew = 4004;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlAccessPoints = 4005;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlAccessPointEdit = 4006;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlBadgeManagement = 4007;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlHolidaysEdit = 4008;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlTimetables = 4009;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlTimetableEdit = 4010;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUsers = 4012;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEdit = 4013;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditUserInformation = 4014;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditLanguage = 4015;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditAddContact = 4016;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditContactInformation = 4017;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditExpiringCredentials = 4018;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditUserGroup = 4019;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditAccessPlans = 4020;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlEditUserAttributes = 4021;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlEditUserAttributesEdit = 4022;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserEditNotSupported = 4023;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserBulkCreate = 4024;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserGroups = 4025;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserGroupsNew = 4026;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserGroupsEdit = 4027;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUsersLinkLogin = 4028;\n/**\n * @enum {number}\n */\nexport const EmberNewEnterpriseAccessControlLogin = 4029;\n/**\n * @enum {number}\n */\nexport const EmberNewMultiGroupAccessControlLogin = 4030;\n/**\n * @enum {number}\n */\nexport const EmberAssociateEnterpriseAccessControlLogin = 4031;\n/**\n * @enum {number}\n */\nexport const EmberAssociateMultiGroupAccessControlLogin = 4032;\n/**\n * @enum {number}\n */\nexport const EmberEditEnterpriseAccessControlLogin = 4033;\n/**\n * @enum {number}\n */\nexport const EmberEditMultiGroupAccessControlLogin = 4034;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserEditNotSupported = 4035;\n/**\n * @enum {number}\n */\nexport const EmberSettingsAccessControlRestrictedAccess = 4036;\n/**\n * @enum {number}\n */\nexport const EmberSettingsAccessControlLockdown = 4037;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlLockdownConfiguration = 4038;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlLockdownConfiguration = 4039;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlLockdownConfigurationEdit = 4040;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlLockdownConfigurationEdit = 4041;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlElevators = 4042;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUserPromoteUser = 4043;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUserPromoteUser = 4044;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlUsersUsername = 4045;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlUsersUsername = 4046;\n/**\n * @enum {number}\n */\nexport const EmberSettings = 4501;\n/**\n * @enum {number}\n */\nexport const EmberSettingsFaceRecognition = 4502;\n/**\n * @enum {number}\n */\nexport const EmberLoginInformation = 4503;\n/**\n * @enum {number}\n */\nexport const EmberLanguage = 4504;\n/**\n * @enum {number}\n */\nexport const EmberPassword = 4505;\n/**\n * @enum {number}\n */\nexport const EmberSecurityQuestion = 4506;\n/**\n * @enum {number}\n */\nexport const EmberTwoFactorAuthentication = 4507;\n/**\n * @enum {number}\n */\nexport const EmberTwoFactorChallengeFlow = 4508;\n/**\n * @enum {number}\n */\nexport const EmberEmailVerification = 4509;\n/**\n * @enum {number}\n */\nexport const EmberLoginName = 4510;\n/**\n * @enum {number}\n */\nexport const EmberEmailAddress = 4511;\n/**\n * @enum {number}\n */\nexport const Ember2FASetup = 4512;\n/**\n * @enum {number}\n */\nexport const EmberAccountManagement = 4514;\n/**\n * @enum {number}\n */\nexport const EmberAccountInformation = 4515;\n/**\n * @enum {number}\n */\nexport const EmberSystemInformation = 4516;\n/**\n * @enum {number}\n */\nexport const EmberPropertyInformation = 4517;\n/**\n * @enum {number}\n */\nexport const EmberManageDevices = 4519;\n/**\n * @enum {number}\n */\nexport const EmberManageDevicesAssociatedDevices = 4520;\n/**\n * @enum {number}\n */\nexport const EmberMobileSettings = 4521;\n/**\n * @enum {number}\n */\nexport const EmberSettingsManagedAccountAccess = 4522;\n/**\n * @enum {number}\n */\nexport const EmberSettingsControlPanel = 4523;\n/**\n * @enum {number}\n */\nexport const EmberAlarmDelaySettings = 4524;\n/**\n * @enum {number}\n */\nexport const EmberPresenceStateSettings = 4525;\n/**\n * @enum {number}\n */\nexport const EmberNewDeviceAlerts = 4526;\n/**\n * @enum {number}\n */\nexport const EmberPushDevices = 4527;\n/**\n * @enum {number}\n */\nexport const EmberPushDevicesEdit = 4528;\n/**\n * @enum {number}\n */\nexport const EmberSiteAppearance = 4529;\n/**\n * @enum {number}\n */\nexport const EmberCommunicationPreferences = 4530;\n/**\n * @enum {number}\n */\nexport const EmberDeviceLinkRequest = 4531;\n/**\n * @enum {number}\n */\nexport const EmberMovePortalSurvey = 4533;\n/**\n * @enum {numer}\n */\nexport const EmberMovePortalSurveyEdit = 4534;\n/**\n * @enum {numer}\n */\nexport const EmberMovePortalSurveyCompleted = 4535;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceCategories = 5001;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceDevices = 5002;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceStart = 5003;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceComplete = 5004;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceName = 5005;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceTroubleshoot = 5006;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceMount = 5007;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceChooseDevice = 5008;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceTroubleshootMissing = 5009;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceAlreadyLinked = 5010;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceLinkUnsuccessful = 5011;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceStartInfo = 5013;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceLinkStart = 5014;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceLinkInProgress = 5015;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceLinkComplete = 5016;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceTryEquipment = 5017;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceInstallEquipment = 5018;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceDifferentAccounts = 5020;\n/**\n * @enum {number}\n */\nexport const EmberAddDeviceDefaultNotifications = 5021;\n/**\n * @enum {number}\n */\nexport const EmberSsoHome = 5501;\n/**\n * @enum {number}\n */\nexport const EmberSsoMyAccount = 5502;\n/**\n * @enum {number}\n */\nexport const EmberSsoContactUs = 5503;\n/**\n * @enum {number}\n */\nexport const EmberSsoShop = 5504;\n/**\n * @enum {number}\n */\nexport const EmberSsoSupport = 5505;\n/**\n * @enum {number}\n */\nexport const EmberSsoEquipmentSetup = 5506;\n/**\n * @enum {number}\n */\nexport const EmberSsoMovePortal = 5507;\n/**\n * @enum {number}\n */\nexport const EmberSsoCustom = 5509;\n/**\n * @enum {number}\n */\nexport const EmberRecognizedDevices = 5511;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStation = 6001;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationLocationSettings = 6002;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationLocationSettingsEdit = 6003;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationEmergencyContacts = 6004;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationEmergencyContactsEdit = 6005;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationVideoSettings = 6006;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationPropertyActionsSettings = 6007;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringCertificate = 6008;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationEmergencyContactsCreate = 6009;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationPropertyNotes = 6010;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationPropertyNotesEdit = 6011;\n/**\n * @enum {number}\n */\nexport const EmberMonitoringStationPropertyNotesCreate = 6012;\n/**\n * @enum {number}\n */\nexport const EmberConnectedFleetDashboard = 6102;\n/**\n * @enum {number}\n */\nexport const EmberFleetTripHistory = 6103;\n/**\n * @enum {number}\n */\nexport const CarSettings = 6104;\n/**\n * @enum {number}\n */\nexport const EmberPanelWifi = 6201;\n/**\n * @enum {number}\n */\nexport const EmberPanelWifiConfig = 6202;\n/**\n * @enum {number}\n */\nexport const EmberPanelWifiNetworks = 6203;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointments = 6301;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointmentsSupport = 6302;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointment = 6303;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointmentReasons = 6304;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointmentTimeframe = 6305;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointmentDate = 6306;\n/**\n * @enum {number}\n */\nexport const EmberServiceAppointmentTimes = 6307;\n/**\n * @enum {number}\n */\nexport const EmberThirdPartyServiceRequest = 6308;\n/**\n * @enum {number}\n */\nexport const EmberDiscover = 6401;\n/**\n * @enum {number}\n */\nexport const EmberDiscoverContent = 6402;\n/**\n * @enum {number}\n */\nexport const EmberAlertsIssues = 6501;\n/**\n * @enum {number}\n */\nexport const EmberAlertsIssuesTroubleCondition = 6502;\n/**\n * @enum {number}\n */\nexport const EmberWaterLeakAlert = 6503;\n/**\n * @enum {number}\n */\nexport const EmberSupport = 6601;\n/**\n * @enum {number}\n */\nexport const EmberSupportWebsite = 6602;\n/**\n * @enum {number}\n */\nexport const EmberExternalPage = 6603;\n/**\n * @enum {number}\n */\nexport const EmberUpcomingAppointments = 6604;\n/**\n * @enum {number}\n */\nexport const EmberSupportFeedback = 6605;\n/**\n * @enum {number}\n */\nexport const EmberSmartCoverageGetStarted = 6607;\n/**\n * @enum {number}\n */\nexport const EmberSupportCreateIssue = 6608;\n/**\n * @enum {number}\n */\nexport const EmberCustomerShopItemDetails = 6609;\n/**\n * @enum {number}\n */\nexport const EmberSmartCoverageSelectProperties = 6610;\n/**\n * @enum {number}\n */\nexport const EmberBuilderTrialAccountExpirationWarning = 6611;\n/**\n * @enum {number}\n */\nexport const EmberWifiSettings = 6701;\n/**\n * @enum {number}\n */\nexport const EmberWifiDevices = 6702;\n/**\n * @enum {number}\n */\nexport const EmberWifiDeviceEdit = 6703;\n/**\n * @enum {number}\n */\nexport const EmberWifiProfileEdit = 6704;\n/**\n * @enum {number}\n */\nexport const EmberHvacDashboardThermostats = 6801;\n/**\n * @enum {number}\n */\nexport const EmberHvacDashboardSummary = 6802;\n/**\n * @enum {number}\n */\nexport const EmberHvacDashboardComfort = 6803;\n/**\n * @enum {number}\n */\nexport const EmberHvacDashboardRuntime = 6804;\n/**\n * @enum {number}\n */\nexport const EmberHvacDashboardCycle = 6805;\n/**\n * @enum {number}\n */\nexport const EmberHvacDashboardEfficiency = 6806;\n/**\n * @enum {number}\n */\nexport const EmberMobile = 6901;\n/**\n * @enum {number}\n */\nexport const EmberMobileHelp = 6902;\n/**\n * @enum {number}\n */\nexport const EmberMobileHelpContact = 6903;\n/**\n * @enum {number}\n */\nexport const EmberPersonEdit = 7002;\n/**\n * @enum {number}\n */\nexport const EmberMergeUsersList = 7005;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseMergeUsersList = 7006;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlMergeUsersList = 7007;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlMergeUsersList = 7008;\n/**\n * @enum {number}\n */\nexport const EmberMergeUsersPreview = 7009;\n/**\n * @enum {number}\n */\nexport const EmberAccessControlMergeUsersPreview = 7011;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseMergeUsersPreview = 7012;\n/**\n * @enum {number}\n */\nexport const EmberEnterpriseAccessControlMergeUsersPreview = 7013;\n/**\n * @enum {number}\n */\nexport const EmberPushMigrationTool = 7101;\n/**\n * @enum {number}\n */\nexport const EmberBluetooth = 7200;\n/**\n * @enum {number}\n */\nexport const EmberBluetoothStartPairing = 7201;\n/**\n * @enum {number}\n */\nexport const EmberEverbridgeIntegration = 4536;\n/**\n * @enum {number}\n */\nexport const EmberEverbridgeIntegrationAdd = 4537;\n/**\n * @enum {number}\n */\nexport const EmberBluetoothDisarmingSettings = 7202;\n/**\n * @enum {number}\n */\nexport const EmberBluetoothDisarmingSettingsEditTimeout = 7203;\n/**\n * @enum {number}\n */\nexport const EmberBluetoothDisarmingSettingsDeviceList = 7204;\n/**\n * @enum {number}\n */\nexport const EmberBluetoothDeviceSettings = 7205;\n/**\n * @enum {number}\n */\nexport const EmberBluetoothDeviceSettingsPartitionList = 7206;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Owner = 1;\n/**\n * @enum {number}\n */\nexport const ReadOnly = 200;\n/**\n * @enum {number}\n */\nexport const Custom = 201;\n/**\n * @enum {number}\n */\nexport const FullControl = 212;\n/**\n * @enum {number}\n */\nexport const PointCentralManager = 221;\n/**\n * @enum {number}\n */\nexport const MasterControl = 250;\n/**\n * @enum {number}\n */\nexport const PointCentralVendor = 252;\n/**\n * @enum {number}\n */\nexport const PointCentralReservations = 253;\n/**\n * @enum {number}\n */\nexport const PointCentralFrontDesk = 254;\n/**\n * @enum {number}\n */\nexport const RestrictedDeviceAccess = 261;\n/**\n * @enum {number}\n */\nexport const PointCentralOwner = 290;\n/**\n * @enum {number}\n */\nexport const SingleSystemOwnerLoginTemplate = 999994;\n/**\n * @enum {number}\n */\nexport const SingleSystemVendorLoginTemplate = 999995;\n/**\n * @enum {number}\n */\nexport const SingleSystemFrontDeskLoginTemplate = 999996;\n/**\n * @enum {number}\n */\nexport const SingleSystemReservationsLoginTemplate = 999997;\n/**\n * @enum {number}\n */\nexport const SingleSystemManagerLoginTemplate = 999998;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Activity = 1;\n/**\n * @enum {number}\n */\nexport const Video = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Home = 0;\n/**\n * @enum {number}\n */\nexport const MyAccount = 6;\n/**\n * @enum {number}\n */\nexport const Support = 20;\n/**\n * @enum {number}\n */\nexport const Contact = 24;\n/**\n * @enum {number}\n */\nexport const AddEquipment = 25;\n/**\n * @enum {number}\n */\nexport const Shop = 26;\n/**\n * @enum {number}\n */\nexport const MovePortal = 30;\n/**\n * @enum {number}\n */\nexport const Custom = 31;\n","/**\n * @module DeviceConnectionStatusEnum An enum for device connection status.\n */\n\nenum DeviceConnectionStatusEnum {\n Connected = 0,\n Disconnected = 1,\n Unknown = 2\n}\n\nexport default DeviceConnectionStatusEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const HeatSetPoint100thsF = 2;\n/**\n * @enum {number}\n */\nexport const CoolSetPoint100thsF = 3;\n/**\n * @enum {number}\n */\nexport const LightColorChange = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Uncategorized = 0;\n/**\n * @enum {number}\n */\nexport const FlexIOPullApartSensor = 7;\n/**\n * @enum {number}\n */\nexport const DrivewaySensor = 8;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Contact = 1;\n/**\n * @enum {number}\n */\nexport const Motion = 2;\n/**\n * @enum {number}\n */\nexport const Camera = 11;\n/**\n * @enum {number}\n */\nexport const Water = 16;\n/**\n * @enum {number}\n */\nexport const Partition = 18;\n/**\n * @enum {number}\n */\nexport const Glassbreak = 19;\n/**\n * @enum {number}\n */\nexport const ZwaveLock = 21;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 36;\n/**\n * @enum {number}\n */\nexport const Doorbell = 37;\n/**\n * @enum {number}\n */\nexport const ClimaxPIRCamera = 66;\n/**\n * @enum {number}\n */\nexport const DSCPIRCamera = 67;\n/**\n * @enum {number}\n */\nexport const AccessCardReader = 73;\n/**\n * @enum {number}\n */\nexport const OilGauge = 74;\n/**\n * @enum {number}\n */\nexport const ElevatorFloor = 95;\n/**\n * @enum {number}\n */\nexport const ControlPoint = 111;\n/**\n * @enum {number}\n */\nexport const PowerGPIRCamera = 113;\n/**\n * @enum {number}\n */\nexport const Gate = 115;\n/**\n * @enum {number}\n */\nexport const OriginWirelessDevice = 125;\n","enum DigitalPtzErrorEnum {\n NoError = 0,\n InsufficientPermission,\n DeviceNotFound\n}\nexport default DigitalPtzErrorEnum;\n","enum DirectoryViewTypeEnum {\n Name = 1,\n Unit = 2\n}\n\nexport default DirectoryViewTypeEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const LearnMoreKBCID = 1;\n/**\n * @enum {number}\n */\nexport const LearnMoreKBSegments = 2;\n/**\n * @enum {number}\n */\nexport const ExternalURL = 3;\n/**\n * @enum {number}\n */\nexport const ConfigurationMobile = 4;\n/**\n * @enum {number}\n */\nexport const ConfigurationEmber = 5;\n/**\n * @enum {number}\n */\nexport const FeatureLink = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const HighContrastMode = 0;\n/**\n * @enum {number}\n */\nexport const DarkMode = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Mechanical = 0;\n/**\n * @enum {number}\n */\nexport const Digital = 1;\n/**\n * @enum {number}\n */\nexport const None = -1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const WedgeA = 1;\n/**\n * @enum {number}\n */\nexport const WedgeB = 2;\n/**\n * @enum {number}\n */\nexport const WedgeC = 3;\n/**\n * @enum {number}\n */\nexport const WedgeD = 4;\n/**\n * @enum {number}\n */\nexport const WedgeE = 5;\n/**\n * @enum {number}\n */\nexport const WedgeF = 6;\n/**\n * @enum {number}\n */\nexport const WedgeG = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Line = 1;\n/**\n * @enum {number}\n */\nexport const CustomShape = 2;\n/**\n * @enum {number}\n */\nexport const Rectangle = 3;\n","/**\n * @module\n */\n\nexport const Unknown = 0;\nexport const Open = 1;\nexport const Closed = 2;\nexport const SyncLocked = 3;\nexport const SyncUnlocked = 4;\nexport const Hidden = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const TextOnly = 0;\n/**\n * @enum {number}\n */\nexport const HtmlAndText = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Certified = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Alarm = 1;\n/**\n * @enum {number}\n */\nexport const Entry = 2;\n/**\n * @enum {number}\n */\nexport const ArmDisarm = 3;\n/**\n * @enum {number}\n */\nexport const LockUnlock = 4;\n/**\n * @enum {number}\n */\nexport const OpenClose = 5;\n/**\n * @enum {number}\n */\nexport const Garage = 6;\n/**\n * @enum {number}\n */\nexport const Tamper = 7;\n/**\n * @enum {number}\n */\nexport const Safe = 8;\n/**\n * @enum {number}\n */\nexport const ArmStay = 9;\n/**\n * @enum {number}\n */\nexport const ArmAway = 10;\n/**\n * @enum {number}\n */\nexport const AccessControlDoor = 11;\n/**\n * @enum {number}\n */\nexport const Gate = 13;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Closed = 0;\n/**\n * @enum {number}\n */\nexport const Alarm = 1;\n/**\n * @enum {number}\n */\nexport const Tamper = 7;\n/**\n * @enum {number}\n */\nexport const Disarmed = 8;\n/**\n * @enum {number}\n */\nexport const ArmedStay = 9;\n/**\n * @enum {number}\n */\nexport const ArmedAway = 10;\n/**\n * @enum {number}\n */\nexport const Bypassed = 13;\n/**\n * @enum {number}\n */\nexport const Opened = 15;\n/**\n * @enum {number}\n */\nexport const AuxiliaryPanic = 17;\n/**\n * @enum {number}\n */\nexport const TemperatureAlert = 21;\n/**\n * @enum {number}\n */\nexport const PolicePanic = 22;\n/**\n * @enum {number}\n */\nexport const FirePanic = 24;\n/**\n * @enum {number}\n */\nexport const KeypadTamperAlarm = 32;\n/**\n * @enum {number}\n */\nexport const EndOfBypass = 35;\n/**\n * @enum {number}\n */\nexport const DisarmingSupervisionFault = 47;\n/**\n * @enum {number}\n */\nexport const ArmingSupervisionFault = 48;\n/**\n * @enum {number}\n */\nexport const AuxPanicPendingAlarm = 61;\n/**\n * @enum {number}\n */\nexport const PendingAlarm = 62;\n/**\n * @enum {number}\n */\nexport const PolicePanicSuspectedAlarm = 64;\n/**\n * @enum {number}\n */\nexport const AuxPanicSuspectedAlarm = 65;\n/**\n * @enum {number}\n */\nexport const VideoCameraTriggered = 71;\n/**\n * @enum {number}\n */\nexport const SilentPolicePanic = 73;\n/**\n * @enum {number}\n */\nexport const VideoEventTriggered = 76;\n/**\n * @enum {number}\n */\nexport const DoorUnlocked = 90;\n/**\n * @enum {number}\n */\nexport const DoorLocked = 91;\n/**\n * @enum {number}\n */\nexport const DoorAccessed = 92;\n/**\n * @enum {number}\n */\nexport const BadLockUserCode = 93;\n/**\n * @enum {number}\n */\nexport const ThermostatSetPointChanged = 94;\n/**\n * @enum {number}\n */\nexport const ThermostatModeChanged = 95;\n/**\n * @enum {number}\n */\nexport const ImageSensorUpload = 99;\n/**\n * @enum {number}\n */\nexport const OpenedClosed = 100;\n/**\n * @enum {number}\n */\nexport const ThermostatOffset = 105;\n/**\n * @enum {number}\n */\nexport const ArmedNight = 113;\n/**\n * @enum {number}\n */\nexport const SumpPumpAlertIdle = 114;\n/**\n * @enum {number}\n */\nexport const SumpPumpAlertNormalOperation = 115;\n/**\n * @enum {number}\n */\nexport const SumpPumpAlertPossibleIssue = 116;\n/**\n * @enum {number}\n */\nexport const SumpPumpAlertCriticalIssueOff = 117;\n/**\n * @enum {number}\n */\nexport const SumpPumpAlertCriticalIssueMalfunction = 118;\n/**\n * @enum {number}\n */\nexport const ThermostatFanModeChanged = 120;\n/**\n * @enum {number}\n */\nexport const CommercialEarlyOpen = 122;\n/**\n * @enum {number}\n */\nexport const CommercialLateOpen = 123;\n/**\n * @enum {number}\n */\nexport const CommercialOpenOnTime = 124;\n/**\n * @enum {number}\n */\nexport const CommercialEarlyClose = 125;\n/**\n * @enum {number}\n */\nexport const CommercialLateClose = 126;\n/**\n * @enum {number}\n */\nexport const CommercialClosedOnTime = 127;\n/**\n * @enum {number}\n */\nexport const DoorbellButtonPress = 136;\n/**\n * @enum {number}\n */\nexport const ExitButtonPressed = 141;\n/**\n * @enum {number}\n */\nexport const ViewedByCentralStation = 158;\n/**\n * @enum {number}\n */\nexport const SilentPolicePanicSuspectedAlarm = 172;\n/**\n * @enum {number}\n */\nexport const CommercialClosedUnexpectedly = 177;\n/**\n * @enum {number}\n */\nexport const DoorFailedAccess = 180;\n/**\n * @enum {number}\n */\nexport const DoorForcedOpen = 181;\n/**\n * @enum {number}\n */\nexport const DoorBuzzedFromWebsite = 182;\n/**\n * @enum {number}\n */\nexport const DoorHeldOpen = 184;\n/**\n * @enum {number}\n */\nexport const UnknownCardFormatRead = 185;\n/**\n * @enum {number}\n */\nexport const UnlockCommandSent = 188;\n/**\n * @enum {number}\n */\nexport const LockCommandSent = 189;\n/**\n * @enum {number}\n */\nexport const InAppFirePanic = 200;\n/**\n * @enum {number}\n */\nexport const InAppAuxiliaryPanic = 201;\n/**\n * @enum {number}\n */\nexport const InAppPolicePanic = 202;\n/**\n * @enum {number}\n */\nexport const InAppSilentPolicePanic = 203;\n/**\n * @enum {number}\n */\nexport const VideoAnalyticsDetection = 210;\n/**\n * @enum {number}\n */\nexport const HeatingCoolingIssue = 211;\n/**\n * @enum {number}\n */\nexport const DoorAccessedDoubleSwipe = 236;\n/**\n * @enum {number}\n */\nexport const AlarmCancelled = 238;\n/**\n * @enum {number}\n */\nexport const AccessControlDoorAccessGranted = 298;\n/**\n * @enum {number}\n */\nexport const VideoAnalytics2Detection = 302;\n/**\n * @enum {number}\n */\nexport const LightTurnedOn = 315;\n/**\n * @enum {number}\n */\nexport const LightTurnedOff = 316;\n/**\n * @enum {number}\n */\nexport const SwitchLevelChanged = 317;\n/**\n * @enum {number}\n */\nexport const PackageDeliveryAlert = 363;\n/**\n * @enum {number}\n */\nexport const PackageRetrievalAlert = 364;\n/**\n * @enum {number}\n */\nexport const NetworkMapUpdated = 391;\n/**\n * @enum {number}\n */\nexport const WarningSoundStarted = 394;\n/**\n * @enum {number}\n */\nexport const WarningSoundStopped = 395;\n/**\n * @enum {number}\n */\nexport const WarningSoundFailed = 396;\n/**\n * @enum {number}\n */\nexport const WrongPinCode = 398;\n/**\n * @enum {number}\n */\nexport const NetworkDhcpSettingsUpdated = 432;\n/**\n * @enum {number}\n */\nexport const NetworkDhcpReservationsUpdated = 433;\n/**\n * @enum {number}\n */\nexport const NetworkPortForwardingUpdated = 434;\n/**\n * @enum {number}\n */\nexport const RouterHostsUpdated = 450;\n/**\n * @enum {number}\n */\nexport const RouterProfilesUpdated = 451;\n/**\n * @enum {number}\n */\nexport const SpeedTestResultsUpdated = 454;\n/**\n * @enum {number}\n */\nexport const ViewedByCentralStationDuringVisualVerification = 462;\n/**\n * @enum {number}\n */\nexport const ViewedByCentralStationDuringEscalatedEvent = 463;\n/**\n * @enum {number}\n */\nexport const AelSchedulerUpdated = 480;\n/**\n * @enum {number}\n */\nexport const UnifiedUserManagementUpdated = 510;\n/**\n * @enum {number}\n */\nexport const MpersFallDetected = 511;\n/**\n * @enum {number}\n */\nexport const MpersPanicDetected = 512;\n/**\n * @enum {number}\n */\nexport const MpersNoCommunication = 513;\n/**\n * @enum {number}\n */\nexport const MpersCharging = 514;\n/**\n * @enum {number}\n */\nexport const MpersStoppedCharging = 515;\n/**\n * @enum {number}\n */\nexport const MpersActive = 516;\n/**\n * @enum {number}\n */\nexport const MpersLowBattery = 517;\n/**\n * @enum {number}\n */\nexport const CarTrackingUpdate = 555;\n/**\n * @enum {number}\n */\nexport const MpersCriticalBattery = 518;\n/**\n * @enum {number}\n */\nexport const UserSelected = 560;\n/**\n * @enum {number}\n */\nexport const ThirdPartyAnalyticEvent = 574;\n/**\n * @enum {number}\n */\nexport const StoryInProgress = 580;\n/**\n * @enum {number}\n */\nexport const UnlockFloorCommandSent = 600;\n/**\n * @enum {number}\n */\nexport const LockFloorCommandSent = 601;\n/**\n * @enum {number}\n */\nexport const SafetyButtonLocationUpdate = 617;\n/**\n * @enum {number}\n */\nexport const LiveVideoViewedByCentralStationDuringVisualVerification = 643;\n/**\n * @enum {number}\n */\nexport const LiveVideoViewedByCentralStationDuringRemoteVideoMonitoring = 644;\n/**\n * @enum {number}\n */\nexport const OnboardVideoViewedByCentralStationDuringVisualVerification = 645;\n/**\n * @enum {number}\n */\nexport const OnboardVideoViewedByCentralStationDuringRemoteVideoMonitoring = 646;\n/**\n * @enum {number}\n */\nexport const SvrVideoViewedByCentralStationDuringVisualVerification = 647;\n/**\n * @enum {number}\n */\nexport const SvrVideoViewedByCentralStationDuringRemoteVideoMonitoring = 648;\n/**\n * @enum {number}\n */\nexport const MonitoringPanic = 2009;\n","/**\n * @summary An incomplete list of the EventTypeEnum mapping\n */\n\n/**\n * @type {Object.} \n */\nexport default {\n [315]: 'LightTurnedOn',\n [316]: 'LightTurnedOff',\n [317]: 'SwitchLevelChanged'\n};","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Processing = 0;\n/**\n * @enum {number}\n */\nexport const Completed = 1;\n/**\n * @enum {number}\n */\nexport const Failed = 2;\n/**\n * @enum {number}\n */\nexport const PartialFailed = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Vehicle = 0;\n/**\n * @enum {number}\n */\nexport const Face = 1;\n\nexport type FamiliarSubjectObjectType = typeof Vehicle | typeof Face;\n","enum FamiliarSubjectSettingsLinkTypeEnum {\n None = 0,\n Vehicle = 1,\n Face = 2,\n VehicleAndFace = 3\n}\n\nexport default FamiliarSubjectSettingsLinkTypeEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Review = 1;\n/**\n * @enum {number}\n */\nexport const Move = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Pending = 1;\n/**\n * @enum {number}\n */\nexport const Active = 2;\n/**\n * @enum {number}\n */\nexport const Adjusting = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const FirstEnhancements = 1;\n/**\n * @enum {number}\n */\nexport const RemindersAndAlerts = 2;\n/**\n * @enum {number}\n */\nexport const SmartRulesAndSchedules = 3;\n/**\n * @enum {number}\n */\nexport const MoreEnhancements = 4;\n/**\n * @enum {number}\n */\nexport const TasksList = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const EnterpriseManagementPermissions = 1;\n/**\n * @enum {number}\n */\nexport const DeviceControl = 2;\n/**\n * @enum {number}\n */\nexport const ImageSensorPermissions = 3;\n/**\n * @enum {number}\n */\nexport const VideoPermissions = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Wide = 0;\n/**\n * @enum {number}\n */\nexport const Narrow = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Open = 0;\n/**\n * @enum {number}\n */\nexport const Closed = 1;\n/**\n * @enum {number}\n */\nexport const BusinessWarnings = 2;\n/**\n * @enum {number}\n */\nexport const ArmedAway = 3;\n/**\n * @enum {number}\n */\nexport const ArmedStay = 4;\n/**\n * @enum {number}\n */\nexport const Disarmed = 5;\n/**\n * @enum {number}\n */\nexport const ActiveIssues = 8;\n/**\n * @enum {number}\n */\nexport const On = 9;\n/**\n * @enum {number}\n */\nexport const Off = 10;\n/**\n * @enum {number}\n */\nexport const OutsideThreshold = 21;\n/**\n * @enum {number}\n */\nexport const SensorIssues = 22;\n/**\n * @enum {number}\n */\nexport const Groups = 23;\n/**\n * @enum {number}\n */\nexport const Lockdown = 28;\n/**\n * @enum {number}\n */\nexport const MpersLowBattery = 34;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const TwoSeconds = 2;\n/**\n * @enum {number}\n */\nexport const QuarterMinute = 15;\n/**\n * @enum {number}\n */\nexport const HalfMinute = 30;\n/**\n * @enum {number}\n */\nexport const Minute = 60;\n/**\n * @enum {number}\n */\nexport const FiveMinute = 300;\n/**\n * @enum {number}\n */\nexport const QuarterHour = 900;\n\nexport type FloodPirDuration=\n | typeof None\n | typeof TwoSeconds\n | typeof QuarterMinute\n | typeof HalfMinute\n | typeof Minute\n | typeof FiveMinute\n | typeof QuarterHour;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Far = 15;\n/**\n * @enum {number}\n */\nexport const Middle = 20;\n/**\n * @enum {number}\n */\nexport const Near = 30;\n/**\n * @enum {number}\n */\nexport const VeryNear = 50;\n","/**\n * @module ForcedStreamingMethodEnum An enum set for streaming methods forced by query param.\n */\n\nenum ForcedStreamingMethodEnum {\n NoForcedStreamingMethod = 0,\n ForceWebRTCEndToEnd,\n ForceWebRTCProxy,\n ForceOESP\n}\n\nexport default ForcedStreamingMethodEnum;\n","/**\n * @module FrequencyBandEnum An enum for frequency bands.\n */\n\nenum FrequencyBandEnum {\n None = 0,\n TwoPointFourGHz = 1,\n FiveGHz = 2\n}\n\nexport default FrequencyBandEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Open = 1;\n/**\n * @enum {number}\n */\nexport const Closed = 2;\n/**\n * @enum {number}\n */\nexport const Hidden = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Open = 1;\n/**\n * @enum {number}\n */\nexport const Closed = 2;\n/**\n * @enum {number}\n */\nexport const Hidden = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SumpPump = 1;\n/**\n * @enum {number}\n */\nexport const RemoteTempSensor = 2;\n/**\n * @enum {number}\n */\nexport const AuxSensor = 3;\n/**\n * @enum {number}\n */\nexport const MasterBoilerController = 4;\n/**\n * @enum {number}\n */\nexport const BoilerHeatingZone = 5;\n/**\n * @enum {number}\n */\nexport const HotWaterHeater = 6;\n/**\n * @enum {number}\n */\nexport const EquipmentModule = 8;\n/**\n * @enum {number}\n */\nexport const Furnace = 9;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Text = 0;\n/**\n * @enum {number}\n */\nexport const Number = 1;\n/**\n * @enum {number}\n */\nexport const Date = 2;\n/**\n * @enum {number}\n */\nexport const MultiProperty = 3;\n/**\n * @enum {number}\n */\nexport const OptionSelect = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const EmberActivityPageTour = 1;\n/**\n * @enum {number}\n */\nexport const VideoRulesPageTour = 2;\n/**\n * @enum {number}\n */\nexport const SavedVideoClipsPageTour = 3;\n/**\n * @enum {number}\n */\nexport const ClipDetectionOtherTour = 4;\n/**\n * @enum {number}\n */\nexport const WarningSoundFeatureTour = 8;\n/**\n * @enum {number}\n */\nexport const UsersQuickFiltersTour = 10;\n/**\n * @enum {number}\n */\nexport const UserTypeRelocationTour = 11;\n/**\n * @enum {number}\n */\nexport const SelfGuidedToursSettingsImprovementsTour = 12;\n/**\n * @enum {number}\n */\nexport const STRAccessPointsTabTour = 13;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Low = 0;\n/**\n * @enum {number}\n */\nexport const Normal = 1;\n/**\n * @enum {number}\n */\nexport const High = 2;\n/**\n * @enum {number}\n */\nexport const Custom = 3;\n/**\n * @enum {number}\n */\nexport const Unknown = 4;\n\nexport type InfraredLightStatus = typeof Low | typeof Normal | typeof High | typeof Custom | typeof Unknown;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Panel = 2;\n/**\n * @enum {number}\n */\nexport const System = 3;\n/**\n * @enum {number}\n */\nexport const SystemDisarmed = 4;\n/**\n * @enum {number}\n */\nexport const SystemArmedStay = 5;\n/**\n * @enum {number}\n */\nexport const SystemArmedAway = 6;\n/**\n * @enum {number}\n */\nexport const SystemArmedNight = 7;\n/**\n * @enum {number}\n */\nexport const ImageSensor = 11;\n/**\n * @enum {number}\n */\nexport const Camera = 12;\n/**\n * @enum {number}\n */\nexport const BackgroundCapture = 13;\n/**\n * @enum {number}\n */\nexport const DailyView = 14;\n/**\n * @enum {number}\n */\nexport const MotionActivated = 17;\n/**\n * @enum {number}\n */\nexport const ButtonPress = 25;\n/**\n * @enum {number}\n */\nexport const DoorbellCamera = 26;\n/**\n * @enum {number}\n */\nexport const Lock = 28;\n/**\n * @enum {number}\n */\nexport const LockUnlocked = 29;\n/**\n * @enum {number}\n */\nexport const LockLocked = 30;\n/**\n * @enum {number}\n */\nexport const LightOn = 31;\n/**\n * @enum {number}\n */\nexport const LightOff = 32;\n/**\n * @enum {number}\n */\nexport const Thermostat = 37;\n/**\n * @enum {number}\n */\nexport const ThermostatModeCool = 38;\n/**\n * @enum {number}\n */\nexport const ThermostatModeHeat = 39;\n/**\n * @enum {number}\n */\nexport const FanOn = 41;\n/**\n * @enum {number}\n */\nexport const Water = 43;\n/**\n * @enum {number}\n */\nexport const RemoteTemperatureSensor = 44;\n/**\n * @enum {number}\n */\nexport const Temperature = 45;\n/**\n * @enum {number}\n */\nexport const Fire = 46;\n/**\n * @enum {number}\n */\nexport const Quickbox = 47;\n/**\n * @enum {number}\n */\nexport const Geo = 56;\n/**\n * @enum {number}\n */\nexport const Sunset = 57;\n/**\n * @enum {number}\n */\nexport const Sunrise = 58;\n/**\n * @enum {number}\n */\nexport const Time = 59;\n/**\n * @enum {number}\n */\nexport const Alarm = 60;\n/**\n * @enum {number}\n */\nexport const Warning = 63;\n/**\n * @enum {number}\n */\nexport const Issue = 64;\n/**\n * @enum {number}\n */\nexport const Ok = 65;\n/**\n * @enum {number}\n */\nexport const Email = 66;\n/**\n * @enum {number}\n */\nexport const Tamper = 67;\n/**\n * @enum {number}\n */\nexport const WeatherCloudSun = 68;\n/**\n * @enum {number}\n */\nexport const WeatherCloud = 69;\n/**\n * @enum {number}\n */\nexport const WeatherDrizzle = 70;\n/**\n * @enum {number}\n */\nexport const WeatherLightning = 72;\n/**\n * @enum {number}\n */\nexport const WeatherSnow = 75;\n/**\n * @enum {number}\n */\nexport const SceneGame = 88;\n/**\n * @enum {number}\n */\nexport const Badge = 114;\n/**\n * @enum {number}\n */\nexport const Car = 115;\n/**\n * @enum {number}\n */\nexport const DoorOpen = 117;\n/**\n * @enum {number}\n */\nexport const EnterpriseOpen = 118;\n/**\n * @enum {number}\n */\nexport const EnterpriseClosed = 119;\n/**\n * @enum {number}\n */\nexport const Desktop = 120;\n/**\n * @enum {number}\n */\nexport const GarageClosed = 121;\n/**\n * @enum {number}\n */\nexport const Circle = 122;\n/**\n * @enum {number}\n */\nexport const Hammer = 125;\n/**\n * @enum {number}\n */\nexport const Man = 126;\n/**\n * @enum {number}\n */\nexport const Floor1 = 132;\n/**\n * @enum {number}\n */\nexport const Floor2 = 133;\n/**\n * @enum {number}\n */\nexport const CarBattery = 152;\n/**\n * @enum {number}\n */\nexport const CarFuel = 156;\n/**\n * @enum {number}\n */\nexport const UserControlOpen = 161;\n/**\n * @enum {number}\n */\nexport const UserControlClosed = 167;\n/**\n * @enum {number}\n */\nexport const Lutron = 171;\n/**\n * @enum {number}\n */\nexport const FeatureHome = 178;\n/**\n * @enum {number}\n */\nexport const FeatureGate = 179;\n/**\n * @enum {number}\n */\nexport const LockUnlockedLowDef = 181;\n/**\n * @enum {number}\n */\nexport const LockLockedLowDef = 182;\n/**\n * @enum {number}\n */\nexport const SystemDisarmedLowDef = 184;\n/**\n * @enum {number}\n */\nexport const SystemArmedAwayLowDef = 186;\n/**\n * @enum {number}\n */\nexport const GarageOpen = 190;\n/**\n * @enum {number}\n */\nexport const AccessCard = 192;\n/**\n * @enum {number}\n */\nexport const SwitchOn = 194;\n/**\n * @enum {number}\n */\nexport const SwitchOff = 195;\n/**\n * @enum {number}\n */\nexport const Help = 200;\n/**\n * @enum {number}\n */\nexport const OkFill = 201;\n/**\n * @enum {number}\n */\nexport const Chime = 202;\n/**\n * @enum {number}\n */\nexport const Sound = 203;\n/**\n * @enum {number}\n */\nexport const FacialRecognition = 206;\n/**\n * @enum {number}\n */\nexport const FirmwareUpgrade = 207;\n/**\n * @enum {number}\n */\nexport const Login = 209;\n/**\n * @enum {number}\n */\nexport const Monitoring = 210;\n/**\n * @enum {number}\n */\nexport const VideoStream = 211;\n/**\n * @enum {number}\n */\nexport const Medical = 212;\n/**\n * @enum {number}\n */\nexport const Police = 214;\n/**\n * @enum {number}\n */\nexport const SmartGateway = 217;\n/**\n * @enum {number}\n */\nexport const Smoke = 218;\n/**\n * @enum {number}\n */\nexport const User = 222;\n/**\n * @enum {number}\n */\nexport const VideoRecord = 223;\n/**\n * @enum {number}\n */\nexport const AlarmCancelled = 225;\n/**\n * @enum {number}\n */\nexport const VideoIssue = 231;\n/**\n * @enum {number}\n */\nexport const Info = 233;\n/**\n * @enum {number}\n */\nexport const Phone = 234;\n/**\n * @enum {number}\n */\nexport const EnergyMonitoring = 238;\n/**\n * @enum {number}\n */\nexport const Circulate = 243;\n/**\n * @enum {number}\n */\nexport const Gate = 305;\n/**\n * @enum {number}\n */\nexport const FeatureSpeaker = 316;\n/**\n * @enum {number}\n */\nexport const Sensor = 317;\n/**\n * @enum {number}\n */\nexport const WaterSensor = 318;\n/**\n * @enum {number}\n */\nexport const Light = 319;\n/**\n * @enum {number}\n */\nexport const Garage = 320;\n/**\n * @enum {number}\n */\nexport const VideoSvr = 321;\n/**\n * @enum {number}\n */\nexport const Mobile = 324;\n/**\n * @enum {number}\n */\nexport const SceneSound = 327;\n/**\n * @enum {number}\n */\nexport const Siren = 332;\n/**\n * @enum {number}\n */\nexport const Shade = 341;\n/**\n * @enum {number}\n */\nexport const SceneButton = 342;\n/**\n * @enum {number}\n */\nexport const GunshotSensor = 360;\n/**\n * @enum {number}\n */\nexport const GunshotDetected = 361;\n/**\n * @enum {number}\n */\nexport const GunshotDetector = 362;\n/**\n * @enum {number}\n */\nexport const SecurityFogGenerator = 370;\n/**\n * @enum {number}\n */\nexport const TV = 400;\n/**\n * @enum {number}\n */\nexport const VoiceDevice = 401;\n/**\n * @enum {number}\n */\nexport const Wifi = 402;\n/**\n * @enum {number}\n */\nexport const SensorOpened = 404;\n/**\n * @enum {number}\n */\nexport const SensorClosed = 405;\n/**\n * @enum {number}\n */\nexport const WaterValveOpen = 406;\n/**\n * @enum {number}\n */\nexport const WaterValveClosed = 407;\n/**\n * @enum {number}\n */\nexport const AccessControlAccessPointDevice = 408;\n/**\n * @enum {number}\n */\nexport const Note = 411;\n/**\n * @enum {number}\n */\nexport const Microphone = 412;\n/**\n * @enum {number}\n */\nexport const Google = 413;\n/**\n * @enum {number}\n */\nexport const MotionActive = 414;\n/**\n * @enum {number}\n */\nexport const Ethernet = 415;\n/**\n * @enum {number}\n */\nexport const StatusBatteryCharging = 417;\n/**\n * @enum {number}\n */\nexport const Media = 418;\n/**\n * @enum {number}\n */\nexport const Tree = 419;\n/**\n * @enum {number}\n */\nexport const Refresh = 421;\n/**\n * @enum {number}\n */\nexport const PackageDelivery = 422;\n/**\n * @enum {number}\n */\nexport const PackageRetrieval = 423;\n/**\n * @enum {number}\n */\nexport const VideoCamera = 424;\n/**\n * @enum {number}\n */\nexport const SumpPumpRunning = 425;\n/**\n * @enum {number}\n */\nexport const WarningTriangle = 426;\n/**\n * @enum {number}\n */\nexport const AccessControlElevator = 429;\n/**\n * @enum {number}\n */\nexport const GenericPlay = 431;\n/**\n * @enum {number}\n */\nexport const GenericPause = 432;\n/**\n * @enum {number}\n */\nexport const ZWave = 445;\n/**\n * @enum {number}\n */\nexport const FeatureTour = 446;\n/**\n * @enum {number}\n */\nexport const ActionSheet = 448;\n/**\n * @enum {number}\n */\nexport const BluetoothDevice = 460;\n/**\n * @enum {number}\n */\nexport const MpersDevice = 504;\n/**\n * @enum {number}\n */\nexport const MpersLowBattery = 507;\n/**\n * @enum {number}\n */\nexport const VaGeneric = 510;\n/**\n * @enum {number}\n */\nexport const VaAnimal = 511;\n/**\n * @enum {number}\n */\nexport const VaVehicle = 512;\n/**\n * @enum {number}\n */\nexport const WaterMeterExtended = 513;\n/**\n * @enum {number}\n */\nexport const SumpPumpCriticalLowDef = 514;\n/**\n * @enum {number}\n */\nexport const WaterMeterExtendedLowDef = 515;\n/**\n * @enum {number}\n */\nexport const NotSet = -1;\n","/**\n * @module\n */\n\n/**\n * @type {Object.}\n */\nexport default {\n [0]: 'unknown',\n [1]: 'activity-event',\n [2]: 'panel',\n [3]: 'system',\n [4]: 'system-disarmed-hd',\n [5]: 'system-armed-stay-hd',\n [6]: 'system-armed-away-hd',\n [7]: 'system-armed-night-hd',\n [9]: 'sensor-open-hd',\n [10]: 'sensor-closed-hd',\n [11]: 'image-sensor',\n [12]: 'camera',\n [13]: 'background-capture',\n [14]: 'date-day',\n [15]: 'photo',\n [16]: 'upload',\n [17]: 'motion-action',\n [18]: 'motion-idle',\n [19]: 'water-sensor-wet-hd',\n [20]: 'water-sensor-dry-hd',\n [21]: 'water-valve-open-hd',\n [22]: 'water-valve-closed-hd',\n [23]: 'garage-closed-hd',\n [24]: 'garage-open-hd',\n [25]: 'button-press',\n [26]: 'doorbell',\n [27]: 'feature-video',\n [28]: 'lock',\n [29]: 'lock-unlocked-hd',\n [30]: 'lock-locked-hd',\n [31]: 'light-on',\n [32]: 'light-off',\n [33]: 'light-on-hd',\n [34]: 'light-off-hd',\n [35]: 'shade-open',\n [36]: 'shade-closed',\n [37]: 'thermostat',\n [38]: 'cool',\n [39]: 'heat',\n [40]: 'auto',\n [41]: 'fan-on',\n [42]: 'fan-off',\n [43]: 'humidity',\n [44]: 'remote-temperature',\n [45]: 'temperature',\n [46]: 'fire',\n [47]: 'quickbox',\n [48]: 'lutron-pico-hd',\n [49]: 'lutron-keypad-hd',\n [50]: 'lutron-keypad-hd',\n [51]: 'lutron-keypad-hd',\n [52]: 'lutron-pico-hd',\n [53]: 'lutron-pico-hd',\n [54]: 'geo-exit',\n [55]: 'geo-enter',\n [56]: 'location',\n [57]: 'sun-set',\n [58]: 'sun-rise',\n [59]: 'clock',\n [60]: 'alarm',\n [61]: 'battery-1',\n [62]: 'circle-dash',\n [63]: 'warning',\n [64]: 'issue',\n [65]: 'circle-o-check',\n [66]: 'email',\n [67]: 'tamper',\n [68]: 'w-cloud-sun',\n [69]: 'w-cloud',\n [70]: 'w-drizzle',\n [71]: 'w-fog',\n [72]: 'w-lightning',\n [73]: 'w-rain',\n [74]: 'w-sleet',\n [75]: 'w-snow',\n [76]: 'w-sun',\n [77]: 'w-thermometer-high',\n [78]: 'w-thermometer-low',\n [79]: 'w-wind',\n [80]: 'scenes-away',\n [81]: 'scenes-car',\n [82]: 'scenes-commercial-closed',\n [83]: 'scenes-commercial-open',\n [84]: 'scenes-commercial-occupied',\n [85]: 'scenes-daylight',\n [86]: 'scenes-default-icon',\n [87]: 'scenes-dinner',\n [88]: 'scenes-game',\n [89]: 'scenes-garage-closed',\n [90]: 'scenes-garage-open',\n [91]: 'scenes-generic-1',\n [92]: 'scenes-generic-2',\n [93]: 'scenes-generic-3',\n [94]: 'scenes-home',\n [95]: 'scenes-light-off',\n [96]: 'scenes-light-on',\n [97]: 'scenes-locked',\n [98]: 'scenes-movie',\n [99]: 'scenes-padlock-closed',\n [100]: 'scenes-padlock-open',\n [101]: 'scenes-party',\n [102]: 'scenes-pets',\n [103]: 'scenes-romantic',\n [104]: 'scenes-savings',\n [105]: 'scenes-security',\n [106]: 'scenes-sleep',\n [107]: 'scenes-study',\n [108]: 'scenes-thermostat',\n [109]: 'scenes-travel',\n [110]: 'scenes-wake-up',\n [111]: 'schedule',\n [112]: 'question-circle',\n [113]: 'user-control-plan',\n [114]: 'badge',\n [115]: 'car',\n [116]: 'schedule-custom',\n [117]: 'door-open',\n [118]: 'enterprise-open',\n [119]: 'enterprise-closed',\n [120]: 'desktop',\n [121]: 'garage-closed',\n [122]: 'circle',\n [123]: 'basket',\n [124]: 'chefhat',\n [125]: 'hammer',\n [126]: 'man',\n [127]: 'woman',\n [128]: 'stairs-down',\n [129]: 'stairs-up',\n [130]: 'truck',\n [131]: 'wheelchair',\n [132]: 'floor-1',\n [133]: 'floor-2',\n [134]: 'floor-3',\n [135]: 'floor-4',\n [136]: 'floor-5',\n [137]: 'floor-6',\n [138]: 'floor-7',\n [139]: 'floor-8',\n [140]: 'floor-9',\n [141]: 'floor-10',\n [142]: 'floor-11',\n [143]: 'floor-12',\n [144]: 'floor-13',\n [145]: 'floor-14',\n [146]: 'floor-15',\n [147]: 'floor-16',\n [148]: 'floor-17',\n [149]: 'floor-18',\n [150]: 'floor-19',\n [151]: 'floor-20',\n [152]: 'car-battery',\n [153]: 'car-battery-low',\n [154]: 'car-check-engine',\n [155]: 'car-unauthorized',\n [156]: 'car-fuel',\n [157]: 'car-fuel-low',\n [158]: 'car-acceleration',\n [159]: 'car-hard-brake',\n [160]: 'car-speed',\n [161]: 'user-control-open',\n [162]: 'car-start',\n [163]: 'car-stop',\n [164]: 'enterprise-open-color',\n [165]: 'enterprise-open-warning',\n [166]: 'enterprise-closed-warning',\n [167]: 'user-control-closed',\n [168]: 'user-control-buzz',\n [169]: 'user-control-access',\n [170]: 'user-control-denied',\n [171]: 'lutron',\n [172]: 'feature-garage',\n [173]: 'feature-water',\n [174]: 'feature-system',\n [175]: 'feature-locks',\n [176]: 'feature-lights',\n [177]: 'feature-thermostat',\n [178]: 'feature-home',\n [179]: 'gate-closed',\n [180]: 'lock',\n [181]: 'lock-unlocked',\n [182]: 'lock-locked',\n [183]: 'lock-unknown',\n [184]: 'system-disarmed',\n [185]: 'system-armed-stay',\n [186]: 'system-armed-away',\n [187]: 'system-armed-night',\n [188]: 'rectangle',\n [189]: 'line',\n [190]: 'garage-open',\n [191]: 'callout',\n [192]: 'access-card',\n [193]: 'user-control-open-hd',\n [194]: 'switch-on',\n [195]: 'switch-off',\n [196]: 'user-control-closed-hd',\n [200]: 'help',\n [201]: 'circle-check',\n [202]: 'sound',\n [203]: 'sound',\n [204]: 'battery-4',\n [205]: 'communication',\n [206]: 'facial-recognition',\n [207]: 'firmware-upgrade',\n [208]: 'glassbreak-active',\n [209]: 'login',\n [210]: 'monitoring',\n [211]: 'video-stream',\n [212]: 'medical',\n [213]: 'panic-silent',\n [214]: 'police',\n [215]: 'power-plug',\n [216]: 'sensor-bypass',\n [217]: 'smart-gateway',\n [218]: 'smoke-detector',\n [219]: 'sump-pump-critical-hd',\n [220]: 'tap-hold',\n [221]: 'thermostat-away',\n [222]: 'user',\n [223]: 'video-record',\n [224]: 'watermeter-leak',\n [225]: 'alarm-cancelled',\n [226]: 'ethernet-unplugged',\n [227]: 'ethernet-restored',\n [228]: 'power-disconnected',\n [229]: 'radio-issues',\n [230]: 'thermostats-issues',\n [231]: 'video-issue',\n [232]: 'video-issue-resolved',\n [233]: 'info',\n [234]: 'phone',\n [235]: 'scenes-shade-open',\n [236]: 'scenes-shade-closed',\n [237]: 'feature-wellness',\n [238]: 'energy-monitor',\n [239]: 'smart-gateway-offline',\n [240]: 'panic-general',\n [241]: 'sump-pump-idle-hd',\n [242]: 'va-person',\n [243]: 'fan-circulate',\n [300]: 'commercial-freezer',\n [301]: 'commercial-refrigerator',\n [302]: 'commercial-coldstorage',\n [303]: 'gate-closed-hd',\n [304]: 'gate-open-hd',\n [305]: 'gate',\n [306]: 'scenes-gate-open',\n [307]: 'scenes-gate-closed',\n [308]: 'driveway-active',\n [309]: 'driveway-idle',\n [310]: 'driveway-unknown',\n [311]: 'magnapull-open',\n [312]: 'magnapull-closed',\n [313]: 'magnapull-unknown',\n [314]: 'oil-sensor-full',\n [315]: 'oil-sensor-low',\n [316]: 'feature-speaker',\n [317]: 'sensor',\n [318]: 'water-sensor',\n [319]: 'light',\n [320]: 'garage',\n [321]: 'video-svr',\n [322]: 'feature-geo-services',\n [323]: 'feature-images',\n [324]: 'mobile',\n [325]: 'feature-speaker',\n [326]: 'circle-play',\n [327]: 'sound',\n [328]: 'sound-low',\n [329]: 'sound-mute',\n [330]: 'sound-off',\n [331]: 'water-meter-idle-hd',\n [332]: 'siren',\n [333]: 'siren-off',\n [334]: 'siren-on',\n [335]: 'mode-away',\n [336]: 'mode-home',\n [337]: 'noise-sensor-active',\n [338]: 'noise-sensor-idle',\n [339]: 'noise-sensor-offline',\n [340]: 'mode-sleep',\n [341]: 'shade',\n [342]: 'scene-button',\n [360]: 'gunshot-sensor',\n [361]: 'gunshot-detected',\n [362]: 'gunshot-detector',\n [370]: 'fog-shield',\n [390]: 'drone',\n [391]: 'drone-poi',\n [392]: 'drone-mission',\n [393]: 'hive',\n [400]: 'TV',\n [401]: 'feature-voice-control',\n [402]: 'wifi',\n [403]: 'circle-x',\n [404]: 'sensor-open',\n [405]: 'sensor-closed',\n [406]: 'water-valve-open',\n [407]: 'water-valve-closed',\n [408]: 'access-control-access-point-device',\n [409]: 'watering-small',\n [410]: 'feature-doorbell',\n [411]: 'note',\n [412]: 'mic',\n [413]: 'google',\n [414]: 'motion-active',\n [415]: 'ethernet',\n [416]: 'power',\n [417]: 'status-battery-charging',\n [418]: 'media',\n [419]: 'tree',\n [420]: 'sump-pump-running-critical',\n [421]: 'refresh',\n [422]: 'package-delivery',\n [423]: 'package-retrieval',\n [424]: 'video-camera',\n [425]: 'sumppump-running',\n [426]: 'warning-triangle',\n [427]: 'warning-triangle-2',\n [428]: 'battery-issue',\n [429]: 'user-control-elevator',\n [430]: 'sd-card',\n [431]: 'generic-play',\n [432]: 'generic-pause',\n [444]: 'keypad',\n [445]: 'zwave',\n [446]: 'feature-tour',\n [447]: 'cellular-sensor',\n [448]: 'actionsheet',\n [449]: 'bottomnav',\n [450]: 'tap',\n [451]: 'tap-release',\n [452]: 'tap-long',\n [453]: 'tap-2',\n [454]: 'tap-3',\n [455]: 'tap-4',\n [456]: 'tap-5',\n [460]: 'mobile',\n [500]: 'mpers-active',\n [501]: 'mpers-charging',\n [502]: 'mpers-panic',\n [503]: 'mpers-pending',\n [504]: 'mpers-device',\n [505]: 'mpers-fall',\n [506]: 'mpers-no-communication',\n [507]: 'mpers-low-battery',\n [508]: 'mpers-critical-battery',\n [509]: 'healthcheck',\n [510]: 'va-generic',\n [511]: 'va-animal',\n [512]: 'va-vehicle',\n [513]: 'water-meter-extended-hd',\n [514]: 'sumppump-critical',\n [515]: 'watermeter-extended',\n [999]: 'other-obj',\n [-1]: 'not-set'\n};\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const VeryLow = 1;\n/**\n * @enum {number}\n */\nexport const Low = 2;\n/**\n * @enum {number}\n */\nexport const Medium = 3;\n/**\n * @enum {number}\n */\nexport const High = 4;\n/**\n * @enum {number}\n */\nexport const VeryHigh = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ActivityAlert = 4;\n/**\n * @enum {number}\n */\nexport const DailyView = 8;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const TwoFactorAuthentication = 1;\n/**\n * @enum {number}\n */\nexport const MissingAgreements = 2;\n/**\n * @enum {number}\n */\nexport const SecurityQuestionSetup = 3;\n/**\n * @enum {number}\n */\nexport const UpdatePassword = 4;\n/**\n * @enum {number}\n */\nexport const EmailVerification = 5;\n/**\n * @enum {number}\n */\nexport const BillingInformation = 6;\n/**\n * @enum {number}\n */\nexport const CustomerMessages = 7;\n/**\n * @enum {number}\n */\nexport const NewsUpdates = 8;\n/**\n * @enum {number}\n */\nexport const ADTMigration = 9;\n/**\n * @enum {number}\n */\nexport const AmbientDownloadApp = 10;\n/**\n * @enum {number}\n */\nexport const InstallMode = 11;\n/**\n * @enum {number}\n */\nexport const CommunicationPreferences = 12;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Active = 1;\n/**\n * @enum {number}\n */\nexport const LoginScheduleInactive = 3;\n","export enum LightAlertOption {\n None = 0,\n FullFloodlightOnly = 1,\n FlashingFloodlightOnly = 2,\n AlarmLightOnly = 3,\n FullFloodlightAndAlarmLight = 4,\n FlashingFloodlightAndAlarmLight = 5,\n PulsingFloodlightAndAlarmLight = 6,\n FullSpotlight = 7,\n BlinkingSpotlight = 8,\n PulsingSpotlight = 9,\n SpoitlightOff = 10\n}\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const RGBW = 1;\n/**\n * @enum {number}\n */\nexport const RGB = 2;\n/**\n * @enum {number}\n */\nexport const WarmToCool = 3;\n/**\n * @enum {number}\n */\nexport const HSV = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Favorite = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Offline = 0;\n/**\n * @enum {number}\n */\nexport const NoState = 1;\n/**\n * @enum {number}\n */\nexport const On = 2;\n/**\n * @enum {number}\n */\nexport const Off = 3;\n/**\n * @enum {number}\n */\nexport const LevelChange = 4;\n\nexport type LightStatus =\n | typeof Offline\n | typeof NoState\n | typeof On\n | typeof Off\n | typeof LevelChange;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Commercial = 0;\n/**\n * @enum {number}\n */\nexport const STR = 1;\n/**\n * @enum {number}\n */\nexport const Energy = 2;\n/**\n * @enum {number}\n */\nexport const Wellness = 3;\n/**\n * @enum {number}\n */\nexport const SingleSystemDetail = 4;\n/**\n * @enum {number}\n */\nexport const CommercialTemperatures = 5;\n/**\n * @enum {number}\n */\nexport const Video = 6;\n/**\n * @enum {number}\n */\nexport const Fleet = 7;\n/**\n * @enum {number}\n */\nexport const PersonalSafety = 8;\n/**\n * @enum {number}\n */\nexport const DeviceAccess = 9;\n/**\n * @enum {number}\n */\nexport const Base = 10;\n/**\n * @enum {number}\n */\nexport const Water = 11;","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Locked = 1;\n/**\n * @enum {number}\n */\nexport const Unlocked = 2;\n/**\n * @enum {number}\n */\nexport const Hidden = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const GroupManagement = 0;\n/**\n * @enum {number}\n */\nexport const Users = 1;\n/**\n * @enum {number}\n */\nexport const Notifications = 2;\n/**\n * @enum {number}\n */\nexport const Logins = 3;\n/**\n * @enum {number}\n */\nexport const RemoteArming = 4;\n/**\n * @enum {number}\n */\nexport const LockControl = 5;\n/**\n * @enum {number}\n */\nexport const LightAndThermostatControl = 6;\n/**\n * @enum {number}\n */\nexport const LiveAndSavedVideo = 7;\n/**\n * @enum {number}\n */\nexport const SavedVideo = 8;\n/**\n * @enum {number}\n */\nexport const VideoCameras = 9;\n/**\n * @enum {number}\n */\nexport const ManageGroupsPage = 10;\n/**\n * @enum {number}\n */\nexport const ActivityPage = 11;\n/**\n * @enum {number}\n */\nexport const SettingsPage = 12;\n/**\n * @enum {number}\n */\nexport const LocationsPage = 13;\n/**\n * @enum {number}\n */\nexport const CentralStation = 14;\n/**\n * @enum {number}\n */\nexport const UnattendedShowingManagement = 15;\n/**\n * @enum {number}\n */\nexport const GarageDoorControl = 16;\n/**\n * @enum {number}\n */\nexport const ScenesControl = 17;\n/**\n * @enum {number}\n */\nexport const ViewImages = 18;\n/**\n * @enum {number}\n */\nexport const RequestImages = 19;\n/**\n * @enum {number}\n */\nexport const ManageImageSensorSettings = 20;\n/**\n * @enum {number}\n */\nexport const AddDevicePortal = 21;\n/**\n * @enum {number}\n */\nexport const ReportsPage = 22;\n/**\n * @enum {number}\n */\nexport const Vehicles = 23;\n/**\n * @enum {number}\n */\nexport const PointCentralUniversity = 24;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const UsersFull = 2;\n/**\n * @enum {number}\n */\nexport const UsersViewEdit = 3;\n/**\n * @enum {number}\n */\nexport const UsersReadOnly = 4;\n/**\n * @enum {number}\n */\nexport const UsersCustom = 5;\n/**\n * @enum {number}\n */\nexport const NotificationsReadOnly = 7;\n/**\n * @enum {number}\n */\nexport const RemoteArming = 12;\n/**\n * @enum {number}\n */\nexport const AddDevicePortal = 39;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const IsLoginAsLoginRep = 0;\n/**\n * @enum {number}\n */\nexport const IsOvReadyLogin = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Custom = 0;\n/**\n * @enum {number}\n */\nexport const Administrator = 1;\n/**\n * @enum {number}\n */\nexport const MasterControl = 2;\n/**\n * @enum {number}\n */\nexport const FullControl = 3;\n/**\n * @enum {number}\n */\nexport const ReadOnly = 4;\n/**\n * @enum {number}\n */\nexport const Manager = 5;\n/**\n * @enum {number}\n */\nexport const Vendor = 6;\n/**\n * @enum {number}\n */\nexport const Reservations = 7;\n/**\n * @enum {number}\n */\nexport const FrontDesk = 8;\n/**\n * @enum {number}\n */\nexport const Owner = 9;\n/**\n * @enum {number}\n */\nexport const MobileAppAsKeyLogin = 10;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SingleSystem = 1;\n/**\n * @enum {number}\n */\nexport const Enterprise = 2;\n/**\n * @enum {number}\n */\nexport const Rep = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Bright = 1;\n/**\n * @enum {number}\n */\nexport const Twilight = 2;\n/**\n * @enum {number}\n */\nexport const Dark = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Audio = 0;\n/**\n * @enum {number}\n */\nexport const Cars = 1;\n/**\n * @enum {number}\n */\nexport const GaragesAndGates = 3;\n/**\n * @enum {number}\n */\nexport const Lights = 4;\n/**\n * @enum {number}\n */\nexport const Locks = 5;\n/**\n * @enum {number}\n */\nexport const MobileDevices = 6;\n/**\n * @enum {number}\n */\nexport const Other = 7;\n/**\n * @enum {number}\n */\nexport const Security = 8;\n/**\n * @enum {number}\n */\nexport const Thermostats = 10;\n/**\n * @enum {number}\n */\nexport const VideoDevices = 11;\n/**\n * @enum {number}\n */\nexport const VoiceAssistance = 12;\n/**\n * @enum {number}\n */\nexport const Doors = 13;\n/**\n * @enum {number}\n */\nexport const Water = 14;\n/**\n * @enum {number}\n */\nexport const WiFi = 15;\n/**\n * @enum {number}\n */\nexport const SecurityFogGenerator = 17;\n/**\n * @enum {number}\n */\nexport const Remotes = 19;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ReadyToAssociate = 100;\n/**\n * @enum {number}\n */\nexport const AssociatedDevices = 101;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Arming = 1;\n/**\n * @enum {number}\n */\nexport const VideoAndImages = 2;\n/**\n * @enum {number}\n */\nexport const LoginManagement = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = -1;\n/**\n * @enum {number}\n */\nexport const AccessControlDoor = 1;\n/**\n * @enum {number}\n */\nexport const AudioDevice = 2;\n/**\n * @enum {number}\n */\nexport const CarMonitor = 3;\n/**\n * @enum {number}\n */\nexport const Detector = 4;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 5;\n/**\n * @enum {number}\n */\nexport const Gate = 6;\n/**\n * @enum {number}\n */\nexport const ImageSensor = 7;\n/**\n * @enum {number}\n */\nexport const Light = 8;\n/**\n * @enum {number}\n */\nexport const Lock = 9;\n/**\n * @enum {number}\n */\nexport const MobileDevice = 10;\n/**\n * @enum {number}\n */\nexport const MPERS = 11;\n/**\n * @enum {number}\n */\nexport const NoiseSensor = 12;\n/**\n * @enum {number}\n */\nexport const Partition = 13;\n/**\n * @enum {number}\n */\nexport const Sensor = 14;\n/**\n * @enum {number}\n */\nexport const ShadeAndShutter = 15;\n/**\n * @enum {number}\n */\nexport const SmartChimeDevice = 16;\n/**\n * @enum {number}\n */\nexport const TemperatureSensor = 17;\n/**\n * @enum {number}\n */\nexport const Thermostat = 18;\n/**\n * @enum {number}\n */\nexport const VideoDevice = 19;\n/**\n * @enum {number}\n */\nexport const VoiceAssistanceDevice = 20;\n/**\n * @enum {number}\n */\nexport const WaterSensor = 21;\n/**\n * @enum {number}\n */\nexport const WaterValve = 22;\n/**\n * @enum {number}\n */\nexport const WaterMeter = 23;\n/**\n * @enum {number}\n */\nexport const WiFiRouter = 24;\n/**\n * @enum {number}\n */\nexport const GunShotSensor = 25;\n/**\n * @enum {number}\n */\nexport const SecurityFogGenerator = 26;\n/**\n * @enum {number}\n */\nexport const Remote = 28;\n/**\n * @enum {number}\n */\nexport const BluetoothDevice = 29;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Indefinite = 0;\n/**\n * @enum {number}\n */\nexport const TwoSeconds = 2;\n/**\n * @enum {number}\n */\nexport const QuarterMinute = 15;\n/**\n * @enum {number}\n */\nexport const HalfMinute = 30;\n/**\n * @enum {number}\n */\nexport const Minute = 60;\n/**\n * @enum {number}\n */\nexport const FiveMinute = 300;\n/**\n * @enum {number}\n */\nexport const QuarterHour = 900;\n/**\n * @enum {number}\n */\nexport const HalfHour = 1800;\n\nexport type ManuallyTriggeredLightsDuration =\n | typeof Indefinite\n | typeof TwoSeconds\n | typeof QuarterMinute\n | typeof HalfMinute\n | typeof Minute\n | typeof FiveMinute\n | typeof QuarterHour\n | typeof HalfHour;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const DefaultOperatingMode = 0;\n/**\n * @enum {number}\n */\nexport const LockdownOperatingMode = 1;\n/**\n * @enum {number}\n */\nexport const RestrictedAccessOperatingMode = 2;\n/**\n * @enum {number}\n */\nexport const Unknown = 255;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Rule = 0;\n/**\n * @enum {number}\n */\nexport const Trigger = 1;\n/**\n * @enum {number}\n */\nexport const Action = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const InvitationSent = 0;\n/**\n * @enum {number}\n */\nexport const InvitationExpired = 1;\n/**\n * @enum {number}\n */\nexport const NotInvited = -1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const IPhone = 1;\n/**\n * @enum {number}\n */\nexport const Android = 2;\n/**\n * @enum {number}\n */\nexport const Web = 4;\n/**\n * @enum {number}\n */\nexport const PointCentral = 5;\n/**\n * @enum {number}\n */\nexport const AmazonAlexa = 8;\n/**\n * @enum {number}\n */\nexport const ThirdParty = 10;\n/**\n * @enum {number}\n */\nexport const GoogleAssistant = 11;\n/**\n * @enum {number}\n */\nexport const GC3 = 15;\n/**\n * @enum {number}\n */\nexport const RGP = 19;\n/**\n * @enum {number}\n */\nexport const WSA = 20;\n/**\n * @enum {number}\n */\nexport const NotSet = -1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Cleaned = 0;\n/**\n * @enum {number}\n */\nexport const Inspected = 1;\n/**\n * @enum {number}\n */\nexport const Occupied = 2;\n/**\n * @enum {number}\n */\nexport const Vacant = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Success = 0;\n/**\n * @enum {number}\n */\nexport const Failure = 1;\n/**\n * @enum {number}\n */\nexport const Running = 2;\n/**\n * @enum {number}\n */\nexport const NotInstalled = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NoMotionDetection = 0;\n/**\n * @enum {number}\n */\nexport const StandardMotionDetection = 1;\n/**\n * @enum {number}\n */\nexport const DeepMotionDetection = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Version1 = 1;\n/**\n * @enum {number}\n */\nexport const Version2 = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = -1;\n/**\n * @enum {number}\n */\nexport const VeryLow = 0;\n/**\n * @enum {number}\n */\nexport const Low = 1;\n/**\n * @enum {number}\n */\nexport const Medium = 2;\n/**\n * @enum {number}\n */\nexport const High = 3;\n/**\n * @enum {number}\n */\nexport const VeryHigh = 4;\n/**\n * @enum {number}\n */\nexport const ExtremelyHigh = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unregistered = 0;\n/**\n * @enum {number}\n */\nexport const Active = 1;\n/**\n * @enum {number}\n */\nexport const Charging = 2;\n/**\n * @enum {number}\n */\nexport const Panic = 3;\n/**\n * @enum {number}\n */\nexport const FallDetected = 4;\n/**\n * @enum {number}\n */\nexport const NoCommunication = 5;\n/**\n * @enum {number}\n */\nexport const LowBattery = 6;\n/**\n * @enum {number}\n */\nexport const CriticalBattery = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Initialize = 1;\n/**\n * @enum {number}\n */\nexport const GoBack = 5;\n/**\n * @enum {number}\n */\nexport const RefreshWebView = 7;\n/**\n * @enum {number}\n */\nexport const ReloadAssociatedSystems = 8;\n/**\n * @enum {number}\n */\nexport const LaunchShareActionDialog = 9;\n/**\n * @enum {number}\n */\nexport const TransitionToNativeView = 10;\n/**\n * @enum {number}\n */\nexport const CloseWebView = 11;\n/**\n * @enum {number}\n */\nexport const LaunchBrowser = 13;\n/**\n * @enum {number}\n */\nexport const CloseWebViewV2 = 14;\n/**\n * @enum {number}\n */\nexport const LaunchNewContext = 16;\n/**\n * @enum {number}\n */\nexport const EnablePushNotifications = 18;\n/**\n * @enum {number}\n */\nexport const EnableBluetooth = 19;\n/**\n * @enum {number}\n */\nexport const CheckBluetoothPermissions = 20;\n/**\n * @enum {number}\n */\nexport const StartBleAdvertising = 21;\n/**\n * @enum {number}\n */\nexport const StopBleAdvertising = 22;","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Duress = -2;\n/**\n * @enum {number}\n */\nexport const General = -1;\n","/**\n * @module\n */\n/**\n * No audio capabilities\n */\nexport const None = 0;\n\n/**\n * The camera has/is connected to a microphone\n */\nexport const HasMicrophone = 1;\n\n/**\n * The camera has/is connected to a speaker\n */\nexport const HasSpeaker = 2;\n\n/**\n * The camera has/is connected to both a microphone and a speaker\n */\nexport const HasSpeakerAndMic = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const High = 1;\n/**\n * @enum {number}\n */\nexport const Medium = 2;\n/**\n * @enum {number}\n */\nexport const Low = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ExplicitCredentials = 0;\n/**\n * @enum {number}\n */\nexport const ManufacturerDefaults = 1;\n/**\n * @enum {number}\n */\nexport const StoredOrManufacturerDefaults = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const InsufficientPermission = 0;\n/**\n * @enum {number}\n */\nexport const DeviceNotFound = 1;\n/**\n * @enum {number}\n */\nexport const ResponseFailed = 2;\n","export const OperatorPortalRoutes = ['operator.personal-safety'];\n\nexport const OperatorLandingPageRoute = 'operator.select-alarm';\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const GroundZone = 0;\n/**\n * @enum {number}\n */\nexport const Tripwire = 1;\n/**\n * @enum {number}\n */\nexport const LineMonitor = 3;\n/**\n * @enum {number}\n */\nexport const LineCount = 4;\n/**\n * @enum {number}\n */\nexport const Heatmap = 5;\n/**\n * @enum {number}\n */\nexport const PersonDetection = 6;\n/**\n * @enum {number}\n */\nexport const BusinessOccupancy = 7;\n/**\n * @enum {number}\n */\nexport const CrowdGathering = 8;\n/**\n * @enum {number}\n */\nexport const DoorbellChime = 9;\n/**\n * @enum {number}\n */\nexport const ThirdPartyAnalytics = 10;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const Concord = 1;\n/**\n * @enum {number}\n */\nexport const Simon = 2;\n/**\n * @enum {number}\n */\nexport const NX = 3;\n/**\n * @enum {number}\n */\nexport const IQPanel = 9;\n/**\n * @enum {number}\n */\nexport const Neo = 14;\n/**\n * @enum {number}\n */\nexport const HxGW = 19;\n/**\n * @enum {number}\n */\nexport const Vario = 21;\n/**\n * @enum {number}\n */\nexport const Command = 24;\n/**\n * @enum {number}\n */\nexport const W115C = 32;\n/**\n * @enum {number}\n */\nexport const IQRouter = 38;\n/**\n * @enum {number}\n */\nexport const IQRouter2 = 41;\n/**\n * @enum {number}\n */\nexport const EBSLX = 48;\n/**\n * @enum {number}\n */\nexport const W114C = 51;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const ShortBeep = 1;\n/**\n * @enum {number}\n */\nexport const LongBeep = 2;\n/**\n * @enum {number}\n */\nexport const Whistle = 3;\n/**\n * @enum {number}\n */\nexport const SingleSiren = 4;\n/**\n * @enum {number}\n */\nexport const SingleSiren2 = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Home = 1;\n/**\n * @enum {number}\n */\nexport const Work = 2;\n/**\n * @enum {number}\n */\nexport const Mobile = 3;\n/**\n * @enum {number}\n */\nexport const Other = 4;\n/**\n * @enum {number}\n */\nexport const Unknown = -1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotificationsOnly = 0;\n/**\n * @enum {number}\n */\nexport const Manager = 1;\n/**\n * @enum {number}\n */\nexport const Other = 3;\n/**\n * @enum {number}\n */\nexport const Vendor = 5;\n/**\n * @enum {number}\n */\nexport const Contractor = 6;\n/**\n * @enum {number}\n */\nexport const Guest = 7;\n/**\n * @enum {number}\n */\nexport const Employee = 8;\n/**\n * @enum {number}\n */\nexport const Owner = 9;\n/**\n * @enum {number}\n */\nexport const Cleaning = 10;\n/**\n * @enum {number}\n */\nexport const Inspection = 11;\n/**\n * @enum {number}\n */\nexport const Maintenance = 12;\n/**\n * @enum {number}\n */\nexport const MasterCodeUser = 15;\n/**\n * @enum {number}\n */\nexport const Unknown = 16;\n/**\n * @enum {number}\n */\nexport const BackupCode = 17;\n/**\n * @enum {number}\n */\nexport const WorkOrder = 18;\n/**\n * @enum {number}\n */\nexport const ProspectiveResident = 19;\n/**\n * @enum {number}\n */\nexport const Resident = 25;\n/**\n * @enum {number}\n */\nexport const PreloadedCodeInactive = 31;\n/**\n * @enum {number}\n */\nexport const RequestedCode = 32;\n/**\n * @enum {number}\n */\nexport const System = 33;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const AC = 1;\n/**\n * @enum {number}\n */\nexport const DC = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Success = 0;\n/**\n * @enum {number}\n */\nexport const Warning = 1;\n/**\n * @enum {number}\n */\nexport const Failure = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Away = 1;\n/**\n * @enum {number}\n */\nexport const Home = 2;\n/**\n * @enum {number}\n */\nexport const Sleep = 3;\n","/**\n * @module\n */\nenum ProgrammingCodeState{\n /**\n * @enum {number}\n */\n Hidden = 0,\n /**\n * @enum {number}\n */\n Revealed = 1,\n /**\n * @enum {number}\n */\n NewLock = 2,\n /**\n * @enum {number}\n */\n Error = 3\n}\n\nexport default ProgrammingCodeState;","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotProjected = 0;\n/**\n * @enum {number}\n */\nexport const ProjectedVideoQuotaAlertMild = 1;\n/**\n * @enum {number}\n */\nexport const ProjectedVideoQuotaAlertSevere = 2;\n/**\n * @enum {number}\n */\nexport const OverQuota = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const SingleFamilyHouse = 1;\n/**\n * @enum {number}\n */\nexport const Townhouse = 2;\n/**\n * @enum {number}\n */\nexport const Condo = 3;\n/**\n * @enum {number}\n */\nexport const Business = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Panel = 1;\n/**\n * @enum {number}\n */\nexport const Remote = 2;\n/**\n * @enum {number}\n */\nexport const Camera = 3;\n/**\n * @enum {number}\n */\nexport const Doorbell = 4;\n/**\n * @enum {number}\n */\nexport const Hub = 5;\n/**\n * @enum {number}\n */\nexport const Lock = 6;\n/**\n * @enum {number}\n */\nexport const Phone = 7;\n/**\n * @enum {number}\n */\nexport const Speaker = 9;\n/**\n * @enum {number}\n */\nexport const AccessPoint = 10;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 14;\n/**\n * @enum {number}\n */\nexport const Thermostat = 15;\n/**\n * @enum {number}\n */\nexport const Svr = 16;\n/**\n * @enum {number}\n */\nexport const Sensor = 17;\n/**\n * @enum {number}\n */\nexport const Refrigerator = 18;\n/**\n * @enum {number}\n */\nexport const SmartPhone = 19;\n/**\n * @enum {number}\n */\nexport const Tablet = 20;\n/**\n * @enum {number}\n */\nexport const Computer = 21;\n/**\n * @enum {number}\n */\nexport const Media = 23;\n/**\n * @enum {number}\n */\nexport const Av = 24;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Occupied = 1;\n/**\n * @enum {number}\n */\nexport const Reserved = 4;\n/**\n * @enum {number}\n */\nexport const Green = 7;\n/**\n * @enum {number}\n */\nexport const Orange = 10;\n/**\n * @enum {number}\n */\nexport const Red = 13;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Other = 0;\n/**\n * @enum {number}\n */\nexport const MobileApp = 3;\n/**\n * @enum {number}\n */\nexport const SmartTV = 4;\n/**\n * @enum {number}\n */\nexport const VoiceDevice = 5;\n/**\n * @enum {number}\n */\nexport const Tablet = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Disarmed = 1;\n/**\n * @enum {number}\n */\nexport const ArmedStay = 2;\n/**\n * @enum {number}\n */\nexport const GeoFence = 4;\n/**\n * @enum {number}\n */\nexport const External = 8;\n/**\n * @enum {number}\n */\nexport const PresenceStateHome = 16;\n/**\n * @enum {number}\n */\nexport const PresenceStateSleep = 32;\n/**\n * @enum {number}\n */\nexport const PresenceStateAway = 64;\n/**\n * @enum {number}\n */\nexport const ArmedAway = 128;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Continuous = 1;\n/**\n * @enum {number}\n */\nexport const Motion = 2;\n/**\n * @enum {number}\n */\nexport const Gap = 4;\n/**\n * @enum {number}\n */\nexport const Restricted = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const UserScheduledPause = 1;\n/**\n * @enum {number}\n */\nexport const OverQuota = 2;\n/**\n * @enum {number}\n */\nexport const DataCapExceeded = 3;\n","/**\n * @module\n */\n\n/**\n * Enum for relative directions. Used for PTZ\n */\nexport enum RelativeDirection {\n Up = 0,\n Down = 1,\n Left = 2,\n Right = 3,\n In = 4,\n Out = 5,\n Reset = 6\n}\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Idle = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const LTR = 1;\n/**\n * @enum {number}\n */\nexport const STR = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Pdf = 1;\n/**\n * @enum {number}\n */\nexport const Csv = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const LastDay = 0;\n/**\n * @enum {number}\n */\nexport const LastWeek = 1;\n/**\n * @enum {number}\n */\nexport const LastMonth = 2;\n/**\n * @enum {number}\n */\nexport const Today = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NoValidationIssue = 0;\n/**\n* @enum {number}\n*/\nexport const NoRecipientsSelected = 1;\n/**\n * @enum {number}\n */\nexport const NoUnitsWithBusinessHours = 2;\n/**\n * @enum {number}\n */\nexport const SomeUnitsWithBusinessHours = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Highest = 0;\n/**\n * @enum {number}\n */\nexport const High = 1;\n/**\n * @enum {number}\n */\nexport const Medium = 2;\n/**\n * @enum {number}\n */\nexport const Low = 3;\n/**\n * @enum {number}\n */\nexport const HD = 4;\n/**\n * @enum {number}\n */\nexport const VGA = 5;\n/**\n * @enum {number}\n */\nexport const QVGA = 6;\n/**\n * @enum {number}\n */\nexport const QQVGA = 7;\n/**\n * @enum {number}\n */\nexport const FHD = 8;\n/**\n * @enum {number}\n */\nexport const FourMP = 9;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const DynamicMappedResolutions = 1;\n/**\n * @enum {number}\n */\nexport const QualityOnly = 2;\n/**\n * @enum {number}\n */\nexport const ResolutionOnlyChangeStreamSetting = 3;\n/**\n * @enum {number}\n */\nexport const ResolutionOnlyChangeStreamSettingV2 = 4;\n/**\n * @enum {number}\n */\nexport const ResolutionOnlyChangeStreamId = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ScheduleRestriction = 0;\n","/**\n * @module\n */\n\nexport enum RuleArmingStatusEnum {\n None = 0,\n Armed = 1,\n Off = 2,\n OverQuota = 3,\n Paused = 4,\n OutOfSchedule = 5,\n OutOfVacationWatch = 6,\n Exception = 7,\n Disarmed = 99\n}\n\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SvrRecordingSchedule = 35;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const EventTriggered = 1;\n/**\n * @enum {number}\n */\nexport const LightSchedule = 2;\n/**\n * @enum {number}\n */\nexport const ImageSensor = 3;\n/**\n * @enum {number}\n */\nexport const Thermostat = 4;\n/**\n * @enum {number}\n */\nexport const ThermostatSchedule = 5;\n/**\n * @enum {number}\n */\nexport const VideoSchedule = 6;\n/**\n * @enum {number}\n */\nexport const VideoLocalSchedule = 7;\n/**\n * @enum {number}\n */\nexport const VideoRule = 8;\n/**\n * @enum {number}\n */\nexport const AccessControlLockUnlockSchedule = 9;\n/**\n * @enum {number}\n */\nexport const Chime = 10;\n/**\n * @enum {number}\n */\nexport const ShadeSchedule = 11;\n/**\n * @enum {number}\n */\nexport const BusinessActivityAnalytics = 12;\n/**\n * @enum {number}\n */\nexport const AccessControl = 13;\n/**\n * @enum {number}\n */\nexport const EmberRulesBuilderRules = 14;\n/**\n * @enum {number}\n */\nexport const WifiSchedule = 15;\n/**\n * @enum {number}\n */\nexport const EmberScheduleBuilder = 16;","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Alarms = 1;\n/**\n * @enum {number}\n */\nexport const Arming = 2;\n/**\n * @enum {number}\n */\nexport const Doorbells = 3;\n/**\n * @enum {number}\n */\nexport const DoorWindowSensors = 4;\n/**\n * @enum {number}\n */\nexport const GarageDoors = 5;\n/**\n * @enum {number}\n */\nexport const GeoFences = 6;\n/**\n * @enum {number}\n */\nexport const ImageSensors = 7;\n/**\n * @enum {number}\n */\nexport const Keypads = 8;\n/**\n * @enum {number}\n */\nexport const Lights = 9;\n/**\n * @enum {number}\n */\nexport const Locks = 10;\n/**\n * @enum {number}\n */\nexport const Motion = 11;\n/**\n * @enum {number}\n */\nexport const Picos = 12;\n/**\n * @enum {number}\n */\nexport const Quickbox = 13;\n/**\n * @enum {number}\n */\nexport const Scenes = 14;\n/**\n * @enum {number}\n */\nexport const Shades = 15;\n/**\n * @enum {number}\n */\nexport const TemperatureSensors = 16;\n/**\n * @enum {number}\n */\nexport const Thermostats = 17;\n/**\n * @enum {number}\n */\nexport const VideoCameras = 18;\n/**\n * @enum {number}\n */\nexport const Water = 19;\n/**\n * @enum {number}\n */\nexport const VideoLocalSchedule = 21;\n/**\n * @enum {number}\n */\nexport const Chimes = 23;\n/**\n * @enum {number}\n */\nexport const Gates = 24;\n/**\n * @enum {number}\n */\nexport const Sirens = 25;\n/**\n * @enum {number}\n */\nexport const Wifi = 27;\n/**\n * @enum {number}\n */\nexport const Remotes = 28;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Deployed = 1;\n/**\n * @enum {number}\n */\nexport const Scheduled = 2;\n/**\n * @enum {number}\n */\nexport const Deploying = 3;\n/**\n * @enum {number}\n */\nexport const Idle = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const VMD = 1;\n/**\n * @enum {number}\n */\nexport const EventTrigger = 2;\n/**\n * @enum {number}\n */\nexport const Person = 4;\n/**\n * @enum {number}\n */\nexport const Animal = 8;\n/**\n * @enum {number}\n */\nexport const Vehicle = 16;\n/**\n * @enum {number}\n */\nexport const Other = 32;\n/**\n * @enum {number}\n */\nexport const ViewedByCentralStation = 64;\n/**\n * @enum {number}\n */\nexport const Unprotected = 128;\n/**\n * @enum {number}\n */\nexport const Protected = 256;\n/**\n * @enum {number}\n */\nexport const Deleted = 512;\n/**\n * @enum {number}\n */\nexport const DeliveryVehicle = 1024;\n/**\n * @enum {number}\n */\nexport const AnyUnfamiliarVehicle = 2048;\n/**\n * @enum {number}\n */\nexport const SpecificFamiliarVehicle = 4096;\n/**\n * @enum {number}\n */\nexport const UserSelected = 16384;\n/**\n * @enum {number}\n */\nexport const ThirdPartyAnalytics = 32768;\n/**\n * @enum {number}\n */\nexport const AnyFamiliarFace = 65536;\n/**\n * @enum {number}\n */\nexport const SpecificFamiliarFace = 131072;\n/**\n * @enum {number}\n */\nexport const AnyUnfamiliarFace = 262144;\n/**\n * @enum {number}\n */\nexport const Package = 2097152;\n/**\n * @enum {number}\n */\nexport const UnrecognizedPerson = 4194304;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SinglePress = 0;\n/**\n * @enum {number}\n */\nexport const KeyReleased = 1;\n/**\n * @enum {number}\n */\nexport const KeyHeldDown = 2;\n/**\n * @enum {number}\n */\nexport const DoublePress = 3;\n/**\n * @enum {number}\n */\nexport const TriplePress = 4;\n/**\n * @enum {number}\n */\nexport const QuadruplePress = 5;\n/**\n * @enum {number}\n */\nexport const QuintuplePress = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Confirmed = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const HalfArmAwaySchedule = 30;\n/**\n * @enum {number}\n */\nexport const HalfArmStaySchedule = 31;\n/**\n * @enum {number}\n */\nexport const Supervision = 35;\n/**\n * @enum {number}\n */\nexport const HalfDisarmSchedule = 39;\n/**\n * @enum {number}\n */\nexport const HybridArmingSchedule = 40;\n/**\n * @enum {number}\n */\nexport const HalfNightSchedule = 41;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NoSchedule = 0;\n/**\n * @enum {number}\n */\nexport const Paused = 1;\n/**\n * @enum {number}\n */\nexport const OutsideActiveTimes = 2;\n/**\n * @enum {number}\n */\nexport const NotRecording = 3;\n/**\n * @enum {number}\n */\nexport const Recording = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Low = 0;\n/**\n * @enum {number}\n */\nexport const Medium = 1;\n/**\n * @enum {number}\n */\nexport const High = 2;\n/**\n * @enum {number}\n */\nexport const Higher = 3;\n/**\n * @enum {number}\n */\nexport const FourMP = 4;\n/**\n * @enum {number}\n */\nexport const FourMPHigherFrameRate = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SingleDevice = 0;\n/**\n * @enum {number}\n */\nexport const MultipleDevices = 1;\n/**\n * @enum {number}\n */\nexport const Scene = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 1;\n/**\n * @enum {number}\n */\nexport const None = 2;\n/**\n * @enum {number}\n */\nexport const Tokens = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Temperature = 1;\n/**\n * @enum {number}\n */\nexport const Power = 4;\n/**\n * @enum {number}\n */\nexport const Direction = 7;\n/**\n * @enum {number}\n */\nexport const Weight = 14;\n/**\n * @enum {number}\n */\nexport const Voltage = 15;\n/**\n * @enum {number}\n */\nexport const Current = 16;\n/**\n * @enum {number}\n */\nexport const AirFlow = 18;\n/**\n * @enum {number}\n */\nexport const Distance = 20;\n/**\n * @enum {number}\n */\nexport const WaterTemperature = 23;\n/**\n * @enum {number}\n */\nexport const Loudness = 30;\n/**\n * @enum {number}\n */\nexport const Frequency = 32;\n/**\n * @enum {number}\n */\nexport const Time = 33;\n/**\n * @enum {number}\n */\nexport const HeartRate = 44;\n/**\n * @enum {number}\n */\nexport const ParticulateMatter1 = 86;\n/**\n * @enum {number}\n */\nexport const Fuel = 256;\n/**\n * @enum {number}\n */\nexport const Speed = 257;\n/**\n * @enum {number}\n */\nexport const Acceleration = 258;\n/**\n * @enum {number}\n */\nexport const RPM = 261;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Closed = 1;\n/**\n * @enum {number}\n */\nexport const Open = 2;\n/**\n * @enum {number}\n */\nexport const Idle = 3;\n/**\n * @enum {number}\n */\nexport const Active = 4;\n/**\n * @enum {number}\n */\nexport const Dry = 5;\n/**\n * @enum {number}\n */\nexport const Wet = 6;\n/**\n * @enum {number}\n */\nexport const Full = 7;\n/**\n * @enum {number}\n */\nexport const Low = 8;\n/**\n * @enum {number}\n */\nexport const OpenedClosed = 9;\n/**\n * @enum {number}\n */\nexport const Issue = 10;\n/**\n * @enum {number}\n */\nexport const Ok = 11;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Other = 0;\n/**\n * @enum {number}\n */\nexport const Heating = 1;\n/**\n * @enum {number}\n */\nexport const AC = 2;\n/**\n * @enum {number}\n */\nexport const Water = 3;\n/**\n * @enum {number}\n */\nexport const Video = 4;\n/**\n * @enum {number}\n */\nexport const Locks = 5;\n/**\n * @enum {number}\n */\nexport const Garage = 6;\n/**\n * @enum {number}\n */\nexport const Lights = 7;\n/**\n * @enum {number}\n */\nexport const Security = 8;\n/**\n * @enum {number}\n */\nexport const Thermostat = 9;\n","/**\n * @module\n */\n\nexport default {\n [0]: 'Other',\n [1]: 'Heating',\n [2]: 'AC',\n [3]: 'Water',\n [4]: 'Video',\n [5]: 'Locks',\n [6]: 'Garage',\n [7]: 'Lights',\n [8]: 'Security',\n [9]: 'Thermostat'\n};\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Ok = 10;\n/**\n * @enum {number}\n */\nexport const Warning = 20;\n/**\n * @enum {number}\n */\nexport const Issue = 30;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Offline = 0;\n/**\n * @enum {number}\n */\nexport const Closed = 1;\n/**\n * @enum {number}\n */\nexport const Open = 2;\n/**\n * @enum {number}\n */\nexport const Changed = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const NoSignal = 1;\n/**\n * @enum {number}\n */\nexport const Poor = 2;\n/**\n * @enum {number}\n */\nexport const Good = 3;\n/**\n * @enum {number}\n */\nexport const Excellent = 4;\n\nexport type SignalStrength = typeof Unknown | typeof NoSignal | typeof Poor | typeof Good | typeof Excellent;\n","/**\n * @module SmartCoverageDiscountType An enum set for the Smart Coverage device type to apply to discounts.\n */\n\nenum SmartCoverageDiscountType {\n None = 0,\n Security = 1,\n Fire = 2,\n WaterShutoffValve = 3,\n ShooterDetectionSystem = 4,\n WaterSensor = 5\n}\nexport default SmartCoverageDiscountType;\n","/**\n * @module SmartCoveragePolicyType An enum set for the Smart Coverage policy type.\n */\n\nenum SmartCoveragePolicyType {\n None = 0,\n Commercial = 1,\n Residential = 2\n}\n\nexport default SmartCoveragePolicyType;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Home = 1;\n/**\n * @enum {number}\n */\nexport const Away = 2;\n/**\n * @enum {number}\n */\nexport const Sleep = 3;\n/**\n * @enum {number}\n */\nexport const AwayToHome = 4;\n/**\n * @enum {number}\n */\nexport const HomeToAway = 5;\n/**\n * @enum {number}\n */\nexport const Disabled = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Past = 0;\n/**\n * @enum {number}\n */\nexport const Present = 1;\n/**\n * @enum {number}\n */\nexport const Future = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Minimum = 10;\n/**\n * @enum {number}\n */\nexport const Best = 20;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const IsUser = 1;\n/**\n * @enum {number}\n */\nexport const IsNotUser = 2;\n/**\n * @enum {number}\n */\nexport const Invalid = 3;\n","/**\n * @module SourceOfCustomer: An enum set for where a Smart Coverage customer has originated from.\n */\nenum SourceOfCustomer {\n Unknown = 0,\n SmartCoverageWebsite = 1,\n InAppMessage = 2,\n Email = 3, \n SocialMedia = 4\n}\n\nexport default SourceOfCustomer;\n","/**\n * @module\n */\n\nimport SourceOfCustomer from './SourceOfCustomer';\n\n/**\n * @type {Object.}\n */\nexport const SourceOfCustomerMap: { [key: string]: SourceOfCustomer } = {\n unknown: SourceOfCustomer.Unknown,\n smartcoveragewebsite: SourceOfCustomer.SmartCoverageWebsite,\n inappmessage: SourceOfCustomer.InAppMessage,\n email: SourceOfCustomer.Email,\n socialmedia: SourceOfCustomer.SocialMedia\n};\n","/**\n * @module\n */\n\nexport enum StreamUsage {\n Svr = 6,\n LiveViewAnalytics = 9,\n SDCard = 10,\n LiveView = 18,\n LiveViewFieldOfView = 20\n}\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Idle = 1;\n/**\n * @enum {number}\n */\nexport const NormalOperation = 2;\n/**\n * @enum {number}\n */\nexport const PossibleIssue = 3;\n/**\n * @enum {number}\n */\nexport const PumpInMalfunction = 4;\n/**\n * @enum {number}\n */\nexport const PumpNotRunning = 5;\n/**\n * @enum {number}\n */\nexport const Offline = 6;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Refrigerator = 1;\n/**\n * @enum {number}\n */\nexport const Storage = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Fahrenheit = 1;\n/**\n * @enum {number}\n */\nexport const Celsius = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const Pending = 1;\n/**\n * @enum {number}\n */\nexport const InProgress = 10;\n/**\n * @enum {number}\n */\nexport const SendInitCommands = 20;\n/**\n * @enum {number}\n */\nexport const RemoveThirdPartyDevices = 23;\n/**\n * @enum {number}\n */\nexport const PendingRemoveThirdPartyDevices = 26;\n/**\n * @enum {number}\n */\nexport const RequestRecycleFlags = 30;\n/**\n * @enum {number}\n */\nexport const PendingRecycleFlags = 40;\n/**\n * @enum {number}\n */\nexport const SendUserCodes = 50;\n/**\n * @enum {number}\n */\nexport const AddToSystemGroup = 55;\n/**\n * @enum {number}\n */\nexport const ClearInfoAtThePanel = 60;\n/**\n * @enum {number}\n */\nexport const InitiateSystemCheck = 70;\n/**\n * @enum {number}\n */\nexport const SendVacantGroupCode = 75;\n/**\n * @enum {number}\n */\nexport const TerminateOldCustomers = 80;\n/**\n * @enum {number}\n */\nexport const Complete = 90;\n/**\n * @enum {number}\n */\nexport const ManuallyVerifiedComplete = 95;\n/**\n * @enum {number}\n */\nexport const Failed = 100;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Comfort = 0;\n/**\n * @enum {number}\n */\nexport const Runtime = 1;\n/**\n * @enum {number}\n */\nexport const Cycle = 2;\n/**\n * @enum {number}\n */\nexport const Efficiency = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const AutoLow = 0;\n/**\n * @enum {number}\n */\nexport const OnLow = 1;\n/**\n * @enum {number}\n */\nexport const AutoHigh = 2;\n/**\n * @enum {number}\n */\nexport const OnHigh = 3;\n/**\n * @enum {number}\n */\nexport const AutoMedium = 4;\n/**\n * @enum {number}\n */\nexport const OnMedium = 5;\n/**\n * @enum {number}\n */\nexport const Circulate = 6;\n/**\n * @enum {number}\n */\nexport const Humidity = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Disabled = 0;\n/**\n * @enum {number}\n */\nexport const Enabled = 1;\n/**\n * @enum {number}\n */\nexport const Partial = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const MANUAL_MODE = 0;\n/**\n * @enum {number}\n */\nexport const SCHEDULED = 1;\n/**\n * @enum {number}\n */\nexport const SMART_SCHEDULES = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Fixed = 0;\n/**\n * @enum {number}\n */\nexport const Away = 1;\n/**\n * @enum {number}\n */\nexport const Home = 2;\n/**\n * @enum {number}\n */\nexport const Sleep = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Off = 1;\n/**\n * @enum {number}\n */\nexport const Heat = 2;\n/**\n * @enum {number}\n */\nexport const Cool = 3;\n/**\n * @enum {number}\n */\nexport const Auto = 4;\n/**\n * @enum {number}\n */\nexport const AuxHeat = 5;\n","/**\n * @module\n */\n\n/**\n * @type {Object.} \n */\nexport default {\n [0]: 'unknown',\n [1]: 'off',\n [2]: 'heat',\n [3]: 'cool',\n [4]: 'auto',\n [5]: 'aux-heat'\n};\n\n","export enum ThirdPartyEventType {\n AnalyticTamperingStarted = 100,\n AnalyticFogDetectionStarted = 101,\n AnalyticPassingStarted = 104,\n AnalyticIntrusionStarted = 106,\n AnalyticGunshotStarted = 116,\n AnalyticGlassBreakStarted = 122,\n AnalyticPersonDetected = 141\n}\n\nexport const ThirdPartyEventIcons: Record | unknown = {\n [ThirdPartyEventType.AnalyticTamperingStarted]: 'tamper',\n [ThirdPartyEventType.AnalyticFogDetectionStarted]: 'w-fog',\n [ThirdPartyEventType.AnalyticPassingStarted]: 'line',\n [ThirdPartyEventType.AnalyticIntrusionStarted]: 'thermostat-away',\n [ThirdPartyEventType.AnalyticGunshotStarted]: 'gunshot-detected',\n [ThirdPartyEventType.AnalyticGlassBreakStarted]: 'glassbreak-active'\n};\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const ManageCameraGroups = 1;\n/**\n * @enum {number}\n */\nexport const CameraDropdown = 2;\n/**\n * @enum {number}\n */\nexport const HDToggleOn = 3;\n/**\n * @enum {number}\n */\nexport const HDToggleOff = 4;\n/**\n * @enum {number}\n */\nexport const TheaterMode = 5;\n/**\n * @enum {number}\n */\nexport const ExitTheaterMode = 6;\n/**\n * @enum {number}\n */\nexport const FullScreen = 7;\n/**\n * @enum {number}\n */\nexport const ExitFullScreen = 8;\n/**\n * @enum {number}\n */\nexport const PageChange = 9;\n/**\n * @enum {number}\n */\nexport const LayoutHybridView = 10;\n/**\n * @enum {number}\n */\nexport const LayoutAutoView = 11;\n/**\n * @enum {number}\n */\nexport const LayoutOnePlusFive = 12;\n/**\n * @enum {number}\n */\nexport const LayoutOnePlusSeven = 13;\n/**\n * @enum {number}\n */\nexport const LayoutTwoPlusEight = 14;\n/**\n * @enum {number}\n */\nexport const LayoutFourPlusTwoPlusFour = 15;\n/**\n * @enum {number}\n */\nexport const PlayerPTZ = 16;\n/**\n * @enum {number}\n */\nexport const PlayerSnapshot = 17;\n/**\n * @enum {number}\n */\nexport const PlayerRecordClip = 18;\n/**\n * @enum {number}\n */\nexport const PlayerSettings = 19;\n/**\n * @enum {number}\n */\nexport const PlayerRetryConnection = 21;\n/**\n * @enum {number}\n */\nexport const PlayerTroubleshootConnection = 22;\n/**\n * @enum {number}\n */\nexport const PlayerExpand = 23;\n/**\n * @enum {number}\n */\nexport const PlayerRestore = 24;\n/**\n * @enum {number}\n */\nexport const Play = 25;\n/**\n * @enum {number}\n */\nexport const Pause = 26;\n/**\n * @enum {number}\n */\nexport const SeekBack = 27;\n/**\n * @enum {number}\n */\nexport const SeekForward = 28;\n/**\n * @enum {number}\n */\nexport const TimelineExpand = 29;\n/**\n * @enum {number}\n */\nexport const TimelineCollapse = 30;\n/**\n * @enum {number}\n */\nexport const TimelineArrowBack = 31;\n/**\n * @enum {number}\n */\nexport const TimelineArrowForward = 32;\n/**\n * @enum {number}\n */\nexport const TimelineClick = 33;\n/**\n * @enum {number}\n */\nexport const HourButton = 34;\n/**\n * @enum {number}\n */\nexport const DayButton = 35;\n/**\n * @enum {number}\n */\nexport const ActivityEvent = 36;\n/**\n * @enum {number}\n */\nexport const TimelineEvent = 37;\n/**\n * @enum {number}\n */\nexport const Retry = 38;\n/**\n * @enum {number}\n */\nexport const SidebarOpen = 39;\n/**\n * @enum {number}\n */\nexport const SidebarClose = 40;\n/**\n * @enum {number}\n */\nexport const DateTimePicker = 41;\n/**\n * @enum {number}\n */\nexport const CloseDateTimePicker = 42;\n/**\n * @enum {number}\n */\nexport const DownloadClip = 43;\n/**\n * @enum {number}\n */\nexport const DownloadThumbnail = 44;\n/**\n * @enum {number}\n */\nexport const SpeedDropdown = 45;\n/**\n * @enum {number}\n */\nexport const SpeedDropdown1x = 46;\n/**\n * @enum {number}\n */\nexport const SpeedDropdown2x = 47;\n/**\n * @enum {number}\n */\nexport const SpeedDropdown4x = 48;\n/**\n * @enum {number}\n */\nexport const SpeedDropdown8x = 49;\n/**\n * @enum {number}\n */\nexport const AutoSkipGap = 50;\n/**\n * @enum {number}\n */\nexport const AutoRetryConnection = 51;\n/**\n * @enum {number}\n */\nexport const CameraSelectorApply = 52;\n/**\n * @enum {number}\n */\nexport const CameraSelectorClose = 53;\n/**\n * @enum {number}\n */\nexport const CameraSelectorToggleCamera = 54;\n/**\n * @enum {number}\n */\nexport const CameraSelectorGroupSelected = 55;\n/**\n * @enum {number}\n */\nexport const CameraSelectorResetSelection = 56;\n/**\n * @enum {number}\n */\nexport const CameraSelectorSaveSelection = 57;\n/**\n * @enum {number}\n */\nexport const CameraSelectorSingleCamera = 58;\n/**\n * @enum {number}\n */\nexport const OverwriteExistingGroup = 59;\n/**\n * @enum {number}\n */\nexport const CreateNewGroup = 60;\n/**\n * @enum {number}\n */\nexport const LocalSchedulesTab = 62;\n/**\n * @enum {number}\n */\nexport const AddNewSchedule = 63;\n/**\n * @enum {number}\n */\nexport const UpdateExistingSchedule = 64;\n/**\n * @enum {number}\n */\nexport const AccessPlanListViewSelected = 65;\n/**\n * @enum {number}\n */\nexport const AccessPlanCardViewSelected = 66;\n/**\n * @enum {number}\n */\nexport const AccessPlanSortByNameSelected = 67;\n/**\n * @enum {number}\n */\nexport const AccessPlanSortByUsersSelected = 68;\n/**\n * @enum {number}\n */\nexport const AnalyticsRulesLearnMoreModalOpened = 69;\n/**\n * @enum {number}\n */\nexport const AnalyticsRulesPushNotificationsTooltipHover = 70;\n/**\n * @enum {number}\n */\nexport const AnalyticsRulesPushNotificationsTooltipClick = 71;\n/**\n * @enum {number}\n */\nexport const AnalyticsRulesSetMinimumDelayBetweenClipsTooltipViewed = 72;\n/**\n * @enum {number}\n */\nexport const AnalyticsRulesTypeNotSureHelperViewed = 73;\n/**\n * @enum {number}\n */\nexport const UsageReportsBarClicked = 74;\n/**\n * @enum {number}\n */\nexport const UsageReportsLineClicked = 75;\n/**\n * @enum {number}\n */\nexport const UsageReportsWeekClicked = 76;\n/**\n * @enum {number}\n */\nexport const UsageReportsMonthClicked = 77;\n/**\n * @enum {number}\n */\nexport const UsageReportsDayClicked = 78;\n/**\n * @enum {number}\n */\nexport const UsageReportsByDateClicked = 79;\n/**\n * @enum {number}\n */\nexport const UsageReportsByCameraClicked = 80;\n/**\n * @enum {number}\n */\nexport const UsageReportsByRuleClicked = 81;\n/**\n * @enum {number}\n */\nexport const FamiliarVehicleNotificationsEnable = 83;\n/**\n * @enum {number}\n */\nexport const FamiliarVehicleNotificationsDisable = 84;\n/**\n * @enum {number}\n */\nexport const FamiliarVehicleNotificationsSkip = 85;\n/**\n * @enum {number}\n */\nexport const PromoteSingleUser = 86;\n\n/**\n * @enum {number}\n */\nexport const WebRTCStreamTypeButtonClicked = 87;\n\n/**\n * @enum {number}\n */\nexport const WebRTCStreamTypeButtonRefreshedStream = 88;\n\n/**\n * @enum {number}\n */\nexport const OperatorAudioNotAvailableButtonClicked = 89;\n\n/**\n * @enum {number}\n */\nexport const OperatorAudioNotAvailableButtonRefreshedStream = 90;\n\n/**\n * @enum {number}\n */\nexport const ThumbnailSearchToTimeline = 91;\n/**\n * @enum {number}\n */\nexport const FamiliarFaceNotificationsEnable = 92;\n/**\n * @enum {number}\n */\nexport const FamiliarFaceNotificationsDisable = 93;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Doorbell = 1;\n/**\n * @enum {number}\n */\nexport const WaterSensor = 3;\n/**\n * @enum {number}\n */\nexport const Arming = 5;\n/**\n * @enum {number}\n */\nexport const Gate = 6;\n/**\n * @enum {number}\n */\nexport const ContactSensor = 7;\n/**\n * @enum {number}\n */\nexport const Lock = 8;\n/**\n * @enum {number}\n */\nexport const Alarm = 9;\n/**\n * @enum {number}\n */\nexport const Motion = 11;\n/**\n * @enum {number}\n */\nexport const WaterMeter = 13;\n/**\n * @enum {number}\n */\nexport const Remote = 16;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 17;\n/**\n * @enum {number}\n */\nexport const GeoFence = 18;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const LeftToRight = 0;\n/**\n * @enum {number}\n */\nexport const RightToLeft = 1;\n/**\n * @enum {number}\n */\nexport const AnyDirection = 2;\n","enum TroubleConditionDetailsReportCategories {\n BatteryConditions = 500,\n HVACConditions = 501,\n MiscDeviceConditions = 502,\n PanelOrHubConditions = 503,\n VideoConditions = 504,\n WaterConditions = 505,\n OtherConditions = 999\n}\nexport default TroubleConditionDetailsReportCategories;\n","enum TroubleConditionDetailsReportDataColumns {\n AffectedDeviceName = 300,\n AffectedDeviceType = 301,\n CommunityRegion = 302,\n CustomerId = 303,\n GroupName = 304,\n TroubleCondition = 305,\n TroubleConditionCategory = 306,\n TroubleConditionStartDate = 307,\n UnitName = 308\n}\nexport default TroubleConditionDetailsReportDataColumns;\n","enum TroubleConditionDetailsReportFrequency {\n FreqDaily = 400,\n FreqWeekly = 401\n}\nexport default TroubleConditionDetailsReportFrequency;\n","enum TroubleConditionMutedOptionEnum {\n UntilNextOccurrence = 0,\n Permanent = 1,\n OneDay = 2,\n SevenDays = 3,\n FourteenDays = 4,\n NinetyDays = 5\n}\nexport default TroubleConditionMutedOptionEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SensorMalfunction = 12;\n/**\n * @enum {number}\n */\nexport const ACFailure = 14;\n/**\n * @enum {number}\n */\nexport const SensorLowBattery = 15;\n/**\n * @enum {number}\n */\nexport const PanelLowBattery = 16;\n/**\n * @enum {number}\n */\nexport const PanelNotResponding = 17;\n/**\n * @enum {number}\n */\nexport const SevereHVACAlert = 108;\n/**\n * @enum {number}\n */\nexport const CustomerId = 303;\n/**\n * @enum {number}\n */\nexport const GroupName = 304;\n/**\n * @enum {number}\n */\nexport const TroubleCondition = 305;\n/**\n * @enum {number}\n */\nexport const Other = 999;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Alarm = 1;\n/**\n * @enum {number}\n */\nexport const Issue = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NoSubType = 0;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_GeoServices = 1;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_LiftMaster = 2;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_ZWave = 3;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_Lutron = 4;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_Sensor = 5;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_Sonos = 6;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_CarConnector = 7;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_ADCSmartThermostat = 8;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_ImageSensor = 9;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_Kwikset = 10;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_Quickbox = 11;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_RemoteTemperatureSensor = 12;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_Schlage = 13;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_Stelpro = 14;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_TwoWayTalkingTouchScreen = 15;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_Westinghouse = 16;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_Yale = 17;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_ZWaveGarage = 18;\n/**\n * @enum {number}\n */\nexport const SensorLowBattery_CarConnector = 19;\n/**\n * @enum {number}\n */\nexport const SensorTamper_CarConnector = 20;\n/**\n * @enum {number}\n */\nexport const SensorTamper_ContactSensor = 21;\n/**\n * @enum {number}\n */\nexport const SensorTamper_MotionSensor = 22;\n/**\n * @enum {number}\n */\nexport const SensorTamper_ImageSensor = 23;\n/**\n * @enum {number}\n */\nexport const SensorTamper_GunshotSensor = 24;\n/**\n * @enum {number}\n */\nexport const ControllerPowerFault_Aero = 25;\n/**\n * @enum {number}\n */\nexport const ControllerPowerFault_Mercury = 26;\n/**\n * @enum {number}\n */\nexport const PanelTamper_AlarmHub = 27;\n/**\n * @enum {number}\n */\nexport const SecureEnrollmentFailed_Critical = 28;\n/**\n * @enum {number}\n */\nexport const SensorMalfunction_AccessPoint = 29;\n/**\n * @enum {number}\n */\nexport const IncompatibleDevice_IQLinearGarage = 30;\n/**\n * @enum {number}\n */\nexport const IncompatiblePanelVersion_IQWifi6 = 31;\n/**\n * @enum {number}\n */\nexport const SensorLowBattery_RechargeableVideoDevice = 32;\n/**\n * @enum {number}\n */\nexport const SensorLowBattery_CriticalRechargeableVideoDevice = 33;\n/**\n * @enum {number}\n */\nexport const BroadbandCommFailure_GunshotSensor = 34;\n/**\n * @enum {number}\n */\nexport const CellCommFailure_GunshotSensor = 35;\n/**\n * @enum {number}\n */\nexport const CameraUnexpectedlyNotRecording_SVR = 36;\n/**\n * @enum {number}\n */\nexport const CameraUnexpectedlyNotRecording_Onboard = 37;\n/**\n * @enum {number}\n */\nexport const CameraUnexpectedlyNotRecording_SVRAndOnboard = 38;\n/**\n * @enum {number}\n */\nexport const SensorNotResponding_GunshotSensor = 39;\n/**\n * @enum {number}\n */\n// CAUTION: this is a special case only for UI filtering purpose to include all sub types under a certain TroubleConditionType.\n// It can be used for filtering conditions but please do NOT assign it to any real trouble condition occurrence.\nexport const AllSubTypes = 99999;\n\nexport type TroubleConditionSubTypeEnum =\n | typeof NoSubType\n | typeof SensorMalfunction_GeoServices\n | typeof SensorMalfunction_LiftMaster\n | typeof SensorMalfunction_ZWave\n | typeof SensorMalfunction_Lutron\n | typeof SensorMalfunction_Sensor\n | typeof SensorMalfunction_Sonos\n | typeof SensorMalfunction_CarConnector\n | typeof IncompatibleDevice_ADCSmartThermostat\n | typeof IncompatibleDevice_ImageSensor\n | typeof IncompatibleDevice_Kwikset\n | typeof IncompatibleDevice_Quickbox\n | typeof IncompatibleDevice_RemoteTemperatureSensor\n | typeof IncompatibleDevice_Schlage\n | typeof IncompatibleDevice_Stelpro\n | typeof IncompatibleDevice_TwoWayTalkingTouchScreen\n | typeof IncompatibleDevice_Westinghouse\n | typeof IncompatibleDevice_Yale\n | typeof IncompatibleDevice_ZWaveGarage\n | typeof SensorLowBattery_CarConnector\n | typeof SensorTamper_CarConnector\n | typeof SensorTamper_ContactSensor\n | typeof SensorTamper_MotionSensor\n | typeof SensorTamper_ImageSensor\n | typeof SensorTamper_GunshotSensor\n | typeof ControllerPowerFault_Aero\n | typeof ControllerPowerFault_Mercury\n | typeof PanelTamper_AlarmHub\n | typeof SecureEnrollmentFailed_Critical\n | typeof SensorMalfunction_AccessPoint\n | typeof IncompatibleDevice_IQLinearGarage\n | typeof IncompatiblePanelVersion_IQWifi6\n | typeof SensorLowBattery_RechargeableVideoDevice\n | typeof SensorLowBattery_CriticalRechargeableVideoDevice\n | typeof BroadbandCommFailure_GunshotSensor\n | typeof CellCommFailure_GunshotSensor\n | typeof CameraUnexpectedlyNotRecording_SVR\n | typeof CameraUnexpectedlyNotRecording_Onboard\n | typeof CameraUnexpectedlyNotRecording_SVRAndOnboard\n | typeof SensorNotResponding_GunshotSensor\n | typeof AllSubTypes;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const SensorMalfunction = 12;\n/**\n * @enum {number}\n */\nexport const ACFailure = 14;\n/**\n * @enum {number}\n */\nexport const SensorLowBattery = 15;\n/**\n * @enum {number}\n */\nexport const PanelLowBattery = 16;\n/**\n * @enum {number}\n */\nexport const PanelNotResponding = 17;\n/**\n * @enum {number}\n */\nexport const CameraNotReachable = 21;\n/**\n * @enum {number}\n */\nexport const WaterAlert = 50;\n/**\n * @enum {number}\n */\nexport const AlarmInMemory = 53;\n/**\n * @enum {number}\n */\nexport const SmokeSensorReset = 57;\n/**\n * @enum {number}\n */\nexport const BatteryCharging = 69;\n/**\n * @enum {number}\n */\nexport const SmallLeak = 95;\n/**\n * @enum {number}\n */\nexport const MediumLeak = 96;\n/**\n * @enum {number}\n */\nexport const LargeLeak = 97;\n/**\n * @enum {number}\n */\nexport const SevereHVACAlert = 108;\n/**\n * @enum {number}\n */\nexport const VideoDeviceHighTemperatureCutoff = 176;\n/**\n * @enum {number}\n */\nexport const VideoDeviceLowTemperatureCutoff = 177;\n/**\n * @enum {number}\n */\nexport const VideoDeviceLowVoltageShutdown = 178;\n/**\n * @enum {number}\n */\nexport const SensorNotResponding = 190;\n/**\n * @enum {number}\n */\nexport const VideoDeviceLowBatteryAndLowTemperatureAlert = 206;\n/**\n * @enum {number}\n */\nexport const DeviceMispositioned = 227;\n","enum TroubleConditionTypeEnum {\n Alarm = 0,\n PanelDuress = 1,\n PanelFirePanic = 2,\n PanelPolicePanic = 3,\n PanelAuxPanic = 4,\n PanelFreezeAlarm = 5,\n NoActivityPanel = 6,\n NoActivitySchedule = 7,\n KeypadTamper = 8,\n PhoneLineCut = 9,\n ModemPanelCommError = 10,\n ModuleMalfunction = 11,\n SensorMalfunction = 12,\n RadioOff = 13,\n ACFailure = 14,\n SensorLowBattery = 15,\n PanelLowBattery = 16,\n PanelNotResponding = 17,\n NeverPinged = 18,\n SetupNotComplete = 19,\n CameraNotCommunicating = 20,\n CameraNotReachable = 21,\n UploadsOverQuota = 22,\n NoArmings = 23,\n NoEquipmentList = 24,\n NeverForwarding = 25,\n InvalidPrimaryEmail = 26,\n ImageSensorUploadsOverQuota = 27,\n SensorTamper = 28,\n NoImageSensorAlarmHardwireEnrolled = 29,\n ImageSensorEnrollmentConflict = 30,\n PoorSignaling = 31,\n CustomerNotLoggedIn = 32,\n BroadbandCommFailure = 33,\n CellCommFailure = 34,\n CustomerMonitoringRegistrationIncomplete = 35,\n DeviceDisabled = 36,\n SvrRecordingScheduleNotRecording = 37,\n UrgentTwoGReplacement = 38,\n ImageSensorRulesNotConfirmed = 39,\n NonProductionFirmware = 40,\n IncompatibleDevice = 41,\n CarDiagnosticIssueReported = 42,\n UnexpectedMovement = 43,\n SystemLocked = 44,\n SmokeSupervisionEnabled = 45,\n CarbonMonoxideAlert = 47,\n DryContactIssue = 48,\n LowTankAlert = 49,\n WaterAlert = 50,\n UnsupportedPanelCustomerValue = 51,\n EthernetCableUnplugged = 52,\n AlarmInMemory = 53,\n SensorBypassed = 54,\n ThermostatTooCold = 55,\n ThermostatTooWarm = 56,\n SmokeSensorReset = 57,\n EmptyEquipmentList = 58,\n UnsupportedUserCodeLength = 59,\n PendingFirmwareUpgradeFailed = 60,\n SecureEnrollmentFailed = 61,\n ContinuousCloudVideoReceiverStopped = 62,\n HeatingAndCoolingAlert = 63,\n PGM2FireTrouble = 64,\n FailedReceiverEvent = 65,\n CarbonMonoxideSensorTrouble = 66,\n FreezeSensorTrouble = 67,\n HeatOrProbeSensorTrouble = 68,\n BatteryCharging = 69,\n BatteryAbsent = 70,\n WifiNotConnected = 71,\n NoTwoWayLinesAvailable = 72,\n FailureToCommunicateTrouble = 73,\n SelfTestTrouble = 74,\n WarmStartTrouble = 75,\n PanelOvercurrentTrouble = 76,\n FireSensorTrouble = 77,\n ZoneDeviceMaskTrouble = 78,\n GasTrouble = 79,\n HighCurrentAuxTrouble = 80,\n RfJamTrouble = 81,\n NotNetworkedTrouble = 82,\n PanelTamper = 83,\n PeripheralAuxTrouble = 84,\n CredentialsInConflict = 85,\n PirDeviceLimit = 86,\n MonitoringStationIntegrationsCustomerAccount = 87,\n SirenTamper = 88,\n ZWaveRadioTrouble = 90,\n LowControllerBattery = 91,\n ControllerPowerFault = 92,\n VirtualZoneEnrollmentError = 93,\n ExtremeWaterTemp = 94,\n SmallLeak = 95,\n MediumLeak = 96,\n LargeLeak = 97,\n PSPHardwareIncomp = 98,\n ZoneOrPartitionLimitExceeded = 99,\n FirmwareUpdateRequired = 100,\n HardwareIncompatibility = 101,\n AgenciesNotUpdatedAtCentralStation = 102,\n BatteryDoorTamper = 103,\n MountingTamper = 104,\n LoopTamper = 105,\n HiddenPartitionArmed = 106,\n VideoObjectDetectionRuleNotConfigured = 107,\n SevereHVACAlert = 108,\n AlarmComLinkAlert = 109,\n DevicePowerIssue = 110,\n SvrFirmwareOutdated = 111,\n VideoDeviceFirmwareOutdated = 112,\n InstallerResetNeeded = 113,\n UrgentThreeGReplacement = 114,\n HardwareFailure = 115,\n IncompatiblePanelVersion = 116,\n SEMPanelSyncError = 118,\n SvrRecordingFailure = 119,\n SensorSignalStrength = 120,\n PeriodicLeak = 121,\n DailyFlowEvent = 122,\n BadBattery = 123,\n SystemTroubleEventsDisabled = 124,\n SDCardRecordingFailure = 125,\n SvrRecordingScheduleNotSetUp = 126,\n SensorTroubleEventsDisabled = 127,\n TamperEventsDisabled = 128,\n LowBatteryEventsDisabled = 129,\n PowerFailureEventsDisabled = 130,\n MonitoringStationZoneSyncFailure = 131,\n ThermostatGroupingError = 132,\n RemoteResetNeeded = 133,\n ControllerPowerFailure = 134,\n ThreeGNetworkGeneration = 135,\n ImageUploadsOverQuotaForCell = 136,\n IncompatibleReaderMode = 137,\n RelayNotPowered = 138,\n PanelMountingTamper = 139,\n CellularSensorNotResponding = 140,\n CellularSensorBatteryMissing = 141,\n CellularSensorMountingTamper = 142,\n CellularSensorBatteryDoorTamper = 143,\n CellularSensorLowBattery = 144,\n CellularSensorLowSignalStrength = 145,\n PGMMismatchedAttributes = 146,\n PGMMultiplePartitions = 147,\n HVACControlFailure = 148,\n ConfirmedBurglaryAlarm = 149,\n ConfirmedEmergencyAlarm = 150,\n SDCardRemoved = 151,\n WifiDeviceInstalledOnAnotherAccount = 153,\n DeviceCoolDownMode = 154,\n CommunicatorUpgradeRequired = 155,\n DeviceNotSupportedByServicePackage = 156,\n CellularSensorNeverResponded = 157,\n ShoulderSeasonTestFailureCondition = 158,\n LowBusVoltage = 160,\n AuxSupply = 161,\n OutputFault = 162,\n BellCircuit = 163,\n BusFault = 164,\n OnboardRecordingScheduleNotSetUp = 165,\n Att3GSunsetPatchRequired = 166,\n SvrHardDriveIssue = 167,\n DeviceWarmUpMode = 168,\n UL1610NotSupported = 169,\n ConfigurePanelWifi = 170,\n SensorRecalled = 171,\n LockJammed = 172,\n LockdownNotConfigured = 173,\n LockdownDrillNotPerformed = 174,\n ShoulderSeasonTestWarningCondition = 175,\n VideoDeviceHighTemperatureCutoff = 176,\n VideoDeviceLowTemperatureCutoff = 177,\n VideoDeviceLowVoltageShutdown = 178,\n PanelOverheatShutdown = 179,\n IncompatibleAccount = 180,\n NotSensingMotion = 181,\n EosVmdNonVAPkgSelected = 182,\n EosVmdVMDOnlyDeviceEnrolled = 183,\n VideoDeviceHardwareMalfunction = 184,\n HighSensorNoise = 185,\n HighEnvironmentalNoise = 186,\n BuiltInTestFailure = 187,\n SensorLowGain = 188,\n SensorCriticalTemperature = 189,\n SensorNotResponding = 190,\n BadOrientation = 191,\n DoorbellMarginalVoltage = 192,\n DoorbellInsufficientPower = 193,\n DoorbellMarginalPower = 195,\n SevereHeatingAlert = 202,\n SevereCoolingAlert = 203,\n HeatingAlert = 204,\n CoolingAlert = 205,\n VideoDeviceLowBatteryAndLowTemperatureAlert = 206,\n CsvrRecordingError = 207,\n CsvrRecordingErrorImmediateActionRequired = 208,\n SilentPolicePanic = 209,\n IncompatibleMappedSensor = 210,\n CameraUnexpectedlyNotRecording = 211,\n LowFlowCalibrationRequired = 212,\n DeadBackupBattery = 213,\n AbsentFogCanister = 214,\n PanelLoopDetected = 215,\n FirmwareUpgradeRequiredTablet = 216,\n CsvrHighVideoBandwidthUse = 217,\n CameraNotReachableInternal = 218,\n FailedCanisterIgnition = 219,\n GeoDeviceMalfunction = 220,\n EmptyFogCanister = 221,\n HardwareNotTested = 222,\n MismatchedReportingProtocol = 223,\n ResidentResetUnsuccessful = 224,\n PoorInternetConnectivity = 225,\n SensorTrouble = 226,\n CarConnectorMalfunction = 229,\n FallDemoMode = 228,\n AllTroubles = 9999\n}\nexport default TroubleConditionTypeEnum;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotEnabled = 0;\n/**\n * @enum {number}\n */\nexport const Authenticator = 1;\n/**\n * @enum {number}\n */\nexport const SMS = 2;\n/**\n * @enum {number}\n */\nexport const Email = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const SmartThermostat = 2;\n/**\n * @enum {number}\n */\nexport const ImageSensor = 5;\n/**\n * @enum {number}\n */\nexport const TouchscreenLock = 12;\n/**\n * @enum {number}\n */\nexport const DoorSensor = 18;\n/**\n * @enum {number}\n */\nexport const AccessControl = 22;\n/**\n * @enum {number}\n */\nexport const VideoAnalytics = 23;\n/**\n * @enum {number}\n */\nexport const FlexIO = 26;\n/**\n * @enum {number}\n */\nexport const SolarIntegration = 32;\n/**\n * @enum {number}\n */\nexport const BusinessActivityAnalytics = 35;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const RetainUsers = 0;\n/**\n * @enum {number}\n */\nexport const RemoveUsers = 1;\n/**\n * @enum {number}\n */\nexport const RetainAndElevateUsers = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const RefreshHeaderButtonClicked = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const TransitionEvent = 2;\n/**\n * @enum {number}\n */\nexport const ActionOnPageEvent = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ShowUserCredentials = 1;\n/**\n * @enum {number}\n */\nexport const DoNotShowUserCredentials = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const FullControl = 1;\n/**\n * @enum {number}\n */\nexport const ViewPinsEditContact = 2;\n/**\n * @enum {number}\n */\nexport const ReadOnly = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ExpiredCredentials = 0;\n/**\n * @enum {number}\n */\nexport const FutureStartDates = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const HasNoEmailAddress = 0;\n/**\n * @enum {number}\n */\nexport const HasNoMobileNumber = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const HasNoBadge = 0;\n/**\n * @enum {number}\n */\nexport const HasNoPinCode = 1;\n/**\n * @enum {number}\n */\nexport const HasNoMobileCredential = 2;\n/**\n * @enum {number}\n */\nexport const HasMultipleCredentials = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const PausedUsers = 0;\n/**\n * @enum {number}\n */\nexport const ExtendedUnlockTimeUsers = 1;\n/**\n * @enum {number}\n */\nexport const AntiPassbackExemptionUsers = 2;\n/**\n * @enum {number}\n */\nexport const ActiveDirectoryUsers = 3;\n/**\n * @enum {number}\n */\nexport const MobileCredentialUsers = 4;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const TextOnlyNoVideo = 0;\n/**\n * @enum {number}\n */\nexport const iPhone_default = 11;\n/**\n * @enum {number}\n */\nexport const Mac_email_default = 12;\n/**\n * @enum {number}\n */\nexport const Windows_email_default = 13;\n/**\n * @enum {number}\n */\nexport const Blackberry = 15;\n/**\n * @enum {number}\n */\nexport const Android = 16;\n/**\n * @enum {number}\n */\nexport const PhoneAttTmobileBlackberry = 17;\n/**\n * @enum {number}\n */\nexport const OtherPhoneVerizonSprint = 18;\n/**\n * @enum {number}\n */\nexport const AttIPhone = 19;\n/**\n * @enum {number}\n */\nexport const IPhone = 104;\n/**\n * @enum {number}\n */\nexport const WP7 = 108;\n/**\n * @enum {number}\n */\nexport const WP = 109;\n/**\n * @enum {number}\n */\nexport const Cell_download_default = 153;\n/**\n * @enum {number}\n */\nexport const Standard_download_default = 154;\n/**\n * @enum {number}\n */\nexport const Thumbnail = 200;\n/**\n * @enum {number}\n */\nexport const Flv = 201;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotStarted = 0;\n/**\n * @enum {number}\n */\nexport const SuccessfulDownload = 3;\n/**\n * @enum {number}\n */\nexport const InsufficientPermission = 4;\n/**\n * @enum {number}\n */\nexport const WrongTokenFormat = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const FullReport = 0;\n/**\n * @enum {number}\n */\nexport const DisplaySummarySectionOnly = 1;\n/**\n * @enum {number}\n */\nexport const HideSnapshotsSetting = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const TextOnly = 0;\n/**\n * @enum {number}\n */\nexport const AttachVideoClip = 1;\n/**\n * @enum {number}\n */\nexport const AttachThumbnail = 2;\n/**\n * @enum {number}\n */\nexport const Unknown = -1;\n","/**\n * @module\n */\nexport const PLAYING_STATE = 0;\nexport const INITIALIZING_STATE = 1;\nexport const LOADING_STATE = 2;\nexport const FROZEN_STATE = 3;\nexport const DISCONNECTED_STATE = 4;\nexport const READY_STATE = 5;\nexport const NOT_VISIBLE_STATE = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Excellent = 0;\n/**\n * @enum {number}\n */\nexport const Better = 1;\n/**\n * @enum {number}\n */\nexport const Good = 2;\n/**\n * @enum {number}\n */\nexport const Standard = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NA = 0;\n/**\n * @enum {number}\n */\nexport const Manual = 1;\n/**\n * @enum {number}\n */\nexport const Schedule = 2;\n/**\n * @enum {number}\n */\nexport const Rule = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const DoesNotSupport = 0;\n/**\n * @enum {number}\n */\nexport const ReadOnly = 1;\n/**\n * @enum {number}\n */\nexport const ReadWrite = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NoError = 0;\n/**\n * @enum {number}\n */\nexport const DeviceNotFound = 1;\n/**\n * @enum {number}\n */\nexport const DeviceNotConnected = 2;\n/**\n * @enum {number}\n */\nexport const LiveStreamConnectionFailed = 3;\n/**\n * @enum {number}\n */\nexport const StreamDisconnected = 4;\n/**\n * @enum {number}\n */\nexport const LiveStreamTimeout = 5;\n/**\n * @enum {number}\n */\nexport const NoPermissions = 6;\n/**\n * @enum {number}\n */\nexport const NoPlaybackVideoAvailable = 7;\n/**\n * @enum {number}\n */\nexport const PlaybackEnded = 8;\n/**\n * @enum {number}\n */\nexport const PlaybackServerConnectionFailed = 9;\n/**\n * @enum {number}\n */\nexport const PlaybackStreamConnectionFailed = 10;\n/**\n * @enum {number}\n */\nexport const PlaybackStreamTimeout = 11;\n/**\n * @enum {number}\n */\nexport const SdCardNotWorking = 12;\n/**\n * @enum {number}\n */\nexport const SdCardRemoved = 13;\n/**\n * @enum {number}\n */\nexport const StreamNotAvailable = 14;\n/**\n * @enum {number}\n */\nexport const RecentlyAddedRecordingSchedule = 15;\n/**\n * @enum {number}\n */\nexport const SdCardHasRecordingsFromAnotherCamera = 16;\n/**\n * @enum {number}\n */\nexport const WebRtcIceNegotiationFailed = 17;\n/**\n * @enum {number}\n */\nexport const SdCardNotSupported = 18;\n/**\n * @enum {number}\n */\nexport const AutoplayFailed = 19;\n/**\n * @enum {number}\n */\nexport const StunReconnectionFailed = 20;\n/**\n * @enum {number}\n */\nexport const SdCardHasRecordingsFromAnotherCustomer = 21;\n/**\n * @enum {number}\n */\nexport const SdCardIsBusy = 22;\n/**\n * @enum {number}\n */\nexport const SdCardNotSupported4Mp = 23;\n/**\n * @enum {number}\n */\nexport const DataUsageCritical = 24;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const OnDemand = 1;\n/**\n * @enum {number}\n */\nexport const AlwaysOn = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Gallon = 0;\n/**\n * @enum {number}\n */\nexport const Liter = 1;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const StandardDoorbellChimeDingDong = 1;\n/**\n * @enum {number}\n */\nexport const StandardDoorbellChimeLowDingDong = 2;\n/**\n * @enum {number}\n */\nexport const ThreeToneXylophone = 3;\n/**\n * @enum {number}\n */\nexport const FourToneXylophone = 4;\n/**\n * @enum {number}\n */\nexport const LowToHigh = 5;\n/**\n * @enum {number}\n */\nexport const Siren = 6;\n/**\n * @enum {number}\n */\nexport const BurglarAlarm = 7;\n/**\n * @enum {number}\n */\nexport const PositiveTune = 8;\n/**\n * @enum {number}\n */\nexport const DanceTune = 9;\n/**\n * @enum {number}\n */\nexport const OrchestralTune = 10;\n/**\n * @enum {number}\n */\nexport const GuitarHappyTune = 11;\n/**\n * @enum {number}\n */\nexport const GuitarSmoothTune = 12;\n/**\n * @enum {number}\n */\nexport const SingleToneChime = 13;\n/**\n * @enum {number}\n */\nexport const LongerSingleToneChime = 14;\n/**\n * @enum {number}\n */\nexport const LongestSingleToneChime = 15;\n/**\n * @enum {number}\n */\nexport const AlertCanaryTune = 16;\n/**\n * @enum {number}\n */\nexport const AlertWindChimes = 17;\n/**\n * @enum {number}\n */\nexport const BigDog = 18;\n/**\n * @enum {number}\n */\nexport const WeWishYouAMerryChristmas = 19;\n/**\n * @enum {number}\n */\nexport const ChristmasSpecial = 20;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Offline = 1;\n/**\n * @enum {number}\n */\nexport const Normal = 2;\n/**\n * @enum {number}\n */\nexport const Leak = 3;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const B36WaterMeter = 1;\n/**\n * @enum {number}\n */\nexport const WaterDragon = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 0;\n/**\n * @enum {number}\n */\nexport const Closed = 1;\n/**\n * @enum {number}\n */\nexport const Open = 2;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Partition = 1;\n/**\n * @enum {number}\n */\nexport const Lock = 2;\n/**\n * @enum {number}\n */\nexport const Thermostat = 3;\n/**\n * @enum {number}\n */\nexport const GarageDoor = 4;\n/**\n * @enum {number}\n */\nexport const AccessControlDoor = 5;\n/**\n * @enum {number}\n */\nexport const Boiler = 6;\n/**\n * @enum {number}\n */\nexport const Light = 7;\n/**\n * @enum {number}\n */\nexport const SumpPump = 8;\n/**\n * @enum {number}\n */\nexport const WaterMeter = 9;\n/**\n * @enum {number}\n */\nexport const WaterValve = 10;\n/**\n * @enum {number}\n */\nexport const SecuritySensor = 11;\n/**\n * @enum {number}\n */\nexport const WaterSensor = 12;\n/**\n * @enum {number}\n */\nexport const ImageSensor = 13;\n/**\n * @enum {number}\n */\nexport const VideoCamera = 14;\n/**\n * @enum {number}\n */\nexport const Video = 15;\n/**\n * @enum {number}\n */\nexport const Chime = 16;\n/**\n * @enum {number}\n */\nexport const Shade = 17;\n/**\n * @enum {number}\n */\nexport const Gate = 18;\n/**\n * @enum {number}\n */\nexport const SmartChime = 19;\n/**\n * @enum {number}\n */\nexport const GeoFence = 20;\n/**\n * @enum {number}\n */\nexport const Router = 21;\n/**\n * @enum {number}\n */\nexport const Remote = 22;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Sensors = 1;\n/**\n * @enum {number}\n */\nexport const Thermostats = 2;\n/**\n * @enum {number}\n */\nexport const Partitions = 3;\n/**\n * @enum {number}\n */\nexport const BusinessActivityAnalytics = 4;\n/**\n * @enum {number}\n */\nexport const Temperatures = 5;\n/**\n * @enum {number}\n */\nexport const Wellness = 6;\n/**\n * @enum {number}\n */\nexport const Fleet = 7;\n","enum WebStreamType {\n LiveView = 0,\n Svr = 1,\n SdCard = 2,\n LiveViewAnalytics = 3,\n LiveViewFieldOfView = 4\n}\nexport default WebStreamType;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Flash = 0;\n/**\n * @enum {number}\n */\nexport const WebRTC = 1;\n/**\n * @enum {number}\n */\nexport const OESP = 2;\n/**\n * @enum {number}\n */\nexport const MJPEG = 3;\n","enum WebrtcPreloadingSupport {\n NoPreloading = 0,\n PreloadToHello = 1,\n PreloadToSdp = 2,\n PreloadToIce = 3\n}\n\nexport default WebrtcPreloadingSupport;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const EndToEndSucceeded = 0;\n/**\n * @enum {number}\n */\nexport const EndToEndFailedNoFallback = 1;\n/**\n * @enum {number}\n */\nexport const ProxySucceeded = 2;\n/**\n * @enum {number}\n */\nexport const ProxyFailed = 3;\n/**\n * @enum {number}\n */\nexport const FallbackAndSucceededProxy = 4;\n/**\n * @enum {number}\n */\nexport const FallbackAndFailedProxy = 5;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Tkip = 1;\n/**\n * @enum {number}\n */\nexport const Aes = 2;\n/**\n * @enum {number}\n */\nexport const Open = 3;\n/**\n * @enum {number}\n */\nexport const Shared = 4;\n/**\n * @enum {number}\n */\nexport const AmbiguousOpenShared = 5;\n/**\n * @enum {number}\n */\nexport const Ccmp = 6;\n/**\n * @enum {number}\n */\nexport const Unknown = 10;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const None = 0;\n/**\n * @enum {number}\n */\nexport const Wep = 1;\n/**\n * @enum {number}\n */\nexport const Wpa = 2;\n/**\n * @enum {number}\n */\nexport const Wpa2 = 3;\n/**\n * @enum {number}\n */\nexport const Wpa2Enterprise = 4;\n/**\n * @enum {number}\n */\nexport const Wps = 6;\n/**\n * @enum {number}\n */\nexport const Unknown = 7;\n/**\n * @enum {number}\n */\nexport const Eap = 9;\n/**\n * @enum {number}\n */\nexport const Wpa3 = 11;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ComputersAndNetwork = 1;\n/**\n * @enum {number}\n */\nexport const Entertainment = 2;\n/**\n * @enum {number}\n */\nexport const Home = 3;\n/**\n * @enum {number}\n */\nexport const Personal = 4;\n/**\n * @enum {number}\n */\nexport const Video = 5;\n/**\n * @enum {number}\n */\nexport const Security = 6;\n/**\n * @enum {number}\n */\nexport const Other = 7;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Unknown = 10000;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideo523 = 10005;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideo723 = 10010;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideo724 = 10012;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideo729 = 10014;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideoVdb750 = 10038;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideoW114C = 10040;\n/**\n * @enum {number}\n */\nexport const InstallTutorialVideoV516 = 10041;\n/**\n * @enum {number}\n */\nexport const InstallAdvancedTroubleshootingVideoGeneric = 10047;\n/**\n * @enum {number}\n */\nexport const ThermostatBoilerWizard = 10901;\n/**\n * @enum {number}\n */\nexport const ThermostatGroupingWizard = 10903;\n/**\n * @enum {number}\n */\nexport const ClimaxWizard = 11000;\n/**\n * @enum {number}\n */\nexport const WeiserSmartcode10Touchpad = 12023;\n/**\n * @enum {number}\n */\nexport const Kwikset916Touchscreen = 12024;\n/**\n * @enum {number}\n */\nexport const WeiserSmartcode10Touchscreen = 12025;\n/**\n * @enum {number}\n */\nexport const JascoEnbrightenSmartLEDBulb = 12026;\n/**\n * @enum {number}\n */\nexport const JascoPlugInSmartSwitch = 12027;\n/**\n * @enum {number}\n */\nexport const JascoPlugInSmartDimmer = 12028;\n/**\n * @enum {number}\n */\nexport const Kwikset910Deadbolt = 12029;\n/**\n * @enum {number}\n */\nexport const YaleRLB1LPushButton = 12031;\n/**\n * @enum {number}\n */\nexport const YaleRLT1LTouchscreen = 12032;\n/**\n * @enum {number}\n */\nexport const YaleYRL210KeypadLever = 12034;\n/**\n * @enum {number}\n */\nexport const ADCS2000RemoteTemperatureSensor = 12037;\n/**\n * @enum {number}\n */\nexport const YRD156Lock = 12038;\n/**\n * @enum {number}\n */\nexport const SalusSmartPlug = 12039;\n/**\n * @enum {number}\n */\nexport const PhilioPan08RollerShutterController = 12040;\n/**\n * @enum {number}\n */\nexport const ClimaxSCM5ZWRollerShutterController = 12041;\n/**\n * @enum {number}\n */\nexport const ClimaxPowerSwitchPSM29ZW = 12042;\n/**\n * @enum {number}\n */\nexport const ClimaxPowerSwitchPSS29ZW = 12043;\n/**\n * @enum {number}\n */\nexport const DanaLockV3 = 12044;\n/**\n * @enum {number}\n */\nexport const AeotecSmartDimmer6 = 12045;\n/**\n * @enum {number}\n */\nexport const AeotecSmartSwitch6 = 12046;\n/**\n * @enum {number}\n */\nexport const AeotecNanoDimmerZW111 = 12047;\n/**\n * @enum {number}\n */\nexport const AeotecNanoSwitchZW116 = 12048;\n/**\n * @enum {number}\n */\nexport const ADCT3000SmartThermostat = 12049;\n/**\n * @enum {number}\n */\nexport const Lutron = 12050;\n/**\n * @enum {number}\n */\nexport const LUXKONOzwThermostat = 12051;\n/**\n * @enum {number}\n */\nexport const PhilioPan03MeterSwitch = 12052;\n/**\n * @enum {number}\n */\nexport const GenieAladdinConnect = 12053;\n/**\n * @enum {number}\n */\nexport const OHDAnywhere = 12054;\n/**\n * @enum {number}\n */\nexport const Deako = 12055;\n/**\n * @enum {number}\n */\nexport const Tuya = 12056;\n/**\n * @enum {number}\n */\nexport const Everspring500sSwitch = 12057;\n/**\n * @enum {number}\n */\nexport const JascoInWallToggleSwitch = 12058;\n/**\n * @enum {number}\n */\nexport const JascoInWallToggleDimmer = 12059;\n/**\n * @enum {number}\n */\nexport const JascoInWallPaddleSwitch = 12060;\n/**\n * @enum {number}\n */\nexport const JascoInWallPaddleDimmer = 12061;\n/**\n * @enum {number}\n */\nexport const DeleteZWaveDeviceGeneric = 12062;\n/**\n * @enum {number}\n */\nexport const Ecobee = 12064;\n/**\n * @enum {number}\n */\nexport const YaleAssureLockForAndersen = 12065;\n/**\n * @enum {number}\n */\nexport const LevitonDimmer = 12066;\n/**\n * @enum {number}\n */\nexport const LevitonSwitch = 12067;\n/**\n * @enum {number}\n */\nexport const KwiksetHomeConnect620 = 12068;\n/**\n * @enum {number}\n */\nexport const Jasco52190 = 12069;\n/**\n * @enum {number}\n */\nexport const HavenConnect = 12071;\n/**\n * @enum {number}\n */\nexport const Somfy = 12072;\n/**\n * @enum {number}\n */\nexport const STZ1_2GIG = 12075;\n/**\n * @enum {number}\n */\nexport const Linear_GD00Z8GC = 12076;\n/**\n * @enum {number}\n */\nexport const GenericSecuritySensor = 12077;\n/**\n * @enum {number}\n */\nexport const ClimaxGDC3 = 12078;\n/**\n * @enum {number}\n */\nexport const SchlageJBE109 = 12079;\n/**\n * @enum {number}\n */\nexport const SchlageJFE109 = 12080;\n/**\n * @enum {number}\n */\nexport const ClimaxPSS29ZW_JP = 12081;\n/**\n * @enum {number}\n */\nexport const ClimaxPSM29ZW_JP = 12082;\n/**\n * @enum {number}\n */\nexport const iDevices = 12083;\n/**\n * @enum {number}\n */\nexport const SchlageEncode = 12084;\n/**\n * @enum {number}\n */\nexport const Baldwin8252_8285 = 12085;\n/**\n * @enum {number}\n */\nexport const JascoOutdoorPlugInSmartSwitch = 12086;\n/**\n * @enum {number}\n */\nexport const JascoInWallSmartOutlet = 12087;\n/**\n * @enum {number}\n */\nexport const ZipatoMultiColorBulb2 = 12088;\n/**\n * @enum {number}\n */\nexport const HankMultiColorBulb = 12089;\n/**\n * @enum {number}\n */\nexport const JascoProSeriesBulb64637 = 12090;\n/**\n * @enum {number}\n */\nexport const ADCSmartNoiseMonitor = 12091;\n/**\n * @enum {number}\n */\nexport const Phyn = 12093;\n/**\n * @enum {number}\n */\nexport const Moen = 12094;\n/**\n * @enum {number}\n */\nexport const WaterDragon = 12095;\n/**\n * @enum {number}\n */\nexport const Orro = 12096;\n/**\n * @enum {number}\n */\nexport const PhynKohler = 12097;\n/**\n * @enum {number}\n */\nexport const Sensibo = 12098;\n/**\n * @enum {number}\n */\nexport const Enphase = 12099;\n/**\n * @enum {number}\n */\nexport const AlfredML2 = 12100;\n/**\n * @enum {number}\n */\nexport const WeiserHomeConnect620 = 12102;\n/**\n * @enum {number}\n */\nexport const ClimaxMotionSensorIRP16ZW = 12103;\n/**\n * @enum {number}\n */\nexport const ClimaxWaterensorWLS23ZW = 12104;\n/**\n * @enum {number}\n */\nexport const ClimaxDoorWindowContactSensorDC23ZW = 12105;\n/**\n * @enum {number}\n */\nexport const SomfyEU = 12107;\n/**\n * @enum {number}\n */\nexport const MiwaDTRS = 12108;\n/**\n * @enum {number}\n */\nexport const MiwaPiACKII = 12109;\n/**\n * @enum {number}\n */\nexport const YaleYRD410 = 12111;\n/**\n * @enum {number}\n */\nexport const YaleYRD420 = 12112;\n/**\n * @enum {number}\n */\nexport const YaleYRD430 = 12113;\n/**\n * @enum {number}\n */\nexport const YaleYRD450 = 12114;\n/**\n * @enum {number}\n */\nexport const InovelliLZW42Bulb = 12115;\n/**\n * @enum {number}\n */\nexport const InovelliLZW30Switch = 12116;\n/**\n * @enum {number}\n */\nexport const InovelliLZW31Dimmer = 12117;\n/**\n * @enum {number}\n */\nexport const SengledV11N13_US = 12118;\n/**\n * @enum {number}\n */\nexport const GoControlSwitchWS15Z51 = 12119;\n/**\n * @enum {number}\n */\nexport const GoControlDimmerWD500Z51 = 12120;\n/**\n * @enum {number}\n */\nexport const LinearOutletWO15Z1 = 12121;\n/**\n * @enum {number}\n */\nexport const LocklyPGD728ZPU = 12122;\n/**\n * @enum {number}\n */\nexport const KaadasKA211 = 12123;\n/**\n * @enum {number}\n */\nexport const KaadasKA200 = 12124;\n/**\n * @enum {number}\n */\nexport const KaadasKA201 = 12125;\n/**\n * @enum {number}\n */\nexport const ADC3035L = 13011;\n/**\n * @enum {number}\n */\nexport const Flex = 13012;\n/**\n * @enum {number}\n */\nexport const ADC3040 = 13013;\n/**\n * @enum {number}\n */\nexport const ADCCC100 = 13014;\n/**\n * @enum {number}\n */\nexport const BluetoothDisarming = 13015;\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const ConvertToBusinessHours = 1;\n/**\n * @enum {number}\n */\nexport const ConvertToCustomHours = 2;\n","import EmberController from '@ember/controller';\n\n/**\n * @classdesc\n *\n * Controller used to handle the Iframe displaying an external page\n *\n * @class ExternalPageController\n * @extends EmberController\n * @memberof external-page\n */\nexport default class ExternalPageController extends EmberController {\n source = '';\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberExternalPage } from 'customer-site/enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * Houses an iFrame for displaying externally hosted pages within the app.\n */\nexport default class ExternalPageRoute extends AdcBaseRoute {\n /** @override */\n routeId = EmberExternalPage;\n}\n","// import { helper } from '@ember/component/helpers';\n\nconst hhmmss = {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n};\n\nexport default {\n time: {\n hhmmss: hhmmss\n },\n date: {\n hhmmss: hhmmss,\n dateTimeNoYear: {\n month: 'numeric',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n },\n shortDateTimeFormat: {\n month: 'numeric',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n },\n shortTimeFormat: {\n hour: 'numeric',\n minute: 'numeric'\n },\n longTimeFormat: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n },\n shortDateFormat: {\n day: 'numeric',\n month: '2-digit',\n year: 'numeric'\n },\n longDateTimeFormat: {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n },\n fullDateTimeFormat: {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n }\n },\n number: {\n EUR: { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 },\n USD: { style: 'currency', currency: 'USD', minimumFractionDigits: 2, maximumFractionDigits: 2 }\n }\n};\n","import Controller from '@ember/controller';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\nexport default class GenericWizardDeepLinkLandingController extends Controller {\n declare model: ModelFrom;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'generic-wizard-deep-link-landing': GenericWizardDeepLinkLandingController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberGenericWizardDeepLinkLanding } from 'customer-site/enums/CustomerPageUrl';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type ENV from 'customer-site/config/environment';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n *\n * Route for Deep Links into the Wizards\n *\n * @class GenericWizardDeepLinkLanding.Route\n * @extends AdcBaseRoute\n */\nexport default class Route extends AdcBaseRoute {\n routeId = EmberGenericWizardDeepLinkLanding;\n @service declare contextManager: ContextManager;\n @service declare envSettings: EnvSettingsService;\n @service declare router: RouterService;\n\n async beforeModel(): Promise> {\n // Get all generic query params.\n const searchParams = new URLSearchParams(window.location.search);\n\n // Get redirect url param.\n let redirectUrl = searchParams.get('adc_url') ?? '';\n searchParams.delete('adc_url');\n\n if (redirectUrl.length === 0) {\n console.error('No redirect URL provided for GenericWizardDeepLLink');\n return this.router.transitionTo('app-error');\n }\n\n // Add any query params. Note that this does not account for URLs with an '#' character.\n const separator = redirectUrl.includes('?') ? '&' : '?';\n redirectUrl = `${redirectUrl}${separator}${searchParams.toString()}`;\n\n // Our goal is to try and transition within the app and not do a browser navigation. If we see our app rootURL in the URL, we will try an Ember navigation.\n const rootUrl = this.envSettings.getEnvironment()?.rootURL ?? '';\n const indexOfRoot = redirectUrl.indexOf(rootUrl);\n\n if (indexOfRoot > -1) {\n // For a route like https://www.alarm.com/web/system/wizard/v1/foo, we want /wizard/v1/foo.\n redirectUrl = redirectUrl.substring(indexOfRoot + rootUrl.length - 1);\n try {\n return await this.router.replaceWith(redirectUrl);\n } catch (err) {\n console.error(err);\n // For now we let the transitionToUrl below run. We should probably redirect to the error page to force people to use proper transitions when possible.\n }\n }\n\n return this.contextManager.transitionToUrl(redirectUrl, true);\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface GetStaticResourcePathSignature {\n Args: {\n Positional: [string];\n };\n Return: string;\n}\n\n/**\n * Returns the static resource path from the context-manager.\n */\nexport default class getStaticResourcePath extends Helper {\n @service declare contextManager: ContextManager;\n\n compute([path]: GetStaticResourcePathSignature['Args']['Positional']): GetStaticResourcePathSignature['Return'] {\n return this.contextManager.getStaticResourcePath(path);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'get-static-resource-path': typeof getStaticResourcePath;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface IsEnterpriseSignature {\n Return: boolean;\n}\n\n/**\n * Indicates if the current context is enterprise.\n */\nexport default class IsEnterprise extends Helper {\n @service declare contextManager: ContextManager;\n\n compute(): IsEnterpriseSignature['Return'] {\n return this.contextManager.isEnterprise;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'is-enterprise': typeof IsEnterprise;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface IsMobileAppSignature {\n Return: boolean;\n}\n\n/**\n * Indicates if the app is running within an ADC mobile app web view.\n */\nexport default class IsMobileApp extends Helper {\n @service declare contextManager: ContextManager;\n\n compute(): IsMobileAppSignature['Return'] {\n return this.contextManager.identityModel?.isMobileApp ?? false;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'is-mobile-app': typeof IsMobileApp;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { inject as service } from '@ember/service';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\ntype KnowledgeBaseLinkHelperNamedArgs = {\n cid?: string;\n hash?: string;\n openExternally?: boolean;\n};\n\n/**\n * Mind Touch query parameters\n */\nconst LANGUAGE_PARAM = 'mt-language';\nconst CONTENT_ID_PARAM = 'cid';\nconst OPEN_EXTERNALLY_PARAM = 'openExternally';\n\n/**\n * Builds the final URL for a knowledge base article.\n * @param article The article being linked\n * @param contextManager\n * @param namedArgs Arguments that should be used in the building of the final URL such as cid, hash, or openExternally.\n * @returns URL to a knowledge base article.\n */\nexport function buildKnowledgeBaseURL(\n article: CustomerKnowledgeBase,\n contextManager: ContextManager,\n namedArgs?: KnowledgeBaseLinkHelperNamedArgs\n): string {\n const { language } = contextManager.identityModel?.profile?.locale ?? {};\n const url = new URL(article);\n\n // Default language is en which doesn't require the query param\n if (language && language !== 'en') {\n url.searchParams.append(LANGUAGE_PARAM, language);\n }\n\n // Add optional named query params\n const { cid, openExternally, hash } = namedArgs ?? {};\n\n if (cid) {\n url.searchParams.append(CONTENT_ID_PARAM, cid);\n }\n\n if (openExternally) {\n url.searchParams.append(OPEN_EXTERNALLY_PARAM, String(openExternally));\n }\n\n // Add hash tag for specific section in article.\n if (hash) {\n url.hash = hash;\n }\n\n return url.href;\n}\n\nexport interface KnowledgeBaseLinkSignature {\n Args: {\n Positional: [keyof typeof CustomerKnowledgeBase];\n Named: KnowledgeBaseLinkHelperNamedArgs;\n };\n Return: string;\n}\n\n/**\n * Helper that takes a string representing the name of a knowledge base article returning its\n * URL along with a localization query parameter added.\n */\nexport default class KnowledgeBaseLink extends Helper {\n @service declare contextManager: ContextManager;\n\n compute(\n [article]: KnowledgeBaseLinkSignature['Args']['Positional'],\n namedArgs: KnowledgeBaseLinkSignature['Args']['Named']\n ): KnowledgeBaseLinkSignature['Return'] {\n const articleUrl = CustomerKnowledgeBase[article];\n\n assert(`Unknown article \"${article}\" passed to [KnowledgeBaseLink] template helper`, !!articleUrl);\n return buildKnowledgeBaseURL(articleUrl, this.contextManager, namedArgs);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'knowledge-base-link': typeof KnowledgeBaseLink;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\n\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport interface NavigateToRouteIdSignature {\n Args: {\n Positional: Parameters;\n };\n Return: () => ReturnType;\n}\n\n/**\n * Returns a function that when executed will navigate to the route with the given Route ID.\n */\nexport default class NavigateToRouteId extends Helper {\n @service declare navigation: NavigationService;\n\n compute([\n routeId,\n ...args\n ]: NavigateToRouteIdSignature['Args']['Positional']): NavigateToRouteIdSignature['Return'] {\n return () => this.navigation.transitionToRouteId(routeId, ...args);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'navigate-to-route-id': typeof NavigateToRouteId;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { inject as service } from '@ember/service';\nimport * as CustomerPageUrl from 'customer-site/enums/CustomerPageUrl';\n\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport interface NavigateToRouteNameSignature {\n Args: {\n Positional: [keyof typeof CustomerPageUrl, ...any[]];\n };\n Return: () => ReturnType;\n}\n\n/**\n * Returns a function that when executed will navigate to the route with the given enumeration name.\n */\nexport default class NavigateToRouteName extends Helper {\n @service declare navigation: NavigationService;\n\n compute([\n routeName,\n ...args\n ]: NavigateToRouteNameSignature['Args']['Positional']): NavigateToRouteNameSignature['Return'] {\n const route = CustomerPageUrl[routeName];\n assert(`Invalid route \"${routeName}\" passed to [navigate-to-route-name] template helper`, !!route);\n return () => this.navigation.transitionToRouteId(route, ...args);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'navigate-to-route-name': typeof NavigateToRouteName;\n }\n}\n","import Controller from '@ember/controller';\n\nimport type { ComponentLike } from '@glint/template';\nimport type { BaseCardSignature } from 'customer-site/components/dashboard-cards/devices/base-card';\nimport type BaseDeviceDetailsRoute from 'customer-site/home/device-details/route';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\nexport default abstract class BaseDeviceDetailsController extends Controller {\n declare model: ModelFrom>;\n\n abstract card: ComponentLike>;\n}\n","import AdcBaseRoute from '../classes/base-route';\nimport { EmberRules } from '../enums/CustomerPageUrl';\n\n/**\n * @classdesc\n *\n * Base route for device rules and schedules.\n *\n * @note Once we have multiple device types with schedules, we add a base rules and schedules routes.\n *\n * @class home.BaseAutomationRoute\n * @extends classes.BaseRoute\n * @abstract\n */\nexport default abstract class BaseHomeToAutomationRoute extends AdcBaseRoute {\n /**\n * Device type for the automation route.\n */\n abstract getDeviceType(): number;\n\n /**\n * Returns the rules or schedules route to redirect to.\n */\n getDestinationRouteId(): number {\n return EmberRules;\n }\n\n redirect(): void {\n this.contextManager.replaceRouteWithNativeRoute(\n this.getDestinationRouteId(),\n undefined,\n { deviceType: this.getDeviceType() },\n this\n );\n }\n}\n","import { service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberReports } from 'customer-site/enums/CustomerPageUrl';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * @classdesc\n * Base reports route for the device specific reports\n */\nexport default abstract class BaseReportsRoute extends AdcBaseRoute {\n @service declare navigation: ServiceRegistry['navigation'];\n\n abstract getReportType(): number;\n\n redirect(): void {\n this.navigation.replaceWithRouteId(EmberReports, {\n queryParams: {\n reportType: this.getReportType()\n }\n });\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type BaseDeviceModel from 'customer-site/models/devices/base-device';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\nexport interface BaseEditDeviceModel {\n device: Promise;\n}\n\n/**\n * Details/edit page for a gate by given ID\n */\nexport default class BaseEditDeviceRoute extends AdcBaseRoute {\n @service declare store: Store;\n\n canUserAccess(): boolean {\n // Route accessibility is only dependent on its parent route permissions.\n return true;\n }\n\n getRouteItemTitle(): string {\n return this.intl.t('generic.settings');\n }\n\n model({ id_device }: { id_device: string }, transition: Transition): BaseEditDeviceModel {\n return {\n device: this.modelFor<{ devices: ADCAsyncStoreFindAll }>(transition.to.parent!.name).devices.then(\n (devices) => devices.find(({ id }) => id === id_device)!\n )\n };\n }\n\n async rollbackModelOnTransition(): Promise {\n const { device } = this.modelFor>>(this.routeName),\n resolvedDevice = await device;\n\n if (!resolvedDevice.isSaving && get(resolvedDevice, 'hasDirtyAttributes')) {\n resolvedDevice.rollback();\n }\n }\n}\n","import { action } from '@ember/object';\nimport EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\n\nimport type RouterService from '@ember/routing/router-service';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport default class Route extends EmberRoute {\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n @service declare router: RouterService;\n\n /**\n * @warning This must be here instead of in after model or such hooks. The reason is that having it here\n * allows the system to fully transition into this empty route which causes the next route to be fully reentered.\n * This is beneficial when switching systems or dumping store data.\n * It also helps with not triggering a TransitionAborted error.\n * The performance penalty should be non existent or absolutely minimal.\n */\n @action\n didTransition() {\n const { identityModel } = this.contextManager,\n routeItem = identityModel.wizard ?? identityModel.navigation.firstObject;\n\n if (routeItem) {\n // If there is a wizard item that needs to be processed then transition there, otherwise to the first navigation item.\n this.navigation.transitionToRoute(routeItem);\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../classes/base-route';\n\n/**\n * List of allowed types for this route.\n *\n * @ignore\n * @private\n * @static\n * @memberof info.Route\n *\n * @type {string[]}\n */\nconst ALLOWED_PARAMS = ['terms', 'privacy', 'clipDonation', 'EEAPolicy', 'CookiePolicy'];\n\n/**\n * @classdesc\n * A route for displaying various production information.\n *\n * @class info.Route\n * @extends classes.BaseRoute\n */\nexport default class Route extends AdcBaseRoute {\n @service ajax;\n @service intl;\n @service router;\n\n queryParams = {\n type: {\n refreshModel: true\n }\n };\n\n afterModel(model) {\n model.data.catch(() => {\n this.router.transitionTo('app-error');\n });\n }\n\n canUserAccess() {\n // Route is always accessible.\n return true;\n }\n\n model({ type }) {\n // Update local title key w/ param. If none provided we default to terms page.\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-no-classic-methods\n const request = this.set('titleKey', (ALLOWED_PARAMS.includes(type) && type) || 'terms');\n\n // Request information.\n return {\n data: this.ajax.apiRequest(request)\n };\n }\n\n /**\n * The key for the info to be displayed.\n *\n * @type {String}\n */\n titleKey = '';\n\n /** @override */\n getRouteItemTitle() {\n return this.intl.tc(this, this.titleKey);\n }\n}\n","import { initialize } from '@adc/ui-components/initializers/setup-pikaday';\n\nexport default {\n name: 'setup-pikaday',\n initialize\n};\n","import { initialize } from '@adc/ui-components/initializers/setup-route-view';\n\nexport default {\n name: 'setup-route-view',\n initialize\n};\n","import ENV from 'customer-site/config/environment';\n\n/**\n * Environment settings instance initializer\n *\n * @param {Ember.ApplicationInstance} applicationInstance\n */\nexport function initialize(applicationInstance) {\n applicationInstance.lookup('service:envSettings')?.setEnvironment(ENV);\n}\n\nexport default {\n initialize\n};\n","import { tracked } from '@glimmer/tracking';\nimport { toggleClassOnBody } from '@adc/ember-utils/utils/browser-helpers';\nimport Controller from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { next, once } from '@ember/runloop';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * Handles things that need to happen in the application when a legacy modal is opened or closed.\n */\nfunction handleModalStateChange(this: LegacyPageController, isModalOpen: boolean): void {\n // Do nothing here, because the overlay currently does not work and needs to be reworked.\n this.showModalOverlay = isModalOpen;\n\n // Add or remove class based on the value of isModalOpen\n toggleClassOnBody('iframe-modal', isModalOpen);\n}\n\n/**\n * Legacy page controller\n */\nexport default class LegacyPageController extends Controller {\n queryParams = ['hash', 'url', 'search', 'timeStamp'];\n\n declare model: ModelFrom;\n\n /**\n * Hash portion of the url\n */\n hash = '';\n\n /**\n * Url of the legacy page\n */\n url = '';\n\n /**\n * Query parameters string portion of the url\n */\n search = '';\n\n /**\n * Flag to notify the modal component to close.\n */\n @tracked sendCloseModal = false;\n\n /**\n * Whether to show the modal overlay so that outside of the iframe is covered up\n */\n @tracked showModalOverlay = false;\n\n /**\n * The destination element for the modal overlay.\n */\n @computed()\n get overlayDestination(): Element {\n return document.querySelector('#app-page')!;\n }\n\n /**\n * Triggered when modal backdrop was clicked\n */\n @action modalOverlayTrigger(): void {\n this.sendCloseModal = true;\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n next(() => (this.sendCloseModal = false));\n }\n\n /**\n * Triggered when iframe detects that modal in legacy page has been opened or closed\n */\n @action modalStateChanged(isModalOpen: boolean): void {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n once(this, handleModalStateChange, isModalOpen);\n }\n\n /**\n * Triggered when iframe detects a route change and calls routeItemChanged from route file\n */\n @action itemChanged(...args: unknown[]): void {\n this.send('routeItemChanged', ...args);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'legacy-page': LegacyPageController;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{#if this.isLoading}}\\n \\n {{/if}}\\n
    \\n {{!-- @glint-expect-error Component needs to be converted to TS and glimmer. --}}\\n \\n
    \\n
    \\n\",{ moduleName: \"customer-site/components/modals/app/legacy-page/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { closeLegacyModal } from 'customer-site/legacy-page/route';\nimport { NavItem, SubItem } from '@adc/ui-components/components/modals/dialog-modals/nav/nav-dialog';\n\nimport './_style.scss';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type RouteItemModel from 'customer-site/models/navigation/route-item';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface LegacyPageArgs {\n model: any;\n}\n\n/**\n * Create a nav item for a top level route\n *\n * @private\n */\nfunction createLegacyNavItem(this: LegacyPage, routeItem: RouteItemModel): NavItem {\n const { id, pageTitle, relationship } = routeItem;\n\n return new NavItem(() => legacySelectItem.call(this, id), {\n description: pageTitle,\n subItems: (relationship.subRoutes ?? []).map(\n ({ id, pageTitle }) =>\n new SubItem(() => legacySelectItem.call(this, id), {\n description: pageTitle\n })\n )\n });\n}\n\n/**\n * Method to pass to nav items' onSelection\n *\n * @private\n * @memberOf LegacyPage\n */\nfunction legacySelectItem(this: LegacyPage, id: string) {\n // Use the id of the navigation item to get the route item.\n const route = this.navigation.getRouteItemUsingId(id);\n\n // Was a route item found?\n if (!route) {\n return;\n }\n\n this.navigation.transitionToRoute(route);\n}\n\n/**\n * @classdesc\n * Modal for legacy pages that are to be shown in the modal.\n */\nexport default class LegacyPage extends Component {\n @service declare contextManager: ContextManager;\n @service declare modals: ModalService;\n @service declare navigation: NavigationService;\n\n constructor(owner: unknown, args: LegacyPageArgs) {\n super(owner, args);\n\n this.setNavigationItems();\n }\n\n /**\n * Is the main content loading?\n */\n @tracked isLoading = false;\n\n /**\n * Nav items to feed to the nav dialog\n */\n navigationItems: Array = [];\n\n /**\n * Title for the current route.\n */\n @alias('contextManager.currentRouteData.routeItem.pageTitle')\n declare pageTitle: string;\n\n /**\n * Set the navigation items\n */\n private setNavigationItems(): void {\n const topLevelRoutes = this.args.model.routeItem.showInModalRootRouteItem.relationship.subRoutes;\n this.navigationItems = (topLevelRoutes ?? []).map((route: RouteItemModel) =>\n createLegacyNavItem.call(this, route)\n );\n }\n\n /**\n * Close the legacy modal by navigating to the prior route\n */\n @action\n async closeLegacy(): Promise {\n await closeLegacyModal.call(this, false);\n }\n\n /**\n * Triggered when iframe loading state changes\n */\n @action\n setIframeLoadingState(isLoading: boolean): void {\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (!this.isDestroyed) {\n this.isLoading = isLoading;\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::App::LegacyPage': typeof LegacyPage;\n }\n}\n","import { getOwner } from '@ember/application';\nimport EmberObject, { action } from '@ember/object';\nimport { scheduleOnce, next, later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport LegacyPageModal from 'customer-site/components/modals/app/legacy-page/index';\nimport { parseUrl } from '@adc/app-infrastructure/routes/utils';\nimport AdcBaseRoute from '../classes/base-route';\n\n/**\n * Close the legacy page modal, transition to the prior route if needed\n *\n * @memberOf legacy-page.Route\n *\n * @param wasTransition\n */\nexport async function closeLegacyModal(wasTransition) {\n const modals = this.modals.modalsToRender,\n lastModal = modals.lastObject,\n lastPreModalRouteData = this.contextManager.lastPreModalRouteData;\n\n if (!wasTransition && modals.length === 1 && LegacyPageModal === lastModal.type && lastPreModalRouteData) {\n const { queryParams, routeItem, routeName } = lastPreModalRouteData;\n // Get the slugs from previous route. If there are not, then just pass an empty array.\n const slugs = lastPreModalRouteData.route?.slugs ?? [];\n\n const rootRouteItem = lastModal.model.rootRouteItem;\n\n if (rootRouteItem) {\n await this.contextManager.popVisitedModalRoutes(rootRouteItem);\n }\n\n // Finally transition to the previous route.\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRoute(routeItem, routeName, queryParams, undefined, ...(slugs || []));\n }\n\n this.modals.closeModal(false);\n}\n\n/**\n * Schedules changing of URL\n *\n * @private\n * @static\n * @memberof legacy-page.Route\n *\n * @param {String} title\n * @param {String} url\n */\nfunction scheduleReplaceHistoryState(title, url) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', undefined, replaceHistoryState, title, url);\n}\n\n/**\n * Changes URL that is shown in the browser\n *\n * @private\n * @static\n * @memberof legacy-page.Route\n *\n * @param {String} title\n * @param {String} url\n */\nfunction replaceHistoryState(title, url) {\n // IE freaks out sometimes if this gets run right away so scheduling it for the next cycle\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n window.history.replaceState(null, title, url);\n });\n}\n\n/**\n * Gets route data object to be used in iFrame\n *\n * @private\n * @static\n * @memberof legacy-page.Route\n *\n * @param {models.navigation.RouteItem} routeItem\n * @param {String} src\n * @param {boolean} showInModal\n * @returns {{routeId: number, src: String, showInModal: boolean}}\n */\nfunction getRouteData(routeItem, src, showInModal) {\n return EmberObject.create({\n routeId: routeItem.get('routeId'),\n src,\n showInModal\n });\n}\n\n/**\n * Returns the controller for this route\n *\n * @private\n * @instance\n * @memberof legacy-page.Route\n *\n * @returns {legacy-page.Controller}\n */\nfunction getController() {\n return this.controller || this.controllerFor(this.routeName);\n}\n\n/**\n * Checks if legacy page should be displayed as a modal and opens the legacy page as a modal\n *\n * @private\n * @instance\n * @memberof legacy-page.Route\n */\nfunction setupPageInModal() {\n const { legacyPageSrc, routeItem } = this,\n showInModal = routeItem.get('showInModal');\n\n getController.call(this).set('showInModal', showInModal);\n\n if (showInModal) {\n // Stop the loading indicator for this route so that it does not hang.\n this.setIsRouteLoading(false);\n\n const legacyPageModel = {\n routeData: getRouteData(routeItem, legacyPageSrc, showInModal),\n routeItem,\n target: this,\n disableBackdropClose: true,\n focusSelector: '.modal'\n };\n\n // If legacy page modal already exists, replace the model, otherwise open new modal\n const legacyPageModal = this.modals.modalsToRender.find((modal) => modal.type === LegacyPageModal);\n if (legacyPageModal) {\n legacyPageModal.model = legacyPageModel;\n return;\n }\n\n // Show new modal if no existing legacy page modal\n this.modals.showModal(LegacyPageModal, legacyPageModel);\n }\n}\n\n/**\n * Schedule updates for when route items change\n *\n * @private\n * @instance\n * @memberof legacy-page.Route\n *\n * @param {boolean=} updatePageInModal - Should the page in modal be updated as well?\n * @param {boolean=} updateRouteInfo - Should we update information for the route that was entered?\n */\nfunction onRouteItemChange(updatePageInModal, updateRouteInfo) {\n // Update header info.\n if (updateRouteInfo) {\n // Cannot do this immediately, because if this happens on initial transition the route has not been transitioned into yet.\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, this.sendRouteInfoToApp);\n }\n\n // Only update page in modal if the direction came from navigation through the route's model, otherwise it was inner navigation\n // and we do not want to re-set the source and everything with the modal.\n if (updatePageInModal) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, setupPageInModal);\n }\n}\n\nconst queryParamConfig = {\n hash: {\n refreshModel: true\n },\n search: {\n refreshModel: true\n },\n // Timestamp is here just so that even if the url is the same, the route will be reentered\n timeStamp: {\n refreshModel: true\n },\n url: {\n refreshModel: true\n }\n};\n\n/**\n * @classdesc\n * Route that renders legacy pages\n */\nexport default class LegacyPageRoute extends AdcBaseRoute {\n @service modals;\n @service userActivity;\n @service intl;\n @service router;\n\n /**\n * All query params that are passed to this route. Because this is a redirect handler for all legacy pages, we can't\n * actually define all of the params.\n */\n fullQueryParams = undefined;\n\n queryParams = queryParamConfig;\n\n /**\n * @param {Ember.Routing.Transition}\n */\n async beforeModel(transition) {\n await super.beforeModel(...arguments);\n\n this.fullQueryParams = transition?.to?.queryParams;\n }\n\n /**\n * @param {{url: String, search: String, hash: String}} queryParams\n *\n * @returns {{routeItem: models.navigation.RouteItem, url: String, search: String=, hash: String=}}\n */\n model(queryParams) {\n const props = ['url', 'search', 'hash'];\n\n let [url, search, hash] = props.map((name) => decodeURIComponent(queryParams[name] || ''));\n\n // Parse URL to check if the passed in url contains other segments\n const urlSegments = parseUrl(url);\n\n // Check if we should add url segments to the data we received in query params\n // Query params takes precedence, but need to adjust for differences\n if (urlSegments) {\n const [urlUrl, urlSearch, urlHash] = props.map((name) => urlSegments[name]);\n\n url = urlUrl;\n search = search || urlSearch;\n hash = hash || urlHash;\n }\n\n // If we still don't have a search, we look at any extra query params provided to the legacy route.\n if (!search) {\n // Remove the query params that are defined for this route from the params object. We only want to pass params that are unknown to this route to the legacy page.\n let queryParamsForRoute = { ...this.fullQueryParams };\n Object.keys(queryParams).forEach((key) => delete queryParamsForRoute[key]);\n\n search = buildQueryString(queryParamsForRoute);\n }\n\n let { hash: locationHash, search: locationSearch, pathname: locationPathname } = window.location;\n\n // This is a little hacky, but provides a way for urls with query params to be able to be returned to when back button is pressed\n // The issue is that if a back button was pressed, the url in the navbar is correct, but there is no content in search or hash queryParams\n // So if the url contains the navbar pathName, use search and hash from navbar if they were not already defined\n if (url.toLowerCase().indexOf(locationPathname.toLowerCase()) >= 0) {\n search = search || locationSearch;\n hash = hash || locationHash;\n }\n\n // When refreshing application, we can lose queryparams on the route\n // This allows us to get the routeItem from the current url\n if (!url && locationPathname.endsWith('.aspx')) {\n url = locationPathname;\n search = locationSearch;\n hash = locationHash;\n }\n\n const contextManager = this.contextManager;\n\n // Get route item using url and search.\n let routeItem = contextManager.getRouteItemByUrl([url, search].compact().join(''));\n\n // Was no route item found AND was there a search value?\n if (!routeItem && !isEmpty(search)) {\n // Get route item using only the url.\n routeItem = contextManager.getRouteItemByUrl(url);\n }\n\n return {\n routeItem,\n url,\n search,\n hash\n };\n }\n\n /**\n * Check if there was a route item found\n *\n * @param {Object} model\n */\n afterModel(model) {\n const { routeItem, url, search, hash } = model;\n\n // Was no route item found?\n if (!routeItem) {\n // Notify user and transition to home route.\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n later(() => this.notificationManager.addWarning(this.intl.t('generic.routeUnavailable')));\n this.router.transitionTo('');\n return;\n }\n\n const legacyPageSrc = `${url}${search || ''}${hash || ''}`,\n showInModal = routeItem.get('showInModal');\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-no-classic-methods\n this.setProperties({\n legacyPageSrc,\n routeItem\n });\n\n // This cannot be done in setup controller, because that does not fire if the returned model is the same object\n // Need to create a new object so that the component can act on object change in addition to src change\n getController.call(this).set('routeData', getRouteData(routeItem, legacyPageSrc, showInModal));\n\n onRouteItemChange.call(this, true);\n }\n\n /**\n * @override\n */\n canUserAccess() {\n return true;\n }\n\n /**\n * Triggered when route id changed from the iframe\n */\n @action routeItemChanged(routeId, historyUrl, ignoreSessionTimeout, updateRouteInfo) {\n // Clear queryParams so that router will not disregard the same query params.\n // eslint-disable-next-line ember/no-private-routing-service\n getOwner(this).lookup('router:main')._routerMicrolib.state.queryParams = {};\n\n // Make sure that the modal overlay was closed if we are transitioning to another route.\n this.controller.modalStateChanged(false);\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n const newRouteItem = this.contextManager.getRouteItem(routeId);\n\n if (!newRouteItem) {\n return;\n }\n\n // If historyUrl was passed in, use that as the url, otherwise grab the url from routeItem.\n const { pageTitle, url } = newRouteItem,\n legacyPageSrc = historyUrl || url;\n\n // Update url\n scheduleReplaceHistoryState(pageTitle, legacyPageSrc);\n\n // Update route such that it handles session timeout correctly.\n this.userActivity.updateSessionTimeout(ignoreSessionTimeout);\n\n // Set current route item so that it can be used.\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-no-classic-methods\n this.setProperties({\n legacyPageSrc,\n routeItem: newRouteItem\n });\n\n onRouteItemChange.call(this, false, updateRouteInfo);\n }\n}\n\nfunction buildQueryString(paramObj) {\n // Remove any keys w/ falsey values and then convert to a query string.\n const qs = Object.keys(paramObj)\n .filter((key) => !!paramObj[key])\n .map((key) => `${key}=${paramObj[key]}`)\n .join('&');\n return qs.length ? `?${qs}` : '';\n}\n","import AdcBaseRoute from '../../../classes/base-route';\nimport { EmberMobileHelpContact } from '../../../enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * Mobile help contact route.\n *\n * @class ContactRoute\n * @extends classes.BaseRoute\n * @memberof mobile.help\n */\nexport default class SupportContactRoute extends AdcBaseRoute {\n /** @override */\n routeId = EmberMobileHelpContact;\n}\n","import EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport DS from 'ember-data';\nimport { EmberMobileHelpContact, EmberServiceAppointmentReasons } from '../../../enums/CustomerPageUrl';\n\nconst { PromiseArray } = DS;\n\n/**\n * @classdesc\n * Mobile WebView help index route controller.\n *\n * @class IndexController\n * @extends Ember.Controller\n \n * @memberof mobile.help\n */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-classes\nexport default EmberController.extend(\n /** @lends mobile.help.IndexController# */ {\n contextManager: service(),\n intl: service(),\n\n /**\n * The help links to display.\n *\n * @returns {Array<{text: String, fn: function}>}\n */\n links: computed('model.{contact,dealer}', function () {\n return PromiseArray.create({\n promise: (async () => {\n const { contextManager, model } = this,\n dealer = await model.dealer,\n contacts = await model.contacts,\n { helpDocumentationUrl } = dealer;\n\n return [\n [\n !!helpDocumentationUrl,\n this.intl.tc(this, 'help'),\n () => contextManager.transitionToUrl(helpDocumentationUrl)\n ],\n\n [\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n !isEmpty(contextManager.getRouteItem(EmberServiceAppointmentReasons)),\n this.intl.tc(this, 'appointment'),\n () =>\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(\n EmberServiceAppointmentReasons,\n undefined,\n undefined,\n 'new'\n )\n ],\n\n (() => {\n // Are there NO contacts?\n if (isEmpty(contacts)) {\n // Nothing to render.\n return [false];\n }\n\n // Is there only one contact?\n if (contacts.length === 1) {\n // Render single item in place.\n const [{ text, fn }] = contacts;\n return [true, text, fn];\n }\n\n // Return link to contact page.\n return [\n true,\n this.intl.t('generic.contactUs'),\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n () => contextManager.transitionToRouteId(EmberMobileHelpContact)\n ];\n })()\n ]\n .filter(([include]) => !!include)\n .map(([, text, fn]) => ({ text, fn }));\n })()\n });\n })\n }\n);\n","import AdcBaseRoute from '../../../classes/base-route';\nimport { EmberMobileHelp } from '../../../enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * Mobile WebView help index route.\n *\n * @class IndexRoute\n * @extends classes.BaseRoute\n * @memberof mobile.help\n */\nexport default class SupportIndexRoute extends AdcBaseRoute {\n /** @override */\n routeId = EmberMobileHelp;\n}\n","import { inject as service } from '@ember/service';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport DS from 'ember-data';\nimport AdcBaseRoute from '../../classes/base-route';\nimport { EmberSupport, EmberMobileHelp, SupportCenterCreateIssue } from '../../enums/CustomerPageUrl';\n\nconst { PromiseArray } = DS;\n\n/**\n * @classdesc\n *\n * @class HelpRoute\n * @extends classes.BaseRoute\n * @memberof mobile\n */\nexport default class BaseMobileHelpRoute extends AdcBaseRoute {\n @service intl;\n\n /** @override */\n routeId = EmberMobileHelp;\n\n model() {\n const { contextManager } = this,\n {\n identityModel: { dealer }\n } = contextManager;\n\n return {\n dealer,\n contacts: PromiseArray.create({\n promise: (async () => {\n const { supportPhone, externalSupportWebsite } = await dealer,\n fnGetLink = (href) => () => contextManager.transitionToUrl(href),\n fnGetItem = (icon, text, fn) => ({ icon, text, fn });\n\n const contactOptions = [\n [supportPhone, 'phone', supportPhone, fnGetLink(`tel:${supportPhone}`)],\n [\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(EmberSupport),\n 'email',\n this.intl.tc(this, 'email'),\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n () => contextManager.transitionToRouteId(EmberSupport)\n ],\n [\n externalSupportWebsite,\n 'help',\n this.intl.tc(this, 'supportWebsite'),\n fnGetLink(externalSupportWebsite)\n ],\n [\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n contextManager.getRouteItem(SupportCenterCreateIssue),\n 'warning',\n this.intl.tc(this, 'submitHelpTicket'),\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n () => contextManager.transitionToRouteId(SupportCenterCreateIssue)\n ]\n ]\n .filter(([shouldShow]) => !!shouldShow)\n .map(([, icon, text, fn]) => fnGetItem(icon, text, fn));\n\n return contactOptions;\n })()\n })\n };\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * An Access Group is a representation of a credential's User Level.\n */\nexport default class AccessControlAccessGroup extends BaseModel {\n /**\n * Name of the access group.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Whether or not this a global access group.\n */\n @attr('boolean', { defaultValue: false })\n declare isGlobal: boolean;\n\n /**\n * Whether or not this a enterprise user group.\n */\n @attr('boolean', { defaultValue: false })\n declare isEnterprise: boolean;\n\n /**\n * Whether or not this a parent group user group.\n */\n @attr('boolean', { defaultValue: false })\n declare isParentGroup: boolean;\n\n /**\n * Number of users in a user group.\n */\n @attr('number', { defaultValue: 0 })\n declare numberOfUsers: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-access-group': AccessControlAccessGroup;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { equal, not } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { Active } from 'customer-site/enums/AccessPlanAccessStatus';\nimport { DefaultOperatingMode } from 'customer-site/enums/MercuryControllerOperatingMode';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { General, AllDeviceAccess, Personal } from '../../enums/AccessPlanType';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type AccessControlAccessPoint from './access-control-access-point';\nimport type AccessControlCommonPlanUserType from './access-control-common-plan-user-type';\nimport type AccessControlHoliday from './access-control-holiday';\nimport type AccessControlTimetable from './access-control-timetable';\nimport type AccessControlUser from './access-control-user';\nimport type AccessControlUserTypeModel from './access-control-user-type';\n\nexport type AccessPlanColor = 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple' | 'greenblue';\n\nexport type PlanDetailsTotalKey =\n | 'partitionTotal'\n | 'doorTotal'\n | 'lockTotal'\n | 'elevatorTotal'\n | 'userTotal'\n | 'userTypeTotal'\n | 'ebsPanelTotal';\nexport type MissingCredentialsInfoKey =\n | 'hasUsersMissingCredentials'\n | 'hasAccessPlansMissingCredentials'\n | 'childUnitId';\n\n/**\n * Sends a request to retrieve an object holding the total number of access points and users on the system.\n */\nexport function getPlanDetailTotals(\n ajax: AjaxService,\n includeChildScope = false,\n includeParentScopeUsers = false,\n includeParentScopeAccessPoints = false\n): Promise> {\n return ajax.apiRequestForValue>(\n `accessControl/accessControlAccessPlans/getPlanDetailTotals?includeChildScope=${includeChildScope}&includeParentScopeUsers=${includeParentScopeUsers}&includeParentScopeAccessPoints=${includeParentScopeAccessPoints}`\n );\n}\n\n/**\n * Sends a request to get information about Access plans and users in them that are missing credentials.\n */\nexport async function getMissingCredentialsInfo(this: {\n ajax: AjaxService;\n}): Promise> {\n return this.ajax.apiRequestForValue>(\n 'accessControl/accessControlAccessPlans/getMissingCredentialsInfo'\n );\n}\n\n/**\n * Get a fresh copy of the default operating modes array.\n */\nfunction getDefaultOperatingModes(): number[] {\n return [DefaultOperatingMode];\n}\n\n/**\n * @classdesc Commercial Access Control Plan\n */\nexport default class AccessControlAccessPlanModel extends BaseModel {\n @service declare contextManager: ContextManager;\n\n // region Properties\n\n /**\n * Name of the access control plan\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * The type of access plan.\n */\n @attr('number', { defaultValue: General })\n declare accessPlanType: number;\n\n /**\n * The string name of the access plan's icon\n */\n @attr('string', { defaultValue: 'user-control-plan' })\n declare iconName: string;\n\n /**\n * The string name of the access plan's color\n */\n @attr('string', { defaultValue: 'red' })\n declare colorName: AccessPlanColor;\n\n /**\n * Can this plan be edited?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeModified: boolean;\n\n /**\n * Can this plan be deleted?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDeleted: boolean;\n\n /**\n * [DEPRECATED] The operating mode of the access plan.\n */\n @attr('number', { defaultValue: DefaultOperatingMode })\n declare operatingMode: number;\n\n /**\n * The operating modes of the access plan.\n */\n @attr('array', { defaultValue: getDefaultOperatingModes })\n declare operatingModes: number[];\n\n /**\n * The holder id of the scope this access plan lives on.\n */\n @attr('number')\n declare holderId: number;\n\n /*\n * The name of the scope this access plan lives on.\n */\n @attr('string', { defaultValue: '' })\n declare scopeName: string;\n\n /**\n * Does this Access Plan pause on holidays\n */\n @attr('boolean', { defaultValue: false })\n declare pausedOnHolidays: boolean;\n\n /**\n * Is this access plan 'All Access'?\n */\n @equal('accessPlanType', AllDeviceAccess)\n declare isAllAccess: boolean;\n\n /**\n * Is this a personal access plan?\n */\n @equal('accessPlanType', Personal)\n declare isPersonalAccessPlan: boolean;\n\n /**\n * You cannot modify the access points on an Access plan that is 'All Access'.\n */\n @not('isAllAccess')\n declare canModifyAccessPoints: boolean;\n\n /**\n * You cannot modify the users on a Personal Access Plan.\n */\n @not('isPersonalAccessPlan')\n declare canModifyUsers: boolean;\n\n /**\n * The type of access plan.\n */\n @attr('number', { defaultValue: Active })\n declare accessPlanAccessStatus: number;\n\n // endregion\n\n // region Relationships\n\n /**\n * Access point items that the user can have access to\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare accessPoints: AsyncHasMany;\n\n /**\n * Holidays that apply to this access plan\n */\n @hasMany('access-control/access-control-holiday', { async: true, inverse: 'accessPlans' })\n declare holidays: AsyncHasMany;\n\n /**\n * Timetables that apply to this access plan\n */\n @hasMany('access-control/access-control-timetable', { async: true, inverse: 'accessPlans' })\n declare timetables: AsyncHasMany;\n\n /**\n * Users in this access plan\n */\n @hasMany('access-control/access-control-user', { async: true, inverse: null })\n declare users: AsyncHasMany;\n\n /**\n * Elevator readers that the user can have access to\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare elevatorReaders: AsyncHasMany;\n\n /**\n * User types that can be added to this access plan\n */\n @hasMany('access-control/access-control-user-type', { async: true, inverse: 'accessPlans' })\n declare userTypes: AsyncHasMany;\n\n /**\n * User types that should automatically gain access to this access plan.\n */\n @hasMany('access-control/access-control-common-plan-user-type', { async: true, inverse: null })\n declare commonPlanUserTypes: AsyncHasMany;\n\n // endregion\n\n // region Computed properties\n\n /**\n * You cannot modify the schedule on a master user's Personal Access Plan.\n */\n @computed('isPersonalAccessPlan', 'users.@each.isPrimary')\n get canModifySchedules(): boolean {\n return !(this.isPersonalAccessPlan && this.users.isAny('isPrimary'));\n }\n\n /**\n * Whether or not this access plan contains access points that cannot be modified.\n */\n @computed('accessPoints')\n get hasUnmodifiableAccessPoints(): boolean {\n return !isEmpty(this.accessPoints) && !this.accessPoints.isEvery('canBeModified');\n }\n\n /**\n * Whether or not this access plan contains partitions that cannot be changed because of arming.\n */\n @computed('accessPoints')\n get hasPartitionsPreventingChange(): boolean {\n return !isEmpty(this.accessPoints) && this.accessPoints.isAny('isArmedUnchangeablePanel');\n }\n\n /**\n * Should we disable modification for this access plan?\n */\n @computed('canBeModified', 'hasUnmodifiableAccessPoints')\n get disableModification(): boolean {\n return this.hasUnmodifiableAccessPoints || !this.canBeModified;\n }\n\n // endregion\n\n // region Methods\n\n /**\n * Action to add holidays to this access plan\n *\n * @note The parameter names here must correspond to the server constants for retrieving the data.\n */\n addHolidays(holidayIds: string): Promise> {\n return this.submitCustomApiCall('addHolidays', 'POST', { holidayIds });\n }\n\n /**\n * Action to remove holidays from this access plan\n *\n * @note The parameter names here must correspond to the server constants for retrieving the data.\n */\n removeHolidays(holidayIds: string): Promise> {\n return this.submitCustomApiCall('removeHolidays', 'POST', { holidayIds });\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-access-plan': AccessControlAccessPlanModel;\n }\n}\n","import { hasMany, belongsTo, attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { alias, equal, not } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { AccessCardReader, Partition, ZwaveLock, ElevatorFloor } from '../../enums/DeviceType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type AccessControlAccessPointDevice from '../devices/access-control-access-point-device';\nimport type System from '../systems/system';\nimport type AccessControlAccessPlanModel from './access-control-access-plan';\n\n/**\n * Map to convert the DeviceType id to the icon we want to display next to it.\n */\nconst ACCESS_POINT_ICON_MAP: Record = {\n [Partition]: 'system',\n [AccessCardReader]: 'door-open',\n [ZwaveLock]: 'lock',\n [ElevatorFloor]: ''\n};\n\n/**\n * @classdesc\n * Commercial Access Control Access Control Point Doors\n */\nexport default class AccessControlAccessPoint extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Name of the device.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Last Access data.\n */\n @attr('string')\n declare lastAccess: string;\n\n /**\n * Access point items that the user can have access to.\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @hasMany('access-control/access-control-access-plan', { async: true })\n declare accessPlans: AsyncHasMany;\n\n /**\n * The system (unit) that this access point belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * Description of the system.\n */\n @alias('system.description')\n declare systemDescription: string;\n\n /**\n * Unit ID of the system this point belongs to\n */\n @alias('system.unitId')\n declare systemId: number;\n\n /**\n * Determines whether this is an access control door.\n */\n @equal('deviceType', AccessCardReader)\n declare isAccessControlDoor: boolean;\n\n /**\n * Determines whether this is a partition.\n */\n @equal('deviceType', Partition)\n declare isPartition: boolean;\n\n /**\n * Determines whether this is an elevator floor.\n */\n @equal('deviceType', ElevatorFloor)\n declare isElevatorFloor: boolean;\n\n @attr('boolean')\n declare isElevatorReader: boolean;\n\n /**\n * Determines the device type of the access point.\n */\n @attr('number')\n declare deviceType: number;\n\n /**\n * Can this access point be edited?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeModified: boolean;\n\n /**\n * Whether or not this represents a panel that is armed and not accepting user changes.\n */\n @attr('boolean', { defaultValue: false })\n declare isArmedUnchangeablePanel: boolean;\n\n /**\n * Does this access-point have reader-based anti-passback enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare readerAntiPassbackEnabled: boolean;\n\n /**\n * The anti-passback delay time associated with the access-point\n */\n @attr('number', { defaultValue: 0 })\n declare apbDelay: number;\n\n /**\n * Does this access-point have two-person access enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare twoPersonAccessEnabled: boolean;\n\n /**\n * Is this access point installed with a MIWA Lock?\n */\n @attr('boolean', { defaultValue: false })\n declare hasMiwaLock: boolean;\n\n /**\n * Does this access-point support two-person access?\n */\n @attr('boolean', { defaultValue: false })\n declare twoPersonAccessSupported: boolean;\n\n /**\n * Is this access point an EBS panel?\n */\n @attr('boolean', { defaultValue: false })\n declare isEBSPanel: boolean;\n\n /**\n * Is this access point available/online/not in malfunction?\n */\n @attr('boolean', { defaultValue: false })\n declare isOnline: boolean;\n\n /**\n * Is this access point the primary partition?\n */\n @attr('boolean', { defaultValue: false })\n declare isPrimaryPartition: boolean;\n\n /**\n * Displays reader name along with current status\n */\n @computed('isOnline', 'name')\n get statusDisplayName(): string {\n const state = this.isOnline ? '' : ` (${this.intl.t('home.partitions.unknown')})`;\n return this.name + state;\n }\n\n /**\n * SVG Icon name for this device type.\n */\n @computed('deviceType', 'isElevatorReader')\n get icon(): string {\n return this.isElevatorReader ? 'user-control-elevator' : ACCESS_POINT_ICON_MAP[this.deviceType];\n }\n\n /**\n * Should we disable modification of this access point?\n */\n @not('canBeModified')\n declare disableModification: boolean;\n\n /**\n * Action to buzz the selected door.\n */\n buzzDoor(): Promise> {\n return this.submitCustomApiCall('buzzDoor');\n }\n\n /**\n * Action to lock the selected door.\n */\n lockDoor(): Promise> {\n return this.submitCustomApiCall('lockDoor');\n }\n\n /**\n * Action to unlock the selected door.\n */\n unlockDoor(): Promise> {\n return this.submitCustomApiCall('unlockDoor');\n }\n\n /**\n * Access Point Device model corresponding to this access point\n * null if access point is not a card reader\n */\n @belongsTo('devices/access-control-access-point-device', { async: true, inverse: 'accessControlAccessPoint' })\n declare device: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-access-point': AccessControlAccessPoint;\n }\n}\n","import BaseAccessControlGenericUserType from 'customer-site/models/access-control/base-access-control-generic-user-type';\n\nexport default class AccessControlCommonPlanUserType extends BaseAccessControlGenericUserType {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-common-plan-user-type': AccessControlCommonPlanUserType;\n }\n}\n","import { hasMany, attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AccessControlAccessPoint from './access-control-access-point';\n\n/**\n * @classdesc\n * Commercial Access Control Elevators\n */\nexport default class AccessControlElevator extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Name of the device.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Name of the system.\n */\n @attr('string')\n declare systemDescription: string;\n\n /**\n * Name of the enterprise group.\n */\n @attr('string')\n declare enterpriseGroupDescription: string;\n\n @belongsTo('access-control/access-control-access-point', { async: false, inverse: null })\n declare elevatorReader: AccessControlAccessPoint;\n\n /**\n * Floors that this elevator has.\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare floors: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-elevator': AccessControlElevator;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type AccessControlAccessPlanModel from './access-control-access-plan';\n\n/**\n * Sends a request to get all available holidays.\n */\nexport function getAllFederalHolidays(ajax: AjaxService): Promise> {\n return ajax.apiRequest('accessControl/accessControlHolidays/getAllFederalHolidays');\n}\n\n/**\n * @classdesc\n * Commercial Access Control Holiday\n */\nexport default class AccessControlHoliday extends BaseModel {\n /**\n * Name of the Holiday\n */\n @attr('string')\n declare name: string;\n\n /**\n * Month of the Holiday\n */\n @attr('number')\n declare month: number;\n\n /**\n * Day of the Holiday\n */\n @attr('number')\n declare day: number;\n\n /**\n * Year of the Holiday\n */\n @attr('number')\n declare year: number;\n\n /**\n * Date of the Holiday\n */\n @attr('date')\n declare date: Date;\n\n /**\n * Determines the frequency of the holiday\n */\n @attr('string')\n declare frequency: string;\n\n /**\n * Can this holiday be deleted?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDeleted: boolean;\n\n /**\n * Can this holiday be modified?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeModified: boolean;\n\n /**\n * Access Control Access Plans that this Holiday applies to\n */\n @hasMany('access-control/access-control-access-plan', { async: true, inverse: 'holidays' })\n declare accessPlans: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-holiday': AccessControlHoliday;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BasePermissionsCollection from '../users/base-permissions-collection';\n\n/**\n * @classdesc\n * Permissions for Access Control based on the currently logged in context.\n */\nexport default class AccessControlPermissionsCollection extends BasePermissionsCollection {\n /**\n * Can the logged in user create new Access Plans, Users, and Timetables?\n */\n @attr('boolean', { defaultValue: false })\n declare canModifyUserAccess: boolean;\n\n /**\n * Can the logged in user read Access Plans, Users, and Timetables?\n */\n @attr('boolean', { defaultValue: false })\n declare canViewUserAccess: boolean;\n\n /**\n * Is this a stand alone access control system?\n */\n @attr('boolean', { defaultValue: false })\n declare isStandAloneAccessControl: boolean;\n\n /**\n * Is this customer using advanced timetables?\n */\n @attr('boolean', { defaultValue: false })\n declare isUsingAdvancedTimetables: boolean;\n\n /**\n * Does this system support access cards?\n * Requires that at least one CardReaderDevice's ReaderLockMode be set to CardOnly, CardOrPIN, or CardAndPIN.\n */\n @attr('boolean', { defaultValue: false })\n declare systemSupportsAccessCards: boolean;\n\n /**\n * Does this system support PIN codes?\n * Requires that at least one CardReaderDevice's ReaderLockMode be set to PINOnly, CardOrPIN, or CardAndPIN.\n */\n @attr('boolean', { defaultValue: false })\n declare systemSupportsPinCodes: boolean;\n\n /**\n * Does the logged in user has internal beta permission?\n * Added temporarily to restrict permission to modify Holiday to internal beta only\n */\n @attr('boolean', { defaultValue: false })\n declare hasInternalBeta: boolean;\n\n /**\n * The minimum of the max code lengths for every access point.\n * This is used to determine if a user's PIN code could potentially be truncated\n * on certain access points.\n */\n @attr('number')\n declare minimumOfMaxCodeLengths: number;\n\n /**\n * URL to download the list of users.\n */\n @attr('string')\n declare exportUsersListUrl: string;\n\n /**\n * Is the system / its group integrated with PointCentral?\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentralAccessControl: boolean;\n\n /**\n * Does the logged in user have Azure AD sync permissions\n */\n @attr('boolean', { defaultValue: false })\n declare azureActiveDirectoryIntegration: boolean;\n\n /**\n * is the current account linked to an external identity provider?\n */\n @attr('boolean', { defaultValue: false })\n declare isLinkedToActiveDirectory: boolean;\n\n /**\n * Are AD users automatically mapped to access plans?\n */\n @attr('boolean', { defaultValue: false })\n declare mapADUsersToAccessPlans: boolean;\n\n /**\n * Does the parent dealer have the paused contacts feature?\n */\n @attr('boolean', { defaultValue: false })\n declare accessControlPausedContacts: boolean;\n\n /**\n * Should we show Reader Based Anti-Passback feature for the customer?\n */\n @attr('boolean', { defaultValue: false })\n declare showReaderBasedAntiPassback: boolean;\n\n /**\n * Can the customer can use access control search enhancement features?\n */\n @attr('boolean', { defaultValue: false })\n declare searchEnhancement: boolean;\n\n /**\n * Can the customer Edit Enterprise Holidays?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditEnterpriseHolidays: boolean;\n\n /**\n * Is the Locations Selection Dropdown defaulted to None Selected when editing access points?\n */\n @attr('boolean', { defaultValue: false })\n declare defaultAccessPointsLocationSelectionToNone: boolean;\n\n /**\n * Can the customer view the new list-view and filter options for access plan page\n */\n @attr('boolean', { defaultValue: false })\n declare viewAccessPlanListView: boolean;\n\n /**\n * Does the highest scope have MLEG Access control beta\n */\n @attr('boolean', { defaultValue: false })\n declare hasMLEGAccessControl: boolean;\n\n /**\n * Does the highest scope have Access Control custom features\n */\n @attr('boolean', { defaultValue: false })\n declare hasAccessControlCustomFeatures: boolean;\n\n /**\n * Is the feature toggle activated for this customer?\n */\n @attr('boolean', { defaultValue: false })\n declare additionalAccessSettingsEnabled: boolean;\n\n /**\n * Does the customer have the Access Control Doors permission enabled\n */\n @attr('boolean', { defaultValue: false })\n declare hasAccessControlDoors: boolean;\n\n /**\n * Does the current setup (current scope and all descendant and ancestors) support Temporary Access Plans\n */\n @attr('boolean', { defaultValue: false })\n declare allScopesSupportTemporaryAccessPlan: boolean;\n\n /**\n * Does the customer's panel not support substring user codes\n */\n @attr('boolean', { defaultValue: false })\n declare cannotSupportSubstringUserCodes: boolean;\n\n /**\n * Use the new bulk management pages for MLAD if the MultiLevelActiveDirectory_BulkManagement feature toggle is enabled for the selected system group.\n */\n @attr('boolean', { defaultValue: false })\n declare useMLADBulkManagement: boolean;\n\n /**\n * Use the new access points page with batch loading.\n */\n @attr('boolean', { defaultValue: false })\n declare useAccessPointsPaginationEnhancements: boolean;\n\n /**\n * Is the APUMRetainUsers feature toggle enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare useAPUMRetainUsers: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-permissions-collection': AccessControlPermissionsCollection;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type EmberObject from '@ember/object';\nimport type AccessControlAccessPlanModel from './access-control-access-plan';\n\nexport interface TimetableScheduleDay extends EmberObject {\n day: number;\n startMinutesLocal: number;\n endMinutesLocal: number;\n durationMinutes?: number;\n dayString?: string;\n}\n\n/**\n * @classdesc\n * Commercial Access Control Timetable\n */\nexport default class AccessControlTimetable extends BaseModel {\n /**\n * Name of the Timetable\n */\n @attr('string')\n declare name: string;\n\n /**\n * Can this timetable be edited?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeModified: boolean;\n\n /**\n * Can this timetable be deleted?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDeleted: boolean;\n\n /**\n * Access Control Access Plans that this Timetable applies to\n */\n @hasMany('access-control/access-control-access-plan', { async: true, inverse: 'timetables' })\n declare accessPlans: AsyncHasMany;\n\n /**\n * Dictionary of schedule for each day of the week\n */\n @attr('access-control-schedule')\n declare scheduleDictionary: TimetableScheduleDay[];\n\n /**\n * The start date of the timetable (temporary access control).\n */\n @attr('date', { defaultValue: undefined })\n declare startDate: Date | undefined;\n\n /**\n * The end date of the timetable (temporary access control).\n */\n @attr('date', { defaultValue: undefined })\n declare endDate: Date | undefined;\n\n /**\n * Timezone that the start/end times are saved relative to.\n */\n @attr('string')\n declare startEndTimeZoneString: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-timetable': AccessControlTimetable;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport BaseAccessControlGenericUserType from 'customer-site/models/access-control/base-access-control-generic-user-type';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AccessControlAccessPlanModel from './access-control-access-plan';\n\nexport default class AccessControlUserTypeModel extends BaseAccessControlGenericUserType {\n @service declare intl: ADCIntlService;\n\n /**\n * Access Control Access Plans that this user type can have access to\n */\n @hasMany('access-control/access-control-access-plan', { async: true, inverse: 'userTypes' })\n declare accessPlans: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-user-type': AccessControlUserTypeModel;\n }\n}\n","import { belongsTo, hasMany, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { not } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseUser from '../users/base-user';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type System from '../systems/system';\nimport type SystemGroup from '../systems/system-group';\nimport type AccessControlAccessPlanModel from './access-control-access-plan';\n\n/**\n * @classdesc\n * Access Control User\n */\nexport default class AccessControlUser extends BaseUser {\n @service declare intl: ADCIntlService;\n\n /**\n * Access Control Access Plans that this user belongs to\n */\n @hasMany('access-control/access-control-access-plan', { async: true, inverse: null })\n declare accessPlans: AsyncHasMany;\n\n /**\n * The access group this user belongs to.\n */\n @attr('number', { defaultValue: -1 })\n declare accessGroupId: number;\n\n /**\n * The system (unit) that this user belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * The system group that this user belongs to.\n */\n @belongsTo('systems/system-group', { async: true, inverse: null })\n declare systemGroup: AsyncBelongsTo;\n\n /**\n * Description of the system.\n */\n @computed('system.description')\n get systemDescription(): string {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error We need to await `this.system` before we use it's properties.\n return get(this.system, 'description') || this.intl.t('generic.enterprise');\n }\n\n /**\n * Is the user on a system with a panel?\n */\n @computed('system.partitions')\n get hasPanel(): boolean {\n const partitions = get(this.system, 'partitions') || [];\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error We need to await `this.system.partitions` before we use it's properties.\n return partitions.length > 0;\n }\n\n /**\n * Is this a normal user model? (Not a duress code user)\n */\n @not('isDuress')\n declare isNormalUser: boolean;\n\n /**\n * Has this user been flagged as an ADA user?\n */\n @attr('boolean', { defaultValue: false })\n declare adaFlag: boolean;\n\n /**\n * Has this user been flagged as a VIP user?\n */\n @attr('boolean', { defaultValue: false })\n declare apbExemptFlag: false;\n\n /**\n * Is this user missing any credentials required by any of its access plans?\n */\n @attr('boolean', { defaultValue: false })\n declare isMissingCredentialForAccessPlan: boolean;\n\n /**\n * Is this user a parent group user?\n */\n @attr('boolean', { defaultValue: false })\n declare isParentGroupUser: boolean;\n\n /**\n * This property determines if we will display the scope names of access plans for the given user.\n */\n @attr('boolean', { defaultValue: false })\n declare showAccessPlanScopeName: boolean;\n\n // Added by the child-group-bulk-action-row component.\n originalAccessPlans?: AccessControlAccessPlanModel[];\n\n /**\n * Pauses or un-pauses a user's access.\n */\n pauseUnpauseUser(pause: boolean): Promise {\n return this.submitCustomApiCall('pauseUnpauseUser', 'POST', pause);\n }\n\n /**\n * Update this user's access plans on the scope of the system group whose id is passed-in here.\n */\n async saveAccessPlansOnDifferentScope(\n accessPlanIds: number[],\n systemGroupId: number,\n userType: number,\n startDate?: Date,\n endDate?: Date,\n isNew = false\n ): Promise {\n this.submitCustomApiCall('saveAccessPlansOnDifferentScope', 'POST', {\n accessPlanIds,\n systemGroupId,\n userType,\n startDate,\n endDate,\n isNew\n });\n }\n\n /**\n * Sends a PointCentral welcome email to the user's email addresses.\n */\n sendWelcomeEmail(): Promise {\n return this.submitCustomApiCall('sendWelcomeEmail');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-control-user': AccessControlUser;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * Sends a request to retrieve a list of location names with Aero controllers as a comma separated string\n */\nexport function getAeroLocationNames(ajax: AjaxService): Promise {\n return ajax.apiRequestForValue('accessControl/accessPlanLimitIssues/getAeroLocationNames');\n}\n\n/**\n * @classdesc\n *\n * Access Plan limit issue.\n */\nexport default class AccessPlanLimitIssue extends BaseModel {\n /**\n * Name of the user with access plan limit issue.\n */\n @attr('string')\n declare userName: string;\n\n /**\n * Contact Id with access plan limit issues.\n */\n @attr('number')\n declare contactId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-plan-limit-issue': AccessPlanLimitIssue;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type AccessPlanPendingChange from './access-plan-pending-change';\n\n/**\n * @classdesc\n *\n * Pending changes to Access Plans.\n */\nexport default class AccessPlanPendingChangeCollection extends BaseModel {\n /**\n * Collection of pending changes.\n */\n @hasMany('access-control/access-plan-pending-change', { async: false, inverse: null })\n declare pendingChanges: SyncHasMany;\n\n /**\n * Are there any pending Access Plan changes?\n * This means access points were either added and/or removed outside of normal customer site processes.\n */\n @attr('boolean', { defaultValue: false })\n declare hasPendingAccessPlanChanges: boolean;\n\n /**\n * Are there any pending Pin Code changes?\n * This means a pin code was changed outside of normal customer site processes.\n */\n @attr('boolean', { defaultValue: false })\n declare hasPendingPinCodeChanges: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-plan-pending-change-collection': AccessPlanPendingChangeCollection;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AccessControlAccessPoint from './access-control-access-point';\n\n/**\n * @classdesc\n *\n * Pending changes to Access Plans.\n */\nexport default class AccessPlanPendingChange extends BaseModel {\n /**\n * Name of the user who this affects.\n */\n @attr('string')\n declare userName: string;\n\n /**\n * Whether or not to accept these changes.\n */\n @attr('boolean')\n declare acceptChanges: boolean;\n\n /**\n * Whether or not the affected user was in an All Access plan\n */\n @attr('boolean')\n declare wasAllAccessUser: boolean;\n\n /**\n * Whether or not the affected user is an Active Directory User\n */\n @attr('boolean', { defaultValue: false })\n declare isActiveDirectoryUser: boolean;\n\n /**\n * Access points that are being added.\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare accessPointsAdded: AsyncHasMany;\n\n /**\n * Access points that are being removed.\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare accessPointsRemoved: AsyncHasMany;\n\n /**\n * Access points that have had user codes updated.\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare accessPointsUpdated: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/access-plan-pending-change': AccessPlanPendingChange;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { getUserIcon } from '../../utils/users';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport default class BaseAccessControlGenericUserType extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Name of the user type.\n */\n @attr('string')\n declare name: string;\n\n /**\n * SVG Icon name for this user type.\n */\n get icon(): string {\n return getUserIcon(this.id);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/base-access-control-generic-user-type': BaseAccessControlGenericUserType;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { unassignCredential } from 'customer-site/access-control/badge-management/controller';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport BaseCredential from './base-credential';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * @classdesc\n * An access control access card\n */\nexport default class AccessCardCredential extends BaseCredential {\n @service declare intl: ADCIntlService;\n /**\n * The serial number of the access card\n */\n @attr('string')\n declare cardSerial: string;\n\n /**\n * The message associated with access card scan\n */\n @attr('string')\n declare errorMessage: string;\n\n /**\n * If the credential is a mobile credential\n */\n @attr('boolean', { defaultValue: false })\n declare isMobileCredential: boolean;\n\n /**\n * Edit options on the credential\n */\n get editOptions(): Array {\n const options = [];\n\n if (this.user) {\n options.push(\n DropdownActionItem.create({\n name: this.intl.tc(this, 'unassign-badge'),\n icon: undefined,\n action: () => unassignCredential(this)\n })\n );\n }\n\n return options;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/credentials/access-card-credential': AccessCardCredential;\n }\n}\n","import { belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type AccessControlAccessPoint from '../access-control-access-point';\nimport type AccessControlUser from '../access-control-user';\n\n/**\n * @classdesc\n * An access control credential conflict.\n */\nexport default class AccessControlCredentialConflict extends BaseModel {\n /**\n * The first user involved in the credential conflict.\n */\n @belongsTo('access-control/access-control-user', { async: true, inverse: null })\n declare firstUser: AsyncBelongsTo;\n\n /**\n * The second user involved in the credential conflict.\n */\n @belongsTo('access-control/access-control-user', { async: true, inverse: null })\n declare secondUser: AsyncBelongsTo;\n\n /**\n * The access points involved in the conflict.\n */\n @hasMany('access-control/access-control-access-point', { async: true, inverse: null })\n declare accessPoints: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/credentials/access-control-credential-conflict': AccessControlCredentialConflict;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type BaseUser from 'customer-site/models/users/base-user';\n\n/**\n * @classdesc\n * An access control base credential\n */\nexport default class BaseCredential extends BaseModel {\n /**\n * Access Control User that this credential belongs to\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @belongsTo('users/base-user', { async: false, polymorphic: true })\n declare user: BaseUser;\n\n @attr('boolean', { defaultValue: false })\n declare activeDirectoryFlag: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/credentials/base-credential': BaseCredential;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseCredential from './base-credential';\n\n/**\n * @classdesc\n * An access control pin code\n */\nexport default class PinCodeCredential extends BaseCredential {\n /**\n * The pin code of the credential\n */\n @attr('string')\n declare pinCode: string;\n\n /**\n * Whether the pin code is PointCentral (ie. it needs to be managed by the PC reservation system)\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentral: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/credentials/pin-code-credential': PinCodeCredential;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class AccessControlLockUser extends BaseModel {\n /**\n * Description.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'access-control/lock-user': AccessControlLockUser;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class ActiveDirectoryGroup extends BaseModel {\n /**\n * the display name of the group\n */\n @attr('string')\n declare groupName: string;\n\n /**\n * the ObjectId of the group in the AD instance\n */\n @attr('string')\n declare groupId: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'active-directory-user-management/active-directory-group': ActiveDirectoryGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseUser from '../users/base-user';\n\n/**\n * @classdesc\n * Active Directory User\n */\nexport default class ActiveDirectoryUser extends BaseUser {\n /**\n * The email address of the user.\n */\n @attr('string')\n declare email: string;\n\n /**\n * the ObjectId of the user in the AD instance\n */\n @attr('string')\n declare objectId: string;\n\n /**\n * Whether a contact can be added for the Ad user or not\n */\n @attr('boolean')\n declare canAddContact: boolean;\n\n /**\n * Whether a login can be added for the Ad user or not\n */\n @attr('boolean')\n declare canAddLogin: boolean;\n\n /**\n * whether the user is selected in the list page\n */\n @attr('boolean')\n declare selected: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'active-directory-user-management/active-directory-user': ActiveDirectoryUser;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { hasMany, attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { empty } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport AdcBaseModel from '@adc/app-infrastructure/models/base-model';\nimport ActivityGroup from '../../classes/activity/event-history/helpers/activity-group';\nimport ActivityItem from '../../classes/activity/event-history/helpers/activity-item';\nimport ActivityLocation from '../../classes/activity/event-history/helpers/activity-location';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { SyncHasMany } from '@ember-data/model';\nimport type BaseCollection from 'customer-site/classes/activity/event-history/helpers/base-collection';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type HistoryEvent from './history-event';\n\n/**\n * Returns the key (formatted date) for the passed date.\n */\nfunction getEventKey(this: ActivityDay, date: Date): string {\n return this.intl.formatDateTz(date, {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n}\n\n/**\n * @classdesc\n * The collection of activity center events for a single day.\n */\nexport default class ActivityDay extends AdcBaseModel {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n // region Model properties.\n\n /**\n * The date this activity date represents.\n */\n @attr('date')\n declare date: Date;\n\n /**\n * The number of seconds to use for grouping items.\n */\n @attr('number', { defaultValue: 300 })\n declare groupSize: number;\n\n /**\n * Whether or not to display the given time in the login's selected timezone.\n */\n @attr('boolean')\n declare showPreferredTimezone: boolean;\n\n /**\n * ActivityBar resource name\n */\n @attr('string')\n declare activityBar: string;\n\n /**\n * The event associated with this day.\n */\n @hasMany('activity/history-event', { async: false, inverse: null })\n declare events: SyncHasMany;\n\n // endregion\n\n // region Non-model state.\n\n /**\n * Indicates this day is currently expanded.\n */\n @tracked isExpanded = true;\n\n // endregion\n\n // region Computed properties\n\n /**\n * The static url of the gif representing the amount of activity for the day.\n */\n @computed('activityBar')\n get highlightsResourcePath(): Promise {\n return (async () => {\n const path = await this.activityBar;\n return this.contextManager.getStaticResourcePath(`webimages/${path}`);\n })();\n }\n\n /**\n * The Key for this (formatted date).\n */\n @computed('date')\n get key(): string {\n return getEventKey.call(this, this.date);\n }\n\n /**\n * Indicates this day is the current date in the systems timezone.\n */\n @computed('key')\n get isToday(): boolean {\n return this.key === getEventKey.call(this, new Date());\n }\n\n /**\n * Indicates this day has no activity.\n */\n @empty('events')\n declare noActivity: boolean;\n\n /**\n * The {@link classes.activity.event-history.helpers.ActivityItem} associated with this day.\n */\n @computed('events.[]', 'showPreferredTimezone')\n get items(): ActivityItem[] {\n return this.events.toArray().map(\n (model, idx, src) =>\n new ActivityItem(this, model, {\n previous: src[idx - 1],\n showPreferredTimezone: this.showPreferredTimezone\n })\n );\n }\n\n /**\n * Adds the passed item to an existing collection (if eligible) and returns insert status.\n */\n private insertIntoPrevious(collection: T[], item: ActivityItem): boolean {\n const previousCollection = collection[collection.length - 1];\n\n if (previousCollection?.isItemEligible(item)) {\n previousCollection.addItem(item);\n return true;\n }\n\n return false;\n }\n\n /**\n * The {@link classes.activity.event-history.helpers.ActivityGroup} associated with this day.\n */\n @computed('items', 'groupSize')\n get groups(): ActivityGroup[] {\n return this.items\n .slice()\n .reverse()\n .reduce((results, item, idx) => {\n if (!this.insertIntoPrevious(results, item)) {\n results.push(new ActivityGroup(this, [item], `activity-group-${idx}`, this.groupSize));\n }\n\n return results;\n }, [])\n .reverse();\n }\n\n /**\n * The {@link classes.activity.event-history.helpers.ActivityLocation} associated with this day.\n */\n @computed('items')\n get locations(): ActivityLocation[] {\n return this.items\n .slice()\n .reverse()\n .reduce((results, item) => {\n if (!this.insertIntoPrevious(results, item)) {\n results.push(new ActivityLocation(this, [item]));\n }\n\n return results;\n }, [])\n .reverse();\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/activity-day': ActivityDay;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type ActivityFilterCategory from './activity-filter-category';\n\nexport default class ActivityFilterCatalog extends BaseModel {\n /**\n * The supplied catalog.\n */\n @hasMany('activity/activity-filter-category', { async: true, inverse: null })\n declare activityFilterCategories: AsyncHasMany;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/activity-filter-catalog': ActivityFilterCatalog;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\nimport type ActivityFilterSubsection from './activity-filter-subsection';\n\nexport default class ActivityFilterCategory extends BaseModel {\n /**\n * The name of the activity filter category.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The list of subsections by category.\n */\n @hasMany('activity/activity-filter-subsection', { async: false, inverse: null })\n declare activityFilterSubsections: SyncHasMany;\n\n /**\n * The associated Icon for this category\n */\n @attr('icon-data')\n declare icon: IconData;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/activity-filter-category': ActivityFilterCategory;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\nexport default class ActivityFilterOption extends BaseModel {\n /**\n * Description of the event.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * The associated Icon for this filter\n */\n @attr('icon-data')\n declare icon: IconData;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/activity-filter-option': ActivityFilterOption;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type ActivityFilterOption from './activity-filter-option';\n\nexport default class ActivityFilterSubsection extends BaseModel {\n /**\n * The name of the activity filter subsection.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The list of filter options by category.\n */\n @hasMany('activity/activity-filter-option', { async: false, inverse: null })\n declare filterOptions: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/activity-filter-subsection': ActivityFilterSubsection;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model that defines the activity permissions.\n */\nexport default class ActivityPermission extends BaseModel {\n /**\n * Should the user see the new activity page's UI?\n *\n * Note - This will be removed once the new activity UI is ready.\n */\n @attr('boolean', { defaultValue: false })\n declare canViewActivityFiltersV2: boolean;\n\n /**\n * Does the user have permission to create/edit/delete activity history quick filters?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditActivityQuickFilters: boolean;\n\n /**\n * The permission to determine whether the user sees the \"Show Other Clips\" activity filter toggle.\n */\n @attr('boolean')\n declare canViewShowOtherClips: boolean;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/activity-permission': ActivityPermission;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport AdcBaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type HistoryEvent from './history-event';\n\n//region Typing\nenum AlarmRecapSummaryItemType {\n main, // This would be the alarm event or any other thing we want to show the user as the first and most important item\n action // An item which is represented by a user action (e.g. Disarm)\n}\n\ninterface AlarmRecapItem {\n itemType: AlarmRecapSummaryItemType;\n eventType: number;\n timestamp: Date;\n authorName: string;\n authorInitials: string;\n description: string;\n}\n\n// region Model\n/**\n * @classdesc\n *\n * A grouping of alarm-correlated events for display on the Alarm Recap page\n */\nexport default class AlarmRecap extends AdcBaseModel {\n @attr('array')\n declare summaryItems: AlarmRecapItem[];\n\n @hasMany('activity/history-event', { async: false, inverse: null })\n declare events: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'alarm-recap': AlarmRecap;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type HistoryDeviceIdFilter from 'customer-site/models/activity/history-device-id-filter';\nimport type HistoryDeviceTypeFilter from 'customer-site/models/activity/history-device-type-filter';\nimport type HistoryEventFilter from 'customer-site/models/activity/history-event-filter';\nimport type HistoryLocationFilter from 'customer-site/models/activity/history-location-filter';\nimport type HistoryUserFilter from 'customer-site/models/activity/history-user-filter';\nimport type HistoryUserTypeFilter from 'customer-site/models/activity/history-user-type-filter';\n\nexport default class BaseActivitySearch extends BaseModel {\n /**\n * The begin date for the search.\n */\n @attr('date')\n declare startDate: Date;\n\n /**\n * The end date for the search.\n */\n @attr('date')\n declare endDate: Date;\n\n /**\n * The list of users to filter on.\n */\n @hasMany('activity/history-user-filter', { async: false, inverse: null })\n declare userFilters: SyncHasMany;\n\n /**\n * The list of user types to filter on.\n */\n @hasMany('activity/history-user-type-filter', { async: false, inverse: null })\n declare userTypeFilters: SyncHasMany;\n\n /**\n * The list of event types to filter on.\n */\n @hasMany('activity/history-event-filter', { async: false, inverse: null })\n declare eventTypeFilters: SyncHasMany;\n\n /**\n * The list of event types to filter on.\n */\n @hasMany('activity/activity-filter-option', { async: false, inverse: null })\n declare eventTypeFiltersV2: SyncHasMany;\n\n /**\n * The list of device types to filter on.\n */\n @hasMany('activity/history-device-type-filter', { async: false, inverse: null })\n declare deviceTypeFilters: SyncHasMany;\n\n /**\n * The list of device names to filter on. Mutually exclusive with LocationFilters.\n */\n @hasMany('activity/history-device-id-filter', { async: false, inverse: null })\n declare deviceNameFilters: SyncHasMany;\n\n /**\n * The list of locations to filter on. Mutually exclusive with DeviceNameFilters.\n */\n @hasMany('activity/history-location-filter', { async: false, inverse: null })\n declare locationFilters: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/base-activity-search': BaseActivitySearch;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Represents an event in a daily summary.\n */\nexport default class Event extends BaseModel {\n /**\n * Returns a string for the thumbnail url of the event.\n */\n @attr('string', { defaultValue: '' })\n declare thumbnailUrl: string;\n\n /**\n * JSON for the lottie animation.\n */\n @attr()\n declare animationJson: Record;\n\n /**\n * The ID for the video event.\n */\n @attr('number')\n declare correlatedEventId: number;\n\n /**\n * The URL for the clip.\n */\n @attr('string', { defaultValue: '' })\n declare clipUrl: string;\n\n /**\n * True if the event has a video clip.\n */\n @attr('boolean')\n declare hasVideo: boolean;\n\n /**\n * The timestamp (in seconds) to start the video playback.\n */\n @attr('number')\n declare startTimestampSeconds: number;\n\n /**\n * The timestamp (in seconds) to stop the video playback.\n */\n @attr('number')\n declare endTimestampSeconds: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/daily-summary/event': Event;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type Event from './event';\n\n/**\n * @classdesc\n * Represents a daily summary playlist with a collection of events.\n */\nexport default class Playlist extends BaseModel {\n /**\n * The UTC start date for this playlist.\n */\n @attr('date')\n declare date: Date;\n\n /**\n * The events which belong to this playlist.\n */\n @hasMany('activity/daily-summary/event', { async: false, inverse: null })\n declare events: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/daily-summary/playlist': Playlist;\n }\n}\n","import Model, { belongsTo, attr } from '@ember-data/model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type EnergyMeter from '../devices/energy-meter';\n\n/**\n * @classdesc\n * The EnergyGoal model.\n */\nexport default class EnergyGoal extends Model {\n /**\n * Unit ID for this energy meter goal\n */\n @attr('number', { defaultValue: -1 })\n declare unitId: number;\n\n /**\n * Start date for the goal\n */\n @attr('date')\n declare goalStart: Date;\n\n /**\n * Kilowatt representation of energy goal for device\n */\n @attr('number', { defaultValue: 0 })\n declare goalKwh: number;\n\n /**\n * Dollar representation of energy goal for device\n */\n @attr('number', { defaultValue: 0 })\n declare goalDollars: number;\n\n /**\n * The energy meter (device) that the energy goal belongs to.\n */\n @belongsTo('devices/energy-meter', { async: true, inverse: 'energyGoals' })\n declare energyMeter: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/energy-goal': EnergyGoal;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseActivitySearch from 'customer-site/models/activity/base-activity-search';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type EmailAddress from '../../users/email-address';\n\n/**\n * @classdesc\n *\n * Represents a historical request for extended activity history.\n */\nexport default class Request extends BaseActivitySearch {\n /**\n * The date that the report was originally requested by the customer.\n */\n @attr('date')\n declare requestedDate: Date;\n\n /**\n * The date that the report finished processing. Null if it hasn't finished or if it failed.\n */\n @attr('date')\n declare completedDate: Date;\n\n /**\n * The status of the report.\n */\n @attr('string')\n declare status: string;\n\n /**\n * An enum representing the status of the report.\n */\n @attr('number')\n declare statusEnum: number;\n\n /**\n * The list of recipients for this report.\n */\n @hasMany('users/email-address', { async: false, inverse: null })\n declare recipients: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/extended-activity-history/request': Request;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { HeatMapParameter } from '../../transforms/heat-map-parameter';\n\nexport enum HeatMapMetricIndex {\n IncludeLowActivity = 'includeLowActivity',\n IsTimeLapse = 'isTimeLapse',\n IsComparison = 'isComparison'\n}\n\n/**\n * @classdesc\n * Holds the customer values for the inputs on the heat map page.\n * 1-1 with login-unit\n */\nexport default class HeatMapMetric extends BaseModel {\n /**\n * Camera and start/end dates for the non-comparison heat map.\n */\n @attr('heat-map-parameter')\n declare heatMapParameters: HeatMapParameter;\n\n /**\n * Camera and start/end dates for the second comparison heat map.\n */\n @attr('heat-map-parameter')\n declare secondHeatMapParameters: HeatMapParameter;\n\n /**\n * Whether to include low activity areas in the heat map.\n */\n @attr('boolean', { defaultValue: true })\n declare includeLowActivity: boolean;\n\n /**\n * The selected tick for the playback speed slider.\n */\n @attr('number', { defaultValue: 4 })\n declare playbackSpeedTick: number;\n\n /**\n * Whether or not the request is for a time lapse or single image.\n */\n @attr('boolean', { defaultValue: true })\n declare isTimeLapse: boolean;\n\n /**\n * Whether or not the page should be in comparison mode.\n */\n @attr('boolean', { defaultValue: false })\n declare isComparison: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/heat-map-metric': HeatMapMetric;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Represents a filter for a specific device for a customer on the event history page.\n */\nexport default class HistoryDeviceIdFilter extends BaseModel {\n /**\n * Description of the device type filter.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * The icon to present the device.\n */\n @attr('string', { defaultValue: '' })\n declare filterIcon: string;\n\n /**\n * Global Device Id for the device.\n */\n @attr('string', { defaultValue: '' })\n declare globalDeviceId: string;\n\n /**\n * Is this is a video camera device?\n */\n @attr('boolean', { defaultValue: false })\n declare isCameraDevice: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-device-id-filter': HistoryDeviceIdFilter;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Represents a device type filter for customer event history.\n */\nexport default class HistoryDeviceTypeFilter extends BaseModel {\n /**\n * Description of the device type filter.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * The icon to present the history event filter.\n */\n @attr('string', { defaultValue: '' })\n declare filterIcon: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-device-type-filter': HistoryDeviceTypeFilter;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * History event filter model.\n */\nexport default class HistoryEventFilter extends BaseModel {\n /**\n * Description of the event.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Event list included as part of this filter.\n */\n @attr('array')\n declare events: number[];\n\n /**\n * The icon to present the history event filter.\n */\n @attr('string', { defaultValue: '' })\n declare filterIcon: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-event-filter': HistoryEventFilter;\n }\n}\n","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\n\nfunction compareLocalAsc(dateLeft, dateRight) {\n var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n//=> 92\n */\n\n\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareLocalAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport differenceInDays from 'date-fns/differenceInDays';\nimport differenceInHours from 'date-fns/differenceInHours';\nimport differenceInMinutes from 'date-fns/differenceInMinutes';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type AjaxService from '../../services/ajax';\nimport type IconData from '../../utils/transforms-objects/icon-data';\nimport type LocationModel from '../enterprise/locations/location';\nimport type RecordModel from './record';\n\n/**\n * @classdesc\n * History event model.\n */\nexport default class HistoryEvent extends BaseModel {\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n\n // region Model Data.\n\n /**\n * Icon data for this event.\n */\n @attr('icon-data')\n declare iconData: IconData;\n\n /**\n * Description of the event.\n */\n @attr('string')\n declare description: string;\n\n /**\n * Date/Time of the event.\n */\n @attr('date')\n declare eventDate: Date;\n\n /**\n * Name/Description of the device.\n */\n @attr('string')\n declare deviceDescription: string;\n\n /**\n * Event type for this event (EventTypeEnum).\n */\n @attr('number')\n declare eventType: number;\n\n /**\n * The device type filter that applies for this event (CustomerEventHistoryDeviceFilterEnum)\n * Possible, but rare, for more than one device type filter to apply for the event.\n */\n @attr('array')\n declare deviceTypeFilter: number[];\n\n /**\n * The global device id for the device that applies for this event.\n */\n @attr('string')\n declare globalDeviceId: string;\n\n /**\n * The correlated event ID.\n */\n @attr('number', { defaultValue: -1 })\n declare correlatedEventId: number;\n\n /**\n * Secondary (additional) description for the event.\n */\n @attr('string')\n declare secondaryDescription: string | null;\n\n /**\n * Indicates the activity was unexpected.\n */\n @attr('boolean')\n declare isUnexpected: boolean;\n\n /**\n * Indicates the SVR timeline may be useful for this event.\n */\n @attr('boolean')\n declare isSvrRelated: boolean;\n\n /**\n * Indicates current status of device.\n */\n @attr('string')\n declare eventTypeName: string;\n\n /**\n * Indicates that the Onboard 24/7 Timeline may be useful for this event.\n */\n @attr('boolean')\n declare isSdCardRelated: boolean;\n\n /**\n * The url for the link to OpenEye. Null if there is no link.\n */\n @attr('string')\n declare openEyeRecorderUrl: string;\n\n /**\n * The url for the thumbnail. Null if not retrieved.\n */\n @attr('string')\n declare thumbnailUrl: string;\n\n /**\n * Date/Time of the thumbnail.\n * The thumbnail (aka snapshot) from the camera is generated at\n * the point in time when the \"action happens\", e.g., a person is detected.\n * This is used to identify that point in time and to allow navigate to it,\n * if needed.\n * Null if not thumbnail not retrieved.\n * One should prefer this date to eventDate, when navigating to a recording in\n * a playback scenario.\n */\n @attr('date')\n declare thumbnailTimestamp: Date;\n\n /**\n * The OvClassification to be used for this event.\n */\n @attr('number', { defaultValue: -1 })\n declare ovClassification: number;\n\n /**\n * The state of a command event\n */\n @attr('number', { defaultValue: 0 })\n declare commandState: number;\n\n /**\n * Does the event type support alarm-recap\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAlarmRecap: boolean;\n\n /**\n * Optional collection of media associated with this event.\n */\n @hasMany('activity/record', {\n async: true,\n inverse: null,\n polymorphic: true\n })\n declare media: AsyncHasMany;\n\n /**\n * The location this event belongs to.\n */\n @belongsTo('enterprise/locations/location', {\n async: true,\n inverse: null\n })\n location?: AsyncBelongsTo;\n\n // endregion\n\n // region Custom API\n\n /**\n * Deletes the media associated with this event.\n */\n deleteMedia(deleteAtPanel = false): Promise {\n return (async () => {\n const media = await this.media;\n\n // Are any of the related media protected?\n // Please fix this casting\n if (media.isAny('isProtected' as keyof RecordModel)) {\n // Error out.\n throw this.intl.tc(this, 'protectedMedia');\n }\n\n // Delete all associated media.\n await this.ajax.apiRequest(\n `activity/historyEvents/${this.correlatedEventId}/deleteMedia?deleteAtPanel=${!!deleteAtPanel}`,\n undefined,\n {\n eventType: this.eventType\n },\n 'PUT'\n );\n\n // Clear media relationship.\n this.media.clear();\n })();\n }\n\n // endregion\n\n // region Computed Properties\n\n /**\n * Relative format of the event date (eg. 14 hours ago, yesterday, etc)\n */\n get relativeEventDate(): string {\n const { eventDate } = this,\n now = new Date();\n\n let unit: 'hour' | 'day' | 'minute' = 'hour',\n delta = differenceInHours(now, eventDate);\n\n if (delta >= 24) {\n unit = 'day';\n delta = differenceInDays(now, eventDate);\n } else if (delta < 2) {\n unit = 'minute';\n delta = differenceInMinutes(now, eventDate);\n }\n\n return this.intl.formatRelative(-delta, {\n unit,\n numeric: 'auto'\n });\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-event': HistoryEvent;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type HistorySubLocationFilter from './history-sub-location-filter';\n\n/**\n * @classdesc\n *\n * Represents a filter for a location on the event history page.\n */\nexport default class HistoryLocationFilter extends BaseModel {\n /**\n * Description of the location filter\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n @hasMany('activity/history-sub-location-filter', { inverse: 'parentFilter', async: false })\n declare childFilters: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-location-filter': HistoryLocationFilter;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport HistoryLocationFilter from './history-location-filter';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\n\n/**\n * @classdesc\n *\n * Represents a filter for a location on the event history page.\n */\nexport default class HistorySubLocationFilter extends HistoryLocationFilter {\n @belongsTo('activity/history-location-filter', { async: true, inverse: 'childFilters' })\n declare parentFilter: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-sub-location-filter': HistorySubLocationFilter;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * History user filter model.\n */\nexport default class HistoryUserFilter extends BaseModel {\n /**\n * Description of the user.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-user-filter': HistoryUserFilter;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * History user type filter model.\n */\nexport default class HistoryUserTypeFilter extends BaseModel {\n /**\n * Description of the user type.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/history-user-type-filter': HistoryUserTypeFilter;\n }\n}\n","import Model, { belongsTo, attr } from '@ember-data/model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type EnergyMeter from '../devices/energy-meter';\n\n/**\n * @classdesc\n * Model for energy usage and generation history for a meter.\n */\nexport default class MeterUsageGeneration extends Model {\n /**\n * Start time for the energy goal period\n */\n @attr('date')\n declare startTime: Date;\n\n /**\n * End time for the energy goal period\n */\n @attr('date')\n declare endTime: Date;\n\n /**\n * Energy used for meter in kWh\n */\n @attr('number', { defaultValue: 0 })\n declare used: number;\n\n /**\n * Energy generated for meter in kWh\n */\n @attr('number', { defaultValue: 0 })\n declare generated: number;\n\n /**\n * Energy usage price\n */\n @attr('number', { defaultValue: 0 })\n declare usedPrice: number;\n\n /**\n * Energy generation price\n */\n @attr('number', { defaultValue: 0 })\n declare generatedPrice: number;\n\n /**\n * fixed cost for device\n */\n @attr('number', { defaultValue: 0 })\n declare fixedCost: number;\n\n /**\n * The energy meter (device) that the energy goal belongs to.\n */\n @belongsTo('devices/energy-meter', { async: true, inverse: 'meterUsageGenerations' })\n declare energyMeter: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/meter-usage-generation': MeterUsageGeneration;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport const CATEGORY_FILTER_SUBSECTIONS: CategoryFilterKey[] = ['evtTypes', 'globalDeviceIds'];\n\nexport type CategoryFilterKey = Exclude;\n\nexport interface CategoryFilter {\n id: string;\n evtTypes?: string[];\n globalDeviceIds?: string[];\n}\n\n/**\n * Model for quick filters\n * @classdesc\n */\nexport default class QuickFilter extends BaseModel {\n /**\n * Description of filter\n */\n @attr('string')\n declare description: string;\n\n /**\n * Device types to filter by\n */\n @attr('array')\n declare deviceTypes: string[];\n\n /**\n * Event types to filter by\n */\n @attr('array')\n declare evtTypes: string[];\n\n @attr('boolean')\n declare showOtherClips: boolean;\n\n /**\n * Device names to filter by\n */\n @attr('array')\n declare globalDeviceIds: string[];\n\n /**\n * How many days back do we want to filter by?\n */\n @attr('number')\n declare daysBack: number;\n\n /**\n * Users to filter by\n */\n @attr('array')\n declare users: string[];\n\n /**\n * User types to filter by\n */\n @attr('array')\n declare userTypes: string[];\n\n /**\n * Locations to filter by\n */\n @attr('array')\n declare locations: string[];\n\n /** The sorting number of the quick filter */\n @attr('number')\n declare sortOrder: number;\n\n /**\n * Filter categories with applied filters saved to this quick filter (V2 activity filters only)\n */\n @attr('array')\n declare categories: CategoryFilter[];\n\n /**\n * Is this filter a default one or custom?\n */\n get isCustom(): boolean {\n return !(this.id === null || this.id.startsWith('default'));\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/quick-filter': QuickFilter;\n }\n}\n","import BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Base model for activity media.\n */\nexport default class Record extends BaseModel {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'activity/record': Record;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Model to hold information relevant to panel migration\n */\nexport default class AppStore extends BaseModel {\n /**\n * Returns url to download iOS app on app store.\n */\n @attr('string', { defaultValue: '' })\n declare iosAppDownloadUrl: string;\n\n /**\n * Returns url to download android app on app store.\n */\n @attr('string', { defaultValue: '' })\n declare androidAppDownloadUrl: string;\n\n /**\n * Returns url to locate image for download iOS app on app store button.\n */\n @attr('string', { defaultValue: '' })\n declare iosAppStoreBadgeUrl: string;\n\n /**\n * Returns url to locate image for download android app on play store button.\n */\n @attr('string', { defaultValue: '' })\n declare androidAppStoreBadgeUrl: string;\n\n /**\n * Returns the url to locate image for iOS qr code\n */\n @attr('string', { defaultValue: '' })\n declare iosQrCodeImgUrl: string;\n\n /**\n * Returns the url to locate image for android qr code\n */\n @attr('string', { defaultValue: '' })\n declare androidQrCodeImgUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'app-store': AppStore;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { or, not } from '@ember/object/computed';\nimport { None } from 'customer-site/enums/RecordingRulePauseReasonType';\nimport { RuleArmingStatusEnum } from 'customer-site/enums/RuleArmingStatusEnum';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type OvRule from 'customer-site/models/video/ov-rule';\nimport type ComplexIconData from '../../utils/transforms-objects/complex-icon-data';\nimport type RecordingStatus from './recording-status';\n\n/**\n * @classdesc\n * Base model for automation items (Rules, Schedules).\n *\n * @note We should extract properties from here that do not belong to all types of items.\n */\nexport default class BaseAutomationItem extends BaseModel {\n /**\n * User-given name for the rule\n */\n @attr('string')\n declare name: string;\n\n /**\n * The RuleDisplayTypeEnum corresponding to this rule\n */\n @attr('number')\n declare displayType: number;\n\n /**\n * The CustomerPageUrlEnum corresponding to the edit page that should be used for this rule\n */\n @attr('number')\n declare editPage: number;\n\n /**\n * The query parameters corresponding to the edit page url that should be used for this rule\n */\n @attr()\n declare editPageQueryParameters: Record;\n\n /**\n * True if the rule is incomplete or invalid for some reason; False otherwise.\n */\n @attr('boolean')\n declare isDetached: boolean;\n\n /**\n * True if the rule doesn't already exist and is suggested to be configured; False otherwise.\n */\n @attr('boolean')\n declare isSuggested: boolean;\n\n /**\n * True if the rule supports delete action; False otherwise.\n */\n @attr('boolean', { defaultValue: true })\n declare canBeDeleted: boolean;\n\n /**\n * True if the rule supports toggle button action; False otherwise.\n */\n @attr('boolean', { defaultValue: true })\n declare canBePaused: boolean;\n\n /**\n * True if the rule supports edit action; False otherwise.\n */\n @attr('boolean', { defaultValue: true })\n declare canBeEdited: boolean;\n\n /**\n * Whether the rule is Video Object Detection type. This means the evt_trigger type is set to OvlBasic in lu_video_evt_schedule.\n */\n @attr('boolean', { defaultValue: false })\n declare isVODRule: boolean;\n\n /**\n * If this is an escalated event rule.\n */\n @attr('boolean', { defaultValue: false })\n declare isEscalatedEvent: boolean;\n\n /**\n * Whether the rule supports third party analytics.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsThirdPartyAnalytics: boolean;\n\n /**\n * Whether the rule has been locked by the dealer.\n * If locked, the login will need special permissions to edit the rule.\n */\n @attr('boolean', { defaultValue: false })\n declare isDealerLocked: boolean;\n\n /**\n * True if the rule can be only be viewed by clicking the view button on rule, false otherwise\n */\n @attr('boolean', { defaultValue: false })\n declare displayViewButtonInsteadOfEdit: boolean;\n\n /**\n * True if the edit button should be shown and disabled; false otherwise.\n */\n @attr('boolean', { defaultValue: false })\n declare isEditButtonDisabled: boolean;\n\n /**\n * True if the trigger can be edited, false otherwise.\n */\n @attr('boolean', { defaultValue: true })\n declare canEditTrigger: boolean;\n\n /**\n * True if the action can be edited, false otherwise.\n */\n @attr('boolean', { defaultValue: true })\n declare canEditAction: boolean;\n\n /**\n * True if the rule's schedule can be edited, false otherwise.\n */\n @attr('boolean', { defaultValue: true })\n declare canEditTimeFrame: boolean;\n\n /**\n * Tooltip text to display when the edit/toggle buttons are disabled.\n */\n @attr('string')\n declare tooltipForDisabledEditAndToggle: string;\n\n /**\n * Text that should be displayed when a rule is temporarily restricted in the devices it can use.\n */\n @attr('string')\n declare warningTextForRestrictedRule: string;\n\n /**\n * True if this automation item is a schedule; False otherwise.\n */\n isSchedule = false;\n\n /**\n * True if a rule has been turned off; False otherwise.\n */\n @attr('boolean', { defaultValue: false })\n declare isPaused: boolean;\n\n /**\n * If the rule is paused, this denotes why it was paused. This value maps to RecordingRulePauseReasonTypeEnum.\n */\n @attr('number', { defaultValue: 0 })\n declare recordingRulePauseReasonType: number;\n\n /**\n * True if a rule is completely turned off; False otherwise.\n */\n @computed('isPaused', 'recordingRulePauseReasonType')\n get isTurnedOff(): boolean {\n return this.isPaused && this.recordingRulePauseReasonType === None;\n }\n\n /**\n * Whether a rule is paused or turned off completely.\n */\n @or('isPaused', 'isTurnedOff')\n declare isPausedOrTurnedOff: boolean;\n\n /**\n * dateTime of when pause ends\n */\n @attr('date')\n declare pausedUntilDateTimeUtc: Date;\n\n /**\n * Returns the Date of when the scheduled VacationWatch rule starts\n */\n @attr('date')\n declare vacationWatchStartDateUtc: Date;\n\n /**\n * Returns the Date of when the scheduled VacationWatch rule ends\n */\n @attr('date')\n declare vacationWatchEndDateUtc: Date;\n\n /**\n * Returns true if the rule is a scheduled VacationWatch rule that has ended\n */\n @computed('vacationWatchEndDateUtc')\n get isVacationOver(): boolean {\n return this.vacationWatchEndDateUtc != null && new Date(Date.now()) >= this.vacationWatchEndDateUtc;\n }\n\n /**\n * True if the rule is not currently on; False otherwise.\n */\n @or('isDetached', 'isPaused', 'isSuggested')\n declare isOff: boolean;\n\n /**\n * True if the rule is currently on; False otherwise (i.e. if the rule is paused or detached).\n */\n @not('isOff')\n declare isOn: boolean;\n\n /**\n * Contains the description and accompanying icon (if any) for the timeframe in which this rule applies.\n */\n @attr('complex-icon-data')\n declare timeframe: ComplexIconData;\n\n /**\n * Contains the description and accompanying icon (if any) for the trigger that causes this rule's action to fire.\n */\n @attr('complex-icon-data')\n declare triggerCondition: ComplexIconData;\n\n /**\n * Contains the description and accompanying icon (if any) for the trigger that signals the end of this rule's run.\n */\n @attr('complex-icon-data')\n declare followUpTriggerCondition: ComplexIconData;\n\n /**\n * Contains the description and accompanying icon (if any) for the action that this rule fires upon trigger activation.\n */\n @attr('complex-icon-data')\n declare action: ComplexIconData;\n\n /**\n * Contains any tooltip text to display for the action.\n */\n @attr('string')\n declare actionTooltip: string;\n\n /**\n * Text that appears next to toggle. I.E. \"At Home\"\n */\n @attr('string')\n declare toggleText: string;\n\n /**\n * Does this rule/schedule support recording statuses on the UI?\n * This is used for checking if a recording schedule is actually recording right now or not.\n */\n @attr('boolean', { defaultValue: false })\n declare hasRecordingStatus: boolean;\n\n /**\n * Contains the description and accompanying icon (if any) for the action that will follow the rule's primary action after it has been triggered.\n */\n @attr('complex-icon-data')\n declare followUpAction: ComplexIconData;\n\n /**\n * A custom rule-specific label to use in the \"Trigger\" column.\n */\n @attr('string')\n declare triggerLabel: string;\n\n /**\n * The status of arming.\n */\n @attr('number', { defaultValue: RuleArmingStatusEnum.Armed })\n declare armingStatus: RuleArmingStatusEnum;\n\n /**\n * When the arming status is scheduled to change next. Undefined if indefinitely\n */\n @attr('date')\n declare armingStatusChangeDateTimeUtc: Date;\n\n /**\n * If applicable, a custom API route to call on item deletion.\n */\n @attr('string')\n declare overrideDeletionApiRoute: string;\n\n /**\n * The OvRule that this automation item is linked to.\n */\n @belongsTo('video/ov-rule', { async: true, inverse: null })\n declare ovRule: AsyncBelongsTo;\n\n /**\n * The recordingStatus information that this automation item is linked to.\n */\n @belongsTo('automation/recording-status', { async: true, inverse: null })\n declare recordingStatus: AsyncBelongsTo;\n\n /**\n * The icon data object (including description) to provide extra information related to the primary action.\n */\n @attr('complex-icon-data')\n declare subAction?: ComplexIconData;\n\n /**\n * Contains the primary and follow-up action (if any) that this rule fires upon trigger activation.\n */\n @computed('action', 'followUpAction')\n get actions(): ComplexIconData[] {\n const { action, followUpAction } = this,\n actions = [action];\n\n // Is there a follow up action?\n if (followUpAction) {\n // Add to output.\n actions.push(followUpAction);\n }\n\n return actions;\n }\n\n /**\n * Contains the primary and follow-up trigger conditions (if any) that signal this rule's firing and ending, respectively.\n */\n @computed('triggerCondition', 'followUpTriggerCondition')\n get triggerConditions(): ComplexIconData[] {\n const { triggerCondition, followUpTriggerCondition } = this,\n triggerConditions = [triggerCondition];\n\n // Is there a follow up trigger condition?\n if (followUpTriggerCondition) {\n // Add to output.\n triggerConditions.push(followUpTriggerCondition);\n }\n\n return triggerConditions;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/base-automation-item': BaseAutomationItem;\n }\n}\n","import { belongsTo, hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type ThermostatModel from '../devices/thermostat';\nimport type ValveSwitch from '../devices/valve-switch';\nimport type System from '../systems/system';\n\n/**\n * @classdesc\n * Boiler control system model.\n */\nexport default class BoilerControlSystem extends BaseModel {\n /**\n * The system (unit) that this boiler control system belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'boilerControlSystem' })\n declare system: AsyncBelongsTo;\n\n /**\n * The master boiler switch within the system.\n */\n @belongsTo('devices/valve-switch', { async: true, inverse: null })\n declare masterSwitch: AsyncBelongsTo;\n\n /**\n * Valve Switches within the system.\n */\n @hasMany('devices/valve-switch', { async: true, inverse: null })\n declare valveSwitches: AsyncHasMany;\n\n /**\n * Zone thermostats within the system.\n */\n @hasMany('devices/thermostat', { async: true, inverse: null })\n declare zoneThermostats: AsyncHasMany;\n\n /**\n * Domestic hot water thermostats within the system.\n */\n @hasMany('devices/thermostat', { async: true, inverse: null })\n declare dhwThermostats: AsyncHasMany;\n\n /**\n * Thermostatic radiator valve thermostats within the system.\n */\n @hasMany('devices/thermostat', { async: true, inverse: null })\n declare trvThermostats: AsyncHasMany;\n\n /**\n * Hot water cylinder programming valve switches within the system.\n */\n @hasMany('devices/valve-switch', { async: true, inverse: null })\n declare hwcSwitches: AsyncHasMany;\n\n /**\n * Whether the boiler control system requires configuration.\n */\n @attr('boolean', { defaultValue: false })\n declare isUnconfigured: boolean;\n\n /**\n * Whether the boiler control system controlled by a single boiler switch.\n */\n @attr('boolean', { defaultValue: false })\n declare isSingleSwitchSystem: boolean;\n\n /**\n * Whether the system has a Y-Plan setup: 1 zone thermostat, many switches.\n */\n @attr('boolean', { defaultValue: false })\n declare isYPlanSystem: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/boiler-control-system': BoilerControlSystem;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type AutomationPpUtilityModel from './peak-protect-utility';\n\nexport default class AutomationPpTariff extends BaseModel {\n /**\n * The name of this tariff.\n */\n @attr('string')\n declare description: string;\n\n /**\n * The formatted date of the next on peak period.\n */\n @attr('string')\n declare nextOnPeakPeriodDate: string;\n\n /**\n * The formatted time range of the next on peak period.\n */\n @attr('string')\n declare nextOnPeakPeriodTimeRange: string;\n\n /**\n * The utility this tariff belongs to.\n */\n @belongsTo('automation/peak-protect-utility', { async: true, inverse: 'tariffs' })\n declare utility: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/peak-protect-tariff': AutomationPpTariff;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AutomationPpTariffModel from './peak-protect-tariff';\n\nexport default class AutomationPpUtility extends BaseModel {\n /**\n * The utility name.\n */\n @attr('string')\n declare description: string;\n\n /**\n * The tariffs associated with this utility.\n */\n @hasMany('automation/peak-protect-tariff', { async: true, inverse: 'utility' })\n declare tariffs: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/peak-protect-utility': AutomationPpUtility;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type PeakProtectTariffModel from 'customer-site/models/automation/peak-protect-tariff';\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\n\n/**\n * @classdesc\n * A model for thermostat peak protect settings.\n */\nexport default class AutomationPeakProtect extends BaseModel {\n @attr('boolean', { defaultValue: false })\n declare enabled: boolean;\n\n @attr('number', { defaultValue: -1 })\n declare min: number;\n\n @attr('number', { defaultValue: -1 })\n declare max: number;\n\n /**\n * The currently selected tariff.\n */\n @belongsTo('automation/peak-protect-tariff', { async: true, inverse: null })\n declare tariff: AsyncBelongsTo;\n\n /**\n * The thermostat for these peak protect settings.\n */\n @belongsTo('devices/thermostat', { async: true, inverse: 'peakProtect' })\n declare thermostat: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/peak-protect': AutomationPeakProtect;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * The model that defines the automation permissions.\n *\n * @class models.automation.Permission\n */\nexport default class Permission extends BaseModel {\n /**\n * Rule types the customer can access.\n */\n @attr()\n declare allowedRuleDisplays: number[];\n\n /**\n * Boolean representing if the customer has email contact read permissions.\n */\n @attr('boolean', { defaultValue: false })\n declare emailContactPermissions: boolean;\n\n /**\n * Boolean representing if the customer has mobile contact read permissions.\n */\n @attr('boolean', { defaultValue: false })\n declare mobileContactPermissions: boolean;\n\n /**\n * If the customer has camera arming access.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCameraArmingAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/permission': Permission;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing a user's current Presence State.\n */\nexport default class CurrentPresenceState extends BaseModel {\n /**\n * The current Presence State.\n */\n @attr('number')\n declare presenceStateId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/current-presence-state': CurrentPresenceState;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for displaying a user's current Presence State.\n */\nexport default class PresenceStateDisplay extends BaseModel {\n /**\n * The current Presence State.\n */\n @attr('number')\n declare presenceStateId: number;\n\n /**\n * The name of the current Presence State.\n */\n @attr('string')\n declare presenceStateName: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-display': PresenceStateDisplay;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Information for a single dropdown item. Used for relating the value of the option and the text displayed for this\n * option.\n */\nexport default class PresenceStateDropdownItem extends BaseModel {\n /**\n * The id value for this item\n */\n @attr('number')\n declare value: number;\n\n /**\n * The text that will be displayed for this item in the dropdown.\n */\n @attr('string')\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-dropdown-item': PresenceStateDropdownItem;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for displaying information related to the Presence State Explainer Modal.\n */\nexport default class PresenceStateExplainerDisplay extends BaseModel {\n /**\n * The translated title that is displayed on the explainer modal.\n */\n @attr('string')\n declare infoTitleText: string;\n\n /**\n * The translated text that is displayed in the main body of the explainer modal.\n */\n @attr('string')\n declare infoBodyMainText: string;\n\n /**\n * The translated body sub text that is displayed on the explainer modal.\n */\n @attr('string')\n declare infoBodySubText: string;\n\n /**\n * The translated button text that is displayed on the explainer modal.\n */\n @attr('string')\n declare infoButtonText: string;\n\n /**\n * The path of the image that is displayed on the explainer modal.\n */\n @attr('string')\n declare infoImagePath: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-explainer-display': PresenceStateExplainerDisplay;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport PresenceStateTriggerOption from './presence-state-trigger-option';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type PresenceStateTriggerDeviceSuboption from './presence-state-trigger-device-suboption';\n\nexport default class PresenceStateSensorTriggerOption extends PresenceStateTriggerOption {\n /**\n * A list of the sensor sub options corresponding to individual sensors.\n */\n @hasMany('automation/presence-state/presence-state-trigger-device-suboption', {\n async: true,\n inverse: null\n })\n declare sensorSuboptions: AsyncHasMany;\n\n /**\n * A note that will display beneath the suboptions displaying further information.\n */\n @attr('string', { defaultValue: '' })\n declare note: string;\n\n /**\n * The text for the Sleep Select Time option. (i.e. what time do you go to bed?)\n */\n @attr('string', { defaultValue: '' })\n declare selectSleepTimeText: string;\n\n /**\n * The number of minutes past midnight the users selected sleep time is.\n */\n @attr('number', { defaultValue: 1320 })\n declare sleepTimeMinutesAfterMidnight: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-sensor-trigger-option': PresenceStateSensorTriggerOption;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type SceneModel from 'customer-site/models/automation/scene';\nimport type PresenceStateSensorTriggerOption from './presence-state-sensor-trigger-option';\nimport type PresenceStateTriggerOption from './presence-state-trigger-option';\n\n/**\n * @classdesc\n * A model for display information related to a customer's current settings for a single presence state\n */\nexport default class PresenceStateSettingsDisplay extends BaseModel {\n /**\n * The Presence State related to these settings\n */\n @attr('number')\n declare presenceState: number;\n\n /**\n * The name of the Presence State that will be displayed with the settings.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The icon for the Presence State that will be displayed with the settings.\n * TODO: Change to use IconEnum once IconEnum is moved out of ABO\n */\n @attr('string')\n declare icon: string;\n\n /**\n * The description that will be displayed with the settings.\n */\n @attr('string')\n declare description: string;\n\n /**\n * Does the user have permissions to edit this model?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeEdited: boolean;\n\n /**\n * A list of PresenceStateTriggerOptions that will hold all of the setting options for this presence state.\n */\n @hasMany('automation/presence-state/presence-state-trigger-option', { async: true, inverse: null })\n declare triggerOptions: AsyncHasMany;\n\n /**\n * The Sensor Trigger Option with all of the information necessary.\n */\n @belongsTo('automation/presence-state/presence-state-sensor-trigger-option', { async: true, inverse: null })\n declare sensorTriggerOption: AsyncBelongsTo;\n\n relatedScene?: SceneModel;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-settings-display': PresenceStateSettingsDisplay;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type PresenceStateDropdownItem from './presence-state-dropdown-item';\n\nexport default class PresenceStateTriggerDeviceSuboption extends BaseModel {\n /**\n * The Device ID for the device that corresponds to this option.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The device Description/Name.\n */\n @attr('string')\n declare deviceDescription: string;\n\n /**\n * Whether the user has the option to select this device or whether it is always selected.\n */\n @attr('boolean', { defaultValue: false })\n declare isEditable: boolean;\n\n /**\n * Whether the user has this device selected and whether this option is currently active.\n */\n @attr('boolean', { defaultValue: false })\n declare isSelected: boolean;\n\n /**\n * A list of Duration Dropdown Options.\n */\n @hasMany('automation/presence-state/presence-state-dropdown-item', { async: true, inverse: null })\n declare durationDropdownOptions: AsyncHasMany;\n\n /**\n * The selected Duration Dropdown Option's value.\n */\n @attr('number', { defaultValue: -1 })\n declare selectedDurationDropdownValue: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-trigger-device-suboption': PresenceStateTriggerDeviceSuboption;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type PresenceStateDropdownItem from './presence-state-dropdown-item';\n\n/**\n * @classdesc\n * Information related to a Home-Away Trigger setting that will be shown to the user\n */\nexport default class PresenceStateTriggerOption extends BaseModel {\n /**\n * The type of trigger for this option, i.e. arming state, geo-fence crossing.\n */\n @attr('number')\n declare triggerType: number;\n\n /**\n * The text that will be shown to the user describing this option.\n */\n @attr('string')\n declare triggerDescription: string;\n\n /**\n * Whether the user has the option to select this trigger option or whether it is always selected.\n */\n @attr('boolean', { defaultValue: false })\n declare isEditable: boolean;\n\n /**\n * Whether the user has this trigger option selected and whether this option is currently active.\n */\n @attr('boolean', { defaultValue: false })\n declare isSelected: boolean;\n\n /**\n * A list of dropdown options that relate to this trigger option.\n */\n @hasMany('automation/presence-state/presence-state-dropdown-item', { async: true, inverse: null })\n declare dropdownOptions: AsyncHasMany;\n\n /**\n * The selected Dropdown Option's value. Null if there is no dropdown.\n */\n @attr('number', { defaultValue: -1 })\n declare selectedDropdownValue: number;\n\n /**\n * The sort order number of the TriggerOption.\n * There shouldn't be a trigger option that appears without a sortOrder,\n * but in the instance that it happens, it should be last.\n */\n @attr('number', { defaultValue: 99 })\n declare sortOrder: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/presence-state/presence-state-trigger-option': PresenceStateTriggerOption;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { Unknown } from 'customer-site/enums/ConnectionState';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The model that defines the automation permissions.\n */\nexport default class RecordingStatus extends BaseModel {\n /**\n * The connection state of the Recording Status' device.\n */\n @attr('number', { defaultValue: Unknown })\n declare connectionState: number;\n\n /**\n * The status message text. Generally the reason that the connection state isn't showing Connected.\n */\n @attr('string')\n declare statusMessageText: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/recording-status': RecordingStatus;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseRuleFeatureType from './base-rule-feature-type';\n\n/**\n * Information about a possible Action type.\n */\nexport default class ActionType extends BaseRuleFeatureType {\n @attr('boolean')\n declare supportsAfterSunsetRestriction: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/action-type': ActionType;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type ActionTypeModel from './action-type';\nimport type RuleDeviceModel from './device';\nimport type RuleEventModel from './event';\nimport type TriggerTypeModel from './trigger-type';\n\n/**\n * Base class for rules builder.\n * Extended by both rule and template.\n */\nexport default class BaseRuleCreator extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('number')\n declare ruleEngine: number;\n\n /**\n * The Legacy Edit Page\n */\n @attr('number')\n declare editPage: number;\n\n /**\n * The query parameters corresponding to the edit page url that should be used for this rule\n */\n @attr()\n declare editPageQueryParameters: Record;\n\n @belongsTo('automation/rules-builder/trigger-type', {\n async: true,\n inverse: null\n })\n declare triggerType: AsyncBelongsTo;\n\n @belongsTo('automation/rules-builder/event', {\n async: true,\n inverse: null\n })\n declare triggerEvent: AsyncBelongsTo;\n\n @hasMany('automation/rules-builder/device', {\n async: true,\n polymorphic: true,\n inverse: null\n })\n declare triggerDevices: AsyncHasMany;\n\n @belongsTo('automation/rules-builder/action-type', {\n async: true,\n inverse: null\n })\n declare actionType: AsyncBelongsTo;\n\n @belongsTo('automation/rules-builder/event', {\n async: true,\n inverse: null\n })\n declare actionEvent: AsyncBelongsTo;\n\n @hasMany('automation/rules-builder/device', {\n async: true,\n polymorphic: true,\n inverse: null\n })\n declare actionDevices: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/base-rule-creator': BaseRuleCreator;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from '../../../utils/transforms-objects/icon-data';\nimport type ExtraAction from './extra-data/extra-action';\n\n/**\n * Base class for rules builder {@link models.automation.rules.TriggerType} and {@link models.automation.rules.ActionType}.\n */\nexport default class BaseRuleFeatureType extends BaseModel {\n /**\n * Description.\n */\n @attr('string')\n declare description: string;\n\n /**\n * Icon and color.\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * Description.\n */\n @attr('string')\n declare selectionHeader: string;\n\n @belongsTo('automation/rules-builder/extra-data/extra-action', {\n async: false,\n polymorphic: true,\n inverse: null\n })\n declare extraData: ExtraAction;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/base-rule-feature-type': BaseRuleFeatureType;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * @classdesc\n * Rules builder device status.\n */\nexport default class Device extends BaseModel {\n /**\n * Description.\n *\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Icon and color.\n */\n @attr('icon-data')\n declare deviceIcon: IconData;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/device': Device;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * @classdesc\n * Rules builder device status.\n */\nexport default class Event extends BaseModel {\n /**\n * Description.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Icon and color.\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * EventTypeEnum\n */\n @attr('number')\n declare eventType: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/event': Event;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { isEmpty, isPresent } from '@ember/utils';\nimport ExtraAction from './extra-action';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport default class ExtraActionChime extends ExtraAction {\n @service declare intl: ADCIntlService;\n\n /** @override */\n ruleDetailsRoute = 'automation.rules.builder.action.details.chimes';\n\n /** @override */\n description(extraData: Record): string {\n // Get the selected tone's description from the tones collection.\n const { tones, intl } = this,\n { ACTION_TONE, ACTION_VOLUME = undefined } = extraData,\n tone = isPresent(ACTION_TONE) ? tones[Number.parseInt(ACTION_TONE, 10)] : undefined;\n\n if (!isEmpty(tone) && !isEmpty(ACTION_VOLUME)) {\n return intl.tc(this, 'ringToneAndVolume', { tone, volume: ACTION_VOLUME });\n }\n\n if (!isEmpty(ACTION_VOLUME)) {\n return intl.tc(this, 'ringVolume', { volume: ACTION_VOLUME });\n }\n\n if (!isEmpty(tone)) {\n return intl.tc(this, 'ringTone', { tone });\n }\n\n return '';\n }\n\n /**\n * All available tones for chime rule\n */\n @attr\n declare tones: Record;\n\n @attr\n declare testTonesEndpoint: string;\n\n @attr\n declare defaultVolume: number;\n\n /**\n * Minimum allowed volume.\n */\n minVolume = 1;\n\n /**\n * Maximum allowed volume.\n */\n maxVolume = 100;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/extra-data/extra-action-chime': ExtraActionChime;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { RGBW, WarmToCool } from 'customer-site/enums/LightColorFormat';\nimport IconData from 'customer-site/utils/transforms-objects/icon-data';\nimport { percentWarmthToHexString } from '@adc/ui-components/utils/color-pickers/color';\nimport ExtraAction from './extra-action';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { Warmth } from '@adc/ui-components/utils/color-pickers/color';\n\nexport default class ExtraActionLight extends ExtraAction {\n @service declare intl: ADCIntlService;\n\n /** @override */\n ruleDetailsRoute = 'automation.rules.builder.action.details.lights';\n\n /** @override */\n scheduleDetailsRoute = 'automation.schedules.builder.action.details.lights';\n\n /** @override */\n description(extraData: Record): string {\n const { ACTION_LIGHT_PERCENT } = extraData;\n if (ACTION_LIGHT_PERCENT === undefined || ACTION_LIGHT_PERCENT === '0' || ACTION_LIGHT_PERCENT === '255') {\n return '';\n }\n\n return this.intl.tc(this, 'dimLevel', { lightLevel: ACTION_LIGHT_PERCENT });\n }\n\n /** @override */\n subIcon(extraData: Record): IconData {\n const { ACTION_LIGHT_COLOR_FORMAT, ACTION_LIGHT_COLOR, ACTION_LIGHT_PERCENT_WARMTH } = extraData;\n let iconColor = undefined;\n if (RGBW.toString() == ACTION_LIGHT_COLOR_FORMAT) {\n iconColor = ACTION_LIGHT_COLOR;\n } else if (WarmToCool.toString() == ACTION_LIGHT_COLOR_FORMAT) {\n const warmth = this.getWarmthFromString(ACTION_LIGHT_PERCENT_WARMTH);\n if (warmth !== undefined) {\n iconColor = percentWarmthToHexString(warmth);\n }\n }\n return new IconData({\n icon: 'circle',\n color: iconColor\n });\n }\n\n getWarmthFromString(input: string): Warmth | undefined {\n const warmthInt: number = parseInt(input);\n if (isNaN(warmthInt)) {\n return undefined;\n }\n if (warmthInt >= 0 && warmthInt <= 100) {\n return warmthInt as Warmth;\n }\n return undefined;\n }\n\n @attr\n declare lightPercentLevel: number;\n\n @attr('icon-data')\n declare offIcon: IconData;\n\n @attr('string')\n declare offIconTitle: string;\n\n @attr('icon-data')\n declare onIcon: IconData;\n\n @attr('string')\n declare onIconTitle: string;\n\n /**\n * Minimum allowed light level.\n */\n minLevel = 1;\n\n /**\n * Maximum allowed light level.\n */\n maxLevel = 100;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/extra-data/extra-action-light': ExtraActionLight;\n }\n}\n","import ExtraAction from './extra-action';\n\nimport type Rule from 'customer-site/models/automation/rules-builder/rule';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\nexport default class ExtraActionScene extends ExtraAction {\n /** @override */\n icon(rule: Rule): Promise {\n return (async () => {\n const selectedScenes = (await rule.actionExtraDeviceOption)?.slice() ?? [];\n\n if (selectedScenes.length === 0) return;\n return selectedScenes[0].icon;\n })();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/extra-data/extra-action-scene': ExtraActionScene;\n }\n}\n","import BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type Rule from 'customer-site/models/automation/rules-builder/rule';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\nexport default abstract class ExtraAction extends BaseModel {\n ruleDetailsRoute = 'automation.rules.builder.action.details';\n scheduleDetailsRoute = 'automation.schedules.builder.action.details';\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n description(_extraData: Record): string {\n return '';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n icon(_rule: Rule): Promise {\n return (async () => {\n return undefined;\n })();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n subIcon(_extraData: Record): IconData | undefined {\n return;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/extra-data/extra-action': ExtraAction;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport ExtraAction from './extra-action';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport default class AutomationRulesExtraDataExtraDataAccessControl extends ExtraAction {\n @service declare intl: ADCIntlService;\n\n /** @override */\n ruleDetailsRoute = 'automation.rules.builder.trigger.details.access-control';\n\n /** @override */\n description(extraData: Record): string {\n const securityLevelId = Number.parseInt(extraData?.TRIGGER_SECURITY_LEVEL, 10) ?? -1;\n return securityLevelId >= 0\n ? this.intl.tc(this, 'byGroup', { group: this.securityLevels[securityLevelId] })\n : '';\n }\n\n /**\n * Level of access for this door. The levels of access are calculated in the backend\n * and can include anyone, just managers, or a custom configuration.\n */\n @attr()\n declare securityLevels: Record;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/extra-data/extra-data-access-control': AutomationRulesExtraDataExtraDataAccessControl;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport ExtraAction from './extra-action';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport default class AutomationRulesBuilderExtraDataExtraDataGeoLocation extends ExtraAction {\n @service declare intl: ADCIntlService;\n\n /**@override */\n ruleDetailsRoute = 'automation.rules.builder.trigger.details.geo-location';\n\n /** @override */\n description(extraData: Record): string {\n return this.geoFences?.[Number.parseInt(extraData?.TRIGGER_GEO_FENCE, 10)] ?? '';\n }\n\n /**\n * Geo Fences available to the customer\n */\n @attr\n declare geoFences: Record;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/extra-data/extra-data-geo-location': AutomationRulesBuilderExtraDataExtraDataGeoLocation;\n }\n}\n","import ExtraAction from './extra-action';\n\nexport default class ScheduleExtraData extends ExtraAction {\n /**@override */\n ruleDetailsRoute = 'automation.schedules.builder.time';\n\n /**\n *\n * @param extraData This should never get called\n */\n description(): string {\n throw new Error('Method not implemented.');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/extra-data/extra-data-schedule': ScheduleExtraData;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * Rules builder Extra Options\n */\nexport default class ExtraDeviceOptionDetail extends BaseModel {\n /**\n * Status description.\n *\n */\n @attr('string')\n declare description: string;\n\n /**\n * Status icon and color.\n *\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * Tooltip.\n *\n */\n @attr('string')\n declare tooltip: string;\n\n /**\n * Display as disabled.\n *\n */\n @attr('boolean')\n declare disabled: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/extra-device-option-detail': ExtraDeviceOptionDetail;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type ExtraDeviceOptionDetail from 'customer-site/models/automation/rules-builder/extra-device-option-detail';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * Rules builder Extra Options\n */\nexport default class ExtraDeviceOption extends BaseModel {\n /**\n * Status description.\n *\n */\n @attr('string')\n declare description: string;\n\n /**\n * Status icon and color.\n *\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * Title for the details.\n *\n */\n @attr('string')\n declare detailTitle: string;\n\n /**\n * If a option with a disabled detail is selected, display this warning on mobile.\n *\n */\n @attr('string')\n declare disabledDetailWarning: string;\n\n /**\n * Additional information that should be displayed.\n *\n */\n @hasMany('automation/rules-builder/extra-device-option-detail', { async: true, inverse: null })\n declare details: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/extra-option': ExtraDeviceOption;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * This represents ONE option the user can select on the UI.\n * Multiple RuleOptionItems are associated with a ExtraRuleOption to make a selection choice.\n */\nexport default class ExtraRuleOptionItem extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('string')\n declare value: string;\n\n @attr('boolean')\n declare isDefault: boolean;\n\n /**\n * An icon for the specific rule option.\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * Used if this option is dependent on the selected trigger/action device ids.\n * Ex:\n * If the selected trigger device is '123456-321' and this was set to ['123456-000']\n * then this option would NOT be shown to the user.\n *\n * If the selected trigger device is '123456-321' and this was set to ['123456-000', '123456-321']\n * then this option would be shown to the user.\n *\n * If the selected trigger device are '123456-000' AND '123456-321' and this was set to ['123456-321']\n * then this option would NOT be shown to the user.\n *\n * If this array is left empty (length of 0) then this option is always shown, regardless of selected devices.\n */\n @attr('array')\n declare deviceIdsFilter: [];\n\n @attr('boolean')\n declare useSuffix: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/extra-rule-option-item': ExtraRuleOptionItem;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type ExtraRuleOptionItem from 'customer-site/models/automation/rules-builder/extra-rule-option-item';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * Used to show the user extra configuration options for a specific rule type\n */\nexport default class ExtraRuleOption extends BaseModel {\n @attr('string')\n declare title: string;\n\n /**\n * Single or multi select\n */\n @attr('boolean')\n declare isSingleSelect: boolean;\n\n /**\n * Show after trigger or after action on UI\n */\n @attr('boolean')\n declare showAfterTrigger: boolean;\n\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * List of all possible options\n */\n @hasMany('automation/rules-builder/extra-rule-option-item', {\n async: false,\n inverse: null\n })\n declare optionItems: SyncHasMany;\n\n @attr('string')\n declare ruleOptionSuffix: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/extra-rule-option': ExtraRuleOption;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type Message from 'customer-site/models/automation/rules-builder/message';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\nexport default class MessageGroup extends BaseModel {\n /**\n * Icon and color.\n */\n @attr('icon-data')\n declare icon: IconData;\n\n @attr('string')\n declare header: string;\n\n @hasMany('automation/rules-builder/message', {\n async: false,\n inverse: null\n })\n declare messages: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/message-group': MessageGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class Message extends BaseModel {\n @attr('string')\n declare header: string;\n\n @attr('string')\n declare desc: string;\n\n @attr('string')\n declare imageUrl?: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/message': Message;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\n\n/**\n * Rules builder Notification Address\n */\nexport default class NotificationContactAddress extends BaseModel {\n /**\n * Desc to be displayed on summary page for this address\n */\n @belongsTo('users/contact-address', { async: true, inverse: null })\n declare contactAddress: AsyncBelongsTo;\n\n /**\n * Used when user can have an extra notification option.\n * Ex: Video notifications can select if they want full clip or just thumbnail\n */\n @attr('number')\n declare option: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/notification/contact-address': NotificationContactAddress;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class AutomationRulesBuilderNotificationEmail extends BaseModel {\n /**\n * New Contact email\n */\n @attr('string')\n declare emailAddress: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/notification/email': AutomationRulesBuilderNotificationEmail;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Rules builder Notification Group Option\n * Always tied to a RuleNotificationGroup\n * Shows extra options a notification type may have\n * Example: [Text Only, Thumbnail, Video Clip]\n */\nexport default class NotificationGroupOption extends BaseModel {\n /**\n * Notification options\n */\n @attr('string')\n declare name: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/notification/group-option': NotificationGroupOption;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type NotificationGroupOption from './group-option';\n\n/**\n * Rules builder Notification Group\n * A notification group contains a header, an options for a specific notification type.\n * Some rule allows for notifications to have additional options besides just notifying the user.\n * Example:\n * Header: Push Notifications\n * Options: [Text Only, Thumbnail, Video Clip]\n */\nexport default class NotificationGroup extends BaseModel {\n /**\n * Notification group description.\n */\n @attr('string')\n declare header: string;\n\n /**\n * Address type - Email/Push/Text\n */\n @attr('number')\n declare addressType: number;\n\n @hasMany('automation/rules-builder/notification/group-option', { async: true, inverse: null })\n declare options: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/notification/group': NotificationGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class AutomationRulesBuilderNotificationMobile extends BaseModel {\n /**\n * New Contact phone number\n */\n @attr('string')\n declare number: string;\n\n /**\n * Phone number country index\n */\n @attr('string')\n declare country: number;\n\n /**\n * Phone number provider\n */\n @attr('string')\n declare provider: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/notification/mobile': AutomationRulesBuilderNotificationMobile;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type Email from './email';\nimport type Mobile from './mobile';\n\nexport default class AutomationRulesBuilderNotificationNewContact extends BaseModel {\n /**\n * New Contact First Name\n */\n @attr('string')\n declare firstName: string;\n\n /**\n * New Contact Last Name\n */\n @attr('string')\n declare lastName: string;\n\n /**\n * New Contact Language Preference\n */\n @attr('string')\n declare languagePreference: string;\n\n /**\n * New Contact list of email(s)\n *\n * optional attribute\n */\n @hasMany('automation/rules-builder/notification/email', { async: false, inverse: null })\n declare emails: SyncHasMany;\n\n /**\n * New Contact list of phone number(s)\n *\n * optional attribute\n */\n @hasMany('automation/rules-builder/notification/mobile', { async: false, inverse: null })\n declare mobiles: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/notification/new-contact': AutomationRulesBuilderNotificationNewContact;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Represents a restriction for a rule being created in rules builder.\n * Currently it contains only the description and the restriction type.\n */\nexport default class BaseRestriction extends BaseModel {\n /**\n * Type of restriction.\n */\n @attr('number')\n declare restrictionType: number;\n\n /**\n * Human readable description for this restriction.\n */\n get description(): string {\n return '';\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/restrictions/base-restriction': BaseRestriction;\n }\n}\n","import { MINUTES_IN_DAY } from '@adc/ember-utils/constants/time';\nimport { getDayScheduleDuration } from '@adc/ember-utils/utils/date-time';\nimport { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n dayBitsToArray,\n EVERY_DAY_BITS,\n WEEKDAY_BITS,\n WEEKEND_BITS,\n SUNDAY_INT,\n MONDAY_INT\n} from 'customer-site/utils/datetime';\nimport setDay from 'date-fns/setDay';\nimport setMinutes from 'date-fns/setMinutes';\nimport { ScheduleRestriction as ScheduleRestrictionType } from '../../../../enums/RestrictionType';\nimport BaseRestriction from './base-restriction';\n\nimport type LocaleService from '@adc/app-infrastructure/services/locale';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * @classdesc\n * Schedule Restriction\n */\nexport default class ScheduleRestriction extends BaseRestriction {\n @service declare locale: LocaleService;\n @service declare intl: ADCIntlService;\n\n /** @override*/\n @attr('number', { defaultValue: ScheduleRestrictionType })\n declare restrictionType;\n\n /**\n * An array of integers representing which days of the week the schedule is active for.\n */\n @attr('number', { defaultValue: EVERY_DAY_BITS })\n declare dayBits: number;\n\n /**\n * The time of day when the schedule becomes active in minutes after midnight (e.g. 60 => 1:00AM, 120 => 2:00AM).\n *\n * @note The schedule-picker component expects minutes after midnight.\n */\n @attr('number', { defaultValue: 0 })\n declare beginTime: number;\n\n /**\n * The time of day when the schedule becomes inactive in minutes after midnight (e.g. 60 => 1:00AM, 120 => 2:00AM).\n *\n * @note The time-picker component expects minutes after midnight.\n */\n @attr('number', { defaultValue: MINUTES_IN_DAY })\n declare endTime: number;\n\n /**\n * True if the schedule is one that runs during sunset.\n */\n @attr('boolean', { defaultValue: false })\n declare isDark: boolean;\n\n /**\n * True is the schedule executes every day at any time.\n */\n @computed('isAllDay', 'dayBits')\n get isAlways(): boolean {\n return this.dayBits === EVERY_DAY_BITS && this.isAllDay;\n }\n\n /**\n * Is this schedule in effect every day, regardless of time?\n */\n @computed('dayBits')\n get isEveryDay(): boolean {\n return this.dayBits === EVERY_DAY_BITS;\n }\n\n /**\n * Is this schedule in effect every day, regardless of time?\n */\n @computed('dayBits')\n get isWeekdaysOnly(): boolean {\n return this.dayBits === WEEKDAY_BITS;\n }\n\n /**\n * Is this schedule in effect every day, regardless of time?\n */\n @computed('dayBits')\n get isWeekendsOnly(): boolean {\n return this.dayBits === WEEKEND_BITS;\n }\n\n /**\n * Is this schedule in effect every day, regardless of time?\n */\n @computed('duration', 'isDark', 'beginTime')\n get isAllDay(): boolean {\n return !this.isDark && this.duration >= MINUTES_IN_DAY && this.beginTime === 0;\n }\n\n /**\n * Is this schedule never executed?\n * This has to do with Legacy Rules Builder being able to save with no schedule\n */\n @computed('dayBits')\n get isNever(): boolean {\n return this.dayBits === 0;\n }\n\n /**\n * How long does this schedule last in minutes\n */\n @computed('beginTime', 'endTime')\n get duration(): number {\n return getDayScheduleDuration(this.beginTime, this.endTime);\n }\n\n /**\n * @override\n */\n @computed(\n 'beginTime',\n 'dayBits',\n 'endTime',\n 'isAllDay',\n 'isAlways',\n 'isDark',\n 'isEveryDay',\n 'isNever',\n 'isWeekdaysOnly',\n 'isWeekendsOnly',\n 'locale.weekStartsOnSunday'\n )\n get description(): string {\n // Beginning of time date used for formatting days and time.\n const date = new Date(0, 0, 0, 0, 0, 0, 0);\n let key = '';\n let scheduleDays = '';\n if (this.isDark) {\n key += 'onlyAfterSunset';\n } else if (this.isAlways) {\n key += 'runAtAllTimes';\n } else if (this.isNever) {\n key += 'runNever';\n } else if (this.isEveryDay) {\n key += 'runEveryday';\n } else if (this.isWeekdaysOnly) {\n key += 'runOnWeekdays';\n } else if (this.isWeekendsOnly) {\n key += 'runOnWeekends';\n } else {\n const dateFormat: Record = { weekday: 'short' };\n const weekStartDay = this.locale.weekStartsOnSunday ? SUNDAY_INT : MONDAY_INT;\n const daySeparator = this.intl.tc(this, 'daySeparator');\n scheduleDays = dayBitsToArray(this.dayBits)\n .map((day) =>\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n this.intl.formatDate(\n setDay(date, day, { weekStartsOn: weekStartDay as 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined }),\n dateFormat\n )\n )\n .join(daySeparator);\n\n key += 'runOn';\n }\n\n const days = this.intl.tc(this, key, { scheduleDays });\n let hours = '';\n if (!this.isAllDay && !this.isNever && !this.isDark) {\n const timeFormat: Record = { hour: 'numeric', minute: 'numeric' };\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n const beginTime = this.intl.formatDate(setMinutes(date, this.beginTime), timeFormat);\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n const endTime = this.intl.formatDate(setMinutes(date, this.endTime), timeFormat);\n hours += this.intl.tc(this, 'timeFrame', { beginTime, endTime });\n }\n\n if (hours.length == 0) {\n hours = ' ';\n }\n\n return this.intl.tc(this, 'description', { days, hours }).trim();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/restrictions/schedule-restriction': ScheduleRestriction;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { isPresent, isEmpty } from '@ember/utils';\nimport { Light } from 'customer-site/enums/ActionType';\nimport { Rule as Global, Trigger, Action } from 'customer-site/enums/MessageType';\nimport { ScheduleRestriction as ScheduleRestrictionType } from 'customer-site/enums/RestrictionType';\nimport { GET } from '@adc/ajax/services/adc-ajax';\nimport BaseRuleCreator from './base-rule-creator';\nimport ScheduleRestriction from './restrictions/schedule-restriction';\n\nimport type { AsyncHasMany, SyncHasMany } from '@ember-data/model';\nimport type ExtraDeviceOption from './extra-device-option';\nimport type MessageGroup from './message-group';\nimport type NotificationContactAddress from './notification/contact-address';\nimport type BaseRestrictionModel from './restrictions/base-restriction';\n\n/**\n * Model for holding user-created rule-builder information.\n */\nexport default class Rule extends BaseRuleCreator {\n /**\n * Can the user modify this rule or not\n */\n @attr('boolean', { defaultValue: true })\n declare isValidForEmberRuleBuilder: boolean;\n\n /**\n * Trigger Duration. How long between trigger triggered, and action starts\n */\n @attr('number', { defaultValue: 0 })\n declare triggerDuration: number;\n\n /**\n * ExtraRuleOptions\n */\n @attr('array', { defaultValue: () => [] })\n declare extraRuleOptions: string[];\n\n /**\n * Extra Data to be used by custom triggers/actions\n */\n @attr('rule-extra-data', {\n defaultValue() {\n return {};\n }\n })\n declare extraData: Record;\n\n @hasMany('automation/rules-builder/extra-device-option', {\n async: true,\n inverse: null\n })\n declare triggerExtraDeviceOption: AsyncHasMany;\n\n @hasMany('automation/rules-builder/extra-device-option', {\n async: true,\n inverse: null\n })\n declare actionExtraDeviceOption: AsyncHasMany;\n\n /**\n * The restrictions for this Rule.\n */\n @hasMany('automation/rules-builder/restrictions/base-restriction', {\n async: true,\n inverse: null\n })\n declare restrictions: AsyncHasMany;\n\n /**\n * Contact addresses that will receive this notification.\n */\n @hasMany('automation/rules-builder/notification/contact-address', {\n async: false,\n inverse: null\n })\n declare notificationContactAddresses: SyncHasMany;\n\n /**\n * Indicates the trigger is fully configured.\n */\n @computed('triggerType', 'triggerDevices.[]', 'triggerEvent', 'triggerExtraDeviceOption')\n get isTriggerConfigured(): boolean {\n const rule = this as Rule,\n triggerType = rule.belongsTo('triggerType').id(),\n triggerEvent = rule.belongsTo('triggerEvent').id(),\n triggerDevices = rule.hasMany('triggerDevices').ids(),\n triggerExtraDeviceOption = rule.hasMany('triggerExtraDeviceOption').ids();\n return (\n isPresent(triggerType) &&\n isPresent(triggerEvent) &&\n (triggerDevices?.length > 0 || triggerExtraDeviceOption?.length > 0)\n );\n }\n\n /**\n * Indicates the trigger is fully configured.\n */\n @computed('actionType', 'actionDevices.[]', 'actionEvent', 'actionExtraDeviceOption')\n get isActionConfigured(): boolean {\n const rule = this as Rule,\n actionType = rule.belongsTo('actionType').id(),\n actionEvent = rule.belongsTo('actionEvent').id(),\n actionDevices = rule.hasMany('actionDevices').ids(),\n actionExtraDeviceOption = rule.hasMany('actionExtraDeviceOption').ids();\n return (\n isPresent(actionType) &&\n isPresent(actionEvent) &&\n (actionDevices?.length > 0 || actionExtraDeviceOption?.length > 0)\n );\n }\n\n // region Filtered device and status models.\n @computed(\n 'actionDevices.[]',\n 'actionEvent',\n 'actionType',\n 'triggerEvent',\n 'triggerType',\n 'restrictions.@each.{beginTime,endTime,dayBits}'\n )\n get globalWarningMessage(): Promise {\n return this.requestWarningMessage(Global);\n }\n\n @computed('actionDevices.[]', 'actionEvent', 'actionType', 'triggerEvent', 'triggerType')\n get triggerWarningMessage(): Promise {\n return this.requestWarningMessage(Trigger);\n }\n\n // region Filtered device and status models.\n @computed('actionDevices.[]', 'actionEvent', 'actionType', 'triggerEvent', 'triggerType')\n get actionWarningMessage(): Promise {\n return this.requestWarningMessage(Action);\n }\n\n @computed('actionDevices.[]')\n get isNotMixedLights(): Promise | boolean {\n return this.getIsNotMixedLights();\n }\n\n private async requestWarningMessage(warningType: number): Promise {\n const rule = this as Rule,\n triggerType = rule.belongsTo('triggerType').id(),\n triggerEvent = rule.belongsTo('triggerEvent').id(),\n triggerDeviceIds = rule.hasMany('triggerDevices').ids(),\n actionType = rule.belongsTo('actionType').id(),\n actionEvent = rule.belongsTo('actionEvent').id(),\n actionDeviceIds = rule.hasMany('actionDevices').ids(),\n baseRestriction = (await rule.restrictions).find(\n (restriction) => restriction.restrictionType === ScheduleRestrictionType\n ),\n scheduleRestriction = baseRestriction instanceof ScheduleRestriction ? baseRestriction : undefined;\n\n if ([triggerType, triggerEvent, actionType, actionEvent, scheduleRestriction].some(isEmpty)) {\n return undefined;\n }\n\n const beginTime = scheduleRestriction?.beginTime;\n const endTime = scheduleRestriction?.endTime;\n const dayBits = scheduleRestriction?.dayBits;\n\n return (\n await this.store.query('automation/rules-builder/message-group', {\n warningType,\n triggerType,\n triggerEvent,\n triggerDeviceIds,\n actionType,\n actionEvent,\n actionDeviceIds,\n beginTime,\n endTime,\n dayBits\n })\n ).toArray();\n }\n\n private getIsNotMixedLights(): Promise | boolean {\n const rule = this as Rule,\n actionType = rule.belongsTo('actionType').id(),\n actionDeviceIds = rule.hasMany('actionDevices').ids();\n\n if ([actionType, actionDeviceIds].some(isEmpty) && parseInt(actionType) !== Light) {\n return true;\n }\n\n return this.submitCustomApiCall('isOrWasNotMixedLights', GET, {\n actionDeviceIds\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/rule': Rule;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseRuleCreator from './base-rule-creator';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type ExtraDeviceOption from './extra-device-option';\nimport type ExtraRuleOption from './extra-rule-option';\nimport type NotificationGroup from './notification/group';\n\n/**\n * @classdesc\n * Rules builder model. Determines what options are shown to a user when creating a rule\n */\nexport default class RuleTemplate extends BaseRuleCreator {\n /**\n * Used to determine if construction banner is shown\n */\n @attr('boolean')\n declare isCertified: boolean;\n\n /**\n * If there are multiple of the same template, this decides which one gets prioritize\n */\n @attr('number')\n declare rank: number;\n\n /**\n * Trigger single or multi select\n */\n @attr('number')\n declare triggerSelectionType: number;\n\n /**\n * Action single or multi select\n */\n @attr('number')\n declare actionSelectionType: number;\n\n /**\n * Whether or not to show delay configuration\n */\n @attr('boolean')\n declare delayEditEnabled: boolean;\n\n /**\n * Whether extra options for the action that depend on the selected trigger and action events.\n *\n * @type {boolean}\n */\n @attr('boolean')\n declare extraActionOptionsEnabled: boolean;\n\n /**\n * The route to edit the extra action options.\n *\n * @type {number}\n */\n @attr('number')\n declare extraActionOptionsRoute: number;\n\n /**\n * Whether or not to show schedule configuration\n *\n * @type {boolean}\n */\n @attr('boolean')\n declare scheduleEnabled: boolean;\n\n /**\n * Indicates if the rule supports changing its name\n */\n @attr('boolean')\n declare editNameEnabled: boolean;\n\n /**\n * Used if this rule type wants to display a different message when saving.\n */\n @attr('string')\n declare customSaveMessage: string;\n\n /**\n * Can the user create (not just view) the rule\n */\n @attr('boolean')\n declare canUserCreate: boolean;\n\n @hasMany('automation/rules-builder/extra-device-option', {\n async: true,\n polymorphic: true,\n inverse: null\n })\n declare triggerExtraDeviceOptions: AsyncHasMany;\n\n @hasMany('automation/rules-builder/extra-device-option', {\n async: true,\n polymorphic: true,\n inverse: null\n })\n declare actionExtraDeviceOptions: AsyncHasMany;\n\n @hasMany('automation/rules-builder/notification/group', { async: true, inverse: null })\n declare notificationGroups: AsyncHasMany;\n\n @hasMany('automation/rules-builder/extra-rule-option', { async: true, inverse: null })\n declare extraRuleOptions: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules-builder/template': RuleTemplate;\n }\n}\n","import BaseRuleFeatureType from './base-rule-feature-type';\n\n/**\n * Information about a possible Trigger type.\n */\nexport default class TriggerType extends BaseRuleFeatureType {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rules-builder/trigger-type': TriggerType;\n }\n}\n","import Model from '@ember-data/model';\nimport { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * A model for suggested rules\n */\nexport default class RuleSuggestion extends Model {\n /**\n * The ID of the device this rule alert belongs to.\n */\n @attr('number', { defaultValue: 0 })\n declare deviceId: number;\n\n /**\n * The rule alert type.\n */\n @attr('number', { defaultValue: 0 })\n declare type: number;\n\n /**\n * The name of this rule alert.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Text that describes the condition this rule is based on.\n */\n @attr('string', { defaultValue: '' })\n declare conditionText: string;\n\n /**\n * The action to take when the condition is met, in textual form.\n */\n @attr('string', { defaultValue: '' })\n declare actionText: string;\n\n /**\n * When the rules should be in effect, in textual form.\n */\n @attr('string', { defaultValue: '' })\n declare whenText: string;\n\n /**\n * If the rule is a recommended selection (this will add a recommended tag above the rule on the UX).\n */\n @attr('boolean', { defaultValue: false })\n declare isRecommended: boolean;\n\n /**\n * The route/page Id to add/edit this rule.\n */\n @attr('number', { defaultValue: 0 })\n declare addEditRouteId: number;\n\n /**\n * Query parameters for the add/edit page.\n */\n @attr()\n declare addEditPageQueryParameters: Record;\n\n /**\n * Should this rule suggestion be disabled?\n * This grays out the rule suggestion option, makes it un-clickable,\n * and uses the svg-warning icon rather than the svg-circle-plus icon.\n */\n @attr('boolean', { defaultValue: false })\n declare disabled: boolean;\n\n /**\n * Should this rule suggestion only be disabled for mobile?\n * This is used to display text on the mobile app,\n * indicating that this particular type of rule\n * can only be created on the customer website.\n */\n @attr('boolean', { defaultValue: false })\n declare disabledForMobile: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rule-suggestion': RuleSuggestion;\n }\n}\n","import BaseAutomationItem from '../base-automation-item';\n\n/**\n * Rule Model\n */\nexport default class Rule extends BaseAutomationItem {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/rules/rule': Rule;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getTriggerDescription } from 'customer-site/utils/scene-rule-display';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Scene from './scene';\n\n/**\n * @classdesc\n * A model with information about how scenes and remotes are linked.\n */\nexport default class SceneRuleDisplay extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * The ID of the remote button this scene rule is linked to.\n */\n @attr('number', { defaultValue: 0 })\n declare button: number;\n\n /**\n * The action type (single press, double press, etc) this scene rule is linked to.\n */\n @attr('number', { defaultValue: 0 })\n declare actionType: number;\n\n /**\n * The scene this scene rule is linked to.\n */\n @belongsTo('automation/scene', { async: true, inverse: null })\n declare scene: AsyncBelongsTo;\n\n /**\n * Map an action type to a translation string, and add the button number as a parameter.\n * @returns A translated string, all in the format: \"Button [number]: [Action]\"\n */\n @computed('actionType', 'button', 'intl.t')\n get triggerDescription(): string {\n return getTriggerDescription(this.button, this.actionType, this.intl.t.bind(this.intl));\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/scene-rule-display': SceneRuleDisplay;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Custom } from '../../enums/ActionSetType';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type IconData from '../../utils/transforms-objects/icon-data';\nimport type System from '../systems/system';\n\ntype ExecutePayload = {\n id: string;\n type: string;\n desiredState: number;\n options: Record;\n};\n\n/**\n * @classdesc\n * Scene model.\n */\nexport default class SceneModel extends BaseModel {\n // region properties\n /**\n * The system.\n */\n @belongsTo('systems/system', { async: true, inverse: 'scenes' })\n declare system: AsyncBelongsTo;\n\n /**\n * The name of the scene.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * The icon for the scene.\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * The action set type of the scene.\n */\n @attr('number', { defaultValue: Custom })\n declare actionSetType: number;\n\n /**\n * The sort order number of the scene.\n */\n @attr('number')\n declare sortOrder: number;\n\n /**\n * Can this scene be deleted? (Is it a custom scene?)\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDeleted: boolean;\n\n /**\n * Flag to determine if the currently logged in context can edit this scene.\n */\n @attr('boolean', { defaultValue: false })\n declare canBeEdited: boolean;\n\n /**\n * Flag to determine if the currently logged in context can execute this scene.\n */\n @attr('boolean', { defaultValue: false })\n declare canBeExecuted: boolean;\n\n /**\n * Indicates that this scene includes a disarm partition action.\n */\n @attr('boolean', { defaultValue: false })\n declare hasDisarmAction: boolean;\n\n // endregion\n\n // region api calls\n\n /**\n * Execute scene\n */\n execute(): Promise {\n return this.submitCustomApiCall>('execute').then(({ value }) => {\n // value contains information about devices that need to change their state\n value.forEach((device) => {\n const { id, type, desiredState, options } = device;\n\n this.store.peekRecord(type, id)?.executeStateChange(desiredState, true, options);\n });\n });\n }\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/scene': SceneModel;\n }\n}\n","import ExtraRuleOptionItem from '../rules-builder/extra-rule-option-item';\n\nexport default class AdditionalOptionItem extends ExtraRuleOptionItem {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/additional-option-item': AdditionalOptionItem;\n }\n}\n","import { belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type Event from '../rules-builder/event';\nimport type TimeType from './time-type';\n\nexport default class FollowupOption extends BaseModel {\n @belongsTo('automation/rules-builder/event', { async: true, inverse: null })\n declare selectedEvent: AsyncBelongsTo;\n\n @hasMany('automation/rules-builder/event', { async: true, inverse: null })\n declare availableEvents: AsyncHasMany;\n\n @belongsTo('automation/schedule-builder/time-type', { async: true, inverse: null })\n declare selectedTimeType: AsyncBelongsTo;\n\n @hasMany('automation/schedule-builder/time-type', { async: true, inverse: null })\n declare availableTimeTypes: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/followup-event': FollowupOption;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\nexport default class OccurrenceType extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('icon-data')\n declare icon: IconData;\n\n @attr('boolean')\n declare showSpecificDaysComponent: boolean;\n @attr('boolean')\n declare showSpecificDateComponent: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/occurrence-type': OccurrenceType;\n }\n}\n","import { attr, hasMany, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, AsyncBelongsTo, SyncHasMany } from '@ember-data/model';\nimport type ActionTypeModel from '../rules-builder/action-type';\nimport type RuleDeviceModel from '../rules-builder/device';\nimport type RuleExtraDeviceModel from '../rules-builder/extra-device-option';\nimport type OccurrenceType from './occurrence-type';\nimport type ScheduleEvent from './schedule-event';\n\nexport default class ScheduleBuilder extends BaseModel {\n @hasMany('automation/schedule-builder/schedule-event', {\n async: false,\n inverse: null\n })\n declare scheduleEvents: SyncHasMany;\n\n @belongsTo('automation/rules-builder/action-type', { async: true, inverse: null })\n declare actionType?: AsyncBelongsTo;\n\n @hasMany('automation/rules-builder/device', { async: true, inverse: null })\n declare actionDevices: AsyncHasMany;\n\n @hasMany('automation/rules-builder/extra-device-option', { async: true, inverse: null })\n declare actionExtraDeviceOptions: AsyncHasMany;\n\n @belongsTo('automation/schedule-builder/occurrence-type', { async: true, inverse: null })\n declare occurrenceType: AsyncBelongsTo;\n\n @attr('array')\n declare selectedDays: number[];\n\n @attr('string')\n declare name: string;\n\n @attr('rule-extra-data', {\n defaultValue() {\n return {};\n }\n })\n declare extraData: Record;\n\n /** @override */\n get shouldRollbackRelationships(): boolean {\n return true;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/schedule-builder': ScheduleBuilder;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type RuleEventModel from '../rules-builder/event';\nimport type TimeType from './time-type';\n\nexport default class ScheduleEvent extends BaseModel {\n @belongsTo('automation/schedule-builder/time-type', { async: true, inverse: null })\n declare timeType: AsyncBelongsTo;\n\n @belongsTo('automation/rules-builder/event', { async: true, inverse: null })\n declare actionEvent: AsyncBelongsTo;\n\n @attr('date')\n declare specificTime: Date | undefined;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/schedule-event': ScheduleEvent;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo, AsyncHasMany, SyncHasMany } from '@ember-data/model';\nimport type ActionTypeModel from '../rules-builder/action-type';\nimport type RuleDeviceModel from '../rules-builder/device';\nimport type RuleEventModel from '../rules-builder/event';\nimport type RuleExtraDeviceModel from '../rules-builder/extra-device-option';\nimport type FollowupOption from './followup-option';\nimport type OccurrenceType from './occurrence-type';\nimport type TimeType from './time-type';\n\nexport default class ScheduleTemplate extends BaseModel {\n @belongsTo('automation/schedule-builder/time-type', { async: true, inverse: null })\n declare timeType: AsyncBelongsTo;\n\n @belongsTo('automation/schedule-builder/occurrence-type', { async: true, inverse: null })\n declare occurrenceType: AsyncBelongsTo;\n\n @belongsTo('automation/rules-builder/action-type', { async: true, inverse: null })\n declare actionType: AsyncBelongsTo;\n\n @belongsTo('automation/rules-builder/event', { async: true, inverse: null })\n declare actionEvent: AsyncBelongsTo;\n\n @hasMany('automation/rules-builder/device', { async: true, inverse: null })\n declare actionDevices: AsyncHasMany;\n\n @hasMany('automation/rules-builder/extra-device-option', { async: true, inverse: null })\n declare actionExtraDeviceOptions: AsyncHasMany;\n\n @attr('number')\n declare actionSelectionType: number;\n\n @hasMany('automation/schedule-builder/followup-option', { async: false, inverse: null })\n declare followUpOptions: SyncHasMany;\n\n @attr('number')\n declare maxFollowUps: number;\n\n @attr('number', { defaultValue: 10 })\n declare minuteInterval: number;\n\n @attr('boolean')\n declare canUserCreate: boolean;\n\n @attr('string')\n declare defaultName: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/schedule-template': ScheduleTemplate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\nexport default class TimeType extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('icon-data')\n declare icon: IconData;\n\n @attr('boolean')\n declare showSpecificTimeComponent: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedule-builder/time-type': TimeType;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for holding user-created schedule details.\n */\nexport default abstract class DetailedSchedule extends BaseModel {\n /**\n * The name of the schedule\n */\n @attr('string')\n declare name: string;\n\n /**\n * Is the schedule active?\n */\n @attr('boolean')\n declare isActive: boolean;\n\n /**\n * The start time of the schedule\n */\n @attr('date')\n declare startTime: Date;\n\n /**\n * The end time of the schedule\n */\n @attr('date')\n declare endTime: Date;\n\n /**\n * Array of numbers representing days the schedule is active\n */\n @attr('array')\n declare daysActive: number[];\n\n /**\n * The type of schedule.\n */\n declare abstract scheduleType: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedules/detailed-schedule': DetailedSchedule;\n }\n}\n","import BaseAutomationItem from '../base-automation-item';\n\n/**\n * Model for holding user-created schedule information.\n */\nexport default class Schedule extends BaseAutomationItem {\n /** @override */\n isSchedule = true;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedules/schedule': Schedule;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport DetailedSchedule from './detailed-schedule';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type DeviceProfile from 'customer-site/models/wifi/device-profile';\n\n/**\n * Model for holding user-created schedule information.\n */\nexport default class WifiDetailedSchedule extends DetailedSchedule {\n /**\n * The profile this wifi schedule belongs to.\n */\n @belongsTo('wifi/device-profile', { async: true, inverse: null })\n declare profile: AsyncBelongsTo;\n\n /**\n * The type of schedule will be wifi\n */\n get scheduleType() {\n return 'wifi';\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'automation/schedules/wifi-detailed-schedule': WifiDetailedSchedule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class Content extends BaseModel {\n @attr('string')\n declare header: string;\n\n @attr('string')\n declare description: string;\n\n @attr('string')\n declare phoneNumberRaw: string;\n\n @attr('string')\n declare phoneNumberFormatted: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'builder-trial-account-expiration-warning/content': Content;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { ARM_AWAY } from 'customer-site/components/commercial/arming-schedules/schedule-card/index';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type DaysOfWeekSelection from './days-of-week-selection';\n\nexport interface DayTime {\n startTime: number;\n endTime: number;\n isRearming: boolean;\n}\n\nexport default class ArmingSchedule extends BaseModel {\n /** Generic Schedule Attributes */\n\n @attr('string', { defaultValue: '' })\n declare scheduleName: string;\n\n @attr('boolean', { defaultValue: true })\n declare isActive: boolean;\n\n @attr('number')\n declare scheduleType: number;\n\n @attr('boolean', { defaultValue: true })\n declare isBusinessHours: boolean;\n\n /**\n * A map of days and their corresponding start and end times.\n * Used exclusively for Business Hours for now.\n * @todo: Refactor all schedules to populate and utilize this property.\n */\n @attr('arming-schedule-day-time')\n declare dayTimes: Map;\n\n /**\n * Bitwise representation of the days the schedule applies to.\n */\n @belongsTo('commercial/schedules/days-of-week-selection', { async: true, inverse: null })\n declare daysOfWeekSelection: AsyncBelongsTo;\n\n /**\n * From subschedule table (lu_auto_arm or lu_arming)\n */\n @attr('number', { defaultValue: 1 })\n declare scheduleDay: number | null;\n\n @attr('number', { defaultValue: 0 })\n declare partition: number;\n\n @attr('array')\n declare partitions: number[];\n\n @attr('number', { defaultValue: -1 })\n declare startMinutes: number;\n\n @attr('number', { defaultValue: -1 })\n declare rearmingStartMinutes: number;\n\n @attr('number', { defaultValue: -1 })\n declare endMinutes: number;\n\n /** Arming Schedule Attributes */\n\n @attr('number', { defaultValue: 0 })\n declare firstArmingState: number | null;\n\n @attr('number', { defaultValue: undefined })\n declare secondArmingState: number | null;\n\n /** Rearming Schedule Attributes */\n @attr('number', { defaultValue: 60 })\n declare inactivityDelay: number | null;\n\n @attr('number', { defaultValue: ARM_AWAY })\n declare rearmingState: number | null;\n\n @attr('boolean', { defaultValue: false })\n declare isAllPartitionRule: boolean | null;\n\n toggleActiveStatus(): Promise {\n return this.submitCustomApiCall('toggleActiveStatus', 'PUT');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'commercial/schedules/arming-schedule': ArmingSchedule;\n }\n}\n","import Model from '@ember-data/model';\nimport { attr } from '@ember-data/model';\n\nexport default class DaysOfWeekSelection extends Model {\n @attr('boolean', { defaultValue: true })\n declare sunday: boolean;\n\n @attr('boolean', { defaultValue: true })\n declare monday: boolean;\n\n @attr('boolean', { defaultValue: true })\n declare tuesday: boolean;\n\n @attr('boolean', { defaultValue: true })\n declare wednesday: boolean;\n\n @attr('boolean', { defaultValue: true })\n declare thursday: boolean;\n\n @attr('boolean', { defaultValue: true })\n declare friday: boolean;\n\n @attr('boolean', { defaultValue: true })\n declare saturday: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'commercial/schedules/days-of-week-selection': DaysOfWeekSelection;\n }\n}\n","import FilterCount from '../enterprise/locations/filter-count';\n\n/**\n * @classdesc\n *\n * This model lets us call a different backend controller while having effectively the same model\n */\nexport default class SingleSystemFilterCount extends FilterCount {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'commercial/single-system-filter-count': SingleSystemFilterCount;\n }\n}\n","import Filter from '../enterprise/locations/filter';\n\n/**\n * @classdesc\n *\n * This model lets us call a different backend controller while having effectively the same model\n */\nexport default class SingleSystemFilter extends Filter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'commercial/single-system-filter': SingleSystemFilter;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport SafetyButtonAlarm from '../personal-safety/alarm-link';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type PersonalSafetyUserProfile from '../personal-safety/user-profile';\n\nexport default class ConnectedCarAlarm extends SafetyButtonAlarm {\n /**\n * Personal Safety User\n */\n @belongsTo('personal-safety/customer-profile', { async: true, inverse: null })\n declare customerProfile: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'connected-car/alarm': ConnectedCarAlarm;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ThermostatDiagnostic from './thermostat-diagnostic';\n\n/**\n * @classdesc\n * Comfort diagnostic model.\n */\nexport default class ComfortDiagnostic extends ThermostatDiagnostic {\n /**\n * The average indoor (ambient) temperature.\n */\n @attr('number')\n declare avgIndoorTemperature: number;\n\n /**\n * The lower (colder) comfort threshold temperature.\n */\n @attr('number')\n declare lowerComfortBoundTemp: number;\n\n /**\n * The upper (warmer) comfort threshold temperature.\n */\n @attr('number')\n declare upperComfortBoundTemp: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'dashboards/comfort-diagnostic': ComfortDiagnostic;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ThermostatDiagnostic from './thermostat-diagnostic';\n\n/**\n * @classdesc\n * Cycle diagnostic model.\n */\nexport default class CycleDiagnostic extends ThermostatDiagnostic {\n /**\n * The average runtime (in minutes) for a single cycle in a specific thermostat mode.\n */\n @attr('number')\n declare avgCycleRuntimeForMode: number;\n\n /**\n * The total number of long cycles that occurred for a specific thermostat mode.\n */\n @attr('number')\n declare numLongCyclesForMode: number;\n\n /**\n * The total number of cycles that occurred for a specific thermostat mode.\n */\n @attr('number')\n declare numCyclesForMode: number;\n\n /**\n * Cycle runtimes that equal or exceed this threshold (in minutes) are long-cycling.\n */\n @attr('number')\n declare longCyclingThreshold: number;\n\n /**\n * Cycle runtimes that equal or exceed this threshold (in minutes) are severely long-cycling.\n */\n @attr('number')\n declare severeLongCyclingThreshold: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'dashboards/cycle-diagnostic': CycleDiagnostic;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ThermostatDiagnostic from './thermostat-diagnostic';\n\n/**\n * @classdesc\n * Efficiency diagnostic model.\n */\nexport default class EfficiencyDiagnostic extends ThermostatDiagnostic {\n /**\n * A brief summary description for this diagnostic.\n */\n @attr('string')\n declare previewSummary: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'dashboards/efficiency-diagnostic': EfficiencyDiagnostic;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ThermostatDiagnostic from './thermostat-diagnostic';\n\n/**\n * @classdesc\n * Runtime diagnostic model.\n */\nexport default class RuntimeDiagnostic extends ThermostatDiagnostic {\n /**\n * Total runtimes that equal or exceed this threshold (in minutes) are problematic.\n */\n @attr('number')\n declare longRuntimeThreshold: number;\n\n /**\n * Total runtimes that equal or exceed this threshold (in minutes) are severely problematic.\n */\n @attr('number')\n declare severeLongRuntimeThreshold: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'dashboards/runtime-diagnostic': RuntimeDiagnostic;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport ComfortView from 'customer-site/components/dashboards/thermostats/comfort-view/index';\nimport CycleView from 'customer-site/components/dashboards/thermostats/cycle-view/index';\nimport EfficiencyView from 'customer-site/components/dashboards/thermostats/efficiency-view/index';\nimport RuntimeView from 'customer-site/components/dashboards/thermostats/runtime-view/index';\nimport IconMap from 'customer-site/enums/IconMap';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { ThermostatModeHeat, ThermostatModeCool } from '../../enums/Icon';\nimport { Unknown } from '../../enums/SeverityStatus';\nimport { Comfort, Cycle, Runtime, Efficiency } from '../../enums/ThermostatDiagnosticType';\nimport { Heat, Cool } from '../../enums/ThermostatStatus';\nimport ThermostatStatusMap from '../../enums/ThermostatStatusMap';\nimport { getSeverityStatusCss, getSeverityStatusIcon, getSeverityStatusTranslation } from '../../utils/severity-status';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Component from '@glimmer/component';\n\n/**\n * Maps the temperature mode to its corresponding icon.\n * [ThermostatStatusEnum]: IconEnum\n */\nconst MODE_ICON_MAP: Record = {\n [ThermostatStatusMap[Heat]]: IconMap[ThermostatModeHeat],\n [ThermostatStatusMap[Cool]]: IconMap[ThermostatModeCool]\n};\n\n/**\n * Returns a custom CSS class for the given temperature mode.\n * Returns an empty string if the given mode is neither Heat nor Cool.\n * [ThermostatStatusEnum]: custom-css-string\n */\nfunction getModeCss(mode: string): string {\n return (\n {\n [ThermostatStatusMap[Heat]]: 'heat',\n [ThermostatStatusMap[Cool]]: 'cool'\n }[mode] || ''\n );\n}\n\n/**\n * @classdesc\n * Model for the HVAC Dashboard feature.\n */\nexport default class ThermostatDiagnostic extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * The type category for the diagnostic.\n * ThermostatDiagnosticTypeEnum\n */\n @attr('number', { defaultValue: Efficiency })\n declare diagnosticType: number;\n\n /**\n * The page enum for this diagnostic type.\n * CustomerPageUrlEnum\n */\n @attr('number')\n declare pageEnum: number;\n\n /**\n * The temperature mode for this diagnostic.\n * ThermostatDiagnosticDisplayModeEnum\n */\n @attr('string', { defaultValue: '' })\n declare displayMode: 'heat' | 'cool';\n\n /**\n * The title for this diagnostic.\n */\n @attr('string', { defaultValue: '' })\n declare pageTitle: string;\n\n /**\n * The severity of the health status for this diagnostic.\n * SeverityStatusEnum\n */\n @attr('number', { defaultValue: Unknown })\n declare severityStatus: number;\n\n /**\n * The name of the thermostat associated with this diagnostic.\n */\n @attr('string', { defaultValue: '' })\n declare thermostatDescription: string;\n\n /**\n * The total time (in minutes) that the system was running.\n */\n @attr('number')\n declare totalRuntimeMinutes: number;\n\n /**\n * The average target setpoint for this diagnostic's displaying temperature mode.\n */\n @attr('number')\n declare avgTargetSetpoint: number;\n\n /**\n * The average outdoor temperature for this diagnostic.\n */\n @attr('number')\n declare avgOutdoorTemperature: number;\n\n /**\n * The banner text which summarizes the diagnostic health status.\n */\n @attr('string', { defaultValue: '' })\n declare bannerDescription: string;\n\n /**\n * The summary description for this diagnostic.\n */\n @attr('string', { defaultValue: '' })\n declare summary: string;\n\n /**\n * Returns the expected resource string for the displaying temperature mode.\n * If a valid display mode is not provided, use generic language.\n */\n getAvgTargetLabel(displayMode: string): string {\n const key =\n {\n [ThermostatStatusMap[Heat]]: 'avgHeatTarget',\n [ThermostatStatusMap[Cool]]: 'avgCoolTarget'\n }[displayMode] || 'avgTarget';\n\n return this.intl.t(`models.dashboards.thermostat-diagnostic.${key}`);\n }\n\n // region Computed Properties\n\n // region Component Paths\n\n /**\n * Returns the path to the appropriate dashboard view component for the given\n * diagnostic type.\n */\n @computed('diagnosticType')\n get component(): typeof Component | null {\n return (\n (\n {\n [Comfort]: ComfortView,\n [Cycle]: CycleView,\n [Runtime]: RuntimeView,\n [Efficiency]: EfficiencyView\n } as Record>\n )[this.diagnosticType] || null\n );\n }\n\n // endregion Component Paths\n\n // region SeverityStatus\n /**\n * Returns the icon string that corresponds to the given severityStatus.\n */\n @computed('severityStatus')\n get severityStatusIcon(): string {\n return getSeverityStatusIcon(this.severityStatus);\n }\n\n /**\n * Returns the CSS string that corresponds to the given severityStatus.\n */\n @computed('severityStatus')\n get severityStatusCss(): string {\n return getSeverityStatusCss(this.severityStatus);\n }\n\n /**\n * Returns the translated string that corresponds to the given severityStatus.\n */\n @computed('severityStatus')\n get severityStatusTranslation(): string {\n return getSeverityStatusTranslation(\n this.severityStatus,\n // Do not copy this incorrect usage, please fix it.\n // @ts-expect-error: This function doesn't match the expect type and needs to be fixed.\n (...args: [string, Parameters[1]]) => this.intl.t(...args)\n );\n }\n\n // endregion\n\n // region DisplayMode\n /**\n * Returns the icon string that corresponds to the given displayMode.\n */\n @computed('displayMode')\n get displayModeIcon(): string {\n return MODE_ICON_MAP[this.displayMode];\n }\n\n /**\n * Returns the CSS string that corresponds to the given displayMode.\n */\n @computed('displayMode')\n get displayModeCss(): string {\n return getModeCss(this.displayMode);\n }\n\n // endregion\n\n // region AvgTargetSetpoint\n /**\n * Returns the temperature value label resource string that corresponds to the given displayMode.\n */\n @computed('displayMode')\n get avgTargetLabel(): string {\n return this.getAvgTargetLabel(this.displayMode);\n }\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'dashboards/thermostat-diagnostic': ThermostatDiagnostic;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * @classdesc\n * The model that defines an Alarm.com dealer/service provider.\n *\n * @note The id is the DealerId.\n */\nexport default class Dealer extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Dealer's name.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Should the help menu be shown for this dealer?\n */\n @attr('boolean')\n declare showHelpMenu: boolean;\n\n /**\n * Url for help documentation.\n */\n @attr('string')\n declare helpDocumentationUrl: string;\n\n /**\n * Whether the dealer has opted to show its support email to customers.\n */\n @attr('boolean')\n declare shouldShowSupportEmail: boolean;\n\n /**\n * Email Address that customers should contact the dealer at for support.\n */\n @attr('string')\n declare supportEmail: string;\n\n /**\n * Whether the dealer has opted to show its support phone to customers.\n */\n @attr('boolean')\n declare shouldShowSupportPhone: boolean;\n\n /**\n * Email Address that customers should contact the dealer at for support.\n */\n @attr('string')\n declare supportPhone: string;\n\n /**\n * Text on what a user should do if they have questions.\n * If the dealer has a support phone number, that's included in the message;\n * otherwise, it's generic text about contacting the service provider.\n */\n @computed('supportPhone')\n get contactServiceProviderMessage(): string {\n const phoneNumber = this.supportPhone;\n\n return this.supportPhone\n ? this.intl.t('generic.contactServiceProvider.ifYouHaveQuestionsWithPhoneNumber', { phoneNumber })\n : this.intl.t('generic.contactServiceProvider.ifYouHaveQuestionsGeneric');\n }\n\n /**\n * Dealer's external site that customers should visit for support.\n */\n @attr('string')\n declare externalSupportWebsite: string;\n\n /**\n * Does the context have access to ContactUs page.\n */\n @attr('boolean')\n declare hasContactUs: boolean;\n\n /**\n * Url to the dealer's contact us page if they use an external one.\n */\n @attr('string')\n declare externalContactUsLink: string;\n\n /**\n * Does the context have access to SupportCenter page?\n */\n @attr('boolean')\n declare hasSupportCenter: boolean;\n\n /**\n * Does the context have access to the News and Updates page?\n */\n @attr('boolean')\n declare hasNewsAndUpdatesAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'dealers/dealer': Dealer;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Promise as EmberPromise } from 'rsvp';\nimport { Open, Closed, Unknown, Buzz, Hidden } from '../../enums/CardReaderState';\nimport { getAccessPointStateText, getAccessPointStateCSS } from '../../utils/access-control-access-point';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n *\n * Access Control Access Point device model.\n */\nexport default class AccessControlAccessPointDevice extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'accessControlAccessPointDevices' })\n declare system: AsyncBelongsTo;\n\n /**\n * Does the logged in context have permission to buzz this access point?\n */\n @attr('boolean', { defaultValue: false })\n declare canBuzz: boolean;\n\n /**\n * Does the logged in context have permission to lock and unlock this access point?\n */\n @attr('boolean', { defaultValue: false })\n declare canLockUnlock: boolean;\n\n @belongsTo('access-control/access-control-access-point', { async: true, inverse: 'device' })\n declare accessControlAccessPoint: AsyncBelongsTo;\n\n /**\n * Does this access-point have reader-based anti-passback enabled?\n */\n @alias('accessControlAccessPoint.readerAntiPassbackEnabled')\n declare readerAntiPassbackEnabled: Promise;\n\n /**\n * Does this access-point have two-person access enabled?\n */\n @alias('accessControlAccessPoint.twoPersonAccessEnabled')\n declare twoPersonAccessEnabled: Promise;\n\n /**\n * Is this access point installed with a MIWA Lock?\n */\n @alias('accessControlAccessPoint.hasMiwaLock')\n declare hasMiwaLock: Promise;\n\n /** @override **/\n get hiddenState() {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getAccessPointStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getAccessPointStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /** @override **/\n executeStateChange(\n desiredState: number,\n statePollOnly: boolean\n ): OptionalAsyncModelPayload {\n const type = (\n {\n [Closed]: 'lock',\n [Open]: 'unlock',\n [Buzz]: 'buzz'\n } as Record\n )[desiredState];\n\n // Is this state not handled yet?\n if (!type) {\n console.error(\n 'Access Control Access Point Device model method not implemented for desired state',\n desiredState\n );\n return EmberPromise.reject();\n }\n\n return this.changeState(\n type,\n desiredState,\n statePollOnly,\n `${type}ingDoorFailed`\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/access-control-access-point-device': AccessControlAccessPointDevice;\n }\n}\n","import { attr, hasMany, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Promise as EmberPromise } from 'rsvp';\nimport { Open, Closed, Unknown, Buzz, Hidden } from '../../enums/CardReaderState';\nimport { getAccessPointStateText, getAccessPointStateCSS } from '../../utils/access-control-access-point';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type ElevatorFloorDevice from './elevator-floor-device';\n\n/**\n * @classdesc\n *\n * Access Control elevator device model.\n */\nexport default class AccessControlElevatorDevice extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'accessControlElevatorDevices' })\n declare system: AsyncBelongsTo;\n\n /**\n * Does the logged in context have permission to buzz this elevator?\n */\n @attr('boolean', { defaultValue: false })\n declare canBuzz: boolean;\n\n /**\n * Does the logged in context have permission to lock and unlock this elevator?\n */\n @attr('boolean', { defaultValue: false })\n declare canLockUnlock: boolean;\n\n /**\n * Collection of elevator floors on this elevator\n */\n @hasMany('devices/elevator-floor-device', { async: true, inverse: null })\n declare floors: AsyncHasMany;\n\n /** @override **/\n get hiddenState() {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getAccessPointStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getAccessPointStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /** @override **/\n executeStateChange(\n desiredState: number,\n statePollOnly: boolean\n ): OptionalAsyncModelPayload {\n const type = (\n {\n [Closed]: 'lock',\n [Open]: 'unlock',\n [Buzz]: 'buzz'\n } as Record\n )[desiredState];\n\n // Is this state not handled yet?\n if (!type) {\n console.error(\n 'Access Control Elevator Device model method not implemented for desired state',\n desiredState\n );\n return EmberPromise.reject();\n }\n\n return this.changeState(type, desiredState, statePollOnly, `${type}ingDoorFailed`);\n }\n /**\n * Returns a list of any items that are associated with or fall under this device.\n */\n getSubItems(): AsyncHasMany {\n return this.floors;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/access-control-elevator-device': AccessControlElevatorDevice;\n }\n}\n","import BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n *\n * Audio device model.\n */\nexport default class AudioDevice extends BaseManagedDevice {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/audio-device': AudioDevice;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport { belongsTo, attr } from '@ember-data/model';\nimport { computed, set, setProperties, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isPresent } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport { ArmedAway } from 'customer-site/enums/ArmingState';\nimport { High, Medium, Low, Critical } from 'customer-site/enums/BatteryLevels';\nimport { isAdapterErrorProcessingError } from '@adc/ajax/utils/status-codes';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { NONE, SENDING, WAITING, COMPLETE, getAnimationCSS } from '@adc/ui-components/utils/animations';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\nimport type { SafeString } from 'handlebars';\nimport type RSVP from 'rsvp';\nimport type System from '../systems/system';\nimport type StateInfo from './state-info';\n\ninterface StateChangeOptions {\n modelChanges?: any;\n failureMessage?: string;\n options?: Record;\n fnPostTask?: () => void;\n}\n\nexport interface DeviceBatteryDetails {\n isCritical: boolean;\n displayIcon: boolean;\n isLow: boolean;\n level?: number;\n text: string;\n icon: string;\n}\n\n/**\n * The state for a device that is currently loading.\n */\nexport const LOADING_STATE = -1;\n\n/**\n * Given a global device id string, takes the unit id, multiplies it by a million, and adds it\n * to the local device id to make a numerical version of the global device id.\n */\nexport function getGlobalDeviceIdNumber(id: string): number | undefined {\n if (!id) {\n return undefined;\n }\n\n const splitId = String(id).split('-');\n return parseInt(splitId[0], 10) * 1000000 + parseInt(splitId[1], 10);\n}\n\n/**\n * Returns a state description text string.\n */\nfunction getStateDescription(this: BaseDevice, state: string | SafeString = ' ', dateTime = ' '): string {\n return this.intl\n .t('models.devices.base-device.deviceTooltip', {\n state: state.toString(),\n dateTime: dateTime.toString()\n })\n .trim();\n}\n\n/**\n * Base device model.\n */\nexport default abstract class BaseDevice extends BaseModel {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * Normal store service.\n *\n * @note I had to do it this way because apparently there cannot be a 'store' property on a model.\n */\n @service('store')\n declare storeService: Store;\n\n // region model properties\n /**\n * The system (unit) that this device belongs to Id.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * The name of the device on the system.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Information regarding the current device state.\n */\n @belongsTo('devices/state-info', { async: true, inverse: null })\n declare stateInfo: AsyncBelongsTo;\n\n /**\n * The model animation state.\n */\n @tracked\n animationState: typeof NONE | typeof SENDING | typeof WAITING | typeof COMPLETE = NONE;\n\n /**\n * Indicates the device is currently in transition to another state.\n */\n isInTransition(): boolean {\n const { animationState } = this;\n return animationState === SENDING || animationState === WAITING;\n }\n\n /**\n * Can the device confirm that its state changed?\n */\n @attr('boolean', { defaultValue: true })\n declare canConfirmStateChange: boolean;\n\n /**\n * Does the logged in context have write permissions for this device?\n *\n * @note This also denotes whether the device can be triggered for a general state change\n */\n @attr('boolean', { defaultValue: false })\n declare canBeSaved: boolean;\n\n /**\n * Can the device description be changed?\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeDescription: boolean;\n\n /**\n * Can the logged in login change the state of this device?\n */\n @attr('boolean', { defaultValue: false })\n declare hasPermissionToChangeState: boolean;\n\n /**\n * Does this device support commands being sent to it?\n */\n @attr('boolean', { defaultValue: true })\n declare canReceiveCommands: boolean;\n\n /**\n * The current device state.\n */\n @attr('number', { defaultValue: -1 })\n declare state: number;\n\n /**\n * The desired device state.\n */\n @attr('number', { defaultValue: 0 })\n declare desiredState: number;\n\n /**\n * The icon to present the device.\n *\n * @type {models.transforms.IconData}\n */\n @attr('icon-data')\n declare deviceIcon: IconData;\n\n /**\n * The current device battery level with null as the default value.\n */\n @attr('number')\n declare batteryLevelNull: number;\n\n /**\n * What is hidden device state value for this specific device.\n * Base device does not have a hidden state so it is overriden by sub-classes.\n */\n get hiddenState(): number | undefined {\n return undefined;\n }\n\n /**\n * Is this device in the hidden state of it's device type?\n */\n @computed('state', 'hiddenState')\n get isHiddenState(): boolean {\n return this.hiddenState !== undefined && this.hiddenState == this.state;\n }\n\n /**\n * Clasification of battery level: high, medium, low, or crtical.\n */\n @attr('number', { defaultValue: undefined })\n declare batteryLevelClassification: number | undefined;\n\n /**\n * Whether the device is in the refreshing state.\n */\n @attr('boolean', { defaultValue: false })\n declare isRefreshingState: boolean;\n\n /**\n * Can the device status be changed remotely via app or web?\n */\n @attr('boolean', { defaultValue: true })\n declare remoteCommandsEnabled: boolean;\n\n // endregion\n\n /**\n * The current device battery level with undefined as the default value.\n *\n * @note Undefined = no battery level (possibly only discrete battery states)\n */\n @computed('batteryLevelNull')\n get batteryLevel(): number | undefined {\n return this.batteryLevelNull || undefined;\n }\n\n /**\n * Information about the current battery level.\n */\n @computed('batteryLevel', 'batteryLevelClassification')\n get batteryDetails(): DeviceBatteryDetails {\n const { batteryLevel, batteryLevelClassification } = this,\n criticalLevel = 10,\n lowLevel = 30,\n fnGetBatteryText = (key: string): string => this.intl.t(`generic.${key}Battery`),\n isCritical = batteryLevelClassification == Critical,\n isLow = batteryLevelClassification == Low || batteryLevelClassification == Critical,\n hasBatteryLevel = isPresent(batteryLevel);\n\n return {\n isCritical,\n isLow,\n displayIcon: batteryLevelClassification != undefined,\n level: (() => {\n // Return battery level if present.\n if (hasBatteryLevel) {\n return batteryLevel;\n }\n\n // Return critical if flag is set.\n if (isCritical) {\n return criticalLevel;\n }\n\n // Return low if flag is set.\n if (isLow) {\n return lowLevel;\n }\n\n // Nothing we can do.\n return undefined;\n })(),\n text: (() => {\n if (batteryLevelClassification == High || batteryLevelClassification == Medium) {\n return fnGetBatteryText('normal');\n } else if (batteryLevelClassification == Low) {\n return fnGetBatteryText('low');\n } else if (batteryLevelClassification == Critical) {\n return fnGetBatteryText('critical');\n }\n return hasBatteryLevel ? `${batteryLevel}%` : '';\n })(),\n icon: (() => {\n let level = '';\n if (batteryLevelClassification != undefined) {\n level = String(batteryLevelClassification);\n } else if (hasBatteryLevel) {\n level = String(Math.min(Math.floor(((batteryLevel ?? 0) / 100) * 5), 4));\n }\n\n return isPresent(level) ? `battery-${level}` : '';\n })()\n };\n }\n\n /**\n * State to transition to\n */\n @computed('desiredState', 'hasDirtyAttributes')\n get targetState(): number {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Due to upstream bug with hasDirtyAttributes types\n if (this.hasDirtyAttributes || this.isInTransition()) {\n // Cache desired state as target state.\n return this.desiredState;\n }\n\n return 0;\n }\n\n /**\n * Executes state transition on the device\n *\n * @abstract\n */ // eslint-disable-next-line @typescript-eslint/no-unused-vars\n executeStateChange(\n desiredState: number,\n statePollOnly?: boolean,\n options?: Record\n ): Promise {\n logMissingAbstractMember(this, '\"executeStateChange\" method, params:' + desiredState + statePollOnly + options);\n\n return Promise.reject();\n }\n\n /**\n * @override\n */\n reload(): RSVP.Promise {\n // Defer to base.\n const base = super.reload();\n\n // Reload state information.\n this.reloadStateInfo();\n\n // Return the super's promise.\n return base;\n }\n\n /**\n * Reload the status information relationship.\n */\n reloadStateInfo(): void {\n // If stateInfo has been loaded, reload it.\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error childGroups is async, so this code should be: `(await this.stateInfo)?.reload();`.\n this.stateInfo?.reload();\n }\n\n /**\n * The computed device CSS class.\n */\n @computed('state', 'targetState', 'animationState')\n get css(): string {\n return this.cssHelper();\n }\n\n /**\n * Get the current css class based on state\n */\n cssHelper(): string {\n const { state } = this.getState();\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return 'loading';\n }\n\n return this.getStateCssFn()(state);\n }\n\n /**\n * Indicates this is a demo device model (not real).\n */\n @computed('id')\n get isDemoDevice(): boolean {\n return this.id.startsWith('demo-');\n }\n\n /**\n * The animation CSS class to show.\n */\n @computed('animationState')\n get animationCSS(): string {\n return getAnimationCSS(this.animationState);\n }\n\n /**\n * Can the state be changed for this device?\n */\n get canChangeState(): boolean {\n return this.remoteCommandsEnabled && this.hasPermissionToChangeState;\n }\n\n /**\n * Indicates this model can be interacted with, e.g., that it's state can currently be changed.\n */\n @computed('state', 'canChangeState')\n get isInteractive(): boolean {\n return this.canChangeState && this.getState().state !== LOADING_STATE;\n }\n\n /**\n * Resolves the state to use for CSS and text based on current state and target state.\n */\n getState(): { inTransition: boolean; state: number } {\n const { state, targetState } = this,\n // SENDING is mostly used for thermostat mode changes\n inTransition = this.isInTransition();\n\n return {\n inTransition,\n // Use target state that we are waiting for if we have one.\n state: inTransition && targetState && isPresent(targetState) ? targetState : state\n };\n }\n\n /**\n * Returns whether or not a device only has armOnly capabilities\n */\n isArmedOnly(): boolean {\n return false;\n }\n\n /**\n * The computed device state text.\n */\n @computed('animationState', 'intl.t', 'state', 'targetState')\n get stateText(): string | SafeString {\n const { state, inTransition } = this.getState();\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return this.intl.t('generic.loading');\n }\n\n if (this.isArmedOnly() && state == ArmedAway) {\n if (inTransition) {\n return this.intl.t.bind(this.intl)(`home.partitions.armingOnly`);\n }\n return this.intl.t.bind(this.intl)(`home.partitions.armedOnly`);\n }\n\n return this.getStateTextFn()(state, this.intl.t.bind(this.intl), inTransition);\n }\n\n /**\n * The computed device state text in a shorter and simpler form.\n */\n @computed('stateText')\n get simpleStateText(): SafeString | string {\n return this.stateText;\n }\n\n /**\n * The model state subtext for home cards.\n */\n stateSubtext = '';\n\n /**\n * Returns a static function used to generate state based CSS classes.\n * @abstract\n */\n getStateCssFn(): (arg0: number) => string {\n logMissingAbstractMember(this, '\"getStateCssFn\" method');\n return () => '';\n }\n\n /**\n * Returns a static function used to generate state based text descriptions.\n * @abstract\n */\n getStateTextFn(): (...args: unknown[]) => string | SafeString {\n logMissingAbstractMember(this, '\"getStateTextFn\" method');\n return () => '';\n }\n\n /**\n * Unknown (Malfunction) state value for this device\n * @abstract\n */\n getUnknownState(): number | undefined {\n logMissingAbstractMember(this, 'getUnknownState');\n return 0;\n }\n\n /**\n * Is the device currently in an Unknown (Malfunction) state?\n */\n isInUnknownState(): boolean {\n return this.state === this.getUnknownState();\n }\n\n /**\n * Returns a static function used to generate subtext for cards.\n */\n getSubtextFn(): (arg0: number, arg1: number) => string {\n return () => this.stateSubtext;\n }\n\n /**\n * Returns the display string for the current stateInfo value.\n */\n @alias('stateInfo.stateTransitionDate')\n declare displayDate: string;\n\n /**\n * Tooltip text for device.\n *\n * Default implementation describes the current state and when it last changed.\n */\n @computed('displayDate', 'stateText')\n get stateTooltip(): string | SafeString {\n const { displayDate, stateText } = this;\n return getStateDescription.call(this, stateText, this.isInTransition() ? '' : displayDate);\n }\n\n /**\n * Tooltip text for device.\n *\n * @note This is a newer version of stateTooltip, that correctly handles the async stateInfo (required in ember 3.15.1).\n */\n @computed('stateInfo.stateTransitionDate', 'stateText')\n get asyncStateTooltip(): Promise {\n return (async () => {\n const date = this.isInTransition()\n ? ''\n : ((await get(this, 'stateInfo.stateTransitionDate' as keyof BaseDevice)) as string);\n return getStateDescription.call(this, this.stateText, date);\n })();\n }\n\n /**\n * Creates (and returns) a function for determining the state based CSS/TEXT values.\n */\n getRefreshStateFn(fnState: (...args: unknown[]) => string, refreshValue: string): () => string {\n return (...args) => {\n // Is the refresh complete?\n if (!this.isRefreshingState) {\n // Return result of call to state function.\n return fnState(...args);\n }\n\n // Return the passed refresh value.\n return refreshValue;\n };\n }\n\n /**\n * Updates the device animation to waiting after a short delay.\n */\n initiateAnimationTask = task({ drop: true }, async () => {\n // Initiate model animation state as sending request.\n this.animationState = SENDING;\n\n // Wait 1/2 second and switch to waiting.\n await timeout(500);\n this.animationState = WAITING;\n });\n\n /**\n * Finalizes the device state animation.\n */\n completeAnimationTask = task({ restartable: true }, async () => {\n // Clear the waiting animation schedule if it's still active.\n this.initiateAnimationTask.cancelAll();\n\n // Clear animation.\n this.animationState = NONE;\n await timeout(0);\n\n // Action is complete.\n this.animationState = COMPLETE;\n await timeout(1000);\n\n // Clear animation.\n this.animationState = NONE;\n });\n\n /**\n * Animates a state change promise, and updates this model based on the result.\n */\n animateStateChangeTask = task(\n this,\n { restartable: true },\n async (\n asyncRequest: OptionalAsyncModelPayload,\n { modelChanges, failureMessage, options = {}, fnPostTask = () => {} }: StateChangeOptions\n ) => {\n // Clear out previous animations (if any).\n this.initiateAnimationTask.cancelAll();\n this.completeAnimationTask.cancelAll();\n\n // Are there model changes?\n if (modelChanges) {\n // Update model.\n setProperties(this, modelChanges);\n }\n\n // check if refreshingState passed as argument\n if (options['isRefreshingState']) {\n set(this, 'isRefreshingState', true);\n }\n\n // Initiate animation.\n this.initiateAnimationTask.perform();\n\n if (this.isDemoDevice) {\n // Spin for a 1½ seconds to simulate a request.\n await timeout(1500);\n\n if (!this.isDeleted) {\n set(this, 'state', modelChanges.desiredState);\n this.completeAnimationTask.perform();\n }\n\n return;\n }\n\n try {\n // Wait for result.\n const data = await asyncRequest,\n type = data?.data?.type;\n\n if (isPresent(type) && !this.isDeleted) {\n // Do a try-catch here, because if this fails (it should not), we do not want to tell the user\n // that the whole operation failed, because that is actually wrong.\n try {\n // Push data to the store that we got from the server, this will update state and everything else\n // So it turns out that if model attributes are dirty when fresh data is pushed, the model does not update the current state of the dirty attributes\n // Here we get all of the changed attributes and the ones that might have changed and set the attributes back to original values\n // Using rollBackAttribute would be better, but that is not available unless we are running canary build.\n const changedAttributes = this.changedAttributes();\n\n const attributesToRevert = Object.assign(\n {\n state: undefined\n },\n modelChanges,\n options\n );\n\n Object.keys(attributesToRevert).forEach(\n (key) =>\n changedAttributes[key] &&\n set(this, key as keyof BaseDevice, changedAttributes[key]?.[0])\n );\n\n this.storeService.pushPayload(type, data as ModelPayload); // WEB-16953 Fix this cast\n\n this.reloadStateInfo();\n } catch (error) {\n console.error(error);\n }\n }\n } catch (error) {\n // Reload model so we get its latest state\n this.reload();\n\n // If this is not an adapter error, then show the passed in error message.\n // Adapter error will be caught and shown deeper in.\n if (!isAdapterErrorProcessingError(error) && failureMessage) {\n this.notificationManager.addError(failureMessage);\n }\n } finally {\n // Finalize animation.\n this.completeAnimationTask.perform();\n\n fnPostTask();\n }\n }\n );\n\n /**\n * Cancels a device state change and clears all animation.\n */\n cancelDeviceStateChange(): void {\n // Clear out all animation tasks.\n this.animateStateChangeTask.cancelAll();\n this.initiateAnimationTask.cancelAll();\n this.completeAnimationTask.cancelAll();\n\n // Clear animation.\n this.animationState = NONE;\n }\n\n /**\n * Attempts to refresh the device state\n */\n refreshState(sendCommands = true): OptionalAsyncModelPayload {\n const result = this.submitCustomApiCall>('refreshState', 'GET', {\n sendCommands\n });\n\n this.animateStateChangeTask.perform(result, {\n failureMessage: this.intl.t('models.devices.base-device.refreshStateFailed', {\n deviceName: this.description\n }),\n options: {\n isRefreshingState: true\n },\n fnPostTask: () => set(this, 'isRefreshingState', false)\n });\n\n return result;\n }\n\n /**\n * Transition device into the desired state\n */\n changeState(\n methodName: string,\n desiredState: number | Record,\n statePollOnly: boolean,\n failureMessageKey: string,\n options: Record = {}\n ): OptionalAsyncModelPayload {\n // If logged in user cannot change the state of the device, reject this request.\n if (!this.canChangeState) {\n return Promise.reject();\n }\n\n // If desired state is not an object already, turn it into one.\n if (typeof desiredState !== 'object') {\n desiredState = { desiredState };\n }\n\n const result = this.isDemoDevice\n ? Promise.resolve()\n : this.submitCustomApiCall>(\n methodName,\n 'POST',\n Object.assign(options, {\n statePollOnly\n })\n );\n\n this.animateStateChangeTask.perform(result, {\n failureMessage:\n failureMessageKey &&\n this.intl.tc(this, failureMessageKey, {\n deviceName: this.description\n }),\n modelChanges: desiredState,\n options\n });\n\n return result;\n }\n\n /**\n * Returns a list of any items that are associated with or fall under this device.\n */\n getSubItems(): any {\n return [];\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/base-device': BaseDevice;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { or } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { percentWarmthToHexString } from '@adc/ui-components/utils/color-pickers/color';\nimport { WarmToCool } from '../../enums/LightColorFormat';\nimport { On, Off, Offline } from '../../enums/LightStatus';\nimport { getLightStateText, getLightStateCSS } from '../../utils/lights';\nimport { LOADING_STATE } from './base-device';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { Warmth } from '@adc/ui-components/utils/color-pickers/color';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type LightGroup from 'customer-site/models/devices/light-group';\n\n/**\n * Base Light device model.\n * @classdesc\n */\nexport default class BaseLight extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * Can the remote commands be enabled or disabled?\n */\n @attr('boolean', { defaultValue: false })\n declare canEnableRemoteCommands: boolean;\n\n /**\n * Can state tracking be enabled for this light?\n */\n @attr('boolean', { defaultValue: false })\n declare canEnableStateTracking: boolean;\n\n /**\n * Should the \"Favorites\" toggle be shown in the edit light modal?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldShowFavoritesToggle: boolean;\n\n /**\n * Can the customer view and assign custom switch icons?\n */\n @attr('boolean', { defaultValue: false })\n declare useCustomSwitchIcons: boolean;\n\n /**\n * @override\n */\n executeStateChange(\n desiredState: number,\n statePollOnly: boolean,\n options = {}\n ): OptionalAsyncModelPayload {\n switch (desiredState) {\n case On:\n return this.turnOn(options, statePollOnly);\n case Off:\n return this.turnOff(options, statePollOnly);\n default:\n console.error('Light model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n }\n\n /**\n * Is the light a dimmer?\n */\n @attr('boolean', { defaultValue: false })\n declare isDimmer: boolean;\n\n /**\n * Is the light in the Favorites Group?\n */\n @attr('boolean', { defaultValue: false })\n declare isFavorite: boolean;\n\n /**\n * Light groups that this light belongs to.\n */\n @hasMany('devices/light-group', { async: true, inverse: null })\n declare lightGroups: AsyncHasMany;\n\n /**\n * Is the light a ZWave device.\n */\n @attr('boolean', { defaultValue: false })\n declare isZWave: boolean;\n\n /**\n * Dimmer value for a dimmer light\n */\n @attr('number')\n declare lightLevel: number;\n\n /** @override */\n @attr('boolean', { defaultValue: false })\n declare remoteCommandsEnabled: boolean;\n\n /** @override */\n @computed('animationState', 'intl.t', 'isDimmer', 'lightLevel', 'state', 'targetState')\n get stateText(): string {\n const { state, inTransition } = this.getState(),\n { isDimmer, lightLevel } = this;\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return this.intl.t('generic.loading');\n }\n\n return this.getStateTextFn()(state, isDimmer, lightLevel, this.intl.t.bind(this.intl), inTransition);\n }\n\n /**\n * Is state tracking enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare stateTrackingEnabled: boolean;\n\n /**\n * Does it support RGB color changing?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsRGBColorControl: boolean;\n\n /**\n * Does it support color temperature changing? (Selecting between variations of white light).\n */\n @attr('boolean', { defaultValue: false })\n declare supportsWhiteLightColorControl: boolean;\n\n /**\n * Represents a percentage from 0-100, the color temperature is between the minimum (cool) and maximum (100% warm) temperatures we support.\n */\n @attr('number', { defaultValue: 50 })\n declare percentWarmth: Warmth;\n\n /**\n * The format of the color hex string. This values maps in the LightColorFormat enum. Defaults to \"Not Set\".\n */\n @attr('number', { defaultValue: 0 })\n declare lightColorFormat: number;\n\n /**\n * A hex string representing the currently active color. For decoding this should be used in conjunction with 'lightColorFormat'.\n */\n @attr('string', { defaultValue: '#fff1e0' })\n declare hexColor: string;\n\n /**\n * Whether or not we should update multilevel state as part of saving this model\n * Used to avoid turning on a multilevel light when updating non-lighting properties such as device name\n */\n @attr('boolean', { defaultValue: false })\n declare shouldUpdateMultiLevelState: boolean;\n\n /**\n * Does it support any color changes?\n */\n @or('supportsRGBColorControl', 'supportsWhiteLightColorControl')\n declare supportsColorControl: boolean;\n\n /**\n * The color of this bulb in hex string form.\n */\n @computed('hexColor', 'percentWarmth', 'lightColorFormat')\n get computedColor(): string | undefined {\n if (this.lightColorFormat !== WarmToCool) {\n return this.hexColor;\n }\n\n return percentWarmthToHexString(this.percentWarmth);\n }\n\n // region overrides\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getLightStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): (...args: unknown[]) => string {\n return this.getRefreshStateFn(getLightStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Offline;\n }\n\n // endregion\n\n // region api calls\n\n /**\n * Turns on the light\n */\n turnOn(lightOptions?: Record, statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('turnOn', On, statePollOnly, 'turningOnLightFailed', lightOptions);\n }\n\n /**\n * Turns off the light\n */\n turnOff(lightOptions?: Record, statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('turnOff', Off, statePollOnly, 'turningOffLightFailed', lightOptions);\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/base-light': BaseLight;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { On } from 'customer-site/enums/LightStatus';\nimport BaseDevice from './base-device';\n\n/**\n * Base Managed device model.\n * @classdesc\n */\nexport default class BaseManagedDevice extends BaseDevice {\n // region Basic Manage Device properties\n\n /**\n * The type of device.\n * Corresponds to ManagedDeviceTypeEnum.\n */\n @attr('number', { defaultValue: 0 })\n declare managedDeviceType: number;\n\n /**\n * Does this device have a state?\n */\n @attr('boolean', { defaultValue: false })\n declare hasState: boolean;\n\n // endregion\n\n // Behavior and Permissions properties\n\n /**\n * Can the app settings be accessed?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessAppSettings: boolean;\n\n /**\n * Can the web settings be accessed?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessWebSettings: boolean;\n\n /**\n * Can the troubleshooting wizard be accessed?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessTroubleshootingWizard: boolean;\n\n /**\n * Can the device be deleted?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDeleted: boolean;\n\n /**\n * Can the device be renamed?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeRenamed: boolean;\n\n /**\n * The route where the user can edit the device settings on the web.\n */\n @attr('string')\n declare webSettings: string;\n\n /**\n * The route where the user can edit the troubleshooting wizard.\n */\n @attr('number')\n declare troubleshootingWizard: number;\n\n /**\n * The add device resource of the device.\n */\n @attr('number', { defaultValue: 0 })\n declare addDeviceResource: number;\n\n // endregion\n\n // Misc. properties\n /**\n * The mac address for the device, if available.\n */\n @attr('string', { defaultValue: '' })\n declare macAddress: string;\n\n /**\n * The manufacturer of the device.\n */\n @attr('string', { defaultValue: '' })\n declare manufacturer: string;\n\n /**\n * Is the device an OAuth device?\n */\n @attr('boolean', { defaultValue: false })\n declare isOAuth: boolean;\n\n /**\n * Is this mobile device assigned to a care receiver?\n */\n @attr('boolean', { defaultValue: true })\n declare isAssignedToCareReceiver: boolean;\n\n /**\n * Is the device a ZWave device.\n */\n @attr('boolean', { defaultValue: false })\n declare isZWave: boolean;\n\n /**\n * Does the Z-Wave device support CC Basic.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsCommandClassBasic: boolean;\n\n /**\n * Is the device currently set to a malfunction state\n */\n @attr('boolean', { defaultValue: false })\n declare isMalfunctioning: boolean;\n\n /**\n * Is the device a Z-Wave wakeup node?\n */\n @attr('boolean', { defaultValue: false })\n declare isZWaveWakeupNode: boolean;\n\n /**\n * Does the unit the device belong to supports removing wakeup nodes??\n */\n @attr('boolean', { defaultValue: false })\n declare unitSupportsRemovingWakeupNode: boolean;\n\n /**\n * Whether the device type can be associated to video devices.\n */\n @attr('boolean', { defaultValue: false })\n declare canBeAssociatedToVideoDevice: boolean;\n\n /**\n * Keys: The GlobalDeviceIds of the devices to which this device has GenericDevicePairing video associated.\n * Values: The names of the associated devices.\n * For a parent device, this corresponds to all associated video device Ids.\n * For a video device, this corresponds to all associated parent device Ids.\n */\n @attr()\n declare associatedCameraDeviceIds: Record;\n\n /**\n * Whether the device has associated devices.\n */\n @computed('associatedCameraDeviceIds')\n get hasAssociatedDevices(): boolean {\n return Object.keys(this.associatedCameraDeviceIds ?? {}).length > 0;\n }\n\n // When adding new computed properties that need to be accessed in device-category\\template.hbs,\n // the property will need to be destructured in managed-devices\\index\\controller.js\\filteredManagedDeviceCategories\n\n /**\n * The list of associated devices names.\n * */\n @computed('associatedCameraDeviceIds.[]')\n get associatedDevicesNames(): string {\n return this.associatedCameraDeviceIds ? Object.values(this.associatedCameraDeviceIds).join(', ') : '';\n }\n\n commandClassBasicGet(): OptionalAsyncModelPayload {\n const result = this.submitCustomApiCall>('commandClassBasicGet', 'GET');\n\n this.animateStateChangeTask.perform(result, {\n failureMessage: this.intl.t('models.devices.base-managed-device.commandClassBasicGetFailed', {\n deviceName: this.description\n })\n });\n\n return result;\n }\n\n /**\n * Should we disable the actions ellipses menu on the Manage Devices page?\n */\n @computed(\n 'canBeRenamed',\n 'canBeAssociatedToVideoDevice',\n 'canAccessWebSettings',\n 'canBeDeleted',\n 'canAccessTroubleshootingWizard'\n )\n get areActionsDisabled(): boolean {\n return (\n !this.canBeRenamed &&\n !this.canBeAssociatedToVideoDevice &&\n !this.canAccessWebSettings &&\n !this.canBeDeleted &&\n !this.canAccessTroubleshootingWizard\n );\n }\n\n /**\n * @override\n */\n commandClassBasicSet(desiredState: number): OptionalAsyncModelPayload {\n const methodNAme = `commandClassBasicSet${desiredState === On ? 'On' : 'Off'}`,\n // If desired state is not an object already, turn it into one.\n desiredStateObject = typeof desiredState !== 'object' ? desiredState : { desiredState },\n result = this.isDemoDevice\n ? Promise.resolve()\n : this.submitCustomApiCall>(methodNAme, 'POST');\n\n this.animateStateChangeTask.perform(result, {\n failureMessage: this.intl.t('models.devices.base-managed-device.commandClassBasicSetFailed', {\n deviceName: this.description\n }),\n modelChanges: desiredStateObject\n });\n\n return result;\n }\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/base-managed-device': BaseManagedDevice;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n * Bluetooth Arming Device model.\n */\nexport default class BluetoothArmingDevice extends BaseManagedDevice {\n /**\n * The type of device.\n * Corresponds to ManagedDeviceTypeEnum.\n */\n @attr('number')\n declare managedDeviceType: number;\n\n /**\n * Is this bluetooth arming device enabled for disarming a panel?\n */\n @attr('boolean', { defaultValue: false })\n declare isDisarmingEnabledForDevice: boolean;\n\n /**\n * Which panel is this device enrolled in?\n */\n @attr('string')\n declare enrolledPartitionId: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/bluetooth-arming-device': BluetoothArmingDevice;\n }\n}\n","import { getCameraLightStateText, getCameraLightStateCSS } from 'customer-site/utils/camera-lights';\nimport { Offline } from '../../enums/LightStatus';\nimport BaseDevice from './base-device';\n\n/**\n * Camera Light device model.\n * A Camera Light refers to the light attached to a video device,\n * and is used on video specific customer site pages, such as the live view page.\n * @classdesc\n */\nexport default class CameraLight extends BaseDevice {\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getCameraLightStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getCameraLightStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Offline;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/camera-light': CameraLight;\n }\n}\n","import { belongsTo, attr, hasMany } from '@ember-data/model';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type Threshold from 'customer-site/models/settings/threshold';\nimport type CarIssueItem from '../fleet/car-issue-item';\nimport type TripAlertItem from '../fleet/trip-alert-item';\n\n/**\n * @classdesc\n * Car monitor device model\n */\nexport default class CarMonitor extends BaseManagedDevice {\n /**\n * The VIN of the vehicle\n */\n @attr('string', { defaultValue: '' })\n declare vin: string;\n\n /**\n * The model year of the vehicle\n */\n @attr('number', { defaultValue: 0 })\n declare year: number;\n\n /**\n * The make of the vehicle\n */\n @attr('string', { defaultValue: '' })\n declare make: string;\n\n /**\n * The model of the vehicle\n */\n @attr('string', { defaultValue: '' })\n declare model: string;\n\n /**\n * Whether or not engine start/stop technology settings should be visible\n */\n @attr('boolean', { defaultValue: false })\n declare canViewStartStopSettings: boolean;\n\n /**\n * Whether or not the vehicle supports engine start/stop. In order for the user to set this value,\n * canViewStartStopSettings has to be true\n */\n @attr('boolean', { defaultValue: false })\n declare startStop: boolean;\n\n /**\n * Whether or not the vehicle supports odometer readings\n */\n @attr('boolean', { defaultValue: false })\n declare supportsOdometer: boolean;\n\n /**\n * Odometer (in meters)\n */\n @attr('number')\n declare odometerMeters: number;\n\n /**\n * Is the engine turned on?\n */\n @attr('boolean', { defaultValue: false })\n declare engineOn: boolean;\n\n /**\n * Is the engine turned off?\n */\n @attr('boolean', { defaultValue: false })\n declare engineOff: boolean;\n\n /**\n * Is the device a commercial fleet device?\n * Note: We use this field to check if a customer is on a commercial fleet account by checking if at least one of their devices has isCommercial = true\n */\n @attr('boolean', { defaultValue: false })\n declare isCommercial: boolean;\n\n /**\n * The high speed threshold for the vehicle in mph\n */\n @belongsTo('settings/threshold', { async: true, inverse: null })\n declare highSpeedThreshold: AsyncBelongsTo;\n\n /**\n * The hard acceleration threshold for the vehicle in G * 100\n */\n @belongsTo('settings/threshold', { async: true, inverse: null })\n declare accelerationThreshold: AsyncBelongsTo;\n\n /**\n * The hard braking threshold for the vehicle in G * 100\n */\n @belongsTo('settings/threshold', { async: true, inverse: null })\n declare brakingThreshold: AsyncBelongsTo;\n\n /**\n * The low fuel threshold for the vehicle in %\n */\n @belongsTo('settings/threshold', { async: true, inverse: null })\n declare lowFuelThreshold: AsyncBelongsTo;\n\n /**\n * List of car issue items that belong to this car monitor.\n */\n @hasMany('fleet/car-issue-item', { async: true, inverse: null })\n declare carIssueItems: AsyncHasMany;\n\n /**\n * List of trip alert items that belong to this car monitor.\n */\n @hasMany('fleet/trip-alert-item', { async: true, inverse: null })\n declare tripAlertItems: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/car-monitor': CarMonitor;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseDevice from './base-device';\n\n/**\n * @classdesc\n *\n * Chime device model.\n */\nexport default class Chime extends BaseDevice {\n /**\n * Is this a V2 chime\n */\n @attr('boolean', { defaultValue: false })\n declare supportsLowLatencyVolume: boolean;\n\n /** @override */\n executeStateChange(): Promise {\n // Do nothing.\n return Promise.resolve();\n }\n\n /** @override */\n getStateCssFn(): () => string {\n // Chimes do not have a state.\n return () => '';\n }\n\n /** @override */\n getStateTextFn(): () => string {\n // Chimes do not have a state.\n return () => '';\n }\n\n /** @override */\n getUnknownState(): undefined {\n // Chimes do not have a state.\n return undefined;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/chime': Chime;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport TemperatureDevice from './temperature-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type { SafeString } from 'handlebars';\n\n/**\n * @classdesc\n *\n * Temperature sensors supported by the Smarter Business Temperature Monitoring suite of features.\n */\nexport default class CommercialTemperatureSensor extends TemperatureDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'commercialTemperatureSensors' })\n declare system: AsyncBelongsTo;\n\n /**\n * The high threshold currently set for this sensor\n */\n @attr('number')\n declare highThreshold: number;\n\n /**\n * The low threshold currently set for this sensor\n */\n @attr('number')\n declare lowThreshold: number;\n\n /** @override */\n get stateText(): string | SafeString {\n return this.hasMalfunction ? this.intl.t('generic.na') : this.temperatureText;\n }\n\n /**\n * If this sensor is currently experiencing a malfunction\n */\n @attr('boolean')\n declare hasMalfunction: boolean;\n\n /**\n * Does this sensor have any issues (low battery, tamper, etc)\n */\n @attr('boolean')\n declare hasIssues: boolean;\n\n @attr('boolean', { defaultValue: false })\n declare shouldPollRefreshState: boolean;\n\n /** @override\n * @note we don't actually have a state but the super class REALLY wants one and as far as the super class cares, as long as it isn't -1 we're good\n */\n state = 0;\n\n override get canChangeState(): boolean {\n return false;\n }\n\n /**\n * Is this sensor within its thresholds?\n */\n @computed('ambientTemp', 'lowThreshold', 'highThreshold', 'hasMalfunction')\n get isInRange(): boolean {\n const { ambientTemp, lowThreshold, highThreshold, hasMalfunction } = this;\n return (\n hasMalfunction ||\n ((isEmpty(lowThreshold) || ambientTemp > lowThreshold) &&\n (isEmpty(highThreshold) || ambientTemp < highThreshold))\n );\n }\n\n /** @override */\n isInUnknownState(): boolean {\n return this.ambientTemp === null;\n }\n\n /** @override */\n get isThermostat(): boolean {\n return false;\n }\n\n /** @override */\n get sortId(): Promise {\n return Promise.resolve(undefined);\n }\n\n /** @override */\n getStateCssFn(): () => string {\n return () => (this.isInRange ? '' : 'device-out-of-range');\n }\n\n /** @override */\n @computed('state', 'targetState', 'animationState', 'isInRange')\n get css(): string {\n return this.cssHelper();\n }\n\n /** @override */\n getStateTextFn(): () => string | SafeString {\n return () => this.stateText;\n }\n\n /** @override */\n get simpleStateText(): string {\n return this.intl.t('generic.na');\n }\n\n /** @override */\n @computed('hasIssues', 'isInRange', 'isInUnknownState')\n get temperatureStateIcon(): string {\n if (!this.isInRange) {\n return 'issue';\n }\n\n return this.hasIssues || this.isInUnknownState() ? 'warning' : 'circle-check';\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/commercial-temperature-sensor': CommercialTemperatureSensor;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * A class holding additional information about the device resource\n * to help the user get a better understanding of their device.\n * i.e. the data necessary for populating a component with a device diagram, description, and KB link.\n * @classdesc\n */\nexport default class DeviceResourceInfo extends BaseModel {\n /**\n * The resource type, i.e. remote button diagram\n */\n @attr('number')\n declare resourceType: number;\n\n /**\n * The URL for the corresponding device diagram/image.\n */\n @attr('string')\n declare deviceDiagramUrl: string;\n\n /**\n * A description of the device diagram.\n */\n @attr('string')\n declare diagramDescription: string;\n\n /**\n * The URL to the knowledge base link.\n */\n @attr('string')\n declare knowledgeBaseLinkUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/device-resource-info': DeviceResourceInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Promise as EmberPromise } from 'rsvp';\nimport { Open, Closed, SyncUnlocked, SyncLocked, Unknown, Hidden } from '../../enums/ElevatorFloorState';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\n\n/**\n * Returns the i18n key for the current device state.\n *\n * @returns {String}\n */\nfunction getDeviceStateKey(key: string, inTransition = false): string {\n // Is the device in transition to this state?\n if (inTransition) {\n // Change key to verb form.\n key = key.replace('ed', 'ing');\n // for elevator floors, if we do sync unlock, we want it to say Syncing, but we want Sync Unlocked to just say Unlocked\n key =\n key === 'generic.unlocking'\n ? 'components.dashboard-cards.devices.access-control-elevator-devices-card.syncing'\n : key;\n }\n\n return key;\n}\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param {number} state The state to show.\n *\n * @returns {String}\n */\nfunction getElevatorFloorStateCSS(state: number): string {\n return (\n {\n [Unknown]: 'unknown',\n [Open]: 'open',\n [Closed]: 'closed',\n [SyncUnlocked]: 'open',\n [SyncLocked]: 'closed',\n [Hidden]: 'hidden-status'\n }[state]?.toString() ?? ''\n );\n}\n\nfunction getElevatorFloorStateText(\n state: number,\n getTranslation: (args: string) => string,\n inTransition = false,\n hasScheduledAccess: boolean\n) {\n const translationKey =\n {\n [Unknown]: 'generic.unknown',\n [Open]: hasScheduledAccess\n ? 'components.dashboard-cards.devices.access-control-elevator-devices-card.manually-unlocked'\n : 'generic.unlocked',\n [Closed]: hasScheduledAccess\n ? 'components.dashboard-cards.devices.access-control-elevator-devices-card.manually-locked'\n : 'generic.locked',\n [SyncUnlocked]: 'generic.unlocked',\n [SyncLocked]: 'generic.locked',\n [Hidden]: 'hidden-status'\n }[state]?.toString() ?? '';\n\n return getTranslation(getDeviceStateKey(translationKey, inTransition));\n}\n\n/**\n * @classdesc\n *\n * Access Control elevator floor device model.\n */\nexport default class ElevatorFloorDevice extends BaseManagedDevice {\n @service declare modals: ModalService;\n @service declare intl: ADCIntlService;\n\n /**\n * Does the logged in context have permission to lock and unlock this elevator?\n */\n @attr('boolean', { defaultValue: false })\n declare canLockUnlock: boolean;\n\n /**\n * Does the floor have any scheduled access\n */\n @attr('boolean', { defaultValue: false })\n declare hasScheduledAccess: boolean;\n\n /**\n * Is the elevator bay containing the floor unlocked\n */\n @attr('boolean', { defaultValue: false })\n declare isElevatorBayUnlocked: boolean;\n\n /** @override */\n get canChangeState(): boolean {\n return super.canChangeState && !this.isElevatorBayUnlocked;\n }\n\n /** @override **/\n get hiddenState() {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getElevatorFloorStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(\n (state: number, getTranslation: (args: string) => string, inTransition: boolean | undefined) =>\n getElevatorFloorStateText(state, getTranslation, inTransition, this.hasScheduledAccess),\n this.intl.t('generic.updating')\n );\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /** @override **/\n executeStateChange(desiredState: number, statePollOnly: boolean): OptionalAsyncModelPayload {\n const type = (\n {\n [Closed]: 'lock',\n [Open]: 'unlock',\n [SyncUnlocked]: 'sync',\n [SyncLocked]: 'sync'\n } as Record\n )[desiredState];\n\n // Is this state not handled yet?\n if (!type) {\n console.error('Elevator Floor Device model method not implemented for desired state', desiredState);\n return EmberPromise.reject();\n }\n\n if (desiredState === Closed || desiredState === Open) {\n // Use confirmation dialog and if user confirms then execute the action.\n return this.modals.showConfirmationDialog(\n this.intl.t(\n `components.dashboard-cards.devices.access-control-elevator-devices-card.confirmFloor${type}Title`\n ),\n this.intl.t(\n `components.dashboard-cards.devices.access-control-elevator-devices-card.confirmFloor${type}Text`\n ),\n {\n text: this.intl.t('generic.continue'),\n css: 'btn-color-danger',\n action: async () => {\n return this.changeState(\n type,\n desiredState,\n statePollOnly,\n `${type}ingFloorFailed`\n );\n }\n }\n );\n }\n return this.changeState(type, desiredState, statePollOnly, `${type}ingFloorFailed`);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/elevator-floor-device': ElevatorFloorDevice;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseDevice from './base-device';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type EnergyGoal from '../activity/energy-goal';\nimport type MeterUsageGeneration from '../activity/meter-usage-generation';\n\n/**\n * Energy meter device model.\n * @classdesc\n */\nexport default class EnergyMeter extends BaseDevice {\n /**\n * Meter model that represents energy usage and generation for all recorded times.\n */\n @hasMany('activity/meter-usage-generation', { async: true, inverse: 'energyMeter' })\n declare meterUsageGenerations: AsyncHasMany;\n\n /**\n * Energy goal model that represents projected energy vs goal energy data.\n */\n @hasMany('activity/energy-goal', { async: true, inverse: 'energyMeter' })\n declare energyGoals: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/energy-meter': EnergyMeter;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Open, Closed, Unknown, Hidden } from '../../enums/GarageDoorStatus';\nimport { getGarageStateText, getGarageStateCSS } from '../../utils/garages';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * Garage door device model.\n */\nexport default class GarageModel extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'garageDoors' })\n declare system: AsyncBelongsTo;\n\n /** @override **/\n get hiddenState() {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getGarageStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getGarageStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /**\n * @override\n */\n executeStateChange(desiredState: number, statePollOnly: boolean): OptionalAsyncModelPayload {\n if (desiredState === Open) {\n return this.open(statePollOnly);\n }\n\n if (desiredState === Closed) {\n return this.close(statePollOnly);\n }\n\n console.error('Garage door model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n\n // region api calls\n\n /**\n * Opens the water valve\n */\n open(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('open', Open, statePollOnly, 'openingGarageDoorFailed');\n }\n\n /**\n * Closes the water valve\n */\n close(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('close', Closed, statePollOnly, 'closingGarageDoorFailed');\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/garage-door': GarageModel;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Open, Closed, Unknown, Hidden } from '../../enums/GateStatus';\nimport { getGateStateText, getGateStateCSS } from '../../utils/gates';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * Base Gate device model.\n * @classdesc\n */\nexport default class GateModel extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'gates' })\n declare system: AsyncBelongsTo;\n\n /**\n * Does the device support remote closing?\n */\n @attr('boolean', { defaultValue: true })\n declare supportsRemoteClose: boolean;\n\n /** @override **/\n get hiddenState() {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getGateStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getGateStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /**\n * @override\n */\n executeStateChange(desiredState: number, statePollOnly: boolean): OptionalAsyncModelPayload {\n if (desiredState === Open) {\n return this.open(statePollOnly);\n }\n\n if (desiredState === Closed) {\n return this.close(statePollOnly);\n }\n\n console.error('Gate model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n\n // region api calls\n\n /**\n * Opens the gate\n */\n open(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('open', Open, statePollOnly, 'openingGateFailed');\n }\n\n /**\n * Closes the gate\n */\n close(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('close', Closed, statePollOnly, 'closingGateFailed');\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/gate': GateModel;\n }\n}\n","import { Offline } from '../../enums/LightStatus';\nimport { getZWaveGenericCSS, getZWaveGenericText } from '../../utils/zwave-generic';\nimport BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n *\n * Generice Zwave device model.\n */\nexport default class GenericZwaveDevice extends BaseManagedDevice {\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getZWaveGenericCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): (...args: unknown[]) => string {\n return this.getRefreshStateFn(getZWaveGenericText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Offline;\n }\n\n /**\n * @override\n */\n executeStateChange(): Promise {\n return Promise.resolve();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/generic-zwave-device': GenericZwaveDevice;\n }\n}\n","import BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n * Gun Shot Sensor device model.\n */\nexport default class GunShotSensor extends BaseManagedDevice {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/gun-shot-sensor': GunShotSensor;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { SyncHasMany } from '@ember-data/model';\nimport type PortForwardingRule from '../wifi/port-forwarding-rule';\nimport type StaticLease from '../wifi/static-lease';\n\n/**\n * @classdesc\n *\n * IQ Router device model.\n */\nexport default class IqRouter extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * Is this the primary controller?\n */\n @attr('boolean', { defaultValue: false })\n declare isController: boolean;\n\n /**\n * What is the local ip address of this router?\n */\n @attr('string', { defaultValue: '' })\n declare ipAddress: string;\n\n /**\n * The name of the device depending on IQR or IQR6\n */\n @attr('string')\n declare deviceName: string;\n\n /**\n * The type of IQ Router (PanelTypeEnum)\n */\n @attr('number')\n declare panelType: number;\n\n /**\n * DHCP - What is the starting IP address for DHCP clients?\n */\n @attr('string')\n declare startingIp: string;\n\n /**\n * DHCP - What is the netmask?\n */\n @attr('string')\n declare netmask: string;\n\n /**\n * DHCP - What max amount of leases?\n */\n @attr('number')\n declare leaseLimit: number;\n\n /**\n * Is sensitive data like wifi passwords visible?\n */\n @attr('boolean')\n declare canViewSensitiveData: boolean;\n\n /**\n * Custom message for renaming the device\n */\n @computed('macAddress')\n get renameDeviceMessage(): string {\n return this.intl.tc(this, 'macAddressMessage', { macAddress: this.macAddress });\n }\n\n /**\n * Port forwarding rules on this device\n */\n @hasMany('wifi/port-forwarding-rule', { async: false, inverse: null })\n declare portForwardingRules: SyncHasMany;\n\n /**\n * Static leases on this device\n */\n @hasMany('wifi/static-lease', { async: false, inverse: null })\n declare staticLeases: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/iq-router': IqRouter;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { mapBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { On, Off } from '../../enums/LightStatus';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type Light from 'customer-site/models/devices/light';\n\n/**\n * Delegates to each light to change its status display without sending the actual command\n *\n * @private\n */\nfunction giveAllLightsStatus(this: LightGroup, status: number): void {\n this.lights.then((lights) => {\n lights.forEach((light: Light) => light[status === Off ? 'turnOff' : 'turnOn'](undefined, true));\n });\n}\n\n/**\n * Shows error message in the notification manager.\n *\n * @private\n */\nfunction showErrorMessage(this: LightGroup, translationKey: string): void {\n this.notificationManager.addError(this.intl.tc(this, translationKey, { groupName: this.name }));\n}\n\n/**\n * Light group model.\n * @classdesc\n */\nexport default class LightGroup extends BaseModel {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * The type of light group.\n */\n @attr('number')\n declare type: number;\n\n /**\n * Light ids that can be assigned to this group\n */\n @attr('array')\n declare allowedLightIds: number[];\n\n /**\n * Can the light group be deleted by the currently logged in context?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDeleted: boolean;\n\n /**\n * Can the light list be edited by the currently logged in context?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditLightList: boolean;\n\n /**\n * Can the name be edited by the currently logged in context?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditName: boolean;\n\n /**\n * List of lights that belong to this group\n */\n @hasMany('devices/light', { async: true, inverse: 'lightGroups' })\n declare lights: AsyncHasMany;\n\n /**\n * Name of the light group\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /** @override */\n get shouldRollbackRelationships(): boolean {\n return true;\n }\n\n /**\n * The concatenated string of contained light IDs.\n *\n * @note This is a unique way to identify the collection of lights, used to determine when the lights change within a collection of light-groups.\n */\n @mapBy('lights', 'id')\n declare lightIds: string[];\n\n // region api calls\n\n /**\n * Turns on all lights in the group\n */\n async turnOnLights(): Promise {\n return this.submitCustomApiCall('turnOnLights')\n .then(() => giveAllLightsStatus.call(this, On))\n .catch(() => showErrorMessage.call(this, 'turningOnLightsInGroupFailed'));\n }\n\n /**\n * Turns on all lights in the group\n */\n async turnOffLights(): Promise {\n return this.submitCustomApiCall('turnOffLights')\n .then(() => giveAllLightsStatus.call(this, Off))\n .catch(() => showErrorMessage.call(this, 'turningOffLightsInGroupFailed'));\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/light-group': LightGroup;\n }\n}\n","import { belongsTo, hasMany } from '@ember-data/model';\nimport BaseLight from './base-light';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type LightGroup from './light-group';\n\n/**\n * @classdesc\n * Light device model.\n */\nexport default class Light extends BaseLight {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'lights' })\n declare system: AsyncBelongsTo;\n\n /**\n * Light groups that this light belongs to.\n */\n @hasMany('devices/light-group', { async: true, inverse: 'lights' })\n declare lightGroups: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/light': Light;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{#if @description}}\\n

    \\n {{@description}}\\n

    \\n {{else}}\\n {{yield}}\\n {{/if}}\\n
    \\n\",{ moduleName: \"customer-site/components/modals/devices/temporary-access-code.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './temporary-access-code.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { SimpleDialogSignature } from '@adc/ui-components/components/modals/dialog-modals/simple/simple-dialog';\n\nexport interface DevicesTemporaryAccessCodeModalSignature {\n Element: SimpleDialogSignature['Element'];\n Args: Pick & {\n description?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DevicesTemporaryAccessCodeModal = templateOnlyComponent();\nexport default DevicesTemporaryAccessCodeModal;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Devices::TemporaryAccessCode': typeof DevicesTemporaryAccessCodeModal;\n 'modals/devices/temporary-access-code': typeof DevicesTemporaryAccessCodeModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n
    \\n

    {{this.textExpirationTime}}

    \\n
    \\n \\n
    \\n\\n\",{ moduleName: \"customer-site/components/modals/locks/request-a-code/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Lock from 'customer-site/models/devices/lock';\nimport type AjaxService from 'customer-site/services/ajax';\n\ninterface RequestACodeSignature {\n Args: {\n model: {\n device: Lock;\n isFailedCommandState: boolean;\n };\n };\n}\n\ninterface TemporaryAccessCodeAjaxRequestResponse {\n temporaryAccessCode: string;\n hoursUntilExpiration: number;\n minutesUntilExpiration: number;\n}\n\n/**\n * Modal for handling Temporary Access Code Requests.\n */\n@intlPath({ path: 'modals/locks/request-a-code' })\nexport default class RequestACode extends Component {\n @service declare intl: ADCIntlService;\n @service declare modals: ModalsService;\n @service declare ajax: AjaxService;\n @service declare notificationManager: NotificationManager;\n\n /**\n * The text to display the remaining time until the code expires.\n */\n textExpirationTime?: string;\n\n /**\n * Getter for the Temporary Access Code Promise.\n */\n get temporaryAccessCodePromise(): Promise {\n return (async () => {\n const { device, isFailedCommandState } = this.args.model;\n\n // If we are not in the Failed Command state, then we are requesting the Temporary Access Code.\n if (!isFailedCommandState) {\n try {\n const result = await this.ajax.apiRequestForValue(\n `devices/locks/${device.id.split('-')[0]}/getTemporaryAccessCode`\n );\n this.setTimeUntilExpiration(result.hoursUntilExpiration, result.minutesUntilExpiration);\n return result;\n } catch (result) {\n this.handleFailedResolvedTemporaryAccessCodePromise(result as { errors: { detail: string }[] });\n }\n }\n\n return;\n })();\n }\n\n /**\n * Formats the remaining time to be displayed.\n */\n setTimeUntilExpiration(hours: number, minutes: number): void {\n const { intl } = this;\n\n this.textExpirationTime =\n hours === 0\n ? intl.tc(this, 'expirationMinutesOnly', { minutes })\n : intl.tc(this, 'expirationHoursAndMinutes', { hours, minutes });\n }\n\n /**\n * Handles the case where the Temporary Access Code request fails.\n */\n handleFailedResolvedTemporaryAccessCodePromise(resolvedTemporaryAccessCodePromise: {\n errors: { detail: string }[];\n }): void {\n // If it failed, close the modal.\n this.modals.closeModal(false);\n\n // Then display the error messages.\n this.notificationManager.addError(\n resolvedTemporaryAccessCodePromise.errors?.[0]?.detail ?? this.intl.tc(this, 'requestACodeError')\n );\n }\n\n @action closeModal(): void {\n const { model } = this.args;\n\n if (model.isFailedCommandState) {\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n later(() => model.device.openRequestCodeModal(false), 10);\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Locks::RequestACode': typeof RequestACode;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport RequestACode from 'customer-site/components/modals/locks/request-a-code/index';\nimport { Locked, Unlocked, Unknown, Hidden } from '../../enums/LockStatus';\nimport { getLockStateText, getLockStateCSS } from '../../utils/locks';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * Lock device model.\n * @classdesc\n */\nexport default class LockModel extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n @service declare modals: ModalsService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'locks' })\n declare system: AsyncBelongsTo;\n\n /**\n * The maximum user code length this lock supports.\n */\n @attr('number', { defaultValue: 4 })\n declare maxUserCodeLength: number;\n\n /**\n * Whether the lock supports scheduled user code programming.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsScheduledUserCodes: boolean;\n\n /**\n * Whether the lock supports temporary user code programming.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsTemporaryUserCodes: boolean;\n\n /**\n * Whether the lock supports remotely controlling the latch.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsLatchControl: boolean;\n\n /**\n * Can the remote commands be enabled or disabled?\n * (Only for control point locks)\n */\n @attr('boolean', { defaultValue: false })\n declare canEnableRemoteCommands: boolean;\n\n /**\n * The number of available Temporary Access Codes that were pushed to the locks on the unit.\n */\n @attr('number', { defaultValue: 0 })\n declare availableTemporaryAccessCodes: number;\n\n /**\n * The total number of Temporary Access Codes that were pushed to the locks.\n */\n @attr('number', { defaultValue: 0 })\n declare totalTemporaryAccessCodes: number;\n\n @attr('boolean', { defaultValue: true })\n declare canRefreshState: boolean;\n\n /** @override **/\n get hiddenState(): number {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getLockStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getLockStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /**\n * @override\n */\n executeStateChange(desiredState: number, statePollOnly: boolean): OptionalAsyncModelPayload {\n let result;\n if (desiredState === Locked) {\n return this.lock(statePollOnly);\n }\n\n if (desiredState === Unlocked) {\n result = this.unlock(statePollOnly);\n\n if (this.totalTemporaryAccessCodes > 0) {\n // If we have Temporary Access Codes enabled, in the case that the command fails, open up the modal for Requesting An Temporary Access Code.\n return result.catch(() => this.openRequestCodeModal.call(this, true));\n }\n\n return result;\n }\n\n console.error('Lock model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n\n /**\n * Method to open the Request A Code modal.\n *\n * @param openFailedCommandState True if we want to open a prompt modal with the option to request a code. If\n * false then we are requesting a code and displaying it in a modal for them.\n */\n openRequestCodeModal(openFailedCommandState: boolean): void {\n this.modals.showModal(RequestACode, {\n isFailedCommandState: openFailedCommandState,\n device: this\n });\n }\n\n // region api calls\n\n /**\n * Locks the lock\n */\n lock(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('lock', Locked, statePollOnly, 'lockingLockFailed');\n }\n\n /**\n * Unlocks the lock\n */\n unlock(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('unlock', Unlocked, statePollOnly, 'unlockingLockFailed');\n }\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/lock': LockModel;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n * Mobile Device model.\n */\nexport default class MobileDevice extends BaseManagedDevice {\n /**\n * Is this mobile device a push device?\n */\n @attr('boolean', { defaultValue: false })\n declare isPushDevice: boolean;\n\n /**\n * Is this mobile device a gps device?\n */\n @attr('boolean', { defaultValue: false })\n declare isGPSDevice: boolean;\n\n /**\n * Is push notification capability enabled for the mobile device?\n */\n @attr('boolean', { defaultValue: false })\n declare isPushNotificationEnabled: boolean;\n\n /**\n * Is location sharing enabled for the mobile device?\n */\n @attr('boolean', { defaultValue: false })\n declare isLocationSharingEnabled: boolean;\n\n /**\n * Is the current device?\n */\n @attr('boolean', { defaultValue: false })\n declare isCurrentDevice: boolean;\n\n /**\n * Is the Geo Settings page for this device available?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessGeoServicesPage: boolean;\n\n /**\n * Is the Notification Settings page for this device available?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessNotificationsPage: boolean;\n\n /**\n * The Device ID when a Mobile Device is created from a SmartPhoneDevice.\n */\n @attr('number', { defaultValue: -1 })\n declare deviceId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/mobile-device': MobileDevice;\n }\n}\n","import BaseManagedDevice from 'customer-site/models/devices/base-managed-device';\n\n/**\n * Motion Camera Device Model\n * @classdesc\n */\nexport default class MotionCamera extends BaseManagedDevice {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/motion-camera': MotionCamera;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Unregistered } from '../../enums/MpersDeviceStatus';\nimport { getMpersDeviceStateText, getMpersDeviceStateCSS } from '../../utils/mpers-devices';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n * mPERS device model.\n */\nexport default class MpersDevice extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'mpersDevices' })\n declare system: AsyncBelongsTo;\n\n /**\n * The current emergency event type, undefined if there is no active emergency.\n */\n @attr('number', { defaultValue: undefined })\n declare emergencyEvent: number | undefined;\n\n /**\n * The utc timestamp of the current emergency event, undefined if there is no active emergency.\n */\n @attr('date', { defaultValue: undefined })\n declare emergencyTimestampUtc: Date | undefined;\n\n @attr('boolean', { defaultValue: true })\n declare canRefreshState: boolean;\n\n @attr('string')\n declare imeiId: string;\n\n @attr('string')\n declare signalStrength: string;\n\n @attr('string')\n declare deviceModelId: number;\n\n @attr('string')\n declare lastActivityDescription: string;\n\n @attr('string')\n declare lastActivityUtc: string;\n\n @attr('boolean', { defaultValue: false })\n declare isRegistered: boolean;\n\n @attr('string')\n declare deviceNickname: string;\n\n @attr('string')\n declare locationName: string;\n\n @attr('string')\n declare address1: string;\n\n @attr('string')\n declare address2: string;\n\n @attr('string')\n declare city: string;\n\n @attr('string')\n declare stateName: string;\n\n @attr('string')\n declare postalCode: string;\n\n @attr('number', { defaultValue: 1 })\n declare country: number;\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getMpersDeviceStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getMpersDeviceStateText, this.intl.t('generic.updating'));\n }\n /** @override **/\n getUnknownState(): number {\n return Unregistered;\n }\n\n /** The title text for the signal strength */\n getSignalStrengthTitle(): string {\n return this.intl.t('generic.mpers.signalStrength', { value: this.signalStrength });\n }\n\n /** The icon for the signal strength */\n getSignalStrengthIcon(): string {\n const { signalStrength } = this;\n return `signal-${signalStrength.charAt(0)}`;\n }\n\n /** The title for settings button */\n getSettingsText(): string {\n return this.intl.t('generic.mpers.configureDevices');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/mpersDevice': MpersDevice;\n }\n}\n","import { attr, hasMany, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { getNoiseSensorStateCSS } from 'customer-site/utils/sensors';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type { AsyncBelongsTo, SyncHasMany } from '@ember-data/model';\nimport type SensorThreshold from 'customer-site/models/devices/sensor-threshold';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n *\n * The model for the noise sensor.\n */\nexport default class NoiseSensor extends BaseManagedDevice {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'noiseSensors' })\n declare system: AsyncBelongsTo;\n\n /**\n * List of thresholds that belong to this noise sensor.\n */\n @hasMany('devices/sensor-threshold', { async: false, inverse: 'device' })\n declare thresholds: SyncHasMany;\n\n @attr('string', { defaultValue: '' })\n declare displayStateText: string;\n\n @attr('string', { defaultValue: '' })\n declare sensorActivationText: string;\n\n /** @override **/\n getStateCssFn(): (...args: unknown[]) => string {\n return getNoiseSensorStateCSS;\n }\n\n /**\n * Text to display for a given state\n */\n @computed('displayStateText')\n get stateText(): string {\n return this.displayStateText;\n }\n\n /** @override **/\n get asyncStateTooltip(): Promise {\n return (async () => {\n return this.sensorActivationText;\n })();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/noise-sensor': NoiseSensor;\n }\n}\n","import { hasMany, attr, belongsTo } from '@ember-data/model';\nimport { getProperties, get, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n BypassSensors,\n NoEntryDelay,\n SilentArming,\n NightArming,\n SelectivelyBypassSensors,\n ForceArm\n} from '../../enums/ArmingOption';\nimport { Disarmed, ArmedAway, ArmedStay, Unknown, Hidden } from '../../enums/ArmingState';\nimport { getPartitionStateText, getPartitionStateCSS } from '../../utils/partitions';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type Sensor from 'customer-site/models/devices/sensor';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * Arms the partition to the desired state, and also handles the errors processing in the event of an arming issue.\n *\n * @private\n */\nfunction arm(\n this: PartitionModel,\n desiredState: number,\n statePollOnly: boolean,\n failureMessageKey: string,\n options = {}\n): OptionalAsyncModelPayload {\n const methodName = (\n {\n [ArmedAway]: 'armAway',\n [ArmedStay]: 'armStay'\n } as Record\n )[desiredState];\n\n return this.changeState(methodName, desiredState, statePollOnly, failureMessageKey, options).catch(\n (error) => {\n const notificationManager = this.notificationManager,\n { detail, data } = getProperties(get(error, 'errors.firstObject') || {}, 'detail', 'data'),\n // Not all error messages we process here will have 'data' defined, so we need to at least instantiate an empty object.\n showClearFaults = (data || {}).showClearFaults,\n localePath = 'components.dashboard-cards.devices.partition-card.issues-overlay',\n { intl } = this;\n\n // If we need to show the clear panel faults button, do so here\n if (showClearFaults) {\n notificationManager.addNotification(\n detail,\n 'warning',\n [\n {\n text: intl.t('home.partitions.clearIssues'),\n action: () => {\n this.clearPanelFaults()\n .then(() => {\n // Report success.\n notificationManager.addSuccess(intl.t(`${localePath}.success`));\n })\n .catch(() => {\n notificationManager.addError(intl.t(`${localePath}.error`));\n });\n }\n }\n ],\n 0,\n true,\n false,\n 'warning'\n );\n } else {\n // Typical error case that will catch most errors.\n notificationManager.addError(detail);\n }\n }\n );\n}\n\nexport type ArmingOptionName = 'Disarmed' | 'ArmedAway' | 'ArmedStay' | 'ArmedNight';\nexport type ArmingOption =\n | typeof SilentArming\n | typeof NoEntryDelay\n | typeof BypassSensors\n | typeof SelectivelyBypassSensors\n | typeof NightArming\n | typeof ForceArm;\nexport type ArmingState = typeof Unknown | typeof Disarmed | typeof ArmedStay | typeof ArmedAway;\n\nexport const allArmingOptions: Map = new Map([\n [SilentArming, 'silentArming'],\n [NoEntryDelay, 'noEntryDelay'],\n [BypassSensors, 'forceBypass'],\n [SelectivelyBypassSensors, 'selectiveBypass'],\n [NightArming, 'nightArming'],\n [ForceArm, 'forceArm']\n]);\n\nexport type ArmingPayload = {\n silentArming?: boolean;\n noEntryDelay?: boolean;\n forceBypass?: boolean;\n bypass?: string;\n nightArming?: boolean;\n unbypass?: string;\n};\n\n/**\n * @classdesc\n *\n * System partition device model.\n */\nexport default class PartitionModel extends BaseManagedDevice {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * The ID for this partition.\n */\n @attr('number', { defaultValue: 1 })\n declare partitionId: number;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'partitions' })\n declare system: AsyncBelongsTo;\n\n /**\n * The extended arming options supported per arming mode.\n */\n @attr()\n declare extendedArmingOptions: Record;\n\n /**\n * Does this partition have access to Night Arming Schedules?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsNightArmingSchedules: boolean;\n\n /**\n * The extended arming option combinations that are invalid for each arming mode.\n */\n @attr()\n declare invalidExtendedArmingOptions: Record>;\n\n /**\n * Should we prompt about present issues before allowing the user to arm?\n */\n @attr('boolean', { defaultValue: false })\n declare needsClearIssuesPrompt: boolean;\n\n /**\n * Sensors for this partition.\n */\n @hasMany('devices/sensor', { async: true, inverse: null })\n declare sensors: AsyncHasMany;\n\n /**\n * Can this partition enable Alexa features?\n */\n @attr('boolean', { defaultValue: false })\n declare canEnableAlexa: boolean;\n\n /**\n * Are Alexa features enabled on this partition?\n */\n @attr('boolean', { defaultValue: false })\n declare isAlexaEnabled: boolean;\n\n /**\n * Can this partition access panel-wifi route?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessPanelWifi: boolean;\n\n /**\n * Indicates the panel supports sending bypass commands when the panel is armed.\n */\n @attr('boolean', { defaultValue: false })\n declare canBypassSensorWhenArmed: boolean;\n\n /**\n * Indicates whether to warn the user if a sensor is open while trying to arm the panel.\n */\n @attr('boolean', { defaultValue: false })\n declare dealerEnforcesForceBypass: boolean;\n\n /**\n * Indicates whether the partition has any trouble condition related to \"Force Bypass\" option.\n */\n @attr('boolean', { defaultValue: false })\n declare hasSensorInTroubleCondition: boolean;\n\n /**\n * Indicates whether the partition has any open sensors related to \"Force Bypass\" option.\n */\n @attr('boolean', { defaultValue: false })\n declare hasOpenBypassableSensors: boolean;\n\n /**\n * Determines if the selective bypass sensors should be limited to 32\n */\n @attr('boolean', { defaultValue: false })\n declare limitSelectiveBypassSensors: boolean;\n\n /**\n * Indicates whether the force bypass checkbox should be hidden.\n */\n @attr('boolean', { defaultValue: false })\n declare hideForceBypass: boolean;\n\n /**\n * Indicates whether we show the new force bypass with new text)\n */\n @attr('boolean', { defaultValue: false })\n declare useAlternateForceBypass: boolean;\n\n /**\n * The allowed device naming format.\n */\n @attr('number', { defaultValue: 0 })\n declare sensorNamingFormat: number;\n\n /**\n * The names of any currently offline controllers\n */\n @attr('array')\n declare restrictedAccessOfflineControllers: string[];\n\n /**\n * Indicates if the partition has an active alarm\n */\n @attr('boolean', { defaultValue: false })\n declare hasActiveAlarm: boolean;\n\n /**\n * Indicates if the partition only supports arming and not Armed Away and Armed Stay.\n */\n @attr('boolean', { defaultValue: false })\n declare hasOnlyArming: boolean;\n\n /**\n * Indicates if the partition supports ForceArm\n */\n @attr('boolean', { defaultValue: false })\n declare hasForceArm: boolean;\n\n /**\n * Indicates the panel is not disarmed.\n */\n @computed('state')\n get isArmed(): boolean {\n return this.state !== Disarmed;\n }\n\n /**\n * Gets the available arming states for this partition\n */\n validArmingStates(): string[] {\n return Object.keys(this.extendedArmingOptions);\n }\n\n /** @override **/\n isArmedOnly(): boolean {\n const armingStates = Object.keys(this.extendedArmingOptions);\n return armingStates.length == 2 && armingStates.includes('ArmedAway');\n }\n\n /** @override **/\n get hiddenState() {\n return Hidden;\n }\n\n /** @override **/\n getStateCssFn(): (...args: unknown[]) => string {\n return getPartitionStateCSS;\n }\n\n /** @override **/\n getStateTextFn(): (...args: unknown[]) => string {\n return getPartitionStateText;\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /**\n * @override\n */\n executeStateChange(\n desiredState: ArmingState,\n statePollOnly: boolean,\n options: ArmingPayload\n ): OptionalAsyncModelPayload {\n switch (desiredState) {\n case Disarmed:\n return this.disarm(options, statePollOnly);\n case ArmedAway:\n return this.armAway(options, statePollOnly);\n case ArmedStay:\n return this.armStay(options, statePollOnly);\n default:\n console.error('Partition model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n }\n\n // region api calls\n /**\n * Disarms the partition.\n */\n disarm(armingOptions: ArmingPayload, statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('disarm', Disarmed, statePollOnly, 'disarmingFailed', armingOptions);\n }\n\n /**\n * Arms away the partition.\n */\n armAway(armingOptions: ArmingPayload, statePollOnly = false): OptionalAsyncModelPayload {\n return arm.call(this, ArmedAway, statePollOnly, 'armingAwayFailed', armingOptions);\n }\n\n /**\n * Arms stay the partition.\n */\n armStay(armingOptions: ArmingPayload, statePollOnly = false): OptionalAsyncModelPayload {\n return arm.call(this, ArmedStay, statePollOnly, 'armingStayFailed', armingOptions);\n }\n\n /**\n * Sends the commands to the panel to acknowledge any physically cleared faults.\n */\n clearPanelFaults(): AsyncModelPayload {\n // If logged in user cannot change the state of the device, reject this request.\n if (!this.canChangeState) {\n return Promise.reject();\n }\n\n return this.submitCustomApiCall>('clearPanelFaults');\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/partition': PartitionModel;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * A model containing permissions specific to the smart chime.\n */\nexport default class SmartChimePermission extends Model {\n /**\n * Can the user test the chime tone?\n */\n @attr('boolean')\n declare canTestChimeTone: boolean;\n\n /**\n * Can the user edit chime settings (ex. chime tone)\n */\n @attr('boolean')\n declare canEditChimeSettings: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/permissions/smart-chime-permission': SmartChimePermission;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Unknown } from '../../enums/RemoteTemperatureSensorStatus';\nimport { getGlobalDeviceIdNumber } from '../../models/devices/base-device';\nimport TemperatureDevice from './temperature-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type { SafeString } from 'handlebars';\nimport type ThermostatModel from './thermostat';\n\n/**\n * Temp sensor device model.\n * @classdesc\n */\nexport default class RemoteTemperatureSensorModel extends TemperatureDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'remoteTemperatureSensors' })\n declare system: AsyncBelongsTo;\n\n /**\n * The thermostat this temp sensor is paired to.\n */\n @belongsTo('devices/thermostat', { async: true, inverse: 'remoteTemperatureSensors' })\n declare thermostat: AsyncBelongsTo;\n\n /** @override */\n @computed('thermostat.id')\n get sortId(): Promise {\n // Use the paired thermostat's id if there is one; otherwise, we want unpaired rts's to be sorted at the end, so return an arbitrary huge number.\n return (async () => getGlobalDeviceIdNumber((await this.thermostat)?.id ?? Number.MAX_SAFE_INTEGER))();\n }\n\n /** @override */\n get isThermostat(): boolean {\n return false;\n }\n\n /** @override */\n @computed('activeState', 'stateText')\n get simpleStateText(): SafeString | string {\n return this.isInUnknownState() ? this.intl.t('home.temperatures.unknown') : this.stateText;\n }\n\n /** @override */\n get stateText(): string | SafeString {\n return this.temperatureText;\n }\n\n override get canChangeState(): boolean {\n return false;\n }\n\n /**\n * Indicates an issue has occurred during temperature forwarding.\n */\n @alias('thermostat.hasRtsIssue')\n declare hasRtsIssue: boolean;\n\n /** @override */\n getStateCssFn(): () => string {\n return () => '';\n }\n\n /** @override */\n getStateTextFn(): () => string | SafeString {\n return () => this.stateText;\n }\n\n /** @override */\n getUnknownState(): number {\n return Unknown;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/remote-temperature-sensor': RemoteTemperatureSensorModel;\n }\n}\n","import { hasMany, attr, belongsTo } from '@ember-data/model';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type SceneRuleDisplay from '../automation/scene-rule-display';\nimport type DeviceResourceInfo from './device-resource-info';\n\n/**\n * @classdesc\n * An automation remote model.\n */\nexport default class RemotesModel extends BaseManagedDevice {\n /**\n * The number of buttons on the remote.\n */\n @attr('number', { defaultValue: 0 })\n declare numberOfButtons: number;\n\n /**\n * The collection of {@link models.automation.SceneRuleDisplay} models this remote is linked to.\n */\n @hasMany('automation/scene-rule-display', { async: true, inverse: null })\n declare sceneRules: AsyncHasMany;\n\n /**\n * The resource information for the button diagram for the corresponding device model.\n */\n @belongsTo('devices/device-resource-info', { async: true, inverse: null })\n declare buttonResourceInfo: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/remote': RemotesModel;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Deployed } from '../../enums/SFGDeviceStatus';\nimport { getSFGStateText, getSFGStateCSS } from '../../utils/sfg-devices';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type AjaxService from '@adc/ajax/services/adc-ajax';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type TroubleConditionService from 'customer-site/services/trouble-conditions';\nimport type TroubleCondition from '../trouble-conditions/trouble-condition';\n\n/**\n * Security Fog Generator device model.\n */\nexport default class SfgModel extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare troubleConditions: TroubleConditionService;\n @service declare notificationManager: NotificationManager;\n\n @tracked deployedDevices: number[] = [];\n @tracked failedDeploys: number[] = [];\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'sfgDevices' })\n declare system: AsyncBelongsTo;\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getSFGStateCSS, this.intl.t('generic.unknown'));\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getSFGStateText, this.intl.t('generic.updating'));\n }\n\n /**\n * The time of the next scheduled deployment in UTC.\n */\n @attr('date')\n declare nextScheduledDeploymentUtc: Date | undefined;\n\n /**\n * The time of the last deployment in UTC.\n */\n @attr('date')\n declare lastDeploymentUtc: Date | undefined;\n\n /**\n * Current deployment status of the device.\n */\n @attr('number')\n declare deploymentStatus: number | undefined;\n\n async getFilteredTroubleConditions(id: string): Promise {\n const troubleConditions = await this.troubleConditions.troublesPromise;\n return troubleConditions?.filter((item) => item.emberDeviceId === id) ?? [];\n }\n\n deployDevice(): OptionalAsyncModelPayload {\n return this.changeState('deploy', Deployed, false, 'deployFailed');\n }\n\n async getMassFilteredTroubleConditions(devices: SfgModel[]): Promise {\n const troubleConditions = await this.troubleConditions.troublesPromise;\n return troubleConditions.filter((tc) => devices.map((item) => item.id).includes(tc.emberDeviceId)) ?? [];\n }\n\n async deployDevices(devices: SfgModel[]): Promise {\n await Promise.all(\n devices.map(async (device, index) => {\n try {\n await device.changeState('deploy', Deployed, false, 'deployFailed');\n this.deployedDevices.push(index);\n } catch (error) {\n this.failedDeploys.push(index);\n }\n })\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/security-fog-generator': SfgModel;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type NoiseSensor from './noise-sensor';\n\n/**\n * @classdesc\n *\n * The model for the sensor threshold.\n */\nexport default class SensorThreshold extends BaseModel {\n /**\n * The device that this Sensor Threshold belongs to.\n */\n @belongsTo('devices/noise-sensor', { async: true, inverse: 'thresholds' })\n declare device: AsyncBelongsTo;\n\n /**\n * The name of the threshold.\n */\n @attr('string', { defaultValue: '' })\n declare thresholdName: string;\n\n /**\n * The reading type for the threshold.\n */\n @attr('number')\n declare sensorReadingType: number;\n\n /**\n * The low threshold.\n */\n @attr('number')\n declare thresholdLow?: number;\n\n /**\n * The high threshold.\n */\n @attr('number')\n declare thresholdHigh?: number;\n\n /**\n * The duration (in Minutes) of the threshold.\n */\n @attr('number')\n declare durationInMinutes?: number;\n\n /**\n * The time that the threshold starts. It is calculated in the offset in minutes from midnight and the default value is 12:00 AM.\n */\n @attr('number', { defaultValue: 0 })\n declare startTime: number;\n\n /**\n * The time that the threshold ends. It is calculated in the offset in minutes from midnight and the default value is 11:59 PM.\n */\n @attr('number', { defaultValue: 1439 })\n declare endTime: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/sensor-threshold': SensorThreshold;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { DrivewaySensor, FlexIOPullApartSensor, Uncategorized } from 'customer-site/enums/DeviceRole';\nimport { Contact, Motion, Water, OilGauge } from 'customer-site/enums/DeviceType';\nimport { Closed, Opened } from 'customer-site/enums/EventType';\nimport { Active, Closed as Close, Idle, Open, Unknown } from '../../enums/SensorStatus';\nimport { getSensorStateCSS } from '../../utils/sensors';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type SensorRowInfo from '../settings/control-panel-settings/sensor-row-info';\n\n/**\n * Sensor device model.\n * @classdesc\n */\nexport default class Sensor extends BaseManagedDevice {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'sensors' })\n declare system: AsyncBelongsTo;\n\n /** @override **/\n getStateCssFn(): (...args: unknown[]) => string {\n return getSensorStateCSS;\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /** @override **/\n @attr('string', { defaultValue: '' })\n declare displayStateText: string;\n\n /**\n * Is the sensor motion or contact, pulls from DeviceTypeEnum\n */\n @attr('number')\n declare deviceType: number;\n\n override get canChangeState(): boolean {\n return false;\n }\n\n /**\n * Does the sensor have normal activity monitoring enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isMonitoringEnabled: boolean;\n\n /**\n * Indicates if this sensor is in an \"Open\" or \"Closed\" state.\n */\n @attr('number')\n declare openClosedStatus: number;\n\n /**\n * Indicates if this sensor is a flex IO sensor.\n */\n @attr('boolean', { defaultValue: false })\n declare isFlexIO: boolean;\n\n /**\n * Indicates the current role of the sensor\n * Pulls from DeviceRoleEnum\n */\n @attr('number', { defaultValue: Uncategorized })\n declare deviceRole: number;\n\n /**\n * The allowed sensor naming format.\n */\n @attr('number', { defaultValue: 0 })\n declare sensorNamingFormat: number;\n\n /**\n * Indicates this sensor supports bypass.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsBypass: boolean;\n\n /**\n * Indicates this sensor supports bypass outside an arming event.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsImmediateBypass: boolean;\n\n /**\n * Indicates this sensor supports bypass.\n */\n @attr('boolean', { defaultValue: false })\n declare isBypassed: boolean;\n\n @belongsTo('settings/control-panel-settings/sensor-row-info', { async: true, inverse: 'sensor' })\n declare sensorRowInfo: AsyncBelongsTo;\n\n /**\n * Text to display for a given state\n */\n @computed('displayStateText')\n get stateText(): string {\n return this.displayStateText;\n }\n\n /**\n * Property that computes the iconType variable for sensors that have a non-standard\n * icon name, i.e. iconType != 'sensor'.\n * Computes iconType for the icon name format: icn-{iconType}-{state}.svg\n *\n * Currently translates for devices in the driveway and pullapart roles,\n * as well as devices of the water and oil gauge sensor type\n */\n @computed('deviceType', 'deviceRole', 'state')\n get uniqueSensorIconType(): string | null {\n const { deviceRole, deviceType, state } = this;\n\n const deviceRoleIcon = this.uniqueIconTypeFromDeviceRole(deviceRole);\n if (deviceRoleIcon != null) {\n return deviceRoleIcon;\n }\n\n return this.uniqueIconTypeFromDeviceType(deviceType, state);\n }\n\n /**\n * Helper to determine Sensor's iconType string based on the deviceRole\n *\n * Currently translates for driveway and pull-apart sensors\n */\n uniqueIconTypeFromDeviceRole(deviceRole: number): string | null {\n if (deviceRole === DrivewaySensor) {\n return 'driveway';\n }\n\n if (deviceRole === FlexIOPullApartSensor) {\n return 'magnapull';\n }\n\n return null;\n }\n\n /**\n * Helper to determine Sensor's iconType string based on the deviceType and state\n *\n * Currently translates for water and oil gauge sensors\n *\n * NOTE: Currently, these sensors in the unknown state use the generic sensor iconType\n */\n uniqueIconTypeFromDeviceType(deviceType: number, state: number): string | null {\n if (state != this.getUnknownState()) {\n if (deviceType == Water) {\n return 'water-sensor';\n }\n\n if (deviceType == OilGauge) {\n return 'oil-sensor';\n }\n }\n\n return null;\n }\n\n /**\n * Helper to determine Sensor's state based on event type and device type\n */\n getStateFromType(eventType: number): number {\n return (\n {\n [Opened]: {\n [Contact]: Open,\n [Motion]: Active\n },\n [Closed]: {\n [Contact]: Close,\n [Motion]: Idle\n }\n } as Record>\n )[eventType]?.[this.deviceType];\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/sensor': Sensor;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Closed, Open, Offline } from '../../enums/ShadeStatus';\nimport { getShadeStateCSS, getShadeStateText } from '../../utils/shades';\nimport { LOADING_STATE } from './base-device';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n *\n * Shade device model.\n */\nexport default class ShadeModel extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'shades' })\n declare system: AsyncBelongsTo;\n\n /**\n * Is the device a dimmer?\n */\n @attr('boolean', { defaultValue: false })\n declare isDimmer: boolean;\n\n /**\n * Dimmer value for a shade\n */\n @attr('number')\n declare shadeLevel: number;\n\n /**\n * Whether the device's status can be refreshed.\n */\n @attr('boolean', { defaultValue: false })\n declare canRefreshStatus: boolean;\n\n /**\n * Can the remote commands be enabled or disabled?\n */\n @attr('boolean', { defaultValue: false })\n declare canEnableRemoteCommands: boolean;\n\n /**\n * Are remote commands enabled?\n */\n @attr('boolean', { defaultValue: true })\n declare remoteCommandsEnabled: boolean;\n\n /** @override */\n @computed('animationState', 'intl.t', 'shadeLevel', 'state', 'targetState')\n get stateText(): string {\n const { state } = this.getState(),\n { shadeLevel } = this;\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return this.intl.t('generic.loading');\n }\n\n return this.getStateTextFn()(state, shadeLevel, this.intl.t.bind(this.intl));\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getShadeStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): (...args: unknown[]) => string {\n return this.getRefreshStateFn(getShadeStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Offline;\n }\n\n /**\n * @override\n */\n executeStateChange(\n desiredState: number,\n statePollOnly: boolean,\n options = {}\n ): OptionalAsyncModelPayload {\n if (desiredState === Open) {\n return this.open(options, statePollOnly);\n }\n\n if (desiredState === Closed) {\n return this.close(options, statePollOnly);\n }\n\n console.error('Shade model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n\n // region api calls\n\n /**\n * Opens the shade\n */\n open(shadeOptions: Record, statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('open', Open, statePollOnly, 'openingShadeFailed', shadeOptions);\n }\n\n /**\n * Closes the shade\n */\n close(shadeOptions: Record, statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('close', Closed, statePollOnly, 'closingShadeFailed', shadeOptions);\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/shade': ShadeModel;\n }\n}\n","import BaseManagedDevice from './base-managed-device';\n\n/**\n * Siren device model.\n * @classdesc\n */\nexport default class Siren extends BaseManagedDevice {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/siren': Siren;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { NotSet } from 'customer-site/enums/PanelType';\nimport * as W115CChimeSoundsEnumObj from 'customer-site/enums/W115CChimeSounds';\nimport { Wep, Wpa, Wpa2, None as NoEncryption } from 'customer-site/enums/WiFiEncryptionType';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type AccessPointWifiSetting from 'customer-site/models/settings/access-point-wifi/access-point-wifi-setting';\nimport type WifiNetwork from 'customer-site/models/settings/panel-wifi/wifi-network';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type AccessPointPanelSignalStrengthInfo from '../settings/access-point-wifi/access-point-panel-signal-strength';\n\ntype W115CChimeSoundsEnum = typeof W115CChimeSoundsEnumObj;\n\n/**\n * @classdesc\n *\n * Smart Chime device model.\n *\n * @class models.devices.SmartChimeDevice\n */\nexport default class SmartChimeDevice extends BaseManagedDevice {\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n /**\n * The accessPointDeviceId for this device.\n */\n @attr('number', { defaultValue: 0 })\n declare accessPointDeviceId: number;\n\n /**\n * The chime volume for this device.\n */\n @attr('number', { defaultValue: 0 })\n declare chimeVolume: number;\n\n /**\n * The chime sound for this device.\n */\n @attr('number', { defaultValue: 0 })\n declare chimeTone: number;\n\n /**\n * Are the device's LEDs enabled?\n */\n @attr('boolean', { defaultValue: true })\n declare ledsEnabled: boolean;\n\n /**\n * Should we show chime scheduling UI elements?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldShowChimeScheduling: boolean;\n\n /**\n * The model of this device.\n */\n @attr('number', { defaultValue: NotSet })\n declare chimeModel: number;\n\n /**\n * The Current wifi setting of this device.\n */\n @belongsTo('settings/access-point-wifi/access-point-wifi-setting', { async: true, inverse: null })\n declare wifiSetting: AsyncBelongsTo;\n\n /**\n * Get the appropriate encryption type that this smart chime's network is currently on.\n */\n @computed('wifiSetting.encryptionType')\n get encryptionTypeName(): Promise {\n const baseResource = 'components.modals.wireless-settings.manual-network-configuration.encryptionType';\n return this.wifiSetting\n .then((wifiSetting) => {\n return this.intl.t(\n `${baseResource}.${\n (\n {\n [Wep]: 'wep',\n [Wpa]: 'wpa',\n [Wpa2]: 'wpa2',\n [NoEncryption]: 'noEncryption'\n } as Record\n )[wifiSetting.encryptionType] || 'noEncryption'\n }`\n );\n })\n .catch(() => this.intl.t(`${baseResource}.noEncryption`));\n }\n\n /**\n * Get networks that are already attached to other video camera on account.\n */\n get getNetworksAttachedToVideoCameras(): AsyncModelPayload {\n return this.ajax.apiRequest>(\n 'settings/panelWifi/wifiNetworks/getNetworksAttachedToVideoCameras'\n );\n }\n\n /**\n * Get scanned networks from the smart chime.\n */\n getAccessPointsScannedWifiNetworks(): ADCAsyncStoreQuery {\n return this.store.query('settings/panel-wifi/wifi-network', {\n accessPointDeviceId: this.accessPointDeviceId\n });\n }\n\n /**\n * Get signal strength from the smart chime\n */\n getAccessPointWifiSignalStrength(): Promise {\n return this.store.findRecord('settings/accessPointWifi/accessPointPanelSignalStrength', this.id);\n }\n\n /**\n * Connect the smart chime to a wireless network.\n */\n connectSmartChimeDeviceToWirelessNetwork(\n ssid: string,\n pwd: string | null = null,\n encryptionType: number,\n encryptionAlgorithm: number | null = null,\n deviceIdsAttachedToNetwork: number[] = []\n ): Promise {\n return this.ajax\n .apiRequest(\n `devices/smartChimeDevices/connectSmartChimeDeviceToWirelessNetwork/${\n this.accessPointDeviceId\n }?ssid=${ssid}${\n pwd ? `&pwd=${pwd}` : ''\n }&encryptionType=${encryptionType}&encryptionAlgorithm=${encryptionAlgorithm}&deviceIdsAttachedToNetwork=${deviceIdsAttachedToNetwork.join()}`\n )\n .then(\n (result) => {\n this.wifiSetting.set('ssid', ssid);\n this.wifiSetting.set('encryptionType', encryptionType);\n return result;\n },\n (reason) => {\n return reason;\n }\n );\n }\n\n /**\n * Test a chime tone before saving the setting permanently.\n */\n testChimeTone(): Promise {\n return this.ajax.apiRequest(\n `devices/smartChimeDevices/testChimeTone/${this.accessPointDeviceId}?chimeVolume=${this.chimeVolume}&selectedChimeSound=${this.chimeTone}`\n );\n }\n\n /**\n * Get the description for the chime in the format Tone, Volume.\n */\n get chimeSoundDescription(): string {\n const { chimeTone, chimeVolume } = this;\n\n const name = (Object.keys(W115CChimeSoundsEnumObj) as Array).find(\n (key) => W115CChimeSoundsEnumObj[key] === Number(chimeTone)\n );\n\n return this.intl.t('generic.commaSeparatedString', {\n first: this.intl.t(`components.access-point.chime-configuration-settings.chimeSoundOptions.${name}`),\n second: this.intl.t('generic.valuePercent', { value: chimeVolume })\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/smart-chime-device': SmartChimeDevice;\n }\n}\n","import BaseDevice from './base-device';\n\n/**\n * @classdesc\n *\n * Smart Gateway device model.\n */\nexport default class SmartGateway extends BaseDevice {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/smart-gateway': SmartGateway;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\ninterface DeviceIssueType {\n title: string;\n shortDescription: string;\n fullDescription: string;\n}\n\n/**\n * Device state info model.\n * @classdesc\n */\nexport default class StateInfo extends BaseModel {\n /**\n * The last state transition time.\n */\n @attr('string')\n declare stateTransitionDate: string;\n\n /**\n * Additional state info.\n */\n @attr()\n declare additionalStateDescriptions: Record;\n\n /**\n * Array of issues with this device. Each issue contains the title of the issue,\n * a short description and the full description.\n */\n @attr('array')\n declare issues: DeviceIssueType[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/state-info': StateInfo;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport { alias } from '@ember/object/computed';\nimport { Unknown } from '../../enums/SumpPumpStatus';\nimport { getSumpPumpStateText, getSumpPumpStateCSS } from '../../utils/sump-pumps';\nimport BaseDevice from './base-device';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * Sump pump device model.\n * @classdesc\n */\nexport default class SumpPump extends BaseDevice {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'sumpPumps' })\n declare system: AsyncBelongsTo;\n\n /**\n * Sump pumps don't really have desired state, but there are device card components that use desired state, so override to alias state as desiredState.\n *\n * @ignore\n * @override\n */\n @alias('state')\n declare desiredState: number;\n\n override get canChangeState(): boolean {\n return false;\n }\n\n /** @override **/\n getStateCssFn(): (...args: unknown[]) => string {\n return getSumpPumpStateCSS;\n }\n\n /** @override **/\n getStateTextFn(): (...args: unknown[]) => string {\n return getSumpPumpStateText;\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/sump-pump': SumpPump;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { getSwitchStateCSS, getSwitchStateText } from 'customer-site/utils/switch';\nimport { Closed, Open, Unknown } from '../../enums/ControlPointRelayStatus';\nimport BaseDevice from './base-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n *\n * Switch model. (Mercury Control Point, Generic Switch)\n */\nexport default class SwitchModel extends BaseDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'switches' })\n declare system: AsyncBelongsTo;\n\n /**\n * Does the logged in context have permission to turn this control point on and off?\n */\n @attr('boolean', { defaultValue: false })\n declare canTurnOnOff: boolean;\n\n /**\n * The type of switch\n */\n @attr('number', { defaultValue: 225 })\n declare switchType: number;\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getSwitchStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getSwitchStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n executeStateChange(desiredState: number, statePollOnly: boolean): OptionalAsyncModelPayload {\n if (desiredState === Open) {\n return this.turnOn(statePollOnly);\n }\n\n if (desiredState === Closed) {\n return this.turnOff(statePollOnly);\n }\n\n console.error('Switch model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n\n // region api calls\n /**\n * Turn On Switch\n */\n turnOn(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('turnOn', Open, statePollOnly, 'turningOnSwitchFailed');\n }\n\n /**\n * Turn Off Switch\n */\n turnOff(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('turnOff', Closed, statePollOnly, 'turningOffSwitchFailed');\n }\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/switch': SwitchModel;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { isPresent, isEmpty } from '@ember/utils';\nimport { LOADING_STATE } from './base-device';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { SafeString } from 'handlebars';\n\n/**\n * @classdesc\n * Temperature device model.\n *\n * @abstract\n */\nexport default abstract class TemperatureDevice extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The current temperature reported by the device.\n */\n @attr('number')\n declare ambientTemp: number;\n\n /**\n * The current humidity level reported by the device\n */\n @attr('number')\n declare humidityLevel: number;\n\n /**\n * Is this device paired to another?\n */\n @attr('boolean', { defaultValue: false })\n declare isPaired: boolean;\n\n /**\n * Does this device support pairing? Does a thermostat support pairing to temperature sensors or does a temperature\n * sensor support pairing to thermostats? (e.g. Power G temperature sensors are not z-wave devices)\n */\n @attr('boolean', { defaultValue: false })\n declare supportsPairing: boolean;\n\n /**\n * Is this device's temperature currently being used to drive itself or another device?\n */\n @attr('boolean', { defaultValue: false })\n declare tempForwardingActive: boolean;\n\n /**\n * Does this device have a Rts issue?\n */\n @attr('boolean', { defaultValue: false })\n declare hasRtsIssue: boolean;\n\n /**\n * Whether the device supports humidity.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsHumidity: boolean;\n\n /**\n * The ID to sort this device by.\n */\n abstract get sortId(): Promise;\n\n /**\n * Is the temperature device a thermostat?\n */\n abstract get isThermostat(): boolean;\n\n /**\n * The ambient temperature of the device with a degree symbol.\n */\n @computed('ambientTemp')\n get temperatureText(): string | SafeString {\n return this.getTemperatureStateText(this.ambientTemp);\n }\n\n /**\n * The humidity level of the device with a percent symbol.\n */\n @computed('humidityLevel')\n get humidityText(): string | SafeString {\n return this.getHumidityStateText(this.humidityLevel);\n }\n\n /**\n * The icon to represent the status of RTS temperature forwarding.\n */\n @computed('deviceIcon.icon', 'hasRtsIssue', 'tempForwardingActive')\n get temperatureStateIcon(): string {\n return this.tempForwardingActive && this.hasRtsIssue ? 'issue' : this.deviceIcon.icon;\n }\n\n /**\n * Tooltip text for RTS forwarding issues.\n */\n @computed('hasRtsIssue')\n get rtsIssueText(): string | undefined {\n return this.hasRtsIssue ? this.intl.t('home.thermostats.rtsIssue') : undefined;\n }\n\n /**\n * The device state or pending state if it is in the process of changing.\n */\n @computed('css', 'state', 'desiredState', 'targetState')\n get activeState(): number {\n return this.getState().state;\n }\n\n /** @override */\n @computed('displayDate', 'stateText', 'rtsIssueText')\n get stateTooltip(): string | SafeString {\n return [super.stateTooltip, this.rtsIssueText].filter((item) => item != undefined).join(', ');\n }\n\n /**\n * Get the formatted text for a property.\n */\n getTemperatureStateText(value: number): string | SafeString {\n if (this.isInUnknownState()) {\n return this.intl.t('home.temperatures.unknown');\n }\n\n return isPresent(value)\n ? htmlSafe(this.getValueStateText(value, 'valueDegree'))\n : htmlSafe(this.getValueStateText('--', 'valueDegree'));\n }\n\n /**\n * Get the formattted text for humidity with a percent sign\n * @param value the number to be formatted\n * @returns a string or SafeString with humdidty text to be displayed\n */\n private getHumidityStateText(value: number): SafeString | string {\n if (this.supportsHumidity) {\n return isPresent(value)\n ? htmlSafe(this.getValueStateText(value, 'valuePercent'))\n : htmlSafe(this.getValueStateText('--', 'valuePercent'));\n }\n\n return '';\n }\n\n /**\n * Get the formatted text for a property.\n */\n protected getValueStateText(value: number | string, resource: string): string {\n if (this.activeState === LOADING_STATE) {\n return this.intl.t('generic.loading');\n }\n\n if (isEmpty(value)) {\n return '';\n }\n\n return this.intl.t(`generic.${resource}`, { value });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/temperature-device': TemperatureDevice;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type RuleSuggestion from 'customer-site/models/automation/rules/rule-suggestion';\n\n/**\n * Model which holds the rule suggestions for a thermostat.\n * @classdesc\n */\nexport default class ThermostatRuleSuggestionsInfoModel extends BaseModel {\n /**\n * An array of rule alerts for this thermostat.\n */\n @hasMany('automation/rules/rule-suggestion', { async: true, inverse: null })\n declare ruleSuggestions: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/thermostat-rule-suggestions-info': ThermostatRuleSuggestionsInfoModel;\n }\n}\n","import { belongsTo, hasMany, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { or, filterBy } from '@ember/object/computed';\nimport { debounce, later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { capitalize } from '@ember/string';\nimport { htmlSafe } from '@ember/template';\nimport { isPresent } from '@ember/utils';\nimport { SENDING } from '@adc/ui-components/utils/animations';\nimport { AutoLow, AutoMedium } from '../../enums/ThermostatFanMode';\nimport { Disabled, Enabled, Partial } from '../../enums/ThermostatLock';\nimport { Unknown, Auto, Off, Heat, Cool } from '../../enums/ThermostatStatus';\nimport { getGlobalDeviceIdNumber } from '../../models/devices/base-device';\nimport {\n getThermostatStateKey,\n getThermostatStateCSS,\n getThermostatStateIcon,\n hasSetpoint,\n hasHeatSetpoint,\n getThermostatScheduleModeKey,\n getThermostatFanModeKey,\n getLocalDisplayLockingModeKey\n} from '../../utils/thermostats';\nimport { LOADING_STATE } from './base-device';\nimport TemperatureDevice from './temperature-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type BoilerControlSystemModel from 'customer-site/models/automation/boiler-control-system';\nimport type AutomationPeakProtect from 'customer-site/models/automation/peak-protect';\nimport type RemoteTemperatureSensorModel from 'customer-site/models/devices/remote-temperature-sensor';\nimport type ValveSwitch from 'customer-site/models/devices/valve-switch';\nimport type ThermostatSettingsTemplateModel from 'customer-site/models/enterprise/settings/thermostat-settings-template';\nimport type System from 'customer-site/models/systems/system';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { SafeString } from 'handlebars';\nimport type RtsPresetModel from '../schedules/rts-preset';\nimport type ThermostatRuleSuggestionsInfoModel from './thermostat-rule-suggestions-info';\n\nexport type DisplaySetpointKey = 'displayHeatSetpoint' | 'displayCoolSetpoint' | 'displaySetpoint';\n\ntype SetpointText = string | SafeString;\n\n// region Constants.\n\nconst TYPE_HEAT = 'Heat',\n TYPE_COOL = 'Cool';\n\nconst localePath = 'home.thermostats.';\n\n/**\n * Number of ms for debouncing changing of setpoints\n */\nexport const SETPOINT_CHANGE_TIMEOUT_MS = 3000;\n\n/**\n * Number of ms for debouncing changing of mode (status)\n */\nexport const MODE_CHANGE_TIMEOUT_MS = 10000;\n\n/**\n * Number of ms for debouncing changing of fan mode\n *\n * @private\n */\nconst FAN_CHANGE_TIMEOUT_MS = 5000;\n\n/**\n * Number of ms for debouncing changing of schedule mode\n *\n * @private\n */\nconst SCHEDULE_CHANGE_TIMEOUT_MS = 5000;\n\n/**\n * Number of ms for debouncing changing of RTS\n *\n * @private\n */\nconst RTS_CHANGE_TIMEOUT_MS = 0;\n\n/**\n * Number of ms for debouncing changing of local display locking mode\n *\n * @private\n */\nconst LOCKING_CHANGE_TIMEOUT_MS = 5000;\n\n// region State text.\n\n/**\n * Return the state text without the current setpoint.\n *\n * @private\n */\nfunction getThermostatSimpleStateText(state: number, getTranslation: (arg0: string) => string): string {\n const key = getThermostatStateKey(state);\n return key ? getTranslation(`home.thermostats.${key}`) : '';\n}\n\n/**\n * Returns the indicated or inferred state in text form.\n *\n * @private\n */\nfunction getThermostatStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string,\n inferredState: number,\n setpoint: number\n): SafeString | string {\n let modeText = getThermostatSimpleStateText(state, getTranslation);\n\n if (state === Auto && (inferredState === Heat || inferredState === Cool)) {\n const autoModeKey = getThermostatStateKey(state),\n inferredModeKey = capitalize(getThermostatStateKey(inferredState));\n\n modeText = getTranslation(`home.thermostats.${autoModeKey}${inferredModeKey}`);\n }\n\n // If we don't have a setpoint or the state doesn't have a setpoint\n // then don't show it\n if (!hasSetpoint(state) || !setpoint) {\n return modeText;\n }\n\n return htmlSafe(getTranslation('home.thermostats.toSetpoint', { mode: modeText, setpoint }));\n}\n\n// endregion\n\n/**\n * Returns the target setpoint for the supplied type.\n * @private\n */\nfunction getSetPoint(this: ThermostatModel, type: string): number {\n return this.get(\n ((this.get(`hasDirty${type}Setpoint` as keyof ThermostatModel) || this.hasPendingSetpointChange\n ? `desired${type}`\n : type.toLowerCase()) + 'Setpoint') as keyof ThermostatModel\n ) as number;\n}\n\n/**\n * Indicates if the indicated setpoint is dirty.\n * @private\n */\nfunction hasDirtySetpoint(this: ThermostatModel, type: string): boolean {\n const attributes = this.changedAttributes();\n return ['display', 'desired'].map((name) => attributes[`${name}${type}Setpoint`]).some(isPresent);\n}\n\n/**\n * Actually processes the state changes and sends the commands\n *\n * @private\n */\nfunction processStateChanges(this: ThermostatModel): void {\n // Make a copy of the changes object so that it won't be changed\n // Passing in Unknown as state so that WebStorm does not complain\n this.executeStateChange(Unknown, false, {\n ...this.pendingStateChanges\n });\n\n // Clear pending changes because now they have been committed\n delete this.pendingStateChanges;\n}\n\n/**\n * Adds state changes to the queue\n *\n * @private\n */\nfunction addStateChanges(this: ThermostatModel, stateChanges: Record, debounceDelay: number): void {\n // Create collection of pending changes\n this.set('pendingStateChanges', Object.assign(this.pendingStateChanges ?? {}, stateChanges));\n // Push state changes to the device and start animation so that user knows it is being processed\n this.setProperties(\n Object.assign(stateChanges, { animationState: SENDING }) as Pick\n );\n\n // Do not copy this deprecated usage. If you see this, please fix debounceTask.\n // eslint-disable-next-line ember/no-runloop\n debounce(this, processStateChanges, debounceDelay);\n}\n\n/**\n * Return one of the fan state info provided based on whether the fan is active, idle, or of unknown state.\n *\n * @private\n */\nfunction getFanStateInfo(\n this: ThermostatModel,\n activeStateInfo: string,\n idleStateInfo: string,\n unknownStateInfo: string\n): string {\n const fanMode = this.fanMode;\n\n // If the fan state is known, return either the active or idle state.\n if (fanMode != undefined) {\n // If the fan state is AutoLow or AutoMedium, return idle state. Else, return active state.\n return [AutoLow, AutoMedium].includes(fanMode) ? idleStateInfo : activeStateInfo;\n }\n\n return unknownStateInfo;\n}\n\n/**\n * Thermostat device model.\n * @classdesc\n */\nexport default class ThermostatModel extends TemperatureDevice {\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare navigation: NavigationService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'thermostats' })\n declare system: AsyncBelongsTo;\n\n /**\n * Property that contains state changes to be committed\n *\n */\n pendingStateChanges?: Record;\n\n /**\n * Does the thermostat require a setup wizard to be run before being used?\n */\n @attr('boolean', { defaultValue: false })\n declare requiresSetup: boolean;\n\n /**\n * The mode we think the thermostat is using when in auto mode (auto heat or auto cool)\n */\n @attr('number')\n declare inferredState: number;\n\n // region Temperatures\n\n /**\n * The current temperature including any additional temperature sensor averaging.\n */\n @attr('number')\n declare forwardingAmbientTemp: number;\n\n /**\n * The min valid heat setpoint.\n */\n @attr('number')\n declare minHeatSetpoint: number;\n\n /**\n * The max valid heat setpoint.\n */\n @attr('number')\n declare maxHeatSetpoint: number;\n\n /**\n * The min valid cool setpoint.\n */\n @attr('number')\n declare minCoolSetpoint: number;\n\n /**\n * The max valid cool setpoint.\n */\n @attr('number')\n declare maxCoolSetpoint: number;\n\n /**\n * The min valid aux heat setpoint.\n */\n @attr('number')\n declare minAuxHeatSetpoint: number;\n\n /**\n * The max valid aux heat setpoint.\n */\n @attr('number')\n declare maxAuxHeatSetpoint: number;\n\n /**\n * The current heat setpoint.\n */\n @attr('number')\n declare heatSetpoint: number;\n\n /**\n * The desired heat setpoint.\n */\n @attr('number')\n declare desiredHeatSetpoint: number;\n\n /**\n * The current cool setpoint.\n */\n @attr('number')\n declare coolSetpoint: number;\n\n /**\n * The desired cool setpoint.\n */\n @attr('number')\n declare desiredCoolSetpoint: number;\n\n /**\n * The home preset heat setpoint.\n */\n @attr('number')\n declare homeHeatSetpoint: number;\n\n /**\n * The home preset cool setpoint.\n */\n @attr('number')\n declare homeCoolSetpoint: number;\n\n /**\n * The away preset heat setpoint.\n */\n @attr('number')\n declare awayHeatSetpoint: number;\n\n /**\n * The away preset cool setpoint.\n */\n @attr('number')\n declare awayCoolSetpoint: number;\n\n /**\n * The sleep preset heat setpoint.\n */\n @attr('number')\n declare sleepHeatSetpoint: number;\n\n /**\n * The sleep preset cool setpoint.\n */\n @attr('number')\n declare sleepCoolSetpoint: number;\n\n /**\n * The amount to increment or decrement the setpoint by when changing it.\n */\n @attr('number', { defaultValue: 1 })\n declare setpointOffset: number;\n\n /**\n * The minimum buffer between the heat and cool setpoints.\n */\n @attr('number', { defaultValue: 3 })\n declare autoSetpointBuffer: number;\n\n // endregion\n\n // region Modes\n\n /**\n * The schedule mode.\n */\n @attr('number', { defaultValue: 3 })\n declare scheduleMode: number;\n\n /**\n * The current fan mode.\n */\n @attr('number', { defaultValue: 0 })\n declare fanMode: number;\n\n /**\n * The desired fan mode.\n */\n @attr('number', { defaultValue: 0 })\n declare desiredFanMode: number;\n\n /**\n * The duration to run the fan. Only used to offset the commands.\n *\n * @type {number}\n */\n @attr('number')\n declare fanDuration: number;\n\n /**\n * The current local display locking mode.\n */\n @attr('number', { defaultValue: 0 })\n declare localDisplayLockingMode: number;\n\n /**\n * The desired local display locking mode.\n */\n @attr('number', { defaultValue: 0 })\n declare desiredLocalDisplayLockingMode: number;\n\n /**\n * Indicates an issue with RTS forwarding.\n */\n @attr('boolean', { defaultValue: false })\n declare hasRtsIssue: boolean;\n\n /**\n * The remote temperature sensors associated with the thermostat.\n */\n @hasMany('devices/remote-temperature-sensor', { async: true, inverse: 'thermostat' })\n declare remoteTemperatureSensors: AsyncHasMany;\n\n /**\n * The paired RTS devices on heat mode, separated by setpoint.\n */\n @hasMany('schedules/rts-preset', { async: true, inverse: null })\n declare heatRtsPresets: AsyncHasMany;\n\n /**\n * The paired RTS devices on cool mode, separated by setpoint.\n */\n @hasMany('schedules/rts-preset', { async: true, inverse: null })\n declare coolRtsPresets: AsyncHasMany;\n\n // endregion\n\n // region Boiler Control\n\n /**\n * The boiler control system this device belongs to.\n */\n @belongsTo('automation/boiler-control-system', { async: true, inverse: null })\n declare boilerControlSystem: AsyncBelongsTo;\n\n /**\n * The valve switches associated with the thermostat.\n */\n @hasMany('devices/valve-switch', { async: true, inverse: 'thermostat' })\n declare valveSwitches: AsyncHasMany;\n\n // endregion\n\n // region Thermostat Grouping\n\n /**\n * Whether the thermostat is controlled by another thermostat.\n */\n @attr('boolean', { defaultValue: false })\n declare isControlled: boolean;\n\n /**\n * The thermostats that this thermostat controls\n */\n @hasMany('devices/thermostat', { async: true, inverse: null })\n declare controlledThermostats: AsyncHasMany;\n\n // endregion\n\n /**\n *The Peak Protect\n */\n @belongsTo('automation/peak-protect', { async: true, inverse: 'thermostat' })\n declare peakProtect: AsyncBelongsTo;\n\n // region Supported Features\n\n /**\n * Whether the thermostat supports setpoints.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSetpoints: boolean;\n\n /**\n * Whether the thermostat is a pool controller.\n */\n @attr('boolean', { defaultValue: false })\n declare isPoolController: boolean;\n\n /**\n * Whether the thermostat supports advanced configuration.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAdvancedConfiguration: boolean;\n\n /**\n * Whether the thermostat supports the off temp mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsOffMode: boolean;\n\n /**\n * Whether the thermostat supports the heat temp mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsHeatMode: boolean;\n\n /**\n * Whether the thermostat supports the cool temp mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsCoolMode: boolean;\n\n /**\n * Whether the thermostat supports the auto temp mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAutoMode: boolean;\n\n /**\n * Whether the thermostat supports the Smart Schedule mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSmartSchedules: boolean;\n\n /**\n * Whether the thermostat supports the aux heat temp mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAuxHeatMode: boolean;\n\n /**\n * Whether the thermostat supports schedules.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSchedules: boolean;\n\n /**\n * Whether the thermostat supports fan mode control.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsFanMode: boolean;\n\n /**\n * Whether the thermostat supports running the fan indefinitely.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsIndefiniteFanOn: boolean;\n\n /**\n * The fan mode durations that the thermostat supports\n */\n @attr('array', {\n defaultValue() {\n return [1, 2, 3, 24];\n }\n })\n declare supportedFanDurations: number[];\n\n /**\n * Whether the thermostat supports the circulate fan mode regardless of temp mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsCirculateFanModeAlways: boolean;\n\n /**\n * Whether the thermostat supports the circulate fan mode when in OFF mode.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsCirculateFanModeWhenOff: boolean;\n\n /**\n * Whether the thermostat supports local display locking.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsLocalDisplayLocking: boolean;\n\n /**\n * Whether the thermostat supports partial local display locking.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsPartialLocalDisplayLocking: boolean;\n\n /**\n * Whether the thermostat supports HVAC Analytics.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsHvacAnalytics: boolean;\n\n /**\n * Whether the thermostat supports third party settings.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsThirdPartySettings: boolean;\n\n /**\n * The description for third party settings URL.\n */\n @attr('string', { defaultValue: '' })\n declare thirdPartySettingsUrlDesc: string;\n\n /**\n * The URL for third party settings.\n */\n @attr('string', { defaultValue: '' })\n declare thirdPartySettingsUrl: string;\n\n // endregion\n\n // region Pending commands\n\n /**\n * Does the thermostat have a pending temp mode change?\n */\n @attr('boolean', { defaultValue: false })\n declare hasPendingTempModeChange: boolean;\n\n /**\n * Does the thermostat have a pending setpoint change?\n */\n @attr('boolean', { defaultValue: false })\n declare hasPendingSetpointChange: boolean;\n\n /**\n * Property containing the collection of suggested rules for this thermostat.\n */\n @belongsTo('devices/thermostat-rule-suggestions-info', { async: true, inverse: null })\n declare ruleSuggestionsInfo: AsyncBelongsTo;\n\n /**\n * The thermostat settings template applied to this thermostat.\n */\n @belongsTo('enterprise/settings/thermostat-settings-template', { async: true, inverse: 'thermostats' })\n declare thermostatSettingsTemplate: AsyncBelongsTo;\n\n /** @override */\n @computed('id')\n get sortId(): Promise {\n return Promise.resolve(getGlobalDeviceIdNumber(this.id));\n }\n\n /** @override */\n get isThermostat(): boolean {\n return true;\n }\n\n /**\n * The temperature text for the forwarding ambient temperature.\n */\n @computed('forwardingAmbientTemp')\n get forwardingTemperatureText(): string | SafeString {\n return this.getTemperatureStateText(this.forwardingAmbientTemp);\n }\n\n /**\n * The heat setpoint to be displayed based on any recent adjustments.\n */\n @computed('heatSetpoint', 'desiredHeatSetpoint')\n get displayHeatSetpoint(): number {\n return getSetPoint.call(this, TYPE_HEAT);\n }\n\n /**\n * The cool setpoint to be displayed based on any recent adjustments.\n */\n @computed('coolSetpoint', 'desiredCoolSetpoint')\n get displayCoolSetpoint(): number {\n return getSetPoint.call(this, TYPE_COOL);\n }\n\n /**\n * The setpoint to be displayed based on state and any recent adjustments.\n */\n @computed('state', 'targetState', 'inferredState', 'displayHeatSetpoint', 'displayCoolSetpoint')\n get displaySetpoint(): number {\n const { state } = this.getInferredState();\n return get(this, `display${hasHeatSetpoint(state) ? 'Heat' : 'Cool'}Setpoint`);\n }\n\n /**\n * Does the thermostat have a heat setpoint that is currently being changed?\n */\n @computed('displayHeatSetpoint', 'desiredHeatSetpoint')\n get hasDirtyHeatSetpoint(): boolean {\n return hasDirtySetpoint.call(this, TYPE_HEAT);\n }\n\n /**\n * Does the thermostat have a cool setpoint that is currently being changed?\n */\n @computed('displayCoolSetpoint', 'desiredCoolSetpoint')\n get hasDirtyCoolSetpoint(): boolean {\n return hasDirtySetpoint.call(this, TYPE_COOL);\n }\n\n /**\n * Does the thermostat have a setpoint that is currently being changed?\n */\n @or('hasDirtyHeatSetpoint', 'hasDirtyCoolSetpoint')\n declare hasDirtySetpoint: boolean;\n\n /**\n * The collection of sensors (including the thermostat) that are available to drive the HVAC system for this thermostat.\n */\n @computed('id', 'system.remoteTemperatureSensors.@each.thermostat')\n get availableSensors(): RemoteTemperatureSensorModel[] {\n const id = this.id;\n return (\n (get(this, 'system.remoteTemperatureSensors' as keyof ThermostatModel) as RemoteTemperatureSensorModel[]) ||\n []\n ).filter((s: RemoteTemperatureSensorModel) => {\n const { id: sensorId, thermostat: pairedThermostat } = s.getProperties('id', 'thermostat');\n return sensorId === id || !get(pairedThermostat, 'id') || get(pairedThermostat, 'id') === id;\n });\n }\n\n /**\n * The collection of sensors (including the thermostat) that are currently driving the HVAC system.\n */\n @filterBy('remoteTemperatureSensors', 'tempForwardingActive')\n declare activeSensors: RemoteTemperatureSensorModel[];\n\n // endregion\n // region Boiler Control\n\n /**\n * Intermediary property to retrieve paired valve switch descriptions.\n */\n @computed('valveSwitches.@each.description')\n get valveSwitchesDescriptions(): string[] {\n return (this.valveSwitches || []).map((valveSwitch) => valveSwitch.description);\n }\n\n // endregion\n\n /** @override */\n @computed(\n 'activeState',\n 'animationState',\n 'displaySetpoint',\n 'hasPendingSetpointChange',\n 'isPoolController',\n 'intl.t'\n )\n get stateText(): string | SafeString {\n const state = this.activeState;\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return this.intl.t('generic.loading');\n }\n\n return this.getStateTextFn()(\n state,\n this.intl.t.bind(this.intl),\n this.getInferredState().state,\n this.displaySetpoint,\n this.isPoolController\n );\n }\n\n /** @override */\n @computed('activeState', 'intl.t')\n get simpleStateText(): SafeString | string {\n return getThermostatSimpleStateText(this.activeState, this.intl.t.bind(this.intl));\n }\n\n /** @override */\n @computed('displayDate', 'isPoolController', 'rtsIssueText', 'stateText', 'temperatureText')\n get stateTooltip(): string | SafeString {\n let baseValue = super.stateTooltip as string;\n\n // This is so hacky. This won't be necessary once Pool Control is separate from Thermostat.\n if (this.isPoolController) {\n baseValue = baseValue.replace('Cool', 'Heat');\n }\n\n if (this.isInUnknownState()) {\n return baseValue;\n }\n\n return htmlSafe(\n [\n this.intl.t('home.thermostats.insideTemp', {\n temperature: this.temperatureText.toString()\n }),\n baseValue\n ].join(', ')\n );\n }\n\n /** @override */\n @computed('state', 'targetState', 'inferredState', 'animationState')\n get css(): string {\n // Auto mode will use heat or cool colors based on the inferred mode\n const { state } = this.getInferredState();\n\n // Is the model loading?\n if (state === LOADING_STATE) {\n return 'loading';\n }\n\n return this.getStateCssFn()(this.mapPoolControllerState(state));\n }\n\n /**\n * Does the thermostat support the state as a temp mode?\n */\n supportsTempMode(state: number): boolean {\n return get(this, `supports${capitalize(getThermostatStateKey(state))}Mode` as keyof ThermostatModel) as boolean;\n }\n\n /**\n * If the thermostat is not malfunctioning, return the inferred state.\n */\n getInferredState(): { state: number; inTransition: boolean } {\n const { inTransition } = this.getState(),\n { targetState, desiredState } = this;\n let { state } = this.getState();\n\n if (state !== Unknown) {\n if (inTransition) {\n state = targetState !== undefined ? targetState : desiredState;\n }\n\n if (state === Auto) {\n state = this.inferredState;\n }\n }\n\n return { state, inTransition };\n }\n\n /**\n * Get the min or max setpoint boundary for a given state.\n */\n getSetpointBoundary(boundaryType: string, state?: number): number | undefined {\n if (state === undefined) {\n state = this.getInferredState().state;\n }\n\n if (!hasSetpoint(state)) {\n return undefined;\n }\n\n return get(\n this,\n `${boundaryType}${capitalize(getThermostatStateKey(state))}Setpoint` as keyof ThermostatModel\n ) as number | undefined;\n }\n\n /** @override */\n getStateCssFn(): (...args: unknown[]) => string {\n return getThermostatStateCSS;\n }\n\n /**\n * Maps pool controller state for css purposes\n */\n mapPoolControllerState(state: number): number {\n if (!this.isPoolController) {\n return state;\n }\n\n // For pool controllers, Cool mode -> Spa heating,\n // so we want to use the css/iconography for heat mode\n return state === Cool ? Heat : state;\n }\n\n /** @override */\n getStateTextFn(): (...args: unknown[]) => string | SafeString {\n return getThermostatStateText;\n }\n\n /** @override */\n getUnknownState(): number {\n return Unknown;\n }\n\n /**\n * Returns the icon to display for the current thermostat state.\n */\n getStateIcon(colored = false): string {\n const state = this.activeState,\n icon = getThermostatStateIcon(state);\n\n if (state === Auto && colored) {\n return icon + '-colored';\n }\n\n return icon;\n }\n\n /**\n * Returns the 'on' class if the thermostat is in Heat or Cool mode, so the\n * state icon can be appropriately colored.\n */\n getStateIconClass(): string {\n return (\n {\n [Heat]: 'on',\n [Cool]: 'on'\n } as Record\n )[this.activeState];\n }\n\n /**\n * The name for the schedule icon.\n */\n scheduleIconName = 'schedule';\n\n /**\n * The class used on the schedule icon.\n */\n @computed('scheduleMode')\n get scheduleClass(): string {\n return this.scheduleMode ? 'on' : 'off';\n }\n\n /**\n * The name for the fan icon.\n */\n @computed('fanMode')\n get fanIconName(): string {\n return `fan-${getFanStateInfo.call(this, 'on', 'off', 'off')}`;\n }\n\n /**\n * The class used on the fan icon.\n */\n @computed('fanMode')\n get fanClass(): string {\n return getFanStateInfo.call(this, 'fan-running', 'on', 'off');\n }\n\n /**\n * Whether we want to show the RTS icon.\n */\n @computed('supportsPairing', 'activeState', 'availableSensors.length')\n get showRts(): boolean {\n return (\n this.supportsPairing &&\n this.activeState !== Off &&\n !!get(this, 'availableSensors.length' as keyof ThermostatModel)\n );\n }\n\n /**\n * The name for the RTS icon.\n */\n @computed('hasRtsIssue')\n get rtsIconName(): string {\n return this.hasRtsIssue ? 'issue' : 'remote-temperature';\n }\n\n /**\n * The class used on the RTS icon.\n */\n @computed('activeSensors.length', 'hasRtsIssue')\n get rtsClass(): string {\n return `rts ${get(this, 'activeSensors.length' as keyof ThermostatModel) && !this.hasRtsIssue ? 'on' : 'off'}`;\n }\n\n /**\n * The name for the local display locking icon.\n */\n @computed('localDisplayLockingMode')\n get localDisplayLockingIconName(): string {\n return (\n {\n [Disabled]: 'circle-o-check',\n [Enabled]: 'access-none',\n [Partial]: 'access-partial'\n } as Record\n )[this.localDisplayLockingMode];\n }\n\n /**\n * The class used for the local display locking icon.\n * Note that because we want the icon to be colored when the setting is at full local access,\n * we return 'on' for Disabled local locking (which may not be intuitive at first glance).\n */\n @computed('activeState', 'localDisplayLockingMode')\n get localDisplayLockingClass(): string {\n // Since we still show this icon even when the thermostat is Unknown/Off, make sure we don't color\n // it in those states.\n const activeState = this.activeState;\n if (activeState === Unknown || activeState === Off) {\n return 'off';\n }\n\n return this.localDisplayLockingMode === Disabled ? 'on' : 'off';\n }\n\n // region setpoint value text\n\n @computed('homeCoolSetpoint')\n get homeCoolSetpointText(): SetpointText {\n return this.getSetPointStateText(this.homeCoolSetpoint);\n }\n\n @computed('homeHeatSetpoint')\n get homeHeatSetpointText(): SetpointText {\n return this.getSetPointStateText(this.homeHeatSetpoint);\n }\n\n @computed('awayCoolSetpoint')\n get awayCoolSetpointText(): SetpointText {\n return this.getSetPointStateText(this.awayCoolSetpoint);\n }\n\n @computed('awayHeatSetpoint')\n get awayHeatSetpointText(): SetpointText {\n return this.getSetPointStateText(this.awayHeatSetpoint);\n }\n\n @computed('sleepCoolSetpoint')\n get sleepCoolSetpointText(): SetpointText {\n return this.getSetPointStateText(this.sleepCoolSetpoint);\n }\n\n @computed('sleepHeatSetpoint')\n get sleepHeatSetpointText(): SetpointText {\n return this.getSetPointStateText(this.sleepHeatSetpoint);\n }\n\n /**\n * Get the formattted text for a setpoint temperature with a degree sign\n * @param value the number to be formatted\n * @returns a string or SafeString with setpoint text to be displayed\n */\n\n private getSetPointStateText(value: number): SetpointText {\n return htmlSafe(this.getValueStateText(value ?? '--', 'valueDegree'));\n }\n\n // region custom api calls\n\n /** @override */\n executeStateChange(\n _: number,\n statePollOnly: boolean,\n options: Record\n ): OptionalAsyncModelPayload {\n return this.changeState('setState', options, statePollOnly, 'changingStateFailed', options);\n }\n\n /**\n * Set thermostat mode\n */\n setMode(desiredState: number): void {\n // Long delay for changing state so that other operations can be taken\n addStateChanges.call(this, { desiredState }, MODE_CHANGE_TIMEOUT_MS);\n }\n\n /**\n * Sets the heat setpoint.\n */\n setHeatSetpoint(desiredHeatSetpoint: number): void {\n this.setSetpoints({ desiredHeatSetpoint });\n }\n\n /**\n * Sets the cool setpoint.\n */\n setCoolSetpoint(desiredCoolSetpoint: number): void {\n this.setSetpoints({ desiredCoolSetpoint });\n }\n\n /**\n * Set thermostat setpoints\n */\n setSetpoints(setpoints: { desiredCoolSetpoint?: number; desiredHeatSetpoint?: number }): void {\n addStateChanges.call(this, setpoints, SETPOINT_CHANGE_TIMEOUT_MS);\n }\n\n /**\n * Set home/sleep/away thermostat setpoints\n */\n setSetpointsOnSetpointType(statusSetpoints: {\n heatSetpointOnSetpointType: number;\n coolSetpointOnSetpointType: number;\n thermostatSetpointType: number;\n }): void {\n addStateChanges.call(this, statusSetpoints, SETPOINT_CHANGE_TIMEOUT_MS);\n }\n\n /**\n * Sets the schedule mode.\n */\n setScheduleMode(desiredScheduleMode: number): void {\n addStateChanges.call(this, { desiredScheduleMode }, SCHEDULE_CHANGE_TIMEOUT_MS);\n }\n\n /**\n * Sets the fan mode.\n */\n setFanMode(desiredFanMode: number, desiredFanDuration: number): void {\n addStateChanges.call(\n this,\n {\n desiredFanMode,\n desiredFanDuration\n },\n FAN_CHANGE_TIMEOUT_MS\n );\n }\n\n /**\n * Sets the controlling remote temperature sensors.\n */\n setRts(desiredRts: string[]): void {\n addStateChanges.call(this, { desiredRts }, RTS_CHANGE_TIMEOUT_MS);\n // eslint-disable-next-line ember/no-get\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n later(\n this,\n () =>\n (\n get(\n this,\n 'system.remoteTemperatureSensors' as keyof ThermostatModel\n ) as RemoteTemperatureSensorModel\n ).reload(),\n RTS_CHANGE_TIMEOUT_MS + 1000\n );\n }\n\n /**\n * Sets the local display locking mode.\n */\n setLocalDisplayLockingMode(desiredLocalDisplayLockingMode: number): void {\n addStateChanges.call(this, { desiredLocalDisplayLockingMode }, LOCKING_CHANGE_TIMEOUT_MS);\n }\n\n /**\n * Start the thermostat setup wizard.\n */\n startWizard(): void {\n this.submitCustomApiCall('startWizard').then((ret) => this.navigation.transitionToRouteId(ret));\n }\n\n /**\n * The title text for the schedule button.\n */\n getScheduleTitle(): string {\n const { intl } = this;\n\n if (this.activeState === Off) {\n return intl.t(`${localePath}off`);\n }\n\n return intl.t(`${localePath}scheduleState`, {\n state: this.scheduleTitleShort\n });\n }\n\n /**\n * Gets the short version of the schedule title.\n */\n @computed('scheduleMode')\n get scheduleTitleShort(): string {\n return this.intl.t(`${localePath}schedule${getThermostatScheduleModeKey(this.scheduleMode)}`);\n }\n\n /**\n * The title text for the fan button.\n */\n getFanTitle(): string {\n const translationPath = `${localePath}fanState${this.isPoolController ? 'Pool' : ''}`,\n { intl } = this;\n\n return intl.t(translationPath, {\n state: intl.t(`${localePath}${getThermostatFanModeKey(this.fanMode)}`)\n });\n }\n\n /**\n * The title text for the local display locking button.\n */\n getLocalDisplayLockingTitle(): string {\n return this.intl.t(\n `${localePath}localDisplayLocking${getLocalDisplayLockingModeKey(this.localDisplayLockingMode)}`\n );\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/thermostat': ThermostatModel;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseDevice from './base-device';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type BoilerControlSystemModel from '../automation/boiler-control-system';\nimport type ThermostatModel from './thermostat';\n\n/**\n * @classdesc\n * Valve Switch device model.\n */\nexport default class ValveSwitch extends BaseDevice {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'valveSwitches' })\n declare system: AsyncBelongsTo;\n\n /**\n * The boiler control system this device belongs to.\n */\n @belongsTo('automation/boiler-control-system', { async: true, inverse: null })\n declare boilerControlSystem: AsyncBelongsTo;\n\n /**\n * The thermostat associated with the valve switch.\n */\n @belongsTo('devices/thermostat', { async: true, inverse: 'valveSwitches' })\n declare thermostat: AsyncBelongsTo;\n\n /** @override */\n getStateCssFn(): () => string {\n return () => '';\n }\n\n /** @override */\n getStateTextFn(): () => string {\n return () => '';\n }\n\n /** @override */\n getUnknownState(): number {\n return 0;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/valve-switch': ValveSwitch;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n *\n * Video device model.\n */\nexport default class VideoDevice extends BaseManagedDevice {\n /**\n * Is this device a channel?\n */\n @attr('boolean', { defaultValue: false })\n declare isChannel: boolean;\n\n /**\n * Is this video device a doorbell camera?\n */\n @attr('boolean', { defaultValue: false })\n declare isDoorbellCamera: boolean;\n\n /**\n * Does this video device have a clip age limit?\n */\n @attr('boolean', { defaultValue: false })\n declare hasClipAgeLimit: boolean;\n\n /**\n * The parent mac of the the sensor if this camera is part of a multi sensor\n */\n @attr('string', { defaultValue: '' })\n declare onvifMultisensorParentMac: string;\n\n /**\n * The number of sensors on the multisensor, is 1 if this camera is not part of a multisensor\n */\n @attr('number', { defaultValue: 1 })\n declare numberOfSensorsOnMultisensor: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/video-device': VideoDevice;\n }\n}\n","import BaseManagedDevice from './base-managed-device';\n\n/**\n * @classdesc\n *\n * Voice Assistance (aka Control) Device model.\n */\nexport default class VoiceAssistanceDevice extends BaseManagedDevice {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/voice-assistance-device': VoiceAssistanceDevice;\n }\n}\n","import { hasMany, attr, belongsTo } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { gt } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Gallon, Liter } from '../../enums/VolumeUnits';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type WaterValve from 'customer-site/models/devices/water-valve';\nimport type System from 'customer-site/models/systems/system';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\nimport type { SafeString } from 'handlebars';\n\n/**\n * Water Meter device model.\n * @classdesc\n */\nexport default class WaterMeter extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'waterMeters' })\n declare system: AsyncBelongsTo;\n\n @attr('boolean', { defaultValue: true })\n declare isWaterMeter: boolean;\n\n override get canChangeState(): boolean {\n return false;\n }\n\n /** @override **/\n getStateTextFn(): (...args: unknown[]) => string | SafeString {\n return () => '';\n }\n\n /** @override */\n get stateText(): string | SafeString {\n return this.getStateTextFn()();\n }\n\n /** @override */\n isInTransition(): boolean {\n return true;\n }\n\n /**\n * Average water usage over last 30 days, reported in gallons or litres based on VolumeUnit value\n * Will be undefined if insufficent data points to find average.\n */\n @attr('number')\n declare averageDailyWaterUsage: number;\n\n /**\n * Meter's water usage today, reported in gallons or litres based on VolumeUnit value\n */\n @attr('number', { defaultValue: 0 })\n declare waterUsageToday: number;\n\n /**\n * Minimum water meter reading value to be displayed\n */\n @attr('number', { defaultValue: 0 })\n declare dailyUsageDisplayMinimum: number;\n\n /**\n * Maximum water meter reading value to be displayed\n */\n @attr('number', { defaultValue: 500 })\n declare dailyUsageDisplayMaximum: number;\n\n /**\n * List of meter related trouble conditions passed down from server\n */\n @hasMany('trouble-conditions/trouble-condition', { async: true, inverse: null })\n declare waterIssues: AsyncHasMany;\n\n /**\n * The units used for water meter readings, defaulting to gallons.\n */\n @attr('number', { defaultValue: Gallon })\n declare volumeUnit: number;\n\n /**\n * Boolean of whether or not the device requires calibration setup, defaulting to true.\n */\n @attr('boolean', { defaultValue: true })\n declare requiresCalibrationSetup: boolean;\n\n /**\n * Boolean of whether device has a valve associate to it.\n */\n @attr('boolean', { defaultValue: false })\n declare hasValve: boolean;\n\n /**\n * Computed property to determine whether this water meter has water issues\n */\n @computed('waterIssues.[]')\n get hasWaterIssues(): Promise {\n return (async () => {\n const { length } = await this.waterIssues;\n return length > 0;\n })();\n }\n\n /**\n * Computed property that returns a string containing the meter's most severe issue's description and start time,\n * based on whether the meter has active water issues.\n */\n @computed('hasWaterIssues', 'stateInfo.stateTransitionDate', 'waterIssues.firstObject.extraData.description')\n get issueDescription(): Promise {\n return (async () => {\n return (await this.hasWaterIssues)\n ? `${await this.waterIssues.firstObject?.extraData?.description} ${await get(\n this,\n 'stateInfo.stateTransitionDate' as keyof WaterMeter\n )}`.toUpperCase()\n : '';\n })();\n }\n\n /**\n * Computed property that returns the string identifier for the issue icon if the meter has water issues.\n */\n @computed('hasWaterIssues')\n get issueIcon(): Promise {\n return (async () => {\n return (await this.hasWaterIssues) ? 'issue' : null;\n })();\n }\n\n /**\n * Computed property based on passed down VolumeUnit to determine which unit text should be displayed under the\n * water meter's circle gauge.\n */\n @computed('volumeUnit')\n get volumeUnits(): string {\n return (\n {\n [Gallon]: this.intl.tc(this, 'gallons'),\n [Liter]: this.intl.tc(this, 'liters')\n } as Record\n )[this.volumeUnit];\n }\n\n /**\n * Computed property based on passed down VolumeUnit to determine which unit text should be displayed under the\n * water meter's circle gauge.\n */\n @computed('volumeUnit')\n get volumeUnitsShortForm(): string {\n return (\n {\n [Gallon]: this.intl.tc(this, 'gallonsShortForm'),\n [Liter]: this.intl.tc(this, 'litersShortForm')\n } as Record\n )[this.volumeUnit];\n }\n\n /**\n * Computed property that is essentially just a synchronous version of hasWaterIssues, returns true if the issue icon\n * should be displayed.\n */\n @gt('waterIssues.length', 0)\n declare displayIssueIcon: boolean;\n\n /**\n * Computed property that returns a string containing either a waterIssue's description or the meters water usage + units\n */\n @computed('hasWaterIssues', 'issueDescription', 'volumeUnit', 'volumeUnitsShortForm', 'waterUsageToday')\n get meterStatusListViewText(): Promise {\n return (async () => {\n return (await this.hasWaterIssues)\n ? await this.issueDescription\n : `${this.waterUsageToday} ${this.volumeUnitsShortForm}`;\n })();\n }\n\n /**\n * Computed property that returns a string containing a waterIssue's description only\n */\n @computed('hasWaterIssues', 'issueDescription')\n get meterStatusIconViewText(): Promise {\n return (async () => {\n return (await this.hasWaterIssues) ? await this.issueDescription : '';\n })();\n }\n\n /**\n * Function that pauses the meter buzzer\n */\n pauseBuzzer(): Promise<{ value: string } | void> {\n return this.submitCustomApiCall<{ value: string }>('pauseBuzzer', 'POST');\n }\n\n /**\n * Returns the meter's associated water valve if it exists\n */\n @computed('id', 'system.waterValves.[]')\n get pairedWaterValve(): WaterValve | undefined {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Both `system` and `waterValves` are async, so this should be replaced with `return (await (await this.system).waterValves).find(({ id }) => id === this.id);`.\n return (get(this.system, 'waterValves') || []).findBy('id', this.id);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/water-meter': WaterMeter;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { Unknown } from '../../enums/SensorStatus';\nimport { getWaterSensorStateCSS } from '../../utils/water-sensors';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * WaterSensor device model.\n * @classdesc\n */\nexport default class WaterSensor extends BaseManagedDevice {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'waterSensors' })\n declare system: AsyncBelongsTo;\n\n override get canChangeState(): boolean {\n return false;\n }\n\n /** @override **/\n getStateCssFn(): (...args: unknown[]) => string {\n return getWaterSensorStateCSS;\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /** @override **/\n @attr('string', { defaultValue: '' })\n declare displayStateText: string;\n\n /**\n * The allowed device naming format.\n */\n @attr('number', { defaultValue: 0 })\n declare sensorNamingFormat: number;\n\n @computed('displayStateText')\n get stateText(): string {\n return this.displayStateText;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/water-sensor': WaterSensor;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Open, Closed, Unknown } from '../../enums/WaterValveStatus';\nimport { getWaterValveStateCSS, getWaterValveStateText } from '../../utils/water-valves';\nimport BaseManagedDevice from './base-managed-device';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type WaterMeter from 'customer-site/models/devices/water-meter';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * WaterValve device model.\n * @classdesc\n */\nexport default class WaterValveModel extends BaseManagedDevice {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'waterValves' })\n declare system: AsyncBelongsTo;\n\n @attr('boolean', { defaultValue: true })\n declare isWaterValve: boolean;\n\n /**\n * The total number of water sensors\n */\n @attr('number', { defaultValue: 0 })\n declare totalSensors: number;\n\n /**\n * The number of water sensors that are active (wet)\n */\n @attr('number', { defaultValue: 0 })\n declare activeSensors: number;\n\n /** @override **/\n getStateCssFn(): () => string {\n return this.getRefreshStateFn(getWaterValveStateCSS, 'unknown');\n }\n\n /** @override **/\n getStateTextFn(): () => string {\n return this.getRefreshStateFn(getWaterValveStateText, this.intl.t('generic.updating'));\n }\n\n /** @override **/\n getUnknownState(): number {\n return Unknown;\n }\n\n /**\n * @override\n */\n executeStateChange(desiredState: number, statePollOnly: boolean): OptionalAsyncModelPayload {\n if (desiredState === Open) {\n return this.open(statePollOnly);\n }\n\n if (desiredState === Closed) {\n return this.close(statePollOnly);\n }\n\n console.error('Water valve model method not implemented for desired state', desiredState);\n return Promise.reject();\n }\n\n /**\n * Allows both the meter and value to be updated together.\n * If no paired meter is found, only this valve will be updated.\n * /\n /** @override **/\n refreshState(sendCommands = true): OptionalAsyncModelPayload {\n const { pairedWaterMeter } = this;\n const result = super.refreshState(true);\n pairedWaterMeter?.refreshState(sendCommands);\n return result;\n }\n\n // region api calls\n\n /**\n * Opens the water valve\n */\n open(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('open', Open, statePollOnly, 'openingWaterValveFailed');\n }\n\n /**\n * Closes the water valve\n */\n close(statePollOnly = false): OptionalAsyncModelPayload {\n return this.changeState('close', Closed, statePollOnly, 'closingWaterValveFailed');\n }\n\n /**\n * Returns the valve's associated water meter if it exists\n */\n @computed('id', 'system.waterMeters.@each.id')\n get pairedWaterMeter(): WaterMeter | undefined {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Both `system` and `waterMeters` are async, so this should be replaced with `return (await (await this.system).waterMeters).find(({ id }) => id === this.id);`.\n return (get(this.system, 'waterMeters') || []).findBy('id', this.id);\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/water-valve': WaterValveModel;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseLight from './base-light';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * X10 Light device model.\n * @classdesc\n */\nexport default class X10light extends BaseLight {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'x10Lights' })\n declare system: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'devices/x10light': X10light;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type DiscoverArticleItem from './discover-article-item';\n\n/**\n * @classdesc\n * Model representing a grouped list of Discover articles\n */\nexport default class DiscoverArticleGroupItem extends BaseModel {\n /**\n * An array of DiscoverArticleItems\n */\n @hasMany('discover/discover-article-item', { async: false, inverse: null })\n declare articleList: SyncHasMany;\n\n /**\n * The name of the section the group is in. I.e. \"New\", \"Recommended\"\n */\n @attr('string')\n declare sectionName: string;\n\n /**\n * The id of the section the group is in\n */\n @attr('number')\n declare sectionId: number;\n\n /**\n * A Bool representing if there is more content to load\n */\n @attr('boolean')\n declare hasMoreContent: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'discover/discover-article-group-item': DiscoverArticleGroupItem;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Upsell } from '../../enums/ContentType';\n\n/**\n * @classdesc\n * Model representing an article that will be used by Discover\n */\nexport default class DiscoverArticleItem extends BaseModel {\n /**\n * String representing URL for the article's thumbnail\n */\n @attr('string')\n declare thumbnailUrl: string;\n\n /**\n * Alt Text for the thumbnail, will be empty if no alt text is supplied\n */\n @attr('string')\n declare altText: string;\n\n /**\n * String representing the unique identifier for the article, usually will be an int\n * Upsell will use a compound ID\n */\n @attr('string')\n declare articleId: string;\n\n /**\n * String representing the article title\n */\n @attr('string')\n declare title: string;\n\n /**\n * Bool representing if the article is less than or equal to 14 days old\n */\n @attr('boolean')\n declare newDesignation: boolean;\n\n /**\n * Enum for the content type. I.e. Feature, upsell, etc.\n */\n @attr('number')\n declare contentType: number;\n\n /**\n * Bool representing if the article is less than 28 days old\n */\n @attr('boolean')\n declare isNewArticle: boolean;\n\n get hasLegacyUpsellOffer(): boolean {\n const { contentType, articleId } = this;\n return contentType === Upsell && articleId.split('-').length === 2;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'discover/discover-article-item': DiscoverArticleItem;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The model for an action that can be executed in a Discover article\n */\nexport default class DiscoverContentAction extends BaseModel {\n /**\n * The action type\n */\n @attr('number')\n declare actionType: number;\n\n /**\n * The action details converted to a string\n */\n @attr('string')\n declare data: string;\n\n /**\n * The ID (CustomerPageUrlEnum or NativeViewEnum) of the page the action links to, if applicable\n */\n @attr('number')\n declare pageId: number;\n\n /**\n * True if the action links to a native view page\n */\n @attr('boolean')\n declare isNativeView: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'discover/discover-content-action': DiscoverContentAction;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { equal, or } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { ContentBlockSubtype } from '../../enums/ContentBlockSubType';\nimport { Title, Paragraph, BulletedList, Image, Video } from '../../enums/ContentBlockType';\n\n/**\n * @classdesc\n * The model for a block of Discover content\n */\nexport default class DiscoverContentBlock extends BaseModel {\n /**\n * The block's content type\n */\n @attr('number')\n declare blockType: number;\n\n /**\n * The sub type of this content block to futher differentiate between multiple.\n */\n\n @attr('number', { defaultValue: ContentBlockSubtype.Default })\n declare blockSubType: number;\n\n /**\n * The block's content converted to a string\n */\n @attr('string')\n declare data: string;\n\n /**\n * Any extra data associated with the content block (ex. alt text for images)\n */\n @attr('string')\n declare extraData: string;\n\n /**\n * Is the block the article's title?\n */\n @equal('blockType', Title)\n declare isTitle: boolean;\n\n /**\n * Is the block a paragraph of article text?\n */\n @equal('blockType', Paragraph)\n declare isParagraph: boolean;\n\n /**\n * Is the block a bulleted list?\n */\n @equal('blockType', BulletedList)\n declare isBulletedList: boolean;\n\n /**\n * Is the block an image?\n */\n @equal('blockType', Image)\n declare isImage: boolean;\n\n /**\n * Is the block a video?\n */\n @equal('blockType', Video)\n declare isVideo: boolean;\n\n /**\n * Is the block part of the article's body text?\n */\n @or('isParagraph', 'isBulletedList')\n declare isBodyText: boolean;\n\n @computed('blockSubType', 'isImage')\n get isUpsellProductStockImage(): boolean {\n const { isImage, blockSubType } = this;\n return isImage && blockSubType === ContentBlockSubtype.ImageProductStock;\n }\n\n /**\n * Returns the image alternative text (if the content block is an image)\n */\n @computed('isImage', 'extraData')\n get altText(): string {\n if (!this.isImage) {\n return '';\n }\n\n const extraDataParts = this.extraData?.split('|');\n\n return extraDataParts?.length === 2 && extraDataParts[0] === 'Informative' ? extraDataParts[1] : '';\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'discover/discover-content-block': DiscoverContentBlock;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type DiscoverContentAction from './discover-content-action';\nimport type DiscoverContentBlock from './discover-content-block';\n\n/**\n * @classdesc\n * The model for the Discover article content that will be rendered on the article's page\n */\nexport default class GetDiscoverArticleContentResult extends BaseModel {\n /**\n * String representing the article title\n */\n @attr('string')\n declare title: string;\n\n /**\n * The blocks of content contained in the Discover article\n */\n @hasMany('discover/discover-content-block', { async: false, inverse: null })\n declare blocks: SyncHasMany;\n\n /**\n * The actions associated with the Discover article\n */\n @hasMany('discover/discover-content-action', { async: false, inverse: null })\n declare actions: SyncHasMany;\n\n recordAction(actionType: number): Promise {\n return this.submitCustomApiCall(`action/${actionType}`);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'discover/get-discover-article-content-result': GetDiscoverArticleContentResult;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type DiscoverArticleGroupItem from './discover-article-group-item';\n\n/**\n * @classdesc\n * Get Discover dashboard result model\n */\nexport default class GetDiscoverDashboardResult extends BaseModel {\n /**\n * The list of article groups\n */\n @hasMany('discover/discover-article-group-item', { async: false, inverse: null })\n declare articleGroupList: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'discover/get-discover-dashboard-result': GetDiscoverDashboardResult;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Holds the trouble conditions for a given location.\n */\nexport default class EnterpriseTroubleIssuesInfo extends BaseModel {\n /**\n * The list of trouble issues for this location.\n */\n @attr('array')\n declare troubleIssues: string[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/enterprise-trouble-issues-info': EnterpriseTroubleIssuesInfo;\n }\n}\n","import BaseFilterCount from '../../filter/base-filter-count';\n\n/**\n * @classdesc\n * Holds the count associated with a particular filter.\n */\nexport default class FilterCount extends BaseFilterCount {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/filter-count': FilterCount;\n }\n}\n","import BaseFilterModel from '../../filter/base-filter-model';\n\n/**\n * @classdesc\n * Holds all the info for a Locations page filter.\n */\nexport default class Filter extends BaseFilterModel {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/filter': Filter;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type User from 'customer-site/models/users/user';\n\n/**\n * List of relationships that should be reloaded whenever we receive updated location data from the server.\n */\nconst reloadableRelationships: string[] = ['enterpriseUsers'];\n\n/**\n * @classdesc\n * Location\n */\nexport default class LocationUserInfoModel extends BaseModel {\n /**\n * The customerId for this location.\n */\n @attr('number')\n declare customerId: number;\n\n /**\n * List of users from group with access to the location.\n */\n @hasMany('users/user', { async: true, inverse: null })\n declare enterpriseUsers: AsyncHasMany;\n\n /**\n * List of users from group selected for a location.\n *\n * @type {Array}\n */\n @attr('array')\n declare userIdsWithAccess: string[];\n\n /**\n * List of user ids that cannot be selected.\n *\n * @type {Array}\n */\n @attr('array')\n declare unselectableUserIds: string[];\n\n /**\n * The list of user types corresponding to access point user type enums for filtering.\n */\n @attr('array')\n declare availableUserTypeFilters: number[];\n\n /**\n * Whether or not the system is full.\n *\n * @type {boolean}\n */\n @attr('boolean', { defaultValue: false })\n declare systemIsFull: boolean;\n\n /**\n * Reloads all relationships on the location.\n */\n reloadRelationships(): void {\n reloadableRelationships.forEach((property: keyof LocationUserInfoModel) => {\n (get(this, property) as BaseModel).reload();\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/location-user-info': LocationUserInfoModel;\n }\n}\n","import { belongsTo, hasMany, attr } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type AccessControlAccessPointDevice from 'customer-site/models/devices/access-control-access-point-device';\nimport type CarMonitor from 'customer-site/models/devices/car-monitor';\nimport type CommercialTemperatureSensor from 'customer-site/models/devices/commercial-temperature-sensor';\nimport type GarageDoor from 'customer-site/models/devices/garage-door';\nimport type Lock from 'customer-site/models/devices/lock';\nimport type MpersDevice from 'customer-site/models/devices/mpers-device';\nimport type Partition from 'customer-site/models/devices/partition';\nimport type Sensor from 'customer-site/models/devices/sensor';\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\nimport type WaterMeterModel from 'customer-site/models/devices/water-meter';\nimport type TemperatureSensorGroup from 'customer-site/models/home/temperatures/temperature-sensor-group';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type SdCardCamera from 'customer-site/models/video/devices/sd-card-camera';\nimport type Svr from 'customer-site/models/video/devices/svr';\nimport type EnterpriseTroubleIssuesInfo from './enterprise-trouble-issues-info';\nimport type OccupancyState from './occupancy-state';\nimport type SummaryPageDeviceInfo from './summary-page-device-info';\nimport type Tenant from './tenant';\nimport type UnattendedShowingSetting from './unattended-showing-setting';\n\n/**\n * List of relationships that should be reloaded whenever we receive updated location data from the server.\n */\nconst reloadableRelationships: string[] = [\n 'locks',\n 'accessControlAccessPointDevices',\n 'garageDoors',\n 'partitions',\n 'thermostats',\n 'sensors',\n 'occupancyState',\n 'commercialTemperatureSensors',\n 'temperatureSensorGroups',\n 'allSvrs',\n 'allCameras',\n 'allSdCardCameras',\n 'waterMeters',\n 'summaryPageDeviceInfo'\n];\n\n/**\n * @classdesc\n * Location\n */\nexport default class LocationModel extends BaseModel {\n /**\n * The unit's description (name).\n */\n @attr('string')\n declare description: string;\n\n /**\n * The name of the customer's company, if it exists.\n */\n @attr('string')\n declare customerCompanyName: string;\n\n /**\n * The customerId for this location.\n */\n @attr('number')\n declare customerId: number;\n\n /**\n * The associated groupId for this location, if one exists.\n */\n @attr('number')\n declare groupId: number;\n\n @belongsTo('enterprise/locations/enterprise-trouble-issues-info', { async: true, inverse: null })\n declare enterpriseTroubleIssuesInfo: AsyncBelongsTo;\n\n /**\n * The central station account number associated with this location, if one exists.\n */\n @attr('string')\n declare centralStationAccountNumber: string;\n\n /**\n * The name of the city (or regional equivalent) in which this location resides.\n */\n @attr('string')\n declare city: string;\n\n /**\n * The name of the state (or regional equivalent) in which this location resides.\n */\n @attr('string')\n declare state: string;\n\n /**\n * The name of the zip code (or regional equivalent) in which this location resides.\n */\n @attr('string')\n declare zipCode: string;\n\n /**\n * Whether the location is using a hub panel, and whether it's online or offline.\n */\n @attr('number')\n declare hubStatus: number;\n\n /**\n * Whether we should show the Move-Out option for the location. The location should be part of an occupied group\n * in order to show this.\n */\n @attr('boolean', { defaultValue: false })\n declare showMoveOutOption: boolean;\n\n /**\n * Whether we should show the Move-In option for the location. The location should be part of an vacant group\n * in order to show this.\n */\n @attr('boolean', { defaultValue: false })\n declare showMoveInOption: boolean;\n\n /**\n * Whether we should show the Manage Residents option for the location. The location should be part of an vacant group\n * in order to show this.\n */\n @attr('boolean', { defaultValue: false })\n declare showManageResidentsOption: boolean;\n\n /**\n * The current status of tenant turnover for the location.\n */\n @attr('number')\n declare tenantTurnoverStatus: number;\n\n /**\n * The failed step if tenant turnover status is failed for the location.\n */\n @attr('number')\n declare tenantTurnoverFailedStep: number;\n\n /**\n * Whether the mid-lease moves option is enabled for the PMS\n */\n @attr('boolean', { defaultValue: false })\n declare midLeaseMovesEnabled: boolean;\n\n /**\n * Whether we should show the new Manage Residents option for the location. The location should be part of an vacant group\n * in order to show this.\n */\n @attr('boolean', { defaultValue: false })\n declare manageResidentsV2Enabled: boolean;\n\n /**\n * Whether or not the user is moving tenants in or out of a location.\n */\n @attr('boolean', { defaultValue: false })\n declare isMovingTenants: boolean;\n\n /**\n * Thermostats within the location.\n */\n @hasMany('devices/thermostat', { async: true, inverse: null })\n declare thermostats: AsyncHasMany;\n\n /**\n * Water meters within the location.\n */\n @hasMany('devices/water-meter', { async: true, inverse: null })\n declare waterMeters: AsyncHasMany;\n\n @belongsTo('enterprise/locations/summary-page-device-info', { async: true, inverse: null })\n declare summaryPageDeviceInfo: AsyncBelongsTo;\n\n /**\n * Partitions for this location.\n */\n @hasMany('devices/partition', { async: true, inverse: null })\n declare partitions: AsyncHasMany;\n\n /**\n * Sensors for this location.\n */\n @hasMany('devices/sensor', { async: true, inverse: null })\n declare sensors: AsyncHasMany;\n\n /**\n * Access Control points for this location\n */\n @hasMany('devices/access-control-access-point-device', { async: true, inverse: null })\n declare accessControlAccessPointDevices: AsyncHasMany;\n\n /**\n * Model to store the Self-Guided Tours settings.\n */\n @belongsTo('enterprise/locations/unattended-showing-setting', { async: false, inverse: null })\n declare unattendedShowingSetting: UnattendedShowingSetting;\n\n /**\n * Locks for this location.\n */\n @hasMany('devices/lock', { async: true, inverse: null })\n declare locks: AsyncHasMany;\n\n /**\n * Garage doors for this location.\n */\n @hasMany('devices/garage-door', { async: true, inverse: null })\n declare garageDoors: AsyncHasMany;\n\n /**\n * The Occupancy State of this location.\n */\n @belongsTo('enterprise/locations/occupancy-state', { async: true, inverse: 'location' })\n declare occupancyState: AsyncBelongsTo;\n\n /**\n * The mPERS devices for this location.\n */\n @hasMany('devices/mpers-device', { async: true, inverse: null })\n declare mpersDevices: AsyncHasMany;\n\n /**\n * A list of all car monitors at this location.\n */\n @hasMany('devices/car-monitor', { async: true, inverse: null })\n declare allCarMonitors: AsyncHasMany;\n\n /**\n * The number of vehicles driven today at this location.\n */\n @attr('number')\n declare vehiclesDrivenToday: number;\n\n /**\n * The amount of fuel used today at this location. Is converted to local units.\n */\n @attr('number')\n declare fuelUsedToday: number;\n\n /**\n * The Fleet icon to use depending on the customer's ConnectedFleet(Beta) permission.\n */\n @attr('string')\n declare icon: string;\n\n /**\n * Commercial temperature sensors for this location\n */\n @hasMany('devices/commercial-temperature-sensor', { async: true, inverse: null })\n declare commercialTemperatureSensors: AsyncHasMany;\n\n /**\n * The temperature sensor groups for this location (only if it has SBTM)\n */\n @hasMany('home/temperatures/temperature-sensor-group', { async: true, inverse: null })\n declare temperatureSensorGroups: AsyncHasMany;\n\n /**\n * The earliest start to any currently active threshold breaks\n */\n @attr('date')\n declare earliestActiveThresholdBreak: Date;\n\n /**\n * A list of all cameras at this location\n */\n @hasMany('video/devices/camera', { async: true, inverse: null })\n declare allCameras: AsyncHasMany;\n\n /**\n * The number of doorbell cameras at this location\n */\n @attr('number')\n declare numDoorbell: number;\n\n /**\n * The number of security cameras at this location\n */\n @attr('number')\n declare numSecurity: number;\n\n /**\n * A list of all svrs at this location\n */\n @hasMany('video/devices/svr', { async: true, inverse: null })\n declare allSvrs: AsyncHasMany;\n\n /**\n * A list of all sd card cameras at this location (subset of allCameras)\n */\n @hasMany('video/devices/sd-card-camera', { async: true, inverse: null })\n declare allSdCardCameras: AsyncHasMany;\n\n /**\n * A list of all the tenants at this location.\n */\n @hasMany('enterprise/locations/tenant', { async: true, inverse: null })\n declare tenants: AsyncHasMany;\n\n /**\n * The max number of clips that can be stored at this location\n */\n @attr('number')\n declare videoQuotaClips: number;\n\n /**\n * The number of camera triggered clips at this location\n */\n @attr('number')\n declare cameraTriggeredClips: number;\n\n /**\n * The number of event triggered clips at this location\n */\n @attr('number')\n declare eventTriggeredClips: number;\n\n /**\n * The number of alarm triggered clips at this location\n */\n @attr('number')\n declare alarmTriggeredClips: number;\n\n /**\n * If the location is on track to exceed its clip limit\n */\n @attr('boolean')\n declare isExceedingClipRateLimit: boolean;\n\n /**\n * If the location has VHR access\n */\n @attr('boolean')\n declare hasVhrAccess: boolean;\n\n /**\n * Determines if the location has any fleet devices attached\n */\n @attr('boolean')\n declare hasFleetDevices: boolean;\n\n /**\n * A camera group representing the location\n */\n @belongsTo('video/camera-group', { async: false, inverse: null })\n declare cameraGroup: CameraGroup;\n\n /**\n * The page to go to for this location\n */\n @attr('number')\n declare singleSystemDestinationPage: number;\n\n /**\n * Whether or not the location is a common area.\n */\n @attr('boolean')\n declare isCommonArea: boolean;\n\n /**\n * Whether or not the location is a Wellness account.\n */\n @attr('boolean')\n declare isWellness: boolean;\n\n /**\n * Whether or not can specify location as a common area.\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeCommonArea: boolean;\n\n /**\n * Whether or not location can be edited by user.\n */\n @attr('boolean', { defaultValue: false })\n declare canEditLocation: boolean;\n\n /**\n * Whether or not the edit location page can be viewed by user.\n */\n @attr('boolean', { defaultValue: true })\n declare canViewEditLocationPage: boolean;\n\n /**\n * Whether or not user can view business hours section.\n */\n @attr('boolean', { defaultValue: false })\n declare canViewBusinessHours: boolean;\n\n /**\n * Whether or not user can view Self-Guided Tours settings.\n */\n @attr('boolean', { defaultValue: false })\n declare canViewUnattendedShowingSettings: boolean;\n\n /**\n * Whether or not user can edit Self-Guided Tours settings.\n */\n @attr('boolean', { defaultValue: false })\n declare canEditUnattendedShowingSettings: boolean;\n\n @attr('boolean', { defaultValue: false })\n declare canViewManageDevicesPage: boolean;\n\n /**\n * Whether or not the edit user section is hidden.\n */\n @attr('boolean', { defaultValue: false })\n declare userSectionHidden: boolean;\n\n /**\n * Whether or not the location's system mode is set to Lockdown.\n */\n @attr('boolean', { defaultValue: false })\n declare isInACLockdown: boolean;\n\n /**\n * Switches to the single-system context for this location.\n */\n selectSystemOrGroup(): Promise {\n return this.submitCustomApiCall('selectSystemOrGroup');\n }\n\n /**\n * Gets the history of open/close events for a location.\n */\n getOpenCloseHistory(): Promise> {\n return this.submitCustomApiCall>('getOpenCloseHistory', 'GET');\n }\n\n /**\n * Runs and returns the url for the Video Health Report\n */\n runVideoHealthReport(): Promise {\n return this.submitCustomApiCall('runVideoHealthReport', 'GET');\n }\n\n /**\n * Runs and returns the url for the Fleet Trip Report\n */\n runFleetTripReport(): Promise {\n return this.submitCustomApiCall('runFleetTripReport', 'GET');\n }\n\n /**\n * Reloads all relationships on the location.\n */\n reloadRelationships(): void {\n reloadableRelationships.forEach((property: keyof LocationModel) => {\n (get(this, property) as BaseModel).reload();\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/location': LocationModel;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type LocationModel from './location';\n\n/**\n * @classdesc\n * Holds all of the Occupancy State info for a given location.\n */\nexport default class OccupancyState extends BaseModel {\n /**\n * The location that this belongs to.\n */\n @belongsTo('enterprise/locations/location', { async: true, inverse: 'occupancyState' })\n declare location: AsyncBelongsTo;\n\n /**\n * The main description of the occupancy status (ie Occupied/Reserved/Not Ready/Ready, etc).\n */\n @attr('string')\n declare statusDescription: string;\n\n /**\n * An optional addendum for the status description.\n */\n @attr('string')\n declare statusAddendum: string;\n\n /**\n * The icon name for the occupancy status.\n */\n @attr('string')\n declare statusIcon: string;\n\n /**\n * Info about the check-in date.\n */\n @attr('string')\n declare checkInDate: string;\n\n /**\n * Info about the check-in time.\n */\n @attr('string')\n declare checkInTime: string;\n\n /**\n * Info about the check-out date.\n */\n @attr('string')\n declare checkOutDate: string;\n\n /**\n * Info about the check-out time.\n */\n @attr('string')\n declare checkOutTime: string;\n\n /**\n * Info shown in the location readiness column for the occupancy state.\n */\n @attr('string')\n declare locationReadinessDescription: string;\n\n /**\n * Secondary info shown in the location readiness column for the occupancy state.\n */\n @attr('string')\n declare locationReadinessAddendum: string;\n\n /**\n * The readiness states that can be manually altered for the location given its current state.\n */\n @attr('array')\n declare modifiableReadinessStates: number[];\n\n /**\n * The occupancy states that can be manually altered for the location given its current state.\n */\n @attr('array')\n declare modifiableOccupancyStates: number[];\n\n /**\n * Whether or not the Cleaned modifiable state is checked.\n */\n @attr('boolean')\n declare cleanedModifiableStateIsChecked: boolean;\n\n /**\n * Whether or not the Inspected modifiable state is checked.\n */\n @attr('boolean')\n declare inspectedModifiableStateIsChecked: boolean;\n\n /**\n * Whether or not the Occupied modifiable state is checked.\n */\n @attr('boolean')\n declare occupiedModifiableStateIsChecked: boolean;\n\n /**\n * Whether or not the Vacant modifiable state is checked.\n */\n @attr('boolean')\n declare vacantModifiableStateIsChecked: boolean;\n\n /**\n * Whether or not the location has a reservation scheduled.\n */\n @attr('boolean')\n declare reservationScheduled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/occupancy-state': OccupancyState;\n }\n}\n","import BaseSubFilter from '../../filter/base-sub-filter';\n\n/**\n * @classdesc\n * Holds all the info for an Ember Locations page sub-filter.\n */\nexport default class SubFilter extends BaseSubFilter {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/sub-filter': SubFilter;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type AccessControlAccessPointDevice from 'customer-site/models/devices/access-control-access-point-device';\nimport type GarageDoor from 'customer-site/models/devices/garage-door';\nimport type Lock from 'customer-site/models/devices/lock';\nimport type Partition from 'customer-site/models/devices/partition';\nimport type Sensor from 'customer-site/models/devices/sensor';\n\n/**\n * @classdesc\n * Layer for accessing devices on a given location on the summary page.\n */\nexport default class SummaryPageDeviceInfo extends BaseModel {\n /**\n * Partitions for this location.\n */\n @hasMany('devices/partition', { async: true, inverse: null })\n declare partitions: AsyncHasMany;\n\n /**\n * Sensors for this location.\n */\n @hasMany('devices/sensor', { async: true, inverse: null })\n declare sensors: AsyncHasMany;\n\n /**\n * Access Control points for this location\n */\n @hasMany('devices/access-control-access-point-device', { async: true, inverse: null })\n declare accessControlAccessPointDevices: AsyncHasMany;\n\n /**\n * Locks for this location.\n */\n @hasMany('devices/lock', { async: true, inverse: null })\n declare locks: AsyncHasMany;\n\n /**\n * Garage doors for this location.\n */\n @hasMany('devices/garage-door', { async: true, inverse: null })\n declare garageDoors: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/summary-page-device-info': SummaryPageDeviceInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Tenant\n */\nexport default class Tenant extends BaseModel {\n @service declare contextManager: ContextManager;\n\n /**\n * Whether or not the phone number field is required (eSuite is enabled).\n */\n @reads('contextManager.identityModel.selectedSystemGroup.isESuiteEnabled')\n declare requirePhoneNumber: boolean;\n\n /**\n * The unit's description (name).\n */\n @attr('string')\n declare firstName: string;\n\n /**\n * The unit's description (name).\n */\n @attr('string')\n declare lastName: string;\n\n /**\n * The unit's description (name).\n */\n @attr('string')\n declare emailAddress: string;\n\n /**\n * The unit's description (name).\n */\n @attr('string')\n declare phoneNumber: string;\n\n /**\n * Is the tenant selected to move out.\n */\n @attr('boolean')\n declare moveOut: boolean;\n\n /**\n * Whether this tenant is a valid one.\n */\n @computed(\n 'firstName',\n 'lastName',\n 'emailAddress',\n 'displayEmailErrorString',\n 'phoneNumber',\n 'requirePhoneNumber',\n 'displayPhoneErrorString'\n )\n get isTenantValid(): boolean {\n const {\n firstName,\n lastName,\n emailAddress,\n displayEmailErrorString,\n phoneNumber,\n requirePhoneNumber,\n displayPhoneErrorString\n } = this;\n return (\n !isEmpty(firstName) &&\n !isEmpty(lastName) &&\n !isEmpty(emailAddress) &&\n !displayEmailErrorString &&\n !(isEmpty(phoneNumber) && requirePhoneNumber) &&\n !displayPhoneErrorString\n );\n }\n\n /**\n * Returns whether we want to display an error for the email.\n */\n @computed('emailAddress')\n get displayEmailErrorString(): boolean {\n const { emailAddress } = this;\n // Show an error string if emailAddress is defined and its empty or an incorrect format.\n if (emailAddress === undefined) {\n return false;\n }\n\n const email = emailAddress.trim();\n return email === '' || !email.match(/\\S+@\\S+\\.\\S+/);\n }\n\n /**\n * Returns whether we want to display an error for the phone number.\n */\n @computed('requirePhoneNumber', 'phoneNumber')\n get displayPhoneErrorString(): boolean {\n const { requirePhoneNumber, phoneNumber } = this;\n // Because phoneNumber is optional (non-eSuite), we dont need to show an error string if it's undefined or empty.\n if (phoneNumber === undefined || phoneNumber === null || (!requirePhoneNumber && phoneNumber === '')) {\n return false;\n }\n\n // If its defined and not empty, we show the error string if phoneNumber is in an incorrect format.\n return !phoneNumber.trim().match(/^[+]?[(]?[0-9]{3}[)]?[-\\s.]?[0-9]{3}[-\\s.]?[0-9]{4,6}$/im);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/tenant': Tenant;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class UnattendedShowingSetting extends BaseModel {\n /**\n * The listing url of the Self-Guided Tours.\n */\n @attr('string', { defaultValue: '' })\n declare listingUrl: string;\n\n /**\n * The display name of the location.\n */\n @attr('string', { defaultValue: '' })\n declare displayName: string;\n\n /**\n * The address of the location.\n */\n @attr('string', { defaultValue: '' })\n declare address: string;\n\n /**\n * Number of bedrooms in the location.\n */\n @attr('number', { defaultValue: 0 })\n declare numberOfBedrooms: number;\n\n /**\n * Number of bathrooms in the location.\n */\n @attr('number', { defaultValue: 0 })\n declare numberOfBathrooms: number;\n\n /**\n * Rent price of the location.\n */\n @attr('number', { defaultValue: 0 })\n declare rent: number;\n\n /**\n * Image url or file name of the location's picture.\n */\n @attr('string', { defaultValue: '' })\n declare pictureImageUrlOrFileName: string;\n\n /**\n * Square feet of the location.\n */\n @attr('number', { defaultValue: 0 })\n declare squareFeet: number;\n\n /**\n * Whether or not the location is listed as a Self-Guided Tour.\n */\n @attr('boolean', { defaultValue: false })\n declare isListed: boolean;\n\n /**\n * File data url of the location's picture, empty if using image url.\n */\n @attr('string', { defaultValue: '' })\n declare pictureFileDataUrl: string;\n\n /**\n * Whether or not the location is listed as a Self-Guided Tour.\n */\n @attr('number', { defaultValue: 0 })\n declare upcomingAppointmentCount: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/locations/unattended-showing-setting': UnattendedShowingSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Auto Relock model.\n */\nexport default class AutoRelock extends BaseModel {\n /**\n * Whether or not the auto relock setting is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare autoRelockEnabled: boolean;\n\n /**\n * Auto relock delay minutes setting\n */\n @attr('number', { defaultValue: 60 })\n declare autoRelockDelayMinutes: number;\n\n /**\n * Whether or not the nightly auto lock setting for occupied properties is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare nightlyAutoLockOccupiedEnabled: boolean;\n\n /**\n * Whether or not the nightly auto lock setting for vacant properties is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare nightlyAutoLockVacantEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to\n */\n @attr('array')\n declare systemGroupIdsToChange: number[];\n\n /**\n * Whether or not this is a VRM user\n */\n @attr('boolean', { defaultValue: false })\n declare isVrm: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/auto-relock': AutoRelock;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Automatic Panel Arming model.\n */\nexport default class AutomaticPanelArming extends BaseModel {\n /**\n * Whether or not the automatic panel arm at a set time is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare nightlyArmEnabled: boolean;\n\n /**\n * The time to the arm the panel in minutes after midnight\n */\n @attr('number', { defaultValue: 0 })\n declare nightlyArmStartTimeMinutes: number;\n\n /**\n * Whether or not the automatic panel disarm when system open setting is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare autoDisarmAfterOpen: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/automatic-panel-arming': AutomaticPanelArming;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Automatically Enable Background Capture model.\n */\nexport default class AutomaticallyEnableBackgroundCapture extends BaseModel {\n /**\n * Whether or not the Automatically Enable Background Capture setting is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare enabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/automatically-enable-background-capture': AutomaticallyEnableBackgroundCapture;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Backup Code model.\n */\nexport default class BackupCode extends BaseModel {\n /**\n * Returns whether or not to store a backup code for guest users.\n */\n @attr('boolean', { defaultValue: false })\n declare storeBackupCodeEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/backup-code': BackupCode;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours customer logo\n */\nexport default class BaseCustomerLogo extends BaseModel {\n /**\n * Image url or file name of the customer logo for Self-Guided Tours.\n */\n @attr('string')\n declare imageUrlOrFileName: string;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n\n /**\n * File data of the customer logo for Self-Guided Tours, null if using image url.\n */\n @attr('string')\n declare fileDataUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/base-customer-logo': BaseCustomerLogo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Base Support Phone\n */\nexport default class BaseSupportPhone extends BaseModel {\n /**\n * Support phone number for Self-Guided Tours.\n */\n @attr('string')\n declare supportPhoneNumber: string;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/base-support-phone': BaseSupportPhone;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type BusinessHourDay from '@adc/login-setup-addon/models/settings/business-hours/day/business-hour-day';\n\n/**\n * @classdesc\n * Business Hours Template Model.\n */\nexport default class BusinessHourTemplate extends BaseModel {\n /**\n * The name of the business hour template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The description of the business hour template.\n */\n @attr('string')\n declare description: string;\n\n /**\n * Whether or not the current business hour template is the default template.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * Whether or not business hours are enabled\n */\n @attr('boolean', { defaultValue: true })\n declare enabled: boolean;\n\n /**\n * Does the current context have permission to modify these business hours?\n */\n @attr('boolean', { defaultValue: false })\n declare isReadOnly: boolean;\n\n /**\n * Business hour data for each day of the week for the current system\n */\n @attr('array')\n declare businessHourDays: BusinessHourDay[];\n\n /**\n * This model is calling the old toJSON method for some reason, so override it with the new implementation.\n * TODO: Remove this once the deprecation is updated.\n * @override\n */\n toJSON(options?: { includeId?: boolean }): object {\n return this.serialize(options);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/business-hour-template': BusinessHourTemplate;\n }\n}\n","import BaseCustomerLogo from './base-customer-logo';\n\n/**\n * @classdesc\n * Generic company logo.\n */\nexport default class CompanyLogo extends BaseCustomerLogo {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/company-logo': CompanyLogo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Company Name For Group\n */\nexport default class CompanyName extends BaseModel {\n /**\n * Name of company.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/company-name': CompanyName;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Holds CRM information.\n */\nexport default class CustomerRelationshipManagementIntegration extends BaseModel {\n /**\n * Name of the CRM e.g. Knock, Funnel, etc.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether or not the CRM overrides the Self-Guided Tours hours of operation.\n */\n @attr('boolean')\n declare overridesSelfGuidedToursHoursOfOperation: boolean;\n\n /**\n * Whether or not the CRM overrides the Self-Guided Tours appointment duration.\n */\n @attr('boolean')\n declare overridesSelfGuidedToursDuration: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'models/enterprise/settings/customer-relationship-management-integration': CustomerRelationshipManagementIntegration;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Company Name For Group\n */\nexport default class CustomizeWelcomeEmail extends BaseModel {\n /**\n * First section title\n */\n @attr('string')\n declare titleA: string;\n\n /**\n * First section body\n */\n @attr('string')\n declare boxA: string;\n\n /**\n * Second section title\n */\n @attr('string')\n declare titleB: string;\n\n /**\n * Second section body\n */\n @attr('string')\n declare boxB: string;\n\n /**\n * Third section title\n */\n @attr('string')\n declare titleC: string;\n\n /**\n * Third section body\n */\n @attr('string')\n declare boxC: string;\n\n /**\n * Login's email to populate send test email modal\n */\n @attr('string')\n declare loginEmail: string;\n\n /**\n * Rental Term Type of the group.\n */\n @attr('number')\n declare rentalTermType: number;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/customize-welcome-email': CustomizeWelcomeEmail;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class DeleteExpiredUser extends BaseModel {\n /**\n * Returns whether or not we delete expired users 24 hours after their access expires.\n */\n @attr('boolean', { defaultValue: false })\n declare deleteExpiredUsersSettingEnabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/delete-expired-user': DeleteExpiredUser;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class DeleteInactiveUsers extends BaseModel {\n /**\n * How many months a contact will have to be inactive for before we delete them.\n */\n @attr('number', { defaultValue: undefined })\n declare monthsOfInactivityBeforeDeletion?: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/delete-inactive-user': DeleteInactiveUsers;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class EnergySaverRule extends BaseModel {\n /**\n * Whether or not the SLO Energy Saver Rule is apply to all appciable units in the group.\n */\n @attr('boolean', { defaultValue: false })\n declare energySaverRuleEnabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/energy-saver-rule': EnergySaverRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Guest Login Access model.\n */\nexport default class GuestLoginAccess extends BaseModel {\n /**\n * Whether or not the setting in enabled\n */\n @attr('boolean', { defaultValue: false })\n declare enabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/guest-login-access': GuestLoginAccess;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * House Ready Early model.\n */\nexport default class HouseReadyEarly extends BaseModel {\n /**\n * Whether or not the house ready early automation setting is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare houseReadyEarlyAutomationEnabled: boolean;\n\n /**\n * Whether or not the house ready early notification setting is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare houseReadyEarlyNotificationEnabled: boolean;\n\n /**\n * The earliest time of day (in minutes) the house ready early notification can be sent. Default time is 12:30pm.\n */\n @attr('number', { defaultValue: 780 })\n declare startTime: number;\n\n /**\n * An array of unit ids of the units to apply the house ready early feature\n */\n @attr('array')\n declare enabledUnitIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/house-ready-early': HouseReadyEarly;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Login Template model.\n */\nexport default class LoginTemplate extends BaseModel {\n /**\n * The name of the login template.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * The description for the login template.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * An array of customer role ids that are associated with the template.\n */\n @attr('array')\n declare roles: number[];\n\n /**\n * The type of the template. This maps to the LoginTemplateTypeEnum in AlarmBusinessObjects.\n */\n @attr('number')\n declare templateType: number;\n\n /**\n * Whether or not the login template can be deleted.\n */\n @attr('boolean', { defaultValue: true })\n declare canBeDeleted: boolean;\n\n /**\n * Whether or not the login template is hidden from the UI.\n */\n @attr('boolean', { defaultValue: false })\n declare isHidden: boolean;\n\n /**\n * The time this template was last updated.\n */\n @attr('string')\n declare lastUpdatedLocal: string;\n\n /**\n * Hides the predetermined login template from the login templates list page.\n */\n hideLoginTemplate(): Promise {\n return this.submitCustomApiCall('hideLoginTemplate');\n }\n\n /**\n * Copies this template to multiple system groups.\n */\n copyLoginTemplate(systemGroupIds: number[]): Promise {\n return this.submitCustomApiCall('copyLoginTemplate', POST, { systemGroupIds });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/login-template': LoginTemplate;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type LoginTemplate from './login-template';\n\n/**\n * @classdesc\n * Login Templates For Group Model.\n */\nexport default class LoginTemplatesForGroupWithRole extends BaseModel {\n /**\n * The enterprise login templates to show on the login templates page.\n */\n @hasMany('enterprise/settings/login-template', { async: false, inverse: null })\n declare enterpriseLoginTemplates: SyncHasMany;\n\n /**\n * The single system login templates to show on the login templates page.\n */\n @hasMany('enterprise/settings/login-template', { async: false, inverse: null })\n declare singleSystemLoginTemplates: SyncHasMany;\n\n /**\n * Show all templates of the template type on the login templates list UI.\n */\n showAllTemplatesOfType(type: number): Promise {\n return this.submitCustomApiCall('showAllLoginTemplates', 'GET', { type });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/login-templates-for-group-with-role': LoginTemplatesForGroupWithRole;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type LoginTemplate from './login-template';\n\n/**\n * @classdesc\n * Login Templates For Group Model.\n */\nexport default class LoginTemplatesForGroup extends BaseModel {\n /**\n * The enterprise login templates to show on the login templates page.\n */\n @hasMany('enterprise/settings/login-template', { async: false, inverse: null })\n declare enterpriseLoginTemplates: SyncHasMany;\n\n /**\n * The single system login templates to show on the login templates page.\n */\n @hasMany('enterprise/settings/login-template', { async: false, inverse: null })\n declare singleSystemLoginTemplates: SyncHasMany;\n\n /**\n * Show all templates of the template type on the login templates list UI.\n */\n showAllTemplatesOfType(type: number): Promise {\n return this.submitCustomApiCall('showAllLoginTemplates', 'GET', { type });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/login-templates-for-group': LoginTemplatesForGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Mobile Badge model.\n */\nexport default class MobileBadge extends BaseModel {\n /**\n * Whether or not the auto relock setting is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare assignMobileBadgeToResidents: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/mobile-badge': MobileBadge;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type SensorThreshold from '../../devices/sensor-threshold';\n\n/**\n * @classdesc\n * Noise Monitor Settings Template model.\n */\nexport default class NoiseMonitorSettingsTemplate extends BaseModel {\n /**\n * The name of the template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether the template is the default for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * The noise setting thresholds that are associated with the template.\n */\n @hasMany('devices/sensor-threshold', { async: true, inverse: null })\n declare thresholdList: AsyncHasMany;\n\n /**\n * An array of unit ids of the units to apply the noise monitor template settings\n */\n @attr('array', { defaultValue: () => [] })\n declare enabledUnitIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/noise-monitor-settings-template': NoiseMonitorSettingsTemplate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Occupancy Based Pool Controller Rule Template model.\n */\nexport default class OccupancyBasedPoolControllerRule extends BaseModel {\n /**\n * The name of the template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether the template is the default for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * The Occupied Pool Setpoint.\n */\n @attr('number', { defaultValue: 40 })\n declare occupiedPoolSetpoint: number;\n\n /**\n * The Occupied Spa Setpoint.\n */\n @attr('number', { defaultValue: 60 })\n declare occupiedSpaSetpoint: number;\n\n /**\n * Whether the template is enabled for this group.\n */\n @attr('boolean', { defaultValue: true })\n declare enabled: boolean;\n\n /**\n * Whether the pool controller is off when unoccupied for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare onWhenOccupied: boolean;\n\n /**\n * Whether the pool controller is off when unoccupied for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare offWhenUnoccupied: boolean;\n\n /**\n * Whether we want to send the pool setpoint down.\n */\n @attr('boolean', { defaultValue: false })\n declare poolChecked: boolean;\n\n /**\n * Whether we want to send the spa setpoint down.\n */\n @attr('boolean', { defaultValue: false })\n declare spaChecked: boolean;\n\n /**\n * An array of unit ids of the units to apply the OBPCR\n */\n @attr('array')\n declare enabledUnitIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/occupancy-based-pool-controller-rules': OccupancyBasedPoolControllerRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Occupancy Based Thermostat Rule Template model.\n */\nexport default class OccupancyBasedThermostatRule extends BaseModel {\n /**\n * The name of the template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether the template is the default for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * The occupied heat setpoint.\n */\n @attr('number', { defaultValue: 65 })\n declare occupiedHeatSetpoint: number;\n\n /**\n * The occupied cool setpoint.\n */\n @attr('number', { defaultValue: 75 })\n declare occupiedCoolSetpoint: number;\n\n /**\n * The unoccupied heat setpoint.\n */\n @attr('number', { defaultValue: 55 })\n declare unoccupiedHeatSetpoint: number;\n\n /**\n * The unoccupied cool setpoint.\n */\n @attr('number', { defaultValue: 80 })\n declare unoccupiedCoolSetpoint: number;\n\n /**\n * The auto mode.\n */\n @attr('boolean', { defaultValue: false })\n declare autoMode: boolean;\n\n /**\n * Whether the template is enable for this group\n */\n @attr('boolean', { defaultValue: false })\n declare disabled: boolean;\n\n /**\n * Whether we want to send the occupied setpoints down.\n */\n @attr('boolean', { defaultValue: false })\n declare occupiedChecked: boolean;\n\n /**\n * Whether we want to send the unoccupied setpoints down.\n */\n @attr('boolean', { defaultValue: false })\n declare unoccupiedChecked: boolean;\n\n /**\n * An array of unit ids of the units to apply the OBPCR\n */\n @attr('array')\n declare enabledUnitIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/occupancy-based-thermostat-rule': OccupancyBasedThermostatRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { PoolControlFilterPumpScheduleInfo } from 'customer-site/enterprise/settings/pool-control-filter-pump-schedules/edit/controller';\n\n/**\n * @classdesc\n * Pool Control Filter Pump Schedule Template model.\n */\nexport default class PoolControlFilterPumpScheduleTemplate extends BaseModel {\n /**\n * The name of the template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether or not the current template is the default template.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * Whether the filter pump schedule is active or not.\n */\n @attr('boolean', { defaultValue: true })\n declare isEnabled: boolean;\n\n /**\n * The days of the week that the filter pump schedule will be active for.\n */\n @attr()\n declare filterPumpDayOfWeekInfo: PoolControlFilterPumpScheduleInfo[];\n\n /**\n * An array of unit ids of the units to apply the OBPCR\n */\n @attr('array')\n declare enabledUnitIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/pool-control-filter-pump-schedule-template': PoolControlFilterPumpScheduleTemplate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model that holds information on whether preloaded codes should be used for resident and\n * prospective resident creation in the group.\n */\nexport default class PreloadedCodeForUserCreation extends BaseModel {\n /**\n * Whether the Preloaded Codes setting is enabled for user creation.\n */\n @attr('boolean')\n declare preloadedCodesForUserCreationEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/preloaded-codes-for-user-creation': PreloadedCodeForUserCreation;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Bundles information about a unit's status in the property management software system that contains it.\n */\nexport default class PropertyManagementIntegration extends BaseModel {\n /**\n * Name of the property management software enabled for the unit.\n */\n @attr('string')\n declare integrationName: string;\n\n /**\n * Status of this unit in the property management software system.\n */\n @attr('string')\n declare status: string;\n\n /**\n * Last time the property management integration information was queried from the property management software's\n * API endpoint, represented in the local time zone.\n */\n @attr('string')\n declare statusQueryTimeLocal: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/property-management-integration': PropertyManagementIntegration;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Property Management Resident model.\n */\nexport default class PropertyManagementResident extends BaseModel {\n /**\n * Name of the resident\n */\n @attr('string')\n declare name: string;\n\n /**\n * Description of the unit that the resident would belong to\n */\n @attr('string')\n declare unitDesc: string;\n\n /**\n * Resident status in the property management system (eg. \"Current Resident\", \"Future Resident\", etc.). It could be empty.\n */\n @attr('string')\n declare status: string;\n\n /**\n * Local date that the resident is moving/moved in. It is in the format: MM/DD/YYYY.\n */\n @attr('string')\n declare moveInDateLocal: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/property-management-resident': PropertyManagementResident;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Schedule welcome email model.\n */\nexport default class ScheduleEmail extends BaseModel {\n /**\n * Returns whether or not the welcome emails for users created in this group will be scheduled.\n * If false (default), the welcome emails will be sent out immediately.\n */\n @attr('boolean', { defaultValue: false })\n declare receiveEmailEnabled: boolean;\n\n /**\n * Returns how many days before the PIN code activation the welcome email is sent. Default time is 0.\n */\n @attr('number', { defaultValue: 0 })\n declare scheduledEmailDaysOffset: number;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/schedule-email': ScheduleEmail;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Schedule welcome email model.\n */\nexport default class ScheduleWelcomeMessage extends BaseModel {\n /**\n * Returns whether or not the welcome emails for users created in this group will be scheduled.\n * If false (default), the welcome emails will be sent out immediately.\n */\n @attr('boolean', { defaultValue: false })\n declare receiveEmailEnabled: boolean;\n\n /**\n * Returns how many days before the PIN code activation the welcome email is sent. Default time is 0.\n */\n @attr('number', { defaultValue: 0 })\n declare scheduledEmailDaysOffset: number;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/schedule-welcome-message': ScheduleWelcomeMessage;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours Appointment Length model.\n */\nexport default class SelfGuidedToursAppointmentLength extends BaseModel {\n /**\n * Single-location Self-Guided Tours appointments are this long (in minutes)\n * The default value set in the backend isn't shown as an option here, so this will be left null until it's set by\n * the user to avoid confusion about the current value.\n */\n @attr('number')\n declare singleShowingAppointmentLength: number;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-appointment-length': SelfGuidedToursAppointmentLength;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours CC Verification\n */\nexport default class SelfGuidedToursCCVerification extends BaseModel {\n /**\n * Whether or not credit card verification is on for Self-Guided Tours.\n */\n @attr('boolean')\n declare creditCardVerificationIsOn: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-cc-verification': SelfGuidedToursCCVerification;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * SelfGuidedTours CheckpointID\n */\nexport default class SelfGuidedToursCheckpointId extends BaseModel {\n /**\n * Whether CheckpointId is enabled.\n */\n @attr('boolean')\n declare checkpointIdEnabled: boolean;\n\n /**\n * Location Id for SelfGuidedTours\n */\n @attr('string')\n declare checkpointIdLocationId: string;\n\n /**\n * Api Key for SelfGuidedTours.\n */\n @attr('string')\n declare checkpointIdApiKey: string;\n\n /**\n * Verification Duration for SelfGuidedTours.\n */\n @attr('number')\n declare checkpointIdVerificationDuration: number;\n\n /**\n * Whether the prospect should need to verify their ID at the time of scheduling their tour.\n */\n @attr('boolean')\n declare verifyAtTimeOfSchedule: boolean;\n\n /**\n * Whether the prospect should need to verify their ID at the time of their tour.\n */\n @attr('boolean')\n declare verifyAtTimeOfTour: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-checkpoint-id': SelfGuidedToursCheckpointId;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours customer logo\n */\nexport default class SelfGuidedToursCommunitySiteMap extends BaseModel {\n /**\n * File name of the community site map for Self-Guided Tours.\n */\n @attr('string')\n declare fileName: string;\n\n /**\n * File data of the community site map for Self-Guided Tours.\n */\n @attr('string')\n declare fileDataUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-community-site-map': SelfGuidedToursCommunitySiteMap;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class EnterpriseSettingsSelfGuidedToursConfigureFunnelCrm extends BaseModel {\n /**\n * Whether or not to use Funnel's available times.\n */\n @attr('boolean')\n declare useFunnelAvailableTimes: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-configure-funnel-crm': EnterpriseSettingsSelfGuidedToursConfigureFunnelCrm;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Knock CRM configuration model\n */\nexport default class EnterpriseSettingsSelfGuidedToursConfigureKnockCrm extends BaseModel {\n /**\n * API key to authenticate with Knock CRM\n */\n @attr('string')\n declare knockApiKey: string;\n\n /**\n * The ID of the community the configuration is set for.\n * This ID is set by Knock and provided to us by the property managers when they set up their integration.\n */\n @attr('string')\n declare knockCommunityId: string;\n\n /**\n * Determines if the parent group is configured with Knock CRM to make API requests.\n */\n @attr('boolean')\n declare knockActive: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-configure-knock-crm': EnterpriseSettingsSelfGuidedToursConfigureKnockCrm;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours Custom URL\n */\nexport default class SelfGuidedToursCustomUrl extends BaseModel {\n /**\n * Customizable URL for the Self-Guided Tours site.\n */\n @attr('string')\n declare selfGuidedToursUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-custom-url': SelfGuidedToursCustomUrl;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseCustomerLogo from './base-customer-logo';\n\n/**\n * @classdesc\n * Self-Guided Tours customer logo\n */\nexport default class SelfGuidedToursCustomerLogo extends BaseCustomerLogo {\n /**\n * Url for bookings page for the group.\n */\n @attr('string')\n declare selfGuidedToursUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-customer-logo': SelfGuidedToursCustomerLogo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours Gate Code\n */\nexport default class SelfGuidedToursGateCode extends BaseModel {\n /**\n * The gate code as a string.\n */\n @attr('string')\n declare gateCode: string;\n\n /**\n * Whether prospective residents are required to pass on-site verification to get the gate code.\n */\n @attr('boolean')\n declare requireVerificationToShowGateCode: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-gate-code': SelfGuidedToursGateCode;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours Geofence\n */\nexport default class SelfGuidedToursGeofence extends BaseModel {\n /**\n * Whether geofencing is enabled for Self-Guided Tours.\n */\n @attr('boolean')\n declare geofenceEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-geofence': SelfGuidedToursGeofence;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { TimetableScheduleDay } from 'customer-site/models/access-control/access-control-timetable';\n\n/**\n * @classdesc\n * Self-Guided Tours Hours Of Operation model.\n */\nexport default class SelfGuidedToursHoursOfOperation extends BaseModel {\n /**\n * Dictionary of schedule for each day of the week.\n */\n @attr('access-control-schedule')\n declare scheduleDictionary: TimetableScheduleDay[];\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-hours-of-operation': SelfGuidedToursHoursOfOperation;\n }\n}\n","import BaseSupportPhone from 'customer-site/models/enterprise/settings/base-support-phone';\n\n/**\n * @classdesc\n * Self-Guided Tours Support Phone\n */\nexport default class SelfGuidedToursSupportPhone extends BaseSupportPhone {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-support-phone': SelfGuidedToursSupportPhone;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Self-Guided Tours terms and conditions\n */\nexport default class SelfGuidedToursTermsAndConditions extends BaseModel {\n /**\n * File name of the terms and conditions for Self-Guided Tours.\n */\n @attr('string')\n declare fileName: string;\n\n /**\n * File data of the terms and conditions for Self-Guided Tours.\n */\n @attr('string')\n declare fileDataUrl: string;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-terms-and-condition': SelfGuidedToursTermsAndConditions;\n }\n}\n","import { attr } from '@ember-data/model/index';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Set the web primary color for Self-Guided Tours at group level.\n */\nexport default class SelfGuidedToursWebPrimaryColor extends BaseModel {\n /**\n * The web primary color for Self-Guided Tours.\n */\n @attr('string')\n declare selfGuidedToursColor: string;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/self-guided-tours-web-primary-color': SelfGuidedToursWebPrimaryColor;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Send Email By Default model.\n */\nexport default class SendEmailByDefault extends BaseModel {\n /**\n * Whether or not to send welcome email to all guest users.\n */\n @attr('boolean', { defaultValue: false })\n declare sendEmailToAllGuestsEnabled: boolean;\n\n /**\n * Whether or not to send welcome email to user-types other than guest.\n */\n @attr('boolean', { defaultValue: false })\n declare sendEmailToNonGuestsEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/send-email-by-default': SendEmailByDefault;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Send Follow Up Text model.\n */\nexport default class SendFollowUpText extends BaseModel {\n /**\n * Whether or not the setting in enabled\n */\n @attr('string', { defaultValue: '' })\n declare text: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/send-follow-up-text': SendFollowUpText;\n }\n}\n","import BaseSupportPhone from 'customer-site/models/enterprise/settings/base-support-phone';\n\n/**\n * @classdesc\n * Support Phone\n */\nexport default class SupportPhone extends BaseSupportPhone {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/support-phone': SupportPhone;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model that determines the universal offline window of all temporary access codes on the group.\n */\nexport default class TemporaryAccessCodeAvailabilitySchedule extends BaseModel {\n /**\n * At what minute after midnight should all temporary access codes expire?\n */\n @attr('number')\n declare accessCodeExpirationTimeMinutesAfterMidnight: number;\n\n /**\n * At what minute after midnight should all temporary access codes be re-enabled?\n */\n @attr('number')\n declare accessCodeEnabledTimeMinutesAfterMidnight: number;\n\n /**\n * Is this setting disabled? Disabled if the Temporary Access Codes setting is not enabled.\n */\n @attr('boolean')\n declare disabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/temporary-access-code-availability-schedule': TemporaryAccessCodeAvailabilitySchedule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model that holds information on how long temporary access codes should work on the group.\n */\nexport default class TemporaryAccessCodeDuration extends BaseModel {\n /**\n * The amount of minutes that temporary access codes should work after being exposed to a login.\n */\n @attr('number')\n declare accessCodeDurationMinutes: number;\n\n /**\n * Is this setting disabled? Disabled if the Temporary Access Codes setting is not enabled.\n */\n @attr('boolean')\n declare disabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/temporary-access-code-duration': TemporaryAccessCodeDuration;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model that holds information to how many temporary access codes that will be pushed down to locks in the group.\n */\nexport default class TemporaryAccessCode extends BaseModel {\n /**\n * The number of Temporary Access Codes to push down to the locks within this group.\n */\n @attr('number')\n declare preloadedCodesCount: number;\n\n /**\n * Whether the Temporary Access Codes setting is enabled.\n */\n @attr('boolean')\n declare temporaryAccessCodesEnabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/temporary-access-code': TemporaryAccessCode;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Thermostat Schedule model.\n */\nexport default class ThermostatScheduleTemplate extends BaseModel {\n /**\n * The name of the thermostat schedule template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether or not the current thermostat schedule template is the default template.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/thermostat-schedule-template': ThermostatScheduleTemplate;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Celsius } from '../../../enums/TemperatureUnit';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * @classdesc\n * Thermostat Settings Template\n */\nexport default class ThermostatSettingsTemplate extends BaseModel {\n @service declare ajax: AjaxService;\n\n /**\n * The name of the template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether the template is the default for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * The thermostats for which this template is currently being applied.\n */\n @hasMany('devices/thermostat', { async: true, inverse: 'thermostatSettingsTemplate' })\n declare thermostats: AsyncHasMany;\n\n /**\n * The minimum setpoint that can be used while in heat mode\n */\n @attr('number', { defaultValue: 40 })\n declare minHeatSetpoint: number;\n\n /**\n * The maximum setpoint that can be used while in heat mode\n */\n @attr('number', { defaultValue: 95 })\n declare maxHeatSetpoint: number;\n\n /**\n * The minimum setpoint that can be used while in cool mode.\n */\n @attr('number', { defaultValue: 50 })\n declare minCoolSetpoint: number;\n\n /**\n * The maximum setpoint that can be used while in cool mode.\n */\n @attr('number', { defaultValue: 95 })\n declare maxCoolSetpoint: number;\n\n /**\n * The number of degrees above (during cooling) and below (during heating) the target set point the HVAC system will allow the temperature to fluctuate before cycling back on.\n */\n @attr('number', { defaultValue: 0.5 })\n declare swing: number;\n\n /**\n * The number of degrees the thermostat will keep the system on above (during heating) or below (during cooling) the target set point.\n */\n @attr('number', { defaultValue: 0 })\n declare overshoot: number;\n\n /**\n * The setpoint at which the humidifer should kick in. Optional\n */\n @attr('number', { defaultValue: undefined })\n declare minHumiditySetpoint: number;\n\n /**\n * The setpoint at which the dehumidifer should kick in. Optional\n */\n @attr('number', { defaultValue: 70 })\n declare maxHumiditySetpoint: number;\n\n /**\n * The number of degrees below the Temperature Setpoint that the AC is allowed to cool in order to reduce humidity to the desired setpoint.\n */\n @attr('number', { defaultValue: 3 })\n declare humidityDifferential: number;\n\n /**\n * The minimum outdoor temperature that will use the heat pump as a heat source. Optional\n */\n @attr('number', { defaultValue: undefined })\n declare balancePoint: number;\n\n /**\n * The current local display locking mode for the thermostats.\n */\n @attr('number', { defaultValue: 0 })\n declare localDisplayLockingMode: number;\n\n /**\n * Changes default values to Celsius if necessary for a new template.\n */\n changeDefaultsToCelsiusIfNeeded(): void {\n (async () => {\n const response = await this.ajax.apiRequestForValue<{ configurationName: string; v?: number }[]>(\n 'enterprise/settings/thermostatConfiguration/0'\n ),\n result = response.reduce(\n (props, { configurationName, v = 0 }) => ({\n ...props,\n [configurationName]: v\n }),\n {} as Record\n );\n\n if (result.temperatureUnit === Celsius) {\n [\n 'minHeatSetpoint',\n 'maxHeatSetpoint',\n 'minCoolSetpoint',\n 'maxCoolSetpoint',\n 'swing',\n 'overshoot',\n 'humidityDifferential',\n 'balancePoint'\n ].forEach((configValue) => {\n set(\n this,\n configValue as keyof ThermostatSettingsTemplate,\n result[configValue + 'DefaultValueC'] as any\n );\n });\n }\n })();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/thermostat-settings-template': ThermostatSettingsTemplate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * User Code Times model.\n */\nexport default class UserCodeTimes extends BaseModel {\n /**\n * The time of day (in minutes from midnight) the users' code will be activated. Default time is 4:00pm.\n * Default value were obtained from default system group parameters and public consts in the\n * \\FALCOR\\software\\DotNetShared\\AlarmBusinessObjects\\Enterprise\\SystemGroupParameters.cs file.\n */\n @attr('number', { defaultValue: 960 })\n declare activeCodeStartTime: number;\n\n /**\n * The time of day (in minutes from midnight) the users' code will be de-activated. Default time is 11:00am.\n * Default value were obtained from default system group parameters and public consts in the\n * \\FALCOR\\software\\DotNetShared\\AlarmBusinessObjects\\Enterprise\\SystemGroupParameters.cs file.\n */\n @attr('number', { defaultValue: 660 })\n declare activeCodeEndTime: number;\n\n /**\n * Whether or not the early PIN activation is turned on.\n */\n @attr('boolean', { defaultValue: false })\n declare earlyPinEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/user-code-time': UserCodeTimes;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type { WaterMeterConfiguration } from 'customer-site/enterprise/settings/water-meter-configuration/edit/controller';\nimport type WaterMeterModel from 'customer-site/models/devices/water-meter';\n\n/**\n * @classdesc\n * Water Meter Configuration Template model.\n */\nexport default class WaterMeterConfigurationTemplate extends BaseModel {\n /**\n * The name of the template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Whether the template is the default for this group.\n */\n @attr('boolean', { defaultValue: false })\n declare isDefaultTemplate: boolean;\n\n /**\n * The type of template to display.\n */\n @attr('number')\n declare templateType: number;\n\n /**\n * The water meters for which this template is currently being applied.\n */\n @hasMany('devices/water-meter', { async: true, inverse: null })\n declare waterMeters: AsyncHasMany;\n\n /**\n * The support configurations for the water meter\n */\n @attr('array', { defaultValue: () => [] })\n declare configurations: WaterMeterConfiguration[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/water-meter-configuration-template': WaterMeterConfigurationTemplate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class WaterMeterConfiguration extends BaseModel {\n /**\n * The name of the support configuration.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The minimum value for the support configuration parameter.\n */\n @attr('number')\n declare min: number;\n\n /**\n * The maximum value for the support configuration parameter.\n */\n @attr('number')\n declare max: number;\n\n /**\n * The value to be display for the support configuration parameter.\n */\n @attr('number')\n declare value: number;\n\n /**\n * The step size in which the increament of the value in the field will change.\n */\n @attr('number')\n declare stepSize: number;\n\n /**\n * The units of the support configuration parameter.\n */\n @attr('string')\n declare units: string;\n}\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/water-meter-configuration': WaterMeterConfiguration;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Welcome Email model.\n */\nexport default class WelcomeEmail extends BaseModel {\n /**\n * The name of the welcome email template.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The subject of the welcome email.\n */\n @attr('string')\n declare subject: string;\n\n /**\n * The introduction text of the email template.\n */\n @attr('string')\n declare introduction: string;\n\n /**\n * The string containing instructions in preparation of visit.\n */\n @attr('string')\n declare visitPreparation: string;\n\n /**\n * The boolean value indicating whether the \"preparing for your visit\" section should be shown in the welcome email.\n */\n @attr('boolean', { defaultValue: false })\n declare visitPreparationEnabled: boolean;\n\n /**\n * The string containing checkout instructions.\n */\n @attr('string')\n declare checkoutInstructions: string;\n\n /**\n * The boolean value indicating whether the \"checkout instructions\" section should be shown in the welcome email.\n */\n @attr('boolean', { defaultValue: false })\n declare checkoutInstructionsEnabled: boolean;\n\n /**\n * The string containing questions.\n */\n @attr('string')\n declare questions: string;\n\n /**\n * The boolean value indicating whether the \"questions\" section should be shown in the welcome email.\n */\n @attr('boolean', { defaultValue: false })\n declare questionsEnabled: boolean;\n\n /**\n * The list of properties to which this template applies. (Unused currently).\n */\n @attr('string')\n declare unitIds: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/welcome-email': WelcomeEmail;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Welcome Message model.\n */\nexport default class WelcomeMessage extends BaseModel {\n /**\n * Whether or not to send welcome email to all guest users.\n */\n @attr('boolean', { defaultValue: false })\n declare sendEmailToAllGuestsEnabled: boolean;\n\n /**\n * Whether or not to send welcome email to user-types other than guest.\n */\n @attr('boolean', { defaultValue: false })\n declare sendEmailToNonGuestsEnabled: boolean;\n\n /**\n * Whether or not to send welcome text to all guest users.\n */\n @attr('boolean', { defaultValue: false })\n declare sendTextToAllGuestsEnabled: boolean;\n\n /**\n * Whether or not to send welcome text to user-types other than guest.\n */\n @attr('boolean', { defaultValue: false })\n declare sendTextToNonGuestsEnabled: boolean;\n\n /**\n * The ids of the groups to apply the settings to.\n */\n @attr('array')\n declare applyToGroupIds: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/settings/welcome-message': WelcomeMessage;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Base Template model.\n */\nexport default class BaseTemplateItem extends BaseModel {\n /**\n * The name of the template\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'enterprise/template': BaseTemplateItem;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport RecordModel from '../activity/record';\n\n/**\n * The model that defines a Remote Video Monitoring Console event.\n */\nexport default class EscalatedEventsEvent extends RecordModel {\n /**\n * Id of event device.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Description of event event.\n */\n @attr('string')\n declare deviceDescription: string;\n\n /**\n * Date the event occurred.\n */\n @attr('date')\n declare eventDateLocal: Date;\n\n /**\n * Event id of event associated with Remote Video Monitoring Console rule.\n */\n @attr('number')\n declare associatedEventId: number;\n\n /**\n * The event type.\n */\n @attr('number')\n declare eventType: number;\n\n /**\n * The event description.\n */\n @attr('string')\n declare eventDescription: string;\n\n /**\n * Video event id of event associated with Remote Video Monitoring Console rule.\n */\n @attr('number')\n declare videoEventId: number;\n\n /**\n * The event description.\n */\n @computed('deviceDescription', 'eventDescription')\n get description(): string {\n return `${this.deviceDescription} ${this.eventDescription}`;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'escalated-events/escalated-events-event': EscalatedEventsEvent;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The model that defines a suggested feature\n */\nexport default class BaseFeature extends BaseModel {\n /**\n * The name of the task.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The page that this task links to.\n */\n @attr('number')\n declare pageEnum: number;\n\n /**\n * Is the task completed?\n */\n @attr('boolean')\n declare isCompleted: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'feature-suggestions/base-feature': BaseFeature;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport {\n FirstEnhancements,\n RemindersAndAlerts,\n SmartRulesAndSchedules,\n MoreEnhancements,\n TasksList\n} from '../../enums/FeatureCategory';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type FeatureSuggestion from './feature-suggestion';\nimport type FeatureTask from './feature-task';\n\nconst ICONS: Record = {\n [FirstEnhancements]: 'feature-home',\n [RemindersAndAlerts]: 'feature-notifications',\n [SmartRulesAndSchedules]: 'feature-automation',\n [MoreEnhancements]: 'feature-upsell',\n [TasksList]: 'circle-o-check'\n};\n\nconst COLOR_CLASSES: Record = {\n [FirstEnhancements]: 'first-enhancements',\n [RemindersAndAlerts]: 'reminders-and-alerts',\n [SmartRulesAndSchedules]: 'smart-rules-and-schedules',\n [MoreEnhancements]: 'more-enhancements',\n [TasksList]: 'tasks-list'\n};\n\n/**\n * @classdesc\n * FeatureCategory\n */\nexport default class FeatureCategory extends BaseModel {\n /**\n * The name of the category.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Returns true if the category is complete.\n */\n @attr('boolean')\n declare isComplete: boolean;\n\n /**\n * Returns a string that represents the status of the category.\n */\n @attr('string', { defaultValue: '' })\n declare status: string;\n\n /**\n * Category enumeration.\n */\n @attr('number')\n declare categoryEnum: number;\n\n /**\n * Returns the icon name for this category.\n */\n @computed('categoryEnum')\n get icon(): string {\n return ICONS[this.categoryEnum];\n }\n\n /**\n * Returns the CSS class to color this category.\n */\n @computed('categoryEnum')\n get colorCss(): string {\n return COLOR_CLASSES[this.categoryEnum];\n }\n\n /**\n * The features which belong to this category.\n */\n @hasMany('feature-suggestions/feature-suggestion', { async: true, inverse: null })\n declare features: AsyncHasMany;\n\n /**\n * The tasks which belong to this category.\n */\n @hasMany('feature-suggestions/feature-task', { async: true, inverse: null })\n declare tasks: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'feature-suggestions/feature-category': FeatureCategory;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { equal } from '@ember/object/computed';\nimport { Unknown } from '../../enums/CustomerPageUrl';\nimport BaseFeature from './base-feature';\n\n/**\n * @classdesc\n * The model that defines a suggested feature\n */\nexport default class FeatureSuggestion extends BaseFeature {\n /**\n * Query params for certain features.\n */\n @attr()\n declare queryParams: Record;\n\n /**\n * The tooltip for this feature.\n */\n @attr('string', { defaultValue: '' })\n declare tooltip: string;\n\n /**\n * Does the feature have a link?\n */\n @equal('pageEnum', Unknown)\n declare hasNoLink: boolean;\n\n /**\n * Does the customer need to contact their dealer to enable this feature?\n */\n @attr('boolean')\n declare mustContactDealer: boolean;\n\n /**\n * The message for contacting the dealer.\n */\n @attr('string', { defaultValue: '' })\n declare contactUsMessage: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'feature-suggestions/feature-suggestion': FeatureSuggestion;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseFeature from './base-feature';\n\n/**\n * @classdesc\n * The model that defines, alongside the normal feature attributes, designation of priority\n */\nexport default class FeatureTask extends BaseFeature {\n /**\n * Is the task high priority?\n */\n @attr('boolean')\n declare isHighPriority: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'feature-suggestions/feature-task': FeatureTask;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Holds the count associated with a particular filter.\n */\nexport default class BaseFilterCount extends BaseModel {\n /**\n * The number of items that match this filter.\n */\n @attr('number')\n declare count: number;\n\n /**\n * Whether a warning should be shown for this filter.\n */\n @attr('boolean')\n declare showWarning: boolean;\n\n /**\n * Whether this filter is considered to be \"complete\".\n */\n @attr('boolean')\n declare isComplete: boolean;\n\n /**\n * The icons for the filter.\n */\n @attr('array')\n declare icons: string[];\n\n /**\n * The name of the filter/sub-filter.\n * For filters, this is sent along with the count in case the count affects the name of the filter (eg pluralization).\n * For sub-filters, we may be sending down new sub-filters that weren't sent with the filters, so we need the name.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filter/base-filter-count': BaseFilterCount;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type BaseSubFilter from './base-sub-filter';\n\n/**\n * @classdesc\n * Holds all the info for a Locations page filter.\n */\nexport default class BaseFilterModel extends BaseModel {\n /**\n * The name of the filter.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The icons for the filter.\n */\n @attr('array')\n declare icons: string[];\n\n /**\n * The type of the filter. Used so that only one filter of the same type can be selected at a time.\n */\n @attr('string')\n declare type: string;\n\n /**\n * The class of the filter used for styling.\n */\n @attr('string')\n declare css: string;\n\n /**\n * The sub-filters for the filter. A set of possible selections within the filter.\n */\n @hasMany('filter/base-sub-filter', { async: false, inverse: null })\n declare subFilters: SyncHasMany;\n\n /**\n * Whether a warning should be shown for this filter.\n */\n @attr('boolean')\n declare showWarning: boolean;\n\n /**\n * Whether this filter is considered to be \"complete\".\n */\n @attr('boolean')\n declare isComplete: boolean;\n\n /**\n * Whether this filter is cached.\n */\n @attr('boolean')\n declare isCached: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filter/base-filter-model': BaseFilterModel;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Holds all the info for an Ember Locations page sub-filter.\n */\nexport default class BaseSubFilter extends BaseModel {\n /**\n * The name of the sub-filter.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The number of items that match this sub-filter.\n */\n @attr('number')\n declare count: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filter/base-sub-filter': BaseSubFilter;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Base alert item model\n */\nexport default class BaseAlertItem extends Model {\n /**\n * Description of the base alert.\n */\n @attr('string', { defaultValue: '' })\n declare issueDesc: string;\n\n /**\n * Details of the base alert.\n */\n @attr('string', { defaultValue: '' })\n declare issueDetails: string;\n\n /**\n * Date of the base alert.\n */\n @attr('string', { defaultValue: '' })\n declare issueDateUtc: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/base-alert-item': BaseAlertItem;\n }\n}\n","import BaseAlertItem from '../fleet/base-alert-item';\n\n/**\n * @classdesc\n * Car issue item model\n */\nexport default class CarIssueItem extends BaseAlertItem {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/car-issue-item': CarIssueItem;\n }\n}\n","import BaseFilterCount from '../filter/base-filter-count';\n\nexport default class FleetFilterCount extends BaseFilterCount {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/fleet-filter-count': FleetFilterCount;\n }\n}\n","import BaseFilterModel from '../filter/base-filter-model';\n\nexport default class FleetFilter extends BaseFilterModel {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/fleet-filter': FleetFilter;\n }\n}\n","import Model, { attr, hasMany } from '@ember-data/model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type FleetTrip from './fleet-trip';\n\nexport default class FleetTripDay extends Model {\n @attr('string')\n declare date: string;\n\n /**\n * Total fuel used for all trips in the day.\n */\n @attr('number')\n declare fuelUsed: number;\n\n /**\n * Total distance traveled in all trips for the day.\n */\n @attr('number')\n declare distance: number;\n\n /**\n * Total fuel efficiency of all trips in the day.\n */\n @attr('number')\n declare efficiency: number;\n\n /**\n * List of trip ids of the trips in the day.\n */\n @hasMany('fleet/fleet-trip', { async: false, inverse: null })\n declare trips: SyncHasMany;\n\n /**\n * Indicates this day is currently expanded.\n */\n isExpanded = true;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/fleet-trip-day': FleetTripDay;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\nimport type { CarLocationItem } from 'customer-site/components/fleet/trip-history/trip-map';\n\nexport default class FleetTrip extends Model {\n /**\n * Start time of trip.\n */\n @attr('string')\n declare startTime: string;\n\n /**\n * End time of trip.\n */\n @attr('string')\n declare endTime: string;\n\n /**\n * The route of a trip.\n */\n @attr('array')\n declare tripRoute: CarLocationItem[];\n\n /**\n * Device id of car monitor.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The name of the car monitor.\n */\n @attr('string')\n declare vehicleName: string;\n\n /**\n * The duration of trip in minutes.\n */\n @attr('number')\n declare durationMinutes: number;\n\n /**\n * Distance of trip.\n */\n @attr('number')\n declare distance: number;\n\n /**\n * Fuel consumed during the trip.\n */\n @attr('number')\n declare fuelConsumed: number;\n\n /**\n * Calculated fuel efficiency for the trip.\n */\n @attr('number')\n declare efficiency: number;\n\n /**\n * Alerts for the trip.\n */\n @attr('array')\n declare tripAlerts: object[];\n\n /**\n * Max speed for the trip.\n */\n @attr('number')\n declare maxSpeed: number;\n\n /**\n * Start address for the trip, if available.\n */\n @attr('string')\n declare startAddress: string;\n\n /**\n * End address for the trip, if available.\n */\n @attr('string')\n declare endAddress: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/fleet-trip': FleetTrip;\n }\n}\n","import Model, { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\n\nexport default class FleetVehicle extends Model {\n /**\n * Name of vehicle\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Status of vehicle\n */\n @attr('string', { defaultValue: '' })\n declare status: string;\n\n /**\n * Date of the last status update\n */\n @attr('string', { defaultValue: '' })\n declare lastUpdatedTime: string;\n\n /**\n * Distance driven by vehicle\n */\n @attr('number')\n declare distanceDriven: number;\n\n /**\n * Number of Alerts\n */\n @attr('number')\n declare numberOfAlerts: number;\n\n /**\n * Number of Issues\n */\n @attr('number')\n declare numberOfIssues: number;\n\n /**\n * Has Issues\n */\n @computed('numberOfIssues')\n get hasIssues(): boolean {\n return !!this.numberOfIssues;\n }\n\n /**\n * isEngineOn\n */\n @attr('boolean')\n declare isEngineOn: boolean;\n\n /**\n * isCommercial\n */\n @attr('boolean')\n declare isCommercial: boolean;\n\n /**\n * Unit ID\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * Device ID\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Longitude\n */\n @attr('number')\n declare latitude: number;\n\n /**\n * Heading (in degrees)\n */\n @attr('number')\n declare heading?: number;\n\n /**\n * Latitude\n */\n @attr('number')\n declare longitude: number;\n\n @computed('numberOfAlerts')\n get hasAlerts(): boolean {\n return this.numberOfAlerts !== 0;\n }\n\n /**\n * Trips since the beginning of current day\n */\n @attr('number')\n declare tripsSinceBeginningOfDay: number;\n\n /**\n * Fuel used since the beginning of current day\n */\n @attr('number')\n declare fuelUsedInLastDay: number;\n\n /**\n * The time at which this vehicle was loaded\n */\n @attr('string')\n declare lastLoadTime: string;\n\n /**\n * Fuel level (0-100) representing a percentage\n */\n @attr('number')\n declare fuelLevel?: number;\n\n /**\n * String representing either the address of the vehicle.\n * If the string is empty, either the account does not have access to the address\n * or the vehicle is not responding.\n */\n @attr('string', { defaultValue: '' })\n declare address: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/fleet-vehicle': FleetVehicle;\n }\n}\n","import BaseAlertItem from '../fleet/base-alert-item';\n\n/**\n * @classdesc\n * Trip alert item model\n */\nexport default class TripAlertItem extends BaseAlertItem {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'fleet/trip-alert-item': TripAlertItem;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n * Geo-Location fence.\n */\nexport default class Fence extends BaseModel {\n /**\n * The geolocation fence name.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * The system this fence belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'fences' })\n declare system: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'geolocation/fence': Fence;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n * A geo device.\n */\nexport default class GeoDevice extends BaseModel {\n /**\n * The system this geo device belongs to\n */\n @belongsTo('systems/system', { async: true, inverse: 'geoDevices' })\n declare system: AsyncBelongsTo;\n\n /**\n * The geo device name\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n @attr('boolean', { defaultValue: false })\n declare isCurrentDevice: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'geolocation/geo-device': GeoDevice;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SvgSymbolSignature } from '@adc/svg-system/components/svg-symbol';\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type CommercialTemperatureSensor from 'customer-site/models/devices/commercial-temperature-sensor';\n\n/**\n * @classdesc\n *\n * A model representing a Temperature Sensor Group\n */\nexport default class TemperatureSensorGroup extends BaseModel {\n /**\n * Sensor Group name\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Sensor Group icon\n */\n @attr('string', { defaultValue: 'temperature' })\n declare icon: string;\n\n /**\n * Color of the Sensor Group icon\n */\n @attr('string', { defaultValue: 'orange' })\n declare color: SvgSymbolSignature['Args']['fillColor'];\n\n /**\n * Sensor Group lower threshold (localized by server)\n */\n @attr('number', { defaultValue: 0 })\n declare lowerThreshold: number;\n\n /**\n * Sensor Group upper threshold (localized by server)\n */\n @attr('number', { defaultValue: 32 })\n declare upperThreshold: number;\n\n /**\n * List of sensors\n */\n @hasMany('devices/commercial-temperature-sensor', { async: true, inverse: null })\n declare sensors: AsyncHasMany;\n\n /**\n * Reloads all sensors\n */\n reloadRelationships(): void {\n this.sensors.reload();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'temperature-sensor-group': TemperatureSensorGroup;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { set } from '@ember/object';\nimport { filterBy, or } from '@ember/object/computed';\nimport WebrtcPreloadingSupport from 'customer-site/enums/WebrtcPreloadingSupport.ts';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Undefined } from '../enums/AccountType';\n\nimport type { ErrorReportingConfiguration } from '@adc/app-infrastructure/services/base-error-reporting';\nimport type { SessionActivityArgs } from '@adc/app-infrastructure/services/session-activity';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type AccountInformation from '@adc/login-setup-addon/models/settings/account-management/account-information/account-information';\nimport type { AsyncBelongsTo, SyncHasMany } from '@ember-data/model';\nimport type Dealer from './dealers/dealer';\nimport type RouteItemModel from './navigation/route-item';\nimport type ScheduledAppointment from './service-appointments/scheduled-appointment';\nimport type System from './systems/system';\nimport type SystemGroup from './systems/system-group';\nimport type Color from './ui/color';\nimport type Footer from './ui/footer';\nimport type ClipDonationAgreement from './video/clip-donation-agreement';\n\ninterface CustomerSiteErrorReportingConfiguration extends ErrorReportingConfiguration {\n servicePlan: string;\n}\n\n/**\n * The model that defines an Alarm.com system identity.\n */\nexport default class IdentityModel extends BaseModel {\n // region Properties\n\n /**\n * The account timezone.\n */\n @attr('string', { defaultValue: '' })\n declare timezone: string;\n\n /**\n * Preferred timezone for enterprise accounts with multiple units in various timezones.\n */\n @attr('string', { defaultValue: 'UTC' })\n declare preferredTimezone: string;\n\n /**\n * A list of initial-setup steps that the end user must complete before they can access the site.\n */\n @attr('array')\n declare initialSetupSteps: number[];\n\n /**\n * List of help tours that the should be started for login.\n */\n @attr('array')\n declare helpTours: number[];\n\n /**\n * Has the user completed onboarding to the new site?\n */\n @attr('boolean', { defaultValue: false })\n declare hasCompletedOnboarding: boolean;\n\n /**\n * Indicates whether we have internal beta access.\n */\n @attr('boolean', { defaultValue: false })\n declare hasInternalBetaAccess: boolean;\n\n /**\n * Indicates whether we have commercial internal beta access.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCommercialInternalBetaAccess: boolean;\n\n /**\n * Indicates whether we have ember reports beta access\n */\n @attr('boolean', { defaultValue: false })\n declare hasEmberReportsBetaAccess: boolean;\n\n /**\n * Indicates whether we are in the enterprise context.\n */\n @attr('boolean', { defaultValue: false })\n declare isEnterprise: boolean;\n\n /**\n * Indicates whether we are in the access control context\n */\n @attr('boolean', { defaultValue: false })\n declare isAccessControl: boolean;\n\n /**\n * Indicates whether this system or group is 24/7 Managed.\n */\n @attr('boolean', { defaultValue: false })\n declare isManagedAccessAccount: boolean;\n\n /**\n * Indicates whether this is a 24/7 Managed login.\n */\n @attr('boolean', { defaultValue: false })\n declare isManagedAccessLogin: boolean;\n\n /**\n * Indicates that this is a commercial account.\n */\n @attr('boolean', { defaultValue: false })\n declare isCommercial: boolean;\n\n /**\n * Indicates that this is a PointCentral account.\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentral: boolean;\n\n /**\n * Indicates if this is a PointCentral Access Control integrated account.\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentralAccessControl: boolean;\n\n /**\n * Indicates if the logged-in user has the enterprise locations cache enabled.\n */\n @attr('boolean', { defaultValue: false })\n declare isUsingEnterpriseLocationsCache: boolean;\n\n /**\n * Indicates if the user has access to highlights\n */\n @attr('boolean', { defaultValue: false })\n declare canViewHighlights: boolean;\n\n /**\n * Indicates if the user has access to video clips\n */\n @attr('boolean', { defaultValue: false })\n declare canViewVideoClips: boolean;\n\n /**\n * Indicates if the user has access to camera audio features for non-doorbell cameras\n *\n * Controlled by the \"Audio for Non-Doorbell Cameras\" service package addon\n */\n @attr('boolean', { defaultValue: false })\n declare hasAccessToAudioForNonDoorbellCameras: boolean;\n\n /**\n * Does this account have access to sensor based SmartArming schedules?\n */\n @attr('boolean', { defaultValue: false })\n declare hasSmartArmingSensorBased: boolean;\n\n /**\n * Does this account have access to create Smart disarming rules via Smart Arming?\n */\n @attr('boolean', { defaultValue: false })\n declare isSmartDisarmEligible: boolean;\n\n /**\n * Does this account have access to edit the Noise Sensor specific features?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditNoiseSensors: boolean;\n\n /**\n * Does this account have access to edit the Noise Sensor specific features?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditThermostats: boolean;\n\n /**\n * Does this account have access to edit the Water Meter Sensor specific features?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditWaterMeters: boolean;\n\n /**\n * Does the user have permission to preload webrtc streams?\n **/\n @attr('number', { defaultValue: WebrtcPreloadingSupport.NoPreloading })\n declare webrtcPreloadingSupportEnum: WebrtcPreloadingSupport;\n\n /**\n * The identity's dealer.\n */\n @belongsTo('dealers/dealer', { async: true, inverse: null })\n declare dealer: AsyncBelongsTo;\n\n /**\n * Primary interface color.\n */\n @belongsTo('ui/color', { async: true, inverse: null })\n declare primaryColor: AsyncBelongsTo;\n\n /**\n * Secondary interface color.\n */\n @belongsTo('ui/color', { async: true, inverse: null })\n declare secondaryColor: AsyncBelongsTo;\n\n /**\n * Navigation highlight color.\n */\n @belongsTo('ui/color', { async: true, inverse: null })\n declare navColor: AsyncBelongsTo;\n\n /**\n * Should show the Alarm Recap modal after alarm event\n */\n @attr('date')\n declare alarmEventDateTime: Date;\n\n /**\n * The image source for the dealer logo.\n */\n @attr('string', { defaultValue: '' })\n declare logoSource: string;\n\n /**\n * The image name for the dealer logo.\n */\n @attr('string', { defaultValue: '' })\n declare logoName: string;\n\n /**\n * The mobile app brand for the dealer.\n */\n @attr('string', { defaultValue: \"service provider's\" })\n declare mobileAppBrand: string;\n\n /**\n * The dealer path for CSS styles.\n */\n @attr('string', { defaultValue: 'adc' })\n declare dealerPath: string;\n\n /**\n * The dealer path for SVG sprites.\n */\n @attr('string', { defaultValue: 'adc' })\n declare dealerSpritePath: string;\n\n /**\n * FavIcon for the dealer of the currently selected system.\n */\n @attr('string', { defaultValue: '' })\n declare favIconUrl: string;\n\n /**\n * Is the website served as a webview in the mobile app?\n */\n @attr('boolean', { defaultValue: false })\n declare isMobileApp: boolean;\n\n /**\n * Is the website served as a webview in the mobile tech app?\n */\n @attr('boolean', { defaultValue: false })\n declare isMobileTechApp: boolean;\n\n /**\n * Is this a visual verification session?\n *\n * (Visual verification is a special version of our customer site that is used by central station operators to\n * view saved clips and live video during an alarm.)\n *\n * Will be clarified in WEB-18077\n */\n @attr('boolean', { defaultValue: false })\n declare isVisualVerification: boolean;\n\n /**\n * Is this an Remote Video Monitoring session?\n *\n * (Remote Video Monitoring events, like visual verification, allows central station operators to view saved clips and live video,\n * but instead of requiring an alarm from a panel, a user can configure certain recording rules to trigger it.)\n *\n * Will be clarified in WEB-18077\n */\n @attr('boolean', { defaultValue: false })\n declare isEscalatedEvents: boolean;\n\n /**\n * Are we in one of our operator sites?\n *\n * Will be clarified in WEB-18077\n */\n @or('isVisualVerification', 'isEscalatedEvents')\n declare isOperatorSite: boolean;\n\n /**\n * Is the device a windows device?\n */\n @attr('boolean', { defaultValue: false })\n declare isWindowsDevice: boolean;\n\n /**\n * The mobile build number, if applicable, based on BuildVersionInfoEnum in the backend.\n */\n @attr('number', { defaultValue: 0 })\n declare applicationBuildNumber: number;\n\n /**\n * List of supported NativeBridge features.\n */\n @attr()\n declare supportedNativeBridgeFeatures: number[];\n\n /**\n * List of native views the app is capable of transitioning to.\n */\n @attr()\n declare supportedNativeViewTransitions: number[];\n\n /**\n * Should the client run the trouble conditions service?\n */\n @attr('boolean', { defaultValue: true })\n declare hasTroubleConditionsService: boolean;\n\n /**\n * Configuration for client side error reporting.\n */\n @attr()\n declare errorReportingConfiguration: CustomerSiteErrorReportingConfiguration;\n\n /**\n * Configuration for client-side analytics reporting.\n */\n @attr()\n declare pendoConfiguration: PendoConfiguration;\n\n /**\n * Account type for the currently selected customer.\n */\n @attr('number', { defaultValue: Undefined })\n declare accountType: number;\n\n /**\n * Does the customer have access to the Programming Code as Device Setting feature\n */\n @attr('boolean', { defaultValue: false })\n declare hasProgrammingCodeAsDeviceSettingFeatureToggle: boolean;\n\n // endregion\n\n /**\n * RouteItem for the current page of currently running wizard. Null if there is no wizard.\n *\n * @note This is a kinda hack, but hopefully the best way how to do this for now.\n */\n @belongsTo('navigation/route-item', { inverse: null, async: false })\n declare wizard: RouteItemModel;\n\n /**\n * Properties for the application session duration and timeouts.\n */\n @attr()\n declare applicationSessionProperties: SessionActivityArgs;\n\n /**\n * The footer model containing information for the footer.\n */\n @belongsTo('ui/footer', { async: false, inverse: null })\n declare footer: Footer;\n\n /**\n * The profile model containing information pertinent to the profile portion of the app.\n */\n @belongsTo('profile/profile', { async: false, inverse: null })\n declare profile: Profile;\n\n /**\n * The account information model containing information pertinent to account management.\n */\n @belongsTo('settings/account-management/account-information/account-information', { async: true, inverse: null })\n declare accountInformation: AsyncBelongsTo;\n\n /**\n * Available route items for the currently logged in login.\n */\n @hasMany('navigation/route-item', { async: false, inverse: null })\n declare availableRouteItems: SyncHasMany;\n\n /**\n * Navigation structure for the application.\n */\n @filterBy('availableRouteItems', 'shouldBeShown')\n declare navigation: RouteItemModel[];\n\n /**\n * If set, the application should redirect to this object after login.\n */\n @attr()\n declare postLoginRedirect: { routeId: number; queryParams: Record };\n\n /**\n * If true, users can view and interact with clip donation UI as well as donate clips.\n */\n @attr('boolean', { defaultValue: false })\n declare canDonateClips: boolean;\n\n /**\n * If true, users will have their recording rules re-enabled after quota reset.\n */\n @attr('boolean', { defaultValue: false })\n declare canEnableRecordingRulesAfterQuotaReset: boolean;\n\n /**\n * If the user has permissions to view clip usage reports.\n */\n @attr('boolean', { defaultValue: false })\n declare canViewClipUsageReports: boolean;\n\n /**\n * If the user has permissions see the updated notifications and card on the rules page associated with the clip\n * limits UX refresh (https://jira.corp.adcinternal.com/jira/browse/VID-47927).\n */\n @attr('boolean', { defaultValue: false })\n declare canViewUpdatedClipLimitsUXRefresh: boolean;\n\n /**\n * Does the user have permission to manage video analytics\n */\n @attr('boolean', { defaultValue: false })\n declare canManageVideoAnalytics: boolean;\n\n // region systems and system groups\n\n /**\n * Currently selected system (unit).\n *\n * Even if this is enterprise and a system group is selected, there should be a selected system (unit).\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare selectedSystem: AsyncBelongsTo;\n\n /**\n * Currently selected system group.\n *\n * @note If there is no system group selected, this will be null.\n */\n @belongsTo('systems/system-group', { async: true, inverse: null })\n declare selectedSystemGroup: AsyncBelongsTo;\n\n /**\n * Properties relating to clip donation, e.g. whether the user has accepted the VA legal agreement in the past.\n */\n @belongsTo('video/clip-donation-agreement', { async: true, inverse: null })\n declare clipDonationAgreement: AsyncBelongsTo;\n\n /**\n * Is the log in enrolled in access control?\n */\n @attr('boolean', { defaultValue: false })\n declare accessControlLockdownEnabled: boolean;\n\n /**\n * Are we viewing the parent group level?\n */\n @attr('boolean', { defaultValue: false })\n declare viewingParentGroup: boolean;\n\n /**\n * Has the access control account been migrated to use Lockdown?\n */\n @attr('boolean', { defaultValue: false })\n declare accessControlMigratedForLockdown: boolean;\n\n /**\n * Contains the information regarding any upcoming appointments for notification display.\n */\n @belongsTo('service-appointments/scheduled-appointment', { async: true, inverse: null })\n declare upcomingAppointmentInfo: AsyncBelongsTo;\n\n /**\n * Indicates if the end user has the ability to create and edit scenes.\n */\n @attr('boolean', { defaultValue: false })\n declare canCreateEditScenes: boolean;\n\n /**\n * Indicates if the end user has the ability to create and edit arming schedules.\n */\n @attr('boolean', { defaultValue: false })\n declare canCreateEditArmingSchedules: boolean;\n\n /**\n * Is the account from the Builder Channel.\n */\n @attr('boolean', { defaultValue: false })\n declare isBuilderAccount: boolean;\n\n /**\n * Should the client convert temps to Celsius?\n */\n @attr('boolean', { defaultValue: false })\n declare localizeTempUnitsToCelsius: boolean;\n\n @attr('boolean', { defaultValue: false })\n declare hasMLEGUserAccess: boolean;\n\n /**\n * Indicates whether we are able to use the login template copying functionality.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCopyTemplateAccess: boolean;\n\n /**\n * Indicates whether the user has access to the Users Page Bulk Actions beta.\n */\n @attr('boolean', { defaultValue: false })\n declare hasUsersPageBulkActionsBeta: boolean;\n\n /**\n * Indicates if the current login is an enterprise login\n */\n @attr('boolean', { defaultValue: false })\n declare loginIsEnterprise: boolean;\n\n /**\n * If the user has permissions to edit onvif stream settings.\n */\n @attr('boolean', { defaultValue: false })\n declare canEditOnvifSettings: boolean;\n\n /**\n * Does the end-user have access to the Familiar Object enrollment beta (e.g. Familiar Vehicle)?\n */\n @attr('boolean', { defaultValue: false })\n declare hasFamiliarObjectEnrollmentBeta: boolean;\n\n /**\n * If the end-user is able to access the knowledge base articles.\n */\n @attr('boolean', { defaultValue: false })\n declare canViewKnowledgeBase: boolean;\n\n /**\n * Does the end-user have access to edit templates on the Login Permission Templates page?\n */\n @attr('boolean', { defaultValue: false })\n declare hasLoginTemplatesEditAccess: boolean;\n\n /**\n * Does the user have the people ui feature enabled?\n *\n * Note - This will be removed once the people specific routes are ready to be created.\n */\n @attr('boolean', { defaultValue: false })\n declare canViewPeopleUi: boolean;\n\n /**\n * Does the user have access to the Stories feature?\n */\n @attr('boolean', { defaultValue: false })\n declare hasStoriesAccess: boolean;\n\n /**\n * Is the PromoteSingleUser feature toggle enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare canPromoteSingleUser: boolean;\n\n /**\n * Does this user have access to the live view buzz door feature?\n */\n @attr('boolean', { defaultValue: false })\n declare hasLiveViewBuzzDoorAccess: boolean;\n\n /**\n * Does this user have access to the FOV health checks feature?\n */\n @attr('boolean', { defaultValue: false })\n declare hasFovHealthChecks: boolean;\n\n /**\n * Should we hide the subroutes navigation from the app-header?\n */\n @attr('boolean', { defaultValue: false })\n declare hideSubNav: boolean;\n\n /**\n * Is the customer able to use AI Deterrence?\n */\n @attr('boolean', { defaultValue: false })\n declare canUseAIDeterrence: boolean;\n\n /**\n * Whether we should remain on the same page after switching contexts.\n */\n @attr('boolean', { defaultValue: false })\n declare stayOnCurrentPageAfterContextSwitch: boolean;\n\n /**\n * Does the customer have access to Enterprise Alerts and Issues features\n */\n @attr('boolean', { defaultValue: false })\n declare hasAccessToEnterpriseAlertsAndIssues: boolean;\n\n /**\n * Is the customer's dealer CPI?\n */\n @attr('boolean', { defaultValue: false })\n declare isCpiDealer: boolean;\n\n // endregion\n\n // region api calls\n\n /**\n * Mark that a help tour has been completed.\n */\n markHelpTourAsCompleted(helpTour: number): AsyncModelPayload {\n set(\n this,\n 'helpTours',\n this.helpTours.filter((helpTourId) => helpTourId !== helpTour)\n );\n return this.submitCustomApiCall>('markHelpTourAsCompleted', 'POST', helpTour);\n }\n\n /**\n * Enable or disable AC Lockdown for the current customer.\n */\n enableDisableLockdown(enabled: boolean): AsyncModelPayload {\n set(this, 'accessControlLockdownEnabled', enabled);\n return this.submitCustomApiCall>('enableDisableLockdown', 'PUT', enabled);\n }\n\n /**\n * Reload the whole context on the server side.\n *\n * @warning This is EXTREMELY expensive. Only do this when you know what you are doing.\n */\n reloadContext(): AsyncModelPayload {\n return this.submitCustomApiCall>('reloadContext');\n }\n\n /**\n * Reloads both the context and this identity model.\n *\n * @warning This is a very expensive operation.\n */\n reloadContextAndModel(): Promise {\n return this.reloadContext().then(() => this.reload());\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n identity: IdentityModel;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type ImageSensorModel from './image-sensor';\n\n/**\n * Image sensor image model.\n */\nexport default class ImageSensorImage extends RecordModel {\n /**\n * The {@link models.devices.ImageSensor} this image belongs to.\n */\n @belongsTo('image-sensor/image-sensor', {\n async: true,\n inverse: null\n })\n declare imageSensor: AsyncBelongsTo;\n\n /**\n * The Base64 encoded image.\n */\n @attr('string', { defaultValue: '' })\n declare image: string;\n\n /**\n * URI for the image sensor image source.\n */\n @attr('string', { defaultValue: '' })\n declare imageSrc: string;\n\n /**\n * The event description for this image upload.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Time stamp of when the image was taken.\n */\n @attr('date')\n declare timestamp: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'image-sensor/image-sensor-image': ImageSensorImage;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from '../systems/system';\n\n/**\n * @classdesc\n * Image sensor device model.\n */\nexport default class ImageSensor extends BaseModel {\n /**\n * The system (unit) that this camera belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'imageSensors' })\n declare system: AsyncBelongsTo;\n\n /**\n * The name of the image sensor on the system.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * True if the device is deleted; False otherwise.\n */\n @attr('boolean', { defaultValue: false })\n declare isImageSensorDeleted: boolean;\n\n /**\n * True if the device supports PeekInNow; False otherwise.\n */\n @attr('boolean', { defaultValue: false })\n declare supportPeekInNow: boolean;\n\n /**\n * True if the device supports PeekInNextMotion; False otherwise.\n */\n @attr('boolean', { defaultValue: false })\n declare supportPeekInNextMotion: boolean;\n\n /**\n * Should we hide the peek in next motion button?\n */\n @attr('boolean', { defaultValue: false })\n declare hidePeekInNextMotionButton: boolean;\n\n /**\n * Can the currently logged in login view images for this sensor?\n */\n @attr('boolean', { defaultValue: false })\n declare canViewImages: boolean;\n\n /**\n * Is the image sensor excluded from visual verification?\n */\n @attr('boolean', { defaultValue: false })\n declare excludedFromVisualVerification: boolean;\n\n /**\n * Is the image sensor excluded from Remote Video Monitoring Console?\n */\n @attr('boolean', { defaultValue: false })\n declare excludedFromEscalatedEvents: boolean;\n\n // region API Calls\n\n /**\n * Peek in on next motion detection.\n */\n peekInMotion(): Promise {\n return this.submitCustomApiCall('doPeekInMotion');\n }\n\n /**\n * Peek in right now.\n */\n peekInNow(): Promise {\n return this.submitCustomApiCall('doPeekInNow');\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'image-sensor/image-sensor': ImageSensor;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Image sensor uploaded clip permissions model.\n */\nexport default class UploadClipPermissions extends Model {\n /**\n * Whether this user can rename clips.\n */\n @attr('boolean', { defaultValue: false })\n declare canName: boolean;\n\n /**\n * Whether this user can delete clips.\n */\n @attr('boolean', { defaultValue: false })\n declare canDelete: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'image-sensor/upload-clip-permission': UploadClipPermissions;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { LoginRoleOnSystemOrGroup } from 'customer-site/transforms/system-group-login-roles-list';\nimport type LoginTemporarySchedule from 'customer-site/utils/transforms-objects/login-temporary-schedule';\nimport type WeeklySchedule from '../../utils/transforms-objects/weekly-schedule';\n\n/**\n * @classdesc\n *\n * The base login model.\n */\nexport default class BaseLogin extends BaseModel {\n /**\n * The login's name.\n */\n @attr('string')\n declare loginName: string;\n\n /**\n * Describes the login's role on the customer site (Custom, Administrator, Owner, etc.).\n */\n @attr('string')\n declare roleDescription: string;\n\n /**\n * The level of access a login has (customer, system group, parent group).\n * Associated with the LoginLevelTypeEnum.\n */\n @attr('string')\n declare loginAccessDescription: string;\n\n /**\n * The email address associated with the login.\n */\n @attr('string')\n declare emailAddress: string;\n\n /**\n * The culture id associated with the login.\n */\n @attr('number')\n declare cultureId: number;\n\n /**\n * Any additional information we'd like to provide to the end-user when they're editing the login. This will appear at the top of the page.\n * This could provide information on why the end-user can't edit the login, any warning messages, etc.\n */\n @attr('string')\n declare extraLoginInformation: string;\n\n /**\n * Can we edit this login?\n */\n @attr('boolean')\n declare canBeEdited: boolean;\n\n /**\n * Can we delete this login?\n */\n @attr('boolean')\n declare canBeDeleted: boolean;\n\n /**\n * Is the login a scheduled device login?\n */\n @attr('boolean', { defaultValue: false })\n declare isScheduledDeviceLogin: boolean;\n\n /**\n * The confirmation message to show when deleting the login.\n */\n @attr('string')\n declare deleteConfirmationMessage: string;\n\n /**\n * The login role the login has on various system groups.\n */\n @attr('system-group-login-roles-list')\n loginRolesItems?: { [index: string]: LoginRoleOnSystemOrGroup };\n\n /**\n * A weekly schedule that determines when the login has access.\n *\n * @note An example schedule is MWF from 9am-5pm.\n */\n @attr('weekly-schedule')\n declare weeklySchedule?: WeeklySchedule;\n\n /**\n * A schedule containing defining a fixed period of time via a start and end date.\n */\n @attr('login-temporary-schedule')\n declare loginTemporarySchedule?: LoginTemporarySchedule;\n\n /**\n * Elevate login to have access to this selected system group.\n */\n elevateLogin(): Promise {\n return this.submitCustomApiCall('elevateLogin');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'logins/base-login': BaseLogin;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseLogin from './base-login';\n\n/**\n * @classdesc\n *\n * Customer login model.\n */\nexport default class CustomerLogin extends BaseLogin {\n /**\n * Does this login have access to system groups?\n */\n @attr('boolean', { defaultValue: true })\n declare hasSystemGroupAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'logins/customer-login': CustomerLogin;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Login Permissions Collection model.\n */\nexport default class LoginPermissionsCollection extends BaseModel {\n /**\n * If the login has access to show Add Group Login button, else hide it\n */\n @attr('boolean', { defaultValue: false })\n declare showAddGroupLoginButton: boolean;\n\n /**\n * If the login has access to show Add Enterprise Group button, else hide it\n */\n @attr('boolean', { defaultValue: false })\n declare showAddEnterpriseGroupButton: boolean;\n\n /**\n * If the login supports Multi Level Enterprise Groups (MLEG)\n */\n @attr('boolean', { defaultValue: false })\n declare loginSupportsMultiLevelEnterpriseGroups: boolean;\n\n /**\n * Whether the login supports SSO (e.g. Cox)\n */\n @attr('boolean', { defaultValue: false })\n declare loginSupportsSso: boolean;\n\n /**\n * If the login has write access on the single system manage logins page\n */\n @attr('boolean', { defaultValue: false })\n declare hasSingleSystemManageLoginsWriteAccess: boolean;\n\n /**\n * If the login is a system group admin\n */\n @attr('boolean', { defaultValue: false })\n declare isLoginSystemGroupAdmin: boolean;\n\n /**\n * If the system login has MLEG Access\n */\n @attr('boolean', { defaultValue: false })\n declare hasMLEG: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'logins/login-permissions-collection': LoginPermissionsCollection;\n }\n}\n","import BaseLogin from './base-login';\n\n/**\n * @classdesc\n *\n * Non-group login model.\n */\nexport default class NonGroupLogin extends BaseLogin {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'logins/non-group-login': NonGroupLogin;\n }\n}\n","import BaseLogin from 'customer-site/models/logins/base-login';\n\n/**\n * @classdesc\n *\n * The model for a system group login.\n */\nexport default class SystemGroupLogin extends BaseLogin {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your model.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'logins/system-group-login': SystemGroupLogin;\n }\n}\n","import Model, { belongsTo, hasMany } from '@ember-data/model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type RouteItemModel from './route-item';\n\n/**\n * @classdesc\n *\n * Relationship definitions for RouteItem\n *\n * It is easier to split the relationship into this model, because then there is no need to define multiple parents for RouteItems\n */\nexport default class RouteItemRelationship extends Model {\n /**\n * RouteItem that this relationship belongs to\n */\n @belongsTo('navigation/route-item', { inverse: 'relationship', async: false })\n declare routeItem: RouteItemModel;\n\n /**\n * Routes to be shown in the sub navigation menu\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @hasMany('navigation/route-item', { async: false })\n declare subRoutes: SyncHasMany;\n\n /**\n * Routes that can be accessed by drilling through the RouteItem associated with this relationship\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @hasMany('navigation/route-item', { async: false })\n declare childRoutes: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'navigation/route-item-relationship': RouteItemRelationship;\n }\n}\n","import Model, { belongsTo, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Unknown } from '../../enums/CustomerPageUrl';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type UiColor from '../ui/color';\nimport type RouteItemRelationship from './route-item-relationship';\n\n/**\n * Goes through every route item in the provided array and returns a set of those route items\n * with their nested child and subroutes.\n *\n * @param routeItems Array of nested route items to unwrap (e.g. identity.availableRouteItems)\n * @returns A set of all nested route items.\n */\nexport function unwrapRouteItems(routeItems?: SyncHasMany): Set {\n const unwrapRouteItemsHelper = (routeItems?: SyncHasMany): RouteItem[] =>\n routeItems\n ?.map((routeItem) => [\n routeItem,\n ...unwrapRouteItemsHelper(routeItem.relationship?.childRoutes),\n ...unwrapRouteItemsHelper(routeItem.relationship?.subRoutes)\n ])\n .flat() ?? [];\n\n return new Set(unwrapRouteItemsHelper(routeItems));\n}\n\n/**\n * @classdesc\n * Route item model\n */\nexport default class RouteItem extends Model {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n /**\n * Page Title for the route\n */\n @attr('string')\n declare pageTitle: string;\n\n /**\n * Url for the route\n */\n @attr('string')\n declare url: string;\n\n /**\n * Is this route a native Ember route?\n */\n @attr('boolean', { defaultValue: false })\n declare isNative: boolean;\n\n /**\n * Specific color for this route for the app header or nav highlight\n */\n @attr('string', { defaultValue: '' })\n declare color: string;\n\n /**\n * Optional icon for this route.\n */\n @attr('string', { defaultValue: '' })\n declare icon: string;\n\n /**\n * Should this item be shown as part of navigation list?\n */\n @attr('boolean', { defaultValue: false })\n declare isNavigationItem: boolean;\n\n /**\n * Whether the link to this route should be made hidden on the header-tabs\n */\n @attr('boolean', { defaultValue: false })\n declare isHiddenFromNavigation: boolean;\n\n /**\n * Is this a link to an external site?\n * @type {boolean}\n * @default false\n */\n @attr('boolean', { defaultValue: false })\n declare isExternalLink: boolean;\n\n /**\n * Controls if this item should be shown only if it has child routes that are accessible.\n */\n @attr('boolean', { defaultValue: false })\n declare showOnlyIfChildRoutesExist: boolean;\n\n /**\n * Should this item be shown based on isNavigationItem, showOnlyIfChildRoutesExist, and if the item has children\n */\n @computed('showOnlyIfChildRoutesExist', 'relationship', 'isNavigationItem')\n get shouldBeShown(): boolean {\n const { showOnlyIfChildRoutesExist, relationship, isNavigationItem } = this;\n\n if (!isNavigationItem) {\n return false;\n }\n\n if (!showOnlyIfChildRoutesExist) {\n return true;\n }\n\n return relationship.childRoutes.length > 0;\n }\n\n get highlightColor(): UiColor | null {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let item: RouteItem = this;\n\n while (item) {\n const colorItem = item.color;\n\n if (colorItem) {\n return this.store.createRecord('ui/color', {\n light: colorItem,\n dark: colorItem,\n highContrast: colorItem,\n darkHighContrast: colorItem\n });\n }\n\n // NOTE: If there's a cyclical definition in the navigation we could get into\n // an infinite loop here (e.g. WEB-1183). It can be tricky to figure out what's happening so this error\n // should help\n if (item === get(item, 'parent')) {\n console.error('route-item.highlightColor infinite loop, check web-format.xml !');\n return null;\n }\n\n item = get(item, 'parent');\n }\n\n return null;\n }\n\n /**\n * Parent route that this route item is a sub route of\n */\n @belongsTo('navigation/route-item', {\n inverse: null,\n async: false\n })\n declare parent: RouteItem;\n\n @belongsTo('navigation/route-item-relationship', {\n inverse: 'routeItem',\n async: false\n })\n declare relationship: RouteItemRelationship;\n\n /**\n * Returns the routeId (CustomerPageUrlEnum) for this model\n *\n * Note: If this model does not have a routeId, then this returns 0 (Unknown)\n */\n @computed('id')\n get routeId(): number {\n const routeId = parseInt((this.id.split('.') || []).pop() as string, 10);\n return isNaN(routeId) ? Unknown : routeId;\n }\n\n /**\n * Is this routeItem a subRoute of its parent?\n */\n @computed('parent.relationship.subRoutes')\n get isSubRoute(): boolean {\n return (get(get(this.parent ?? {}, 'relationship') ?? {}, 'subRoutes' ?? {}) ?? []).includes(this);\n }\n\n /**\n * Should the route be currently shown in a modal?\n */\n @computed('showInModalDefault', 'contextManager.isWizard')\n get showInModal(): boolean {\n return this.showInModalDefault && !this.contextManager.isWizard;\n }\n\n /**\n * Should the route be shown in a modal as a default?\n */\n @attr('boolean', { defaultValue: false })\n declare showInModalDefault: boolean;\n\n /**\n * Returns the root route of the current tree that should be shown in modal\n */\n @computed('showInModal')\n get showInModalRootRouteItem(): RouteItem | null {\n if (!this.showInModal) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let item: RouteItem = this;\n\n while (get(get(item, 'parent') ?? {}, 'showInModal')) {\n item = get(item, 'parent');\n }\n\n return item;\n }\n\n /**\n * Returns the root routeItem for the current item.\n */\n @computed('id', 'item')\n get rootItem(): RouteItem {\n // This series of steps seems very dumb, but I could not come up with a better solution.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let item: RouteItem = this,\n parent: RouteItem = get(item, 'parent'),\n iterationsCount = 0;\n\n while (parent) {\n // Avoid cyclical issue.\n if (item === parent) {\n return item;\n }\n\n // Prevent cyclical issues.\n if (iterationsCount > 10) {\n console.error(`Too many iterations for getting rootItem of item ${this.id}`, this);\n return parent;\n }\n\n item = parent;\n\n parent = get(parent, 'parent');\n\n if (!parent) {\n return item;\n }\n\n iterationsCount++;\n }\n\n return parent;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'navigation/route-item': RouteItem;\n }\n}\n","import { attr } from '@ember-data/model';\nimport NotificationType from './notification-type';\n\n/**\n * @classdesc\n * A model to represent the BaseNotification business object\n */\nexport default class BaseNotification extends NotificationType {\n /**\n * Name of the notification\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Whether or not the notification is currently active or paused\n */\n @attr('boolean', { defaultValue: false })\n declare active: boolean;\n\n /**\n * The display string for the delivery frequency of the notification\n */\n @attr('string')\n declare scheduleDescription: string;\n\n /**\n * Whether the option to choose between all devices or specific devices is available\n */\n @attr('boolean', { defaultValue: false })\n declare allowsDeviceSelection: boolean;\n\n /**\n * Whether the option to choose between all locations or specific locations is available\n */\n @attr('boolean', { defaultValue: false })\n declare allowsLocationSelection: boolean;\n\n /**\n * List of devices associated with the notification.\n */\n @attr('array')\n declare deviceIds: string[];\n\n /**\n * List of locations associated with the notification.\n */\n @attr('array')\n declare locationIds: string[];\n\n /**\n * List of system groups associated with the notification\n */\n @attr('array')\n declare groupIds: string[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'notifications/base-notification': BaseNotification;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * This model holds some notification type information that is used across all of its subclasses\n */\nexport default class NotificationType extends BaseModel {\n /**\n * The notification's type\n */\n @attr('number')\n declare notificationType: number;\n\n /**\n * The display name for the notification's type\n */\n @attr('string')\n declare notificationTypeName: string;\n\n /**\n * The name of the svg icon that is displayed for the notification's type\n */\n @attr('string')\n declare notificationTypeIcon: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'notifications/notification-type': NotificationType;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseNotification from '../base-notification';\n\nimport type { AsyncHasMany, SyncHasMany } from '@ember-data/model';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type EmailAddress from 'customer-site/models/users/email-address';\nimport type { RuleGroupInfo } from 'customer-site/transforms/rule-group-info-list';\nimport type { RuleIdInfo } from 'customer-site/transforms/rule-id-info-list';\n\n/**\n * @classdesc\n * A model to represent the BaseReport business object\n */\nexport default class BaseReport extends BaseNotification {\n /**\n * How often the report runs\n */\n @attr('number', { defaultValue: 0 })\n declare timeFrameType: number;\n\n /**\n * Email Address recipients for the report\n */\n @hasMany('users/email-address', { async: true, inverse: null })\n declare emailAddresses: AsyncHasMany;\n\n /**\n * Time frame that the report is restricted to, if there is such a restriction.\n */\n @attr('number')\n declare forcedTimeFrame: number | undefined;\n\n /**\n * List of event types.\n */\n @attr('array')\n declare eventTypes: number[];\n\n /**\n * Request the URL for the most recently created report view.\n */\n getMostRecentReportViewURL(): Promise {\n return this.submitCustomApiCall('getMostRecentReportViewURL', 'GET');\n }\n\n /**\n * Generate a new report view.\n */\n generateNewReportView(): Promise {\n return this.submitCustomApiCall('generateNewReportView', 'GET');\n }\n\n /**\n * Extra data for the report. Only used in special circumstances.\n */\n @attr('string', { defaultValue: '' })\n declare extraData: string;\n\n /**\n * Whether or not the current context can save this report.\n */\n @attr('boolean', { defaultValue: false })\n declare canEdit: boolean;\n\n /**\n * Whether or not the current context can toggle this report on/off.\n */\n @attr('boolean', { defaultValue: false })\n declare canToggle: boolean;\n\n /**\n * Serialized Camera Rule Identifying Information objects, associates this report with rule thresholds if appropriate\n */\n @attr('rule-id-info-list')\n declare ruleIdInfos: RuleIdInfo[];\n\n /**\n * Serialized RuleGroupInfo objects.\n * Associates this report with rule groups and thresholds if appropriate.\n */\n @attr('rule-group-info-list')\n declare ruleGroupInfos: RuleGroupInfo[];\n\n /**\n * Whether this BAA report is tabular or graphic.\n */\n @attr('boolean', { defaultValue: true })\n declare isTabularReport: boolean;\n\n /**\n * Determines which attachment to include when generating report view emails for this report.\n */\n @attr('number')\n declare attachmentSelection: number;\n\n /**\n * The possible attachment options this report type supports.\n */\n @attr('array')\n declare attachmentOptions: number[];\n\n /**\n * The possible event options to be displayed for the Alarms & Issues Report.\n * We use this property instead of eventTypes because extraData consists of\n * AlarmsIssuesReportOptionsEnum's for the Alarms & Issues Report,\n * but EventTypeEnum's for the Location Open/Close and Access History reports.\n */\n @attr('array')\n declare alarmsIssuesReportOptions: number[];\n\n /**\n * The possible event options to be displayed for the Trouble Condition Report.\n */\n @attr('array')\n declare troubleConditionReportOptions: number[];\n\n /**\n * The possible locations from which the user can choose to include for some report types.\n */\n @hasMany('enterprise/locations/location', { async: false, inverse: null })\n declare possibleLocations: SyncHasMany;\n\n /**\n * Whether or not the current context supports the View Latest Report button.\n *\n * @type {boolean}\n */\n @attr('boolean', { defaultValue: true })\n declare canDisplayMostRecentReportView: boolean;\n\n /**\n * Toggles whether the report is Active/Inactive.\n */\n toggleActiveStatus(): Promise {\n return this.submitCustomApiCall('toggleActiveStatus', 'PUT');\n }\n\n /**\n * Whether the report is fully setup.\n */\n @attr('boolean', { defaultValue: true })\n declare isFullySetup: boolean;\n\n /**\n * Whether the report can be generated on demand. On the ember reports page, the \"run report\" button will only be visible if this is true\n */\n @attr('boolean', { defaultValue: true })\n declare canGenerateReportOnDemand: boolean;\n\n /**\n * The description of the notification type\n */\n @attr('string')\n declare notificationDescription: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'notifications/reports/base-report': BaseReport;\n }\n}\n","import { attr } from '@ember-data/model';\nimport NotificationType from '../notification-type';\n\n/**\n * @classdesc\n * A model that holds the information needed for each type of report\n * displayed in the Ember site's report catalog page.\n */\nexport default class ReportCatalogItem extends NotificationType {\n /**\n * The description for this type of notification\n */\n @attr('string')\n declare notificationTypeDescription: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'notifications/reports/report-catalog-item': ReportCatalogItem;\n }\n}\n","import { attr } from '@ember-data/model';\nimport AdcBaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc A model to represent the ReportView business object.\n */\nexport default class ReportView extends AdcBaseModel {\n /**\n * The name of the report\n */\n @attr('string')\n declare name: string;\n\n /**\n * The type of report\n */\n @attr('string')\n declare reportType: string;\n\n /**\n * The local time of the report\n */\n @attr('string')\n declare localTime: string;\n\n /**\n * The subscription type of the report\n */\n @attr('string')\n declare subscriptionType: string;\n\n /**\n * The url for the webview\n */\n @attr('string')\n declare url: string;\n\n /**\n * The name of the report's icon\n */\n @attr('string')\n declare icon: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'notifications/reports/report-view': ReportView;\n }\n}\n","import { cached } from '@glimmer/tracking';\nimport { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport enum AlarmType {\n PersonalSafety = 'safety-button',\n ConnectedCar = 'connected-car'\n}\n\ntype Icon = 'tap-hold' | 'car-unauthorized';\ntype TranslationKey = 'operator.safetyButtonAlarm' | 'operator.carPanicAlarm';\ntype Route = 'operator.personal-safety';\n\ninterface AlarmProperties {\n icon: Icon;\n labelTranslationKey: TranslationKey;\n route: Route;\n}\n\nconst AlarmPropertiesMap: Record = {\n [AlarmType.PersonalSafety]: {\n icon: 'tap-hold',\n labelTranslationKey: 'operator.safetyButtonAlarm',\n route: 'operator.personal-safety'\n },\n [AlarmType.ConnectedCar]: {\n icon: 'car-unauthorized',\n labelTranslationKey: 'operator.carPanicAlarm',\n route: 'operator.personal-safety'\n }\n};\n\nexport default class PersonalSafetyAlarmLink extends BaseModel {\n @attr('date')\n declare eventDateUtc: Date;\n\n @attr('string')\n declare alarmType: AlarmType;\n\n /**\n * The name of the user that triggered the alarm\n */\n @attr('string')\n declare name: string;\n\n @cached\n get icon(): Icon {\n return AlarmPropertiesMap[this.alarmType].icon;\n }\n\n @cached\n get labelTranslationKey(): TranslationKey {\n return AlarmPropertiesMap[this.alarmType].labelTranslationKey;\n }\n\n @cached\n get route(): Route {\n return AlarmPropertiesMap[this.alarmType].route;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'personal-safety/alarm-link': PersonalSafetyAlarmLink;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class PersonalSafetyAlarm extends BaseModel {\n /**\n * Is PSAP Contacted\n */\n @attr('boolean')\n declare isPSAPContacted: boolean;\n\n /**\n * Is Canceled\n */\n @attr('boolean')\n declare isCanceled: boolean;\n\n /**\n * Filled with the customer phone at cancellation moment.\n */\n @attr('string')\n declare canceledBy: string;\n\n @attr('date')\n declare eventDateUtc: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'personal-safety/alarm': PersonalSafetyAlarm;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class PersonalSafetyEmergencyContact extends BaseModel {\n /**\n * Full Name\n */\n @attr('string')\n declare name: string;\n\n /**\n * Phone\n */\n @attr('string')\n declare phoneNumber: string;\n\n /**\n * Is Primary\n */\n @attr('boolean')\n declare isPrimary: boolean;\n\n @computed('name')\n get fullName(): string {\n return this.name;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'personal-safety/emergency-contact': PersonalSafetyEmergencyContact;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport enum LocationType {\n LOCATION_CURRENT = 'None',\n LOCATION_START = 'Start'\n}\n\nexport default class PersonalSafetyLocation extends BaseModel {\n @attr('number')\n declare latitude: number;\n\n @attr('number')\n declare longitude: number;\n\n /**\n * The type of the pin on map(curent/starting point)\n */\n @attr('string')\n declare locationType: LocationType;\n\n /**\n * The time when the location was updated\n */\n @attr('date')\n declare eventTime: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'personal-safety/location': PersonalSafetyLocation;\n }\n}\n","import { belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type PersonalSafetyAlarm from './alarm';\nimport type PersonalSafetyLocation from './location';\n\nexport default class PersonalSafetySession extends BaseModel {\n /**\n * Personal Safety Alarm\n */\n @belongsTo('personal-safety/alarm', { async: true, inverse: null })\n declare alarm: AsyncBelongsTo;\n\n /**\n * Personal Safety Locations\n */\n @hasMany('personal-safety/location', { async: true, inverse: null })\n declare locations: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'personal-safety/session': PersonalSafetySession;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type PersonalSafetyEmergencyContact from './emergency-contact';\n\nexport default class PersonalSafetyUserProfile extends BaseModel {\n /**\n * First Name\n */\n @attr('string')\n declare firstName: string;\n\n /**\n * Last Name\n */\n @attr('string')\n declare lastName: string;\n\n /**\n * Phone\n */\n @attr('string')\n declare phoneNumber: string;\n\n /**\n * Personal Safety Emergency Contacts\n */\n @hasMany('personal-safety/emergency-contact', { async: true, inverse: null })\n declare emergencyContacts: AsyncHasMany;\n\n @computed('firstName', 'lastName')\n get fullName(): string {\n return `${this.firstName} ${this.lastName}`;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'personal-safety/user-profile': PersonalSafetyUserProfile;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type LongTermRentalCommunity from './point-central/community/long-term-rental-community';\n\n/**\n * Identity model with PointCentral specific feature properties.\n */\nexport default class PointCentralIdentity extends BaseModel {\n /**\n * Is the PCMC feature toggle turned on?\n */\n @attr('boolean', { defaultValue: false })\n declare hasPointCentralMobileCredentialsFeatureToggle: boolean;\n\n /**\n * Does the end-user have access to edit on the Property Management Integrations page?\n */\n @attr('boolean', { defaultValue: false })\n declare hasPropertyManagementIntegrationEditAccess: boolean;\n\n /**\n * Indicates if this is a STR PointCentral Access Control integrated account.\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentralAccessControlSTR: boolean;\n\n /**\n * Indicates that this is a PointCentral Vacation Rental Management account.\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentralSTR: boolean;\n\n /**\n * Indicates that this is a PointCentral Residential Property Management account.\n */\n @attr('boolean', { defaultValue: false })\n declare isPcRpm: boolean;\n\n /**\n * Is the guest common area improvement feature toggle enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isGuestCommonAreaImprovementFeatureToggleEnabled: boolean;\n\n /**\n * Is the DeleteExpiredInactivePCUsers feature toggle on?\n */\n @attr('boolean', { defaultValue: false })\n declare hasDeleteExpiredInactivePCUsersFeatureToggle: boolean;\n\n /**\n * Indicates if the users page is going to load guests only initially (used for STR).\n */\n @attr('boolean', { defaultValue: false })\n declare hasUsersPageAutomaticFilterForGuestsOnly: boolean;\n\n /**\n * Whether to show the sync to pms button\n */\n @attr('boolean', { defaultValue: false })\n declare showSyncToPmsButton: boolean;\n\n /**\n * Config for FullStory tracking\n */\n @attr('string', { defaultValue: '' })\n declare fullStoryConfig: string;\n\n /**\n * 'longTermRentalCommunity' relationship to 'LongTermRentalCommunity' model\n */\n @belongsTo('point-central/community/long-term-rental-community', { async: true, inverse: null })\n declare longTermRentalCommunity: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'point-central-identity': PointCentralIdentity;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n// 'DisplayField' model extends 'BaseModel'\nexport default class DisplayField extends BaseModel {\n // 'name' attribute of type 'string' with default value as empty string\n @attr('string', { defaultValue: '' })\n declare name: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'point-central/community/display-field': DisplayField;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n// 'GroupStructure' model extends 'BaseModel'\nexport default class GroupStructure extends BaseModel {\n // 'parentGroupId' attribute of type 'number' with default value as null\n @attr('number', { defaultValue: null })\n declare parentGroupId: number;\n\n // 'occupiedGroupId' attribute of type 'number' with default value as null\n @attr('number', { defaultValue: null })\n declare occupiedGroupId: number;\n\n // 'vacantGroupId' attribute of type 'number' with default value as null\n @attr('number', { defaultValue: null })\n declare vacantGroupId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'point-central/community/group-structure': GroupStructure;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type DisplayField from './display-field';\nimport type GroupStructure from './group-structure';\n\n// 'LongTermRentalCommunity' model extends 'BaseModel'\nexport default class LongTermRentalCommunity extends BaseModel {\n // 'displayField' relationship to 'DisplayField' model\n @belongsTo('point-central/community/display-field', { async: true, inverse: null })\n declare displayField: AsyncBelongsTo;\n\n // 'groupStructure' relationship to 'GroupStructure' model\n @belongsTo('point-central/community/group-structure', { async: true, inverse: null })\n declare groupStructure: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'point-central/community/long-term-rental-community': LongTermRentalCommunity;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class ResidentInfo extends BaseModel {\n @attr('string', { defaultValue: null })\n declare firstName: string;\n\n @attr('string', { defaultValue: null })\n declare lastName: string;\n\n @attr('string', { defaultValue: null })\n declare email: string;\n\n @attr('string', { defaultValue: null })\n declare phone: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'point-central/manage-residents/resident-info': ResidentInfo;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type ResidentInfo from './resident-info';\n\nexport default class ResidentMoveInfo extends BaseModel {\n // list of move-in\n @hasMany('point-central/manage-residents/resident-info', { async: true, inverse: null })\n declare residentsMovingIn: AsyncHasMany;\n\n // list of move-out\n @hasMany('point-central/manage-residents/resident-info', { async: true, inverse: null })\n declare residentsMovingOut: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'point-central/manage-residents/resident-move-info': ResidentMoveInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ProgrammingCodeState from 'customer-site/enums/ProgrammingCodeState';\n\nexport default class LockProgrammingCode extends BaseModel {\n /**\n * The randomization state of the Lock Programming Code\n */\n @attr('number')\n declare programmingCodeState: ProgrammingCodeState;\n\n /**\n * The programming code as a string\n */\n @attr('string')\n declare programmingCode: string;\n\n /**\n * Whether the lock we're looking at is programming code compatible.\n */\n @attr('boolean')\n declare isProgrammingCodeCompatible: boolean;\n\n getWithCode(): Promise<{ value: string }> {\n return this.submitCustomApiCall('withCode', 'GET');\n }\n\n submitRandomizeRequest(): Promise {\n return this.submitCustomApiCall('randomizeNow', 'POST');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'programming-code/lock-programming-code': LockProgrammingCode;\n }\n}\n","import { attr } from '@ember-data/model';\nimport PersonalSafetyUserProfile from '../personal-safety/user-profile';\n\nexport default class SafetyButtonCustomerProfile extends PersonalSafetyUserProfile {\n /**\n * Pin code\n */\n @attr('string')\n declare pinCode: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'safety-button/customer-profile': SafetyButtonCustomerProfile;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport enum NoteType {\n NONE = 'NONE',\n IMPORTANT = 'IMPORTANT'\n}\n\nexport default class SafetyButtonNote extends BaseModel {\n /**\n * The type of the user note(important/none)\n */\n @attr('string')\n declare noteType: NoteType;\n\n /**\n * The content of the note\n */\n @attr('string')\n declare content: string;\n\n /**\n * The time when the note was updated\n */\n @attr('date')\n declare updatedAt: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'safety-button/note': SafetyButtonNote;\n }\n}\n","import { belongsTo, hasMany } from '@ember-data/model';\nimport PersonalSafetySession from '../personal-safety/session';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type SafetyButtonCustomerProfile from './customer-profile';\nimport type SafetyButtonNote from './note';\n\nexport default class SafetyButtonSession extends PersonalSafetySession {\n /**\n * Safety Button User\n */\n @belongsTo('safety-button/customer-profile', { async: true, inverse: null })\n declare customerProfile: AsyncBelongsTo;\n\n /**\n * Safety Button Notes\n */\n @hasMany('safety-button/note', { async: true, inverse: null })\n declare notes: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'safety-button/session': SafetyButtonSession;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model for the RTS preset, which associates paired RTS devices with a given setpoint\n *\n * @class models.schedules.RtsPreset\n * @extends BaseModel\n */\nexport default class RtsPresetModel extends BaseModel {\n /**\n * The setpoint of the preset.\n */\n @attr('number')\n declare setpointType: number;\n\n /**\n * The remote temp sensors assocated with the provided setpoint.\n */\n @attr('array')\n declare deviceIds: string[];\n\n /**\n * Determines if the content of the device ids attribute has changed.\n */\n @computed('deviceIds', 'hasDirtyAttributes')\n get hasDirtyIds(): boolean {\n if (!this.changedAttributes().deviceIds || !this.hasDirtyAttributes) {\n return false;\n }\n\n // The two empty lists are for typing purposes, any empty list should have already disqualified by the above conditional.\n const changedAttrs = this.changedAttributes().deviceIds || [[], []];\n\n return (\n changedAttrs[0].length !== changedAttrs[1].length ||\n !changedAttrs[0].every((id: string) => changedAttrs[1].includes(id))\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'schedules/rts-preset': RtsPresetModel;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type SchedulesTransitionEvent from 'customer-site/models/schedules/transition-event';\n\n/**\n * @classdesc\n * The model representing a timeframe in a given Smart Schedules Audit day.\n *\n * @class models.schedules.SchedulePresetTimeFrame\n */\nexport default class SchedulePresetTimeFrame extends BaseModel {\n /**\n * The starting time of the timeframe, in the unit's timezone.\n *\n * @type {Date}\n */\n @attr('date')\n declare startTimeLocal: Date;\n\n /**\n * The ending time of the timeframe, in the unit's timezone.\n *\n * @type {Date}\n */\n @attr('date')\n declare endTimeLocal: Date;\n\n /**\n * The mode of the timeframe.\n *\n * @type {number}\n */\n @attr('number', { defaultValue: -1 })\n declare presetTransitionState: number;\n\n /**\n * The cool mode temperature of the timeframe, in the locale's units of measurement.\n *\n * @type {number}\n */\n @attr('number', { defaultValue: -1 })\n declare coolTemperaturePresetLocalUnit: number;\n\n /**\n * The heat mode temperature of the timeframe, in the locale's units of measurement.\n *\n * @type {number}\n */\n @attr('number', { defaultValue: -1 })\n declare heatTemperaturePresetLocalUnit: number;\n\n /**\n * The event model associated with the timeframe.\n *\n */\n @belongsTo('schedules/transition-event', { async: false, inverse: null })\n declare event: SchedulesTransitionEvent;\n\n /**\n * Determines whether the Timeframe is in the past, present, or future.\n */\n @attr('number')\n declare timeline: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'schedules/schedule-preset-time-frame': SchedulePresetTimeFrame;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type SchedulePresetTimeFrame from 'customer-site/models/schedules/schedule-preset-time-frame';\n\n/**\n * @classdesc\n * The timeframes for a given day's smart schedule\n */\nexport default class SmartSchedulesAudit extends BaseModel {\n /**\n * The timeframes for the given date.\n */\n @hasMany('schedules/schedule-preset-time-frame', { async: false, inverse: null })\n declare timeframes: SyncHasMany;\n\n /**\n * The date which the timeframes are retrieved from, as a date object.\n */\n @attr('date')\n declare date: Date;\n\n /**\n * The global device id concatenated of the current thermostat.\n */\n @attr('string')\n declare thermostat: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'schedules/smart-schedules-audit': SmartSchedulesAudit;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class SchedulesTransitionEvent extends BaseModel {\n /**\n * The title of the event.\n */\n @attr('string')\n declare title: string;\n\n /**\n * The description of the event.\n */\n @attr('string')\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'schedules/transition-event': SchedulesTransitionEvent;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from 'customer-site/utils/transforms-objects/icon-data';\n\n/**\n * The model that defines a reason for a service request.\n */\nexport default class Reason extends BaseModel {\n /**\n * The description for the reason.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * The icon for the reason.\n */\n @attr('icon-data')\n declare icon: IconData;\n\n /**\n * The applicable trouble condition descriptions, if any, for this reason.\n */\n @attr('string', { defaultValue: '' })\n declare troubleConditions: string;\n\n /**\n * True if the reason is both serviced by the dealer and meets the customer's requirements for the reason type.\n */\n @attr('boolean', { defaultValue: true })\n declare isValidReasonCard: boolean;\n\n /**\n * Includes the dealer URL associated with that reason\n */\n @attr('string', { defaultValue: '' })\n declare dealerURL: string;\n\n /**\n * The engagement tracking token for that customer/dealer\n */\n @attr('string', { defaultValue: '' })\n declare engagementToken: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'service-appointments/reason': Reason;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, SyncHasMany } from '@ember-data/model';\nimport type Reason from './reason';\nimport type Timeframe from './timeframe';\n\n/**\n * The model that defines a service request for an end-user.\n */\nexport default class Request extends BaseModel {\n /**\n * The optional note for the request.\n */\n @attr('string', { defaultValue: '' })\n declare note: string;\n\n /**\n * The associated request reasons for the appointment.\n */\n @hasMany('service-appointments/reason', {\n async: true,\n inverse: null\n })\n declare requestedReasons: AsyncHasMany;\n\n /**\n * The associated request timeframes for the appointment.\n */\n @hasMany('service-appointments/timeframe', {\n async: false,\n inverse: 'associatedRequest'\n })\n declare requestedTimes: SyncHasMany;\n\n /**\n * The associated request appointment status.\n */\n @attr('boolean', { defaultValue: false })\n declare isAppointmentConfirmed: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'service-appointments/request': Request;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * The model that defines a service request for an end-user.\n */\nexport default class ScheduledAppointment extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * The date and time of the appointment.\n */\n @attr('date')\n declare customerLocalizedServiceDate: Date;\n\n /**\n * The date and time of the appointment's potential end starting time.\n */\n @attr('date')\n declare customerLocalizedServiceDateEndRange: Date;\n\n /**\n * The estimated duration of the appointment in minutes.\n */\n @attr('number')\n declare estimatedDurationMinutes: number;\n\n /**\n * The location set for the appointment.\n */\n @attr('string')\n declare meetingLocation: string;\n\n /**\n * Any notes left by the dealer viewable by the customer.\n */\n @attr('string')\n declare infoForCustomer: string;\n\n /**\n * Format the dateTime to display the actual date of the appointment. Ex Jan 1, 2000\n */\n get formattedDate(): string {\n const { customerLocalizedServiceDate } = this;\n\n return this.intl.formatDateTz(customerLocalizedServiceDate, {\n day: 'numeric',\n month: 'long',\n year: 'numeric'\n });\n }\n\n /**\n * Format the starting dateTime to display just the time. Ex 1:30 AM\n */\n get formattedStartTime(): string {\n const { customerLocalizedServiceDate } = this;\n\n return this.intl.formatTimeTz(customerLocalizedServiceDate, {\n hour: 'numeric',\n minute: 'numeric'\n });\n }\n\n /**\n * Format the ending dateTime to display just the time. Ex 1:30 AM\n */\n get formattedEndTime(): string {\n const { customerLocalizedServiceDateEndRange } = this;\n\n return this.intl.formatTimeTz(customerLocalizedServiceDateEndRange, {\n hour: 'numeric',\n minute: 'numeric'\n });\n }\n\n /**\n * Format the duration of the appointment to display in hours.\n * If duration is 0, return null.\n */\n get formattedDuration(): string | null {\n const { estimatedDurationMinutes } = this;\n\n return estimatedDurationMinutes == 0\n ? null\n : this.intl.t('generic.hours', { num: estimatedDurationMinutes / 60 });\n }\n\n /**\n * Get the text for the notification.\n */\n get notificationText(): string {\n const { customerLocalizedServiceDate } = this;\n\n const formattedReminder = this.intl\n .formatDateTz(customerLocalizedServiceDate, {\n weekday: 'long',\n minute: '2-digit',\n hour: 'numeric',\n day: 'numeric',\n month: 'long',\n year: 'numeric'\n })\n .toString();\n\n return this.intl.t('generic.upcomingAppointmentNotification', { appointmentInfo: formattedReminder });\n }\n\n /**\n * returns VIEW.\n */\n get notificationButtonText(): string {\n return this.intl.t('generic.view');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'service-appointments/scheduled-appointment': ScheduledAppointment;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * The model that defines an timeframe start and end times for a service request.\n *\n */\nexport default class StartAndEndTime extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Start Time of Appointment\n * @default ''\n */\n @attr('string')\n declare startTime: string;\n\n /**\n * End Time of Appointment\n *\n * @default ''\n */\n @attr('string')\n declare endTime: string;\n\n @computed('startTime', 'endTime')\n get formattedTime(): string {\n const defaultDate = new Date();\n defaultDate.setHours(0);\n\n return [this.startTime, this.endTime]\n .map((time) => {\n const timePieces = time.split(':').map((n) => Number.parseInt(n));\n defaultDate.setHours(timePieces[0] || 0);\n defaultDate.setMinutes(timePieces[1] || 0);\n\n if (defaultDate.getMinutes() === 0) {\n return this.intl.formatDateTz(defaultDate, {\n hour: 'numeric'\n });\n } else if (defaultDate.getMinutes() === 59) {\n defaultDate.setHours(defaultDate.getHours() + 1);\n return this.intl.formatDateTz(defaultDate, {\n hour: 'numeric'\n });\n }\n\n return this.intl.formatDateTz(defaultDate, {\n hour: 'numeric',\n minute: '2-digit'\n });\n })\n .join('-');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'service-appointments/start-and-end-time': StartAndEndTime;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { SyncHasMany } from '@ember-data/model';\nimport type Request from './request';\nimport type StartAndEndTime from './start-and-end-time';\n\n/**\n * The model that defines an appointment timeframe for a service request.\n */\nexport default class Timeframe extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * The temporary id used to navigate the timeframe portion of the feature\n * while the embedded timeframe record remains unsaved. Should not be used if the\n * timeframe record is already saved (i.e. in the future if the user can edit an existing saved\n * request, we should use the saved id being passed in by the server.)\n */\n @attr('string')\n declare temporaryId: string;\n\n /**\n * The the start time for the timeframe.\n */\n @attr('string')\n declare localStartTime: string;\n\n /**\n * The duration of the timeframe.\n */\n @hasMany('service-appointments/start-and-end-time', {\n async: false,\n inverse: null\n })\n declare duration: SyncHasMany;\n\n /**\n * The associated request for the timeframe.\n */\n @belongsTo('service-appointments/request', { async: false, inverse: 'requestedTimes' })\n declare associatedRequest: Request;\n\n /**\n * Returns time of event if < 24 hours old, otherwise returns full DateTime.\n */\n @computed('localStartTime')\n get formattedLocalStartTime(): string {\n try {\n return this.intl.formatDateTz(new Date(this.localStartTime), {\n weekday: 'short',\n day: 'numeric',\n month: 'short'\n });\n } catch (ex) {\n return '';\n }\n }\n\n /**\n * Returns the durations of the timeframe.\n */\n get formattedDurations(): string {\n return this.getFormattedAppointmentTime;\n }\n\n /**\n * Returns the confirmed duration of the timeframe.\n */\n get confirmedDuration(): string {\n return this.getFormattedAppointmentTime;\n }\n\n /**\n * Gives a formatted duration based on the time span for the timeframe model object.\n */\n @computed('duration.[]')\n get getFormattedAppointmentTime(): string {\n return this.duration.map((timeItem) => timeItem.formattedTime).join(', ');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'service-appointments/timeframe': Timeframe;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SignalStrength } from 'customer-site/enums/SignalStrength';\n\nexport default class AccessPointPanelSignalStrength extends BaseModel {\n @attr('number', { defaultValue: 1 })\n declare signalStrengthEnum: SignalStrength;\n\n @attr('string', { defaultValue: '' })\n declare signalStrengthLabel: string;\n\n @attr('number', { defaultValue: 0 })\n declare signalStrengthNormalized: number;\n\n @attr('string', { defaultValue: '' })\n declare signalStrengthNote: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/access-point-wifi/access-point-panel-signal-strength': AccessPointPanelSignalStrength;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Current wifi setting of the access point device.\n */\nexport default class AccessPointWifiSetting extends BaseModel {\n /**\n * The network SSID name\n */\n @attr('string', { defaultValue: '' })\n declare ssid: string;\n\n /**\n * The encryption type enum value\n */\n @attr('number', { defaultValue: 0 })\n declare encryptionType: number;\n\n /**\n * Is the panel connected to wifi\n */\n @attr('boolean', { defaultValue: false })\n declare isConnectedToWifi: boolean;\n\n /**\n * Is the wifi enabled on the panel\n */\n @attr('boolean', { defaultValue: false })\n declare isWifiEnabled: boolean;\n\n /**\n * The signal strength of the connection\n */\n @attr('number', { defaultValue: 0 })\n declare signalStrength: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/access-point-wifi/access-point-wifi-setting': AccessPointWifiSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Data model for holding information representing a dealer custom customer app promotion for the mover portal survey\n * that's get set from the Partner Portal.\n */\nexport default class CustomerMovingFormResult extends BaseModel {\n @attr('number', { defaultValue: 1 })\n declare country: number;\n\n @attr('string')\n declare street1: string;\n\n @attr('string')\n declare street2: string;\n\n @attr('string')\n declare city: string;\n\n @attr('string')\n declare state: string;\n\n @attr('string')\n declare postalCode: string;\n\n @attr('date')\n declare submitDate: Date;\n\n @attr('date')\n declare moveDate: Date;\n\n /**\n * Checks to make sure all required fields are filled out correctly.\n */\n validateInput(): Promise {\n return this.submitCustomApiCall('validate', POST, this);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/account-management/move-portal-survey/customer-moving-form-result': CustomerMovingFormResult;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Data model for holding information representing a dealer custom customer app promotion for the mover portal survey\n * that's get set from the Partner Portal.\n */\nexport default class DealerCustomerAppPromotion extends BaseModel {\n /**\n * The title of the promotion\n */\n @attr('string')\n declare title: string;\n\n /**\n * The main text of the promotion.\n */\n @attr('string')\n declare promotion: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/account-management/move-portal-survey/dealer-customer-app-promotion': DealerCustomerAppPromotion;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Data model for holding information representing a link to an Active Directory\n */\nexport default class ActiveDirectoryClientIdentifier extends BaseModel {\n /**\n * unit id associated with this integration\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * system group id associated with this integration\n */\n @attr('number')\n declare systemGroupId: number;\n\n /**\n * the Client Id for the current integration\n */\n @attr('string')\n declare clientId: string;\n\n /**\n * the Client Secret for the current integration\n */\n @attr('string')\n declare clientSecret: string;\n\n /**\n * the Tenant Id for the current integration\n */\n @attr('string')\n declare tenantId: string;\n\n /**\n * represents whether the current AD integration is working as expected or not\n */\n @attr('number')\n declare adStatus: number;\n\n /**\n * The name of the system group needed for an error message when an ad link at another level\n * is blocking this group from creating another ad link.\n */\n @attr('string')\n declare nameOfGroupForErrorMessage: string | null;\n\n /**\n * represents whether the current AD integration should map AD Groups to login templates\n * (if not, logins will not be created automatically)\n */\n @attr('boolean')\n declare mapGroupsToLogins: boolean;\n\n /**\n * represents whether the current AD integration should map AD Groups to access plans\n * (if not, ad users can be added to plans manually)\n */\n @attr('boolean')\n declare mapGroupsToAccessPlans: boolean;\n\n /**\n * The authentication provider token, which is exposed to the customer to allow them to copy paste it\n * into their AD SSO integration configuration page. this is required for AD SSO\n */\n @attr('string')\n declare authenticationProviderToken: string;\n\n /**\n * the type of the AD integration, at the moment, this is either 0 = Entra or 1 = SCIM\n */\n @attr('number')\n declare clientType: number;\n\n /**\n * Determines if the active directory can be modified or not.\n */\n @attr('boolean')\n declare canBeModified: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/active-directory-setup/active-directory-client-identifier': ActiveDirectoryClientIdentifier;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * mapping from AD group to login template\n */\nexport default class GroupToAccessPlanMapping extends BaseModel {\n /**\n * group Id for this mapping\n */\n @attr('string')\n declare groupId: string;\n\n /**\n * template id for this mapping\n */\n @attr('number')\n declare planId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/active-directory-setup/group-to-access-plan-mapping': GroupToAccessPlanMapping;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * mapping from AD group to login template\n */\nexport default class GroupToEnterpriseLoginMapping extends BaseModel {\n /**\n * group Id for this mapping\n */\n @attr('string')\n declare groupId: string;\n\n /**\n * template id for this mapping\n */\n @attr('number')\n declare templateId: number;\n\n /**\n * template type 1 = single system, 2= enterprise\n */\n @attr('number')\n declare templateType: number;\n\n /**\n * Customer Id for the mapping, this is only set if the mapping is of type 1\n */\n @attr('number')\n declare customerId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/active-directory-setup/group-to-enterprise-login-mapping': GroupToEnterpriseLoginMapping;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { default as DropdownSelectItem } from '@adc/ui-components/utils/dropdown-select-item';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Sensor from '../../devices/sensor';\n\nexport default class SensorRowInfo extends BaseModel {\n @attr('boolean')\n declare usesDropdownNames: boolean;\n\n @attr('array')\n declare panelNames: string[];\n\n @attr('array')\n declare nameOptions: string[];\n\n @attr('string')\n declare preferredName: string;\n\n @attr('string')\n declare status: string;\n\n @attr('string')\n declare type: string;\n\n @attr('boolean')\n declare showMonitoring: boolean;\n\n @attr('boolean')\n declare isMonitoring: boolean;\n\n @attr('boolean')\n declare isMonitoringEditable: boolean;\n\n @attr('number')\n declare deviceId: number;\n\n declare dropdownItems1: (DropdownSelectItem & {\n name: string;\n value: string;\n state: number;\n })[];\n\n declare dropdownItems2: (DropdownSelectItem & {\n name: string;\n value: string;\n state: number;\n })[];\n\n declare dropdownItems3: (DropdownSelectItem & {\n name: string;\n value: string;\n state: number;\n })[];\n\n declare dropdownItems4: (DropdownSelectItem & {\n name: string;\n value: string;\n state: number;\n })[];\n\n @belongsTo('devices/sensor', { async: true, inverse: 'sensorRowInfo' })\n declare sensor: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/control-panel-settings/sensor-row-info': SensorRowInfo;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type EverbridgeTemplate from './everbridge-template';\n\ninterface EverbridgeTemplateAttributes {\n incidentTemplateId: number;\n incidentTemplateName: string;\n selected: boolean;\n}\n\ninterface EverbridgeTemplateData {\n id: string;\n type: string;\n attributes: EverbridgeTemplateAttributes;\n}\n\ninterface EverbridgeTemplatesResponse {\n data: EverbridgeTemplateData[];\n}\n\n/**\n * @classdesc\n *\n * Incident template pulled from Everbridge API.\n */\nexport default class EverbridgeConfiguration extends BaseModel {\n @attr('string', { defaultValue: '' })\n declare username: string;\n\n @attr('string', { defaultValue: '' })\n declare password: string;\n\n @attr('string', { defaultValue: '' })\n declare organizationId: string;\n\n @hasMany('settings/everbridge-integration/everbridge-template', { async: false, inverse: null })\n declare everbridgeTemplates: SyncHasMany;\n\n fetchEverbridgeTemplates(): Promise {\n return this.submitCustomApiCall(\n 'fetchTemplates',\n 'POST',\n JSON.stringify({\n username: this.username,\n password: this.password,\n organizationId: this.organizationId\n })\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/everbridge-integration/everbridge-configuration': EverbridgeConfiguration;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type EverbridgeConfiguration from './everbridge-configuration';\n\n/**\n * @classdesc\n *\n * Saved Everbridge template.\n */\nexport default class EverbridgeTemplate extends BaseModel {\n @attr('string', { defaultValue: '' })\n declare incidentTemplateName: string;\n\n @attr('number')\n declare incidentTemplateId: number;\n\n @attr('boolean')\n declare selected: boolean;\n\n @belongsTo('settings/everbridge-integration/everbridge-configuration', { async: false, inverse: null })\n declare configuration: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/everbridge-integration/everbridge-template': EverbridgeTemplate;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type BaseManagedDevice from 'customer-site/models/devices/base-managed-device';\nimport type ManagedDeviceCategoryModel from './managed-device-category';\n\n/**\n * @classdesc\n * A class that holds all of the categories of managed devices.\n */\nexport default class DeviceCatalog extends BaseModel {\n /**\n * A list of all of the device categories a user has.\n */\n @hasMany('settings/manage-devices/managed-device-category', { async: false, inverse: null })\n declare managedDeviceCategories: SyncHasMany;\n\n /**\n * The collection of device filters available to the user.\n *\n * The key is either a ManageDevicesPropertyFilterEnum value (>= 100) or a ManageDevicesCategoryEnum value (< 100)\n * and the string value represents the name of that filter.\n */\n @attr()\n declare availableManagedDeviceFilters: Record;\n\n /**\n * Can devices be added?\n *\n * Checks for Add Device permissions on the backend.\n */\n @attr('boolean', { defaultValue: false })\n declare canAddDevices: boolean;\n\n /**\n * Returns a list of all the devices that support CC Basic.\n */\n @computed('managedDeviceCategories.@each.managedDevices')\n get basicCommandClassSupportedDevices(): BaseManagedDevice[] {\n return this.managedDeviceCategories.reduce((acc: BaseManagedDevice[], item) => {\n item.managedDevices.forEach((d) => acc.push(d));\n return acc.filter((item) => item.supportsCommandClassBasic);\n }, []);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/manage-devices/device-catalog': DeviceCatalog;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type BaseManagedDevice from 'customer-site/models/devices/base-managed-device';\n\n/**\n * @classdesc\n * A class that contains a name and a list of managed devices.\n */\nexport default class ManagedDeviceCategoryModel extends BaseModel {\n /**\n * The name of the managed device category.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The list of managed devices by category.\n */\n @hasMany('devices/base-managed-device', { async: false, polymorphic: true, inverse: null })\n declare managedDevices: SyncHasMany;\n\n /**\n * Map of managed device ID's, in string form, for triggering multi-level updates.\n */\n @computed('managedDevices.[]')\n get deviceMap(): string {\n return this.managedDevices.map((item) => item.id).join('|');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/manage-devices/managed-device-category': ManagedDeviceCategoryModel;\n }\n}\n","import DeviceCatalog from './device-catalog';\n\n/**\n * @classdesc\n * A class that holds all of the categories of managed devices.\n */\nexport default class ZwaveDeviceCatalog extends DeviceCatalog {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/manage-devices/zwave-device-catalog': ZwaveDeviceCatalog;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { htmlSafe } from '@ember/template';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SafeString } from 'handlebars';\n\n/**\n * @classdesc\n *\n * Contains information of the status of an account or system groups' managed 24/7 access\n */\nexport default class ManagedAccessRequest extends BaseModel {\n /**\n * Restrict the dealer from arming or disarming the system?\n */\n @attr('boolean', { defaultValue: false })\n declare excludeArming: boolean;\n\n /**\n * Restrict the dealer from viewing images and video?\n */\n @attr('boolean', { defaultValue: false })\n declare excludeVideoAndImages: boolean;\n\n /**\n * Restrict the dealer from editing user codes?\n */\n @attr('boolean', { defaultValue: false })\n declare excludeUserCodes: boolean;\n\n /**\n * Restrict the dealer from creating/editing logins?\n */\n @attr('boolean', { defaultValue: false })\n declare excludeLoginManagement: boolean;\n\n /**\n * Agreement text for the managed access request.\n */\n @attr('string')\n declare agreementText: string;\n\n /**\n * Header text for agreement.\n */\n @attr('string')\n declare agreementHeader: string;\n\n /**\n * Html list of excluded roles if there are any.\n */\n @attr('string')\n declare excludedRolesHtml: string;\n\n /**\n * Can the user make any changes to managed access?\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeSettings: boolean;\n\n /**\n * Is this a request for the parent scope of our current operating scope?\n */\n @attr('boolean', { defaultValue: false })\n declare isRequestForParentScope: boolean;\n\n /**\n * Dealer name for this request.\n */\n @attr('string')\n declare dealerName: string;\n\n /**\n * Get the generated excluded roles html marked as safe.\n */\n @computed('excludedRolesHtml')\n get excludedRolesHtmlSafe(): SafeString {\n return htmlSafe(this.excludedRolesHtml);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/managed-access-request': ManagedAccessRequest;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Information used in the creation of the Alarm Monitoring Certificate.\n */\nexport default class MonitoringCertificate extends BaseModel {\n /**\n * The name of the customer's dealer.\n */\n @attr('string')\n declare dealerName: string;\n\n /**\n * The date the system was installed.\n */\n @attr('date')\n declare installationDate: Date;\n\n /**\n * Company name or first + last name of customer.\n */\n @attr('string')\n declare clientName: string;\n\n /**\n * The street portion of the customer's address.\n */\n @attr('string')\n declare streetAddress: string;\n\n /**\n * The city of the customer's address.\n */\n @attr('string')\n declare city: string;\n\n /**\n * The state of the customer's address.\n */\n @attr('string')\n declare state: string;\n\n /**\n * The state of the customer's address.\n */\n @attr('string')\n declare zip: string;\n\n /**\n * The address of where the system is installed.\n */\n @attr('string')\n declare systemLocation: string;\n\n /**\n * The type of service package the system uses (e.g. BasicInteractive)\n */\n @attr('string')\n declare servicePackageDescription: string;\n\n /**\n * The type of reporting the system uses (e.g. Cell, Broadband, etc.)\n */\n @attr('string')\n declare reportingType: string;\n\n /**\n * The resource string for the state property.\n */\n @attr('string')\n declare stateResourceLabel: string;\n\n /**\n * The resource string for the zipcode property\n */\n @attr('string')\n declare zipCodeResourceLabel: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/monitoring-certificate': MonitoringCertificate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class SettingsMonitoringStationPropertyActionCategory extends BaseModel {\n @attr('string')\n declare localizedDescription: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/property-action-category': SettingsMonitoringStationPropertyActionCategory;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type PropertyActionCategory from './property-action-category';\n\nexport default class SettingsMonitoringStationPropertyActionDevice extends BaseModel {\n @attr('number')\n declare deviceId: number;\n @attr('string')\n declare description: string;\n @attr('boolean')\n declare isExcluded: boolean;\n @belongsTo('settings/monitoring-station/property-action-category', { async: false, inverse: null })\n declare category: PropertyActionCategory;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/property-action-device': SettingsMonitoringStationPropertyActionDevice;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type PropertyActionDevice from './property-action-device';\n\nexport default class SettingsMonitoringStationPropertyAction extends BaseModel {\n @hasMany('settings/monitoring-station/property-action-device', { async: false, inverse: null })\n declare propertyActionDevices: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/property-action': SettingsMonitoringStationPropertyAction;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class PropertyNote extends BaseModel {\n /**\n * Property note subject\n */\n @attr('string')\n declare subject: string;\n\n /**\n * Property note message\n */\n @attr('string')\n declare message: string;\n\n /**\n * Property note expiration date\n */\n @attr('date')\n declare expirationDate: Date | undefined;\n\n /**\n * Property note last updated date\n */\n @attr('date')\n declare dateUpdated: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/property-note': PropertyNote;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type VisualVerificationDevice from './visual-verification-device';\n\nexport default class SettingsMonitoringStationVideo extends BaseModel {\n @hasMany('settings/monitoring-station/visual-verification-device', { async: false, inverse: null })\n declare visualVerificationDevices: SyncHasMany;\n\n @attr('boolean')\n declare hasFullTimeAccess: boolean;\n\n @attr('boolean')\n declare twoWayAudioEnabled: boolean;\n\n @attr('boolean')\n declare editVisualVerification: boolean;\n\n @attr('boolean')\n declare showVisualVerification: boolean;\n\n /**\n * Can the user view two way audio setting\n */\n @attr('boolean')\n declare showTwoWayAudio: boolean;\n\n /**\n * Can the user edit two way audio setting\n */\n @attr('boolean')\n declare editTwoWayAudio: boolean;\n\n @attr('number')\n declare allowedExternalVideoMonitoringDevicesCount: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/video': SettingsMonitoringStationVideo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class SettingsMonitoringStationVisualVerificationDevice extends BaseModel {\n @attr('number')\n declare deviceId: number;\n @attr('string')\n declare description: string;\n @attr('boolean')\n declare isExcluded: boolean;\n @attr('boolean')\n declare isSelectable: boolean;\n @attr('boolean')\n declare hasRules: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/monitoring-station/visual-verification-device': SettingsMonitoringStationVisualVerificationDevice;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type BluetoothArmingDevice from 'customer-site/models/devices/bluetooth-arming-device';\n\n/**\n * @classdesc\n *\n * Data model for retrieving info for a Bluetooth pairing process\n */\nexport default class BluetoothDisarmingSettings extends BaseModel {\n /**\n * The device id of the setting\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Is bluetooth enabled for the system\n */\n @attr('boolean')\n declare isBluetoothPairingEnabledForSystem: boolean;\n\n /**\n * The timeout during bluetooth pairing process\n */\n @attr('number')\n declare timeout: number;\n\n /**\n * A list of all devices enrolled through bluetooth pairing\n */\n @hasMany('devices/bluetooth-arming-device', { async: true, inverse: null })\n declare enrolledDevices: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/panel-bluetooth/bluetooth-disarming-setting': BluetoothDisarmingSettings;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type AjaxService from 'customer-site/services/ajax';\n\nexport function getNetworksAttachedToVideoCameras(ajax: AjaxService): Promise> {\n return ajax.apiRequest('settings/panelWifi/wifiNetworks/getNetworksAttachedToVideoCameras');\n}\n\n/**\n * @classdesc\n * Wifi network class that details the SSID, encryption type, and any devices\n * that are connected to the network.\n */\nexport default class WifiNetwork extends BaseModel {\n /**\n * The network SSID name\n */\n @attr('string', { defaultValue: '' })\n declare ssid: string;\n\n /**\n * The encryption type enum value\n */\n @attr('number', { defaultValue: 0 })\n declare encryptionType: number;\n\n /**\n * The names of the devices attached\n */\n @attr('string', { defaultValue: '' })\n declare devicesAttached: string;\n\n /**\n * Determines if we need the user to input a password for the network.\n * True when we have don't have a device connected to the same network. Otherwise, false.\n */\n @attr('boolean', { defaultValue: false })\n declare needsPassword: boolean;\n\n /**\n * The value of the signal strength from the device.\n */\n @attr('number', { defaultValue: 0 })\n declare signalStrength: number;\n\n /**\n * Ids for devices that are attached to this WiFi network.\n */\n @attr('array', { defaultValue: () => [] })\n declare deviceIdsAttachedToNetwork: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/panel-wifi/wifi-network': WifiNetwork;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * Get the current wifi set on an access point.\n */\nexport function getAccessPointWifiSetting(\n ajax: AjaxService,\n customerId: number,\n accessPointDeviceId: number\n): Promise> {\n return ajax.apiRequest(\n `settings/panelWifi/wifiSettings/getAccessPointWifiSetting/${customerId}?accessPointDeviceId=${accessPointDeviceId}`\n );\n}\n\n/**\n * @classdesc\n * The wifi settings of the panel\n */\nexport default class WifiSetting extends BaseModel {\n /**\n * The ssid of network the panel is connected to if it is connected to a network\n */\n @attr('string', { defaultValue: '' })\n declare ssid: string;\n\n /**\n * Is the panel connected to wifi\n */\n @attr('boolean', { defaultValue: false })\n declare isConnectedToWifi: boolean;\n\n /**\n * Is the wifi enabled on the panel\n */\n @attr('boolean')\n declare isWifiEnabled: boolean;\n\n /**\n * The signal strength of the connection\n */\n @attr('number', { defaultValue: 0 })\n declare signalStrength: number;\n\n /**\n * Is the panel a Command Panel.\n */\n @attr('boolean', { defaultValue: false })\n declare isCommandPanel: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/panel-wifi/wifi-setting': WifiSetting;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\n\nexport default class RestrictedAccessSetting extends BaseModel {\n @attr('string')\n declare scopeName: string;\n\n @attr('boolean')\n declare enabled: boolean;\n\n @hasMany('settings/restricted-access-setting', { async: true, inverse: 'parentSettings' })\n declare childSettings: AsyncHasMany;\n\n @belongsTo('settings/restricted-access-setting', { async: true, inverse: 'childSettings' })\n declare parentSettings: AsyncBelongsTo;\n\n @attr('string')\n declare disabledMessage: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/restricted-access-setting': RestrictedAccessSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Represents the MultiLevelSensorThreshold from the backend\n */\nexport default class Threshold extends BaseModel {\n /**\n * The high bound of the threshold\n */\n @attr('number', { defaultValue: 0 })\n declare highThreshold: number;\n\n /**\n * The low bound of the threshold\n */\n @attr('number', { defaultValue: 0 })\n declare lowThreshold: number;\n\n /**\n * The type of the sensor reading associated with the threshold\n */\n @attr('number', { defaultValue: 0 })\n declare readingType: number;\n\n /**\n * The maximum value for the threshold\n */\n @attr('number', { defaultValue: 1 })\n declare thresholdMax: number;\n\n /**\n * The minimum value for the threshold\n */\n @attr('number', { defaultValue: 0 })\n declare thresholdMin: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/threshold': Threshold;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type VoiceControlDeviceSetting from './voice-control-device-setting';\n\n/**\n * @classdesc\n * A model that describes a device and its voice access level.\n * Id is the device type.\n */\nexport default class VoiceAccessLevelSettingItem extends BaseModel {\n /**\n * Access level settings belong to the voice control device settings.\n */\n @belongsTo('settings/voice/voice-control-device-setting', { async: true, inverse: 'voiceAccessLevelSettingItems' })\n declare voiceControlDeviceSetting: AsyncBelongsTo;\n\n /**\n * Voice access level for the device.\n */\n @attr('number')\n declare voiceAccessLevel: number;\n\n /**\n * String value of the Icon that will be used for the device.\n */\n @attr('string')\n declare icon: string;\n\n /**\n * Description of the device (ex. Lock, Light).\n */\n @attr('string')\n declare description: string;\n\n /**\n * Subdescription of the device.\n */\n @attr('string')\n declare subDescription: string;\n\n /**\n * Can the logged in user edit the access level setting?\n */\n @attr('boolean')\n declare canEditAccessLevelSetting: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/voice/voice-access-level-setting-item': VoiceAccessLevelSettingItem;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type VoiceAccessLevelSettingItem from './voice-access-level-setting-item';\nimport type VoiceSettingsPin from './voice-settings-pin';\n\ninterface ArmOptions {\n label: string;\n value: boolean;\n}\n\n/**\n * @classdesc\n * A class that describes the voice setting.\n * Id is mobile device type (Amazon Alexa = 8, Google Assistant = 11) associated with the voice settings model.\n */\nexport default class VoiceControlDeviceSetting extends BaseModel {\n /**\n * The name of the voice settings device manufacturer.\n */\n @attr('string')\n declare manufacturerName: string;\n\n /**\n * The name of the voice settings device.\n */\n @attr('string')\n declare deviceName: string;\n\n /**\n * List of the voice pins\n */\n @hasMany('settings/voice/voice-settings-pin', { async: true, inverse: null })\n declare voicePins: AsyncHasMany;\n\n /**\n * Voice arm stay options.\n */\n @attr()\n declare armStayOptions: Record;\n\n /**\n * Voice arm night options.\n */\n @attr()\n declare armNightOptions: Record;\n\n /**\n * List of voice access settings for different devices for a chosen mobile device.\n */\n @hasMany('settings/voice/voice-access-level-setting-item', { async: true, inverse: 'voiceControlDeviceSetting' })\n declare voiceAccessLevelSettingItems: AsyncHasMany;\n\n /**\n * Mobile Application Type for new Smart Home pin.\n */\n @attr('number')\n declare newSmartHomePinId: number;\n\n /**\n * Mobile Application Type for new Custom pin.\n */\n @attr('number')\n declare newCustomPinId: number;\n\n /**\n * Can the logged in user edit the voice control setting?\n */\n @attr('boolean')\n declare canEditVoiceControlSetting: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/voice/voice-control-device-setting': VoiceControlDeviceSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model that describes a pin.\n */\nexport default class VoiceSettingsPin extends BaseModel {\n /**\n * The length of the pin\n */\n @attr('number')\n declare allowedPinLength: number;\n\n /**\n * The current value of the pin code.\n */\n @attr('string')\n declare pin: string;\n\n /**\n * A custom pin is stored on the ADC side and is referenced when using a command like \"Alexa TELL ALARM.COM TO xyz\".\n * A smart-home pin on the other hand is stored on the voice device side and used for commands like \"Alexa do xyz.\".\n */\n @attr('boolean')\n declare isCustomPin: boolean;\n\n /**\n * Is this pin already saved in backend?\n */\n @attr('boolean')\n declare isSavedPin: boolean;\n\n /**\n * Can the logged in user view the voice pin?\n */\n @attr('boolean')\n declare canViewVoicePin: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'settings/voice/voice-settings-pin': VoiceSettingsPin;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type SmartCoverageDiscountType from 'customer-site/enums/SmartCoverageDiscountType';\nimport type SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\n\nexport default class Property extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('string')\n declare address: string;\n\n @attr('array')\n declare discounts: Array;\n\n @attr('boolean')\n declare isDefaultProperty: boolean;\n\n @attr('boolean')\n declare isEligible: boolean;\n\n @attr('number')\n declare policyType: SmartCoveragePolicyType;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'smart-coverage/property': Property;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class SupportFeedback extends BaseModel {\n // normal class body definition here\n @attr('string')\n declare feedback: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'support/feedback': SupportFeedback;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\n\n/**\n * @classdesc\n *\n * Model for holding lists of system groups and systems.\n */\nexport default class AvailableSystemItem extends BaseModel {\n /**\n * Name of the system/group item.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Icon name to be displayed.\n */\n @attr('string', { defaultValue: '' })\n declare icon: string;\n\n /**\n * Is this item (system or group) currently selected?\n */\n @attr('boolean', { defaultValue: false })\n declare isSelected: boolean;\n\n /**\n * Nested items (available systems) under this one.\n */\n @hasMany('systems/available-system-item', { async: false, inverse: null })\n declare subItems: SyncHasMany;\n\n /**\n * Should the sub items be expanded by default?\n */\n @attr('boolean', { defaultValue: false })\n declare expandSubItemsByDefault: boolean;\n\n /**\n * The connected unit id for system items representing locations.\n */\n @attr('string', { defaultValue: '' })\n declare unitId: string;\n\n /**\n * Is the system item a representation of a group?\n */\n get isGroup(): boolean {\n return this.id.startsWith('group-');\n }\n\n /**\n * Is the account originally associated with this system locked out or suspended?\n * Note: this will be false for Enterprise groups.\n */\n @attr('boolean', { defaultValue: false })\n declare isSystemParentAccountSuspended: boolean;\n\n // region Api calls.\n\n /**\n * Selects a system or group.\n */\n selectSystemOrGroup(): Promise {\n return this.submitCustomApiCall('selectSystemOrGroup');\n }\n\n /**\n * Gets the relevant dealer information for the provided system.\n */\n getDealerInfo(): Promise<{ dealerName: string; dealerContactInfo: string }> {\n return this.submitCustomApiCall<{ dealerName: string; dealerContactInfo: string }>('getDealerInfo');\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'systems/avaliable-system-item': AvailableSystemItem;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from './system';\n\n/**\n * @classdesc\n * The configurable settings model for an Alarm.com system.\n */\nexport default class Configuration extends BaseModel {\n /**\n * The system these settings belong to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'configuration' })\n declare system: AsyncBelongsTo;\n\n /**\n * Whether the primary login has opted in to facial recognition at the panel.\n */\n @attr('boolean', { defaultValue: false })\n declare smrfOptIn: boolean;\n\n /**\n * Indicates whether the primary login has opted in to disarm image donation.\n */\n @attr('boolean', { defaultValue: false })\n declare smrfDonationOptIn: boolean;\n\n /**\n * Indicates the user has permissions to use Analytics Light Rule Beta.\n */\n @attr('boolean', { defaultValue: false })\n declare hasAnalyticsLightRule: boolean;\n\n /**\n * Indicates the user has a Commercial Video plan.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCommercialVideo: boolean;\n\n /**\n * Does this user have permission to view any contacts? (May not include mobile.)\n */\n @attr('boolean', { defaultValue: true })\n declare hasContactReadPermissions: boolean;\n\n /**\n * Does this user have permission to view mobile contacts?\n */\n @attr('boolean', { defaultValue: false })\n declare hasMobileContactReadPermissions: boolean;\n\n /**\n * Does this user have permission to view monitoring station contacts?\n */\n @attr('boolean', { defaultValue: false })\n declare hasMonitoringStationContactReadPermissions: boolean;\n\n /**\n * Does this user have permission to use Property Status for SAV?\n */\n @attr('boolean', { defaultValue: false })\n declare hasGlobalPresenceStateVideoPermissions: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'systems/configuration': Configuration;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Model for Multi-System Access associated system.\n */\nexport default class MsaAssociatedSystem extends BaseModel {\n /**\n * Name of the system/group item.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Is this system able to be unlinked from the login?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeUnlinked: boolean;\n\n /**\n * Is this the default system for the login?\n */\n @attr('boolean', { defaultValue: false })\n declare isDefault: boolean;\n\n /**\n * Is this the original system for the login?\n */\n @attr('boolean', { defaultValue: false })\n declare isOriginalSystem: boolean;\n\n /**\n * Is this the current system for the login?\n */\n @attr('boolean', { defaultValue: false })\n declare isCurrentSystem: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'systems/mda-associated-system': MsaAssociatedSystem;\n }\n}\n","import Model, { hasMany, attr } from '@ember-data/model';\n\nimport type { SyncHasMany } from '@ember-data/model';\n\n/**\n * @classdesc\n * Model for cached information about a system group.\n */\nexport default class SystemGroupCacheDatum extends Model {\n /**\n * The system group name.\n */\n @attr('string')\n declare description: string;\n\n /**\n * The number of units in the system group.\n */\n @attr('number')\n declare unitCount: number;\n\n /**\n * System group icon\n */\n @attr('string')\n declare icon: string;\n\n /**\n * Child groups' cache items.\n */\n @hasMany('systems/system-group-cache-datum', { async: false, inverse: null })\n declare children: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'systems/system-group-cache-datum': SystemGroupCacheDatum;\n }\n}\n","import { hasMany, belongsTo, attr } from '@ember-data/model';\nimport { empty } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { None } from '../../enums/RentalPropertyLengthType';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type AutoRelock from '../enterprise/settings/auto-relock';\nimport type AutomaticallyEnableBackgroundCapture from '../enterprise/settings/automatically-enable-background-capture';\nimport type CustomerRelationshipManagementIntegration from '../enterprise/settings/customer-relationship-management-integration';\nimport type GuestLoginAccess from '../enterprise/settings/guest-login-access';\nimport type HouseReadyEarly from '../enterprise/settings/house-ready-early';\nimport type LoginTemplatesForGroup from '../enterprise/settings/login-templates-for-group';\nimport type PropertyManagementIntegration from '../enterprise/settings/property-management-integration';\nimport type SendFollowUpText from '../enterprise/settings/send-follow-up-text';\nimport type System from './system';\n\n/**\n * @classdesc\n *\n * System Group model\n */\nexport default class SystemGroup extends BaseModel {\n /**\n * The system group description (name)\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Collection of child system groups that belong to this system group.\n */\n @hasMany('systems/system-group', { async: true, inverse: 'parentGroup' })\n declare childGroups: AsyncHasMany;\n\n /**\n * Computed property indicating if group is at the root level (i.e. has no parent).\n */\n @empty('parentGroup.id')\n declare isHighestGroupWithAccess: boolean;\n\n /**\n * Computed property indicating if group has no children (i.e. has no child groups).\n */\n @empty('childGroups')\n declare isChildlessGroup: boolean;\n\n /**\n * Computed property indicating if group has no child systems.\n */\n @empty('systems')\n declare isSystemlessGroup: boolean;\n\n /**\n * Indicates if the group has a parent group, regardless of whether\n * the current login has access to that parent group.\n */\n @attr('boolean', { defaultValue: false })\n declare isParentGroup: boolean;\n\n /**\n * is the System connected to a SCIM integration\n */\n @attr('boolean', { defaultValue: false })\n declare isSCIMGroup: boolean;\n\n @attr('boolean', { defaultValue: false })\n declare hasParentGroup: boolean;\n\n /**\n * Indicates if the group has any commitments.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCommitments: boolean;\n\n /**\n * The child groups parent group\n */\n @belongsTo('systems/system-group', { async: true, inverse: 'childGroups' })\n declare parentGroup: AsyncBelongsTo;\n\n /**\n * Indicates that times should be displayed in login's preferred timezone because this group has systems in multiple time zones.\n */\n @attr('boolean', { defaultValue: false })\n declare showPreferredTimezone: boolean;\n\n /**\n * Indicates if the \"Sync to PMS\" button should be visible.\n */\n @attr('boolean', { defaultValue: false })\n declare showSyncToPms: boolean;\n\n /**\n * Indicates if eSuite is enabled for this system group.\n */\n @attr('boolean', { defaultValue: false })\n declare isESuiteEnabled: boolean;\n\n /**\n * List of systems (units) that belong to this system Group\n */\n @hasMany('systems/system', { async: true, inverse: null })\n declare systems: AsyncHasMany;\n\n /**\n * List of the ID's of all nested systems (units) underneath this system group\n */\n get allNestedSystemIds(): Promise {\n return this.getAllLocationIds();\n }\n\n /**\n * The guest login access group setting.\n */\n @belongsTo('enterprise/settings/guest-login-access', { async: true, inverse: null })\n declare guestLoginAccess: AsyncBelongsTo;\n\n /**\n * The follow-up text group setting.\n */\n @belongsTo('enterprise/settings/send-follow-up-text', { async: true, inverse: null })\n declare followUpText: AsyncBelongsTo;\n\n /**\n * The auto relock group setting.\n */\n @belongsTo('enterprise/settings/auto-relock', { async: true, inverse: null })\n declare autoRelock: AsyncBelongsTo;\n\n /**\n * The house ready early group setting.\n */\n @belongsTo('enterprise/settings/house-ready-early', { async: true, inverse: null })\n declare houseReadyEarly: AsyncBelongsTo;\n\n /**\n * Does the logged in user have permissions to rename and delete the object?\n */\n @attr('boolean', { defaultValue: false })\n declare canRenameOrDelete: boolean;\n\n /**\n * The automatically enable background capture setting\n */\n @belongsTo('enterprise/settings/automatically-enable-background-capture', { async: true, inverse: null })\n declare automaticallyEnableBackgroundCapture: AsyncBelongsTo;\n\n /**\n * The login templates for the group.\n */\n @belongsTo('enterprise/settings/login-templates-for-group', { async: true, inverse: null })\n declare loginTemplatesForGroup: AsyncBelongsTo;\n\n /**\n * Whether the group is Short Term Rental (2), Long Term Rental(1), or neither(0)\n */\n @attr('number', { defaultValue: None })\n declare rentalTermType: number;\n\n /**\n * The pms integration settings\n */\n @belongsTo('enterprise/settings/property-management-integration', { async: true, inverse: null })\n declare propertyManagementIntegration: AsyncBelongsTo;\n\n /**\n * The CRM the group is configured with.\n */\n @belongsTo('enterprise/settings/customer-relationship-management-integration', { async: true, inverse: null })\n declare customerRelationshipManagementIntegration: AsyncBelongsTo;\n\n /**\n * Whether or not the group has access control units.\n */\n @attr('boolean', { defaultValue: false })\n declare isAccessControl: boolean;\n\n /**\n * Whether or not the group should show access control UI.\n */\n @attr('boolean', { defaultValue: false })\n declare usesAccessControlUI: boolean;\n\n /**\n * Whether or not the group have access to MLEG Access Control UI\n */\n @attr('boolean', { defaultValue: false })\n declare hasMLEGAccessControl: boolean;\n\n /**\n * Returns the 'enterprise-group' icon string if the system group isCommercialBusiness == true.\n * Returns the 'property-group' icon string if the system group isCommercialBusiness == false.\n */\n @attr('string', { defaultValue: '' })\n declare icon: string;\n\n /**\n * Move the list of customer IDs to this group. The userAccessEnum maps to the UserAccessEnum in the backend,\n * and it determines whether existing users should retain access to the properties after the move.\n */\n moveSystemsToGroup(selectedCustomerIds: number[], userAccessEnum: number): AsyncModelPayload {\n return this.submitCustomApiCall>('moveSystemsToGroup', 'POST', {\n selectedCustomerIds,\n userAccessEnum\n });\n }\n\n /**\n * Add the list of customer IDs to this group\n */\n addSystemsToGroup(selectedCustomerIds: number[]): AsyncModelPayload {\n return this.submitCustomApiCall>('addSystemsToGroup', 'POST', {\n selectedCustomerIds\n });\n }\n\n /**\n * Move the specified group into current group.\n */\n addSubgroup(childGroupId: number, userAccessEnum: number): AsyncModelPayload {\n return this.submitCustomApiCall>('moveGroup', 'POST', {\n childGroupId,\n userAccessEnum\n });\n }\n\n /**\n * Remove the specified group from its parent group.\n */\n removeSubgroup(groupToRemoveId: number, userAccessEnum: number): AsyncModelPayload {\n return this.submitCustomApiCall>('removeGroup', 'POST', {\n groupToRemoveId,\n userAccessEnum\n });\n }\n\n /**\n * Get the admin logins for this group.\n */\n getAdminLoginNames(): Promise> {\n return this.submitCustomApiCall>('getAdminLoginNames', 'GET');\n }\n\n /**\n * Elevate child group admin logins for this group.\n */\n elevateChildGroupAdminLogins(loginNames: string[]): AsyncModelPayload {\n return this.submitCustomApiCall>('elevateChildGroupAdminLogins', 'POST', {\n loginNames\n });\n }\n\n /**\n * Removes the list of customer IDs from this group. The userAccessEnum maps to the UserAccessEnum in the backend,\n * and it determines whether existing users should retain access to the properties after being removed.\n */\n removeSystemsFromGroup(selectedCustomerIds: number[], userAccessEnum: number): AsyncModelPayload {\n return this.submitCustomApiCall>('removeSystemsFromGroup', 'POST', {\n selectedCustomerIds,\n userAccessEnum\n });\n }\n\n /**\n * Move systems from their current group into a new child group on the current group.\n */\n moveSystemsToChildGroup(childGroupName: string): AsyncModelPayload {\n return this.submitCustomApiCall>('moveSystemsToChildGroup', 'POST', {\n childGroupName\n });\n }\n\n /**\n * Adds locations to the group given the login credentials.\n */\n addLocationsToGroupViaLogin(loginName: string, password: string): AsyncModelPayload {\n return this.submitCustomApiCall>('addLocationsToGroupViaLogin', 'POST', {\n loginName,\n password\n });\n }\n\n /**\n * If the system group is a parent group with populated child groups,\n * returns the ID's of all units nested within this group's child groups.\n * Otherwise, returns the systems directly under the current system group.\n */\n getAllLocationIds(): Promise {\n return (async () => {\n let groups = await this.childGroups;\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error We should break this out into multiple statements so TS is happier.\n groups = groups.length > 0 ? this.childGroups : [this];\n return groups.map((g) => g.hasMany('systems').ids()).flat();\n })();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'systems/system-group': SystemGroup;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { belongsTo, hasMany, attr } from '@ember-data/model';\nimport { Default as DefaultSystemMode } from 'customer-site/enums/AccessControlSystemMode';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type Model from '@ember-data/model';\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type MpersDevice from 'customer-site/models/devices/mpers-device';\nimport type NoiseSensor from 'customer-site/models/devices/noise-sensor';\nimport type SfgModel from 'customer-site/models/devices/security-fog-generator';\nimport type BoilerControlSystemModel from '../automation/boiler-control-system';\nimport type SceneModel from '../automation/scene';\nimport type AccessControlAccessPointDevice from '../devices/access-control-access-point-device';\nimport type AccessControlElevatorDevice from '../devices/access-control-elevator-device';\nimport type CommercialTemperatureSensor from '../devices/commercial-temperature-sensor';\nimport type GarageDoor from '../devices/garage-door';\nimport type GateModel from '../devices/gate';\nimport type Light from '../devices/light';\nimport type LockModel from '../devices/lock';\nimport type PartitionModel from '../devices/partition';\nimport type RemoteTemperatureSenor from '../devices/remote-temperature-sensor';\nimport type Sensor from '../devices/sensor';\nimport type ShadeModel from '../devices/shade';\nimport type SumpPump from '../devices/sump-pump';\nimport type SwitchModel from '../devices/switch';\nimport type ThermostatModel from '../devices/thermostat';\nimport type ValveSwitch from '../devices/valve-switch';\nimport type WaterMeter from '../devices/water-meter';\nimport type WaterSensor from '../devices/water-sensor';\nimport type WaterValveModel from '../devices/water-valve';\nimport type X10light from '../devices/x10light';\nimport type Fence from '../geolocation/fence';\nimport type GeoDevice from '../geolocation/geo-device';\nimport type ImageSensor from '../image-sensor/image-sensor';\nimport type Camera from '../video/devices/camera';\nimport type SdCardCamera from '../video/devices/sd-card-camera';\nimport type Configuration from './configuration';\n\ninterface LastSignificantEvent {\n description: string;\n text: string;\n}\n\ninterface OpenCloseHistory {\n icon: string;\n openCloseTime: string;\n openCloseInfo: string;\n eventHistoryQueue: string;\n}\n\n/**\n * @classdesc\n * The model that defines an Alarm.com system, which is a combination of Unit and Customer.\n *\n * @note The id is the CustomerId, not the UnitId\n */\nexport default class System extends BaseModel {\n /**\n * The system description.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Indicates the the system has a panel that can be armed and is on a security service package.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSecureArming: boolean;\n\n /**\n * The configurable settings for this system.\n */\n @belongsTo('systems/configuration', { async: true, inverse: 'system' })\n declare configuration: AsyncBelongsTo;\n\n /**\n *

    Partitions within the system.

    \n */\n @hasMany('devices/partition', { async: true, inverse: 'system' })\n declare partitions: AsyncHasMany;\n\n /**\n *

    Locks within the system.

    \n */\n @hasMany('devices/lock', { async: true, inverse: 'system' })\n declare locks: AsyncHasMany;\n\n /**\n * MpersDevice within the system.\n */\n @hasMany('devices/mpers-device', { async: true, inverse: 'system' })\n declare mpersDevices: AsyncHasMany;\n\n /**\n *

    Access Control Access Points within the system.

    \n */\n @hasMany('devices/access-control-access-point-device', { async: true, inverse: 'system' })\n declare accessControlAccessPointDevices: AsyncHasMany;\n\n /**\n *

    Access Control Elevators within the system.

    \n */\n @hasMany('devices/access-control-elevator-device', { async: true, inverse: 'system' })\n declare accessControlElevatorDevices: AsyncHasMany;\n\n /**\n * Access Control current system mode.\n */\n @attr('number', { defaultValue: DefaultSystemMode })\n declare accessControlCurrentSystemMode: number;\n\n /**\n * Whether or not the system is in Partial Lockdown\n */\n @attr('boolean', { defaultValue: false })\n declare isInPartialLockdown: boolean;\n\n /**\n *

    Switches within the system.

    \n */\n @hasMany('devices/switch', { async: true, inverse: 'system' })\n declare switches: AsyncHasMany;\n\n /**\n *

    Noise Sensors within the system.

    \n */\n @hasMany('devices/noise-sensor', { async: true, inverse: 'system' })\n declare noiseSensors: AsyncHasMany;\n\n /**\n *

    Video cameras within the system.

    \n */\n @hasMany('video/devices/camera', { async: true, inverse: 'system' })\n declare cameras: AsyncHasMany;\n\n /**\n *

    SD card cameras within the system.

    \n */\n @hasMany('video/devices/sd-card-camera', { async: true, inverse: 'system' })\n declare sdCardCameras: AsyncHasMany;\n\n /**\n *

    Is there any cameras with snapshot capability?

    \n */\n @attr('boolean', { defaultValue: false })\n declare hasSnapShotCameras: boolean;\n\n /**\n *

    Garage doors within the system.

    \n */\n @hasMany('devices/garage-door', { async: true, inverse: 'system' })\n declare garageDoors: AsyncHasMany;\n\n /**\n *

    Water valves within the system.

    \n */\n @hasMany('devices/water-valve', { async: true, inverse: 'system' })\n declare waterValves: AsyncHasMany;\n\n /**\n *

    Water valves within the system.

    \n */\n @hasMany('devices/water-sensor', { async: true, inverse: 'system' })\n declare waterSensors: AsyncHasMany;\n\n /**\n *

    Security Fog Generators within the system

    \n */\n @hasMany('devices/security-fog-generator', { async: true, inverse: 'system' })\n declare sfgDevices: AsyncHasMany;\n\n /**\n *

    Sensors within the system.

    \n */\n @hasMany('devices/sensor', { async: true, inverse: 'system' })\n declare sensors: AsyncHasMany;\n\n /**\n *

    Scenes within the system.

    \n */\n @hasMany('automation/scene', { async: true, inverse: 'system' })\n declare scenes: AsyncHasMany;\n\n /**\n *

    Sump pumps within the system.

    \n */\n @hasMany('devices/sump-pump', { async: true, inverse: 'system' })\n declare sumpPumps: AsyncHasMany;\n\n /**\n *

    Water meters within the system.

    \n */\n @hasMany('devices/water-meter', { async: true, inverse: 'system' })\n declare waterMeters: AsyncHasMany;\n\n /**\n *

    Lights within the system.

    \n */\n @hasMany('devices/light', { async: true, inverse: 'system' })\n declare lights: AsyncHasMany;\n\n /**\n *

    X10Lights within the system.

    \n */\n @hasMany('devices/x10light', { async: true, inverse: 'system' })\n declare x10Lights: AsyncHasMany;\n\n /**\n *

    Thermostats within the system.

    \n */\n @hasMany('devices/thermostat', { async: true, inverse: 'system' })\n declare thermostats: AsyncHasMany;\n\n /**\n *

    Temperature sensors within the system.

    \n */\n @hasMany('devices/remote-temperature-sensor', { async: true, inverse: 'system' })\n declare remoteTemperatureSensors: AsyncHasMany;\n\n /**\n *

    Commercial temperature sensors within the system.

    \n */\n @hasMany('devices/commercial-temperature-sensor', { async: true, inverse: 'system' })\n declare commercialTemperatureSensors: AsyncHasMany;\n\n /**\n *

    Valve Switches within the system.

    \n */\n @hasMany('devices/valve-switch', { async: true, inverse: 'system' })\n declare valveSwitches: AsyncHasMany;\n\n /**\n * The boiler control system within this system (unit).\n */\n @belongsTo('automation/boiler-control-system', { async: true, inverse: 'system' })\n declare boilerControlSystem: AsyncBelongsTo;\n\n /**\n * The collection of geo devices within this unit.\n */\n @hasMany('geolocation/geo-device', { async: true, inverse: 'system' })\n declare geoDevices: AsyncHasMany;\n\n /**\n * Geolocation fences within this system (unit).\n */\n @hasMany('geolocation/fence', { async: true, inverse: 'system' })\n declare fences: AsyncHasMany;\n\n /**\n *

    Image sensors within the system.

    \n *\n * @note This includes deleted devices.\n */\n @hasMany('image-sensor/image-sensor', { async: true, inverse: 'system' })\n declare imageSensors: AsyncHasMany;\n\n /**\n *

    Shades within the system.

    \n */\n @hasMany('devices/shade', { async: true, inverse: 'system' })\n declare shades: AsyncHasMany;\n\n /**\n *

    Gates within the system.

    \n */\n @hasMany('devices/gate', { async: true, inverse: 'system' })\n declare gates: AsyncHasMany;\n\n /**\n *

    Number of remaining upload for this month

    \n */\n @attr('number', { defaultValue: 0 })\n declare remainingImageQuota: number;\n\n /**\n *

    This system's group name (if it has a group)

    \n */\n @attr('string', { defaultValue: '' })\n declare systemGroupName: string;\n\n /**\n *

    The customer's unit id

    \n */\n @attr('number', { defaultValue: 0 })\n declare unitId: number;\n\n /**\n *

    Name of icon to be displayed

    \n */\n @attr('string', { defaultValue: '' })\n declare icon: string;\n\n /**\n * Can the primary panel wait for wifi credentials to be validated?\n */\n @attr('boolean', { defaultValue: false })\n declare canWaitForWifiValidation: boolean;\n\n /**\n * Can the primary panel scan for wifi networks?\n */\n @attr('boolean', { defaultValue: false })\n declare canScanForWifi: boolean;\n\n /**\n * The device id of the primary partition of the panel.\n */\n @attr('number', { defaultValue: 0 })\n declare primaryPartitionId: number;\n\n /**\n * Number of partitions this system has.\n */\n get numberOfPartitions(): number {\n return this.hasMany('partitions' as Exclude).ids().length;\n }\n\n /**\n * Does this system have any partitions?\n */\n get hasPartitions(): boolean {\n return this.numberOfPartitions > 0;\n }\n\n /**\n * Does this system use more than one partition?\n */\n get hasMultiplePartitions(): boolean {\n return this.numberOfPartitions > 1;\n }\n\n /**\n * If any of the partitions are armed\n */\n @attr('boolean', { defaultValue: false })\n declare hasPartitionsArmed: boolean;\n\n /**\n * If any of the partitions are in alarm\n */\n @attr('boolean', { defaultValue: false })\n declare hasPartitionsInAlarmAtPanel: boolean;\n\n /**\n * Should clearing alarms not result in a disarm\n */\n @attr('boolean', { defaultValue: false })\n declare noDisarmWhenClearingAlarms: boolean;\n\n /**\n * Is the system currently connecting to Wifi? Used to track UI status handling\n */\n @tracked\n isSystemConnectingToWifi = false;\n\n // region api calls\n\n /**\n * Sends a request to retrieve the last significant event from the system.\n */\n getLastSignificantEvent(): Promise {\n return this.submitCustomApiCall('getLastSignificantEvent', 'GET');\n }\n\n /**\n * Stops all alarms and disarms the system.\n */\n stopAlarms(): Promise {\n return this.submitCustomApiCall('stopAlarms');\n }\n\n /**\n * Sends a request to change the status of the smoke sensor to closed.\n */\n clearSmokeSensorStatus(deviceId: number): Promise {\n return this.submitCustomApiCall('clearSmokeSensorStatus', 'POST', { deviceId });\n }\n\n /**\n * Sends a request to change the primary partition of the panel.\n */\n updatePrimaryPartition(deviceId: number): Promise {\n return this.submitCustomApiCall('updatePrimaryPartition', 'POST', { deviceId });\n }\n\n /**\n * Sends a request to clear the alarms in memory at the panel.\n */\n clearAlarmsInMemoryTrouble(): Promise {\n return this.submitCustomApiCall('clearAlarmsInMemoryTrouble');\n }\n\n /**\n * Gets the last or last 5 open/close events.\n */\n getOpenCloseHistory(lastFive: string): Promise {\n return this.submitCustomApiCall('getOpenCloseHistory', 'GET', { lastFive });\n }\n\n /**\n * Enables the panel wifi radio setting.\n */\n enablePanelWifi(): Promise {\n return this.submitCustomApiCall('enablePanelWifi', 'POST');\n }\n\n /**\n * Sends the network information to the panel and determines if a connection has been made\n */\n connectPanelToWifi(\n networkId: string,\n ssid: string,\n password: string,\n encryptionType: number,\n waitConnect: boolean\n ): Promise {\n return this.submitCustomApiCall('connectPanelToWifi', 'POST', {\n networkId,\n ssid,\n password,\n encryptionType,\n waitConnect\n });\n }\n\n /**\n * Change the Access Control System Mode.\n */\n setAcSystemMode(newSystemMode: number): AsyncModelPayload {\n return this.submitCustomApiCall>('setAcSystemMode', 'PUT', newSystemMode);\n }\n\n /**\n * Get list of names of the controllers that are not in corresponding operating mode with the current system mode as a string separated by commas\n */\n getControllerNamesWithOperatingModeNotSynced(systemMode: number): Promise<{ value: string }> {\n return this.submitCustomApiCall<{ value: string }>('getControllerNamesWithOperatingModeNotSynced', 'GET', {\n systemMode\n });\n }\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'systems/system': System;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type IconData from '../../utils/transforms-objects/icon-data';\n\n/**\n * @classdesc\n *\n * Model for holding trouble condition extra data.\n */\nexport default class TroubleConditionExtraDataCollection extends BaseModel {\n @attr('string')\n declare buttonText?: string;\n\n @attr('string')\n declare youTubeButton?: string;\n\n @attr('string')\n declare youTubeUrl?: string;\n\n @attr('string')\n declare externalLinkButton?: string;\n\n @attr('string')\n declare externalLinkUrl?: string;\n\n @attr('number')\n declare redirectEnum?: number;\n\n @attr('number')\n declare redirectNativeViewEnum?: number;\n\n @attr('string')\n declare redirectUrl?: string;\n\n @attr('boolean')\n declare redirectIncludesTCId?: boolean;\n\n @attr()\n declare redirectQueryParams?: Record;\n\n @attr('string')\n declare knowledgeBaseLinkText?: string;\n\n @attr('string')\n declare knowledgeBaseLinkUrl?: string;\n\n @attr('string')\n declare showDeviceResourceImage?: string;\n\n @attr('icon-data')\n declare iconData: IconData;\n\n @attr('string')\n declare description?: string;\n\n @attr('number')\n declare deviceId?: number;\n\n @attr('string')\n declare cameraModel?: string;\n\n @attr('boolean')\n declare isWirelessCamera?: boolean;\n\n @attr('boolean')\n declare isBuzzing?: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'trouble-conditions/trouble-condition-extra-data-collection': TroubleConditionExtraDataCollection;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Model for an muted trouble condition.\n */\nexport default class TroubleConditionMute extends BaseModel {\n /**\n * Description of the ignored trouble condition.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Since when has this trouble condition been ignored?\n */\n @attr('string', { defaultValue: '' })\n declare mutedSince: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'trouble-conditions/trouble-condition-mute': TroubleConditionMute;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Alarm, Issue } from '../../enums/TroubleConditionSeverity';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type TroubleConditionMutedOptionEnum from 'customer-site/enums/TroubleConditionMutedOption';\nimport type System from 'customer-site/models/systems/system';\nimport type TroubleConditionExtraDataCollection from './trouble-condition-extra-data-collection';\n\n/**\n * Icon names for different types of trouble conditions.\n *\n * @private\n */\nconst ICONS: Record = {\n [Alarm]: 'alarm',\n [Issue]: 'warning'\n};\n\n/**\n * @classdesc\n *\n * Model for holding trouble condition information, can be of different types.\n */\nexport default class TroubleCondition extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Description of the trouble condition\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Key value pair of extra data params.\n */\n @belongsTo('trouble-conditions/trouble-condition-extra-data-collection', { async: false, inverse: null })\n declare extraData: TroubleConditionExtraDataCollection;\n\n /**\n * Severity of the trouble condition.\n */\n @attr('number')\n declare severity: number;\n\n /**\n * Type of the trouble condition.\n */\n @attr('number')\n declare troubleConditionType: number;\n\n /**\n * Subtype of the trouble condition.\n */\n @attr('number')\n declare troubleConditionSubType: number;\n\n /**\n * Device ID that caused this trouble condition.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Gets the model Id for the device that caused the trouble condition\n */\n @attr('string')\n declare emberDeviceId: string;\n\n /**\n * Since when has this trouble condition been active?\n */\n @attr('date')\n declare sinceUtc: Date;\n\n /**\n * Can the customer mute this trouble?\n */\n @attr('boolean')\n declare canBeMutedOrReset: boolean;\n\n /**\n * The dissmiss actions that are available for this trouble condition.\n */\n @attr('array')\n declare troubleConditionDismissActions: TroubleConditionMutedOptionEnum[];\n\n /**\n * The system that the triggering device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * Returns the icon name for this trouble condition.\n */\n @computed('severity')\n get icon(): string {\n return ICONS[this.severity];\n }\n\n /**\n * Gets a string representing the trouble with information about the system and the time the condition started.\n */\n @computed('description', 'sinceUtc')\n get descriptionWithSystemNameAndDate(): string {\n const { description, sinceUtc, system } = this,\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n startDate = this.intl.formatDate(sinceUtc, {\n month: 'numeric',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric'\n }),\n systemName = get(system, 'description');\n\n return this.intl.t('models.trouble-conditions.alarmSince', { description, systemName, startDate });\n }\n\n /**\n * Mutes the trouble condition.\n */\n mute(): Promise {\n return this.submitCustomApiCall('mute');\n }\n\n /**\n * Mutes the trouble condition. Dismiss functionality is currently for internal use.\n */\n dismiss(muteOption: TroubleConditionMutedOptionEnum, internalUseOnly = true): Promise {\n return this.submitCustomApiCall('dismiss', 'POST', { muteOption, internalUseOnly });\n }\n\n /**\n * Resets the trouble condition.\n */\n reset(): Promise {\n return this.submitCustomApiCall('reset');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'trouble-conditions/trouble-condition': TroubleCondition;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * The model that defines a color.\n */\nexport default class Color extends BaseModel {\n /**\n * The color shade for light mode.\n */\n @attr('string')\n declare light: string;\n\n /**\n * The color shade for dark mode.\n */\n @attr('string')\n declare dark: string;\n\n /**\n * The color shade for high contrast mode.\n */\n @attr('string')\n declare highContrast: string;\n\n /**\n * The color shade for dark and high contrast mode.\n */\n @attr('string')\n declare darkHighContrast: string;\n\n /**\n * The color of the text in light mode.\n */\n @attr('string')\n declare lightText: string;\n\n /**\n * The color of the text in high contrast mode.\n */\n @attr('string')\n declare highContrastText: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'ui/color': Color;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for the footer.\n */\nexport default class Footer extends BaseModel {\n /**\n * Path to the \"Powered by\" image.\n */\n @attr('string', { defaultValue: '' })\n declare poweredByPath: string;\n\n /**\n * Copyright information.\n */\n @attr('string', { defaultValue: '' })\n declare copyrightInfo: string;\n\n /**\n * The link to external terms.\n */\n @attr('string', { defaultValue: '' })\n declare externalTerms: string;\n\n /**\n * The link to an external privacy policy.\n */\n @attr('string', { defaultValue: '' })\n declare externalPrivacyPolicy: string;\n\n /**\n * Should the the Privacy Policy link be hidden in the footer?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldHidePrivacyPolicyLink: boolean;\n\n /**\n * Should the the Terms and Conditions link be hidden in the footer?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldHideTermsAndConditionsLink: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'ui/footer': Footer;\n }\n}\n","import Model from '@ember-data/model';\nimport { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * A model that represents the home screen card configuration.\n */\nexport default class HomeCard extends Model {\n /**\n * The card type (from CardType enumeration).\n */\n @attr('number')\n declare cardType: number;\n\n /**\n * An optional device ID for this card.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The order of this card within the home screen.\n */\n @attr('number', { defaultValue: 0 })\n declare order: number;\n\n /**\n * Whether this card is visible.\n */\n @attr('boolean', { defaultValue: true })\n declare isVisible: boolean;\n\n /**\n * Whether the card is collapsed.\n */\n @attr('boolean', { defaultValue: false })\n declare isCollapsed: boolean;\n\n /**\n * The hero card default view (from HeroCardDefaultViewEnum).\n */\n @attr('number')\n declare defaultView: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'ui/home-card': HomeCard;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\nexport default class GetUpsellShoppingCartResult extends Model {\n @attr('number')\n declare numberOfItemsInCart: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'upsell/get-upsell-shopping-cart-result': GetUpsellShoppingCartResult;\n }\n}\n","import Model, { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * @classdesc\n * Model representing an Upsell Campaign\n */\nexport default class UpsellCampaign extends Model {\n @service declare intl: ADCIntlService;\n\n /**\n * The hardware part ID associated with this Upsell Campaign.\n * Used to redirect to inquiry & shopping cart pages.\n */\n @attr('number')\n declare hardwarePartId: string;\n\n /**\n * The hardare name associated with this campaign (e.g. 180 HD Indoor Camera)\n */\n @attr('string')\n declare hardwareName: string;\n\n /**\n * The one time fee associated with this Upsell Campaign.\n * NOTE that this fee will already be localized to the customer's dealer's currency\n */\n @attr('string')\n declare oneTimeFee: string;\n\n /**\n * The monthly fee associated with this Upsell Campaign. This is based off the customer's service package\n * NOTE that this fee will already be localized to the customer's dealer's currency\n */\n @attr('string')\n declare monthlyFee: string;\n\n @attr('boolean')\n declare isOrderable: boolean;\n\n @attr('boolean')\n declare isAPlanBasedOffer: boolean;\n\n @attr('boolean')\n declare supportsHardwarePricing: boolean;\n\n @attr('boolean')\n declare supportsServicePackagePricing: boolean;\n\n /**\n * Gets the one time fee text associated with this offer. i.e. \"$5.00 one-time fee\"\n * or \"$5.00 one-time payment\" for feature vs. hardware upsell offers, respectively.\n * The fee will already be localized to the customer's dealer's currency.\n */\n get oneTimeFeeText(): string {\n const { intl, isAPlanBasedOffer, oneTimeFee: price } = this,\n resourceKey = isAPlanBasedOffer ? 'priceOneTimeFee' : 'priceOneTimePayment';\n\n return intl.tc(this, resourceKey, { price });\n }\n\n /**\n * Gets the monthly fee text associate with this offer, i.e. \"$5.00/month\".\n * The fee will already be localized to the customer's dealer's currency.\n */\n get monthlyFeeText(): string {\n const { intl, monthlyFee: price } = this;\n\n return intl.tc(this, 'pricePerMonth', { price });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'upsell/upsell-campaign': UpsellCampaign;\n }\n}\n","import { belongsTo, hasMany, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { notEmpty, filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Unknown } from '../../../enums/AccessPointCollectionType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type AccessPointItem from './access-point-item';\n\n/**\n * @classdesc\n * Collection access points of a specific type that a User can have access to.\n *\n * @note The id is userId-enum\n */\nexport default class AccessPointCollectionModel extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Access point items that the user can have access to.\n */\n @hasMany('users/access/access-point-item', { async: true, inverse: 'accessPointCollection' })\n declare accessPointItems: AsyncHasMany;\n\n /**\n * The system that this access point collection belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * The system group that this access point collection belongs to.\n */\n @belongsTo('systems/system-group', { async: true, inverse: null })\n declare systemGroup: AsyncBelongsTo;\n\n /**\n * Can multiple of access point items be selected for access.\n */\n @attr('boolean', { defaultValue: true })\n declare canHaveAccessToMultipleItems: boolean;\n\n /**\n * Type of the collection based on the enum.\n */\n @attr('number', { defaultValue: Unknown })\n declare collectionType: number;\n\n /**\n * Indicates the user has no access to this collection.\n */\n @computed('accessPointItems.{@each.hasAccess,content}')\n get hasNoAccess(): boolean {\n const items = this.accessPointItems;\n return isEmpty(items.filterBy('hasAccess'));\n }\n\n /**\n * The access description (\"None\", \"All\", or concatenated device names \"Front Door, Side Door\").\n */\n @computed('accessPointItems.{content,@each.hasAccess}')\n get description(): string {\n // Are there no access point items?\n const items = get(this, 'accessPointItems.content' as keyof AccessPointCollectionModel) as AccessPointItem[];\n if (isEmpty(items)) {\n return '';\n }\n\n const itemsWithAccess = items.filterBy('hasAccess');\n\n return (\n {\n [0]: this.intl.t('generic.none'),\n [items.length]: this.intl.t('generic.all')\n }[itemsWithAccess.length] || itemsWithAccess.mapBy('deviceName').join(', ')\n );\n }\n\n /**\n * Has this model object been modified?\n */\n @computed('hasDirtyAttributes', 'accessPointItems.@each.hasDirtyAttributes')\n get hasBeenModified(): boolean {\n // eslint-disable-next-line ember/no-get\n return get(this, 'hasDirtyAttributes') || this.accessPointItems.isAny('hasDirtyAttributes');\n }\n\n /**\n * Returns a list of all the access points in this collection that have a code status of \"Failed\".\n */\n @filterBy('accessPointItems', 'isFailed')\n declare failedAccessPoints: AccessPointItem[];\n\n /**\n * Whether or not this collection contains any access points that have a code status of \"Failed\".\n */\n @notEmpty('failedAccessPoints')\n declare hasFailedAccessPoints: boolean;\n\n /**\n * Returns a list of all the access points in this collection that have a code status of \"Pending\".\n */\n @filterBy('accessPointItems', 'isPending')\n declare pendingAccessPoints: AccessPointItem[];\n\n /**\n * Whether or not this collection contains any access points that have a code status of \"Pending\".\n */\n @notEmpty('pendingAccessPoints')\n declare hasPendingAccessPoints: boolean;\n\n /**\n * Need to also roll back the items because they might have had access changed.\n *\n * @override\n */\n rollback(): void {\n if (!this.canBeRolledBack()) {\n return;\n }\n\n this.accessPointItems.filterBy('hasDirtyAttributes').forEach((item) => item.rollback());\n\n super.rollback();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/access/access-point-collection': AccessPointCollectionModel;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr, hasMany, belongsTo } from '@ember-data/model';\nimport { A } from '@ember/array';\nimport { action, computed, get, set } from '@ember/object';\nimport { notEmpty, filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { SyncHasMany } from '@ember-data/model';\nimport type { DeviceAccessControlModel } from 'customer-site/components/users/item/device-access/access-type-parent-group-bulk-actions/index';\nimport type System from 'customer-site/models/systems/system';\nimport type AccessPointCollectionModel from './access-point-collection';\nimport type AccessPointItem from './access-point-item';\nimport type DeviceAccessModel from './device-access';\n\ninterface SystemAccessPointItem {\n system: System; // This is really a promise\n systemGroupId: string;\n accessItems: AccessPointItem[];\n hasFailedAccessPoints: boolean;\n hasPendingAccessPoints: boolean;\n}\n\n/**\n * @classdesc\n *\n * The access point collections that are associated with a contact. This model contains information about which access points\n * a contact has access to.\n */\nexport default class AccessPointCollectionsSummaryModel extends BaseModel {\n @service declare intl: ADCIntlService;\n\n // region Properties\n\n /**\n * Can schedules NOT be used for this user?\n */\n @attr('boolean', { defaultValue: false })\n declare cannotUseSchedules: boolean;\n\n // endregion\n\n // region Relationships\n\n /**\n * Partition (non-card door control) that this user can have access to.\n *\n */\n @hasMany('users/access/access-point-collection', { async: false, inverse: null })\n declare partitionsAccessPointCollections: SyncHasMany;\n\n /**\n * The list of all the partition access points that cannot be changed because they are armed or in alarm.\n */\n @hasMany('users/access/access-point-collection', { async: false, inverse: null })\n declare unchangeablePartitionAccessPoints: SyncHasMany;\n\n /**\n * Lock access points that this user can have access to.\n */\n @hasMany('users/access/access-point-collection', { async: false, inverse: null })\n declare locksAccessPointCollections: SyncHasMany;\n\n /**\n * Voice access points that this user can have access to.\n *\n * @note There will always be at most one, but it is advantageous to keep this structure.\n */\n @hasMany('users/access/access-point-collection', { async: false, inverse: null })\n declare voiceAccessPointCollections: SyncHasMany;\n\n /**\n * Access plan access points that this user can have access to.\n */\n @hasMany('users/access/access-point-collection', { async: false, inverse: null })\n declare accessPlansAccessPointCollections: SyncHasMany;\n\n /**\n * The device access associated with this access point collections summary.\n */\n @belongsTo('users/access/device-access', { async: false, inverse: 'accessPointCollectionsSummary' })\n declare deviceAccess: DeviceAccessModel;\n\n /**\n * Does the user have Existing + Future (all) access?\n */\n @attr('boolean', { defaultValue: false })\n declare isAllAccessUser: boolean;\n\n /**\n * Are we allowed to assign access to all access points within this collections?\n */\n @attr('boolean', { defaultValue: true })\n declare canAssignAccessToAllAccessPoints: boolean;\n\n /**\n * Are we allowed to remove access from all access points this user currently has access to?\n */\n @attr('boolean', { defaultValue: true })\n declare canRemoveAccessFromAllAccessPoints: boolean;\n\n /**\n * An array of system group ids on which this contact has existing + future access.\n */\n @attr('array')\n declare systemGroupIdsWithExistingPlusFutureAccess: number[];\n\n /**\n * The original group ids on which this contact has existing + future access.\n */\n @tracked\n declare originalSystemGroupIdsWithExistingPlusFutureAccess: number[];\n\n /**\n * Merges locks and partitions access point collections together.\n */\n @computed('partitionsAccessPointCollections.[]', 'locksAccessPointCollections.[]')\n get locksAndPartitionsAccessPointCollections(): AccessPointCollectionModel[] {\n return [...this.partitionsAccessPointCollections.toArray(), ...this.locksAccessPointCollections.toArray()];\n }\n\n /**\n * Does the user have access to all access point items?\n */\n @computed('allAccessPointItems.@each.hasAccess')\n get hasAllDeviceAccess(): boolean {\n const { allAccessPointItems } = this;\n return !isEmpty(allAccessPointItems) && allAccessPointItems.isEvery('hasAccess');\n }\n\n /**\n * All of the non-partition access point items that are currently offline.\n */\n @filterBy('nonPartitionAccessPoints', 'isOffline')\n declare offlineAccessPoints: AccessPointItem[];\n\n /**\n * Are any of the offline access point items offline?\n */\n @notEmpty('offlineAccessPoints')\n declare areAnyOffline: boolean;\n\n /**\n * Do any of the offline access points have access?\n */\n @computed('offlineAccessPoints.@each.hasAccess')\n get offlineAccessPointsHaveAccess(): boolean {\n return this.offlineAccessPoints.isAny('hasAccess');\n }\n\n /**\n * Have any of the offline access point items been modified?\n */\n @computed('offlineAccessPoints.@each.hasDirtyAttributes')\n get hasDirtyOfflineAccessPoints(): boolean {\n return this.offlineAccessPoints.isAny('hasDirtyAttributes');\n }\n\n /**\n * A collection of all access point items that do not support schedules.\n */\n @computed('allAccessPointItems.@each.{supportsTemporarySchedule,supportsWeeklySchedule}')\n get devicesWithoutScheduleSupport(): AccessPointItem[] {\n return this.allAccessPointItems.filter(\n (item) => !item.supportsTemporarySchedule || !item.supportsWeeklySchedule\n );\n }\n\n /**\n * A collection of selected {@link models.users.access.AccessPointItem} objects that do not support schedules.\n */\n @filterBy('devicesWithoutScheduleSupport', 'hasAccess')\n declare selectedDevicesWithoutScheduleSupport: AccessPointItem[];\n\n /**\n * A list of systems this user has access to.\n * NOTE: THIS ACTUALLY RETURNS A Promise[]> (TODO: EM-46254)\n */\n @computed('systemsAccessPointItems.[]', 'allAccessPointItems.@each.hasAccess')\n get systemsWithAccess(): System[] {\n return this.systemsAccessPointItems\n .reduce(\n (systemsWithAccess, { system, accessItems }) => [\n ...systemsWithAccess,\n accessItems.find((ai) => !!ai.hasAccess) ? system : undefined\n ],\n []\n )\n .compact();\n }\n\n /**\n * A list of systems that have a failed user code change.\n * NOTE: THIS ACTUALLY RETURNS A Promise[]> (TODO: EM-46254)\n */\n @computed('systemsAccessPointItems.@each.hasFailedAccessPoints', 'systemsWithAccess')\n get failedSystems(): System[] {\n const systemIdsWithAccess = this.systemsWithAccess.mapBy('id');\n\n return this.systemsAccessPointItems\n .filter(\n ({ system, hasFailedAccessPoints }) =>\n hasFailedAccessPoints && systemIdsWithAccess.includes(get(system, 'id'))\n )\n .mapBy('system');\n }\n\n /**\n * A list of systems that have a pending user code change.\n * NOTE: THIS ACTUALLY RETURNS A Promise[]> (TODO: EM-46254)\n */\n @computed('systemsAccessPointItems.@each.hasPendingAccessPoints', 'systemsWithAccess')\n get pendingSystems(): System[] {\n const systemIdsWithAccess = this.systemsWithAccess.mapBy('id');\n\n return this.systemsAccessPointItems\n .filter(\n ({ system, hasPendingAccessPoints }) =>\n hasPendingAccessPoints && systemIdsWithAccess.includes(get(system, 'id'))\n )\n .mapBy('system');\n }\n\n /**\n * How many locations out of a total have failed updating codes?\n */\n @computed('failedSystems.length', 'systemsWithAccess.length')\n get failedLocationCount(): string {\n return this.intl.t('generic.xOfY', { x: this.failedSystems.length, y: this.systemsWithAccess.length });\n }\n\n /**\n * How many locations out of a total have pending user code updates?\n */\n @computed('pendingSystems.length')\n get pendingLocationCount(): string {\n return this.intl.tc(this, 'pendingCodes', { count: this.pendingSystems.length });\n }\n\n /**\n * A collection of selected {@link models.users.access.AccessPointItem} objects that do not support changes while armed.\n */\n @computed('unchangeablePartitionAccessPoints')\n get selectedUnchangeablePartitionAccessPoints(): AccessPointItem[] {\n return this.unchangeablePartitionAccessPoints\n .reduce(\n (items, collection) => [...items, ...(collection.get('accessPointItems') || []).toArray()],\n []\n )\n .filterBy('hasAccess');\n }\n\n /**\n * Has this device access object or it's children been modified?\n */\n @computed(\n 'accessPointCollections.@each.hasBeenModified',\n 'existingPlusFutureAccessHasBeenModified',\n 'hasDirtyAttributes',\n 'hasExistingPlusFutureAccessBeenModified',\n 'deviceAccess.accessControlUser'\n )\n get hasBeenModified(): boolean {\n return !!(\n this.hasDirtyAttributes ||\n this.accessPointCollections.isAny('hasBeenModified') ||\n this.existingPlusFutureAccessHasBeenModified ||\n !!(this.deviceAccess as DeviceAccessControlModel).accessControlUser\n );\n }\n\n /**\n * Have we modified which groups this user has Existing + Future access on?\n */\n @computed('systemGroupIdsWithExistingPlusFutureAccess.[]', 'originalSystemGroupIdsWithExistingPlusFutureAccess.[]')\n get existingPlusFutureAccessHasBeenModified(): boolean {\n const systemGroupIdsWithExistingPlusFutureAccess = this.systemGroupIdsWithExistingPlusFutureAccess || [],\n originalSystemGroupIdsWithExistingPlusFutureAccess =\n this.originalSystemGroupIdsWithExistingPlusFutureAccess ??\n systemGroupIdsWithExistingPlusFutureAccess.slice();\n\n return (\n systemGroupIdsWithExistingPlusFutureAccess.length !==\n originalSystemGroupIdsWithExistingPlusFutureAccess.length ||\n !(\n systemGroupIdsWithExistingPlusFutureAccess.every((id) =>\n originalSystemGroupIdsWithExistingPlusFutureAccess.includes(id)\n ) ?? true\n )\n );\n }\n\n /**\n * Whether the login has access to more than one system group.\n */\n @computed('locksAndPartitionsAccessPointCollections', 'systemsAccessPointItems.[]')\n get hasMultiGroupAccess(): boolean {\n return (\n [...new Set(this.locksAndPartitionsAccessPointCollections.mapBy('systemGroup.id').filter((id) => !!id))]\n .length > 1\n );\n }\n\n /**\n * A collection of all access point items.\n *\n * @note Voice is not included as an \"access point item\".\n */\n @computed('accessPlansAccessPointCollections', 'locksAndPartitionsAccessPointCollections.@each.accessPointItems')\n get allAccessPointItems(): AccessPointItem[] {\n const locksAndPartitions = this.locksAndPartitionsAccessPointCollections.reduce(\n (items, collection) => [...items, ...(collection.get('accessPointItems') || []).toArray()],\n []\n );\n const accessPlans = this.accessPlansAccessPointCollections.reduce(\n (items, collection) => [...items, ...(collection.get('accessPointItems') || []).toArray()],\n []\n );\n return locksAndPartitions.concat(accessPlans);\n }\n\n /**\n * Locks and partitions access point items.\n *\n */\n @computed('locksAndPartitionsAccessPointCollections.@each.accessPointItems')\n get locksAndPartitions(): AccessPointItem[] {\n return A(\n this.locksAndPartitionsAccessPointCollections.reduce(\n (items, collection) => [...items, ...(collection.get('accessPointItems') || []).toArray()],\n []\n )\n );\n }\n\n /**\n * Gets an array of objects mapping systems to list of devices.\n */\n @computed(\n 'locksAndPartitionsAccessPointCollections.@each.{system,systemGroup,accessPointItems,hasFailedAccessPoints,hasPendingAccessPoints}',\n 'allAccessPointItems.[]'\n )\n get systemsAccessPointItems(): SystemAccessPointItem[] {\n const locationItems: { [systemId: string]: SystemAccessPointItem } = {};\n\n this.locksAndPartitionsAccessPointCollections.forEach((collection) => {\n const systemId = collection.belongsTo('system').id(),\n system = collection.get('system'),\n systemGroupId = collection.belongsTo('systemGroup').id(),\n accessItems = (collection.get('accessPointItems') || []).toArray(),\n { hasFailedAccessPoints, hasPendingAccessPoints } = collection.getProperties(\n 'hasFailedAccessPoints',\n 'hasPendingAccessPoints'\n );\n\n const locationItem = locationItems[systemId];\n\n if (locationItem) {\n locationItem.accessItems.push(...accessItems);\n locationItem.hasFailedAccessPoints ||= hasFailedAccessPoints;\n locationItem.hasPendingAccessPoints ||= hasPendingAccessPoints;\n } else {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error The `system` is a promise, so we need to either await it here or change the type in `SystemAccessPointItem`.\n locationItems[systemId] = {\n system,\n systemGroupId,\n accessItems,\n hasFailedAccessPoints,\n hasPendingAccessPoints\n } as SystemAccessPointItem;\n }\n });\n\n return Object.keys(locationItems)\n .reduce((locationItemsArray: SystemAccessPointItem[], systemId) => {\n locationItemsArray.push(locationItems[systemId]);\n return locationItemsArray;\n }, [])\n .toArray();\n }\n\n /**\n * Merges all access point collections together.\n */\n @computed(\n 'partitionsAccessPointCollections.[]',\n 'locksAccessPointCollections.[]',\n 'voiceAccessPointCollections.[]',\n 'accessPlansAccessPointCollections.[]'\n )\n get accessPointCollections(): AccessPointCollectionModel[] {\n return A(\n ['partitions', 'locks', 'voice', 'accessPlans'].reduce(\n (collections, name) => [\n ...collections,\n ...(\n (get(this, `${name}AccessPointCollections` as keyof AccessPointCollectionsSummaryModel) ||\n []) as AccessPointCollectionModel[]\n ).toArray()\n ],\n []\n )\n );\n }\n\n /**\n * An array of Lock Access Points\n */\n @computed('locksAccessPointCollections.[]')\n get lockAccessPoints(): AccessPointItem[] {\n return this.locksAccessPointCollections.reduce(\n (items, collection) => [...items, ...(collection.get('accessPointItems') || []).toArray()],\n []\n );\n }\n /**\n * An array of Partition Access Points\n */\n @computed('partitionsAccessPointCollections.[]')\n get partitionsAccessPoints(): AccessPointItem[] {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Either the return type should be changed to `SyncHasMany` or this code should be replaced with: `return (this.partitionsAccessPointCollections?.toArray() ?? []).mapBy('accessPointItems').flat();`.\n return (this.partitionsAccessPointCollections ?? []).mapBy('accessPointItems').flat();\n }\n\n /**\n * An array of Access Points that are not Partitions\n */\n @computed('allAccessPointItems.[]', 'partitionsAccessPoints.[]')\n get nonPartitionAccessPoints(): AccessPointItem[] {\n return this.allAccessPointItems.filter((a) => !this.partitionsAccessPoints.includes(a));\n }\n\n /**\n * Does the user have lock devices?\n */\n @notEmpty('lockAccessPoints')\n declare hasLocks: boolean;\n\n /**\n * Does this user have access to any locks?\n */\n @computed('lockAccessPoints.@each.hasAccess')\n get hasLockAccess(): boolean {\n return this.lockAccessPoints.isAny('hasAccess');\n }\n\n /**\n * Does the user have no selected devices for device access?\n */\n @computed('allAccessPointItems.@each.hasAccess')\n get hasNoDeviceAccess(): boolean {\n return !this.allAccessPointItems.isAny('hasAccess');\n }\n\n /**\n * Need to override the rollback here, because when we are rolling this model back, we also want to rollback the access point collections.\n *\n * @override\n */\n rollback(): void {\n if (!this.canBeRolledBack()) {\n return;\n }\n\n // Reset the groups on which this user has existing + future access.\n set(\n this,\n 'systemGroupIdsWithExistingPlusFutureAccess',\n this.originalSystemGroupIdsWithExistingPlusFutureAccess\n );\n\n this.accessPointCollections.invoke('rollback');\n\n super.rollback();\n }\n\n /**\n * Update the access plan access point collections\n */\n @action\n updateAccessPlansAccessPointCollections(userType: number): AsyncRecordSetPayload {\n return this.submitCustomApiCall>(\n 'updateAccessPlansAccessPointCollections',\n 'GET',\n {\n userType\n }\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/access/access-point-collections-summary': AccessPointCollectionsSummaryModel;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { alias } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type System from 'customer-site/models/systems/system';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type AccessPointCollectionModel from './access-point-collection';\n\n/**\n * @classdesc List of access points of a specific type that a user can have access to.\n */\nexport default class AccessPointItem extends BaseModel {\n /**\n * User id that this access point item belongs to\n */\n @attr('number')\n declare userId: number;\n\n /**\n * Device id that this item represents access for\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Name of the device that this item belongs to\n */\n @attr('string')\n declare deviceName: string;\n\n /**\n * Does the user have currently have access on the device id\n */\n @attr('boolean', { defaultValue: false })\n declare hasAccess: boolean;\n\n /**\n * Is access paused for this access point item?\n */\n @attr('boolean', { defaultValue: false })\n declare paused: boolean;\n\n /**\n * The minimum amount of digits required for a pin code.\n */\n @attr('number')\n declare minimumPinLength: number;\n\n /**\n * The maximum amount of digits accepted for a pin code.\n */\n @attr('number')\n declare maximumPinLength: number;\n\n /**\n * Can the logged in context change access for the user on the device id\n */\n @attr('boolean', { defaultValue: true })\n declare canAccessBeChanged: boolean;\n\n /**\n * Can the logged in context get access for the user on the device id\n */\n @attr('boolean', { defaultValue: true })\n declare canGetAccess: boolean;\n\n /**\n * Are there no more slots left for the type of user on the device?\n */\n @attr('boolean', { defaultValue: false })\n declare noSlotsLeftForUserType: boolean;\n\n /**\n * The AccessPointCollection model that this Access Point Item belongs to\n */\n @belongsTo('users/access/access-point-collection', { async: true, inverse: 'accessPointItems' })\n declare accessPointCollection: AsyncBelongsTo;\n\n /**\n * Does the access-point support a temporary schedule (e.g. 2018-10-31 10:00am to 2018-11-30 10:00am)?\n */\n @attr('boolean', { defaultValue: true })\n declare supportsTemporarySchedule: boolean;\n\n /**\n * Does the access-point support a weekly schedule (e.g. MWF 9am-5pm)?\n */\n @attr('boolean', { defaultValue: true })\n declare supportsWeeklySchedule: boolean;\n\n /**\n * Whether or not this access point has pending changes.\n */\n @attr('boolean', { defaultValue: false })\n declare isPending: boolean;\n\n /**\n * Whether or not this access point attempted and failed to apply changes.\n */\n @attr('boolean', { defaultValue: false })\n declare isFailed: boolean;\n\n /**\n * The system that this access point belongs to.\n */\n @alias('accessPointCollection.system')\n declare system: System;\n\n /**\n * The system group that this access point belongs to.\n */\n @alias('accessPointCollection.systemGroup')\n declare systemGroup: SystemGroup;\n\n /**\n * Whether or not this access point should be restricted for resident visitor contacts.\n */\n @attr('boolean', { defaultValue: false })\n declare restrictForResidentVisitorContact: boolean;\n\n /**\n * Whether the device associated with this access point is currently offline.\n */\n @attr('boolean', { defaultValue: false })\n declare isOffline: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/access/access-point-item': AccessPointItem;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { belongsTo, attr, hasMany } from '@ember-data/model';\nimport EmberObject, { computed, get } from '@ember/object';\nimport { notEmpty, and, reads, equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Unknown } from 'customer-site/enums/AccessPointUserCodeStatus';\nimport { StandardUser } from 'customer-site/enums/AccessPointUserType';\nimport { PointCentralUserType } from 'customer-site/enums/ContactAttribute';\nimport { NotificationsOnly, Unknown as UnknownUser } from 'customer-site/enums/PointCentralUserType';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type System from 'customer-site/models/systems/system';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type TemporarySchedule from 'customer-site/utils/transforms-objects/temporary-schedule';\nimport type WeeklySchedule from 'customer-site/utils/transforms-objects/weekly-schedule';\nimport type User from '../user';\nimport type AccessPointCollectionsSummary from './access-point-collections-summary';\n\nexport const ACCESS_TYPE = {\n ALL_EXISTING_FUTURE_ID: '1',\n ALL_EXISTING_ID: '2',\n BY_LOCATION_ID: '3',\n NO_ACCESS_ID: '4',\n BY_GROUP_ID: '5'\n};\n\ntype SummaryBadge = {\n icon: string;\n title: string;\n text: string;\n};\n\n/**\n * @classdesc\n *\n * Dictates which devices a user can access and when they can access them.\n *\n * @note ID is the user id.\n */\nexport default class DeviceAccessModel extends BaseModel {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n // region Properties\n\n /**\n * Pin code for the user.\n *\n * Notes:
    \n *
      \n *
    • Show pin code column if the pin code is not null
    • \n *
    • If the pin code is empty string, then the user does not have a pin code set
    • \n *
    • User has access to panel that currently cannot have access changed
    • \n *
    \n */\n @attr('string', { defaultValue: '' })\n declare userCode: string;\n\n /**\n * The current access state of the user code.\n */\n @attr('number', { defaultValue: Unknown })\n declare userCodeStatus: number;\n\n /**\n */\n @attr('string', { defaultValue: '' })\n declare userCodeStatusDesc: string;\n\n /**\n * Holds a map of user codes that differ between systems for a contact.\n */\n @attr()\n declare userCodeSystemsMap: Record;\n\n /**\n * The currently selected user \"type\" (e.g. arm only, guest, etc.).\n */\n @attr('number', { defaultValue: StandardUser })\n declare userType: number;\n\n /**\n * The associated user's PointCentralUserType Attribute\n */\n @attr('number', { defaultValue: UnknownUser })\n declare pointCentralUserType: number;\n\n /**\n * Returns the resolved user type based on whether the user is a PointCentral user.\n */\n get resolvedUserType(): number {\n return this.contextManager.identityModel?.isPointCentral ? this.pointCentralUserType : this.userType;\n }\n\n /**\n * The possible \"types\" a user code could be (e.g. arm only, guest, etc.) with a string as an 'id'.\n *\n * @private\n * @note Please use the availableUserTypesForUser property instead of this property to look up available user types.\n * @note This property has ids as strings to allow the id of 0 to be sent over the payload. To avoid mistakes please use availableUserTypesForUser.\n */\n @attr()\n declare availableUserTypes: { id: string; name: string; description: string }[];\n\n /**\n * The possible \"types\" a user code could be (e.g. arm only, guest, etc.) with a string as an 'id'.\n *\n * @private\n * @note Please use the availableUserTypesForUser property instead of this property to look up available user types.\n * @note This property has ids as strings to allow the id of 0 to be sent over the payload. To avoid mistakes please use availableUserTypesForUser.\n */\n @attr()\n declare availablePointCentralUserTypes: { id: string; name: string; description: string }[];\n\n /**\n * Indicates that access is currently paused for this user.\n */\n @attr('boolean', { defaultValue: false })\n declare isAccessPaused: boolean;\n\n /**\n * Can user code be changed by the logged in login in context for this User?\n */\n @attr('boolean', { defaultValue: true })\n declare canChangeUserCode: boolean;\n\n /**\n * Can user code be shared by the logged in login login in context for this User?\n */\n @attr('boolean', { defaultValue: true })\n declare canShareUserCode: boolean;\n\n /**\n * Does the login have the ability to pause or unpause this user's device access?\n */\n @attr('boolean', { defaultValue: false })\n declare canPauseUnpause: boolean;\n\n /**\n * A weekly schedule that determines when a pin code is active or inactive.\n *\n * @note An example schedule is MWF from 9am-5pm.\n */\n @attr('weekly-schedule')\n declare weeklySchedule: WeeklySchedule | null;\n\n /**\n * A schedule containing defining a fixed period of time via a start and end date.\n *\n * @note This type of schedule has an expiration unlike the weekly schedule.\n */\n @attr('temporary-schedule')\n declare temporarySchedule: TemporarySchedule | null;\n\n /**\n * Does this user have access to all existing and future devices?\n *\n * *NOTE: This property will be deprecated after the Existing + Future revamp project is completed (POINT-846)\n */\n @attr('boolean', { defaultValue: false })\n declare isAllAccessUser: boolean;\n\n /**\n * Does this user have access to all existing and future devices on the selected group?\n */\n @attr('boolean', { defaultValue: false })\n declare hasExistingPlusFutureAccess: boolean;\n\n /**\n * Should a warning be displayed?\n */\n @attr('string', { defaultValue: '' })\n declare warningMessage: string;\n\n /**\n * The amount of systems this contact has access to.\n */\n @attr('number', { defaultValue: 0 })\n declare systemsWithAccessCount: number;\n\n /**\n * The total amount of available systems for which contacts can gain access.\n */\n @attr('number', { defaultValue: 0 })\n declare totalUnitsAvailableCount: number;\n\n // endregion\n\n // Added by PointCentral to store state during user creation.\n accessControlUser?: AccessControlUser;\n accessControlGroupId?: number;\n\n // region Relationships\n\n /**\n * The access point collections for the contact with information about which access points this contact has access to.\n */\n @belongsTo('users/access/access-point-collections-summary', { async: true, inverse: 'deviceAccess' })\n declare accessPointCollectionsSummary: AsyncBelongsTo;\n\n /**\n * The BaseUser object that the Access Control belongs to.\n */\n @belongsTo('users/user', { async: true, inverse: 'deviceAccess' })\n declare user: AsyncBelongsTo;\n\n /**\n * Has this user been assigned to any access plans? If so, we want the UI to reflect\n * that this user has access.\n */\n @hasMany('systems/system', { async: true, inverse: null })\n declare systemsWithAccessPlanAccess: AsyncHasMany;\n\n // endregion\n\n // region Computed Properties\n\n /**\n * Is this notification only.\n */\n @equal('resolvedUserType', NotificationsOnly)\n declare isNotificationOnlyUser: boolean;\n\n /**\n * Does user have weekly schedule?\n */\n @notEmpty('weeklySchedule')\n declare isWeeklyScheduleSelected: boolean;\n\n /**\n * Does user have temporary schedule?\n */\n @notEmpty('temporarySchedule')\n declare isTemporaryScheduleSelected: boolean;\n\n /**\n * Whether we want to show OptOutOfExpiredUserRemoval checkbox\n */\n @attr('boolean', { defaultValue: false })\n declare shouldShowOptOutOfExpiredUserRemoval: boolean;\n\n /**\n * Whether we want to make sure this user is not deleted when their access expires\n */\n @attr('boolean', { defaultValue: false })\n declare optOutOfExpiredUserRemoval: boolean;\n\n /**\n * Is at all times selected?\n */\n @computed('isWeeklyScheduleSelected', 'isTemporaryScheduleSelected')\n get isAllTimesSelected(): boolean {\n return !this.isWeeklyScheduleSelected && !this.isTemporaryScheduleSelected;\n }\n\n /**\n * Does the user have no selected devices for device access?\n */\n @computed('systemsWithAccessCount')\n get hasNoDeviceAccess(): boolean {\n return this.systemsWithAccessCount === 0;\n }\n\n /**\n * Does the user have access to all Locations?\n */\n @computed('systemsWithAccessCount', 'totalUnitsAvailableCount')\n get hasAllLocationAccess(): boolean {\n return (\n this.systemsWithAccessCount > 0 &&\n this.totalUnitsAvailableCount > 0 &&\n this.systemsWithAccessCount === this.totalUnitsAvailableCount\n );\n }\n\n /**\n * The access type id for this user.\n */\n @computed(\n 'accessPointCollectionsSummary.hasAllDeviceAccess',\n 'contextManager.identityModel.{hasMLEGUserAccess,selectedSystemGroup.isParentGroup}',\n 'hasExistingPlusFutureAccess',\n 'hasNoDeviceAccess',\n 'isAllAccessUser'\n )\n get accessTypeId(): string {\n if (this.isAllAccessUser || this.hasExistingPlusFutureAccess) {\n return ACCESS_TYPE.ALL_EXISTING_FUTURE_ID;\n }\n\n if (this.hasNoDeviceAccess) {\n return ACCESS_TYPE.NO_ACCESS_ID;\n }\n\n if (get(this.accessPointCollectionsSummary, 'hasAllDeviceAccess')) {\n return ACCESS_TYPE.ALL_EXISTING_ID;\n }\n\n const isParentGroupAndMleg =\n this.contextManager.identityModel.hasMLEGUserAccess &&\n get(this.contextManager.identityModel.selectedSystemGroup, 'isParentGroup');\n\n return isParentGroupAndMleg ? ACCESS_TYPE.BY_GROUP_ID : ACCESS_TYPE.BY_LOCATION_ID;\n }\n\n /**\n * Does the pin code have a temporary schedule that expires?\n */\n @notEmpty('temporarySchedule')\n declare hasTemporarySchedule: boolean;\n\n /**\n * Does the pin code have a weekly schedules?\n *\n * @note Temporary schedules take precedent because they expire and therefore it is more secure.\n */\n @computed('hasTemporarySchedule', 'weeklySchedule')\n get hasWeeklySchedule(): boolean {\n return !this.hasTemporarySchedule && !!this.weeklySchedule;\n }\n\n /**\n * Indicates the device access has doesn't have a schedule (all access), or only has one schedule and it is valid.\n */\n @computed('temporarySchedule.isValid', 'weeklySchedule.isValid')\n get hasValidSchedule(): boolean {\n const { temporarySchedule, weeklySchedule } = this;\n if (!temporarySchedule && !weeklySchedule) {\n return true;\n }\n\n if (temporarySchedule && weeklySchedule) {\n return false;\n }\n\n return !!(temporarySchedule ?? weeklySchedule)?.isValid;\n }\n\n /**\n * Should the \"panel doesn't support scheduled user codes\" warning be displayed?\n */\n @computed(\n 'hasWeeklySchedule',\n 'hasTemporarySchedule',\n 'accessPointCollectionsSummary.{isFulfilled,devicesWithoutScheduleSupport.[]}'\n )\n get showScheduledUserCodesWarning(): boolean {\n const devicesWithoutScheduleSupport = get(this.accessPointCollectionsSummary, 'devicesWithoutScheduleSupport');\n\n // Is there a weekly schedule and a device that doesn't support it?\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollectionsSummary is async, so we should await it (above) before we query it's properties.\n if (this.hasWeeklySchedule && devicesWithoutScheduleSupport?.any((device) => !device.supportsWeeklySchedule)) {\n return true;\n }\n\n // Is there a temporary schedule and a device that doesn't support it?\n if (\n this.hasTemporarySchedule &&\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollectionsSummary is async, so we should await it (above) before we query it's properties.\n devicesWithoutScheduleSupport?.any((device) => !device.supportsTemporarySchedule)\n ) {\n return true;\n }\n\n return false;\n }\n\n // endregion\n\n // region User item info.\n\n @tracked isCreationFlow = false;\n shouldRedirectToEditRoute = false;\n\n /**\n * Has this device access object been modified?\n */\n @reads('hasDirtyAttributes')\n declare hasBeenModified: boolean;\n\n /**\n * Can we save this device access model?\n */\n @and('canChangeUserCode', 'hasBeenModified')\n declare canBeSaved: boolean;\n\n /**\n * The Panel Slot Number for the given user & unit\n */\n @attr('string', { defaultValue: '' })\n declare panelSlotNumber: string;\n\n /**\n * How many locations out of a total do we have access to?\n */\n @computed('hasNoDeviceAccess', 'systemsWithAccessCount', 'totalUnitsAvailableCount')\n get locationCount(): string {\n const { systemsWithAccessCount, totalUnitsAvailableCount } = this;\n if (this.hasNoDeviceAccess || systemsWithAccessCount === undefined || totalUnitsAvailableCount === undefined) {\n return '';\n }\n\n return this.intl.t('generic.xOfY', { x: systemsWithAccessCount, y: totalUnitsAvailableCount });\n }\n\n /**\n * Icon and text to display in a schedule badge or undefined if no badge should be shown.\n */\n @computed(\n 'hasNoDeviceAccess',\n 'hasTemporarySchedule',\n 'hasWeeklySchedule',\n 'temporarySchedule.description',\n 'weeklySchedule.description'\n )\n get scheduleSummaryBadge(): SummaryBadge | undefined {\n if (!this.hasNoDeviceAccess) {\n if (this.hasWeeklySchedule && !!this.weeklySchedule?.description) {\n return {\n title: this.intl.t('generic.restrictedSchedule'),\n text: this.weeklySchedule?.description ?? '',\n icon: 'schedule'\n };\n }\n\n if (this.hasTemporarySchedule && !!this.temporarySchedule?.description) {\n return {\n title: this.intl.t('generic.temporaryAccess'),\n text: this.temporarySchedule?.description ?? '',\n icon: 'date'\n };\n }\n }\n\n return undefined;\n }\n\n /**\n * The available user types with integers as ids, instead of the strings used as ids for the availableUserTypes property.\n */\n @computed('availableUserTypes.[]')\n get availableUserTypesForUser(): { id: number; name: string; description: string }[] {\n const availableUserTypes = this.availableUserTypes || [];\n return availableUserTypes.map((userType) =>\n EmberObject.create({\n // Do not copy this deprecated usage. If you see this, please fix it\n // @ts-expect-error TypeScript doesn't understand EmberObject, please refactor this to not use EmberObject.\n id: parseInt(userType.id),\n name: userType.name,\n description: userType.description\n })\n ) as unknown as { id: number; name: string; description: string }[];\n }\n\n /**\n * The available user types with integers as ids, instead of the strings used as ids for the availableUserTypes property.\n */\n @computed('availablePointCentralUserTypes.[]')\n get availablePointCentralUserTypesForUser(): { id: number; name: string; description: string }[] {\n const availablePointCentralUserTypes = this.availablePointCentralUserTypes || [];\n return availablePointCentralUserTypes.map((userType) =>\n EmberObject.create({\n // Do not copy this deprecated usage. If you see this, please fix it\n // @ts-expect-error TypeScript doesn't understand EmberObject, please refactor this to not use EmberObject.\n id: parseInt(userType.id),\n name: userType.name,\n description: userType.description\n })\n ) as unknown as { id: number; name: string; description: string }[];\n }\n\n // endregion\n\n // region Methods\n\n /**\n * Generates a new user code for the user and saves.\n */\n generateNewCodeAndSave(): Promise {\n return this.submitCustomApiCall('generateNewCodeAndSave');\n }\n\n /**\n * Produces an error if the entered user code already exists.\n */\n validateUserCode(): Promise> {\n return this.submitCustomApiCall('validateUserCode', 'POST', this);\n }\n\n /**\n * Saves the value of the pointCentralUserType to its entry in the user attribute collection and the backend.\n */\n savePointCentralUserType(): void {\n const userType = this.pointCentralUserType;\n this.store\n .findRecord('users/user-attributes/user-attribute-collection', Number(get(this.user, 'id')))\n .then(function (attributes) {\n attributes.attributeValues[PointCentralUserType] = String(userType);\n attributes.saveModel();\n });\n }\n\n /**\n * Need to override the rollback here, because when we are rolling this model back, we also want to rollback the access point collections summary.\n *\n * @override\n */\n rollback(): void {\n if (!this.canBeRolledBack()) {\n return;\n }\n\n // Rollback any access changes.\n (this.accessPointCollectionsSummary as Promise).then(\n (accessPointCollectionsSummaryModel) => accessPointCollectionsSummaryModel?.rollback()\n );\n\n super.rollback();\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/access/device-access': DeviceAccessModel;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { differenceInHours, differenceInMinutes, differenceInMonths } from 'date-fns';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport default class UnassignedUserCode extends BaseModel {\n @service declare intl: ADCIntlService;\n\n @attr('string')\n declare userCode: string;\n\n @attr('date')\n declare lastAccessUtc: Date;\n\n @attr('boolean', { defaultValue: true })\n declare hasBeenAccessed: boolean;\n\n @attr('string')\n declare deviceName: string;\n\n @attr('number')\n declare deviceId: number;\n\n @computed('userCode')\n get displayUserCode(): string | undefined {\n if (parseInt(this.userCode)) {\n return this.userCode;\n }\n return undefined;\n }\n\n @computed('lastAccessUtc', 'hasBeenAccessed')\n get relativeEventDate(): string {\n const { lastAccessUtc, hasBeenAccessed, intl } = this,\n now = new Date(),\n minuteDelta = differenceInMinutes(now, lastAccessUtc),\n hourDelta = differenceInHours(now, lastAccessUtc),\n monthDelta = differenceInMonths(now, lastAccessUtc);\n\n // Depending on whether this user code has ever been accessed, we want to preface the date strings with either \"Created\" or \"Accessed\"\n const prefix = hasBeenAccessed ? 'accessed' : 'created';\n\n // if it happened more than 6 months ago, just say \"Created/Accessed more than 6 Months Ago\"\n if (monthDelta > 6) {\n return intl.tc(this, `${prefix}MoreThanSixMonthsAgo`);\n }\n\n // if it happened more than 24 hours ago, show month, day, and year in appropriate format\n if (hourDelta > 24) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n const date = intl.formatDate(lastAccessUtc, {\n month: 'numeric',\n day: 'numeric',\n year: 'numeric'\n });\n\n return intl.tc(this, `${prefix}Date`, { date });\n }\n\n // Either show by minute or hours, depending on if any hours have passed.\n const unit = hourDelta < 1 ? 'minute' : 'hour';\n const delta = unit === 'minute' ? minuteDelta : hourDelta;\n\n const relativeTime = intl.formatRelative(-delta, {\n unit,\n numeric: 'auto'\n });\n\n return intl.tc(this, `${prefix}RelativeTime`, { relativeTime });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/access/unassigned-user-code': UnassignedUserCode;\n }\n}\n","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\n\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n var result; // Check for the difference of less than month\n\n if (difference < 1) {\n result = 0;\n } else {\n if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n // This will check if the date is end of Feb and assign a higher end of month date\n // to compare it with Jan\n dateLeft.setDate(30);\n }\n\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month\n\n if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n isLastMonthNotFull = false;\n }\n\n result = sign * (difference - Number(isLastMonthNotFull));\n } // Prevent negative zero\n\n\n return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport default function isLastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}","import { hasMany, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type CountryMobileCarrier from '@adc/login-setup-addon/models/sms/country-mobile-carrier';\nimport type { AsyncHasMany } from '@ember-data/model';\n\n/**\n * @classdesc\n * Base Permissions Collection model.\n */\nexport default class BasePermissionsCollection extends BaseModel {\n /**\n * Can the logged in login create/modify duress users on this system?\n */\n @attr('boolean', { defaultValue: false })\n declare canEditDuressUsers: boolean;\n\n /**\n * Does the panel have an available slot for a duress user?\n */\n @attr('boolean', { defaultValue: false })\n declare canSupportAdditionalDuressUser: boolean;\n\n /**\n * Does the system support multiple duress users?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsMultipleDuressUsers: boolean;\n\n /**\n * Does the customer have add Mobile Credential permission?\n */\n @attr('boolean', { defaultValue: false })\n declare addMobileCredential: boolean;\n\n /**\n * Does the customer have Mobile Credential view permission?\n */\n @attr('boolean', { defaultValue: false })\n declare viewMobileCredential: boolean;\n\n /**\n * List of Duress User Ids on the system.\n */\n @attr('array')\n declare duressUserIds: number[];\n\n /**\n * Maximum number of voice addresses for user\n */\n @attr('number', { defaultValue: 0 })\n declare maxVoiceAddresses: number;\n\n /**\n * Maximum number of mobile addresses for user\n */\n @attr('number', { defaultValue: 0 })\n declare maxMobileAddresses: number;\n\n /**\n * Maximum number of email addresses for user\n */\n @attr('number', { defaultValue: 3 })\n declare maxEmailAddresses: number;\n\n /**\n * Available countries for mobile numbers and associated carriers\n */\n @hasMany('users/country-mobile-carrier', { async: true, inverse: null })\n declare countryMobileCarriers: AsyncHasMany;\n\n /**\n * Can the email format (e.g. plain text or HTML) be changed?\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeEmailFormat: boolean;\n\n // #region user codes\n\n /**\n * Can logged in login in context view user codes?\n */\n @attr('boolean', { defaultValue: true })\n declare canViewUserCodes: boolean;\n\n /**\n * Can the user link/unlink a login\n */\n @attr('boolean', { defaultValue: false })\n declare canViewLinkLoginsAndUsersUI: boolean;\n\n /**\n * Can view Panel Slot Numbers?\n */\n @attr('boolean', { defaultValue: true })\n declare canViewPanelSlotNumbers: boolean;\n\n /**\n * Maximum length for a user code a user\n *\n * Note: This is for any access point device, not just panel\n *\n * Note: Null if the logged in login/system cannot view user codes\n */\n @attr('number')\n declare maxUserCodeLength: number;\n\n /**\n * Can the logged in login restore user codes to all panels?\n */\n @attr('boolean', { defaultValue: false })\n declare canRestoreUserCodes: boolean;\n\n /**\n * Can the logged in login request user codes from panels?\n */\n @attr('boolean', { defaultValue: false })\n declare canRequestUserCodes: boolean;\n\n /**\n * Are we able to request or restore any panel user codes right now?\n * */\n @attr('boolean', { defaultValue: true })\n declare userPinChangesAllowedOnDevices: boolean;\n\n /**\n * Can we create a lock master code user at the enterprise level?\n */\n @attr('boolean', { defaultValue: false })\n declare canCreateLockMasterCodeUser: boolean;\n\n /**\n * Does the current selected group have the 'hide all user types' pins' setting enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare hideAllPinsGroupSettingEnabled: boolean;\n\n /**\n * Can the logged in user view the user attribute values?\n */\n @attr('boolean', { defaultValue: false })\n declare canViewUserAttributeValues: boolean;\n\n /**\n * Does the current selected group have a default user code start time set?\n */\n @attr('number')\n declare userCodeStartTimeMinutesFromMidnight: number;\n\n /**\n * Does the current selected group have a default user code end time set?\n */\n @attr('number')\n declare userCodeEndTimeMinutesFromMidnight: number;\n\n /**\n * Does the current selected group allow early access?\n * The value of this permission will be the amount of minutes of early access for the user.\n */\n @attr('number')\n declare userCodeEarlyAccessMinutes: number;\n\n /**\n * URL for the helper to export panel slot numbers to an CSV file.\n *\n * Note: Null if the logged in login/system cannot export panel slot numbers.\n */\n @attr('string', { defaultValue: '' })\n declare exportPanelSlotNumbersUrl: string;\n\n /**\n * Is the logged in user able to edit user codes based on any panel limitations?\n */\n @attr('boolean', { defaultValue: true })\n declare canEditExistingUserCodes: boolean;\n\n /**\n * Can the current login manage login information that's linked to users?\n */\n @attr('boolean', { defaultValue: false })\n declare canManageLoginInformationForUsersWithLogins: boolean;\n\n // #endregion\n\n /**\n * Does the system group or dealer have the feature toggle enabled for single user promotion\n * Is there a system group to promote to and does the login have the user code permission on that system group\n */\n @attr('boolean', { defaultValue: false })\n declare canPromoteUser: boolean;\n\n /**\n * Can the logged in login access the Users Merge Flow\n * to merge two users together?\n */\n @attr('boolean', { defaultValue: false })\n declare canMergeUser: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/base-permissions-collection': BasePermissionsCollection;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { equal, union } from '@ember/object/computed';\nimport { filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { NotInvited } from 'customer-site/enums/MobileCredentialInvitationStatus';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { General, Duress } from '../../enums/ContactUserType';\nimport { English_US } from '../../enums/Culture';\n\nimport type Model from '@ember-data/model';\nimport type { SyncHasMany, AsyncHasMany } from '@ember-data/model';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type AccessCardCredential from '../access-control/credentials/access-card-credential';\nimport type PinCodeCredential from '../access-control/credentials/pin-code-credential';\nimport type ContactAddress from './contact-address';\nimport type EmailAddress from './email-address';\nimport type MobileAddress from './mobile-address';\nimport type PushDeviceAddress from './push-device-address';\nimport type VoiceAddress from './voice-address';\n\nexport interface EditUserNotSupportedInfo {\n editNotSupportedReason: string | null;\n systemGroupIdToEditUser?: number;\n}\n/**\n * @classdesc\n * User model.\n */\nexport default class BaseUser extends BaseModel {\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare store: ServiceRegistry['store'];\n\n // region First and Last name.\n\n /**\n * Access Control access card credentials that belong to this user\n */\n @hasMany('access-control/credentials/access-card-credential', { async: false, inverse: 'user' })\n declare accessCards: SyncHasMany;\n\n /**\n * Access Control pin code credentials that belong to this user\n */\n @hasMany('access-control/credentials/pin-code-credential', { async: false, inverse: 'user' })\n declare pinCodes: SyncHasMany;\n\n /**\n * Access control mobile credentials belonging to user\n */\n @filterBy('accessCards', 'isMobileCredential', true)\n declare mobileCredentials: AccessCardCredential[];\n\n /**\n * The User's mobile credential invite status\n */\n @attr('number', { defaultValue: NotInvited })\n declare mobileCredentialInviteStatus: number;\n\n /**\n * Start Date of Credentials for this user.\n */\n @attr('date')\n declare startDate: Date;\n\n /**\n * End Date of Credentials for this user.\n */\n @attr('date')\n declare endDate: Date;\n\n /**\n * Does this user's credential have any start date?\n */\n @attr('boolean', { defaultValue: false })\n declare hasStartDate: boolean;\n\n /**\n * Does this user's credential have any end date?\n */\n @attr('boolean', { defaultValue: false })\n declare hasEndDate: boolean;\n\n /**\n * First name for the user.\n */\n @attr('string', { defaultValue: '' })\n declare firstName: string;\n\n /**\n * Can user code be changed by the logged in login in context for this User?\n */\n @attr('boolean', { defaultValue: true })\n declare canChangeUserCode: boolean;\n\n /**\n * Is the first name readonly?\n */\n @attr('boolean', { defaultValue: false })\n declare isFirstNameReadonly: boolean;\n\n /**\n * Last name for the user.\n */\n @attr('string', { defaultValue: '' })\n declare lastName: string;\n\n /**\n * Is the last name readonly?\n */\n @attr('boolean', { defaultValue: false })\n declare isLastNameReadonly: boolean;\n\n /**\n * Should only last name be used for name texts?\n */\n @attr('boolean', { defaultValue: false })\n declare useOnlyOneName: boolean;\n\n // endregion\n\n /**\n * Language culture for this user.\n */\n @attr('number', { defaultValue: English_US })\n declare localeId: number;\n\n /**\n * Is the language culture for this user readonly?\n */\n @attr('boolean', { defaultValue: false })\n declare isLocaleIdReadonly: boolean;\n\n // #region Login Information about the login associated to this user.\n\n /**\n * The login id linked to the user.\n */\n @attr('number')\n declare loginId: number | null;\n\n /**\n * The login name of login linked to the user.\n */\n @attr('string')\n declare loginName: string;\n\n @attr('string')\n declare loginEmail: string;\n\n // #endregion\n\n /**\n * Can the locale control be seen for this user?\n */\n @attr('boolean', { defaultValue: false })\n declare canViewLocaleControl: boolean;\n\n /**\n * User type\n */\n @attr('number', { defaultValue: General })\n declare userType: number;\n\n /**\n * Can this user be deleted?\n *\n * Note: User might not be able to be deleted because of the following reasons:
    \n *
      \n *
    • User is primary user
    • \n *
    • Enterprise user in a single system view
    • \n *
    • User has access to panel that currently cannot have access changed
    • \n *
    \n */\n @attr('boolean', { defaultValue: true })\n declare canBeDeleted: boolean;\n\n /**\n * Can this user be merged with another user?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeMerged: boolean;\n\n /**\n * Is this User the primary user on the account?\n */\n @attr('boolean', { defaultValue: false })\n declare isPrimary: boolean;\n\n /**\n * Is this User the master user on the panel?\n */\n @attr('boolean', { defaultValue: false })\n declare isPanelMaster: boolean;\n\n /**\n * Can this user be saved/updated?\n */\n @attr('boolean', { defaultValue: true })\n declare canBeSaved: boolean;\n\n // region contact addresses\n /**\n * Can the currently logged in login view contact addresses control?\n */\n @attr('boolean', { defaultValue: false })\n declare canViewContactAddressControl: boolean;\n\n /**\n * Can the current user be promoted?\n */\n @attr('boolean', { defaultValue: false })\n declare canShowPromoteUserOption: boolean;\n\n /**\n * Can information about the login linked to this user be viewed?\n */\n @attr('boolean', { defaultValue: false })\n declare canViewLoginInformation: boolean;\n\n /**\n * Is this user from a higher level in the account?\n */\n @attr('boolean', { defaultValue: false })\n declare isHigherLevelUserOnLowerLevel: boolean;\n\n /**\n * Voice Addresses for the user.\n */\n @hasMany('users/voice-address', { async: true, inverse: 'user' })\n declare voiceAddresses: AsyncHasMany;\n\n /**\n * Mobile (SMS) Addresses for the user.\n */\n @hasMany('users/mobile-address', { async: true, inverse: 'user' })\n declare mobileAddresses: AsyncHasMany;\n\n /**\n * Email Addresses for the user.\n */\n @hasMany('users/email-address', { async: true, inverse: 'user' })\n declare emailAddresses: AsyncHasMany;\n\n /**\n * Push Device Addresses for the user.\n */\n @hasMany('users/push-device-address', { async: true, inverse: 'user' })\n declare pushDeviceAddresses: AsyncHasMany;\n\n /**\n * Merges all contact addresses together for easy listing.\n */\n @union('voiceAddresses', 'mobileAddresses', 'emailAddresses', 'pushDeviceAddresses')\n declare contactAddresses: Promise;\n\n /**\n * Returns a single contact addresses without loading all of them.\n *\n * @note If the address id does not exist, this will reject.\n */\n getContactAddress(addressId: string): Promise {\n let address;\n\n ['voice', 'email', 'mobile', 'pushDevice'].some((type) => {\n const hasMany = this.hasMany(`${type}Addresses` as Exclude);\n\n if (hasMany.ids().includes(addressId)) {\n address = this.store.findRecord(`users/${type}-address`, addressId);\n return true;\n }\n\n return false;\n });\n\n return address || Promise.reject();\n }\n\n // endregion\n\n /**\n * Do we support editing of this user?\n */\n @attr('boolean', { defaultValue: true })\n declare isEditSupported: boolean;\n\n /**\n * Contains info of the group on which the user can be edited, if applicable.\n */\n @attr()\n declare editUserNotSupportedInfo: EditUserNotSupportedInfo;\n\n /**\n * Has this user been flagged as an Active Directory user?\n */\n @attr('boolean', { defaultValue: false })\n declare activeDirectoryFlag: boolean;\n\n /**\n * if this user is imported from Active Directory, have they been disabled or deleted?\n */\n @attr('boolean', { defaultValue: false })\n declare adDisabledOrDeleted: boolean;\n\n /**\n * Is this an enterprise level user?\n */\n @attr('boolean', { defaultValue: false })\n declare isEnterprise: boolean;\n\n /**\n * Is this user paused?\n */\n @attr('boolean', { defaultValue: false })\n declare isPaused: boolean;\n\n /**\n * When is the last time the user was paused\n */\n @attr('date')\n declare lastPauseDate: Date;\n\n /**\n * Can this user assign a backup code user?\n */\n @attr('boolean', { defaultValue: false })\n declare canAssignBackupCodeUser: boolean;\n\n /**\n * Was the user created from the reports page?\n */\n @attr('boolean', { defaultValue: false })\n declare createdFromReportsPage: boolean;\n\n /**\n * Is this user a resident contact?\n */\n @attr('boolean', { defaultValue: false })\n declare isResidentVisitor: boolean;\n\n // region computed properties\n /**\n * Is this User a Duress user?\n */\n @equal('userType', Duress)\n declare isDuress: boolean;\n\n /**\n * Name of the scope that the user is currently in. This can be a unit name or a system group name.\n */\n @attr('string', { defaultValue: '' })\n declare scopeName: string;\n\n /**\n * Display name for the User that we want to show on the list.\n */\n @computed('firstName', 'lastName')\n get displayName(): string {\n return ['firstName', 'lastName']\n .map((prop: keyof BaseUser) => get(this, prop) || '')\n .join(' ')\n .trim();\n }\n\n /**\n * Initials to be shown for the user.\n */\n @computed('firstName', 'lastName')\n get initials(): string {\n return [this.firstName, this.lastName]\n .map((prop) => (prop && prop.charAt(0)) || '')\n .join('')\n .trim();\n }\n\n /**\n * The avatar to display for this user.\n */\n @computed('initials', 'isDuress')\n get avatar(): { icon?: string; initials: string } {\n const { initials, isDuress } = this;\n\n let icon;\n\n // For duress user, we use the panic-silent icon.\n if (isDuress) {\n icon = 'panic-silent';\n }\n\n return { icon, initials };\n }\n\n /**\n * Checks if the current user can be promoted to the system group above it.\n * @returns an object with a bool and a potential error reason.\n */\n canPromoteUser(): Promise> {\n return this.submitCustomApiCall>('canPromoteUser', 'GET');\n }\n\n /**\n * Runs the promote and merge process for this user and any ids determined to be duplicate users.\n * @param duplicateContactIds Array of duplicate contact ids to merge in the promotion process.\n */\n promoteUser(duplicateContactIds: number[]): Promise {\n return this.ajax.apiRequest(\n `accessControl/accessControlUsers/${this.id}/promoteUser`,\n undefined,\n duplicateContactIds,\n POST\n );\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/base-user': BaseUser;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Model from '@ember-data/model';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type AlertFormat from '../video/alert-format';\nimport type BaseUser from './base-user';\n\n/**\n * @abstract\n * @class ContactAddress\n */\nexport default class ContactAddress extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n *

    Address that is show to the customer.

    \n *\n *

    This can be any of the following:

    \n *\n *
      \n *
    • Voice number
    • \n *
    • Mobile (SMS) number
    • \n *
    • Email address
    • \n *
    • Push device name
    • \n *
    \n */\n @attr('string', { defaultValue: '' })\n declare address: string;\n\n /**\n * This is the address that is ultimately displayed next to the notification recipient.\n */\n get addressToDisplay(): string {\n return this.address;\n }\n\n /**\n * Type of the contact address.\n */\n @attr('number', { defaultValue: ContactTypeEnum.Unknown })\n declare addressType: number;\n\n /**\n * Roles for contact address that denote special uses such as login communications for 2fa and forgot password.\n */\n @attr()\n declare addressRoles: number[];\n\n /**\n * The type of address (eg. Mobile, Phone, Email)\n */\n @computed('addressType')\n get addressTypeDesc(): string {\n const { addressType } = this;\n\n if (addressType === ContactTypeEnum.IPhonePush) {\n // According to INTL there is no need to translate this.\n return 'Push';\n }\n\n return this.intl.t(\n `generic.${\n (\n {\n [ContactTypeEnum.Email]: 'email',\n [ContactTypeEnum.Phone]: 'devices.phone',\n [ContactTypeEnum.Mobile]: 'mobile'\n } as Record\n )[this.addressType] || 'unknown'\n }`\n );\n }\n\n /**\n *

    Is the contact address paused?

    \n * If it is, notifications will not be sent to it.\n */\n @attr('boolean', { defaultValue: true })\n declare enabled: boolean;\n\n /**\n *

    Is the contact address invalid?

    \n *\n *

    If it is, notifications will not be sent to it and it should be marked as wrong so that the customer can fix it.

    \n */\n @attr('boolean', { defaultValue: false })\n declare invalid: boolean;\n\n /**\n *

    Can this address be deleted?

    \n */\n @attr('boolean', { defaultValue: true })\n declare canBeDeleted: boolean;\n\n /**\n *

    Can this address be edited?

    \n */\n @attr('boolean', { defaultValue: true })\n declare canBeEdited: boolean;\n\n /**\n *

    Can this address be enabled or disabled?

    \n */\n @attr('boolean', { defaultValue: true })\n declare canBeEnabled: boolean;\n\n /**\n *

    is this address generated by AD?

    \n */\n @attr('boolean', { defaultValue: false })\n declare activeDirectoryFlag: boolean;\n\n /**\n * Was the contact address created from the reports page?\n */\n @attr('boolean', { defaultValue: false })\n declare createdFromReportsPage: boolean;\n\n /**\n *

    Icon for displaying this address.

    \n */\n icon?: string;\n\n /**\n * The UserModel object that the Contact Address belongs to.\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @belongsTo('users/base-user', { async: true, polymorphic: true })\n declare user: AsyncBelongsTo;\n\n /**\n * The selected video alert format.\n */\n @belongsTo('video/alert-format', { async: true, inverse: null })\n declare videoFormat: AsyncBelongsTo;\n\n /**\n * Sends a request to the backend for a test video clip.\n */\n sendTestClip(videoFormat: number): Promise {\n return this.submitCustomApiCall('sendTestClip', POST, {\n videoFormat: videoFormat || this.belongsTo('videoFormat' as Exclude).id()\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/contact-address': ContactAddress;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * CountryMobileCarrier\n */\nexport default class CountryMobileCarrier extends Model {\n /**\n *

    Name of the country for mobile carriers.

    \n */\n @attr('string', { defaultValue: '' })\n declare countryName: string;\n\n /**\n *

    List of carriers for this specific country that are available for selection by the customer.

    \n */\n @attr()\n declare carriers: Record;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/country-mobile-carrier': CountryMobileCarrier;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport { HtmlAndText } from '../../enums/EmailSendingFormat';\nimport ContactAddress from './contact-address';\n\n/**\n * @classdesc\n * EmailAddress\n */\nexport default class EmailAddress extends ContactAddress {\n /**\n * Type of the contact address.\n * @override\n */\n @attr('number', { defaultValue: ContactTypeEnum.Email })\n declare addressType: number;\n\n /**\n * The format emails should be sent in (e.g. plain text or HTML)\n */\n @attr('number', { defaultValue: HtmlAndText })\n declare emailSendingFormat: number;\n\n /**\n * @override\n */\n icon = 'email';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/email-address': EmailAddress;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport ContactAddress from './contact-address';\n\n/**\n * @classdesc\n * MobileAddress\n */\nexport default class MobileAddress extends ContactAddress {\n /**\n * Type of the contact address.\n * @override\n */\n @attr('number', { defaultValue: ContactTypeEnum.Mobile })\n declare addressType: number;\n\n /**\n * @override\n */\n icon = 'sms';\n\n /**\n *

    Country of the provider that can send this SMS.

    \n */\n @attr('number')\n declare country: number;\n\n /**\n *

    Provider id for the mobile (sms).

    \n */\n @attr('string', { defaultValue: '' })\n declare providerId: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/mobile-address': MobileAddress;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport ContactAddress from './contact-address';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * MonitoringStationAddress\n */\nexport default class MonitoringStationAddress extends ContactAddress {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n /**\n * Type of the contact address.\n * @override\n */\n @attr('number', { defaultValue: ContactTypeEnum.MonitoringStation })\n declare addressType: number;\n\n /**\n * The dealer's company name.\n */\n @reads('contextManager.identityModel.dealer.name')\n declare dealerName: string;\n\n /**\n * This is the address that is ultimately displayed next to the notification recipient.\n * @override\n */\n get addressToDisplay(): string {\n return this.intl.tc(this, 'dealerMonitoringStation', { dealerName: this.dealerName });\n }\n\n /**\n * @override\n */\n icon = 'monitoring';\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/monitoring-station-address': MonitoringStationAddress;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BasePermissionsCollection from './base-permissions-collection';\n\n/**\n * @classdesc\n * Holds data about all options for users that are allowed to be used based on the currently logged in context\n *\n */\nexport default class PermissionsCollection extends BasePermissionsCollection {\n /**\n * Can logged in login in context create a new user?\n */\n @attr('boolean', { defaultValue: true })\n declare canCreateNewUser: boolean;\n\n /**\n * Can logged in login in context create a duress user?\n */\n @attr('boolean', { defaultValue: true })\n declare canCreateDuressUsers: boolean;\n\n /**\n * URL for the helper to download user codes to a CSV file.\n */\n @attr('string', { defaultValue: '' })\n declare downloadUsersUrl: string;\n\n /**\n * Should we sort the users with access to any devices before users without any access\n * on the users index page?\n */\n @attr('boolean', { defaultValue: true })\n declare sortUsersByAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/permissions-collection': PermissionsCollection;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { Unknown } from 'customer-site/enums/VideoNotificationFormat';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport ContactAddress from './contact-address';\n\n/**\n * @classdesc\n * PushDeviceAddress\n */\nexport default class PushDeviceAddress extends ContactAddress {\n /**\n * Type of the contact address.\n * @override\n */\n @attr('number', { defaultValue: ContactTypeEnum.IPhonePush })\n declare addressType: number;\n\n /**\n * @override\n */\n icon = 'mobile';\n\n @attr('boolean', { defaultValue: false })\n isCurrentDevice!: boolean;\n\n /**\n * The sending format. Currently only applicable for Panels.\n * The values are tied to the VideoNotificationFormat enum.\n */\n @attr('number', { defaultValue: Unknown })\n declare sendingFormat: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/push-device-address': PushDeviceAddress;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Model for Quick Filters on the Users Page.\n */\nexport default class UsersQuickFilter extends BaseModel {\n /**\n * Description of filter\n */\n @attr('string')\n declare description: string;\n\n /**\n * User types to filter by\n */\n @attr('array')\n declare userType: string[] | undefined;\n\n /**\n * Locations to filter by\n */\n @attr('array')\n declare location: string[] | undefined;\n\n /**\n * Access Types to filter by\n */\n @attr('array')\n declare enterpriseAccessType: string[] | undefined;\n\n /**\n * PIN Statuses to filter by\n */\n @attr('array')\n declare pinStatus: string[] | undefined;\n\n /**\n * Access Periods to filter by\n */\n @attr('array')\n declare userCodeSchedule: string[] | undefined;\n\n /**\n * Number of days to filter pins starting within\n */\n @attr('number')\n declare pinsStartingWithinNumDays: number | undefined;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/quick-filter': UsersQuickFilter;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { filterBy } from '@ember/object/computed';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Best, Minimum } from '../../enums/SmrfImageCountThresholds';\nimport { IsUser, None, Invalid } from '../../enums/SmrfMatchingResult';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type SmrfImage from '../video/smrf-image';\n\n/**\n * The enumeration value for a user that has no generated SMRF model.\n */\nexport const NOT_CALIBRATED = 1;\n\n/**\n * The enumeration value for a user that has a SMRF model generated using between 10 and 19 pictures.\n */\nexport const PARTIALLY_CALIBRATED = 2;\n\n/**\n * The enumeration value for a user that has a SMRF model generated using at least 20 pictures.\n */\nexport const FULLY_CALIBRATED = 3;\n\n/**\n * @classdesc\n * The current facial recognition SMRF status for the user with the same ID.\n */\nexport default class SmrfStatus extends BaseModel {\n /**\n * The collection of SMRF (facial recognition) images associated with this user.\n */\n @hasMany('video/smrf-image', { async: false, inverse: 'status' })\n declare images: SyncHasMany;\n\n // region Computed Properties\n\n /**\n * SMRF Images which have previously been accepted.\n */\n @filterBy('images', 'state', IsUser)\n declare acceptedImages: SmrfImage[];\n\n /**\n * SMRF Images which have yet to be rejected or accepted.\n */\n @filterBy('images', 'state', None)\n declare unknownImages: SmrfImage[];\n\n /**\n * SMRF images which were judged to be invalid for facial recognition.\n */\n @filterBy('images', 'state', Invalid)\n declare invalidImages: SmrfImage[];\n\n /**\n * Returns the current SMRF calibration state based on the number of accepted SMRF images.\n */\n @computed('acceptedImages.[]')\n get calibrationState(): number {\n const imageCount = this.acceptedImages.length ?? 0;\n\n if (imageCount < Minimum) {\n return NOT_CALIBRATED;\n }\n\n if (imageCount < Best) {\n return PARTIALLY_CALIBRATED;\n }\n\n return FULLY_CALIBRATED;\n }\n\n // endregion\n\n /**\n * Submits a custom API call to enroll the users SMRF models, provided there are at least the minimum number of required SMRFS.\n */\n enrollSmrf(): Promise {\n return this.submitCustomApiCall('enrollSmrf', POST);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/smrf-status': SmrfStatus;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Model for all of a single contact's contact attributes.\n */\nexport default class UserAttributeCollection extends BaseModel {\n /**\n * Map of existing contact attributes and the values they have.\n */\n @attr()\n declare attributeValues: Record;\n\n /**\n * Record of existing contact attributes that cannot be changed.\n */\n @attr('array')\n declare readOnlyAttributes: Array;\n\n /**\n * Copy of attribute values that's used to roll back the model.\n */\n attributeValuesCache?: Record;\n\n /**\n * Save a copy of the attribute values in their current state.\n */\n cacheAttributeValues(): void {\n this.attributeValuesCache = { ...this.attributeValues };\n }\n\n /**\n * Save attribute model and clear attribute values cache if successful.\n */\n saveModel(): Promise {\n return this.save().then((result) => {\n this.attributeValuesCache = undefined;\n return result;\n });\n }\n\n /**\n * @override\n */\n rollbackAttributes(): void {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Due to upstream bug with hasDirtyAttributes types\n if (this?.hasDirtyAttributes) {\n super.rollbackAttributes();\n }\n\n if (this?.attributeValuesCache) {\n this.attributeValues = this.attributeValuesCache;\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/user-attributes/user-attribute-collection': UserAttributeCollection;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\n\n/**\n * @classdesc\n *\n * Contact Attribute Field and it's properties.\n */\nexport default class UserAttributeField extends BaseModel {\n /**\n * Localized description of the attribute.\n */\n @attr('string')\n declare name: string;\n\n /**\n * Input type of the attribute.\n */\n @attr('number')\n declare inputType: number;\n\n /**\n * Max input length of the attribute.\n */\n @attr('number')\n declare maxInputLength: number;\n\n /**\n * The possible options for the attribute, if it is of the InputType OptionSelect\n */\n @attr()\n declare options: Record;\n\n /**\n * Can this attribute be deleted?\n */\n @attr('boolean')\n declare canBeDeleted: boolean;\n\n /**\n * Does this attribute contain personally identifiable information?\n */\n @attr('boolean')\n declare isPersonallyIdentifiableInformation: boolean;\n\n /**\n * Child attributes for this attribute.\n */\n @hasMany('users/user-attributes/user-attribute-field', { inverse: null, async: false })\n declare childAttributeFields: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/user-attributes/user-attribute-field': UserAttributeField;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr, belongsTo } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { notEmpty } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Guest } from 'customer-site/enums/AccessPointUserType';\nimport { Unknown, Guest as PointCentralGuest } from 'customer-site/enums/PointCentralUserType';\nimport { getUserIcon } from '../../utils/users';\nimport BaseUser from './base-user';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type DeviceAccessModel from './access/device-access';\nimport type SmrfStatus from './smrf-status';\n\n/**\n * @classdesc\n * User model.\n */\nexport default class User extends BaseUser {\n @service declare contextManager: ContextManager;\n\n /**\n * Dictates which devices a user can access and when they can access them.\n *\n * @note: If the user cannot have any access, this object will be empty with no content.\n */\n @belongsTo('users/access/device-access', { async: true, inverse: 'user' })\n declare deviceAccess: AsyncBelongsTo;\n\n /**\n * The current facial recognition status for this user.\n */\n @belongsTo('users/smrf-status', { async: true, inverse: null })\n declare smrfStatus: AsyncBelongsTo;\n\n /**\n * Can this user be assigned a Mobile Credential when not in the AC context.\n */\n @attr('boolean', { defaultValue: false })\n declare canAddMobileCredential: boolean;\n\n /**\n * Can we remove the Mobile Credential when not in the AC context.\n */\n @attr('boolean', { defaultValue: false })\n declare canRemoveMobileCredential: boolean;\n\n /**\n * Indicates whether facial recognition at the panel is supported/enabled for this user.\n */\n @notEmpty('smrfStatus.id')\n declare isSmrfSupported: boolean;\n\n /**\n * Should we send a guest welcome email with details about the user by default when creating this user?\n */\n @attr('boolean', { defaultValue: false })\n declare sendGuestWelcomeEmailByDefault: boolean;\n\n /**\n * Should we send a non-guest welcome email with details about the user by default when creating this user?\n */\n @attr('boolean', { defaultValue: false })\n declare sendNonGuestWelcomeEmailByDefault: boolean;\n\n /**\n * Should we schedule the user's welcome email?\n */\n @attr('boolean', { defaultValue: false })\n declare scheduleWelcomeEmail: boolean;\n\n /**\n * How many days offset should we schedule the welcome email?\n */\n @attr('number')\n declare welcomeEmailDaysOffset: number;\n\n /**\n * Should we send a guest welcome text with details about the user by default when creating this user?\n */\n @attr('boolean', { defaultValue: false })\n declare sendGuestWelcomeTextByDefault: boolean;\n\n /**\n * Should we send a non-guest welcome text with details about the user by default when creating this user?\n */\n @attr('boolean', { defaultValue: false })\n declare sendNonGuestWelcomeTextByDefault: boolean;\n\n /**\n * Used to tracked selected state in the users bulk actions toolbar.\n */\n @tracked isSelected = false;\n\n /**\n * Should we send a welcome email given the user type of this user?\n */\n @computed(\n 'deviceAccess.{pointCentralUserType,userType}',\n 'isNew',\n 'sendGuestWelcomeEmailByDefault',\n 'sendNonGuestWelcomeEmailByDefault'\n )\n get shouldSendWelcomeEmailByDefault(): boolean {\n return get(this.deviceAccess, 'pointCentralUserType') === PointCentralGuest ||\n get(this.deviceAccess, 'userType') === Guest\n ? this.sendGuestWelcomeEmailByDefault\n : this.sendNonGuestWelcomeEmailByDefault;\n }\n\n sendWelcomeEmailUponSave = false;\n\n /**\n * Should we send a welcome text given the user type of this user?\n */\n @computed(\n 'deviceAccess.{pointCentralUserType,userType}',\n 'isNew',\n 'sendGuestWelcomeTextByDefault',\n 'sendNonGuestWelcomeTextByDefault'\n )\n get shouldSendWelcomeTextByDefault(): boolean {\n return get(this.deviceAccess, 'pointCentralUserType') === PointCentralGuest ||\n get(this.deviceAccess, 'userType') === Guest\n ? this.sendGuestWelcomeTextByDefault\n : this.sendNonGuestWelcomeTextByDefault;\n }\n\n sendWelcomeTextUponSave = false;\n\n @computed('deviceAccess.pointCentralUserType', 'contextManager.isPointCentral')\n get isPointCentralUnknown(): boolean {\n const { identityModel } = this.contextManager;\n return get(this.deviceAccess, 'pointCentralUserType') === Unknown && identityModel.isPointCentral;\n }\n\n /**\n * Is this a resident user that is being viewed by the resident login? (aka they're viewing themselves)\n */\n @attr('boolean', { defaultValue: false })\n declare isPointCentralResidentViewingSelf: boolean;\n\n /**\n * Sends a PointCentral welcome email to the user's email addresses.\n */\n sendWelcomeEmail(): Promise {\n return this.submitCustomApiCall('sendWelcomeEmail');\n }\n\n /**\n * Sends a PointCentral welcome text to the user's mobile addresses.\n */\n sendResidentVisitorWelcomeSms(): Promise {\n return this.submitCustomApiCall('sendResidentVisitorWelcomeSms');\n }\n\n /**\n * Pauses or unpauses a users's access.\n */\n pauseUnpauseUser(pause: boolean): Promise {\n return this.submitCustomApiCall('pauseUnpauseUser', 'POST', pause);\n }\n\n /**\n * Sends a welcome text to a user's phone number for new users.\n */\n sendPointCentralWelcomeText(): Promise {\n return this.submitCustomApiCall('sendPointCentralWelcomeText');\n }\n\n /** @override */\n @computed(\n 'deviceAccess.{userType,pointCentralUserType}',\n 'initials',\n 'isDuress',\n 'isPointCentralResidentViewingSelf',\n 'isPrimary'\n )\n get avatar(): { icon?: string; initials: string } {\n const { initials, isDuress } = this;\n\n let icon = this.isPrimary ? undefined : getUserIcon(String(get(this.deviceAccess, 'resolvedUserType')));\n\n // For duress user, we use the panic-silent icon.\n if (isDuress) {\n icon = 'panic-silent';\n } else if (this.isPointCentralResidentViewingSelf) {\n icon = 'feature-home';\n }\n\n return { icon, initials };\n }\n\n /**\n * Attempt to assign this user a backup code user.\n */\n assignBackupCodeUser(): Promise> {\n return this.submitCustomApiCall>('assignBackupCodeUser', 'POST');\n }\n\n /** @override */\n rollback(): void {\n if (!this.canBeRolledBack()) {\n return;\n }\n\n (this.deviceAccess as Promise).then(\n (deviceAccess) => deviceAccess && deviceAccess.rollback()\n );\n\n super.rollback();\n }\n\n /** @override */\n get shouldRollbackRelationships() {\n return true;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/user': User;\n }\n}\n","import { attr } from '@ember-data/model';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport { Home } from '../../enums/PhoneType';\nimport ContactAddress from './contact-address';\n\n/**\n * @classdesc\n * Voice Address\n */\nexport default class VoiceAddress extends ContactAddress {\n /**\n * Type of the contact address.\n * @override\n */\n @attr('number', { defaultValue: ContactTypeEnum.Phone })\n declare addressType: number;\n\n /**\n * @override\n */\n icon = 'phone';\n\n /**\n *

    What is the phone type for the contact address.

    \n */\n @attr('number', { defaultValue: Home })\n declare phoneType: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'users/voice-address': VoiceAddress;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type BaseCamera from 'customer-site/models/video/devices/base-camera';\nimport type OvRule from 'customer-site/models/video/ov-rule';\n\n/**\n * @classdesc\n * Statistics on the number of uploads with a given OvClassificationType stemming from a given rule on a given EventDate\n * (which, at most, has 1 hr granularity).\n */\nexport default class AggregatedVideoEventsSummaryModel extends BaseModel {\n /**\n * The number of uploads performed.\n */\n @attr('number')\n declare eventCount: number;\n\n /**\n * The OV Classification type of the uploads.\n *\n * @see ClassificationCategoryType\n */\n @attr('number')\n declare ovClassificationType: number | null;\n\n /**\n * The UTC date associated with the events.\n */\n @attr('date')\n declare eventDate: Date;\n\n /**\n * The camera associated with the upload(s).\n */\n @belongsTo('video/devices/base-camera', { async: true, inverse: null })\n declare camera: AsyncBelongsTo;\n\n /**\n * The rule associated with the upload(s).\n */\n @belongsTo('video/ov-rule', { async: true, inverse: null })\n declare rule: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/aggregated-video-events-summary': AggregatedVideoEventsSummaryModel;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class AiDeterrenceUsageModel extends BaseModel {\n /**\n * The max number of AID events a customer can use\n */\n @attr('number', { defaultValue: 0 })\n declare maxEventQuota: number;\n\n /**\n * The number of AID events a customer can use in a month.\n * This can be different from the Max Event Quota\n */\n @attr('number', { defaultValue: 0 })\n declare currentEventQuota: number;\n\n /**\n * Current number of AID events a customer has used in the month\n */\n @attr('number', { defaultValue: 0 })\n declare eventsThisMonth: number;\n\n /**\n * The number of AID events a customer is projected to use in the month\n */\n @attr('number', { defaultValue: 0 })\n declare projectedMonthlyEvents: number;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/ai-deterrence-usage': AiDeterrenceUsageModel;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Video alert format type model.\n */\nexport default class AlertFormat extends Model {\n /**\n * The description of the alert format.\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/alert-format': AlertFormat;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport RecordModel from '../activity/record';\nimport VideoEvent from './video-event';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type LocationModel from '../enterprise/locations/location';\nimport type System from '../systems/system';\nimport type Camera from './devices/camera';\n\n/**\n * The model that defines an Alarm.com analytics snapshot event.\n */\nexport default class AnalyticsSnapshotEvent extends RecordModel {\n /**\n * The system (unit) that this video event belongs to\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * The captured image (either video clip or image sensor image or analytics snapshot event) associated with this event.\n */\n @belongsTo('activity/record', {\n async: false,\n inverse: null,\n polymorphic: true\n })\n declare media: RecordModel;\n\n /**\n * The location this event belongs to.\n */\n @belongsTo('enterprise/locations/location', { async: true, inverse: null })\n declare location: AsyncBelongsTo;\n\n /**\n * The {@link models.video.Camera} this event belongs to.\n */\n @belongsTo('video/devices/camera', { async: true, inverse: null })\n declare camera: AsyncBelongsTo;\n\n /**\n * The time the event occurred as a string to handle different timezones.\n */\n @attr('date')\n declare timestamp: Date;\n\n /**\n * The URL that can be used to retrieve a thumbnail image of this video event. Includes bounding box.\n */\n @attr('string')\n declare thumbnail: string;\n\n /**\n * The URL that can be used to retrieve a thumbnail image of this video event. Does not include bounding box.\n */\n @attr('string')\n declare thumbnailWithoutBoundingBox: string;\n\n /**\n * The collection of classification categories identified in this event.\n */\n @attr('array')\n declare ovClassifications: number[];\n\n /**\n * Indicates this is a video event.\n */\n get isVideoEvent(): boolean {\n return this.media instanceof VideoEvent;\n }\n\n /**\n * Indicates this is a snapshot event.\n */\n get isSnapshotEvent(): boolean {\n return this.media instanceof AnalyticsSnapshotEvent;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/analytics-snapshot-event': AnalyticsSnapshotEvent;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { EVERY_DAY_BITS } from 'customer-site/utils/datetime';\nimport { isEmptyObject } from 'customer-site/utils/general';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport addDays from 'date-fns/addDays';\nimport addMinutes from 'date-fns/addMinutes';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type Rule from '../automation/rules/rule';\nimport type Light from '../devices/light';\nimport type BaseAnalyticsCamera from './devices/base-analytics-camera';\n\nconst MINUTES_PER_DAY = 1440;\n\n/**\n * @classDesc\n *\n * Base OV ready rule model.\n */\nexport default class BaseAnalyticsRule extends BaseModel {\n /**\n * Analytic camera for this rule (Ov Ready or Third Party).\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @belongsTo('video/devices/base-analytics-camera', { async: true, polymorphic: true })\n declare camera: AsyncBelongsTo;\n\n /**\n * Customer name for this OV rule.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * Flag to determine if this rule is currently active or not.\n */\n @attr('boolean', { defaultValue: true })\n declare isActive: boolean;\n\n /**\n * Flag to determine if this rule is locked by the dealer.\n */\n @attr('boolean', { defaultValue: false })\n declare isDealerLocked: boolean;\n\n /**\n * Type of OV rule such as Ground Zone or Tripwire.\n */\n @attr('number', { defaultValue: -1 })\n declare ruleType: number;\n\n /**\n * Minimum delay between clips.\n * Current default value is 3 minutes.\n */\n @attr('number', { defaultValue: 180 })\n declare minimumDelayBetweenClips: number;\n\n /**\n * The day bits determining which days this schedule is run.\n * Default value is set to be every day.\n */\n @attr('number', { defaultValue: EVERY_DAY_BITS })\n declare dayBits: number;\n\n /**\n * The local time that this rule's schedule starts, in minutes.\n * Default value is set to be the start of the day, as if always running.\n */\n @attr('number', { defaultValue: 0 })\n declare startTime: number;\n\n /**\n * The local time that this rule's schedule ends, in minutes.\n * If greater than 1440 (minutes in a day), this schedules goes into the next day.\n * Default value is set to be the end of the day, as if always running.\n */\n @attr('number', { defaultValue: MINUTES_PER_DAY })\n declare endTime: number;\n\n /**\n * Has the user selected at least one recipient to send notifications to?\n */\n @computed('emailRecipients', 'mobileRecipients', 'pushDeviceRecipients', 'monitoringStationRecipients')\n get hasSelectedRecipients(): boolean {\n return !(\n isEmptyObject(this.emailRecipients) &&\n isEmptyObject(this.mobileRecipients) &&\n isEmptyObject(this.pushDeviceRecipients) &&\n isEmptyObject(this.monitoringStationRecipients)\n );\n }\n\n /**\n * The list of all email recipients for this rule.\n * This is a dictionary of ContactAddress id to corresponding VideoNotificationFormatEnum.\n */\n @attr()\n declare emailRecipients: Record;\n\n /**\n * The list of all mobile recipients for this rule.\n * This is a dictionary of ContactAddress id to corresponding VideoNotificationFormatEnum.\n */\n @attr()\n declare mobileRecipients: Record;\n\n /**\n * The list of all monitoring station recipients for this rule.\n * This is a dictionary of ContactAddress id to corresponding VideoNotificationFormatEnum which value we do not use.\n *\n * NOTE: These recipients are ultimately used to determine whether this is an Remote Video Monitoring Console event rule.\n */\n @attr()\n declare monitoringStationRecipients: Record;\n\n /**\n * The list of all push device recipients for this rule.\n * This is a dictionary of ContactAddress id to corresponding VideoNotificationFormatEnum.\n */\n @attr()\n declare pushDeviceRecipients: Record;\n\n /**\n * The list of all addresses to display for the selected notification recipeints.\n * EX: [\"iPhone\", \"alarm@alarm.com\", \"(123) 456-7890\"]\n */\n @attr()\n declare selectedNotifications: string[];\n\n /**\n * List of filter types used when sending notifications.\n */\n @attr('array', { defaultValue: () => [] })\n declare notificationFilters: number[];\n\n /**\n * The automation rule item associated with this rule.\n */\n @belongsTo('automation/rules/rule', { async: true, inverse: null })\n declare ruleItem: AsyncBelongsTo;\n\n /**\n * The start of the vacation watch schedule associated with this rule,\n * if there is one. Otherwise, the backend populates this with a default value.\n */\n @attr('date', { defaultValue: () => addMinutes(Date.now(), 5) })\n declare vacationWatchStartDate: Date;\n\n /**\n * The end of the vacation watch schedule associated with this rule,\n * if there is one. Otherwise, the backend populates this with a default value.\n */\n @attr('date', { defaultValue: () => addDays(addMinutes(Date.now(), 5), 7) })\n declare vacationWatchEndDate: Date;\n\n /**\n * Whether there is a vacation watch schedule currently set up for this rule.\n */\n @attr('boolean', { defaultValue: false })\n declare vacationWatchConfigured: boolean;\n\n /**\n * What type of exceptions should stop this rule from running?\n */\n @attr('array')\n declare exceptions: number[];\n\n /**\n * What GeoDevices are linked to the GeoFence exception on this rule?\n * List should be empty if a geofence exception is not selected.\n */\n @attr('array')\n declare geoDevicesForException: string[];\n\n /**\n * What GeoFence is used for the GeoFence exception?\n * GeoFence id should be -1 if there is no GeoFence exception.\n */\n @attr('number', { defaultValue: -1 })\n declare geoFenceForException: number;\n\n /**\n * Whether or not this rule will upload clips.\n */\n @attr('boolean', { defaultValue: true })\n declare isClipUploadActive: boolean;\n\n /**\n * The amount of minutes to pause the rule once a panel or Property Status exception is left.\n */\n @attr('number', { defaultValue: 0 })\n declare exitDelay: number;\n\n // region Light Rule Attributes\n\n /**\n * Whether light automation can be used with this rule.\n * Depends on permissions and if the account has any lights installed.\n */\n @attr('boolean', { defaultValue: false })\n declare canCreateLightRule: boolean;\n\n /**\n * Amount of time the light will remain on after analytics triggers the light.\n */\n @attr('number', { defaultValue: -1 })\n declare lightTimeOnLengthInSeconds: number;\n\n /**\n * The day bits determining which days this light schedule is run.\n * Default value is set to be every day.\n */\n @attr('number', { defaultValue: EVERY_DAY_BITS })\n declare lightDayBits: number;\n\n /**\n * The local time that this rule's light schedule starts, in minutes.\n * Default value is set to be the start of the day, as if always running.\n */\n @attr('number', { defaultValue: 0 })\n declare lightRuleStartTime: number;\n\n /**\n * The local time that this rule's light schedule ends, in minutes.\n * If greater than 1440 (minutes in a day ), this schedules goes into the next day.\n * Default value is set to be the end of the day, as if always running.\n */\n @attr('number', { defaultValue: MINUTES_PER_DAY })\n declare lightRuleStopTime: number;\n\n /**\n * The description of the timeframe for which the light rule will run.\n */\n @attr('string', { defaultValue: '' })\n declare lightRuleTimeframeDescription: string;\n\n /**\n * Light schedule comes on after sunset.\n */\n @attr('boolean', { defaultValue: false })\n declare scheduleIsDark: boolean;\n\n /**\n * List of filter types used when triggering a light rule.\n * For third party cameras, this value is always statically set to SavedClipFilterOptionEnum.ThirdPartyAnalytics and we use thirdPartyLightRuleFilters.\n */\n @attr('array', { defaultValue: () => [] })\n declare lightRuleFilters: number[];\n\n /**\n * The lights currently on this rule.\n */\n @hasMany('devices/light', { async: true, inverse: null })\n declare lightsSelected: AsyncHasMany;\n\n // endregion\n\n // region Escalated event processing options. Used by monitoring station notification recipient of dealer-locked rules\n\n /**\n * true if NoonlightVerify dropdown option should be shown for this rule\n * Applies to escalated events rule\n */\n @attr('boolean', { defaultValue: false })\n declare showNoonlightVerify: boolean;\n\n /**\n * true if DialerDelay dropdown option should be shown for this rule\n * Applies to escalated events rule\n */\n @attr('boolean', { defaultValue: false })\n declare showDialerDelay: boolean;\n\n /**\n * Ignore this field if showNoonlightVerify if not true\n * 0 = no verification, 1 = verification\n */\n @attr('number', { defaultValue: 0 })\n declare noonlightVerifyType: number;\n\n /**\n * Ignore this field if showNoonlightVerify if not true\n * 0 = no delay, 1 = delay\n */\n @attr('number', { defaultValue: 0 })\n declare dialerDelayType: number;\n\n // endregion\n\n /**\n * Are we creating a new rule? We only store this in the frontend for validation before saving.\n */\n creatingNew = false;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/base-analytics-rule': BaseAnalyticsRule;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { isEmpty } from '@ember/utils';\nimport { GET } from '@adc/ajax/services/adc-ajax';\nimport {\n Animal,\n Human,\n Vehicle,\n DeliveryVehicle,\n FamiliarVehicle,\n Parcel\n} from '../../enums/ClassificationCategoryType';\nimport RecordModel from '../activity/record';\n\nimport type { AsyncBelongsTo, SyncHasMany } from '@ember-data/model';\nimport type { SafeString } from '@ember/template';\nimport type FamiliarTargetFeedbackEvent from 'customer-site/models/video/familiar-targets/familiar-target-feedback-event';\nimport type ADCIntlService from 'customer-site/services/intl';\nimport type FamiliarTargetEvent from 'customer-site/utils/video/settings/familiar-target-event';\nimport type LocationModel from '../enterprise/locations/location';\nimport type System from '../systems/system';\nimport type Camera from './devices/camera';\n\nconst VehicleClassificationEnums = [Vehicle, FamiliarVehicle];\n\n/**\n * The model that defines an Alarm.com media event.\n */\nexport default abstract class BaseMediaEvent extends RecordModel implements FamiliarTargetEvent {\n @service declare intl: ADCIntlService;\n\n /**\n * The system (unit) that this media event belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * The location this event belongs to.\n */\n @belongsTo('enterprise/locations/location', { async: true, inverse: null })\n declare location: AsyncBelongsTo;\n\n /**\n * The {@link models.video.Camera} this event belongs to.\n */\n @belongsTo('video/devices/camera', { async: true, inverse: null })\n declare camera: AsyncBelongsTo;\n\n /**\n * The description of this media event.\n */\n @attr('string')\n declare description: string;\n\n /**\n * The time the event occurred as a string to handle different timezones.\n */\n @attr('date')\n declare timestamp: Date;\n\n /**\n * The duration of the clip in milliseconds.\n */\n @attr('number')\n clipDurationMs: number | undefined;\n\n /**\n * The URL that can be used to retrieve a thumbnail image of this media event.\n */\n @attr('string')\n declare thumbnail: string;\n\n /**\n * Indicates the associated media is protected.\n */\n @attr('boolean', { defaultValue: false })\n declare isProtected: boolean;\n\n /**\n * The size of the event in kilobytes.\n */\n @attr('number', { defaultValue: 0 })\n declare size: number;\n\n /**\n * The collection of classification categories identified in this event.\n */\n @attr('array')\n declare ovClassifications: number[];\n\n /**\n * Number from 0-1 that indicates where analytics classification targets, if any, start on the x-axis.\n * It's a percentage of the total height.\n */\n @attr('number', { defaultValue: 0 })\n declare targetStartX: number;\n\n /**\n * Number from 0-1 that indicates where analytics classification targets, if any, start on the y-axis.\n * It's a percentage of the total height.\n */\n @attr('number', { defaultValue: 0 })\n declare targetStartY: number;\n\n /**\n * Number from 0-1 that indicates percentage of width that contains all analytics classification targets, if any exist.\n */\n @attr('number', { defaultValue: 1 })\n declare targetWidth: number;\n\n /**\n * Number from 0-1 that indicates percentage of height that contains all analytics classification targets, if any exist.\n */\n @attr('number', { defaultValue: 1 })\n declare targetHeight: number;\n\n /**\n * The native width of the media.\n */\n @attr('number', { defaultValue: -1 })\n declare width: number;\n\n /**\n * The native height of the media.\n */\n @attr('number', { defaultValue: -1 })\n declare height: number;\n\n /**\n * The media's download URL with watermarking parameters.\n */\n @attr('string')\n declare downloadUrl: string;\n\n /**\n * Whether the user has the permissions to view the media.\n */\n @attr('boolean')\n declare userHasPermissionToWatchEvent: boolean;\n\n /**\n * Indicates the media has been donated.\n */\n @attr('boolean', { defaultValue: false })\n declare isDonated: boolean;\n\n /**\n * Indicates this media has been deleted.\n */\n @attr('boolean', { defaultValue: false })\n declare isEventDeleted: boolean;\n\n /**\n * The name of the user who deleted this media.\n */\n @attr('string')\n declare deletedBy: string;\n\n /**\n * The media event's event type.\n */\n @attr('number')\n declare eventType: number;\n\n @hasMany('video/familiar-targets/familiar-target-feedback-event', { async: false, inverse: null })\n declare familiarTargetFeedbackEvents: SyncHasMany;\n\n /**\n * The media event's age limit.\n */\n @attr('number')\n declare ageLimitDays: number;\n\n /**\n * Whether to display the protect modal.\n */\n @attr('boolean')\n declare displayProtectModal: boolean;\n\n /**\n * Indicates if this media was viewed by central station.\n */\n @attr('boolean')\n declare isViewedByCentralStation: boolean;\n\n /**\n * Is this media event a screen recording?\n * This is true when CS operators view Onboard/SVR playback during VV/EE,\n * and their screen is recorded for auditing purposes.\n * The screen recording may include video playback from multiple cameras.\n */\n @attr('boolean')\n declare isScreenRecording: boolean;\n\n /**\n * Returns the media playback URL.\n */\n abstract getPlaybackUrl(): Promise;\n\n /**\n * Returns information for sharing this media event.\n */\n @computed()\n get shareLinkInfo(): Promise<{ subject: string; url: string }> {\n return (async () => {\n const { value } = await this.submitCustomApiCall>(\n 'getShareLink',\n GET\n );\n return value;\n })();\n }\n\n /**\n * Donates this media with user feedback.\n */\n abstract donateMedia(\n isCorrect: boolean,\n details: string,\n donateCalibrationSnapshots: boolean\n ): AsyncModelPayload;\n\n /**\n * Classification icons for this media event.\n */\n @computed('ovClassifications.[]')\n get classificationIcons(): Record | undefined {\n // Get unique set of classifications.\n const icons = [\n ...new Set(\n (this.ovClassifications || [])\n .map(\n (type) =>\n ((\n {\n [Human]: 'va-person',\n [Vehicle]: 'va-vehicle',\n [Animal]: 'va-animal',\n [DeliveryVehicle]: 'va-vehicle',\n [Parcel]: 'box-delivery'\n } as Record\n )[type])\n )\n .filter((item) => item != undefined)\n )\n ];\n\n // Are there NO icons?\n if (isEmpty(icons)) {\n return undefined;\n }\n\n // Return object with key for icon and value for text.\n return icons.reduce(\n (map, icon) => ({\n ...map,\n [icon]: this.intl.tc(this, camelize(icon))\n }),\n {}\n );\n }\n\n /**\n * Returns the aspect ratio for this camera, i.e 16:9, 4:3, etc.\n */\n @computed('height', 'width')\n get aspectRatio(): string {\n const fnGCD: (a: number, b: number) => number = (a, b) => (b === 0 ? a : fnGCD(b, a % b)),\n { height, width } = this,\n gcd = fnGCD(width, height);\n\n return `${width / gcd}:${height / gcd}`;\n }\n\n /**\n * The orientation of the camera ('vertical' or 'horizontal').\n */\n @computed('aspectRatio')\n get orientation(): string {\n const [width, height] = this.aspectRatio.split(':').map(Number);\n if (width === height) {\n return 'square';\n }\n\n return width > height ? 'horizontal' : 'vertical';\n }\n\n /**\n * Does this media event have a single non-delivery vehicle classification?\n */\n get hasVehicle() {\n return this.ovClassifications.filter((c) => VehicleClassificationEnums.includes(c)).length === 1;\n }\n\n /**\n * Does this media event have a Familiar Target feedback event associated with it?\n */\n get hasFeedback() {\n return this.familiarTargetFeedbackEvents.length > 0;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/base-media-event': BaseMediaEvent;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * The cached \"days of recorded video\" property for an SVR.\n */\nexport default class CachedDaysOfRecordedVideo extends Model {\n /**\n * The cached number of days of video recorded by the svr.\n */\n @attr('number')\n declare daysOfRecordedVideo: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/cached-days-of-recorded-video': CachedDaysOfRecordedVideo;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Snapshot from '../snapshot';\n\n/**\n * @classdesc\n * A calibration snapshot bounding box.\n */\nexport default class BoundingBox extends BaseModel {\n /**\n * The snapshot this box belongs to.\n */\n @belongsTo('video/calibration/snapshot', { async: true, inverse: 'boundingBoxes' })\n declare snapshot: AsyncBelongsTo;\n\n /**\n * The bounding box height percentage.\n */\n @attr('number')\n declare height: number;\n\n /**\n * The bounding box width percentage.\n */\n @attr('number')\n declare width: number;\n\n /**\n * The bounding box top position (percentage).\n */\n @attr('number')\n declare top: number;\n\n /**\n * The bounding box left position (percentage).\n */\n @attr('number')\n declare left: number;\n\n /**\n * If it is a user selected bounding box (for when there are multiple bounding boxes discovered).\n */\n isSelected = false;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/calibration/bounding-box': BoundingBox;\n }\n}\n","import { hasMany, belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type OvReadyCamera from '../devices/ov-ready-camera';\nimport type BoundingBox from './bounding-box';\n\n/**\n * @classdesc\n * A single ov-ready camera calibration snapshot.\n */\nexport default class Snapshot extends BaseModel {\n /**\n * The camera this snapshot applies to.\n */\n @belongsTo('video/devices/ov-ready-camera', { async: true, inverse: 'calibrationSnapshots' })\n declare camera: AsyncBelongsTo;\n\n /**\n * The snapshot index (0 - 4).\n */\n @attr('number')\n declare index: number;\n\n /**\n * Download URL for this snapshot\n */\n @attr('string')\n declare imageUrl: string;\n\n /**\n * The calculated bounding boxes for this snapshot.\n */\n @hasMany('video/calibration/bounding-box', { async: true, inverse: 'snapshot' })\n declare boundingBoxes: AsyncHasMany;\n\n /**\n * When there are multiple bounding boxes detected for a snapshot, the user has to select which one they are using for the calibration.\n * This is the index of the one they have selected.\n */\n @attr('number')\n declare selectedBoundingBoxIndex: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/calibration/snapshot': Snapshot;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { set } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { Calibrated, SnapshotsRequired } from '../../../enums/CalibrationStatus';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type OvReadyCamera from '../devices/ov-ready-camera';\n\n/**\n * @classdesc\n * The current camera calibration status.\n */\nexport default class Status extends BaseModel {\n /**\n * The camera this status applies to.\n */\n @belongsTo('video/devices/ov-ready-camera', { async: true, inverse: 'calibrationStatus' })\n declare camera: AsyncBelongsTo;\n\n /**\n * The calibration status.\n */\n @attr('number', { defaultValue: Calibrated })\n declare value: number;\n\n /**\n * Resets the calibration status.\n */\n async reset(): Promise {\n // Technically, this is a read-only model. However, we use GET to reset the status so that the model will update.\n // Changing value to anything other than snapshots required will not do anything.\n set(this, 'value', SnapshotsRequired);\n try {\n await this.save();\n } catch {\n // catch can trigger if the user doesn't have permissions to save\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/calibration/status': Status;\n }\n}\n","import { hasMany, attr } from '@ember-data/model';\nimport { isDestroyed } from '@ember/destroyable';\nimport { computed } from '@ember/object';\nimport { Normal } from 'customer-site/enums/CameraGroupType';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type BaseCamera from './devices/base-camera';\nimport type Camera from './devices/camera';\n\nexport const OPERATOR_CAMERA_GROUP_ID = 'monitoring',\n OPERATOR_SVR_GROUP_ID = 'operator-svr',\n OPERATOR_SD_GROUP_ID = 'operator-sd',\n ESCALATED_EVENTS_CAMERA_GROUP_ID = 'escalated-events',\n LOCATION_GROUP_PREFIX = 'loc-';\n\n/**\n * Updates the cameraOrder value based on the order of cameras in the cameraGroup.\n */\nexport function updateCameraOrderFromCameras(cameraGroup: CameraGroup): void {\n // TODO: Please refactor this into a task and remove the isDestroyed usage\n if (isDestroyed(cameraGroup)) {\n return;\n }\n\n cameraGroup.set(\n 'cameraOrder',\n cameraGroup.cameras.reduce(\n (cameraOrder, { id }, idx) => ({\n ...cameraOrder,\n [id]: idx\n }),\n {}\n )\n );\n}\n\n/**\n * Peeks the camera group for a given id, or creates a new one if it doesn't exist with the given name and order.\n * Then sets the camera group's cameras.\n * This is useful for creating custom camera groups for certain routes (i.e. Remote Video Monitoring events).\n *\n * @param store\n * @param id The camera group's id.\n * @param cameras The selected cameras within the camera group.\n * @param name If a new camera group is created, it will have this name.\n * @param order If a new camera group is created, it will have this order.\n * @param icon The icon to be displayed alongside a camera group.\n */\nexport function createOrUpdateCameraGroupWithCameras(\n store: Store,\n id: string,\n cameras: Camera[],\n name: string,\n order: number,\n icon: string\n): CameraGroup {\n let cameraGroup = store.peekRecord('video/camera-group', id);\n\n if (cameraGroup == null) {\n cameraGroup = store.createRecord('video/camera-group', {\n id,\n cameras,\n name,\n order,\n icon,\n groupType: Normal\n });\n }\n\n updateCameraOrderFromCameras(cameraGroup);\n return cameraGroup;\n}\n\n/**\n * @classdesc\n * Camera group model.\n */\nexport default class CameraGroup extends BaseModel {\n /**\n * The name of the camera group.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The order of the camera group within the other camera groups for the unit or system group.\n */\n @attr('number')\n declare order: number;\n\n /**\n * A dictionary of global device ids to position so the frontend has an explicit list for ordering cameras.\n */\n @attr()\n declare cameraOrder: Record;\n\n /**\n * The cameras linked to this camera group.\n */\n @hasMany('video/devices/base-camera', { async: true, polymorphic: true, inverse: 'cameraGroups' })\n declare cameras: AsyncHasMany;\n\n /**\n * The icon to be displayed alongside a camera group.\n */\n @attr('string')\n declare icon: string;\n\n /**\n * An enum representing the camera group type\n */\n @attr('number')\n declare groupType: number;\n\n /**\n * A list of Camera models explicitly sorted using the order from cameraOrder.\n *\n * @note We use this because we can't guarantee Ember will keep 'cameras' sorted since that attribute is a relationship, not a list.\n * @note If you use cameras instead of this property, your list may be ordered incorrectly when loading camera groups and cameras for the first time.\n */\n @computed('cameraOrder', 'cameras', 'cameras.[]')\n get orderedCameras(): Promise {\n const { cameras, cameraOrder } = this,\n sortByOrder = function (a: Camera, b: Camera) {\n return cameraOrder[a.id] - cameraOrder[b.id];\n };\n\n return (cameras as unknown as Promise).then((cams) => cams.slice().sort(sortByOrder));\n }\n\n /**\n * Does the group only contain mobile exclusive cameras?\n */\n @computed('cameras', 'cameras.[]')\n get isLiveViewMobileExclusive(): Promise | boolean {\n return Promise.resolve(this.cameras).then((cams) => cams.isEvery('supportsLiveView', false));\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/camera-group': CameraGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { ManuallyTriggeredLightsDuration } from 'customer-site/enums/ManuallyTriggeredLightsDuration';\n\n/**\n * Configurations for the camera light settings.\n */\nexport default class CameraLightSetting extends BaseModel {\n /**\n * Does the camera support floodlights?\n */\n @attr('boolean')\n declare supportsFloodlight: boolean;\n\n /**\n * Camera light brightness.\n */\n @attr('number', { defaultValue: 0 })\n declare lightBrightness: number;\n\n /**\n * Is color night vision enabled?\n */\n @attr('boolean')\n declare isColorNightVisionEnabled: boolean;\n\n /**\n * Duration (in seconds) the lights will stay on after triggered manually via live view.\n */\n @attr('number')\n declare manualLightDurationSeconds: ManuallyTriggeredLightsDuration;\n\n /**\n * The options for the duration (in seconds) that the light will stay on when manually activated\n */\n @attr()\n declare manualLightDurationSecondsOptions: ManuallyTriggeredLightsDuration[];\n\n /**\n * Does this camera and account support manual alarm light control?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsManualAlarmLightControl: boolean;\n\n /**\n * Is alarm light enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isManualAlarmLightEnabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/camera-light-setting': CameraLightSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for the camera link.\n */\nexport default class CameraLinkInfo extends BaseModel {\n /**\n * Indicates if a camera can support cameraLink.\n */\n @attr('boolean')\n declare supportsCameraLink: boolean;\n\n /**\n * Whether a camera can support cameraLink.\n */\n @attr('string', { defaultValue: '' })\n declare cameraLinkUrl: string;\n\n /**\n * Indicates if a processing error has occurred (from OnvifSettingErrorEnum).\n */\n @attr('number')\n cameraLinkError: number | undefined;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/camera-link-info': CameraLinkInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for the camera password.\n */\nexport default class CameraPassword extends BaseModel {\n /**\n * The camera's password.\n */\n @attr('string', { defaultValue: '' })\n declare value: string;\n\n /**\n * Indicates if a processing error has occurred (from OnvifSettingErrorEnum).\n */\n @attr('number')\n declare error: number | null;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/camera-password': CameraPassword;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { TwoSeconds } from 'customer-site/enums/FloodPirDurationOption';\nimport { Bright } from 'customer-site/enums/LuxTrigger';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { FloodPirDuration } from 'customer-site/enums/FloodPirDurationOption';\nimport type { ManuallyTriggeredLightsDuration } from 'customer-site/enums/ManuallyTriggeredLightsDuration';\n\n/**\n * Configurations for the camera PIR settings.\n */\nexport default class CameraPirSetting extends BaseModel {\n /**\n * Whether or not the PIR motion activation is enabled.\n */\n @attr('boolean', { defaultValue: true })\n declare pirMotionEnabled: boolean;\n\n /**\n * Whether or not the left motion detection zone is enabled.\n */\n @attr('boolean', { defaultValue: true })\n declare pirLeftEnabled: boolean;\n\n /**\n * Whether or not the center motion detection zone is enabled.\n */\n @attr('boolean', { defaultValue: true })\n declare pirCenterEnabled: boolean;\n\n /**\n * Whether or not the right motion detection zone is enabled.\n */\n @attr('boolean', { defaultValue: true })\n declare pirRightEnabled: boolean;\n\n /**\n * Duration the floodlight will stay on after the motion detection trigger.\n */\n @attr('number', { defaultValue: TwoSeconds })\n declare pirFloodlightDuration: FloodPirDuration;\n\n /**\n * How dark it needs to be for PIR to be triggered.\n */\n @attr('number', { defaultValue: Bright })\n declare luxTriggerSetting: number;\n\n /**\n * PIR sensitivity.\n */\n @attr('number', { defaultValue: 0 })\n declare pirSensitivity: number;\n\n /**\n * Floodlight brightness.\n */\n @attr('number', { defaultValue: 0 })\n declare floodlightBrightness: number;\n\n /**\n * The PIR sensing range.\n */\n @attr('number', { defaultValue: 0 })\n declare pirRange: number;\n\n /**\n * Is color night vision enabled?\n */\n @attr('boolean')\n declare isColorNightVisionEnabled: boolean;\n\n /**\n * Duration (in seconds) the lights will stay on after triggered manually via live view.\n */\n @attr('number')\n declare manualLightDurationSeconds: ManuallyTriggeredLightsDuration;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/camera-pir-setting': CameraPirSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { Activated } from 'customer-site/enums/CameraSirenStatus';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Camera Siren state model.\n */\nexport default class CameraSiren extends BaseModel {\n /**\n * Siren processing error, if one has occurred\n */\n @attr('number')\n declare error: number;\n\n /**\n * Error message for a processing error, if one has occurred\n */\n @attr('string')\n declare errorMessage: string;\n\n /**\n * Time that the siren is expected to stop being active\n */\n @attr('date')\n declare timestampEndUtc?: Date;\n\n /**\n * Siren state enum (CameraSirenStatus.js)\n */\n @attr('number')\n declare status: number;\n\n /**\n * Is the siren being changed for two-way audio?\n */\n @attr('boolean', { defaultValue: false })\n declare isTwoWayAudio: boolean;\n\n /**\n * Is this action already in progress due to a previous request?\n */\n @attr('boolean', { defaultValue: false })\n declare isAlreadyRequested: boolean;\n\n /**\n * Is this siren currently active?\n */\n get isActive(): boolean {\n return (\n this.status === Activated &&\n this.timestampEndUtc !== undefined &&\n new Date().getTime() < this.timestampEndUtc.getTime()\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/camera-siren': CameraSiren;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Clip donation properties.\n */\nexport default class ClipDonationAgreement extends BaseModel {\n /**\n * The full VA legal agreement text.\n */\n @attr('string', { defaultValue: '' })\n declare legalAgreement: string;\n\n /**\n * The most recent version of the clip donation agreement.\n */\n @attr('number')\n declare newestAgreementVersion: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/clip-donation-agreement': ClipDonationAgreement;\n }\n}\n","import { belongsTo, hasMany } from '@ember-data/model';\nimport { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { Other } from 'customer-site/enums/SavedClipFilterOption';\nimport BaseCamera from './base-camera';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type BaseAnalyticsRule from '../base-analytics-rule';\nimport type AnalyticsVideoSource from '../video-sources/analytics-video-source';\n\n/**\n * @classdesc\n * Base Analytics camera device model.\n */\nexport default abstract class BaseAnalyticsCamera extends BaseCamera {\n /**\n * Is this camera NOT prepped for adding a rule?\n */\n abstract cannotSetupRule(isBusinessActivityAnalytics: boolean): boolean;\n\n /**\n * The OvRules currently on this camera.\n */\n @hasMany('video/base-analytics-rule', { async: true, inverse: null })\n declare abstract ovRules: AsyncHasMany;\n\n @attr('array')\n declare supportedRuleTypes: number[];\n\n /**\n * Does this camera support Stories?\n */\n @attr('boolean')\n declare supportsStories: boolean;\n\n /**\n * Video source content for analytics rule editing.\n */\n @belongsTo('video/video-sources/analytics-video-source', { async: true, inverse: 'camera' })\n declare videoSource: AsyncBelongsTo;\n\n /**\n * By default, the filter types to enable are all the supported ones except 'Other'.\n */\n @computed('supportedNotificationFilterTypes')\n get defaultNotificationFilterTypes(): number[] {\n return this.supportedNotificationFilterTypes.filter((filterType) => filterType !== Other);\n }\n\n /**\n * Which notification filter types does this camera support?\n */\n @attr('array')\n declare abstract supportedNotificationFilterTypes: number[];\n\n /**\n * Can this camera toggle clip uploads off for a rule?\n */\n @attr('boolean')\n declare canDisableClipUploads: boolean;\n\n /**\n * Can the user create an Remote Video Monitoring rule on this camera?\n */\n @attr('boolean', { defaultValue: false })\n declare canCreateEscalatedEventRule: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'models/video/devices/base-analytics-camera': BaseAnalyticsCamera;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type Camera from '../devices/camera';\nimport type SdCardCamera from '../devices/sd-card-camera';\nimport type Svr from '../devices/svr';\n\n/**\n * Base Camera Collection, contains models pertaining to different camera device models.\n */\nexport default class BaseCameraCollection extends BaseModel {\n /**\n * The Camera model.\n */\n @belongsTo('video/devices/camera', { async: false, inverse: null })\n declare camera?: Camera;\n\n /**\n * The Sd card camera model.\n */\n @belongsTo('video/devices/sd-card-camera', { async: false, inverse: null })\n declare sdCardCamera?: SdCardCamera;\n\n /**\n * The Svr device model.\n */\n @belongsTo('video/devices/svr', { async: false, inverse: null })\n declare svr?: Svr;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/base-camera-collection': BaseCameraCollection;\n }\n}\n","import { hasMany, belongsTo, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport DataUsageModeEnum from '@adc/video-player/enums/DataUsageModeEnum';\nimport BaseDevice from '../../devices/base-device';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type PrivacyZonesSetting from 'customer-site/models/video/privacy-zones-setting';\nimport type AudioSetting from 'customer-site/models/video/settings/audio-setting';\nimport type DeviceStatusInfo from 'customer-site/models/video/settings/device-status-info';\nimport type GeneralSetting from 'customer-site/models/video/settings/general-setting';\nimport type VideoConfig from 'customer-site/models/video/settings/video-config';\nimport type VideoSource from 'customer-site/models/video/video-sources/video-source';\nimport type CameraGroup from '../camera-group';\nimport type MotionConfigurationSetting from '../settings/motion-configuration-setting';\nimport type Snapshot from '../snapshot';\n\n/**\n * @classdesc\n * Base video camera device model.\n */\nexport default class BaseCamera extends BaseDevice {\n /**\n * Can we change the camera's name?\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeCameraName: boolean;\n\n @attr('boolean', { defaultValue: false })\n declare hasUpstreamAudioUrl: boolean;\n\n /**\n * Does the camera support VMD schedules?\n */\n @attr('boolean', { defaultValue: true })\n declare supportsVmdSchedules: boolean;\n\n /**\n * What level of data conserving methods should be enacted on this camera, if any?\n */\n @attr('number', { defaultValue: DataUsageModeEnum.None })\n declare dataUsageMode: DataUsageModeEnum;\n\n /**\n * Does this camera support digital fov?\n */\n @attr('boolean', { defaultValue: false })\n declare isDigitalFovCamera: boolean;\n\n /**\n * Does this camera support varifocal fov or focus?\n */\n @attr('boolean', { defaultValue: false })\n declare isVarifocalCamera: boolean;\n\n /**\n * The path to the device image.\n */\n @attr('string', { defaultValue: '' })\n declare deviceImagePath: string;\n\n /**\n * The device make.\n */\n @attr('string', { defaultValue: '' })\n declare deviceMake: string;\n\n /**\n * The device model name.\n */\n @attr('string', { defaultValue: '' })\n declare deviceModel: string;\n\n /**\n * The camera MAC address.\n */\n @attr('string', { defaultValue: '' })\n declare macAddress: string;\n\n /**\n * The camera firmware version.\n */\n @attr('string', { defaultValue: '' })\n declare firmwareVersion: string;\n\n /**\n * The cameras public IP address.\n */\n @attr('string', { defaultValue: '' })\n declare publicIp: string;\n\n /**\n * The cameras private IP address.\n */\n @attr('string', { defaultValue: '' })\n declare privateIp: string;\n\n /**\n * The cameras port address.\n */\n @attr('string', { defaultValue: '' })\n declare port: string;\n\n /**\n * The cameras secure port address.\n */\n @attr('string', { defaultValue: '' })\n declare httpsPort: string;\n\n /**\n * The last updated date for the camera.\n */\n @attr('date', { defaultValue: undefined })\n declare lastDdnsUpdateTime: Date;\n\n /*\n * Third party serial number of the device.\n */\n @attr('string', { defaultValue: '' })\n declare thirdPartySerialNumber: string;\n\n /**\n * The snapshot object related to this camera.\n */\n @belongsTo('video/snapshot', { async: true, inverse: null })\n declare snapshot: AsyncBelongsTo;\n\n /**\n * If the camera has DDNSed in the last hour and a half.\n */\n @attr('boolean', { defaultValue: false })\n declare hasDdnsed: boolean;\n\n /**\n * If this camera has an svr schedule to be recording to an svr.\n */\n @attr('boolean', { defaultValue: false })\n declare hasSvrSchedule: boolean;\n\n /*\n * Is the device firmware up to date?\n */\n @attr('boolean', { defaultValue: true })\n declare isFirmwareUpToDate: boolean;\n\n /*\n * Can the user upgrade the firmware?\n */\n @attr('boolean', { defaultValue: false })\n declare canUpgradeFirmware: boolean;\n\n // region Live View\n\n /**\n * Does the camera support live-video streaming?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsLiveView: boolean;\n\n /**\n * Is this camera displayable on the live view page (includes mobile app only cameras).\n */\n @attr('boolean', { defaultValue: false })\n declare isLiveViewDisplayable: boolean;\n\n /**\n * A forced streaming aspect ratio to use, if any. This value is the width divided by the height.\n *\n * @note Example: This is important for Hikvision cameras which use a skewed 4:3 substream for low-resolution streams instead of 16:9.\n */\n @attr('number')\n declare forcedAspectRatio: number;\n\n /**\n * Is two-way audio enabled on the camera?\n */\n @attr('boolean', { defaultValue: false })\n declare isTwoWayAudioEnabled: boolean;\n\n /**\n * Is audio enabled for video clips recorded by the camera?\n */\n @attr('boolean', { defaultValue: false })\n declare isRecordedAudioEnabled: boolean;\n\n // endregion\n\n /**\n * Should the camera use it's entire image when displaying a snapshot?\n *\n * @note Basically used inside the stateless image component\n */\n @attr('boolean', { defaultValue: false })\n declare shouldUseEntireImageForSnapshot: boolean;\n\n /**\n * Is this camera a virtual camera?\n */\n @attr('boolean', { defaultValue: false })\n declare isVirtualCamera: boolean;\n\n /**\n * Does this camera have an SD card recording schedule setup?\n */\n @attr('boolean', { defaultValue: false })\n declare hasSdRecordingSchedule: boolean;\n\n /**\n * Does the camera support advanced network setup and testing?\n */\n @attr('boolean')\n declare supportsAdvancedNetworkSetup: boolean;\n\n /**\n * Does the camera support signal strength info? SVRs do not.\n */\n @attr('boolean')\n declare supportsSignalStrengthInfo: boolean;\n\n /**\n * Does the camera support SD card recording?\n */\n @attr('boolean')\n declare supportsSdCardRecording: boolean;\n\n /**\n * Does the camera support two way audio?\n */\n @attr('boolean')\n declare supportsTwoWayAudio: boolean;\n\n /**\n * The mapping between the feature and the player that the feature should use.\n */\n @attr()\n declare usageProtocolMapping: Record;\n\n /**\n * Is the camera excluded from live-video streaming and gallery event view for visual verification?\n */\n @attr('boolean', { defaultValue: false })\n declare excludedFromVisualVerification: boolean;\n\n /**\n * Is the camera excluded from live-video streaming and gallery event view for Remote Video Monitoring Console events?\n */\n @attr('boolean', { defaultValue: false })\n declare excludedFromEscalatedEvents: boolean;\n\n /**\n * The camera groups this camera belongs to.\n */\n @hasMany('video/camera-group', { async: true, inverse: 'cameras' })\n declare cameraGroups: AsyncHasMany;\n\n /**\n * The privacy zone settings on the camera.\n */\n @belongsTo('video/privacy-zones-setting', { async: true, inverse: null })\n declare privacyZonesSetting: AsyncBelongsTo;\n\n /**\n * The motion configuration setting for the svr on the camera.\n */\n @belongsTo('video/settings/motion-configuration-setting', { async: true, inverse: null })\n declare motionConfigurationSetting: AsyncBelongsTo;\n\n /**\n * The audio settings of the camera.\n */\n @belongsTo('video/settings/audio-setting', { async: true, inverse: null })\n declare audioSetting: AsyncBelongsTo;\n\n /**\n * The device status of the camera.\n */\n @belongsTo('video/settings/device-status-info', { async: true, inverse: null })\n declare deviceStatusInfo: AsyncBelongsTo;\n\n /**\n * The general settings of the camera.\n */\n @belongsTo('video/settings/general-setting', { async: true, inverse: null })\n declare generalSetting: AsyncBelongsTo;\n\n /**\n * The video settings of the camera.\n */\n @belongsTo('video/settings/video-config', { async: true, inverse: null })\n declare videoConfig: AsyncBelongsTo;\n\n /**\n * Does this camera have firmware for two way audio?\n */\n @attr('boolean', { defaultValue: false })\n declare hasFirmwareForTwoWayAudio: boolean;\n\n /**\n * Is this a battery camera using a gateway to access the backend (VDB780B).\n */\n @attr('boolean', { defaultValue: false })\n declare usingGatewayForBackendAccess: boolean;\n\n /**\n * The dictionary that maps a StreamUsageEnum to the number of minutes between each scrubber thumbnail.\n */\n @attr()\n declare streamUsageToScrubberThumbnailsMapping: Record;\n\n /**\n * Does the camera allow mappings between the stream usage (Live, Clips, SD, SVR) and the camera stream ID to change dynamically?\n * Dynamic stream mapping allows us to have pre-defined stream settings (including resolution, frame rate, and bitrate)\n * and change which stream ID is used depending on which quality is desired for a given usage (Live, Clips, SD, SVR).\n * Streams that are not dynamically mapped use the same stream ID for a given usage,\n * and when a stream ID's settings are updated, it updates for all usages that use that particular stream ID.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsDynamicStreamMapping: boolean;\n\n /**\n * Boolean to keep track if we have most recently grabbed the regular or the hd video source.\n */\n hdSelected = true;\n\n /**\n * The currently-selected video source for live view.\n */\n @computed('videoSource', 'videoSourceHd', 'hdSelected')\n get currentVideoSource(): VideoSource {\n return get(this, `videoSource${this.hdSelected ? 'Hd' : ''}`) as VideoSource;\n }\n\n /**\n * Is the camera in Critical Data Mode and therefore should it's video features be restricted?\n */\n @computed('dataUsageMode')\n get inCriticalDataMode(): boolean {\n return this.dataUsageMode === DataUsageModeEnum.CriticalDataMode;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/base-camera': BaseCamera;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { On } from 'customer-site/enums/LightStatus';\nimport { None } from '../../../enums/DoorbellChimeType';\nimport BaseCamera from './base-camera';\n\nimport type BaseStateController from '@adc/video-player/classes/state-controllers/base-state-controller';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type BaseManagedDevice from 'customer-site/models/devices/base-managed-device';\nimport type CameraLight from 'customer-site/models/devices/camera-light';\nimport type System from 'customer-site/models/systems/system';\nimport type CameraLightSetting from 'customer-site/models/video/camera-light-setting';\nimport type CameraPassword from 'customer-site/models/video/camera-password';\nimport type CameraSiren from 'customer-site/models/video/camera-siren';\nimport type DewarpConfig from 'customer-site/models/video/dewarp-config';\nimport type DigitalPtzPosition from 'customer-site/models/video/digital-ptz-position';\nimport type IntervalsGroups from 'customer-site/models/video/intervals-group';\nimport type SignalStrengthInfo from 'customer-site/models/video/signal-strength-info';\nimport type StreamVideoToPanelInfo from 'customer-site/models/video/stream-video-to-panel-info';\nimport type LiveVideoHighestResSource from 'customer-site/models/video/video-sources/live-video-highest-res-source';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type { PanTiltPreset } from 'customer-site/transforms/pan-tilt-preset-list';\nimport type SvrThumbnailEndpoint from '../svr-thumbnail-endpoint';\nimport type LiveVideoSource from '../video-sources/live-video-source';\nimport type SvrVideoSource from '../video-sources/svr-video-source';\n\n/**\n * The payload for how the data looks when we get svr motion intervals.\n */\ntype SvrMotionIntervalData = {\n data: {\n attributes: {\n startTime: string;\n endTime: string;\n toggledBy: number;\n type: number;\n };\n }[];\n};\n\n//#region SVR Recording\n\n/**\n * Sends a request to retrieve an object holding the svr streaming information for a specific svr and channel.\n */\nexport function getSVRStreamingParameters(\n ajax: AjaxService,\n deviceId: string,\n startTime: Date,\n speed: number,\n useHd: boolean,\n multipleStreams: boolean\n): AsyncModelPayload {\n return ajax.apiRequest>(\n `video/videoSources/svrVideoSources/${deviceId}?useHd=${useHd}&startTime=${startTime.toISOString()}&speed=${speed}&multipleStreams=${multipleStreams}`\n );\n}\n\n/**\n * Retrieves the download URL which can be used to download an svr clip.\n */\nexport function getSvrClipDownloadUrl(\n ajax: AjaxService,\n deviceId: string,\n startTime: Date,\n durationSeconds: number,\n isDownscaledVideo: boolean,\n includeAudio: boolean,\n appendAdditionalTimestamp: boolean\n): Promise<{ value: string }> {\n return ajax.apiRequest<{ value: string }>(\n `video/devices/svrs/clips/${deviceId}/getClipDownloadUrl?startTime=${startTime.toISOString()}&durationSeconds=${durationSeconds}&isDownscaledVideo=${isDownscaledVideo}&includeAudio=${includeAudio}&appendAdditionalTimestamp=${appendAdditionalTimestamp}`\n );\n}\n\n/**\n * Sends a request to retrieve an object holding the svr intervals information for a specific camera.\n */\nexport function getSVRIntervals(ajax: AjaxService, svrId: string, channel: string): AsyncModelPayload {\n return ajax.apiRequest>(\n `video/videoSources/svrVideoSources/intervals/${svrId}?channel=${channel}`\n );\n}\n\n/**\n * Retrieves the motion intervals for the selected time period and device.\n * Note: deviceId is the globalDeviceId. the start and end datetimes are the localized times (the backend converts them to utc)\n */\nexport function getSVRMotionIntervals(\n ajax: AjaxService,\n deviceId: string,\n startDateTime: Date,\n endDateTime: Date\n): Promise {\n return ajax.apiRequest(\n `video/videoSources/svrVideoSources/getMotionIntervals?cameraGlobalDeviceId=${deviceId}&localStartDateTime=${startDateTime.toISOString()}&localEndDateTime=${endDateTime.toISOString()}`\n );\n}\n\n/**\n * Uploads video clip from SVR to the cloud for the selected time period and device.\n * Note: deviceId is the globalDeviceId.\n */\nexport function uploadSvrVideoClip(\n ajax: AjaxService,\n deviceId: string,\n startTime: Date,\n durationSeconds: number,\n isDownscaledVideo: boolean,\n appendAdditionalTimestamp: boolean,\n includeAudio: boolean\n): Promise<{ metaData: { UploadClipStatus: boolean } }> {\n return ajax.apiRequest(\n `video/devices/svrs/clips/${deviceId}/uploadVideoClip?startTime=${startTime.toISOString()}&durationSeconds=${durationSeconds}&isDownscaledVideo=${isDownscaledVideo}&appendAdditionalTimestamp=${appendAdditionalTimestamp}&includeAudio=${includeAudio}`\n );\n}\n//#endregion SVR Recording\n\n//#region SD Card Recording\n\n/**\n * Sends a request to retrieve an object holding the SD card streaming information for a specific camera based on the global device id.\n */\nexport function getSDCardStreamingParameters(ajax: AjaxService, deviceId: string): Promise> {\n return ajax.apiRequest(`video/videoSources/sdCardVideoSources/${deviceId}`);\n}\n\n//#endregion SD Card Recording\n\n/**\n * @classdesc\n * Video camera device model.\n */\nexport default class Camera extends BaseCamera {\n @service declare ajax: AjaxService;\n\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'cameras' })\n declare system: AsyncBelongsTo;\n\n /**\n * Last successful supervision for this camera\n */\n @attr('date')\n declare lastSuccessfulSupervision: Date;\n\n /**\n * Last operator viewed live view time for this camera\n */\n @attr('date')\n declare lastOperatorViewedTime: Date;\n\n /**\n * Whether or not the camera is online\n */\n @attr('boolean', { defaultValue: false })\n declare isUnreachable: boolean;\n\n /**\n * Does the camera support snap shot streaming?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSnapShot: boolean;\n\n @attr('boolean', { defaultValue: false })\n declare svrSupportsDeepMotionDetection: boolean;\n\n /**\n * What CPU architecture (Intel or Arm) is the associated Apex SVR running on?\n */\n @attr('number')\n declare apexSvrCpuArchitecture: number;\n\n /**\n * The camera is selectable in dropdowns when relevant in video-streaming-toolbar\n */\n selectableInDropdown = true;\n\n /**\n * The parameters for dewarping fisheye streams.\n */\n @belongsTo('video/dewarp-config', { async: true, inverse: null })\n declare dewarpConfig: AsyncBelongsTo;\n\n //#region Video Source Models\n\n /**\n * Video source content for live view.\n */\n @belongsTo('video/video-sources/live-video-source', { async: true, inverse: null })\n declare videoSource: AsyncBelongsTo;\n\n /**\n * HD Video Source content for live view.\n */\n @belongsTo('video/video-sources/live-video-highest-res-source', { async: true, inverse: null })\n declare videoSourceHd: AsyncBelongsTo;\n\n /**\n * The global device id of the IOnvifParentDevice\n */\n @attr('string')\n onvifParentId?: string;\n\n /**\n * Does this camera support floodlights or spotlights?\n * */\n @attr('boolean', { defaultValue: false })\n declare supportsLight: boolean;\n\n /**\n * Whether we turn the spotlight off when the live view session ends\n */\n @attr('boolean', { defaultValue: false })\n declare shouldLightTurnOffWithLiveViewEnd: boolean;\n\n /**\n * The video source for streaming recorded footage from the SVR (if hasSvrSchedule is true).\n */\n @belongsTo('video/video-sources/svr-video-source', { async: true, inverse: 'camera' })\n declare svrVideoSource: AsyncBelongsTo;\n\n /**\n * The recorded video source for the camera.\n */\n @alias('svrVideoSource')\n declare recordedVideoSource: AsyncBelongsTo;\n\n /**\n * Scrubber thumbnail URL endpoint.\n */\n @belongsTo('video/svr-thumbnail-endpoint', { async: true, inverse: null })\n declare svrScrubberThumbnailEndpoint: AsyncBelongsTo;\n\n /**\n * Scrubber thumbnail URL endpoint.\n */\n @alias('svrScrubberThumbnailEndpoint')\n declare thumbnailEndpoint: AsyncBelongsTo;\n\n /**\n * Camera Floodlight settings.\n */\n @belongsTo('video/camera-light-setting', { async: true, inverse: null })\n declare cameraLightSetting: AsyncBelongsTo;\n\n /**\n * Alias for the proxy streaming url.\n */\n @computed('currentVideoSource', 'hdSelected', 'videoSource.proxyUrl', 'videoSourceHd.proxyUrl')\n get proxyUrl(): string {\n return this.currentVideoSource.get('proxyUrl');\n }\n\n //#endregion Video Source Models\n\n //#region Streaming\n\n /**\n * Whether this camera uses the HD toggle on the ember live view page.\n * We choose to hide this button in certain situations depending on whether this camera displays\n * a noticeable difference when switching between HD and non-HD streaming.\n */\n @attr('boolean', { defaultValue: true })\n declare liveViewHdToggleEnabled: boolean;\n\n /**\n * Does this camera support WebRTC end-to-end streaming?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsEndToEndWebRTCStreaming: boolean;\n\n /**\n * Does this camera support stream preloading?\n */\n @attr('boolean', { defaultValue: true })\n declare supportsStreamPreloading: boolean;\n\n /**\n * Does this camera support 4MP streaming?\n */\n @attr('boolean', { defaultValue: false })\n declare supports4MPStreaming: boolean;\n\n //#endregion Streaming\n\n //#region Warning Sounds\n\n /**\n * Does this camera support playing a siren with its speaker/LED?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSiren: boolean;\n\n /**\n * Can this camera start a siren with its speaker/LED in the current user context?\n */\n @attr('boolean', { defaultValue: false })\n declare canSirenBeActivatedByLogin: boolean;\n\n /**\n * Is the warning sound or lights enabled in settings for this camera?\n */\n @attr('boolean', { defaultValue: false })\n declare isWarningReactionEnabled: boolean;\n\n /**\n * Is the siren for this camera currently playing?\n */\n @attr('boolean', { defaultValue: false })\n declare isSirenPlaying: boolean;\n\n /**\n * Camera Siren (Warning Sound).\n */\n @belongsTo('video/camera-siren', { async: true, inverse: null })\n declare cameraSiren: AsyncBelongsTo;\n\n //#endregion Warning Sounds\n\n /**\n * The signal strength of the camera.\n */\n @belongsTo('video/signal-strength-info', { async: true, inverse: null })\n declare signalStrengthInfo: AsyncBelongsTo;\n\n /**\n * Will the camera use a custom web OSD overlay on our site?\n */\n @attr('boolean', { defaultValue: false })\n declare osdOverlayEnabled: boolean;\n\n /**\n * The digital ptz position settings to the camera.\n */\n @belongsTo('video/digital-ptz-position', { async: true, inverse: null })\n declare digitalPtzPosition: AsyncBelongsTo;\n\n /**\n * Does this camera have a clip age limit?\n */\n @attr('boolean', { defaultValue: false })\n declare hasClipAgeLimit: boolean;\n\n //#region Pan Tilt\n\n /**\n * Is this camera capable of pan tilt movements?\n */\n @attr('boolean', { defaultValue: false })\n declare canPanTilt: boolean;\n\n /**\n * The maximum panTilt levels (x/y) that the camera is capable of.\n */\n @attr('number', { defaultValue: 0 })\n declare maxPanTiltLevel: number;\n\n /**\n * Is this camera capable of zooming in?\n */\n @attr('boolean', { defaultValue: false })\n declare canZoom: boolean;\n\n /**\n * The maximum zoom levels that the camera is capable of.\n */\n @attr('number', { defaultValue: 0 })\n declare maxZoomLevel: number;\n\n /**\n * The minimum zoom level that the device is capable of panning or tilting at (assuming it can do pans/tilts)\n */\n @attr('number', { defaultValue: 0 })\n declare minZoomLevelForPanTilt: number;\n\n /**\n * A list of all pan tilt presets for this camera.\n */\n @attr('pan-tilt-preset-list')\n declare panTiltPresets: PanTiltPreset[];\n\n /**\n * The id for the preferred pan tilt preset.\n */\n @attr('string', { defaultValue: '' })\n declare preferredPanTiltPreset: string;\n\n //#endregion Pan Tilt\n\n //#region Stream to Panel\n\n /**\n * Information about streaming video to panel.\n */\n @belongsTo('video/stream-video-to-panel-info', { async: true, inverse: null })\n declare streamVideoToPanelInfo: AsyncBelongsTo;\n\n /**\n * This stores the permission that dictates whether they can take a snapshot during live video\n */\n @attr('boolean', { defaultValue: false })\n declare canTakeSnapshot: boolean;\n\n /**\n * This stores the permission that dictates whether a user is allowed to request a recording\n */\n @attr('boolean', { defaultValue: false })\n declare canRequestRecording: boolean;\n\n /**\n * Should the troubleshooting wizard be hidden for this camera\n */\n @attr('boolean', { defaultValue: false })\n declare shouldHideTroubleshootingWizard: boolean;\n\n /**\n * The IDs of the Primary Associated devices associated with the camera\n */\n @attr('array')\n declare primaryAssociatedDeviceIds: number[];\n\n /**\n * This denotes if the device is capable of requesting a recording\n */\n @attr('boolean', { defaultValue: false })\n declare supportsRecording: boolean;\n\n /**\n * Can the camera upload video clips?\n */\n @attr('boolean', { defaultValue: true })\n declare canUploadClips: boolean;\n\n /**\n * Maximum camera clip on SVR timeline download duration in seconds.\n */\n @attr('number', { defaultValue: 0 })\n declare maxSvrClipDownloadDurationSec: number;\n\n /**\n * Maximum camera clip on SVR timeline upload duration in seconds.\n */\n @attr('number', { defaultValue: 0 })\n declare maxSvrClipUploadDurationSec: number;\n\n /**\n * The camera's username.\n */\n @attr('string', { defaultValue: '' })\n declare username: string;\n\n /**\n * The camera's password.\n */\n @belongsTo('video/camera-password', { async: true, inverse: null })\n declare password: AsyncBelongsTo;\n\n /**\n * Is this an Onvif camera?\n */\n @attr('boolean', { defaultValue: false })\n declare isOnvifCamera: boolean;\n\n /**\n * Does this (ONVIF) camera support fisheye?\n */\n @attr('boolean', { defaultValue: false })\n declare fisheyeEnabled: boolean;\n\n /**\n * Does this (ONVIF) camera support PTZ?\n */\n @attr('boolean', { defaultValue: false })\n declare has3PCPTZSupport: boolean;\n\n /**\n * Does this camera have 3PC PTZ Pan-Tilt enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare has3PCPanTilt: boolean;\n\n /**\n * Does this camera have 3PC PTZ Zoom enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare has3PCZoom: boolean;\n\n /**\n * Does the camera have a microphone? Only applicable to Onvif Cameras\n */\n @attr('boolean', { defaultValue: false })\n declare hasMicrophone: boolean;\n\n /**\n * Does the camera have a speaker? Only applicable to Onvif Cameras\n */\n @attr('boolean', { defaultValue: false })\n declare hasSpeaker: boolean;\n\n /**\n * Does this camera's svr support two way audio talkdown?\n * Only applicable to onvif cameras.\n */\n @attr('boolean', { defaultValue: false })\n declare svrSupportsTwoWayAudioTalkdown: boolean;\n\n //#endregion Stream to Panel\n\n //#region doorbell\n\n /**\n * Is the camera a doorbell?\n */\n @attr('boolean', { defaultValue: false })\n declare isDoorbellCamera: boolean;\n\n /**\n * This stores what chime is set in the database for the camera.\n */\n @attr('number', { defaultValue: None })\n declare doorbellChimeType: number;\n\n /**\n * Retrieves the supported doorbell wedge from the backend.\n */\n @attr()\n declare supportedDoorbellWedgeOptions: number[];\n\n /**\n * This stores what chime is set in Database for the camera. Default 0 (None).\n */\n @attr('number', { defaultValue: 0 })\n declare doorbellWedgeType: number;\n\n /**\n * Does the camera only support Yes and No options for Wedge Select\n * Currently only fusion camera supports this functionality but could change in the future.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsWedgeYesNo: boolean;\n\n /**\n * Does camera support Wedge GIF ?\n */\n @attr('boolean')\n declare supportsWedgeGIF: boolean;\n\n /**\n * Does the camera support downloading SVR thumbnails?\n */\n @attr('boolean')\n declare svrSupportsDownloadingThumbnails: boolean;\n\n /**\n * Does this camera support thumbnail search?\n */\n @alias('svrSupportsDownloadingThumbnails')\n declare supportsThumbnailSearch: boolean;\n\n /**\n * Is this camera associated with an SVR that supports WebRTC streaming?\n */\n @attr('boolean')\n declare svrSupportsWebRtc: boolean;\n\n /**\n * Camera Light model associated with the camera's light.\n */\n @belongsTo('devices/camera-light', { async: true, inverse: null })\n declare cameraLight: AsyncBelongsTo;\n\n //#endregion doorbell\n\n //#region VIDEO-STREAMING-FEATURES\n\n /**\n * If this camera is currently in a gap (on playback pages)\n * THIS IS ONLY USED IN VIDEO-STREAMING-FEATURES AND WILL BE UNDEFINED BY DEFAULT ON OTHER PAGES\n */\n isInGap?: boolean;\n\n /**\n * The global device id of the camera.\n * THIS IS ONLY USED IN VIDEO-STREAMING-FEATURES AND WILL BE UNDEFINED BY DEFAULT ON OTHER PAGES. USE ID INSTEAD\n * todo remove in VID-57311\n */\n globalDeviceId?: string;\n\n /**\n * If the stream for the camera is timed out\n * THIS IS ONLY USED IN VIDEO-STREAMING-FEATURES AND WILL BE UNDEFINED BY DEFAULT ON OTHER PAGES\n */\n hasStreamTimedOut?: boolean;\n\n /**\n * If the device is currently playing\n * THIS IS ONLY USED IN VIDEO-STREAMING-FEATURES AND WILL BE UNDEFINED BY DEFAULT ON OTHER PAGES\n */\n isPlaying?: boolean;\n\n /**\n * An object for controlling the current video playback state or sending other non-playback commands.\n */\n playbackStateController?: BaseStateController;\n\n /**\n * The current state of the player ie INITIALIZING_STATE, PLAYING_STATE, DISCONNECTED_STATE, etc (defined in base-video-player)\n * THIS IS ONLY USED IN VIDEO-STREAMING-FEATURES AND WILL BE UNDEFINED BY DEFAULT ON OTHER PAGES\n */\n playerState?: number;\n\n /**\n * If we need to show the clip export modal on the overlay.\n */\n forceShowOverlayForExport?: boolean;\n\n //#endregion VIDEO-STREAMING-FEATURES\n\n //#region ASSOCIATED DEVICES\n\n /**\n * If the device has any associated devices.\n * Currently only returns true if the device has associated Access Control and Z-wave locks to meet spec for VID-62641\n */\n @attr('boolean')\n hasAssociatedDevices?: boolean;\n\n /**\n * The IDs of the Intercom Associated devices associated with the camera.\n */\n @attr('array')\n declare intercomAssociatedDeviceIds: number[];\n\n /**\n * List of associated devices, used to cache results and prevent rehitting backend\n */\n private associatedDevicesCache?: Promise;\n\n /**\n * Gets list of Associated Devices Models from backend or from associatedDevicesHolder\n * Currently only stores Access Control and Z-Wave lock models to meet spec for VID-62641\n */\n get associatedDevices(): Promise {\n if (!this.associatedDevicesCache) {\n this.associatedDevicesCache = (async () => {\n return await this.getDevicesAssociatedWithCamera();\n })();\n }\n return this.associatedDevicesCache;\n }\n\n /**\n * Clears the associated devices cache\n */\n resetAssociatedDevicesCache(): void {\n this.associatedDevicesCache = undefined;\n }\n\n /**\n * Requests the models for all of the devices associated with a given global camera id.\n */\n async getDevicesAssociatedWithCamera(): Promise {\n return await this.ajax.apiRequestForDataRecords(\n `video/devices/cameras/${this.id}/getDevicesAssociatedWithCamera`\n );\n }\n\n /**\n * Turns off camera lights for cameras that are no longer actively streaming and have shouldLightTurnOffWithLiveViewEnd set to true\n */\n async turnOffInactiveCameraLights() {\n if (this?.shouldLightTurnOffWithLiveViewEnd && this.cameraLight?.get('state') === On) {\n this.ajax.apiRequest(`devices/cameraLights/${this.id}/toggleLight`, undefined, null, 'POST');\n }\n }\n\n //#endregion ASSOCIATED DEVICES\n\n /**\n * Does this camera implement IIntercomDevice?\n */\n @attr('boolean', { defaultValue: false })\n declare isIntercomDevice: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/camera': Camera;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseCamera from './base-camera';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type LiveVideoHighestResSource from '../video-sources/live-video-highest-res-source';\nimport type LiveVideoSource from '../video-sources/live-video-source';\n\n/**\n * Digital Fov camera device model.\n */\nexport default class DigitalFovCamera extends BaseCamera {\n /**\n * Video source content for Digital Fov playback.\n */\n @belongsTo('video/video-sources/live-video-source', { async: true, inverse: null })\n declare videoSource: AsyncBelongsTo;\n\n /**\n * HD video source content for Digital fov playback\n */\n @belongsTo('video/video-sources/live-video-highest-res-source', { async: true, inverse: null })\n declare videoSourceHd: AsyncBelongsTo;\n\n /**\n * The field of view of the camera\n */\n @attr('number', { defaultValue: -1 })\n declare fieldOfView: number;\n\n /**\n * What field of view options does the camera support?\n */\n @attr('array', { defaultValue: () => [] })\n declare supportedFieldOfViews: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/digital-fov-camera': DigitalFovCamera;\n }\n}\n","import { hasMany, belongsTo, attr } from '@ember-data/model';\nimport { computed, get } from '@ember/object';\nimport { equal, notEmpty, or, reads } from '@ember/object/computed';\nimport {\n GroundZone,\n Heatmap,\n LineCount,\n BusinessOccupancy,\n CrowdGathering,\n LineMonitor,\n Tripwire\n} from '../../../enums/OvlRuleType';\nimport { Person, Animal, Vehicle, Other } from '../../../enums/SavedClipFilterOption';\nimport BaseAnalyticsCamera from './base-analytics-camera';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type FamiliarSubjectCameraContext from 'customer-site/models/video/familiar-targets/familiar-subject-camera-context';\nimport type Snapshot from '../calibration/snapshot';\nimport type Status from '../calibration/status';\nimport type OvRule from '../ov-rule';\n\nconst V622_MODEL = 'ADC-V622-WELL';\n\n/**\n * This variable is only used to help pass the unit tests. Please use this.maxNumberOfOvRules for actual logic.\n *\n * @note Currently this is true for all cameras except ADC-VDB770 (which only supports 1 OVReady rule).\n */\nexport const DEFAULT_MAX_NUMBER_OF_RULES = 3;\n\n/**\n * The list of Business Activity Analytics rule types.\n */\nexport const BUSINESS_ACTIVITY_ANALYTICS_RULE_TYPES = [\n BusinessOccupancy,\n CrowdGathering,\n Heatmap,\n LineMonitor,\n LineCount\n];\n\n/**\n * Get a fresh copy of the default supported rule types array.\n */\nfunction getDefaultSupportedRuleTypes(): number[] {\n return [GroundZone, Tripwire];\n}\n\n/**\n * Get a fresh copy of the default supported filter types array.\n */\nfunction getDefaultSupportedFilterTypes(): number[] {\n return [Person, Animal, Vehicle];\n}\n\n/**\n * @classdesc\n * OV Ready camera device model.\n */\nexport default class OvReadyCamera extends BaseAnalyticsCamera {\n /**\n * Does this camera already have an ovready package installed?\n * If false, it is still ovready-capable but will need a package installed to have analytics rules saved.\n */\n @attr('boolean', { defaultValue: false })\n declare hasOvReadyPackageInstalled: boolean;\n\n /**\n * Does this camera require a firmware update to run OV ready?\n * If true, we must update the firmware and install OV post firmware update.\n */\n @attr('boolean', { defaultValue: false })\n declare requiresFirmwareUpdate: boolean;\n\n /**\n * Does this camera require an OV Ready package update to access Business Activity Analytics?\n * If true, we must update the OV Ready package.\n */\n @attr('boolean', { defaultValue: false })\n declare requiresOvReadyPackageUpdateForBaa: boolean;\n\n /**\n * Does this camera require an OV Ready package update to access Business Activity Analytics Rule Groups?\n * If true, we must update the OV Ready package.\n *\n * @type {boolean}\n */\n @attr('boolean', { defaultValue: false })\n declare requiresOvReadyPackageUpdateForBaaGroups: boolean;\n\n /**\n * If this firmware requires an update, this property will be used to get the name of the camera's latest firmware.\n */\n @attr('string', { defaultValue: '' })\n declare latestFirmwareVersion: string;\n\n /**\n * The OvRules currently on this camera.\n */\n @hasMany('video/ov-rule', { async: true, inverse: null })\n declare ovRules: AsyncHasMany;\n\n /**\n * Number of OV rules saved in the system.\n */\n @computed('ovRules.{[],@each.isNew}')\n get numberOfSavedRules(): number {\n return this.ovRules.filter((rule) => !get(rule, 'isNew' as keyof OvRule)).length;\n }\n\n /**\n * Does this camera have the max number of rules?\n * This only considers at rules officially saved to the backend and the camera.\n */\n @computed('numberOfSavedRules', 'maxNumberOfOvRules')\n get hasMaxRules(): boolean {\n return this.numberOfSavedRules >= this.maxNumberOfOvRules;\n }\n\n /**\n * Can the camera's own light be used in light automation for an analytics rule create for the camera\n */\n @attr('boolean')\n declare canUseOwnLightInAutomation: boolean;\n\n // region Video Source Streaming\n\n /** @override */\n hdSelected = false;\n\n /**\n * Alias for the proxy streaming url.\n */\n @reads('videoSource.proxyUrl')\n declare proxyUrl: string;\n\n // endregion\n\n /**\n * Is this camera facing an outdoor scene or not?\n * Null means that the this flag has never been set before.\n * This will determine if the user should be prompted to set it during rule creation.\n */\n @attr('nullable-boolean')\n declare isIndoorScene: boolean | null;\n\n /**\n * If any of the camera settings page functionalities are available for this camera.\n */\n @or('canChangeScenery', 'supportsDynamicMinObjectSize')\n declare canChangeOvCameraSettings: boolean;\n\n /**\n * Should the user be able to change the scenery for this camera?\n * For example: some cameras may be hardcoded as indoor cameras and only have the option of indoor scenery.\n */\n @attr('boolean', { defaultValue: true })\n declare canChangeScenery: boolean;\n\n /**\n * Should the user be able to change the OVReady detection sensitivity on the camera?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsDetectionSensitivity: boolean;\n\n /**\n * Detection sensitivity for the camera.\n * Used to calculate the TargetAlertingConfidenceThreshold for OvReady.\n */\n @attr('number', { defaultValue: 2 })\n declare detectionSensitivity: number;\n\n /**\n * If the camera has a changeable OV minimum object size.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsDynamicMinObjectSize: boolean;\n\n /**\n * The list of parcel detection event types the camera and account support.\n */\n @attr('array', { defaultValue: () => [] })\n declare supportedParcelEvents: number[];\n\n /**\n * If the camera model supports the doorbell notification filters UI.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsDoorbellNotificationFiltersUI: boolean;\n\n /**\n * The number of options we have for the minimum object size slider. This depends on the package installed.\n */\n @attr('number', { defaultValue: 7 })\n declare minimumObjectSizeSliderMaxValue: number;\n\n /**\n * Minimum size of the objects to consider in detection.\n */\n @attr('number', { defaultValue: 4 })\n declare minimumObjectDetectionSize: number;\n\n /**\n * The collection of calibration snapshots for this camera.\n */\n @hasMany('video/calibration/snapshot', { async: true, inverse: 'camera' })\n declare calibrationSnapshots: AsyncHasMany;\n\n /**\n * Does this camera support calibration at all?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsCalibration: boolean;\n\n /**\n * The current camera calibration status.\n */\n @belongsTo('video/calibration/status', { async: false, inverse: 'camera' })\n declare calibrationStatus: Status;\n\n /**\n * Does this camera need to be calibrated?\n */\n @attr('nullable-boolean', { defaultValue: false })\n declare isCalibrationRequired: boolean | null;\n\n /**\n * Is this ovReady camera using ov battery analytics instead of traditional OvReady?\n */\n @attr('boolean', { defaultValue: false })\n declare isUsingOvBatteryAnalytics: boolean;\n\n /**\n * Whether or not Ground Zone should be recommended to the user over Tripwire. (Neither recommended when false).\n */\n @computed('deviceModel')\n get isGroundZoneRecommended(): boolean {\n // eslint-disable-next-line ember/no-get\n return get(this, 'deviceModel') === V622_MODEL;\n }\n\n /**\n * Can the camera get the calibration data from the camera? If not, then it failed to communicate with the OV proxy.\n *\n * @note We can remove this once isCalibrationRequired is DB-dependent.\n */\n @equal('isCalibrationRequired', null)\n declare failedToCommunicateWithOvProxy: boolean;\n\n /**\n * For OvReadyCameras we want to check status, calibration, and camera properties to see if it can setup rule.\n */\n cannotSetupRule(isBusinessActivityAnalytics: boolean): boolean {\n return (\n this.isCalibrationRequired ||\n (!isBusinessActivityAnalytics && this.hasMaxRules) ||\n this.failedToCommunicateWithOvProxy\n );\n }\n\n /**\n * Which rule types does the camera support?\n *\n * @note The integer values correspond to the OvlRuleType enum values\n */\n @attr('array', { defaultValue: getDefaultSupportedRuleTypes })\n declare supportedRuleTypes: number[];\n\n /**\n * Whether or not this camera supports Business Activity Analytics rules.\n */\n @computed('supportedRuleTypes')\n get supportsBusinessActivityAnalytics(): boolean {\n // eslint-disable-next-line ember/no-get\n return get(this, 'supportedRuleTypes').some((ruleType: number) =>\n BUSINESS_ACTIVITY_ANALYTICS_RULE_TYPES.includes(ruleType)\n );\n }\n\n /**\n * What is the max number of rules this camera supports?\n */\n @attr('number', { defaultValue: DEFAULT_MAX_NUMBER_OF_RULES })\n declare maxNumberOfOvRules: number;\n\n /**\n * Which notification filter types does this camera support?\n */\n @attr('array', { defaultValue: getDefaultSupportedFilterTypes })\n declare supportedNotificationFilterTypes: number[];\n\n /**\n * Which light rule filter types does this camera support?\n */\n @attr('array', { defaultValue: getDefaultSupportedFilterTypes })\n declare supportedLightRuleFilterTypes: number[];\n\n /**\n * By default, the filter types to enable are all the supported ones except 'Other'.\n */\n @computed('supportedLightRuleFilterTypes')\n get defaultLightRuleFilterTypes(): number[] {\n return this.supportedLightRuleFilterTypes.filter((filterType) => filterType !== Other);\n }\n\n // region Perimeter Guard\n\n /**\n * Does this camera support Lurker Detection?\n */\n @attr('boolean')\n declare supportsLurkerDetection: boolean;\n\n /**\n * Does this camera support sound/audio file playback?\n * */\n @attr('boolean')\n declare supportsPerimeterGuardAudioPlayback: boolean;\n\n /**\n * Does this camera support audio duration?\n * */\n @attr('boolean')\n declare supportsPerimeterGuardAudioDuration: boolean;\n\n /**\n * Does this camera support floodlights?\n * */\n @attr('boolean', { defaultValue: false })\n declare supportsFloodlight: boolean;\n\n /**\n * Does this camera support spotlight?\n * */\n @attr('boolean', { defaultValue: false })\n declare supportsSpotlight: boolean;\n\n /**\n * Can this camera play a specified sound/audio file?\n * */\n @attr('boolean')\n declare canPlaySound: boolean;\n\n /**\n * Does the camera use a built in buzzer to play its sound?\n *\n * @type {boolean}\n * */\n @attr('boolean')\n declare supportsBuzzer: boolean;\n\n /**\n * List of supported audio options for a camera\n */\n @attr('array')\n declare supportedPerimeterGuardAudioOptions: number[];\n\n /**\n * List of supported floodlight options for a camera\n */\n @attr('array')\n declare supportedPerimeterGuardFloodlightOptions: number[];\n\n /**\n * Does this camera support subschedules for Perimeter Guard?\n */\n @attr('boolean')\n declare supportsPerimeterGuardSubSchedule: boolean;\n\n /**\n * Does this camera flash red/blue when its Perimeter Guard LED pattern is triggered?\n */\n @attr('boolean')\n declare hasRedBlueLedPatternBehavior: boolean;\n\n // endregion Perimeter Guard\n\n // region Clip Donation\n\n /**\n * Is this camera automatically donating clips?\n */\n @attr('boolean', { defaultValue: false })\n declare autoDonate: boolean;\n\n /**\n * Is this camera donating its calibration snapshots?\n */\n @attr('boolean', { defaultValue: false })\n declare donateCalibrationSnapshots: boolean;\n\n /**\n * The freeform input describing the content in automatically donated clips.\n */\n @attr('string', { defaultValue: '' })\n declare clipQualityComments: string;\n\n /**\n * If the user has already seen the automatic donation prompt.\n */\n @attr('boolean', { defaultValue: false })\n declare hasLoginSeenAutoDonatePrompt: boolean;\n\n /**\n * What clip donation version has the user accepted for this camera?\n * Currently this can be null (no agreement accepted), 1 (the original agreement),\n * or 2 (the updated agreement giving access to expanded metadata).\n */\n @attr('number')\n declare acceptedClipDonationAgreementVersion: number | null;\n\n /**\n * True if the user has accepted the clip donation agreement (any version)\n * for this camera.\n */\n @notEmpty('acceptedClipDonationAgreementVersion')\n declare hasAcceptedClipDonationAgreement: boolean;\n\n /**\n * Does this camera support touchless ring rules at all?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsTouchlessRingRule: boolean;\n\n // endregion\n\n // region Familiar Subject\n\n /**\n * Does this camera support familiar subject recognition?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsFamiliarSubjectRecognition: boolean;\n\n /**\n * Does the camera support familiar face recognition?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsFamiliarFace: boolean;\n\n /**\n * The familiar subject properties for this camera\n */\n @belongsTo('video/familiar-targets/familiar-subject-camera-context', { async: true, inverse: 'camera' })\n declare familiarSubjectCameraProperties: AsyncBelongsTo;\n\n /**\n * Is this camera opted into familiar vehicle recognition?\n */\n @reads('familiarSubjectCameraProperties.isVehicleOptedIn')\n declare isOptedIntoFamiliarVehicleRecognition: boolean;\n\n /**\n * Is this camera opted into familiar face recognition?\n */\n @reads('familiarSubjectCameraProperties.isFaceOptedIn')\n declare isOptedIntoFamiliarFaceRecognition: boolean;\n\n // endregion\n\n // region Panel Notification\n\n /**\n * Panel type string.\n */\n @attr('string')\n declare panelName: string;\n\n /**\n * Does this camera support panel notifications?\n */\n @attr('boolean')\n declare supportsVideoPanelNotification: boolean;\n\n // endregion\n\n // region Warning Sounds\n\n /**\n * Does this camera have warning sounds enabled?\n */\n @attr('boolean')\n declare isWarningReactionEnabled: boolean;\n\n /**\n * Does this camera support manual siren?\n */\n @attr('boolean')\n declare supportsSiren: boolean;\n\n /**\n * Does this camera support AI Deterrence?\n */\n @attr('boolean')\n declare supportsAIDeterrence: boolean;\n\n /**\n * Does this camera support OV Ready 2.1 Parcel Detection Rules?\n */\n @attr('boolean')\n declare supportsParcelRules: boolean;\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/ov-ready-camera': OvReadyCamera;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { alias } from '@ember/object/computed';\nimport BaseCamera from './base-camera';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type { StreamInfo } from 'customer-site/components/video/settings/playback-features/recording-quality-input/index';\nimport type System from 'customer-site/models/systems/system';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type SdCardRecordingSchedule from '../schedules/sd-card-recording-schedule';\nimport type SdCard from '../sd-card';\nimport type SdCardCameraUsageInfo from '../sd-card-camera-usage-info';\nimport type SdCardThumbnailEndpoint from '../sd-card-thumbnail-endpoint';\nimport type SdCardVideoSource from '../video-sources/sd-card-video-source';\n\n/**\n * SD card camera device model.\n */\nexport default class SdCardCamera extends BaseCamera {\n /**\n * The system (unit) that this device belongs to.\n */\n @belongsTo('systems/system', { async: true, inverse: 'sdCardCameras' })\n declare system: AsyncBelongsTo;\n\n /**\n * Video source content for SD card playback.\n */\n @belongsTo('video/video-sources/sd-card-video-source', { async: true, inverse: 'camera' })\n declare videoSource: AsyncBelongsTo;\n\n /**\n * Recorded video source for this camera.\n */\n @alias('videoSource')\n declare recordedVideoSource: AsyncBelongsTo;\n\n /**\n * Scrubber thumbnail URL endpoint.\n */\n @belongsTo('video/sd-card-thumbnail-endpoint', { async: true, inverse: null })\n declare scrubberThumbnailEndpoint: AsyncBelongsTo;\n\n /**\n * Scrubber thumbnail URL endpoint.\n */\n @alias('scrubberThumbnailEndpoint')\n declare thumbnailEndpoint: AsyncBelongsTo;\n\n /**\n * Does this camera have an installed SD card?\n */\n @attr('boolean', { defaultValue: false })\n declare hasInstalledSdCard: boolean;\n\n /**\n * Does this camera have the max number of SD card recording schedules?\n */\n @attr('boolean', { defaultValue: false })\n declare hasMaxNumberOfSdRecordingSchedules: boolean;\n\n /**\n * The max duration (in seconds) allowed for SD card video clip download.\n */\n @attr('number')\n declare maxSdCardClipDownloadDurationSec: number;\n\n /**\n * The supported playback speeds, depending on the camera's firmware.\n */\n @attr('array')\n declare supportedSpeeds: number[];\n\n /**\n * Date format for playback URL.\n */\n @attr('string', { defaultValue: '' })\n declare playbackUrlDateFormat: string;\n\n /**\n * Recording schedule for SD card recording.\n */\n @belongsTo('video/schedules/sd-card-recording-schedule', { async: true, inverse: 'camera' })\n declare sdCardRecordingSchedule: AsyncBelongsTo;\n\n /**\n * The dictionary that maps an SdRecordingQualityEnum to its streaming parameters.\n */\n @attr('array')\n declare recordingQualityToStreamMapping: Record;\n\n /**\n * Does this camera support SD card audio recording?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAudioRecording: boolean;\n\n /**\n * Does this camera supports SD card automated recovery?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAutomatedRecovery: boolean;\n\n /**\n * The list of valid retention times, in days, to appear in the dropdown that the user can select.\n */\n @attr('array')\n declare videoRetentionDays: number[];\n\n /**\n * Does this camera have a maximum video retention limit? Based on dealer.\n */\n @attr('boolean', { defaultValue: false })\n declare hasVideoRetentionMaxLimit: boolean;\n\n /**\n * Does this camera support smart rate control?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSmartRateControl: boolean;\n\n /**\n * Does this camera support changing Bitrate?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsBitrateControl: boolean;\n\n /**\n * For checking the smart rate control toggle\n */\n @attr('boolean', { defaultValue: false })\n declare hasInternalBetaAccess: boolean;\n\n /**\n * Is smart rate control enabled on the camera? Should always be false for cameras that don't support it.\n */\n @attr('boolean', { defaultValue: false })\n declare smartRateControlEnabled: boolean;\n\n /**\n * If the user is not allowed to modify the stream for SD Card (which occurs if there is an existing Continuous Cloud recording schedule),\n * what is the recording quality the user is forced to choose for their Onboard recording schedule? It must match that of the CC schedule.\n * If there is no recording quality restriction or existing CC schedule, then this value is null.\n */\n @attr('number')\n declare forcedRecordingQuality: number;\n\n /**\n * What is the maximum bitrate of the camera?\n */\n @attr('number')\n declare bitrate: number;\n\n /**\n * Does the camera support downloading SD card thumbnails?\n */\n @attr('boolean')\n declare supportsDownloadingThumbnails: boolean;\n\n /**\n * Does this camera support thumbnail search?\n */\n @alias('supportsDownloadingThumbnails')\n declare supportsThumbnailSearch: boolean;\n\n /**\n * Information related to storage usage for the current sd card camera.\n */\n @belongsTo('video/sd-card-camera-usage-info', { async: true, inverse: null })\n declare sdCardCameraUsageInfo: AsyncBelongsTo;\n\n /**\n * The SD card that is associated with this SD card camera.\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @belongsTo('video/sd-card', { async: true, inverse: 'camera' })\n sdCard?: AsyncBelongsTo;\n\n /**\n * Get clip download URL for downloading SD card clip.\n */\n getClipDownloadUrl(\n ajax: AjaxService,\n startTime: Date,\n durationSeconds: number,\n includeAudio: boolean\n ): Promise<{ value: string }> {\n return ajax.apiRequest<{ value: string }>(\n `video/videoSources/sdCardVideoSources/getClipDownloadUrl/${\n this.id\n }?startTime=${startTime.toISOString()}&durationSeconds=${durationSeconds}&includeAudio=${includeAudio}`\n );\n }\n\n /**\n * Get thumbnails download URL for downloading SD card thumbnails.\n */\n getThumbnailsDownloadUrl(ajax: AjaxService, startTime: Date, durationSeconds: number): Promise<{ value: string }> {\n return ajax.apiRequest<{ value: string }>(\n `video/videoSources/sdCardVideoSources/getThumbnailDownloadUrl/${\n this.id\n }?startTime=${startTime.toISOString()}&durationSeconds=${durationSeconds}`\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/sd-card-camera': SdCardCamera;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport BaseCamera from './base-camera';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type CachedDaysOfRecordedVideo from '../cached-days-of-recorded-video';\nimport type SvrStateInfo from '../svr-state-info';\nimport type SvrUsageInfo from '../svr-usage-info';\nimport type SvrVideoSource from '../video-sources/svr-video-source';\nimport type Camera from './camera';\n\ntype ConnectivityResponse = {\n isConnected: boolean;\n};\n\n/**\n * Checks if the SVR is currently connected\n */\nexport function getSVRConnectivity(ajax: AjaxService, svrGlobalDeviceId: string): Promise {\n return ajax.apiRequestForValue(`video/devices/svrs/checkConnectivity?globalDeviceId=${svrGlobalDeviceId}`);\n}\n\n/**\n * Svr device model.\n */\nexport default class Svr extends BaseCamera {\n /**\n * The total storage capacity on the SVR.\n */\n @attr('number')\n declare storageCapacity: number;\n\n /**\n * The number of drives installed.\n */\n @attr('number')\n declare numberDrivesInstalled: number;\n\n /**\n * Last successful supervision for this camera\n */\n @attr('date')\n declare lastSuccessfulSupervision: Date;\n\n /**\n * Whether or not the svr is online\n */\n @attr('boolean', { defaultValue: false })\n declare isUnreachable: boolean;\n\n /**\n * Whether or not the svr supports downscaling clip downloads\n */\n @attr('boolean', { defaultValue: false })\n declare supportsDownscaledDownloads: boolean;\n\n /**\n * Does the svr support local settings?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsLocalSettings: boolean;\n\n /**\n * Does the SVR support disk management?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsDiskManagement: boolean;\n\n /**\n * Can we use this SVR with ONVIF connected devices?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsOnvif: boolean;\n\n /**\n * Does this device support stream mappings for ONVIF cameras.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsOnvifStreamMappings: boolean;\n\n /**\n * If the device and account both support motion intervals.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsMotionIntervals: boolean;\n\n /**\n * If the device is Apex-based SVR.\n */\n @attr('number')\n declare maxAllowedClipDownloadDuration: number;\n\n /**\n * Whether the device supports the Advanced Motion Search feature.\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAdvancedMotionSearch: boolean;\n\n /**\n * The max number of supported channels.\n */\n @attr('number')\n declare numberOfChannelsSupported: number;\n\n /**\n * The current number of channels that have devices recording.\n */\n @attr('number')\n declare numberOfChannelsRecording: number;\n\n /**\n * Whether the device supports video clip upload feature.\n */\n @attr('boolean')\n declare supportsVideoClipUpload: boolean;\n\n /**\n * The SVR state info.\n */\n @belongsTo('video/svr-state-info', { async: true, inverse: null })\n declare svrStateInfo: AsyncBelongsTo;\n\n /**\n * Cached information about how many days of video this SVR has recorded.\n */\n @belongsTo('video/cached-days-of-recorded-video', { async: true, inverse: null })\n declare cachedDaysOfRecordedVideo: AsyncBelongsTo;\n\n /**\n * Information related to storage usage for the current SVR.\n */\n @belongsTo('video/svr-usage-info', { async: true, inverse: null })\n declare svrUsageInfo: AsyncBelongsTo;\n\n /**\n * Collection of cameras that have recording schedules on this SVR.\n */\n @hasMany('video/devices/camera', { async: true, inverse: null })\n declare cameras: AsyncHasMany;\n\n /**\n * Video sources for the SVR's channels.\n */\n @hasMany('video/video-sources/svr-video-source', { async: true, inverse: 'svr' })\n declare videoSources: AsyncHasMany;\n\n /**\n * Returns a list of any items that are associated with or fall under this device.\n */\n getSubItems(): AsyncHasMany {\n return this.cameras;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/svr': Svr;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { ThirdPartyAnalytics } from 'customer-site/enums/OvlRuleType';\nimport { ThirdPartyAnalytics as ThirdPartyAnalyticsFilterOption } from 'customer-site/enums/SavedClipFilterOption';\nimport BaseAnalyticsCamera from './base-analytics-camera';\n\nimport type { AsyncHasMany, AsyncBelongsTo } from '@ember-data/model';\nimport type CameraLinkInfo from '../camera-link-info';\nimport type ThirdPartyAnalyticsRule from '../third-party-analytics-rule';\n\n/**\n * Get a fresh copy of the default supported rule types array.\n */\nfunction getDefaultSupportedRuleTypes(): number[] {\n return [ThirdPartyAnalytics];\n}\n\n/**\n * Get a fresh copy of the default supported filter types array.\n */\nfunction getDefaultSupportedFilterTypes(): number[] {\n return [ThirdPartyAnalyticsFilterOption];\n}\n\nexport default class ThirdPartyAnalyticsCamera extends BaseAnalyticsCamera {\n /**\n * Which rule types does the camera support?\n *\n * @note The integer values correspond to the OvlRuleType enum values\n */\n @attr('array', { defaultValue: getDefaultSupportedRuleTypes })\n declare supportedRuleTypes: number[];\n\n /**\n * The Third Party Analytics Rules currently on this camera.\n */\n @hasMany('video/third-party-analytics-rule', { async: true, inverse: null })\n declare ovRules: AsyncHasMany;\n\n /**\n * Which Third Party Analytic Events does the camera support?\n * Key: The Event Enum, Value: The associated translation from the backend.\n */\n @attr()\n declare supportedEventTypes: Record;\n\n /**\n * Which Third party Analytic Events are currently available to trigger on?\n */\n @attr('array')\n declare availableEventTypes: number[];\n\n /**\n * The cameraLink for this camera\n */\n @belongsTo('video/camera-link-info', { async: true, inverse: null })\n declare cameraLink: AsyncBelongsTo;\n\n /**\n * Which notification filter types does this camera support?\n */\n @attr('array', { defaultValue: getDefaultSupportedFilterTypes })\n declare supportedNotificationFilterTypes: number[];\n\n /**\n * Does this camera have the max number of rules?\n * For third party cameras, this is only when we have no remaining supported events to trigger on.\n */\n @computed('availableEventTypes')\n get hasMaxRules(): boolean {\n return Object.keys(this.availableEventTypes).length === 0;\n }\n\n /**\n * Third Party Cameras are not dependent on being \"prepped\" for adding a rule\n */\n // Disabled Linter for now while we do not use this during dev\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cannotSetupRule(_isBusinessActivityAnalytics: boolean): boolean {\n return false;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/third-party-analytics-camera': ThirdPartyAnalyticsCamera;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport BaseCamera from './base-camera';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type AjaxService from '../../../services/ajax';\nimport type LiveVideoHighestResSource from '../video-sources/live-video-highest-res-source';\nimport type LiveVideoSource from '../video-sources/live-video-source';\n\ninterface VarifocalAutoFocusResponse {\n message: string;\n varifocalFocus: number;\n varifocalFov?: number;\n}\n\n/**\n * Varifocal Fov camera device model.\n */\nexport default class VarifocalFovCamera extends BaseCamera {\n @service declare ajax: AjaxService;\n\n /**\n * Video source content for Varifocal Fov playback.\n */\n @belongsTo('video/video-sources/live-video-source', { async: true, inverse: null })\n declare videoSource: AsyncBelongsTo;\n\n /**\n * HD video source content for varifocal fov playback\n */\n @belongsTo('video/video-sources/live-video-highest-res-source', { async: true, inverse: null })\n declare videoSourceHd: AsyncBelongsTo;\n\n /**\n * Does this camera support smart rate control?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSmartRateControl: boolean;\n\n /**\n * Does this camera support resetting the varifocal lens?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsVarifocalLensReset: boolean;\n\n /**\n * Does this camera support varifocal fov?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsVarifocalFov: boolean;\n\n /**\n * Does this camera support varifocal fov?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsVarifocalFocus: boolean;\n\n /**\n * What is the varifocal fov value of the camera\n */\n @attr('number', { defaultValue: 0 })\n declare varifocalFov: number;\n\n /**\n * What is the varifocal focus value of the camera\n */\n @attr('number', { defaultValue: 0 })\n declare varifocalFocus: number;\n\n /**\n * Should we disable the fov/focus sliders\n */\n @attr('boolean', { defaultValue: false })\n declare disableSliders: boolean;\n\n /**\n * Update the fov value or the focus value on the varifocal camera.\n */\n updateFovFocus(key: string, newValue: number): Promise<{ value: VarifocalAutoFocusResponse }> {\n return this.ajax.apiRequest<{ value: VarifocalAutoFocusResponse }>(\n `video/devices/varifocalFovCameras/updateFovFocus/${this.id}`,\n undefined,\n {\n [key]: newValue\n },\n 'PUT'\n );\n }\n\n /**\n * Call the autofocus api endpoint on the varifocal camera.\n */\n autoFocusCamera(): Promise<{ value: VarifocalAutoFocusResponse }> {\n return this.ajax.apiRequest<{ value: VarifocalAutoFocusResponse }>(\n `video/devices/varifocalFovCameras/autofocus/${this.id}`,\n undefined,\n undefined,\n 'POST'\n );\n }\n\n /**\n * Call the reset lens api endpoint on the varifocal camera.\n */\n resetVarifocalLens(): Promise<{ value: VarifocalAutoFocusResponse }> {\n return this.ajax.apiRequest<{ value: VarifocalAutoFocusResponse }>(\n `video/devices/varifocalFovCameras/resetVarifocalLens/${this.id}`,\n undefined,\n undefined,\n 'POST'\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/devices/varifocal-fov-camera': VarifocalFovCamera;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { task, timeout } from 'ember-concurrency';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { getFisheyeSettings } from '@adc/video-player/utils/fisheye-utils';\n\nimport type OespPlaybackStateController from '@adc/video-player/classes/state-controllers/oesp-playback-state-controller';\nimport type { DewarpConfigRecord } from '@adc/video-player/utils/fisheye-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { FisheyeMode } from '@oecommon/oscar-js';\nimport type { Task } from 'ember-concurrency';\n\n/**\n * Syncs the dewarp config with the current fisheye settings.\n */\nexport function syncDewarpConfig(\n this: { identityManager: ServiceRegistry['identity-manager'] },\n dewarpConfig: DewarpConfig,\n apexId: string,\n oespPlaybackStateController: OespPlaybackStateController\n): void {\n const newProps = getFisheyeSettings(apexId, oespPlaybackStateController);\n Object.assign>(dewarpConfig, newProps);\n\n // Non-customers should still be able to update and restore fisheye settings, they just can't save it to our db.\n const shouldNotSaveConfig = this.identityManager.identityModel?.isOperatorSite ?? false;\n if (shouldNotSaveConfig) {\n return;\n }\n\n dewarpConfig.saveWithDebounce.perform();\n}\n\n/**\n * Time in between syncing the Dewarp Config.\n */\nconst SyncDebounceMs = 300;\n\n/**\n * Model for the camera's dewarp parameters and fisheye view settings.\n */\nexport default class DewarpConfig extends BaseModel implements DewarpConfigRecord {\n /**\n * The mount type.\n */\n @attr('number')\n declare mountType: number;\n\n /**\n * The mount angle.\n */\n @attr('number')\n declare mountAngle: number;\n\n /**\n * The center X based on the resolution.\n */\n @attr('number')\n declare centerX: number;\n\n /**\n * The center Y based on the resolution.\n */\n @attr('number')\n declare centerY: number;\n\n /**\n * The resolution height.\n */\n @attr('number')\n declare height: number;\n\n /**\n * The resolution width.\n */\n @attr('number')\n declare width: number;\n\n /**\n * The focal length.\n */\n @attr('number')\n declare focalLength: number;\n\n /**\n * The last saved Fisheye mode, defaulting to FisheyeMode.Original.\n * See app/transforms/fisheye-mode.ts.\n */\n @attr('fisheye-mode')\n declare lastMode: FisheyeMode;\n\n /**\n * The pan amount for the last saved position in Interactive Mode.\n */\n @attr('number')\n declare lastPan: number | null;\n\n /**\n * The tilt amount for the last saved position in Interactive Mode.\n */\n @attr('number')\n declare lastTilt: number | null;\n\n /**\n * The field of view amount (used for zoom) for the last saved position in Interactive Mode.\n */\n @attr('number')\n declare lastFov: number | null;\n\n //#region Non-attrs\n\n /**\n * Sync the model with the latest fisheye settings and save it.\n */\n saveWithDebounce: Task = task({ restartable: true }, async (): Promise => {\n await timeout(SyncDebounceMs);\n await this.save({\n adapterOptions: {\n failGracefully: true\n }\n });\n });\n\n //#endregion Non-attrs\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/dewarp-config': DewarpConfig;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { Dimensions } from 'customer-site/components/video/video-streaming/video-streaming-features/types';\nimport type DigitalPtzErrorEnum from 'customer-site/enums/DigitalPtzErrorEnum';\n\n/**\n * Takes in absolute pixel based ptz values, and returns percentage based values.\n * (Percentage based values are based on a percentage of the player width/height)\n */\nexport function convertAbsolutePtzValuesToPctBased(\n left: number,\n top: number,\n dynamicVideoPlayerDimensions: Dimensions\n) {\n return {\n panDownPct: Math.round((top * 100) / dynamicVideoPlayerDimensions.height),\n panRightPct: Math.round((left * 100) / dynamicVideoPlayerDimensions.width)\n };\n}\n\n/**\n * Takes in percentage based ptz values, and returns absolute pixel values.\n * (Percentage based values are based on a percentage of the player width/height)\n */\nexport function convertPctBasedPtzValuesToAbsolute(\n panDownPct: number,\n panRightPct: number,\n dynamicVideoPlayerDimensions: Dimensions\n) {\n return {\n top: (panDownPct * dynamicVideoPlayerDimensions.height) / 100,\n left: (panRightPct * dynamicVideoPlayerDimensions.width) / 100\n };\n}\n\n/**\n * Model for the camera's digital ptz position.\n */\nexport default class DigitalPtzPosition extends BaseModel {\n /**\n * The percentage that this is panned to the right (pixels/width)\n */\n @attr('number', { defaultValue: 0 })\n declare digiPtzPanRightPercent: number;\n\n /**\n * The percentage that this is panned down (pixels/height)\n */\n @attr('number', { defaultValue: 0 })\n declare digiPtzPanDownPercent: number;\n\n /**\n * The scale value of zoom\n * e.g. 120% scaling of default size would have a value of 1.2\n */\n @attr('number', { defaultValue: 1 })\n declare digiPtzZoom: number;\n\n /**\n * Indicates if a processing error has occurred (from DigitalPtzErrorEnum).\n */\n @attr('number')\n declare error: DigitalPtzErrorEnum;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/digital-ptz-position': DigitalPtzPosition;\n }\n}\n","import { attr } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\n/**\n * An Doorbell button press event that contains the image thumbnail.\n * Currently only applicable for package alerts.\n */\nexport default class DoorbellButtonPressEvent extends RecordModel {\n /**\n * The URL that can be used to retrieve the thumbnail this doorbell button event.\n */\n @attr('string')\n declare imageSrc: string;\n\n /**\n * The orientation of the thumbnail.\n * All doorbell button press events currently have a vertical thumbnail,\n * so this is only included in the frontend model.\n */\n orientation = 'vertical';\n\n /**\n * The description of the thumbnail\n */\n @attr('string')\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/doorbell-button-press-event': DoorbellButtonPressEvent;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { reads } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\n\n/**\n * @classdesc\n *\n * Represents any camera properties that are relevant for familiar subjects\n */\nexport default class FamiliarSubjectCameraContext extends BaseModel {\n /**\n * The camera to which this context applies\n */\n @belongsTo('video/devices/ov-ready-camera', { async: true, inverse: 'familiarSubjectCameraProperties' })\n declare camera: AsyncBelongsTo;\n\n /**\n * The name of the camera for which this context applies\n */\n @reads('camera.description')\n declare cameraName: string;\n\n /**\n * Is the camera opted-in to familiar subject recognition?\n */\n @attr('boolean', { defaultValue: false })\n declare isVehicleOptedIn: boolean;\n\n /**\n * Is the camera opted-in to familiar subject recognition?\n */\n @attr('boolean', { defaultValue: false })\n declare isFaceOptedIn: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-subject-camera-context': FamiliarSubjectCameraContext;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type FamiliarTargetEnrollmentImage from './familiar-target-enrollment-image';\n\n/**\n * user-customizable profile features for a familiar target enrollment cluster\n */\nexport default class FamiliarTargetClusterProfile extends BaseModel {\n /**\n * The name description for this cluster\n */\n @attr('string')\n declare description: string;\n\n /**\n * The user-specified image id for this cluster\n */\n @attr('string')\n declare profileImageId: string;\n\n /**\n * The default enrollment image for the cluster\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare profileOrKeyImage: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-target-cluster-profile': FamiliarTargetClusterProfile;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\n\n/**\n * @classdesc\n *\n * A container model that represents a user review for a familiar target enrollment cluster\n */\nexport default class FamiliarTargetEnrollmentClusterReview extends BaseModel {\n /**\n * The images to review for the cluster\n */\n @hasMany('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare imagesToReview: AsyncHasMany;\n\n /**\n * ID of the cluster being reviewed\n */\n @attr('string')\n declare clusterId: string;\n\n /**\n * Did this review result in a cluster being deleted?\n */\n @attr('boolean', { defaultValue: false })\n declare clusterDeletedByReview: boolean;\n\n /**\n * The type of the familiar object being reviewed\n */\n @attr('number')\n declare familiarObjectType: number;\n\n /**\n * The type of the review. Can be \"Review\" or \"Move\"\n */\n @attr('number')\n declare reviewType: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-target-enrollment-cluster-review': FamiliarTargetEnrollmentClusterReview;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { alias, gt, reads } from '@ember/object/computed';\nimport { Move, Review } from 'customer-site/enums/FamiliarTargetReviewType';\nimport { Active, Pending } from 'customer-site/enums/FamiliarTargetStatus';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { sentryWithScopeAndWarn } from '@adc/app-infrastructure/utils/sentry';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type FamiliarTargetClusterProfile from 'customer-site/models/video/familiar-targets/familiar-target-cluster-profile';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type FamiliarTargetEnrollmentClusterReview from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster-review';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\n\n/**\n * @classdesc\n *\n * A cluster of recognized images for a familiar object enrollment\n */\nexport default class FamiliarTargetEnrollmentCluster extends BaseModel {\n /**\n * The enrollment to which this cluster belongs\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment', { async: true, inverse: 'clusters' })\n declare enrollment: AsyncBelongsTo;\n\n /**\n * The user-customizable properties for the cluster\n */\n @belongsTo('video/familiar-targets/familiar-target-cluster-profile', { async: true, inverse: null })\n declare profile: AsyncBelongsTo;\n\n /**\n * The name description for this cluster\n */\n @alias('profile.description')\n declare description: string;\n\n /**\n * Type of cluster (vehicle or person)\n */\n @attr('number')\n declare familiarObjectType: number;\n\n /**\n * Image URL for the primary image for this cluster.\n */\n @reads('profile.profileOrKeyImage.imageUrl')\n declare profileOrKeyImageUrl: string;\n\n /**\n * Image id for the primary image for this cluster.\n */\n @alias('profile.profileImageId')\n declare profileImageId: string;\n\n /**\n * The status of the familiar vehicle\n */\n @attr('number')\n declare status: number;\n\n /**\n * Is the target in a status where the customer can filter notifications based on the vehicle's classification?\n */\n @attr('boolean', { defaultValue: false })\n declare isEligibleForNotifications: boolean;\n\n /**\n * Unreviewed images that have identified as part of this cluster\n */\n @hasMany('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare newImages: AsyncHasMany;\n\n /**\n * Images marked as correct as part of this cluster by a user review\n */\n @hasMany('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare reviewedImages: AsyncHasMany;\n\n /**\n * The number of new images that have been identified in this cluster.\n */\n @reads('newImages.length')\n declare numNewImages: number;\n\n /**\n * Does this cluster have photos that require review?\n */\n @gt('newImages.length', 0)\n declare hasPhotosToReview: boolean;\n\n /**\n * Does this cluster have photos that require review?\n */\n @gt('reviewedImages.length', 0)\n declare hasReviewedPhotos: boolean;\n\n /**\n * Remove an image from the cluster's new or reviewed photo list\n * @param image\n */\n removeImage(image: FamiliarTargetEnrollmentImage) {\n // The image may exist in either list, and we need to cover both options\n this.reviewedImages.removeObject(image);\n this.newImages.removeObject(image);\n }\n\n /**\n * Save the user review for any images that have been marked as correct or incorrect for this cluster.\n */\n async completeReview(): Promise {\n let review: FamiliarTargetEnrollmentClusterReview | undefined;\n try {\n review = this.store.createRecord('video/familiar-targets/familiar-target-enrollment-cluster-review', {\n clusterId: this.id,\n familiarObjectType: this.familiarObjectType,\n reviewType: Review\n });\n\n // Review the images if they should be included in the review\n this.newImages\n .filter((i: FamiliarTargetEnrollmentImage) => i.hasDirtyAttributes)\n .forEach((i: FamiliarTargetEnrollmentImage) =>\n (review as FamiliarTargetEnrollmentClusterReview).imagesToReview.pushObject(i)\n );\n\n // Complete the review\n await review.save();\n\n if (review.clusterDeletedByReview) {\n // If the cluster was deleted, we need to unload it\n this.unloadRecord();\n } else {\n // reload cluster and images to see if anything has changed\n await this.fullReload();\n }\n } catch (ex) {\n sentryWithScopeAndWarn('error saving a familiar target review', { errorMessage: ex.message }, undefined);\n return false;\n } finally {\n // The review object is no longer needed, so unload it\n review?.unloadRecord();\n }\n\n return true;\n }\n\n /**\n * Submit a request to have each of the provided images moved in bulk to this cluster\n */\n public async moveImagesToCluster(images: FamiliarTargetEnrollmentImage[]): Promise {\n let review: FamiliarTargetEnrollmentClusterReview | undefined;\n try {\n review = this.store.createRecord('video/familiar-targets/familiar-target-enrollment-cluster-review', {\n clusterId: this.id,\n familiarObjectType: this.familiarObjectType,\n imagesToReview: images,\n reviewType: Move\n });\n await review.save();\n await this.fullReload();\n } catch (ex) {\n sentryWithScopeAndWarn(\n 'error bulk moving images to another cluster',\n { errorMessage: ex.message },\n undefined\n );\n return false;\n } finally {\n // The review object is no longer needed, so unload it\n review?.unloadRecord();\n }\n\n return true;\n }\n\n /**\n * Reload the cluster and all of its related images\n */\n public async fullReload(): Promise {\n await this.reloadImages();\n return this.reload();\n }\n\n /**\n * Reload new and reviewed images.\n * @private\n */\n private reloadImages() {\n return Promise.all([this.newImages.reload(), this.reviewedImages.reload()]);\n }\n\n /**\n * Save the user-editable properties to the cluster's profile\n */\n public async saveProfile(): Promise {\n const resolvedProfile = await this.profile;\n try {\n await resolvedProfile.save();\n return true;\n } catch {\n resolvedProfile.rollbackAttributes();\n return false;\n }\n }\n\n /**\n * Is this cluster in a pending state? Pending clusters do not have an images and are not eligible for classification\n */\n get isPending() {\n return this.status === Pending;\n }\n\n /**\n * Does the cluster have no images?\n */\n get hasNoImages(): boolean {\n return !(this.reviewedImages.length || this.newImages.length);\n }\n\n /**\n * Is this cluster in an active state? Active clusters are eligible for classification\n */\n get isActive(): boolean {\n return this.status === Active;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-target-enrollment-cluster': FamiliarTargetEnrollmentCluster;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { set } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type FamiliarTargetEnrollmentCluster from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster';\nimport type OvReadyCamera from '../devices/ov-ready-camera';\n\n/**\n * @classdesc\n *\n * An image that has been identified as part of a familiar target cluster\n */\nexport default class FamiliarTargetEnrollmentImage extends BaseModel {\n /**\n * The cluster to which this image belongs\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment-cluster', { async: true, inverse: null })\n declare cluster: AsyncBelongsTo;\n\n /**\n * The camera that took the image\n */\n @belongsTo('video/devices/ov-ready-camera', { async: true, inverse: null, polymorphic: true })\n sourceCamera?: AsyncBelongsTo;\n\n /**\n * The ID of the cluster to which this image belongs\n */\n @reads('cluster.id')\n declare clusterId: string;\n\n /**\n * URL for loading this image\n */\n @attr('string')\n declare imageUrl: string;\n\n /**\n * Has this image been confirmed by the user?\n */\n @attr('boolean', { defaultValue: false })\n declare isConfirmedForCluster: boolean;\n\n /**\n * Does this image require a user review?\n */\n @attr('boolean', { defaultValue: true })\n declare requiresReview: boolean;\n\n /**\n * The familiar object type of the subject in this image\n */\n @attr('number')\n declare familiarObjectType: number;\n\n /**\n * When the image was created\n */\n @attr('date')\n declare createdUtc: Date;\n\n /**\n * When the image was deleted\n */\n @attr('date')\n declare deletedUtc: Date;\n\n /**\n * Set the user review for this image\n */\n setReview(isCorrect: boolean): void {\n this.isConfirmedForCluster = isCorrect;\n this.requiresReview = false;\n }\n\n /**\n * Un sets the review (so it requires reviewing again)\n */\n unsetReview(): void {\n this.isConfirmedForCluster = false;\n this.requiresReview = true;\n }\n\n moveImageToClusterAndSave(newCluster: FamiliarTargetEnrollmentCluster) {\n set(this, 'cluster', newCluster as unknown as AsyncBelongsTo);\n return this.save({\n adapterOptions: {\n moveImage: true\n }\n });\n }\n\n /**\n * The URL to be display the image at its full, uncropped resolution\n */\n get fullImageUrl(): string {\n return this.imageUrl.concat('&showFullImage=1');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-target-enrollment-image': FamiliarTargetEnrollmentImage;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { gt, alias } from '@ember/object/computed';\nimport { Vehicle } from 'customer-site/enums/FamiliarObjectType';\nimport { MaxAllowedFaces, MaxAllowedVehicles } from 'customer-site/utils/video/settings/familiar-subject';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type FamiliarTargetEnrollmentCluster from './familiar-target-enrollment-cluster';\nimport type FamiliarTargetEnrollmentImage from './familiar-target-enrollment-image';\n\n/**\n * @classdesc\n *\n * An enrollment for familiar vehicle or face recognition\n */\nexport default class FamiliarTargetEnrollment extends BaseModel {\n /**\n * Is Multi Vehicle Feedback turned on?\n */\n @attr('boolean')\n declare multiVehicleFeedbackEnabled: boolean;\n\n /**\n * Type of enrollment (vehicle or person)\n */\n @attr('number')\n declare familiarObjectType: number;\n\n /**\n * The UTC timestamp that the customer started the enrollment\n */\n @attr('date')\n declare startDateUtc: Date;\n\n /**\n * Is the enrollment enabled by the customer? An enrollment that is enabled will\n * collect and analyze new images for familiar subject recognition\n */\n @attr('boolean', { defaultValue: false })\n declare isEnabled: boolean;\n\n /**\n * Is the enrollment completed? An enrollment will become completed when it has activated\n * the maximum number of familiar subjects\n */\n @attr('boolean', { defaultValue: false })\n declare isCompleted: boolean;\n\n /**\n * does the current logged in user have permission to edit this enrollment?\n */\n @attr('boolean', { defaultValue: false })\n declare isEditableByCurrentUser: boolean;\n\n /**\n * Is maximum allowed vehicles reached?\n */\n @gt('numClusters', MaxAllowedVehicles - 1)\n declare isMaxAllowedVehiclesReached: boolean;\n\n /**\n * Is the maximum allowed faces reached?\n */\n @gt('numClusters', MaxAllowedFaces - 1)\n declare isMaxAllowedFacesReached: boolean;\n\n /**\n * The clusters that this enrollment has generated\n */\n @hasMany('video/familiar-targets/familiar-target-enrollment-cluster', { async: true, inverse: 'enrollment' })\n declare clusters: AsyncHasMany;\n\n /**\n * Number of clusters under this enrollment\n */\n @alias('clusters.length')\n declare numClusters: number;\n\n /**\n * The incorrect images associated with this enrollment\n */\n @hasMany('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare incorrectImages: AsyncHasMany;\n\n /**\n * Number of incorrect images under this enrollment\n */\n @alias('incorrectImages.length')\n declare numIncorrectImages: number;\n\n /**\n * The recent images associated with this enrollment\n */\n @hasMany('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare recentImages: AsyncHasMany;\n\n /**\n * Number of recent images under this enrollment\n */\n @alias('recentImages.length')\n declare numRecentImages: number;\n\n /**\n * Remove a cluster from this enrollment's list of clusters\n * @param cluster\n */\n removeCluster(cluster: FamiliarTargetEnrollmentCluster): void {\n this.clusters.removeObject(cluster);\n }\n\n /**\n * Check if the maximum number of familiar subjects has been reached\n */\n get isMaxFamiliarSubjectReached(): boolean {\n return this.familiarObjectType === Vehicle ? this.isMaxAllowedVehiclesReached : this.isMaxAllowedFacesReached;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-target-enrollment': FamiliarTargetEnrollment;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type FamiliarTargetEnrollmentCluster from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\n\n/**\n * @classdesc\n *\n * A video analytics event that that is linked with a familiar target type, provides a way\n * for users to give feedback on video events to improve familiar target classification accuracy\n */\nexport default class FamiliarTargetFeedbackEvent extends BaseModel {\n /**\n * The thumbnail URL for the target image\n */\n @attr('string')\n declare thumbnail: string;\n\n /**\n * Is this a notification event?\n */\n @attr('boolean')\n declare isNotificationEvent: boolean;\n\n /**\n * Is the event correctly identifying a familiar vehicle?\n */\n @attr('boolean', { defaultValue: false })\n declare isCorrect: boolean;\n\n /**\n * Has the event been reviewed yet this session?\n */\n @attr('boolean', { defaultValue: false })\n declare hasBeenReviewed: boolean;\n\n /**\n * The relevant familiar object type for the event\n */\n @attr('number')\n declare familiarObjectType: number;\n\n /**\n * The Familiar Target that this event corresponds to, if any\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment-cluster', { async: true, inverse: null })\n declare familiarTarget: AsyncBelongsTo;\n\n /**\n * The Familiar Target Enrollment Image that was captured for this event, if any\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare enrollmentImage: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/familiar-targets/familiar-target-feedback-event': FamiliarTargetFeedbackEvent;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing an intercom apartment.\n */\nexport default class IntercomApartment extends BaseModel {\n /**\n * Intercom apartment ID. Correlates with BAS-IP apartment id.\n */\n @attr('number')\n declare apartmentId: number;\n\n /**\n * The ID of the directory list that the apartment belongs to.\n */\n @attr('number')\n declare directoryListId: number;\n\n /**\n * Unit ID of the tenant / apartment.\n */\n @attr('number')\n declare unitId?: number;\n\n /**\n * Number of the apartment building. Part of BAS-IP specific apartment info.\n */\n @attr('number')\n declare buildingNumber: number;\n\n /**\n * Number of the apartment unit. Part of BAS-IP specific apartment info.\n */\n @attr('number')\n declare unitNumber: number;\n\n /**\n * Floor of the apartment. Part of BAS-IP specific apartment info.\n */\n @attr('number')\n declare floorNumber: number;\n\n /**\n * Room number of the apartment. Part of BAS-IP specific apartment info.\n */\n @attr('number')\n declare roomNumber: number;\n\n /**\n * Apartment description. Part of BAS-IP specific apartment info.\n */\n @attr('string')\n declare apartmentName: string;\n\n /**\n * Number of residents in the apartment. Part of BAS-IP specific apartment info.\n */\n @attr('number')\n declare residentNumber: number;\n\n /**\n * Combined floor + room number, e.g. Floor 1 and room 1 = apartment number 101.\n */\n @attr('number')\n declare apartmentNumber: number;\n\n /**\n * Used for call forwarding on the intercom, e.g. \"adc:101\".\n */\n @attr('string')\n declare callForwardNumber: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom/intercom-apartment': IntercomApartment;\n }\n}\n","import { MINUTES_IN_DAY } from '@adc/ember-utils/constants/time';\nimport { attr, hasMany } from '@ember-data/model';\nimport { EVERY_DAY_BITS } from 'customer-site/utils/datetime';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type PushDeviceAddress from 'customer-site/models/users/push-device-address';\n\nexport default class IntercomCallRule extends BaseModel {\n /**\n * Login ID of the intercom call recipient.\n */\n @attr('number')\n declare loginId: number;\n\n /**\n * Unit ID of the account with the intercom setup.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * Camera device used in the intercom.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Should notification include the contact address for the push device that is loading this model?\n */\n @attr('boolean')\n declare includesCurrentDevice: boolean;\n\n /**\n * The day bits determining which days this schedule is run.\n * Default value is set to be every day.\n */\n @attr('number', { defaultValue: EVERY_DAY_BITS })\n declare dayBits: number;\n\n /**\n * The local time that this rule's schedule starts, in minutes.\n * Default value is set to be the start of the day, as if always running.\n */\n @attr('number', { defaultValue: 0 })\n declare beginTime: number;\n\n /**\n * The local time that this rule's schedule ends, in minutes.\n * If greater than 1440, this schedules goes into the next day.\n * Default value is set to be the end of the day, as if always running.\n */\n @attr('number', { defaultValue: MINUTES_IN_DAY })\n declare endTime: number;\n\n /**\n * The push device recipients for the intercom call rule.\n *\n */\n @hasMany('users/push-device-address', { async: false, inverse: null })\n declare pushDeviceRecipients: PushDeviceAddress[];\n\n /**\n * Can we add a panel as a recipient for intercom call rules?\n */\n @attr('boolean')\n declare canAddPanelRecipient: boolean;\n\n /**\n * Is the intercom call rule enabled?\n */\n @attr('boolean')\n declare isEnabled: boolean;\n\n @attr('boolean')\n declare hasReachedRecipientQuota: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom-call-rule': IntercomCallRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing an intercom contact associated with a login and directory list.\n */\nexport default class IntercomContact extends BaseModel {\n /**\n * The login ID of the intercom contact.\n */\n @attr('number')\n declare loginId: number;\n\n /**\n * The directory list ID containing the intercom contact.\n */\n @attr('number')\n declare directoryListId: number;\n\n /**\n * Unit ID of the unit containing the intercom.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * Unit ID of the contact.\n */\n @attr('number')\n declare contactUnitId?: number;\n\n /**\n * Intercom contact's first name.\n * Can be null.\n */\n @attr('string')\n declare firstName?: string;\n\n /**\n * Intercom contact's last or company name.\n * When null with a null firstName, represents a contact that needs to enroll.\n */\n @attr('string')\n declare lastName?: string;\n\n /**\n * Intercom contact's unit name.\n */\n @attr('string')\n declare unitName?: string;\n\n /**\n * Is the intercom contact pinned to the top of the directory list?\n */\n @attr('boolean')\n declare isFavorite: boolean;\n\n /**\n * Is the intercom contact actively shown on the directory list?\n */\n @attr('boolean')\n declare isActive: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom/intercom-contact': IntercomContact;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing an intercom directory list.\n */\nexport default class IntercomDirectoryList extends BaseModel {\n /**\n * Unit ID of the unit containing the intercom.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * Whether this list is the default directory list.\n */\n @attr('boolean')\n declare defaultList: boolean;\n\n /**\n * The name of the directory list.\n */\n @attr('string')\n declare directoryListName?: string;\n\n /**\n * The logins and unit name to be added to the directory in the form {login_id}_{unit_name}.\n */\n @attr('array')\n declare intercomLogins?: string[];\n\n /**\n * Intercom device ids of all the intercoms that are using the directory list.\n */\n @attr('array')\n declare intercomDeviceIds?: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom/intercom-directory-list': IntercomDirectoryList;\n }\n}\n","import { attr } from '@ember-data/model';\nimport DirectoryViewTypeEnum from 'customer-site/enums/DirectoryViewTypeEnum';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing an intercom directory associated with a unit and device.\n */\nexport default class IntercomDirectory extends BaseModel {\n /**\n * Unit ID of the unit containing the intercom.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * The device ID of the intercom.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The device model type of the intercom.\n */\n @attr('string')\n declare deviceModel: string;\n\n /**\n * The group ID of the intercom.\n */\n @attr('number')\n declare groupId?: number;\n\n /**\n * The directory list ID for the intercom.\n */\n @attr('number')\n declare directoryListId: number;\n\n /**\n * Is the intercom active?\n */\n @attr('boolean')\n declare isActive: boolean;\n\n /**\n * The view type of the intercom directory.\n */\n @attr('number', { defaultValue: DirectoryViewTypeEnum.Name })\n declare directoryViewType?: DirectoryViewTypeEnum;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom/intercom-directory': IntercomDirectory;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing a paired contact unit id.\n */\nexport default class IntercomPairedUnit extends BaseModel {\n /**\n * Unit ID of the contact's unit.\n */\n @attr('number')\n declare contactUnitId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom/intercom-paired-unit': IntercomPairedUnit;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Model for the intercom QR code.\n */\nexport default class IntercomQrCode extends BaseModel {\n /**\n * Unit ID of the unit containing the intercom.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * The device ID of the intercom.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The QR Code value.\n */\n @attr('string')\n declare qrCodeId?: string;\n\n /**\n * Header text for the website and email.\n */\n @attr('string')\n declare header?: string;\n\n /**\n * Help text for the website and email.\n */\n @attr('string')\n declare helpText?: string;\n\n /**\n * File name for the intercom directory logo if there is one.\n */\n @attr('string')\n declare logoFileName?: string;\n\n /**\n * Date the QR code should be deleted.\n */\n @attr('date')\n declare deletionDateUtc: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intercom/intercom-qr-code': IntercomQrCode;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * Individual timeline recording interval model.\n */\nexport default class Interval extends Model {\n /**\n * Start time of this interval UTC.\n */\n @attr('date')\n declare startTime: Date;\n\n /**\n * End time of this interval UTC.\n */\n @attr('date')\n declare endTime: Date;\n\n /**\n * Event which toggled this interval as enum.\n */\n @attr('number')\n declare toggledBy: number;\n\n /**\n * Type of interval as enum.\n */\n @attr('number')\n declare type: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/interval': Interval;\n }\n}\n","import Model, { attr, hasMany } from '@ember-data/model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type Interval from './interval';\n\n/**\n * Group of recording intervals for timeline model.\n */\nexport default class IntervalsGroup extends Model {\n /**\n * Earliest recording date UTC.\n */\n @attr('date')\n declare earliestRecord: Date;\n\n /**\n * Latest recording date UTC.\n */\n @attr('date')\n declare latestRecord: Date;\n\n /**\n * If the device is actively recording.\n */\n @attr('boolean')\n declare activelyRecording: boolean;\n\n /**\n * Recording intervals in UTC.\n */\n @hasMany('video/interval', { async: true, inverse: null })\n declare intervalsFound: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/intervals-group': IntervalsGroup;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr, belongsTo } from '@ember-data/model';\nimport { getProperties } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type Camera from './devices/camera';\nimport type Svr from './devices/svr';\n\n/**\n * The result of an installation attempt for an OnvifCameraDiscoveryResult.\n */\nexport interface InstallationResult {\n discoveryId: string;\n success: boolean;\n errorMessage?: string;\n cameraId?: string;\n subsequentCameraIds?: string[];\n}\n\n/**\n * An object with all of the fields required for creating an\n * AlarmBusinessObject OnvifCameraDiscoveryResult.\n */\nexport type OnvifCameraDiscoveryResultPostObject = Pick<\n OnvifCameraDiscoveryResult,\n 'id' | 'ipAddress' | 'macAddress' | 'name' | 'manufacturer' | 'model'\n>;\n\n/**\n * The result of an ONVIF discovery.\n * The id is a string matching the discovery ID, e.g. \"A444767497\".\n */\nexport default class OnvifCameraDiscoveryResult extends BaseModel {\n /**\n * The IP address of the ONVIF camera, e.g. \"192.168.50.23\".\n */\n @attr('string')\n declare ipAddress: string;\n\n /**\n * The (cleaned) MAC address of the ONVIF camera, e.g. \"00D089190224\".\n */\n @attr('string')\n declare macAddress: string;\n\n /**\n * The name of the ONVIF camera, e.g. \"OpenEye OE-C7044-WR (78596)\".\n */\n @attr('string')\n declare name: string;\n\n /**\n * The manufacturer of the ONVIF camera, e.g. \"OpenEye\".\n */\n @attr('string')\n declare manufacturer: string;\n\n /**\n * The model of the ONVIF camera, e.g. \"OE-C7044-WR\".\n */\n @attr('string')\n declare model: string;\n\n /**\n * The Poe Port of the ONVIF camera.\n * Note: This value is the displayed value, not the stored value. (The backend/stored value starts at index 0, this displayed value starts at index 1)\n */\n @attr('number')\n declare poePort?: number;\n\n /**\n * If the discovery result is already installed to an account.\n */\n @attr('boolean')\n declare isCurrentlyInstalled: boolean;\n\n /**\n * What SVR is this streaming on.\n */\n @belongsTo('video/devices/svr', { async: false, inverse: null })\n declare svr: Svr;\n\n /**\n * The result of the last installation attempt.\n */\n @tracked installationResult?: InstallationResult;\n\n /**\n * The camera that resulted from installing this discovery result.\n * Note: This is not a relationship, but something that is manually set.\n * This is because a camera will not exist until the discovery result is successfully installed.\n * So we manually set the camera after it has been installed.\n */\n @tracked camera?: Camera;\n\n /**\n * The subsequent cameras that resulted from installing this discovery result.\n * Note: This is not a relationship, but something that is manually set.\n * This is because the cameras will not exist until the discovery result is successfully installed.\n * So we manually set the cameras after they have been installed.\n *\n * A 4-sensor ONVIF camera will have 1 camera and 3 subsequentCameras.\n */\n @tracked subsequentCameras?: Camera[];\n\n /**\n * Used to grab an object with the same attributes.\n *\n * Passing the ember model to an ajax POST request does not serialize the id, so\n * the work-around is to manually pass in an object with the same attributes.\n */\n getPostObject(): OnvifCameraDiscoveryResultPostObject {\n return getProperties(this, 'id', 'ipAddress', 'macAddress', 'name', 'manufacturer', 'model');\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/onvif-camera-discovery-result': OnvifCameraDiscoveryResult;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Camera from './devices/camera';\n\n/**\n * The result of an attempting to rename an ONVIF camera.\n */\nexport default class OnvifCameraRenameResult extends BaseModel {\n /**\n * The camera associated with this installation.\n */\n @belongsTo('video/devices/camera', { async: true, inverse: null })\n camera?: AsyncBelongsTo;\n\n /**\n * An error message describing why the ONVIF camera could not be added.\n */\n @attr('string')\n error?: string;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/onvif-camera-rename-result': OnvifCameraRenameResult;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Camera from 'customer-site/models/video/devices/camera';\n\n/**\n * Represents a potential stream for an ONVIF camera from the Apex SVR.\n */\nexport default class OnvifCameraStream extends BaseModel {\n /**\n * The URI required to access the stream\n */\n @attr('string')\n declare uri: string;\n\n /**\n * The name of the stream, retrieved through ONVIF protocol\n */\n @attr('string')\n declare name: string;\n\n /**\n * If this stream is currently associated with an ADC stream ID, this will be set to that ADC stream ID. Otherwise, it'll be null.\n */\n @attr('number')\n currentStreamId?: number;\n\n /**\n * The resolution of the stream, formatted as `${width}x${height}`\n */\n @attr('string')\n declare resolution: string;\n\n /**\n * The frame rate of the stream\n */\n @attr('number')\n declare frameRate: number;\n\n /**\n * The bitrate of the stream\n */\n @attr('number')\n declare bitRate: number;\n\n /**\n * The GOP length of the stream\n */\n @attr('number')\n declare gopLength: number;\n\n /**\n * The camera that this stream belongs to.\n */\n @belongsTo('video/devices/camera', { async: true, inverse: null })\n declare camera: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/onvif-camera-stream': OnvifCameraStream;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Represents an ONVIF PTZ Preset.\n */\nexport default class OnvifPtzPreset extends BaseModel {\n /**\n * The Unit ID.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * The Device ID.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The preset number from the device, used as identifier by PTZ APIs.\n */\n @attr('number')\n declare presetNumber: number;\n\n /**\n * The preset name from the device.\n */\n @attr('string')\n declare presetName: string;\n\n /**\n * The position in our list of presets. This is 0-indexed and ADC-specific.\n */\n @attr('number')\n declare position: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/onvif-ptz-preset': OnvifPtzPreset;\n }\n}\n","import { attr, belongsTo, hasMany } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\nimport type { AsyncBelongsTo, SyncHasMany } from '@ember-data/model';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type FamiliarTargetEnrollmentCluster from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\nimport type FamiliarTargetFeedbackEvent from 'customer-site/models/video/familiar-targets/familiar-target-feedback-event';\nimport type FamiliarTargetEvent from 'customer-site/utils/video/settings/familiar-target-event';\n\n/**\n * An OVReady event with a snapshot thumbnail\n */\nexport default class OvEvent extends RecordModel implements FamiliarTargetEvent {\n /**\n * The URL that can be used to retrieve the snapshot image of this OVReady event.\n */\n @attr('string')\n declare thumbnail: string;\n\n /**\n * The timestamp in UTC that the event occurred\n */\n @attr('date')\n declare timestamp: Date;\n\n /**\n * A Familiar Target linked to this event, if one exists\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment-cluster', { async: true, inverse: null })\n declare familiarTarget: AsyncBelongsTo;\n\n /**\n * The Familiar Target enrollment image linked to this event, if one exists\n */\n @belongsTo('video/familiar-targets/familiar-target-enrollment-image', { async: true, inverse: null })\n declare enrollmentImage: AsyncBelongsTo;\n\n /**\n * List of familiar target feedback entities that can be reviewed\n */\n @hasMany('video/familiar-targets/familiar-target-feedback-event', { async: false, inverse: null })\n declare familiarTargetFeedbackEvents: SyncHasMany;\n\n /**\n * The {@link models.video.Camera} that took this event.\n */\n @belongsTo('video/devices/camera', { async: true, inverse: null })\n declare camera: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/ov-event': OvEvent;\n }\n}\n","import { belongsTo, hasMany, attr } from '@ember-data/model';\nimport { DEFAULT_PERSON_COUNT_THRESHOLDS } from 'customer-site/models/video/ov-rule';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type System from '../systems/system';\nimport type OvRule from './ov-rule';\n\n/**\n * A group of BAA rules.\n */\nexport default class OvRuleGroup extends BaseModel {\n /**\n * The user-defined name for this rule group.\n */\n @attr('string')\n declare name: string;\n\n /**\n * The user-defined thresholds for this rule group.\n */\n @attr('array', { defaultValue: () => DEFAULT_PERSON_COUNT_THRESHOLDS })\n declare thresholds: number[];\n\n /**\n * Specifies the types of rules that can be included in this group.\n */\n @attr('number', { defaultValue: -1 })\n declare ruleType: number;\n\n /**\n * The customer to which these rules belong.\n */\n @belongsTo('systems/system', { async: true, inverse: null })\n declare system: AsyncBelongsTo;\n\n /**\n * The list of rules in this group.\n */\n @hasMany('video/ov-rule', { async: true, inverse: null })\n declare rules: AsyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/ov-rule-group': OvRuleGroup;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type OvRule from './ov-rule';\n\n/**\n * @classdesc\n *\n * OV Rule snapshot model.\n */\nexport default class OvRuleSnapshot extends BaseModel {\n /**\n * Url to the snapshot.\n */\n @attr('string')\n declare snapshotUrl: string;\n\n /**\n * The rule that this snapshot belongs to.\n */\n @belongsTo('video/ov-rule', { async: true, inverse: 'snapshot' })\n declare rule: AsyncBelongsTo;\n\n /**\n * The date that the snapshot was last updated.\n */\n @attr('date')\n declare lastUpdated: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/ov-rule-snapshot': OvRuleSnapshot;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { LoiterAreaAction } from '../../enums/AOIActions';\nimport { AttachThumbnail } from '../../enums/VideoNotificationFormat';\nimport BaseAnalyticsRule from './base-analytics-rule';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type OvRuleSnapshot from './ov-rule-snapshot';\nimport type ParcelDetectionRule from './parcel-detection-rule';\nimport type VideoPerimeterGuardConfig from './perimeter-guard-config';\nimport type TouchlessRingRule from './touchless-ring-rule';\n\n/**\n * Default threshold values for BAA rules.\n */\nexport const DEFAULT_PERSON_COUNT_THRESHOLDS = [10, 0, 0],\n DEFAULT_WAIT_TIME_THRESHOLDS = [600, 0, 0];\n\n/**\n * @classdesc\n * OV ready rule model.\n */\nexport default class OvRule extends BaseAnalyticsRule {\n /**\n * The snapshot for this rule.\n */\n @belongsTo('video/ov-rule-snapshot', { async: true, inverse: 'rule' })\n declare snapshot: AsyncBelongsTo;\n\n /**\n * If ground zone, then what type of ground zone.\n */\n @attr('number', { defaultValue: LoiterAreaAction })\n declare groundZoneType: number;\n\n /**\n * List of dictionaries which represent (X,Y) coordinates.\n */\n @attr('array')\n declare points: Record[];\n\n /**\n * How long the target of interest must loiter inside the AOI to set off the OV Rule.\n */\n @attr('number', { defaultValue: -1 })\n declare duration: number;\n\n /**\n * If tripwire, which direction is the tripwire setup for.\n */\n @attr('number', { defaultValue: -1 })\n declare direction: number;\n\n /**\n * The maximum numbers of people that can be in the queue before an alert is triggered.\n */\n @attr('array', { defaultValue: () => DEFAULT_PERSON_COUNT_THRESHOLDS })\n declare maxQueueSizes: number[];\n\n /**\n * The maximum times people in the queue have to wait before an alert is triggered, in seconds.\n */\n @attr('array', { defaultValue: () => DEFAULT_WAIT_TIME_THRESHOLDS })\n declare maxWaitTimes: number[];\n\n /**\n * If Business Occupancy, what are the maximum occupancy thresholds.\n */\n @attr('array', { defaultValue: () => DEFAULT_PERSON_COUNT_THRESHOLDS })\n declare maximumOccupancies: number[];\n\n /**\n * If Crowd Gathering, what are the maximum crowd sizes.\n */\n @attr('array', { defaultValue: () => DEFAULT_PERSON_COUNT_THRESHOLDS })\n declare maximumCrowdSizes: number[];\n\n /**\n * The minimum selectable date for the heat map in the units time zone.\n */\n @attr('date')\n declare heatMapMinDateUnit: Date;\n\n /**\n * Whether we want to include the metric data for previous versions of this rule.\n */\n @attr('boolean', { defaultValue: true })\n declare includeMetricsFromOldVersions: boolean;\n\n /**\n * The description of the timeframe of the schedule for the Perimeter Guard rule.\n */\n @attr('string', { defaultValue: '' })\n declare perimeterGuardTimeframeDescription: string;\n\n /**\n * Whether the panel notification is enabled.\n */\n @attr('boolean', { defaultValue: false })\n declare hasPanelNotification: boolean;\n\n /**\n * Video panel notification format.\n */\n @attr('number', { defaultValue: AttachThumbnail })\n declare panelNotificationFormat: number;\n\n /**\n * List of Familiar Vehicle IDs that are configured with a vehicle notification filter\n */\n @attr('array', { defaultValue: () => [] })\n declare vehicleNotificationFilters: string[];\n\n /**\n * List of Familiar Face IDs that are configured with a face notification filter\n */\n @attr('array', { defaultValue: () => [] })\n declare familiarFaceNotificationFilters: string[];\n\n /**\n * List of Familiar Vehicle IDs that are configured with a video-analytics light rule filter.\n */\n @attr('array', { defaultValue: () => [] })\n declare vehicleLightRuleFilters: string[];\n\n /**\n * Filter on irregular shape or motion.\n */\n @attr('boolean', { defaultValue: false })\n declare filterIrregularShapeOrMotion: boolean;\n\n /**\n * Filter on object size change.\n */\n @attr('boolean', { defaultValue: false })\n declare filterObjectSizeChange: boolean;\n\n /**\n * Maximum object size change ratio for filtering on object size change.\n */\n @attr('number', { defaultValue: 1.5 })\n declare maximumObjectSizeChangeRatio: number;\n\n /**\n * Parcel detection event types active for this rule.\n */\n @attr('array', { defaultValue: () => [] })\n declare activeParcelDetectionEvents: number[];\n\n /**\n * Whether parcel detection is active for this rule.\n */\n @computed('activeParcelDetectionEvents.length')\n get isParcelDetectionActive(): boolean {\n return this.activeParcelDetectionEvents.length > 0;\n }\n\n /**\n * The touchless ring rule for this rule.\n */\n @belongsTo('video/touchless-ring-rule', { async: true, inverse: null })\n declare touchlessRingRule: AsyncBelongsTo;\n\n /**\n * The siren rule for this OV rule.\n */\n @belongsTo('video/perimeter-guard-config', { async: true, inverse: null })\n declare perimeterGuardConfig: AsyncBelongsTo;\n\n // region OV Ready 2.1\n\n /**\n * The list of filter types used for triggering the rule.\n */\n @attr('array')\n declare ruleClassificationFilters: number[];\n\n // region Parcel Detection rules\n\n /**\n * Whether Package is a selectable detection type for this rule.\n * This creates a Parcel Detection rule on the camera, if it is supported.\n */\n @attr('boolean', { defaultValue: false })\n declare canCreateParcelRule: boolean;\n\n /**\n * The parcel detection rule for this rule.\n */\n @belongsTo('video/parcel-detection-rule', { async: true, inverse: null })\n declare parcelDetectionRule: AsyncBelongsTo;\n\n // endregion\n\n // endregion\n\n /** @override */\n get shouldRollbackRelationships(): boolean {\n return true;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/ov-rule': OvRule;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport RecordModel from '../activity/record';\n\nimport type VideoEvent from './video-event';\n\n/**\n * An OVReady2 event that does not contain a video event id, but has a parent alert.\n * Currently only applicable for package alerts.\n */\nexport default class Ov2Event extends RecordModel {\n /**\n * The OVReady2 event id.\n */\n @attr('number')\n declare eventId: number;\n\n /**\n * The video event associated with the OVReady 2 event.\n */\n @belongsTo('video/video-event', { async: false, inverse: null })\n declare videoEvent: VideoEvent;\n\n /**\n * The URL that can be used to retrieve the snapshot image of this OVReady event.\n */\n @attr('string')\n declare thumbnail: string;\n\n /**\n * Whether the Ov2Event contains a cropped parcel snapshot.\n */\n @attr('boolean')\n declare isCroppedParcel: boolean;\n\n /**\n * The orientation of the snapshot.\n * Horizontal if it's a cropped parcel,\n * otherwise use the orientation of the camera that recorded associated video event.\n */\n @computed('isCroppedParcel', 'videoEvent.orientation')\n get orientation(): string {\n if (this.isCroppedParcel) {\n return 'horizontal';\n }\n\n return this.videoEvent ? this.videoEvent.orientation : 'vertical';\n }\n\n /**\n * Whether we should treat the OVReady2 event as deleted.\n * For now, we treat all instances without an associated clip as \"deleted.\"\n */\n @computed('videoEvent.isEventDeleted')\n get isEventDeleted(): boolean {\n return this.videoEvent ? this.videoEvent.isEventDeleted : true;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/ov2-event': Ov2Event;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classDesc\n *\n * Parcel detection rule model.\n */\nexport default class ParcelDetectionRule extends BaseModel {\n /**\n * List of dictionaries which represent (X,Y) coordinates.\n */\n @attr('array')\n declare points: Record[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/parcel-detection-rule': ParcelDetectionRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { or } from '@ember/object/computed';\nimport AIDeterrenceLanguageType from 'customer-site/enums/AIDeterrenceLanguageType';\nimport AIDeterrenceMessageType from 'customer-site/enums/AIDeterrenceMessageType';\nimport AIDeterrenceVoiceType from 'customer-site/enums/AIDeterrenceVoiceType';\nimport { None } from 'customer-site/enums/PerimeterGuardAudioOption';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { LightAlertOption } from 'customer-site/enums/LightAlertOption';\nimport type { AIPerimeterGuardType } from 'customer-site/utils/video/settings/ai-perimeter-guard-type';\n\n/**\n * Video siren rule.\n */\nexport default class VideoPerimeterGuardConfig extends BaseModel {\n /**\n * Is light alerts enabled?\n */\n @attr('boolean')\n declare lightEnabled: boolean;\n\n /**\n * Selected light alert option.\n */\n @attr('number')\n declare lightAlertOption: LightAlertOption;\n\n @attr('number', { defaultValue: 0 })\n declare aIPerimeterGuardType: AIPerimeterGuardType;\n\n /**\n * Floodlight brightness.\n */\n @attr('number', { defaultValue: 100 })\n declare floodlightBrightness: number;\n\n /**\n * Is LED enabled for this rule?\n */\n @attr('boolean', { defaultValue: false })\n declare ledEnabled: boolean;\n\n /**\n * LED duration in seconds.\n */\n @attr('number', { defaultValue: 10 })\n declare ledDurationSeconds: number;\n\n /**\n * Red LED RGB value.\n */\n @attr('number')\n declare ledRed: number;\n\n /**\n * Green LED RGB value.\n */\n @attr('number')\n declare ledGreen: number;\n\n /**\n * Blue LED RGB value.\n */\n @attr('number')\n declare ledBlue: number;\n\n /**\n * LED brightness value.\n */\n @attr('number')\n declare ledBrightness: number;\n\n /**\n * LED pulse in milliseconds.\n */\n @attr('number')\n declare ledPulseMilliseconds: number;\n\n /**\n * Is the siren sound enabled for this rule?\n */\n @attr('boolean', { defaultValue: false })\n declare audioEnabled: boolean;\n\n /**\n * Audio duration in seconds.\n */\n @attr('number', { defaultValue: 3 })\n declare audioDuration: number;\n\n /**\n * Audio option.\n */\n @attr('number', { defaultValue: None })\n declare audioOption: number;\n\n /**\n * Audio siren volume\n */\n @attr('number', { defaultValue: 100 })\n declare audioVolume: number;\n\n /**\n * Minimum delay (in seconds) between siren rule alerts.\n */\n @attr('number', { defaultValue: 180 })\n declare minimumDelaySeconds: number;\n\n /**\n * The days portion of the subschedule for Perimeter Guard rule.\n */\n @attr('number', { defaultValue: 127 })\n declare dayBits: number;\n\n /**\n * The start time in minutes of the subschedule for Perimeter Guard rule.\n */\n @attr('number', { defaultValue: 0 })\n declare startTime: number;\n\n /**\n * The end time in minutes of the subschedule for Perimeter Guard rule.\n */\n @attr('number', { defaultValue: 1440 })\n declare endTime: number;\n\n @attr('string', { defaultValue: '' })\n declare cameraViewDescriptor: string;\n\n /**\n * Audio siren volume\n */\n @attr('number', { defaultValue: 10 })\n declare aiDeterrenceMessageVolume: number;\n\n /**\n * Should the AI Deterrence sound's volume be boosted?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldBoostVolumeGain: boolean;\n\n /**\n * What cameras on this account have AI Deterrence enabled?\n */\n @attr()\n declare camerasWithAiDeterrence: number[];\n\n /**\n * Does this camera already have AI Deterrence enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare doesDeviceHaveAiDeterrenceEnabled: boolean;\n\n /**\n * How many AI Deterrence cameras is the user allowed to have on their account?\n */\n @attr('number')\n declare aiDeterrenceMaxCameraQuota: number;\n\n /**\n * Does this user have the two-way audio add on (Audio for non-doorbell cameras)\n * and did they accept either the V1 or V2 audio agreement?\n */\n @attr('boolean', { defaultValue: false })\n declare hasTwoWayAudioAddOnAndAcceptedAudioAgreement: boolean;\n\n /**\n * What type of message is being broadcast? Deterrence, Property Closed, Expecting Delivery, etc.\n */\n @attr('number', { defaultValue: AIDeterrenceMessageType.Deterrence })\n declare aiDeterrenceMessageType: AIDeterrenceMessageType;\n\n /**\n * Does the message have a subtype that modifies how its broadcast? e.g. Deterrence with or without scene description.\n */\n @attr('number', { defaultValue: AIDeterrenceMessageType.None })\n declare aiDeterrenceMessageSubType: AIDeterrenceMessageType;\n\n /**\n * Which voice should be used by AI Deterrence. Options available are dependent on the message type\n */\n @attr('number', { defaultValue: AIDeterrenceVoiceType.SteveAngry })\n declare aiDeterrenceVoiceType: AIDeterrenceVoiceType;\n\n /**\n * Should the AI Deterrence responses be randomized?\n */\n @attr('boolean', { defaultValue: false })\n declare enableRandomization: boolean;\n\n /**\n * What language should be used for AI Deterrence?\n */\n @attr('number', { defaultValue: AIDeterrenceLanguageType.English_US_Azure })\n declare languageType: AIDeterrenceLanguageType;\n\n /**\n * The user input for AI Deterrence Free-Text\n */\n @attr('string', { defaultValue: '' })\n declare aiDeterrenceFreeText: string;\n\n /**\n * Are any Perimeter Guard settings currently enabled?\n */\n @or('audioEnabled', 'ledEnabled', 'lightEnabled')\n declare enabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/perimeter-guard-config': VideoPerimeterGuardConfig;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * A model containing permissions specific to device association.\n */\nexport default class AssociatedDevicesPermission extends Model {\n /**\n * Whether this user can edit associated devices.\n */\n @attr('boolean')\n declare canEditAssociatedDevices: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/associated-devices-permission': AssociatedDevicesPermission;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Clips Usage Report permissions model.\n */\nexport default class ClipsUsageReportPermission extends Model {\n /**\n * Whether this user can view z-wave locks.\n */\n @attr('boolean', { defaultValue: false })\n declare hasZwaveLocksReadAccess: boolean;\n\n /**\n * Whether this user can view VA rules.\n */\n @attr('boolean', { defaultValue: false })\n declare hasVideoAnalyticsReadAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/clips-usage-report-permission': ClipsUsageReportPermission;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * A model containing permissions specific to Onboard recording.\n */\nexport default class OnboardPermission extends Model {\n /**\n * The maximum number of Onboard recording schedules the customer is allowed to create.\n * Customers are limited if they have the Pro Video with Analytics 3000 Service Plan, but do not have SDCardRecordingBeta permissions.\n * This will be -1 if there is no limit.\n */\n @attr('number')\n declare maxTotalSchedules: number;\n\n /**\n * Does the user have permission to view the VSR Audio page in the mobile app?\n */\n @attr('boolean')\n declare mobileAppSupportsRedirectingToVsrAudioPage: boolean;\n\n /**\n * Does the user have permission to view the VSR Audio page in the customer site?\n */\n @attr('boolean')\n declare webSupportsRedirectingToVsrAudioPage: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/onboard-permission': OnboardPermission;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * OV rule permissions model.\n */\nexport default class OvRulePermission extends Model {\n /**\n * Whether this user can edit video analytics rules.\n */\n @attr('boolean', { defaultValue: true })\n declare hasAnalyticsEditPermission: boolean;\n\n /**\n * Whether this user can edit Business Activity Analytics rules.\n */\n @attr('boolean', { defaultValue: false })\n declare hasBaaEditPermission: boolean;\n\n /**\n * Whether this user can edit locked rules.\n */\n @attr('boolean')\n declare canEditLockedRules: boolean;\n\n /**\n * Whether this user can use the vacation watch feature.\n */\n @attr('boolean', { defaultValue: false })\n declare canUseVacationWatch: boolean;\n\n /**\n * Whether this user can edit Remote Video Monitoring rules.\n */\n @attr('boolean')\n declare canEditEscalatedEventRules: boolean;\n\n /**\n * Whether animal events have been excluded for the customer.\n * This value is based on whether the customer has the ExcludeVideoAnalyticsAnimalEvents permission.\n */\n @attr('boolean', { defaultValue: false })\n declare areAnimalEventsExcluded: boolean;\n\n /**\n * Whether delivery vehicle events are included for the customer.\n */\n @attr('boolean', { defaultValue: false })\n declare isDeliveryVehicleIncluded: boolean;\n\n /**\n * Whether the customer can set extended ground zone loiter options.\n */\n @attr('boolean', { defaultValue: false })\n declare canSetExtendedLoiterOptions: boolean;\n\n /**\n * Whether the customer's MMS notifications are disabled.\n */\n @attr('boolean', { defaultValue: false })\n declare disableMMSVideoNotifications: boolean;\n\n /**\n * Whether the customer should see the SMS warning message.\n */\n @attr('boolean', { defaultValue: false })\n declare canShowSMSWarning: boolean;\n\n /**\n * Whether AI Perimeter Guard with image processing is enabled\n */\n @attr('boolean', { defaultValue: false })\n declare hasAiDeterrenceFeatureToggle: boolean;\n\n /**\n * Whether the customer has the AIDeterrenceServicePackage\n */\n @attr('boolean', { defaultValue: false })\n declare hasAiDeterrenceServicePlan: boolean;\n\n /**\n * What cameras on this account have AI Deterrence enabled?\n */\n @attr('array', { defaultValue: () => [] })\n declare camerasWithAiDeterrence: number[];\n\n /**\n * How many AI Deterrence cameras is the user allowed to have on their account?\n */\n @attr('number', { defaultValue: 0 })\n declare aiDeterrenceMaxCameraQuota: number;\n\n /**\n * Does this user have permission to use Exit Delay for analytics rules?\n */\n @attr('boolean', { defaultValue: false })\n declare canUseExitDelay: boolean;\n\n /**\n * Does this user have the two-way audio add on (Audio for non-doorbell cameras)\n * and did they accept either the V1 or V2 audio agreement?\n */\n @attr('boolean', { defaultValue: false })\n declare hasTwoWayAudioAddOnAndAcceptedAudioAgreement: boolean;\n\n /**\n * Can this user access the AI Deterrence Response Configuration?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessAiDeterrenceResponseConfiguration: boolean;\n\n /**\n * If the customer has camera arming access.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCameraArmingAccess: boolean;\n\n /**\n * Does this user have permission to use Panel Armed Away or Property Status Away as recording exceptions?\n */\n @attr('boolean', { defaultValue: false })\n declare canUseAwayRecordingException: boolean;\n\n /**\n * Exit Delay Rule default value from dealer parameter\n */\n @attr('number', { defaultValue: 0 })\n declare videoRuleExitDelayDefault: number;\n\n /**\n * Can the user access the randomized messages checkbox during AI Deterrence rule creation?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessAiDeterrenceRandomizedMessages: boolean;\n\n /**\n * Allows customer to use cancel verify for remote video access features.\n */\n @attr('boolean', { defaultValue: false })\n declare canClientCancelVerifyEscalatedEvent: boolean;\n\n /**\n * Can the user access the language settings dropdown during AI Deterrence rule creation?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessAiDeterrenceLanguageConfiguration: boolean;\n\n /**\n * Can the user access the AI Deterrence Free-Text UI during rule creation?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessAiDeterrenceFreeTextEntry: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/ov-rule-permission': OvRulePermission;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Video clip permissions model.\n */\nexport default class SavedClipPermissions extends Model {\n /**\n * Whether this user can view saved video clips.\n */\n @attr('boolean')\n declare canView: boolean;\n\n /**\n * Whether this user can rename and toggle clip protection.\n */\n @attr('boolean')\n declare canNameAndProtect: boolean;\n\n /**\n * Whether this user can delete saved video clips.\n */\n @attr('boolean')\n declare canDelete: boolean;\n\n /**\n * Whether clip donation is enabled for this user.\n */\n @attr('boolean')\n declare isClipDonationEnabled: boolean;\n\n /**\n * Whether VMD is enabled for this user.\n */\n @attr('boolean')\n declare isVMDEnabled: boolean;\n\n /**\n * Indicates the account has video analytic cameras, and the user has permission to view analytic classification.\n */\n @attr('boolean')\n declare hasVideoAnalytics: boolean;\n\n /**\n * Indicates this customer can view clips recorded by a central monitoring station.\n */\n @attr('boolean')\n declare canViewCentralMonitoringStationClips: boolean;\n\n /**\n * Indicates the user has permission to view the customer-facing knowledge base.\n */\n @attr('boolean')\n declare canViewKnowledgeBase: boolean;\n\n /**\n * Can this account view Copy Link and Email Link options for video?\n */\n @attr('boolean')\n declare canViewVideoLinkShareOptions: boolean;\n\n /**\n * Can this account view the Delivery Vehicle object detection filter?\n */\n @attr('boolean')\n declare canViewDeliveryVehicle: boolean;\n\n /**\n * Has this customer opted-in to Familiar Vehicle recognition?\n */\n @attr('boolean', { defaultValue: false })\n declare hasFamiliarVehicles: boolean;\n\n /**\n * Has this customer opted-in to Familiar Face recognition?\n */\n @attr('boolean', { defaultValue: false })\n declare hasFamiliarFaces: boolean;\n\n /**\n * Does the customer have 'User Selected' filter?\n */\n @attr('boolean', { defaultValue: false })\n declare hasUserSelectedFilter: boolean;\n\n /**\n * What is the maximum number of clips that we are allowed to query from the database?\n */\n @attr('number', { defaultValue: 500 })\n declare maxClipCapacityForQuerying: number;\n\n /**\n * Does the customer have multi vehicle feedback?\n */\n @attr('boolean', { defaultValue: false })\n declare multiVehicleFeedbackEnabled: boolean;\n\n /**\n * Does the customer have access to third party camera metadata analytics?\n */\n @attr('boolean', { defaultValue: false })\n declare hasThirdPartyCameraAnalytics: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/saved-clip-permission': SavedClipPermissions;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Video settings permissions model.\n */\nexport default class VideoSettingsPermission extends Model {\n /**\n * Whether this user has the VideoSettingsUpgrade feature toggle enabled.\n */\n @attr('boolean')\n declare hasVideoSettingsUpgrades: boolean;\n\n /**\n * Can the user edit the video settings? Only true if they have ViewChangeCameraSettings set to ReadWrite.\n */\n @attr('boolean')\n declare canUserEditVideoSettings: boolean;\n\n /**\n * Does the user have the Video Device Audio service plan and have they accepted the audio agreement?\n */\n @attr('boolean', { defaultValue: false })\n declare hasAudioAddOnAndAcceptedAgreement: boolean;\n\n /**\n * Does the user have the 3PC 2WA Feature Toggle?\n */\n @attr('boolean', { defaultValue: false })\n declare hasThirdPartyCameraTwoWayAudio: boolean;\n\n /**\n * Can the user toggle dewarping for ONVIF cameras?\n */\n @attr('boolean', { defaultValue: false })\n declare canToggleDewarping: boolean;\n\n /**\n * Can this SVR access management options?\n */\n @attr('boolean', { defaultValue: false })\n declare canAccessSvrManagement: boolean;\n\n /**\n * Does the user have audio permissions?\n */\n @attr('boolean', { defaultValue: false })\n declare hasAudioPermissions: boolean;\n\n /**\n * Does the user only have familiar vehicle access?\n */\n @attr('boolean', { defaultValue: false })\n declare hasOnlyFamiliarVehicleAccess: boolean;\n\n /**\n * Does the user only have familiar face access?\n */\n @attr('boolean', { defaultValue: false })\n declare hasOnlyFamiliarFaceAccess: boolean;\n\n /**\n * Does the user have both familiar face and vehicle access?\n */\n @attr('boolean', { defaultValue: false })\n declare hasFamiliarFaceAndVehicleAccess: boolean;\n\n /**\n * Does the user have access to the settings pages for a V731B?\n */\n @attr('boolean', { defaultValue: false })\n declare hasV731BVideoSettingsPagesAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/video-settings-permission': VideoSettingsPermission;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Permissions collection for the video streaming routes.\n */\nexport default class VideoStreamingPermissionsCollection extends Model {\n /**\n * Can this user view the manage camera groups page?\n */\n @attr('boolean')\n declare canViewManageCameraGroups: boolean;\n\n /**\n * Can this user edit camera groups?\n */\n @attr('boolean')\n declare canEditCameraGroups: boolean;\n\n /**\n * Does this user have access to view analytics information?\n */\n @attr('boolean')\n declare hasVideoAnalyticsReadAccess: boolean;\n\n /**\n * Can this user view the event history sidebar?\n */\n @attr('boolean')\n declare canViewEventSidebar: boolean;\n\n /**\n * Can the customer use beta video web player features?\n */\n @attr('boolean')\n declare hasVideoWebPlayerFeaturesBeta: boolean;\n\n /**\n * Can the streaming pages show the add camera page link?\n */\n @attr('boolean')\n declare showAddCameraLink: boolean;\n\n /**\n * Can the customer upload video clip from timeline to the cloud?\n */\n @attr('boolean')\n declare canUploadFrom247ToCloud: boolean;\n\n /**\n * Can the user set the default resolution for streaming (HD or non-HD)?\n */\n @attr('boolean')\n declare canSetDefaultResolution: boolean;\n\n /**\n * If we should use the modified camera selection, so that changing cameras on one of live/sd/svr playback pages impacts selected cameras on the others\n */\n @attr('boolean')\n declare hasModifiedCameraSelection: boolean;\n\n /*\n * The time (in minutes) an operator can view live video after an alarm or Remote Video Monitoring Console event.\n */\n @attr('number')\n declare centralStationLiveViewDuration: number;\n\n /**\n * Does this session have two-way talkdown permissions and is within the operator portal?\n */\n @attr('boolean')\n declare hasTwoWayTalkdownInOperatorPortalPermissions: boolean;\n\n /**\n * Is live view buzz door access feature toggle enabled?\n */\n @attr('boolean')\n declare hasLiveViewBuzzDoorAccess: boolean;\n\n /**\n * Do we have attribute search\n */\n @attr('boolean')\n declare hasAttributeSearch: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/permissions/video-streaming-permissions-collection': VideoStreamingPermissionsCollection;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\nexport default class QualitativePowerCheck extends Model {\n @attr('number')\n declare result: number;\n\n @attr('number')\n declare source: number;\n\n @attr('boolean')\n declare isTelusDealerId: boolean;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/post-install/qualitative-power-check': QualitativePowerCheck;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { Point } from 'customer-site/utils/math-methods';\n\n/**\n * Model for a privacy zone.\n */\nexport default class PrivacyZone extends BaseModel {\n /**\n * Whether the privacy zone is enabled (visible).\n */\n @attr('boolean', { defaultValue: false })\n declare enabled: boolean;\n\n /**\n * The coordinates of the privacy zone.\n */\n @attr()\n declare points: Array;\n\n /**\n * This model is calling the old toJSON method for some reason, so override it with the new implementation.\n * TODO: Remove this once the deprecation is updated.\n * @override\n */\n toJSON(options?: { includeId?: boolean }): object {\n return this.serialize(options);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/privacy-zone': PrivacyZone;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { None } from 'customer-site/enums/DrawShape';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type PrivacyZone from 'customer-site/models/video/privacy-zone';\n\n/**\n * Model for privacy zones settings.\n */\nexport default class PrivacyZonesSetting extends BaseModel {\n /**\n * Whether the user can edit privacy zones.\n */\n @attr('boolean', { defaultValue: false })\n declare canEditPrivacyZones: boolean;\n\n /**\n * The privacy zones on a given camera.\n */\n @attr()\n declare privacyZones: Record;\n\n /**\n * The shape of this camera's privacy zones.\n * If the camera doesn't support privacy zones, it will have a shape of None.\n */\n @attr('number', { defaultValue: None })\n declare privacyZoneShape: number;\n\n /**\n * Whether at least one privacy zone is paused.\n */\n @attr('boolean', { defaultValue: false })\n declare someZonesPaused: boolean;\n\n /**\n * The IDs of any OvRules configured on a given camera.\n */\n @attr()\n declare ovRuleIds: Array;\n\n /**\n * Whether at least one privacy zone is enabled.\n */\n @computed('privacyZones')\n get someZonesEnabled(): boolean {\n return Object.values(this.privacyZones).some((privacyZone) => privacyZone.enabled);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/privacy-zones-setting': PrivacyZonesSetting;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type OvRule from 'customer-site/models/video/ov-rule';\n\nconst HighUsagePercent = 50;\n\n/**\n * Model for the rule usage.\n */\nexport default class RuleUsage extends BaseModel {\n /**\n * The rule.\n */\n @belongsTo('video/ov-rule', { async: true, inverse: null })\n declare rule: AsyncBelongsTo;\n\n /**\n * The total cloud storage percent used by the rule's clips.\n */\n @attr('number', { defaultValue: 0 })\n declare percentUsed: number;\n\n get isAtHighUsage(): boolean {\n return this.percentUsed >= HighUsagePercent;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/rule-usage': RuleUsage;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { EVERY_DAY_BITS } from '../../../utils/datetime';\nimport Schedule from '../../automation/schedules/schedule';\n\n/**\n * Model for holding user-created video recording schedule information.\n */\nexport default class BaseVideoSchedule extends Schedule {\n /** @override */\n displayType = 7;\n\n /**\n * Time duration of schedule when triggered.\n */\n @attr('number', { defaultValue: 86400 })\n declare duration: number;\n\n /**\n * The day bits determining which days this schedule is run.\n * Default value is set to be every day.\n */\n @attr('number', { defaultValue: EVERY_DAY_BITS })\n declare dayBits: number;\n\n /**\n * The local time that this schedule's schedule starts, in minutes.\n * Default value is set to be the start of the day, as if always running.\n */\n @attr('number', { defaultValue: 0 })\n declare startTime: number;\n\n /**\n * The local time that this schedule's schedule ends, in minutes.\n * If greater than 1440, this schedules goes into the next day.\n * Default value is set to be the end of the day, as if always running.\n */\n @attr('number', { defaultValue: 1440 })\n declare stopTime: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/schedules/base-video-schedule': BaseVideoSchedule;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { Medium } from '../../../enums/SdRecordingQuality';\nimport BaseVideoSchedule from './base-video-schedule';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type SdCardCamera from '../devices/sd-card-camera';\nimport type SdCard from '../sd-card';\n\n/**\n * Model for holding user-created video SDc card recording schedule information.\n */\nexport default class SdCardRecordingSchedule extends BaseVideoSchedule {\n /** @override */\n isDetached = false;\n\n /** @override */\n isSuggested = false;\n\n /**\n * Camera which supports and has an sd card associated with this schedule.\n */\n @belongsTo('video/devices/sd-card-camera', { async: true, inverse: 'sdCardRecordingSchedule' })\n declare camera: AsyncBelongsTo;\n\n /**\n * The SD card associated with this schedule.\n */\n @belongsTo('video/sd-card', { async: true, inverse: 'recordingSchedule' })\n sdCard?: AsyncBelongsTo;\n\n /**\n * The recording quality enum.\n */\n @attr('number', { defaultValue: Medium })\n declare recordingQuality: number;\n\n /**\n * Is SD card audio recording enabled for this schedule?\n */\n @attr('boolean', { defaultValue: false })\n declare audioRecordingEnabled: boolean;\n\n /**\n * Is SD card automated recovery enabled for this schedule?\n */\n @attr('boolean', { defaultValue: true })\n declare automatedRecoveryEnabled: boolean;\n\n /**\n * The retention period, in days.\n * This value is null if the user has this setting toggled off,\n * which defaults to int max in the back-end.\n */\n @attr('number')\n declare retentionPeriod: number;\n\n /**\n * Is smart rate control enabled for this camera?\n */\n @attr('boolean', { defaultValue: false })\n declare smartRateControlEnabled: boolean;\n\n /**\n * What should be the maximum bitrate for the sd card stream be set as?\n */\n @attr('number', { defaultValue: 0 })\n declare maximumBitrate: number;\n\n /**\n * Does the camera support high-speed (8x and 16x) playback?\n */\n @attr('boolean', { defaultValue: false })\n declare cameraSupportsHighSpeedPlayback: boolean;\n\n /**\n * Should the confirmation modal be shown to the user or has the user confirmed that they want to upgrade to a newer firmware?\n */\n @attr('boolean', { defaultValue: false })\n declare confirmUpgradeFirmware: boolean;\n\n /**\n * Should the confirmation modal be shown to the user or has the user confirmed that they want to reformat the SD card?\n */\n @attr('boolean', { defaultValue: false })\n declare confirmReformat: boolean;\n\n /**\n * Should the confirmation modal be shown to the user or has the user confirmed that they want to delete the SD footage?\n */\n @attr('boolean', { defaultValue: false })\n declare confirmDeleteFootage: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/schedules/sd-card-recording-schedule': SdCardRecordingSchedule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Information related to storage usage for the current sd card camera.\n */\nexport default class SdCardCameraUsageInfo extends BaseModel {\n /**\n * Earliest recording date in local time.\n */\n @attr('string')\n declare earliestSdRecord: string;\n\n /**\n * The total days of recording (excluding recording gaps).\n */\n @attr('number')\n declare daysOfSdRecording: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/sd-card-camera-usage-info': SdCardCameraUsageInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for SD card thumbnail endpoint.\n * This needs its own model because it has a token with expiration time, so we need to constantly reload it from the backend.\n */\nexport default class SdCardThumbnailEndpoint extends BaseModel {\n /**\n * Thumbnail URL endpoint.\n */\n @attr('string')\n declare url: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/sd-card-thumbnail-endpoint': SdCardThumbnailEndpoint;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type TroubleConditionsService from 'customer-site/services/trouble-conditions';\nimport type SdCardCamera from './devices/sd-card-camera';\nimport type SdCardRecordingSchedule from './schedules/sd-card-recording-schedule';\n\n/**\n * The API prefix for SdCard model requests.\n */\nconst apiPrefix = 'video/sdCards';\n\n/**\n * Refreshes the SD card status by getting the most updated information from the device.\n */\nexport function refresh(ajax: AjaxService, id: string): Promise> {\n return ajax.apiRequest>(`${apiPrefix}/refresh/${id}`, undefined, undefined, POST);\n}\n\n/**\n * Reformats the SD card.\n */\nexport function reformat(\n ajax: AjaxService,\n troubleConditions: TroubleConditionsService,\n id: string\n): Promise> {\n return ajax\n .apiRequest>(`${apiPrefix}/reformat/${id}`, undefined, undefined, POST)\n .then((reformattedSdCard) => {\n // Refresh the customer's trouble conditions so that any SD card trouble conditions\n // get recomputed if the customer navigates to the Alerts & Issues page.\n troubleConditions.refresh();\n return reformattedSdCard;\n });\n}\n\n/**\n * Model for SD cards.\n */\nexport default class SdCard extends BaseModel {\n /**\n * The time that this SD card's information was last updated,\n * or null if it was updated very recently.\n */\n @attr('date')\n declare lastUpdatedDateUtc: Date;\n\n /**\n * The status enum corresponding to the status of the SD card itself.\n */\n @attr('number', { defaultValue: 0 })\n declare sdCardStatusEnum: number;\n\n /**\n * The status enum corresponding to the recording status.\n */\n @attr('number', { defaultValue: 0 })\n declare recordingStatusEnum: number;\n\n /**\n * The SD card recording schedule's active days and times as a formatted string depending on the customer's culture.\n */\n @attr('string', { defaultValue: '' })\n declare activeScheduleTimes: string;\n\n /**\n * The product name of the SD card.\n */\n @attr('string', { defaultValue: '' })\n declare name: string;\n\n /**\n * The make (or product name) of the SD card.\n */\n @attr('string', { defaultValue: '' })\n declare make: string;\n\n /**\n * The storage capacity (in GB) of the SD card.\n */\n @attr('number', { defaultValue: 0 })\n declare storageCapacityGb: number;\n\n /**\n * The date (in UTC) of the earliest recorded video on the SD card.\n */\n @attr('date')\n declare oldestRecordedVideoUtc: Date;\n\n /**\n * The total recorded video time (in seconds) on the SD card.\n */\n @attr('number', { defaultValue: 0 })\n declare recordedTimeSeconds: number;\n\n /**\n * Does the SD card support 4MP recording?\n */\n @attr('boolean', { defaultValue: false })\n declare supports4MpRecording: boolean;\n\n /**\n * The SD card camera that this SD card is associated with.\n */\n @belongsTo('video/devices/sd-card-camera', { async: true, inverse: 'sdCard' })\n camera?: AsyncBelongsTo;\n\n /**\n * The SD card recording schedule that this SD card is associated with.\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @belongsTo('video/schedules/sd-card-recording-schedule', { async: true, inverse: 'sdCard' })\n recordingSchedule?: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/sd-card': SdCard;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type { LightAlertOption } from 'customer-site/enums/LightAlertOption';\n\n/**\n * @classdesc\n * The settings model for the alerts settings page.\n */\nexport default class AlertsSetting extends BaseVideoSetting {\n /**\n * Does this camera support toggling the microphone/speaker setting?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsTogglingMicrophoneSpeaker: boolean;\n\n /**\n * Is audio alert enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isAudioAlertEnabled: boolean;\n\n /**\n * Audio alert volume percentage.\n */\n @attr('number', { defaultValue: 0 })\n declare audioAlertVolume: number;\n\n /**\n * The selected audio option\n */\n @attr('number')\n declare audioOption: number;\n\n /**\n * Available audio alert options for the camera.\n */\n @attr('array')\n declare availableAudioOptions: number[];\n\n /**\n * The manually triggered alert feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare alertSupport: number;\n\n /**\n * The manually triggered light alert feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare lightAlertSupport: number;\n\n /**\n * The light alert feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('boolean', { defaultValue: false })\n declare isLightAlertEnabled: boolean;\n\n /**\n * Light alert brightness percentage for the floodlights.\n */\n @attr('number', { defaultValue: 0 })\n declare lightAlertBrightness: number;\n\n /**\n * Selected light alert option.\n */\n @attr('number')\n declare lightAlertOption: LightAlertOption;\n\n /**\n * Available light alert options for the camera.\n */\n @attr('array')\n declare availableLightAlertOptions: LightAlertOption[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/alerts-setting': AlertsSetting;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type ChimeToneSetting from './chime-tone-setting';\nimport type MicrophoneSpeakerSetting from './microphone-speaker-setting';\n\n/**\n * @classdesc\n * The settings model for the audio settings page.\n * Contains smaller models pertaining to microphone/speaker, chime, and tone settings.\n */\nexport default class AudioSetting extends BaseVideoSetting {\n /**\n * The microphone and speaker settings of the camera.\n */\n @belongsTo('video/settings/microphone-speaker-setting', { async: false, inverse: null })\n declare microphoneSpeakerSetting: MicrophoneSpeakerSetting;\n\n /**\n * The chime and tone settings of the camera.\n */\n @belongsTo('video/settings/chime-tone-setting', { async: false, inverse: null })\n declare chimeToneSetting: ChimeToneSetting;\n\n /**\n * Has the customer accepted the audio agreement?\n */\n @attr('boolean', { defaultValue: true })\n declare hasCustomerAcceptedAudioAgreement: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/audio-setting': AudioSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The base video settings of the camera.\n * Contains properties that all video settings models have.\n */\nexport default class BaseVideoSetting extends BaseModel {\n /**\n * Can the user edit the video settings? Only true if they have ViewChangeCameraSettings set to ReadWrite.\n */\n @attr('boolean', { defaultValue: false })\n declare canUserEditVideoSettings: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/base-video-setting': BaseVideoSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { High, Off } from 'customer-site/enums/ChimeLevel';\nimport { None } from 'customer-site/enums/DoorbellChimeType';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The chime and tone settings model.\n * Contains properties pertaining the camera's chime and tone settings.\n */\nexport default class ChimeToneSetting extends BaseModel {\n /**\n * The indoor chime enable disable feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare indoorChimeEnableDisableFeatureSupport: number;\n\n /**\n * Is the indoor chime on?\n */\n @attr('boolean', { defaultValue: false })\n declare isIndoorChimeOn: boolean;\n\n /**\n * The indoor chime type feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare indoorChimeTypeFeatureSupport: number;\n\n /**\n * The selected chime type enum (None, Mechanical, Digital).\n */\n @attr('number', { defaultValue: None })\n declare selectedChimeType: number;\n\n /**\n * The chime type options.\n */\n @attr('array')\n declare chimeTypeOptions: number[];\n\n /**\n * The outdoor tone enable disable feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare outdoorToneEnableDisableFeatureSupport: number;\n\n /**\n * Is the outdoor tone on?\n */\n @attr('boolean', { defaultValue: false })\n declare isOutdoorToneOn: boolean;\n\n /**\n * The outdoor tone volume feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare outdoorToneVolumeFeatureSupport: number;\n\n /**\n * The outdoor tone volume enum (None, Mechanical, Digital).\n */\n @attr('number', { defaultValue: Off })\n declare outdoorToneVolumeValue: number;\n\n /**\n * The outdoor tone volume enum (None, Mechanical, Digital).\n */\n @attr('number', { defaultValue: Off })\n declare outdoorToneVolumeMin: number;\n\n /**\n * The outdoor tone volume enum (None, Mechanical, Digital).\n */\n @attr('number', { defaultValue: High })\n declare outdoorToneVolumeMax: number;\n\n /**\n * The smart chime settings link feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare smartChimeSettingsLinkFeatureSupport: number;\n\n /**\n * The global ID of the default smart chime or the smart chime connected to the camera.\n */\n @attr('string', { defaultValue: '' })\n declare smartChimeGlobalId: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/chime-tone-setting': ChimeToneSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport DeviceConnectionStatusEnum from 'customer-site/enums/DeviceConnectionStatusEnum';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for a device status history item.\n */\nexport default class DeviceStatusHistoryItem extends BaseModel {\n /**\n * The connection status of the device. Could be Connected, Disconnected, or Unknown.\n */\n @attr('number', { defaultValue: DeviceConnectionStatusEnum.Unknown })\n declare connectionStatus: DeviceConnectionStatusEnum;\n\n /**\n * The last updated date for device status.\n */\n @attr('date')\n declare timestamp: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/device-status-history-item': DeviceStatusHistoryItem;\n }\n}\n","import { hasMany } from '@ember-data/model';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type DeviceStatusHistoryItem from './device-status-history-item';\n\n/**\n * Model for Device Status history list.\n */\nexport default class DeviceStatusHistoryList extends BaseVideoSetting {\n /**\n * The list of status history for the device.\n */\n @hasMany('video/settings/device-status-history-item', { async: false, inverse: null })\n declare deviceStatusHistoryItems: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/device-status-history-list': DeviceStatusHistoryList;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport ConnectionStatus from 'customer-site/enums/ConnectionStatus';\nimport DeviceConnectionStatusEnum from 'customer-site/enums/DeviceConnectionStatusEnum';\nimport FrequencyBandEnum from 'customer-site/enums/FrequencyBand';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type DeviceStatusHistoryList from './device-status-history-list';\n\n/**\n * Model for Device Status info.\n */\nexport default class DeviceStatusInfo extends BaseVideoSetting {\n /**\n * The SSID of the wireless network that the device is connected to.\n */\n @attr('string', { defaultValue: '' })\n declare deviceSSID: string;\n\n /**\n * The connection status of the device. Could be Connected, Disconnected, or Unknown.\n */\n @attr('number', { defaultValue: DeviceConnectionStatusEnum.Unknown })\n declare connectionStatus: DeviceConnectionStatusEnum;\n\n /**\n * The connection type of the device, wireless connection, ethernet, or unknown.\n */\n @attr('number', { defaultValue: ConnectionStatus.NotConnected })\n declare connectionType: ConnectionStatus;\n\n /**\n * The frequency band of the network.\n */\n @attr('number', { defaultValue: FrequencyBandEnum.None })\n declare frequencyBand: FrequencyBandEnum;\n\n /**\n * The last updated date for device status.\n */\n @attr('date', { defaultValue: undefined })\n declare lastUpdatedDate: Date;\n\n /**\n * The list of status history for the device.\n */\n @belongsTo('video/settings/device-status-history-list', { async: true, inverse: null })\n declare deviceStatusHistory: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/device-status-info': DeviceStatusInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The settings model for doorbell related notifications on the device.\n */\nexport default class DoorbellNotificationSetting extends BaseModel {\n /**\n * The feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare panelNotificationEnableDisableFeatureSupport: number;\n\n /**\n * Are smart chime notifications supported\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare smartChimeNotificationEnableDisableFeatureSupport: number;\n\n /**\n * Are motion notifications enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isMotionNotificationEnabled: boolean;\n\n /**\n * Are motion notifications on?\n */\n @attr('boolean', { defaultValue: false })\n declare isMotionNotificationsOn: boolean;\n\n /**\n * Are button pushed notifications on?\n */\n @attr('boolean', { defaultValue: false })\n declare isButtonPressNotificationsOn: boolean;\n\n /**\n * Are smart chime chime notifications on?\n */\n @attr('boolean', { defaultValue: false })\n declare isSmartChimeNotificationsOn: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/doorbell-notification-setting': DoorbellNotificationSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { Unknown } from 'customer-site/enums/MotionDetectionVersionEnum';\nimport { Unknown as MotionThresholdUnknown, ExtremelyHigh, VeryLow } from 'customer-site/enums/MotionThreshold';\nimport { Standard } from 'customer-site/enums/VideoQualityEnum';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The Doorbell video config models\n * Contains properties pertaining the doorbell video settings.\n */\nexport default class DoorbellVideoConfig extends BaseModel {\n /**\n * The doorbell video quality feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare doorbellVideoQualityFeatureSupport: number;\n\n /**\n * The supported video quality options for doorbell (currently only skybell)\n */\n @attr('array')\n declare doorbellVideoOptions: number[];\n\n /**\n * The currently selected doorbell video quality option (currently only skybell)\n */\n @attr('number', { defaultValue: Standard })\n declare selectedDoorbellVideoOption: number;\n\n /**\n * The motion detection options for skybell cameras.\n */\n @attr('array')\n declare motionDetectionOptions: number[];\n\n /**\n * The selected motion detection option.\n */\n @attr('number', { defaultValue: Unknown })\n declare selectedMotionDetectionOption: number;\n\n /**\n * The motion threshold slider feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare motionThresholdSliderFeatureSupport: number;\n\n /**\n * The minimum motion threshold value.\n */\n @attr('number', { defaultValue: VeryLow })\n declare motionThresholdMin: number;\n\n /**\n * The maximum motion threshold value.\n */\n @attr('number', { defaultValue: ExtremelyHigh })\n declare motionThresholdMax: number;\n\n /**\n * The current motion threshold value.\n */\n @attr('number', { defaultValue: MotionThresholdUnknown })\n declare motionThresholdValue: number;\n\n /**\n * Is Speed Up Local Network Connection Enabled? (This means Direct Streaming is currently Disabled)\n */\n @attr('boolean', { defaultValue: true })\n declare isSpeedUpLocalNetworkConnectionEnabled: boolean;\n\n /**\n * Is Direct Streaming Supported?\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare directStreamingFeatureSupport: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/doorbell-video-config': DoorbellVideoConfig;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type DoorbellNotificationSetting from './doorbell-notification-setting';\nimport type LedLightSetting from './led-light-setting';\n\n/**\n * @classdesc\n * The settings model for the general settings page.\n * Contains smaller models pertaining to device notifications and LED\n */\nexport default class GeneralSetting extends BaseVideoSetting {\n /**\n * The doorbell related notifications settings of the device.\n */\n @belongsTo('video/settings/doorbell-notification-setting', { async: false, inverse: null })\n declare doorbellNotificationSetting: DoorbellNotificationSetting;\n\n /**\n * The LED settings of the device.\n */\n @belongsTo('video/settings/led-light-setting', { async: false, inverse: null })\n declare ledLightSetting: LedLightSetting;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/general-setting': GeneralSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { belongsTo } from '@ember-data/model';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type InfraredSetting from './infrared-setting';\n\n/**\n * @classdesc\n * The settings model for a device's image setting\n */\nexport default class ImageSetting extends BaseVideoSetting {\n /**\n * The infrared settings of the device.\n */\n @belongsTo('video/settings/infrared-setting', { async: false, inverse: null })\n declare infraredSetting: InfraredSetting;\n\n /**\n * Can the camera flip image orientation?\n */\n @attr('boolean')\n declare canFlipImage: boolean;\n\n /**\n * The camera HDR (high dynamic range) setting support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare canSetHdr: number;\n\n /**\n * Can the camera control image exposure?\n */\n @attr('boolean')\n declare canSetMaxExposure: boolean;\n\n /**\n * Should we disable the max exposure? (Disabled if device supports auto adjust HDR an HDR is enabled)\n */\n @attr('boolean')\n declare shouldDisableMaxExposure: boolean;\n\n /**\n * Can the camera set brightness?\n */\n @attr('boolean')\n declare canSetBrightness: boolean;\n\n /**\n * Can the camera set saturation?\n */\n @attr('boolean')\n declare canSetSaturation: boolean;\n\n /**\n * Can the camera set contrast?\n */\n @attr('boolean')\n declare canSetContrast: boolean;\n\n /**\n * Can the camera set sharpness?\n */\n @attr('boolean')\n declare canSetSharpness: boolean;\n\n /**\n * Can the camera set web onscreen display?\n */\n @attr('boolean')\n declare canSetWebOsd: boolean;\n\n /**\n * Is the image orientation flipped?\n */\n @attr('boolean')\n declare isFlipped: boolean;\n\n /**\n * Is the camera HDR (high dynamic range) enabled?\n */\n @attr('boolean')\n declare isHdrEnabled: boolean;\n\n /**\n * Does the device support automatic exposure?\n */\n @attr('boolean')\n declare supportsAutomaticExposure: boolean;\n\n /**\n * Current exposure of the device\n */\n @attr('number')\n declare maxExposure: number;\n\n /**\n * Automatic max exposure option\n */\n @attr('number')\n declare automaticMaxExposure: number;\n\n /**\n * The array of options for the exposure\n */\n @attr('array')\n declare maxExposureOptions: number[];\n\n /**\n * Current image brightness setting for the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare brightness: number;\n\n /**\n * Current image quality constrast for the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare contrast: number;\n\n /**\n * Current image saturation for the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare saturation: number;\n\n /**\n * Current image sharpness for the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare sharpness: number;\n\n /**\n * Is the web onscreen display enabled?\n */\n @attr('boolean')\n declare isWebOsdEnabled: boolean;\n\n /**\n * Minimum image quality brightness\n */\n @attr('number')\n declare minBrightness: number;\n\n /**\n * Maximum image quality brightness\n */\n @attr('number')\n declare maxBrightness: number;\n\n /**\n * Minimum image quality constrast\n */\n @attr('number')\n declare minContrast: number;\n\n /**\n * Maximum image quality contrast\n */\n @attr('number')\n declare maxContrast: number;\n\n /**\n * Minimum image quality saturation\n */\n @attr('number')\n declare minSaturation: number;\n\n /**\n * Maximum image quality saturation\n */\n @attr('number')\n declare maxSaturation: number;\n\n /**\n * Minimum image quality sharpness.\n */\n @attr('number')\n declare minSharpness: number;\n\n /**\n * Maximum image quality sharpness.\n */\n @attr('number')\n declare maxSharpness: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/image-setting': ImageSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { Unknown } from 'customer-site/enums/IRSwitchSensitivity';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type { InfraredLightStatus } from 'customer-site/enums/IRSwitchSensitivity';\n\n/**\n * @classdesc\n * The model for a device's infrared settings\n */\nexport default class InfraredSetting extends BaseVideoSetting {\n /**\n * Can the camera control infrared LEDs?\n */\n @attr('boolean')\n declare canControlInfraredLeds: boolean;\n\n /**\n * Can the camera control night vision?\n */\n @attr('boolean')\n declare canControlNightVision: boolean;\n\n /**\n * Can the camera control infrared sensitivity?\n */\n @attr('boolean')\n declare canControlInfraredSensitivity: boolean;\n\n /**\n * Is the device's infrared led enabled?\n */\n @attr('boolean')\n declare isInfraredLedEnabled: boolean;\n\n /**\n * Is the device's night vision enabled?\n */\n @attr('boolean')\n declare isNightVisionEnabled: boolean;\n\n /**\n * The device's current infrared sensitivity setting.\n */\n @attr('number', { defaultValue: Unknown })\n declare infraredSensitivity: InfraredLightStatus;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/infrared-setting': InfraredSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport DeviceSelect from './device-select';\n\n/**\n * @classdesc\n * Represents an associated device.\n */\nexport default class AssociatedDeviceSelect extends DeviceSelect {\n /**\n * Whether the device is currently selected.\n */\n @attr('boolean', { defaultValue: false })\n declare isSelected: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/associated-device-select': AssociatedDeviceSelect;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Represents a device that can be selected.\n */\nexport default abstract class DeviceSelect extends BaseModel {\n /**\n * The device ID.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * The name of the device.\n */\n @attr('string')\n declare deviceName: string;\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing concierge info.\n */\nexport default class IntercomConcierge extends BaseModel {\n /**\n * The login ID of the concierge.\n */\n @attr('number')\n declare loginId: number;\n\n /**\n * The login email of the concierge.\n */\n @attr('string')\n declare loginEmail: string;\n\n /**\n * The login name of the concierge.\n */\n @attr('string')\n declare loginName: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/intercom-concierge': IntercomConcierge;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing a unit's apartment / suite name.\n */\nexport default class IntercomCustomerApartmentInfo extends BaseModel {\n /**\n * The unit ID of the customer / tenant.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * The description of the unit.\n */\n @attr('string')\n declare unitDescription: string;\n\n /**\n * The apartment / suite name for the unit.\n */\n @attr('string')\n declare apartmentSuiteName: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/intercom-customer-apartment-info': IntercomCustomerApartmentInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseLogin from 'customer-site/models/logins/base-login';\n\n/**\n * @classdesc\n * Represents a video device that can be selected.\n */\nexport default class IntercomLogin extends BaseLogin {\n /**\n * The unit name for the intercom login.\n */\n @attr('string')\n declare unitName: string;\n\n /**\n * The unit ID for the intercom login.\n */\n @attr('number')\n declare contactUnitId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/intercom-login': IntercomLogin;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class IntercomLogo extends BaseModel {\n /**\n * The filename of the logo\n */\n @attr('string')\n declare fileName: string;\n\n /**\n * the file data for the logo\n */\n @attr('string')\n declare fileDataUrl: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/intercom-logo': IntercomLogo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for storing all logins associated with a unit.\n */\nexport default class IntercomUnitLoginPairing extends BaseModel {\n /**\n * The unit ID of the customer / tenant.\n */\n @attr('number')\n declare unitId: number;\n\n /**\n * The login ids for the unit.\n */\n @attr('array')\n declare loginIds: Array;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/intercom-unit-login-pairing': IntercomUnitLoginPairing;\n }\n}\n","import { attr } from '@ember-data/model';\nimport DeviceSelect from './device-select';\n\n/**\n * @classdesc\n * Represents a video device that can be selected.\n */\nexport default class VideoDeviceSelect extends DeviceSelect {\n /**\n * The link to the image of the video device.\n */\n @attr('string')\n declare deviceImageLink: string;\n\n @attr('boolean', { defaultValue: false })\n declare isDisabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/intercom/video-device-select': VideoDeviceSelect;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The settings model for a device's led light.\n */\nexport default class LedLightSetting extends BaseModel {\n /**\n * Can the user turn on and off the LED light.\n */\n @attr('boolean', { defaultValue: false })\n declare canTurnOnOffLedLight: boolean;\n\n /**\n * Can the user change LED brightness.\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeLedBrightness: boolean;\n\n /**\n * Can the user change LED color.\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeLedColor: boolean;\n\n /**\n * is LED enabled for the device.\n */\n @attr('boolean', { defaultValue: false })\n declare isLedLightEnabled: boolean;\n\n /**\n * The current brightness of the doorbell LED.\n */\n @attr('number', { defaultValue: 50 })\n declare ledBrightness: number;\n\n /**\n * The current LED light Hex color string.\n */\n @attr('string', { defaultValue: '' })\n declare ledLightColor: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/led-light-setting': LedLightSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The live video settings model.\n * Contains properties pertaining the camera's live video settings\n */\nexport default class LiveVideoConfig extends BaseModel {\n /**\n * Does this camera support enabling/disabling live video connection feature?\n */\n @attr('boolean', { defaultValue: false })\n declare doesSupportLiveVideoConnection: boolean;\n\n /**\n * Is the live video connection enabled?\n */\n @attr('boolean', { defaultValue: true })\n declare isLiveVideoConnectionEnabled: boolean;\n\n /**\n * Option type supported for live video settings\n */\n @attr('number')\n declare liveVideoSettingType: number;\n\n /**\n * Web options for live video\n */\n @attr()\n declare webOptions: Record;\n\n /**\n * Mobile options for live video\n */\n @attr()\n declare mobileOptions: Record;\n\n /**\n * Selected option for web\n */\n @attr('string', { defaultValue: '' })\n declare selectedWebOption: string;\n\n /**\n * Selected option for mobile\n */\n @attr('string', { defaultValue: '' })\n declare selectedMobileOption: string;\n\n /**\n * Is web resolution options disabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isWebOptionsDisabled: boolean;\n\n /**\n * Should we display web options message?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayWebOptionsDisabledMessage: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/live-video-config': LiveVideoConfig;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The microphone and speaker settings model.\n * Contains properties pertaining the camera's microphone and speaker settings.\n */\nexport default class MicrophoneSpeakerSetting extends BaseModel {\n /**\n * The microphone and speaker feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare microphoneAndSpeakerFeatureSupport: number;\n\n /**\n * Can the user enable/disable the audio recording?\n */\n @attr('boolean')\n declare canToggleAudioRecording: boolean;\n\n /**\n * True if the selected camera is an onvif camera\n */\n @attr('boolean', { defaultValue: false })\n declare isOnvifCamera: boolean;\n\n /**\n * Is the audio recording enabled?\n */\n @attr('boolean')\n declare isAudioRecordingOn: boolean;\n\n /**\n * Noise filtering feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare noiseFilteringFeatureSupport: number;\n\n /**\n * Is noise filtering enabled?\n */\n @attr('boolean')\n declare isNoiseFilteringOn: boolean;\n\n /**\n * Microphone gain setting to use for noise filtering.\n */\n @attr('number', { defaultValue: 0 })\n declare microphoneGainForNoiseFiltering: number;\n\n /**\n * Is the camera's microphone/speaker on?\n */\n @attr('boolean', { defaultValue: false })\n declare areMicrophoneAndSpeakerOn: boolean;\n\n /**\n * The call volume feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare callVolumeFeatureSupport: number;\n\n /**\n * The minimum call volume value.\n */\n @attr('number', { defaultValue: 0 })\n declare callVolumeMin: number;\n\n /**\n * The maximum call volume value.\n */\n @attr('number', { defaultValue: 10 })\n declare callVolumeMax: number;\n\n /**\n * The current call volume value on the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare callVolumeValue: number;\n\n /**\n * The microphone gain feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare microphoneGainFeatureSupport: number;\n\n /**\n * The minimum microphone gain value.\n */\n @attr('number', { defaultValue: 0 })\n declare microphoneGainMin: number;\n\n /**\n * The maximum microphone gain value.\n */\n @attr('number', { defaultValue: 10 })\n declare microphoneGainMax: number;\n\n /**\n * The current microphone gain value on the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare microphoneGainValue: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/microphone-speaker-setting': MicrophoneSpeakerSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { DEFAULT_SENSITIVITY_SLIDER_VALUE } from 'customer-site/video/settings/motion-configuration/controller';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type { Point } from 'customer-site/utils/math-methods';\n\nexport default class MotionConfigurationSetting extends BaseVideoSetting {\n /**\n * Can the user edit the motion configuration settings.\n */\n @attr('boolean')\n declare canEditMotionConfiguration: boolean;\n\n /**\n * Name of the SVR that the camera has a recording schedule on.\n */\n @attr('string')\n declare connectedSVRName: string;\n\n /**\n * Whether the SVR has reached its maximum number of schedules using DMD as the motion detection type.\n */\n @attr('boolean')\n declare hasMaxDMDSchedulesOnSVR: boolean;\n\n /**\n * Whether the camera's connected SVR has local display enabled.\n */\n @attr('boolean', { defaultValue: false })\n declare hasLocalDisplayEnabledOnSVR: boolean;\n\n /**\n * The exclusion zones drawn on the camera.\n */\n @attr()\n declare motionZones: Record>;\n\n /**\n * The motion detection type of the svr for selected camera.\n */\n @attr('number')\n declare motionDetectionType: number;\n\n /**\n * The confidence/sensitivity level at which motion is triggered when using DMD\n */\n @attr('number', { defaultValue: DEFAULT_SENSITIVITY_SLIDER_VALUE })\n declare dmdConfidence: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'models/video/settings': MotionConfigurationSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The PIR video config models\n * Contains properties pertaining to the PIR video settings.\n */\nexport default class PirVideoConfig extends BaseModel {\n /**\n * The PIR LED response on motion detection feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare pirTriggerLedFeatureSupport: number;\n\n /**\n * Is the PIR LED response on motion detection enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isPirTriggerLedEnabled: boolean;\n\n /**\n * The PIR motion sensitivity feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare pirMotionSensitivityFeatureSupport: number;\n\n /**\n * The minimum PIR sensitivity value.\n */\n @attr('number', { defaultValue: 1 })\n declare pirMotionSensitivityMin: number;\n\n /**\n * The maximum PIR sensitivity value.\n */\n @attr('number', { defaultValue: 10 })\n declare pirMotionSensitivityMax: number;\n\n /**\n * The current PIR sensitivity value.\n */\n @attr('number', { defaultValue: 1 })\n declare pirMotionSensitivityValue: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/pir-video-config': PirVideoConfig;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { None } from 'customer-site/enums/DoorbellChimeType';\nimport { DoesNotSupport } from 'customer-site/enums/VideoSettingsFeatureSupport';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * The settings model for the saved video settings.\n */\nexport default class SavedVideoSetting extends BaseModel {\n /**\n * The clip resolution feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare clipResolutionFeatureSupport: number;\n\n /**\n * The keep clips for feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare keepClipsForFeatureSupport: number;\n\n /**\n * The donate clips enable disable feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare donateClipsFeatureSupport: number;\n\n /**\n * The donate images enable disable feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare donateCalibrationImagesFeatureSupport: number;\n\n /**\n * The alarm clips duration feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare alarmClipsDurationFeatureSupport: number;\n\n /**\n * The camera-triggered clips feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare cameraTriggeredClipsFeatureSupport: number;\n\n /**\n * The event-triggered clips feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare eventTriggeredClipsFeatureSupport: number;\n\n /**\n * The pre-trigger recording feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare preTriggerRecordingFeatureSupport: number;\n\n /**\n * The clip quality feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare clipQualityFeatureSupport: number;\n\n /**\n * The clip frame rate feature support enum (ReadWrite, ReadOnly, DoesNotSupport).\n */\n @attr('number', { defaultValue: DoesNotSupport })\n declare clipFrameRateFeatureSupport: number;\n\n /**\n * The selected clip resolution.\n */\n @attr('string', { defaultValue: '' })\n declare selectedClipResolution: string;\n\n /**\n * The list of all the clip resolution options for the camera.\n * This is a dictionary of UserResolutionOptionEnums to Resolution.\n */\n @attr()\n declare clipResolutionOptions: Record;\n\n /**\n * Should we display the disabled clip resolution message?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayDisabledClipResolutionMessage: boolean;\n\n /**\n * The array of options for the number of days to keep clips\n */\n @attr('array')\n declare keepClipsDaysOptions: number[];\n\n /**\n * The selected option for the amount of days to keep clips\n */\n @attr('number', { defaultValue: None })\n declare selectedKeepClipsDays: number;\n\n /**\n * Is donating clips enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isDonateClipsEnabled: boolean;\n\n /**\n * Is donating images enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isDonateCalibrationImagesEnabled: boolean;\n\n /**\n * The comment inputted by a user to describe the clips they're donating\n */\n @attr('string', { defaultValue: '' })\n declare donatedClipComments: string;\n\n /**\n * The selected option for the duration of the alarm clips.\n */\n @attr('number', { defaultValue: 2 })\n declare selectedAlarmClipsDuration: number;\n\n /**\n * The array of options for the length of the clips during an alarm.\n */\n @attr('array')\n declare alarmClipsDurationOptions: number[];\n\n /**\n * The array of options for the length of camera-triggered clips.\n */\n @attr()\n declare cameraTriggeredClipsDurationOptions: Record;\n\n /**\n * The selected option for the duration of camera-triggered clips.\n */\n @attr('number')\n declare selectedCameraTriggeredClipsDuration: number;\n\n /**\n * The minimum duration for system triggered clips in seconds.\n */\n @attr('number')\n declare minSystemTriggeredClipDurationSec: number;\n\n /**\n * The maximum duration for system triggered clips in seconds.\n */\n @attr('number')\n declare maxSystemTriggeredClipDurationSec: number;\n\n /**\n * Is pre-trigger recording enabled? When enabled, recordings will include a few seconds of video before the triggering event.\n */\n @attr('boolean', { defaultValue: false })\n declare isPreTriggerRecordingEnabled: boolean;\n\n /**\n * The list of all the clip quality options for the camera.\n * This is a dictionary of clip quality strings to ClipQualityResourceEnums.\n */\n @attr()\n declare clipQualityOptions: Record;\n\n /**\n * The selected option for a camera's saved clip quality.\n */\n @attr('string')\n declare selectedClipQuality: string;\n\n /**\n * The array of options for the frame rate of a camera's saved clips.\n */\n @attr('array')\n declare clipFrameRateOptions: number[];\n\n /**\n * The selected option for a camera's saved clip frame rate.\n */\n @attr('number')\n declare selectedClipFrameRate: number;\n\n /**\n * Use fixed clip duration layout.\n */\n @attr('boolean', { defaultValue: false })\n declare useFixedClipDurationLayout: boolean;\n\n /**\n * The duration of the pre-triggers for each type of clip.\n */\n @attr('array')\n declare pretriggerDurations: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/saved-video-setting': SavedVideoSetting;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport FamiliarSubjectSettingsLinkTypeEnum from 'customer-site/enums/FamiliarSubjectSettingsLinkType';\nimport BaseVideoSetting from './base-video-setting';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type DoorbellVideoConfig from './doorbell-video-config';\nimport type ImageSetting from './image-setting';\nimport type LiveVideoConfig from './live-video-config';\nimport type PirVideoConfig from './pir-video-config';\nimport type SavedVideoSetting from './saved-video-setting';\n\n/**\n * @classdesc\n * The settings model for the video config page.\n */\nexport default class VideoConfig extends BaseVideoSetting {\n /**\n * The saved video settings of the camera.\n */\n @belongsTo('video/settings/saved-video-setting', { async: false, inverse: null })\n declare savedVideoSetting: SavedVideoSetting;\n\n /**\n * The live video settings of the camera.\n */\n @belongsTo('video/settings/live-video-config', { async: false, inverse: null })\n declare liveVideoConfig: LiveVideoConfig;\n\n /**\n * The doorbell video settings of the camera.\n */\n @belongsTo('video/settings/doorbell-video-config', { async: false, inverse: null })\n declare doorbellVideoConfig: DoorbellVideoConfig;\n\n /**\n * The PIR video settings of the camera.\n */\n @belongsTo('video/settings/pir-video-config', { async: false, inverse: null })\n declare pirVideoConfig: PirVideoConfig;\n\n /**\n * The image settings of the camera. Loaded async because we display the configuration on a separate page.\n */\n @belongsTo('video/settings/image-setting', { async: true, inverse: null })\n declare imageSetting: AsyncBelongsTo;\n\n /**\n * Should we display the calibrate camera navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayCalibrateCameraLink: boolean;\n\n /**\n * Should we display the SD card info navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplaySdCardInfoLink: boolean;\n\n /**\n * Should we display the field of view navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayFovLink: boolean;\n\n /**\n * Should we display the privacy zones navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayPrivacyZonesLink: boolean;\n\n /**\n * Should we display the motion configuration navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayMotionConfigurationLink: boolean;\n\n /**\n * Should we display the familiar vehicle navigational row?\n */\n @attr('number', { defaultValue: FamiliarSubjectSettingsLinkTypeEnum.None })\n declare familiarSubjectLinkType: FamiliarSubjectSettingsLinkTypeEnum;\n\n /**\n * Should we display the third party stream navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayThirdPartyStreamLink: boolean;\n\n /**\n * Should we display the image settings navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayImageSettingsLink: boolean;\n\n /**\n * Should we display the battery level of the camera?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayBatteryLevel: boolean;\n\n /**\n * The battery level of the camera.\n */\n @attr('number', { defaultValue: 0 })\n declare batteryLevel: number;\n\n /**\n * The last time the battery state of the camera was updated in UTC.\n */\n @attr('date', { defaultValue: undefined })\n declare lastBatteryStateUpdateDateUtc: Date;\n\n /**\n * Does the user have state of charge permission?\n */\n @attr('boolean', { defaultValue: false })\n declare hasStateOfChargePermission: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/video-config': VideoConfig;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/** @classdesc\n * The video settings overview model (used on the settings overview page).\n */\nexport default class VideoSettingsOverview extends BaseModel {\n /**\n * Should we display the recording rules navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayRecordingRulesLink: boolean;\n\n /**\n * Should we display the stream video to panel navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayStreamVideoToPanelLink: boolean;\n\n /**\n * Should we display the camera groups navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayCameraGroupsLink: boolean;\n\n /**\n * Should we display the intercom navigational row?\n */\n @attr('boolean', { defaultValue: false })\n declare shouldDisplayIntercomLink: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/settings/video-settings-overview': VideoSettingsOverview;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for a signal strength history item.\n */\nexport default class SignalStrengthHistoryItem extends BaseModel {\n /**\n * Normalized signal strength for the given log.\n */\n @attr('number', { defaultValue: undefined })\n declare normalizedSignalStrength: number;\n\n /**\n * Signal strength enum for the wifi fan.\n */\n @attr('number', { defaultValue: undefined })\n declare signalStrengthEnum: number;\n\n /**\n * Time when the signal strength was logged.\n */\n @attr('date', { defaultValue: undefined })\n declare timestamp: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/signal-strength-history-item': SignalStrengthHistoryItem;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport ConnectionStatus from 'customer-site/enums/ConnectionStatus';\nimport FrequencyBandEnum from 'customer-site/enums/FrequencyBand';\nimport { Unknown } from 'customer-site/enums/SignalStrength';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type { SignalStrength } from 'customer-site/enums/SignalStrength';\nimport type SignalStrengthHistoryItem from './signal-strength-history-item';\n\n/**\n * Model for Signal Strength.\n */\nexport default class SignalStrengthInfo extends BaseModel {\n /**\n * Is the camera connected to wifi.\n */\n @attr('boolean')\n declare isConnected: boolean;\n\n /**\n * Can the network be changed?\n */\n @attr('boolean')\n declare canChangeNetwork: boolean;\n\n /**\n * The last updated date for signal strength.\n */\n @attr('date', { defaultValue: undefined })\n declare lastUpdatedDate: Date;\n\n /**\n * The SSID of the wifi.\n */\n @attr('string')\n declare deviceSSID: string;\n\n /**\n * The encryption type of the wifi.\n */\n @attr('string')\n declare encryptionType: string;\n\n /**\n * The connection type of the device, wireless connection, ethernet, or unknown.\n */\n @attr('number', { defaultValue: ConnectionStatus.NotConnected })\n declare connectionType: ConnectionStatus;\n\n /**\n * The frequency band of the network.\n */\n @attr('number', { defaultValue: FrequencyBandEnum.None })\n declare frequencyBand: FrequencyBandEnum;\n\n /**\n * The signal strength enum for the front end Wifi fan display.\n */\n @attr('number', { defaultValue: Unknown })\n declare signalStrengthEnum: SignalStrength;\n\n /**\n * The normalized signal strength of the current device.\n */\n @attr('number')\n declare normalizedSignalStrength: number;\n\n /**\n * The list of signal strength history of the device.\n */\n @hasMany('video/signal-strength-history-item', { async: false, inverse: null })\n declare signalStrengthHistory: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/signal-strength-info': SignalStrengthInfo;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type SmrfStatus from '../users/smrf-status';\n\n/**\n * @classdesc\n * A single SMRF (facial recognition) image.\n */\nexport default class SmrfImage extends BaseModel {\n /**\n * The User SmrfStatus model this image belongs to.\n */\n @belongsTo('users/smrf-status', { async: true, inverse: 'images' })\n declare status: AsyncBelongsTo;\n\n /**\n * The URL path to the image source.\n */\n @attr('string', { defaultValue: '' })\n declare imageSrc: string;\n\n /**\n * Whether this image is unassigned, or have been accepted or rejected.\n */\n @attr('number', { defaultValue: 0 })\n declare state: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/smrf-image': SmrfImage;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * Legal text for the SMRF settings agreements.\n */\nexport default class SmrfLegalText extends BaseModel {\n /**\n * Preamble for the SMRF program.\n */\n @attr('string')\n declare featurePreamble: string;\n\n /**\n * Short terms for the SMRF program.\n */\n @attr('string')\n declare featureShortTerms: string;\n\n /**\n * Full terms and conditions for the SMRF program.\n */\n @attr('string')\n declare featureFullTerms: string;\n\n /**\n * Full terms and conditions for the SMRF image donation program.\n */\n @attr('string')\n declare donationFullTerms: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/smrf-legal-text': SmrfLegalText;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * SMRF program permissions for the logged in user.\n */\nexport default class SmrfPermission extends BaseModel {\n /**\n * Indicates the logged in user has permission to toggle the donate SMRF images setting.\n */\n @attr('boolean', { defaultValue: false })\n declare canToggleDonation: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/smrf-permission': SmrfPermission;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { htmlSafe, type SafeString } from '@ember/template';\nimport BaseMediaEvent from './base-media-event';\n\nimport type Store from '@ember-data/store';\nimport type VideoEvent from './video-event';\n\n/**\n * The model that defines an Alarm.com snapshot event.\n */\nexport default class SnapshotEvent extends BaseMediaEvent {\n /**\n * The URL for the low-resolution snapshot that can be used to retrieve the image.\n */\n @attr('string')\n declare imageSrc: string;\n\n /**\n * The URL for the high-resolution snapshot that can be used to retrieve the image.\n */\n @attr('string')\n declare highResolutionImage: string | null;\n\n // We'll eventually have an actual endpoint we'll hit to load this info.\n // For now, since the page where this is shown is internal-only, we'll hardcode a URL.\n // Note that while we could reuse the thumbnail URL,\n // I wanted a different image to ensure we're showing the correct value as the thumbnail vs. full-size.\n getPlaybackUrl(): Promise {\n return new Promise((resolve) =>\n resolve(htmlSafe('https://media1.tenor.com/m/x8v1oNUOmg4AAAAd/rickroll-roll.gif'))\n );\n }\n\n donateMedia(\n isCorrect: boolean,\n details: string,\n donateCalibrationSnapshots: boolean\n ): AsyncModelPayload {\n throw new Error(\n `donateMedia method not implemented. Attempted to call with the following values ${{\n isCorrect,\n details,\n donateCalibrationSnapshots\n }}`\n );\n }\n\n // This is a temporary workaround until we actually load this data.\n static FromVideoEvent(store: Store, videoEvent: VideoEvent): SnapshotEvent {\n const snapshotEvent = store.createRecord('video/snapshot-event', {\n camera: videoEvent.camera,\n description: 'Spoofed snapshot!',\n timestamp: videoEvent.timestamp,\n thumbnail: videoEvent.thumbnail,\n eventType: 580 // StoryInProgress\n });\n\n return snapshotEvent;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/snapshot-event': SnapshotEvent;\n }\n}\n","import Model, { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\n\n/**\n * @classdesc\n * Model for a camera snapshot. Refreshing this model will retrieve a new snapshot.\n */\nexport default class Snapshot extends Model {\n @service declare envSettings: EnvSettingsService;\n\n // region Model data\n\n /**\n * Download URL for live snapshot for this device.\n */\n @attr('string')\n declare url: string;\n\n /**\n * An error message if the snapshot could not be retrieved.\n * It will be displayed on the snapshot UI instead of a traditional error popup when using WebApiResponse's Errors.\n * This is what a typical WebApiResponse error would hold - for example, strings for no permissions, bad ID, etc.\n */\n @attr('string')\n declare error: string;\n\n // endregion\n\n // region Tasks\n\n /**\n * Triggers a reload of the snapshot image after the desired amount of time.\n * Set as a droptask to avoid this running more than once at a given time.\n */\n delayedReload = task({ drop: true }, async (delay: number) => {\n // Is this NOT the automated test environment?\n if (!this.envSettings.isTestEnvironment()) {\n await timeout(delay);\n await this.reload();\n }\n });\n\n /**\n * Triggers a reload of the snapshot image after the desired amount of time.\n */\n reloadSnapshotLater(milliseconds: number): void {\n this.delayedReload.perform(milliseconds);\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/snapshot': Snapshot;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type {\n OeDirectFailureReasonEnum,\n OeRelayFailureReasonEnum\n} from '@adc/video-player/constants/disconnection-reasons';\nimport type WebStreamType from 'customer-site/enums/WebStreamType';\n\n/**\n * @classdesc\n * A model for saving streaming info about OESP streams.\n */\nexport default class OeStreamLog extends BaseModel {\n /**\n * The customer id for the account that camera is under.\n */\n @attr('number')\n declare customerId: string;\n\n /**\n * The global id for the camera (unitId-deviceId).\n */\n @attr('string')\n declare globalId: string;\n\n /**\n * The model for the camera.\n */\n @attr('string')\n declare deviceModel: string;\n\n /**\n * The OESP stats log.\n */\n @attr('string')\n declare oeStats: string;\n\n /**\n * The time it took for the stream to start or fail in milliseconds.\n */\n @attr('number')\n declare streamStartTimeMs: number;\n\n /**\n * Did the connection fail?\n */\n @attr('boolean')\n declare failed: boolean;\n\n /**\n * Was the connection direct?\n */\n @attr('boolean')\n declare direct: boolean;\n\n /**\n * Why did direct streaming fail?\n */\n @attr('number')\n declare directFailureReason: OeDirectFailureReasonEnum;\n\n /**\n * Why did relay streaming fail?\n */\n @attr('number')\n declare relayFailureReason: OeRelayFailureReasonEnum;\n\n /**\n * The selected local and remote ICE candidate types (local-remote).\n */\n @attr('string')\n declare selectedCandidatePairTypes: string;\n\n /**\n * The WebRTC stats log.\n */\n @attr('string')\n declare webRtcStats: string;\n\n /**\n * Is the end-to-end connection using TURN?\n */\n @attr('boolean')\n declare usedTurn: boolean;\n\n /**\n * The stream type (Live, SD, SVR).\n */\n @attr('number')\n declare oeStreamType: WebStreamType;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-logs/oe-stream-log': OeStreamLog;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for saving streaming info about OESP streams after the camera has been streaming for a while.\n */\nexport default class OeStreamUpdateLog extends BaseModel {\n /**\n * The id of the matching OESP live view initial log.\n */\n @attr('string')\n declare logId: string;\n\n /**\n * The OESP stats log.\n */\n @attr('string')\n declare oeStats: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-logs/oe-stream-update-log': OeStreamUpdateLog;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { WebrtcAudioStatus } from '@adc/video-player/enums/WebrtcAudioUsage';\n\n/**\n * @classdesc\n * A model for saving streaming info about WebRTC streams.\n */\nexport default class WebrtcStreamLog extends BaseModel {\n /**\n * The customer id for the account that camera is under.\n */\n @attr('number')\n declare customerId: number;\n\n /**\n * The global id for the camera (unitId-deviceId).\n */\n @attr('string')\n declare globalId: string;\n\n /**\n * The model for the camera.\n */\n @attr('string')\n declare deviceModel: string;\n\n /**\n * The WebRTC stats log.\n */\n @attr('string')\n declare webRtcStats: string;\n\n /**\n * The time it took for the stream to complete ICE negotiation (from start to finish).\n */\n @attr('number')\n declare streamIceCompletionTimeMs: number;\n\n /**\n * The time it took for the stream to connect through WebRTC and complete the ICE negotiation process in milliseconds.\n */\n @attr('number')\n declare streamConnectionTimeMs: number;\n\n /**\n * The time it took for the stream to start or fail in milliseconds.\n */\n @attr('number')\n declare streamStartTimeMs: number;\n\n /**\n * Did the connection fail?\n */\n @attr('boolean')\n declare failed: boolean;\n\n /**\n * What is the result of the connection?\n * Is it end-to-end only, proxy only, fallback to proxy and succeeded, or fallback to proxy and failed?\n */\n @attr('number')\n declare connectionResult: number;\n\n /**\n * Reason/cause of the stream or connection disconnection.\n */\n @attr('string')\n declare disconnectionReason: string;\n\n /**\n * Was the connection direct?\n */\n @attr('boolean')\n declare direct: boolean;\n\n /**\n * How many retries were attempted.\n */\n @attr('number', { defaultValue: 0 })\n declare retries: number;\n\n /**\n * The type of stream used.\n */\n @attr('number')\n declare webrtcStreamType: number;\n\n /**\n * The camera firmware version.\n */\n @attr('string', { defaultValue: '' })\n declare firmwareVersion: string;\n\n /**\n * The selected local and remote ICE candidate types (local-remote).\n */\n @attr('string')\n declare selectedCandidatePairTypes: string;\n\n /**\n * Is the end-to-end connection using TURN?\n */\n @attr('boolean')\n declare usedTurn: boolean;\n\n /**\n * The camera's signalling server node.\n */\n @attr('string')\n declare signallingServerNode: string;\n\n /**\n * Is this a log from a stream that restarted midstream?\n * I.e. we restarted the stream because an e2e stream froze or suddenly disconnected - not because a customer retried a disconnected stream.\n */\n @attr('boolean')\n declare isLogFromMidstreamRestart: boolean;\n\n /**\n * Describes the audio usage during the WebRTC stream.\n */\n @attr('number')\n declare audioStatus: WebrtcAudioStatus;\n\n /**\n * Is this a virtual camera? Logs and metrics are handled differently\n */\n @attr('boolean')\n declare isVirtualCamera: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-logs/webrtc-stream-log': WebrtcStreamLog;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n * A model for saving streaming info about WebRTC streams after the camera has been streaming for a while.\n */\nexport default class WebrtcStreamUpdateLog extends BaseModel {\n /**\n * The id of the matching WebRTC live view initial log.\n */\n @attr('string')\n declare logId: string;\n\n /**\n * The WebRTC stats log.\n */\n @attr('string')\n declare webRtcStats: string;\n\n /**\n * Reason/cause of the stream or connection disconnection.\n */\n @attr('string')\n declare disconnectionReason: string;\n\n /**\n * The type of stream used.\n */\n @attr('number')\n declare webrtcStreamType: number;\n\n /**\n * The duration of the stream.\n */\n @attr('number')\n declare duration: number;\n\n /**\n * The model for the camera.\n */\n @attr('string')\n declare deviceModel: string;\n\n /**\n * Was the connection direct?\n */\n @attr('boolean')\n declare direct: boolean;\n\n /**\n * The camera firmware version.\n */\n @attr('string', { defaultValue: '' })\n declare firmwareVersion: string;\n\n /**\n * Is the end-to-end connection using TURN?\n */\n @attr('boolean')\n declare usedTurn: boolean;\n\n /**\n * Is this update log the 1 minute update log (as opposed to the final end-of-stream log)?\n */\n @attr('boolean', { defaultValue: false })\n declare isOneMinuteUpdateLog: boolean;\n\n /**\n * The camera's signalling server node.\n */\n @attr('string')\n declare signallingServerNode: string;\n\n /**\n * Is this a virtual camera? Logs and metrics are handled differently\n */\n @attr('boolean')\n declare isVirtualCamera: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-logs/webrtc-stream-update-log': WebrtcStreamUpdateLog;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Model for sending WebRTC wavefront metrics to the backend.\n */\nexport default class WebrtcWavefrontReportMessage extends BaseModel {\n /**\n * Reason why a connection failed or disconnected.\n */\n @attr('string')\n declare message: string;\n\n /**\n * Is the connection using proxy?\n */\n @attr('boolean')\n declare isProxy: boolean;\n\n /**\n * Is the camera virtual?\n */\n @attr('boolean')\n declare isVirtual: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-logs/webrtc-wavefront-report-message': WebrtcWavefrontReportMessage;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Available Stream options for a camera & stream\n */\nexport default class StreamOptionsCollection extends BaseModel {\n /**\n * 1 is the high stream, and 3 is the low stream.\n */\n @attr('number')\n declare streamId: number;\n\n /**\n * List of cameras bit rate options for the stream\n */\n @attr('array')\n declare bitRateOptions: number[];\n\n /**\n * List of cameras frame rate options for the stream\n */\n @attr('array')\n declare frameRateOptions: number[];\n\n /**\n * List of cameras resolution options for the stream\n */\n @attr('array')\n declare resolutionOptions: string[];\n\n /**\n * List of cameras gop length Options for the stream\n */\n @attr('array')\n declare gopLengthOptions: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-options-collection': StreamOptionsCollection;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type StreamOptionsCollection from 'customer-site/models/video/stream-options-collection';\n\n/**\n * Selected settings for a camera and stream\n */\nexport default class StreamSetting extends BaseModel {\n /**\n * 1 is the high stream, and 3 is the low stream.\n *\n * NOTE: This can be undefined ONLY for dummy streams which are used for presentation only.\n */\n @attr('number')\n declare streamId: number;\n\n /**\n * Selected bitrate for the camera & stream\n */\n @attr('number')\n declare bitRate: number;\n\n /**\n * Selected frameRate for the camera & stream\n */\n @attr('number')\n declare frameRate: number;\n\n /**\n * Selected resolution for the camera & stream (this is a string such as '480x360')\n */\n @attr('string')\n declare resolution: string;\n\n /**\n * Selected gop length for the camera & stream\n */\n @attr('number')\n declare gopLength: number;\n\n /**\n * Other options (bitRate, frameRate, resolution, gopLength) for this stream.\n */\n @belongsTo('video/stream-options-collection', { async: false, inverse: null })\n declare streamOptions: StreamOptionsCollection;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-setting': StreamSetting;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * The stream video to panel information for a camera.\n */\nexport default class StreamVideoToPanelInfo extends BaseModel {\n /**\n * Is the camera capable of streaming to the panel?\n */\n @attr('boolean', { defaultValue: false })\n declare canStreamToPanel: boolean;\n\n /**\n * Can the camera's stream to panel setting be changed?\n */\n @attr('boolean', { defaultValue: false })\n declare canChangeStreamToPanel: boolean;\n\n /**\n * Can the camera be enabled for streaming?\n *\n * Note: In some cases, camera streaming can only be disabled.\n */\n @attr('boolean', { defaultValue: false })\n declare canStreamToPanelBeEnabled: boolean;\n\n /**\n * Is the camera currently authorized to stream to the panel?\n */\n @attr('boolean', { defaultValue: false })\n declare isStreamToPanelEnabled: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/stream-video-to-panel-info': StreamVideoToPanelInfo;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * SVR state info model.\n */\nexport default class SvrStateInfo extends Model {\n /**\n * The SVR state.\n */\n @attr('number', { defaultValue: -1 })\n declare state: number;\n\n /**\n * If the SVR has any cameras that can be added.\n */\n @attr('boolean')\n declare hasEligibleCameras: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/svr-state-info': SvrStateInfo;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * @classdesc\n * Model for SVR thumbnail endpoint.\n * This needs its own model because it has a token with expiration time, so we need to constantly reload it from the backend.\n */\nexport default class SvrThumbnailEndpoint extends Model {\n /**\n * Thumbnail URL endpoint.\n */\n @attr('string')\n declare url: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/svr-thumbnail-endpoint': SvrThumbnailEndpoint;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\n/**\n * Information related to storage usage for the current SVR.\n */\nexport default class SvrUsageInfo extends Model {\n /**\n * How much storage is available to be used on the device (in GB).\n */\n @attr('number', { defaultValue: -1 })\n declare storageAvailable: number;\n\n /**\n * How much storage on the device is being used. (in GB).\n */\n @attr('number', { defaultValue: -1 })\n declare storageUsed: number;\n\n /**\n * The oldest recording date on the SVR.\n */\n @attr('string', { defaultValue: '' })\n declare oldestRecordingDate: string;\n\n /**\n * The projected number of days of video we can store on the SVR, after which point the SVR will be full and video will start getting overwritten.\n */\n @attr('number', { defaultValue: -1 })\n declare projectedDaysRecording: number;\n\n /**\n * True if recordings have not been running on the SVR long enough in order to have an accurate projectedDaysOfRecording value.\n */\n @attr('boolean', { defaultValue: false })\n declare wait48HoursForProjection: boolean;\n\n /**\n * How many days of video have been recorded on this device.\n */\n @attr('number', { defaultValue: 0 })\n declare daysOfRecordedVideo: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/svr-usage-info': SvrUsageInfo;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport default class ThirdPartyAnalyticsEventType extends BaseModel {\n /**\n * All of the supported event types for 3rd Party Cameras.\n * Returns a list of integers representing the 3PC Event Type and their corresponding string translation.\n */\n @attr()\n declare supportedEventTypes: Record;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/third-party-analytics-event-type': ThirdPartyAnalyticsEventType;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\nimport type VideoEvent from './video-event';\n\n/**\n * A Third Party Analytic event that contains an image thumbnail.\n */\nexport default class ThirdPartyAnalyticsEvent extends RecordModel {\n /**\n * The URL that can be used to retrieve the thumbnail.\n */\n @attr('string')\n declare imageSrc: string;\n\n /**\n * The associated video clip for this event, if there is one.\n */\n @belongsTo('video/video-event', { async: false, inverse: null })\n declare clip: VideoEvent;\n\n /**\n * The orientation of the thumbnail.\n * All should be horizontal.\n */\n orientation = 'horizontal';\n\n /**\n * The description of the thumbnail\n */\n @attr('string')\n declare description: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/third-party-analytics-event': ThirdPartyAnalyticsEvent;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseAnalyticsRule from './base-analytics-rule';\n\n/**\n * @classDesc\n *\n * Represents a Third Party Analytics Rule.\n */\nexport default class ThirdPartyAnalyticsRule extends BaseAnalyticsRule {\n /**\n * The third party events type enums that the rule triggers on.\n * Used on ThirdPartyAnalyticsCameras\n */\n @attr('array')\n declare thirdPartyEventTypes: number[];\n\n /**\n * The third party event types that the associated light rule (if any) triggers on.\n */\n @attr('array')\n declare thirdPartyLightRuleTriggers: number[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/third-party-analytics-rule': ThirdPartyAnalyticsRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classDesc\n *\n * Touchless ring rule model.\n */\nexport default class TouchlessRingRule extends BaseModel {\n /**\n * List of dictionaries which represent (X,Y) coordinates.\n */\n @attr('array')\n declare points: Record[];\n\n /**\n * If tripwire, which direction is the tripwire setup for.\n */\n @attr('number', { defaultValue: -1 })\n declare direction: number;\n\n /**\n * How long the target of interest must loiter inside the AOI to set off the OV Rule.\n */\n @attr('number', { defaultValue: -1 })\n declare duration: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/touchless-ring-rule': TouchlessRingRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { htmlSafe } from '@ember/template';\nimport { GET, POST } from '@adc/ajax/services/adc-ajax';\nimport BaseMediaEvent from './base-media-event';\n\nimport type { SafeString } from '@ember/template';\n\n/**\n * The model that defines an Alarm.com video event (clip).\n */\nexport default class VideoEvent extends BaseMediaEvent {\n /**\n * Number that represents at what time we wish to start the saved clip, used to fast forward to soon before event.\n */\n @attr('number')\n declare timestampToStartClip: number;\n\n getPlaybackUrl(): Promise {\n return (async () => {\n const response = await this.submitCustomApiCall>('getClipPlaybackUrl', GET);\n return htmlSafe(response.value);\n })();\n }\n\n donateMedia(\n isCorrect: boolean,\n details: string,\n donateCalibrationSnapshots: boolean\n ): AsyncModelPayload {\n return this.submitCustomApiCall>('donateClip', POST, {\n isCorrect,\n details,\n donateCalibrationSnapshots\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-event': VideoEvent;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseLiveVideoSource from './base-live-video-source';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type BaseAnalyticsCamera from '../devices/base-analytics-camera';\n\n/**\n * @classdesc\n *\n * Video source for analytics rule editing.\n */\nexport default class AnalyticsVideoSource extends BaseLiveVideoSource {\n /**\n * The camera this video source applies to.\n */\n @belongsTo('video/devices/base-analytics-camera', {\n async: true,\n polymorphic: true,\n inverse: 'videoSource'\n })\n declare camera: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/analytics-video-source': AnalyticsVideoSource;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * A model for storing connection info for Apex devices.\n */\nexport default class ApexConnectionInfo extends BaseModel {\n /**\n * A unique ID for each Apex device.\n */\n @attr('string')\n declare apexId: string;\n\n /**\n * The ID for the specific channel on the Apex device we're accessing.\n */\n @attr('string')\n declare apexChannelGuid: string;\n\n /**\n * The proxy server that we need to connect to for this device.\n */\n @attr('string')\n declare apexProxyServerAddress: string;\n\n /**\n * The token we'll be using for authentication purposes with the proxy server.\n */\n @attr('string')\n declare apexProxyToken: string;\n\n // region Two-Way Audio\n\n /**\n * The audio capabilities for the given camera's Apex connection.\n * Corresponds to the OnvifCameraAudioCapabilitiesEnum.ts file.\n */\n @attr('number')\n declare audioCapabilities: number;\n\n /**\n * Should the given camera use full duplex audio?\n */\n @attr('boolean', { defaultValue: false })\n declare useFullDuplexAudio: number;\n\n /**\n * Is the user's microphone connected for a two-way audio connection?\n * This is set through JS based on whether the customer enables their microphone after a request.\n */\n @tracked isMicrophoneConnected = false;\n\n /**\n * Is WebRTC allowed on this player?\n */\n @attr('boolean', { defaultValue: false })\n declare allowWebrtc: boolean;\n\n /**\n * STUN server used for WebRTC connection.\n */\n @attr('string')\n stunServer?: string;\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/apex-connection-info': ApexConnectionInfo;\n }\n}\n","import VideoSource from './video-source';\n\n/**\n * @classdesc\n *\n * Base video source for live view.\n */\nexport default class BaseLiveVideoSource extends VideoSource {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/base-live-video-source': BaseLiveVideoSource;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type WebrtcStreamQualityMessage from './webrtc-stream-quality-message';\n\n/**\n * @classdesc\n *\n * A model containing values needed to set up an End-to-End WebRTC connection with a streaming module in-camera.\n */\nexport default class EndToEndWebrtcConnectionInfo extends BaseModel {\n /**\n * Base IP and PORT of the signalling server.\n */\n @attr('string')\n declare signallingServerUrl: string;\n\n /**\n * Token we must use with the signalling server.\n */\n @attr('string')\n declare signallingServerToken: string;\n\n /**\n * Authentication token for connecting to the camera.\n */\n @attr('string')\n declare cameraAuthToken: string;\n\n // region Stream Quality\n\n /**\n * The websocket message for setting the end-to-end stream to high definition.\n */\n @belongsTo('video/video-sources/webrtc-stream-quality-message', { async: false, inverse: null })\n declare hdStreamQualityMessage: WebrtcStreamQualityMessage;\n\n /**\n * The websocket message for setting the end-to-end stream to standard definition.\n */\n @belongsTo('video/video-sources/webrtc-stream-quality-message', { async: false, inverse: null })\n declare sdStreamQualityMessage: WebrtcStreamQualityMessage;\n\n // endregion\n\n // region Two-Way Audio\n\n /**\n * Does this camera support audio (and have permission for it)?\n */\n @attr('boolean')\n declare supportsAudio: boolean;\n\n /**\n * Does this camera support full duplex?\n */\n @attr('boolean')\n declare supportsFullDuplex: boolean;\n\n /**\n * Is the user's microphone connected for an end-to-end two-way audio connection?\n * This is set through JS based on whether the customer enables their microphone after a request.\n */\n @tracked isMicrophoneConnected = false;\n\n // endregion\n\n /**\n * The url we're using to send recording stream pieces, if we are recording this stream.\n */\n @attr('string')\n declare urlForRecordingStream: string;\n\n /**\n * Should we be forcing STUN with extended timeouts for the current end-to-end stream load?\n */\n @tracked shouldForceEndToEndWithExtendedTimeouts = false;\n\n /**\n * If this camera is behind a networked device such as a CSVR, this is that device's private IP.\n */\n @attr('string')\n declare networkedDevicePrivateIp: string;\n\n /**\n * If this camera is behind a networked device such as a CSVR, this is the camera's private IP.\n */\n @attr('string')\n declare cameraBehindNetworkedDevicePrivateIp: string;\n\n /**\n * Does this streamer have the Stream Load Time Improvements feature toggle?\n */\n @attr('boolean')\n declare hasStreamLoadTimeFeatureToggle: boolean;\n\n /**\n * True if this camera DOESN'T support fallback to ADC WebRTC proxy streaming (ex. 731B), false otherwise.\n */\n @attr('boolean')\n declare cameraDoesntSupportProxyFallback: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/end-to-end-webrtc-connection-info': EndToEndWebrtcConnectionInfo;\n }\n}\n","import LiveVideoSource from './live-video-source';\n\n/**\n * @classdesc\n *\n * Highest Res Video Source for live view.\n */\nexport default class LiveVideoHighestResSource extends LiveVideoSource {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/live-video-highest-res-source': LiveVideoHighestResSource;\n }\n}\n","import { belongsTo } from '@ember-data/model';\nimport BaseLiveVideoSource from './base-live-video-source';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type BaseCamera from '../devices/base-camera';\n\n/**\n * @classdesc\n *\n * Video source for live view.\n */\nexport default class LiveVideoSource extends BaseLiveVideoSource {\n /**\n * The camera this video source applies to.\n */\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/require-async-inverse-relationship\n @belongsTo('video/devices/base-camera', { async: true, polymorphic: true })\n declare camera: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/live-video-source': LiveVideoSource;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * A model containing values needed to set up a Proxy WebRTC connection.\n */\nexport default class ProxyWebrtcConnectionInfo extends BaseModel {\n /**\n * Is the user's microphone connected for an end-to-end two-way audio connection?\n * This is set through JS based on whether the customer enables their microphone after a request.\n */\n @tracked isMicrophoneConnected = false;\n\n /**\n * The url we're using to send recording stream pieces, if we are recording this stream.\n */\n @attr('string')\n declare urlForRecordingStream: string;\n\n /**\n * Does this camera support audio over proxy?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAudio: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/proxy-webrtc-connection-info': ProxyWebrtcConnectionInfo;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseLiveVideoSource from './base-live-video-source';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type SdCardRecordingSchedule from 'customer-site/models/video/schedules/sd-card-recording-schedule';\nimport type SdCardCamera from '../devices/sd-card-camera';\nimport type IntervalsGroup from '../intervals-group';\n\n/**\n * SD card camera device model.\n */\nexport default class SdCardVideoSource extends BaseLiveVideoSource {\n /**\n * The camera this video source applies to.\n */\n @belongsTo('video/devices/sd-card-camera', { async: true, inverse: 'videoSource' })\n declare camera: AsyncBelongsTo;\n\n /**\n * Recording timeline intervals group.\n */\n @belongsTo('video/intervals-group', { async: true, inverse: null })\n declare intervals: AsyncBelongsTo;\n\n /**\n * Does the SD card's proxy stream support audio playback?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAudioForProxyStream: boolean;\n\n /**\n * The recording schedule for this video source.\n */\n @belongsTo('video/schedules/sd-card-recording-schedule', { async: true, inverse: null })\n declare recordingSchedule: AsyncBelongsTo;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/sd-card-video-source': SdCardVideoSource;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport VideoSource from './video-source';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type Schedule from 'customer-site/models/automation/schedules/schedule';\nimport type Camera from '../devices/camera';\nimport type Svr from '../devices/svr';\nimport type IntervalsGroup from '../intervals-group';\n\n/**\n * Video source for SVR streaming.\n */\nexport default class SvrVideoSource extends VideoSource {\n /**\n * What camera is this video source connected to?\n */\n @belongsTo('video/devices/camera', { async: true, inverse: 'svrVideoSource' })\n declare camera: AsyncBelongsTo;\n\n /**\n * What channel on the SVR is this streaming on.\n */\n @attr('number')\n declare channel: number;\n\n /**\n * What SVR is this streaming on.\n */\n @belongsTo('video/devices/svr', { async: true, inverse: 'videoSources' })\n declare svr: AsyncBelongsTo;\n\n /**\n * Recording timeline intervals group.\n */\n @belongsTo('video/intervals-group', { async: true, inverse: null })\n declare intervals: AsyncBelongsTo;\n\n /**\n * Is this video source a high efficiency recording?\n */\n @attr('boolean', { defaultValue: false })\n declare isHighEfficiencyRecording: boolean;\n\n /**\n * The recording schedule for this video source.\n */\n @belongsTo('automation/schedules/schedule', { async: true, inverse: null })\n declare recordingSchedule: AsyncBelongsTo;\n\n /**\n * Does this SVR supportsAudioForProxyStream?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsAudioForProxyStream: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/svr-video-source': SvrVideoSource;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { NoError } from 'customer-site/enums/VideoSourceError';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type ApexConnectionInfo from './apex-connection-info';\nimport type EndToEndWebrtcConnectionInfo from './end-to-end-webrtc-connection-info';\nimport type ProxyWebrtcConnectionInfo from './proxy-webrtc-connection-info';\n\n/**\n * @classdesc\n * Video source contains live view URL with valid resolutions.\n */\nexport default class VideoSource extends BaseModel {\n /**\n * Does this video source have an mjpeg stream usage?\n */\n @attr('boolean', { defaultValue: false })\n declare isMjpeg: boolean;\n\n /**\n * Are these video source urls encoded?\n */\n @attr('boolean', { defaultValue: true })\n declare urlEncoded: boolean;\n\n /**\n * How long (in seconds) can we allow this device to stream video through the proxy before timing out?\n */\n @attr('number', { defaultValue: 180 })\n declare proxyStreamTimeoutTime: number;\n\n // region Errors\n\n /**\n * The error enum to indicate what failed when retrieving the video source.\n * If there were no errors, this value will be 0.\n */\n @attr('number', { defaultValue: NoError })\n declare errorEnum: number;\n\n // endregion\n\n // #region WebRTC Proxy\n\n /**\n * The proxy url for the new video players.\n * This can either be an RTSP VPN url needed for WebRTC proxy streaming or a VideoRelay proxy url for MJPEG streaming.\n */\n @attr('string')\n declare proxyUrl: string;\n\n /*\n * The camera API URL for sending audio (two-way audio to the camera).\n */\n @attr('string')\n declare audioUpStreamUrl: string;\n\n /**\n * The Janus/signalling server url needed for WebRTC proxy streaming.\n */\n @attr('string')\n declare janusGatewayUrl: string;\n\n /**\n * The Janus streaming token required for WebRTC.\n */\n @attr('string')\n declare janusToken: string;\n\n /**\n * A stringified JSON object containing all of the possible ICE servers for proxy WebRTC streaming.\n */\n @attr('string')\n declare iceServers: string;\n\n /**\n * Whether the camera's stream needs the SPS and PPS headers to stream over WebRTC.\n */\n @attr('boolean')\n declare spsAndPpsRequired: boolean;\n\n /**\n * Visual Verification data needed with the WebRTC proxy when the streaming user is a rep or VV operator.\n */\n @attr('string')\n declare visualVerificationRecord: string;\n\n /**\n * Values needed to be able swap public ip for private ip when TURN is needed for the proxy\n */\n @attr('string')\n declare coturnAddressesTuplets: string;\n\n /**\n * Data needed by proxy WebRTC player\n */\n @belongsTo('video/video-sources/proxy-webrtc-connection-info', { inverse: null, async: false })\n declare proxyWebrtcConnectionInfo: ProxyWebrtcConnectionInfo;\n\n // #endregion\n\n // #region WebRTC End-to-end\n\n /**\n * Data needed by End-to-End WebRTC player\n */\n @belongsTo('video/video-sources/end-to-end-webrtc-connection-info', { async: true, inverse: null })\n declare endToEndWebrtcConnectionInfo: AsyncBelongsTo;\n\n // #endregion\n\n // #region Apex\n\n /**\n * Data needed for OESP streaming.\n */\n @belongsTo('video/video-sources/apex-connection-info', { async: true, inverse: null })\n declare apexConnectionInfo: AsyncBelongsTo;\n\n // #endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/video-source': VideoSource;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nexport interface WebrtcStreamQualityMessageParams {\n streamID?: number;\n resolution?: string;\n}\n\nexport default class WebrtcStreamQualityMessage extends BaseModel {\n /**\n * The stream ID property we want to send to the device.\n * streamID is the internal name used for LiteOn cameras.\n */\n @attr('number')\n declare streamID?: number;\n\n /**\n * The resolution string we want to send to the device.\n */\n @attr('string')\n declare resolution?: string;\n\n /**\n * The JSON representation of this object.\n */\n toJSON(): WebrtcStreamQualityMessageParams {\n const { streamID, resolution } = this;\n return { streamID, resolution };\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-sources/webrtc-stream-quality-message': WebrtcStreamQualityMessage;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { equal, gte } from '@ember/object/computed';\nimport { NotProjected } from 'customer-site/enums/ProjectedVideoQuotaStatus';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type RuleUsage from './rule-usage';\n\nconst HEALTH_GOOD = 'good',\n HEALTH_WARNING = 'warning',\n HEALTH_DANGER = 'danger';\n\n/**\n * @classdesc\n * A model for the user's video usage data.\n */\nexport default class VideoUsageModel extends BaseModel {\n /**\n * How many clips the user is allowed to upload per month.\n */\n @attr('number', { defaultValue: 0 })\n declare uploadQuota: number;\n\n /**\n * How many clips the user has used this month.\n */\n @attr('number', { defaultValue: 0 })\n declare uploadsThisMonth: number;\n\n /**\n * Percent of the user's upload quota that has been used this month (rounded down to the nearest whole number\n * to avoid incorrectly telling the user they've reached their quota).\n */\n @attr('number', { defaultValue: 0 })\n declare uploadUsagePercent: number;\n\n /**\n * How many clips for the user that can be maintained by our system.\n */\n @attr('number', { defaultValue: 0 })\n declare storageQuota: number;\n\n /**\n * How many clips the user has stored on our system.\n */\n @attr('number', { defaultValue: 0 })\n declare storageUsage: number;\n\n /**\n * Percent of the users storage quota that they've used (rounded down to the nearest whole number\n * to avoid incorrectly telling the user they've reached their quota).\n */\n @attr('number', { defaultValue: 0 })\n declare storageUsagePercent: number;\n\n /**\n * How many clips, on average, the user is uploading every day.\n */\n @attr('number', { defaultValue: 0 })\n declare averageDailyUploads: number;\n\n /**\n * How many clips the user is projected to have used at the end of the month based on the current usage.\n */\n @attr('number', { defaultValue: 0 })\n declare projectedMonthlyUploads: number;\n\n /**\n * The date of the next unprotected clip that will be deleted.\n */\n @attr('date')\n declare nextDeletedClipDate: Date;\n\n /**\n * Indicates the system(s) have video motion detection based rules.\n */\n @attr('boolean', { defaultValue: false })\n declare hasVMDRules: boolean;\n\n /**\n * Indicates the system(s) have video analytics based rules.\n */\n @attr('boolean', { defaultValue: false })\n declare hasVARules: boolean;\n\n /**\n * Indicates the user has already cleared the over upload quote warning this month.\n */\n @attr('boolean', { defaultValue: false })\n declare suppressUploadQuotaWarning: boolean;\n\n /**\n * Indicates that rules were paused last month because the clips uploads reached the quota limit, so user should be prompted to enable rules.\n */\n @attr('boolean', { defaultValue: false })\n declare shouldUserEnableRules: boolean;\n\n /**\n * A list of rule usages with the highest percents used.\n */\n @hasMany('video/rule-usage', { async: true, inverse: null })\n declare topRuleUsages: AsyncHasMany;\n\n /**\n * The user's projected video quota status.\n */\n @attr('number', { defaultValue: NotProjected })\n declare projectedVideoQuotaStatus: number;\n\n /**\n * The video usage health description (good, warning or danger), based on monthly clip uploads.\n */\n @computed('uploadUsagePercent')\n get health(): string {\n const { uploadUsagePercent } = this;\n\n if (uploadUsagePercent >= 80) {\n return HEALTH_DANGER;\n }\n\n if (uploadUsagePercent >= 50) {\n return HEALTH_WARNING;\n }\n\n return HEALTH_GOOD;\n }\n\n /**\n * Indicates video usage health is good.\n */\n @equal('health', HEALTH_GOOD)\n declare isHealthGood: boolean;\n\n /**\n * Indicates video usage health is bad.\n */\n @equal('health', HEALTH_DANGER)\n declare isHealthBad: boolean;\n\n /**\n * Indicates video usages is projected to be over quote this month.\n */\n @computed('projectedMonthlyUploads', 'uploadQuota')\n get projectedOverQuota(): boolean {\n return this.projectedMonthlyUploads > this.uploadQuota;\n }\n\n /**\n * Indicates upload usage percent is at or above 100%.\n */\n @gte('uploadUsagePercent', 100)\n declare isOverUploadQuota: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'video/video-usage': VideoUsageModel;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n AuxiliaryPanic,\n PolicePanic,\n FirePanic,\n PolicePanicSuspectedAlarm,\n AuxPanicSuspectedAlarm,\n SilentPolicePanic,\n SilentPolicePanicSuspectedAlarm,\n InAppFirePanic,\n InAppAuxiliaryPanic,\n InAppPolicePanic,\n InAppSilentPolicePanic,\n MonitoringPanic\n} from 'customer-site/enums/EventType';\nimport { ThirdPartyAnalyticEvent } from 'customer-site/enums/EventType';\nimport { ThirdPartyEventIcons } from 'customer-site/enums/ThirdPartyEventType';\nimport RecordModel from '../activity/record';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { ThirdPartyEventType } from 'customer-site/enums/ThirdPartyEventType';\n\nconst PanicEventTypes = [\n AuxiliaryPanic,\n PolicePanic,\n FirePanic,\n PolicePanicSuspectedAlarm,\n AuxPanicSuspectedAlarm,\n SilentPolicePanic,\n SilentPolicePanicSuspectedAlarm,\n InAppFirePanic,\n InAppAuxiliaryPanic,\n InAppPolicePanic,\n InAppSilentPolicePanic,\n MonitoringPanic\n];\nconst DEFAULT_ICON = 'alarm';\nconst DEFAULT_THIRD_PARTY_ICON = 'warning';\n\n/**\n * The model that defines a visual verification alarm.\n */\nexport default class VisualVerificationAlarm extends RecordModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Id of alarm device.\n */\n @attr('number')\n declare deviceId: number;\n\n /**\n * Description of alarm event.\n */\n @attr('string')\n declare deviceDescription: string;\n\n /**\n * Date the alarm occurred. Backend returns invalid value here. It is local and not UTC.\n */\n @attr('string')\n declare eventDateUtc: string;\n\n /**\n * Unit-local date the alarm occurred.\n */\n @attr('date')\n declare eventDate: Date;\n\n /**\n * The alarm event type.\n */\n @attr('number')\n declare eventType: number;\n\n /**\n * The alarm event description.\n */\n @attr('string')\n declare eventDescription: string;\n\n @attr('number')\n declare thirdPartyEventType: ThirdPartyEventType;\n\n /**\n * The alarm description.\n * If the alarm is a panic event type, show the device and event descriptions;\n * otherwise, just show the device description.\n */\n @computed('deviceDescription', 'eventType', 'eventDescription')\n get description(): string {\n const { deviceDescription, eventType, eventDescription } = this;\n\n return PanicEventTypes.includes(eventType)\n ? this.intl.t('generic.colonSeparatedString', { first: deviceDescription, second: eventDescription })\n : deviceDescription;\n }\n\n @computed('eventType', 'thirdPartyEventType')\n get icon(): string {\n switch (this.eventType) {\n case ThirdPartyAnalyticEvent:\n return (\n (ThirdPartyEventIcons as Record)[this.thirdPartyEventType] ??\n DEFAULT_THIRD_PARTY_ICON\n );\n default:\n return DEFAULT_ICON;\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/alarm': VisualVerificationAlarm;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { reads, or } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport AnalyticsSnapshotEvent from '../video/analytics-snapshot-event';\nimport VideoEvent from '../video/video-event';\n\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type ImageSensor from 'customer-site/models/image-sensor/image-sensor';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type RecordModel from '../activity/record';\nimport type Rule from '../automation/rules/rule';\n\n/**\n * The model that defines a visual verification event\n */\nexport default class VisualVerificationEvent extends BaseModel {\n /**\n * True if this event is flagged for responder visual verification.\n */\n @attr('boolean', { defaultValue: false })\n declare flagged: boolean;\n\n /**\n * True if this event should be highlighted for Remote Video Monitoring Console events.\n */\n @attr('boolean', { defaultValue: false })\n declare isHighlighted: boolean;\n\n /**\n * This defines the category of the event.\n */\n @attr('string')\n declare eventCategory: string;\n\n /**\n * Rule (object) which triggered the recording of the event\n */\n @belongsTo('automation/rules/rule', { async: true, inverse: null })\n declare rule: AsyncBelongsTo;\n\n /**\n * ID of the rule which triggered the recording of the event.\n */\n @reads('rule.id')\n declare ruleId: string;\n\n /**\n * The captures image (either video clip or image sensor image) associated with this event.\n */\n @belongsTo('activity/record', {\n async: false,\n inverse: null,\n polymorphic: true\n })\n declare media: RecordModel;\n\n /**\n * The date and time the event occurred.\n */\n @reads('media.timestamp')\n declare timestamp: Date;\n\n /**\n * The URL that can be used to retrieve a thumbnail image of this video event. Includes bounding box.\n */\n @reads('media.thumbnail')\n declare thumbnail: string;\n\n /**\n * Video event Id or image sensor image Id\n */\n @reads('id')\n declare eventId: string;\n\n /**\n * The device that captured the media associated with this event.\n */\n @or('media.camera', 'media.imageSensor', 'media.analyticsSnapshot')\n declare device: Camera | ImageSensor | AnalyticsSnapshotEvent;\n\n /**\n * Device id associated with the visual verification event.\n */\n @reads('device.id')\n declare deviceId: string;\n\n /**\n * Preview Event ID.\n */\n @attr('string')\n declare previewId: string;\n\n /**\n * Indicates this is a video event.\n */\n get isVideoEvent(): boolean {\n return this.media instanceof VideoEvent;\n }\n\n get isSnapshotEvent(): boolean {\n return this.media instanceof AnalyticsSnapshotEvent;\n }\n\n /**\n * Triggers the audit viewd call for VV events\n */\n markAsViewed(): void {\n this.submitCustomApiCall('viewed');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/event': VisualVerificationEvent;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * The model that defines supported visual verification page features\n */\nexport default class PageFeature extends BaseModel {\n /**\n * True if visual verification page should show/enable the responder URL button.\n */\n @attr('boolean', { defaultValue: false })\n declare showResponderUrlButton: boolean;\n\n /**\n * True if items on the visual verification page can be flagged for responders.\n */\n @attr('boolean', { defaultValue: false })\n declare canFlagItems: boolean;\n\n /**\n * True if Central Station can download clips.\n */\n @attr('boolean', { defaultValue: false })\n declare canDownloadClips: boolean;\n\n /**\n * True if Property Actions should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare renderPropertyActions: boolean;\n\n /**\n * True if Warning Sounds should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare renderWarningSounds: boolean;\n\n /**\n * True if Contextual Info should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare enableContextualInfo: boolean;\n\n /**\n * True if Property Actions side menu should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare enableSidebar: boolean;\n\n /**\n * True if Geo Devices Additional Informations should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare renderGeoFencePanel: boolean;\n\n /**\n * True if Property Notes should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare renderPropertyNotes: boolean;\n\n /**\n * True if CDQL components should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare enableCDQL: boolean;\n\n /**\n * True if Geo Unexpected Events should be shown.\n */\n @attr('boolean', { defaultValue: false })\n declare renderUnexpectedEvents: boolean;\n\n /**\n * True if SVR Timeline button and page should be rendered.\n */\n @attr('boolean', { defaultValue: false })\n declare enableSVR: boolean;\n\n /**\n * True if SD Timeline button and page should be rendered.\n */\n @attr('boolean', { defaultValue: false })\n declare enableSD: boolean;\n\n /**\n * If we have camera arming access.\n */\n @attr('boolean', { defaultValue: false })\n declare hasCameraArmingAccess: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/page-feature': PageFeature;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { reads } from '@ember/object/computed';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * The model that defines Person On-Site indicators\n */\nexport default class PersonOnSiteindicator extends BaseModel {\n /**\n * Label id\n */\n @reads('id')\n declare labelId: number;\n\n /**\n * Device id\n */\n @attr('number')\n declare deviceId: string;\n\n /**\n * Device type\n */\n @attr('number', { defaultValue: 0 })\n declare deviceType: number;\n\n /**\n * Event type\n */\n @attr('number', { defaultValue: 0 })\n declare eventType: number;\n\n /**\n * Device Name\n */\n @attr('string', { defaultValue: '' })\n declare deviceName: string;\n\n /**\n * Event date string\n */\n @attr('date')\n declare eventDateUtc: Date;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/person-on-site/indicator': PersonOnSiteindicator;\n }\n}\n","import PropertyNote from '../settings/monitoring-station/property-note';\n\nexport default class OperatorPropertyNote extends PropertyNote {}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/property-note': OperatorPropertyNote;\n }\n}\n","import { attr } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\n/**\n * The model that defines a CDQL Session Device Link.\n */\nexport default class SessionDeviceLink extends RecordModel {\n /**\n * Session Camera ID\n */\n @attr('string')\n declare cameraId: string;\n\n /**\n * Session Camera Name\n */\n @attr('boolean')\n declare multipleDeviceTrigger: boolean;\n\n /**\n * Pair type\n */\n @attr('string')\n declare pairType: string;\n\n /**\n * Session Camera Name\n */\n @attr('string')\n declare cameraName: string;\n\n /**\n * Names of the devices which were triggered\n */\n @attr('string')\n declare deviceNames: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/session-device-link': SessionDeviceLink;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { SyncHasMany } from '@ember-data/model';\nimport type VisualVerificationAlarm from 'customer-site/models/visual-verification/alarm';\nimport type VisualVerificationEvent from 'customer-site/models/visual-verification/event';\nimport type SessionDeviceLink from 'customer-site/models/visual-verification/session-device-link';\n\n/**\n * The model that defines sessions for CDQL Visual Verification\n */\nexport default class Session extends BaseModel {\n /**\n * Session number\n */\n @attr('number', { defaultValue: 0 })\n declare sessionNumber: number;\n\n /**\n * Total sessions\n */\n @attr('number', { defaultValue: 0 })\n declare totalSessions: number;\n\n /**\n * Start date - to be used on the CDQL Timeline\n */\n @attr('date')\n declare start: Date;\n\n /**\n * End date - to be used on the CDQL Timeline\n */\n @attr('date')\n declare end: Date;\n\n /**\n * Previous Session Date\n */\n @attr('date')\n declare previousSessionDate: Date;\n\n /**\n * Next Session Date\n */\n @attr('date', { defaultValue: undefined })\n declare nextSessionDate: Date;\n\n /**\n * Last alarm date\n */\n @attr('date', { defaultValue: undefined })\n declare lastAlarmDate: Date;\n\n /**\n * Events occurred during this session\n */\n @hasMany('visual-verification/event', { async: false, inverse: null })\n declare events: SyncHasMany;\n\n /**\n * Alarms occurred during this session\n */\n @hasMany('visual-verification/alarm', { async: false, inverse: null })\n declare alarms: SyncHasMany;\n\n /**\n * Primary Devices that were triggered in this session\n */\n @hasMany('visual-verification/session-device-link', { async: false, inverse: null })\n declare sessionDeviceLinks: SyncHasMany;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/session': Session;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * The model that defines Person On-Site indicators\n */\nexport default class UnexpectedEventsIndicator extends BaseModel {\n @attr('number')\n declare cameraVideoCameraTriggered: number;\n\n @attr('number')\n declare cameraDoorbellButtonPress: number;\n\n @attr('number')\n declare cameraOpened: number;\n\n @attr('number')\n declare cameraDoorbellCallRequest: number;\n\n @attr('number')\n declare contactClosed: number;\n\n @attr('number')\n declare contactOpenedClosed: number;\n\n @attr('number')\n declare contactOpened: number;\n\n @attr('number')\n declare garageDoorClosed: number;\n\n @attr('number')\n declare garageDoorOpened: number;\n\n @attr('number')\n declare motionClosed: number;\n\n @attr('number')\n declare motionOpenedClosed: number;\n\n @attr('number')\n declare motionOpened: number;\n\n @attr('number')\n declare partitionArmedAway: number;\n\n @attr('number')\n declare partitionArmedStay: number;\n\n @attr('number')\n declare partitionDisarmed: number;\n\n @attr('number')\n declare zWaveLockArmedAway: number;\n\n @attr('number')\n declare zWaveLockDisarmed: number;\n\n @attr('number')\n declare zWaveLockDoorLocked: number;\n\n @attr('number')\n declare zWaveLockDoorUnlocked: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/unexpected-events/prediction': UnexpectedEventsIndicator;\n }\n}\n","import { attr } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\nimport type VisualVerificationEventId from './visual-verification-event-id';\n\n/**\n * The model that defines a visual verification event Id list\n */\nexport default class VisualVerificationEventIdList extends RecordModel {\n /**\n * The list of Ids of events to flag or unflag\n */\n @attr('array')\n declare list: VisualVerificationEventId[];\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/visual-verification-event-id-list': VisualVerificationEventIdList;\n }\n}\n","import { attr } from '@ember-data/model';\nimport RecordModel from '../activity/record';\n\n/**\n * The model that defines a visual verification event Id\n */\nexport default class VisualVerificationEventId extends RecordModel {\n /**\n * The visual verification event type.\n * 1 = video clip\n * 2 = image sensor image\n */\n @attr('number')\n declare eventType: number;\n\n /**\n * Event ID.\n */\n @attr('string')\n declare eventId: string;\n\n /**\n * True if this event is flagged for responder visual verification.\n */\n @attr('boolean', { defaultValue: false })\n declare flagged: boolean;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'visual-verification/visual-verification-event-id': VisualVerificationEventId;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type Store from '@ember-data/store';\n\n/**\n * Returns a promise for the forecast for the specified number of days.\n */\nexport function queryForecasts(store: Store, days: number): ADCAsyncStoreQuery {\n return store.query('weather/forecast', { days });\n}\n\n/**\n * @classdesc\n *\n * Model for a day weather forecast\n */\nexport default class Forecast extends BaseModel {\n /**\n * Day of week corresponding to the date for the forecast\n */\n @attr('string')\n declare dayOfWeek: string;\n\n /**\n * Icon\n */\n @attr('string', { defaultValue: '' })\n declare icon: string;\n\n /**\n * Description\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * Min temperature for the day\n */\n @attr('number')\n declare minTemperature: number;\n\n /**\n * Max temperature for the day\n */\n @attr('number')\n declare maxTemperature: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'weather/forecast': Forecast;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { attr } from '@ember-data/model';\nimport { inject as service } from '@ember/service';\nimport { Unknown } from 'customer-site/enums/CustomerPageUrl';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\nimport { AccessPoint, Camera, Bridge } from '../../enums/ConnectedClientType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * @classdesc\n *\n * Wifi Client model.\n */\nexport default class Client extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * The global device id associated with the client\n */\n @attr('string')\n declare deviceId: string;\n\n /**\n * CustomerPageUrl for device settings\n */\n @attr('number')\n declare emberSettingsRoute: number;\n\n /**\n * Customer selected device name\n */\n @attr('string')\n declare deviceName: string;\n\n /**\n * What type of device is this?\n */\n @attr('number', { defaultValue: 0 })\n declare deviceType: number;\n\n /**\n * What is the vendor of this device?\n */\n @attr('string', { defaultValue: '' })\n declare deviceVendor: string;\n\n /**\n * What is the model of this device?\n */\n @attr('string', { defaultValue: '' })\n declare deviceModel: string;\n\n /**\n * What is the SSID of this network?\n */\n @attr('string', { defaultValue: '' })\n declare description: string;\n\n /**\n * When was the status last updated?\n */\n @attr('date')\n declare statusDate: Date;\n\n /**\n * What is the signal strength of the client?\n */\n @attr('number', { defaultValue: 0 })\n declare signalStrength: number;\n\n /**\n * What is the word (good, bad, etc) for the signal strength?\n */\n @attr('number', { defaultValue: 0 })\n declare signalStrengthLevel: number;\n\n /**\n * What is the word (good, bad, etc) for the signal strength?\n */\n @attr('string', { defaultValue: 'unknown' })\n declare signalStrengthWord: string;\n\n /**\n * Whats the MAC Address of the client?\n */\n @attr('string', { defaultValue: '' })\n declare macAddress: string;\n\n /**\n * Whats the local IP Address of the client?\n */\n @attr('string', { defaultValue: '' })\n declare ipAddress: string;\n\n /**\n * Is this client visible in the UI?\n */\n @tracked\n declare visible: boolean;\n\n /**\n * Get the translation key for the device type.\n */\n get deviceTypeDescription(): string | null {\n let key;\n\n switch (this.deviceType) {\n case Camera:\n key = 'camera';\n break;\n case AccessPoint:\n key = 'accessPoint';\n break;\n case Bridge:\n key = 'wifi.bridge';\n break;\n default:\n return null;\n }\n\n return this.intl.t(`generic.${key}`);\n }\n\n get hasDeviceSettings(): boolean {\n return this.emberSettingsRoute != Unknown;\n }\n\n /**\n * Hide visibility of this client in the UI\n */\n hide(): void {\n this.visible = false;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/client': Client;\n }\n}\n","import { attr } from '@ember-data/model';\nimport {\n ComputersAndNetwork,\n Entertainment,\n Home,\n Personal,\n Video,\n Security\n} from 'customer-site/enums/WifiClientGroup';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Gets the translation key for a given client group\n */\nexport function getWifiGroupTranslationKey(groupId: number): string {\n let key = 'other';\n switch (groupId) {\n case ComputersAndNetwork:\n key = 'computersAndNetwork';\n break;\n case Entertainment:\n key = 'entertainment';\n break;\n case Home:\n key = 'home';\n break;\n case Personal:\n key = 'personal';\n break;\n case Video:\n key = 'video';\n break;\n case Security:\n key = 'security';\n break;\n }\n\n return `generic.wifi.clientGroups.${key}`;\n}\n\n/**\n * @classdesc\n * A Wifi Device Profile containing devices\n */\nexport default class DeviceCategory extends BaseModel {\n /**\n * Translated name of the category\n */\n @attr('string')\n declare description: string;\n\n /**\n * Icon string for the category\n */\n @attr('string')\n declare icon: string;\n\n /**\n * WifiClientGroup that a category belongs to\n */\n @attr('number')\n declare groupId: number;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/device-category': DeviceCategory;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { computed, action } from '@ember/object';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type WifiDevice from './device';\n\n/**\n * @classdesc\n * A Wifi Device Profile containing devices\n */\nexport default class DeviceProfile extends BaseModel {\n /**\n * Name of the profile\n */\n @attr('string')\n declare name: string;\n\n /**\n * Is the profile paused?\n */\n @attr('boolean', { defaultValue: false })\n declare isPaused: boolean;\n\n /**\n * Is this profile the Managed Profile (Can't pause. Dealer managed. etc.)\n */\n @attr('boolean', { defaultValue: false })\n declare isManagedProfile: boolean;\n\n /**\n * Does this profile support automation schedules?\n */\n @attr('boolean', { defaultValue: false })\n declare supportsSchedules: boolean;\n\n /**\n * Version of the IQR2 if on account\n */\n @attr('string', { defaultValue: '' })\n declare iqr2Version: string;\n\n /**\n * Devices belonging to the profile\n */\n @hasMany('wifi/device', { async: true, inverse: 'profile' })\n declare devices: AsyncHasMany;\n\n /**\n * Disallowed characters for the profile's name\n */\n @attr('string')\n declare profileNameDisallowedCharacters: string;\n\n /**\n * How many devices are paused?\n */\n @computed('devices.@each.isPaused')\n get pausedCount(): number {\n return this.devices.filterBy('isPaused').length;\n }\n\n /**\n * Get the first 2 starting letters of the device name for use with icons\n */\n @computed('name', 'isManagedProfile')\n get nameIcon(): string {\n // Don't try to parse empty name\n // Managed profiles use an svg icon, not characters for icon\n if (!this.name || this.isManagedProfile) {\n return '';\n }\n\n // We want to get just the first 2 substrings from 'name'\n const nameStrs = this.name.split(/\\s+/).slice(0, 2);\n let startingChars = '';\n\n nameStrs.forEach((subStr) => (startingChars += subStr[0] ?? ''));\n return startingChars.toUpperCase();\n }\n\n /**\n * The svg icon for this profile\n */\n @computed('isManagedProfile')\n get svgIcon(): string {\n return this.isManagedProfile ? 'shield-outline' : '';\n }\n\n /**\n * Toggle whether or not the profile is paused\n */\n @action\n toggleProfilePause(): void {\n this.isPaused = !this.isPaused;\n this.save();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/device-profile': DeviceProfile;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Primary, Guest, Security } from 'customer-site/enums/AccessPointWifiGroup';\nimport { getConnectionFrequencyString } from 'customer-site/utils/device-wifi';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type DeviceCategory from './device-category';\nimport type DeviceProfile from './device-profile';\n\n/**\n * @classdesc\n *\n * A device attached to an IQRouter network\n */\nexport default class WifiDevice extends BaseModel {\n @service declare intl: ADCIntlService;\n\n /**\n * Description of the device\n */\n @attr('string')\n declare description: string;\n\n /**\n * Name for the matching equipment list device if it exists\n */\n @attr('string')\n declare adcDeviceDesc: string;\n\n /**\n * Device category type\n */\n @belongsTo('wifi/device-category', { async: false, inverse: null })\n declare category: DeviceCategory;\n\n /**\n * Profile the device belongs to\n */\n @belongsTo('wifi/device-profile', { async: true, inverse: 'devices' })\n declare profile: AsyncBelongsTo;\n\n /**\n * Connected Access Point name\n */\n @attr('string')\n declare nodeName: string;\n\n /**\n * 2.4, 5GHz, Wired\n */\n @attr('number')\n declare connectionFrequency: number;\n\n /**\n * Wifi network device belongs to\n */\n @attr('number')\n declare network: number;\n\n /**\n * Device's signal strength to wifi network\n */\n @attr('string')\n declare signalStrength: string;\n\n /**\n * Is the device wired via ethernet?\n */\n @attr('boolean')\n declare isWired: boolean;\n\n /**\n * Device's network hostname\n */\n @attr('string')\n declare hostname: string;\n\n /**\n * MAC address for the device\n */\n @attr('string')\n declare macAddress: string;\n\n /**\n * Device's manufacturer\n */\n @attr('string')\n declare manufacturer: string;\n\n /**\n * Device's IP Address on the network\n */\n @attr('string')\n declare ipAddress: string;\n\n /**\n * Lease time remaining in minutes\n */\n @attr('number')\n declare leaseTimeRemaining: number;\n\n /**\n * Is the device currently restricted from broadband\n */\n @attr('boolean')\n declare isPaused: boolean;\n\n /**\n * Is the device currently communicating on LAN\n */\n @attr('boolean')\n declare isOnline: boolean;\n\n /**\n * Are we able to \"Forget Device\" from the list of offline devices?\n */\n @attr('boolean')\n declare isForgettable: boolean;\n\n /**\n * The device's most recent disconnect date\n */\n @attr('date')\n declare lastOnlineDate: Date;\n\n /**\n * Disallowed character for the devices name\n */\n @attr('string')\n declare wifiDeviceDisallowedCharacters: string;\n\n /**\n * Version of the IQR2 if on account\n */\n @attr('string', { defaultValue: '' })\n declare iqr2Version: string;\n\n /**\n * Is this device online and doesn't belong to a guest network?\n */\n @computed('isGuestNetwork', 'isOnline')\n get isNotGuestOrOffline(): boolean {\n return !(this.isGuestNetwork || !this.isOnline);\n }\n\n /**\n * Is this device on a guest network\n */\n @computed('network')\n get isGuestNetwork(): boolean {\n return this.network === Guest;\n }\n\n /**\n * Get the translated frequency string\n */\n get connectionFrequencyString(): string {\n return getConnectionFrequencyString(this.connectionFrequency, this.intl);\n }\n\n /**\n * Get the translated network group string\n */\n get networkGroupString(): string {\n let key;\n\n switch (this.network) {\n case Primary:\n key = 'primary';\n break;\n case Guest:\n key = 'guest';\n break;\n case Security:\n key = 'security';\n break;\n default:\n return this.intl.t('generic.unknown');\n }\n\n return this.intl.t(`generic.wifi.networks.${key}`);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/device': WifiDevice;\n }\n}\n","import { attr, hasMany } from '@ember-data/model';\nimport { Guest, Primary, Security, Unknown as UnknownGroup } from 'customer-site/enums/AccessPointWifiGroup';\nimport { Open, Wpa2Personal, Wpa3Personal } from 'customer-site/enums/AelWiFiSecurityProtocol';\nimport { IQRouter2 } from 'customer-site/enums/PanelType';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type Client from './client';\n\n/**\n * @classdesc\n *\n * Wifi network model (for Smart Gateways, Smart Chimes, and IQ Routers).\n */\nexport default class Network extends BaseModel {\n /**\n * The device that contains the network\n */\n @attr('number', { defaultValue: 0 })\n declare deviceId: number;\n\n /**\n * The panel type of device\n */\n @attr('number')\n declare devicePanelType: number;\n\n /**\n * What is the SSID of this network?\n */\n @attr('string', { defaultValue: '' })\n declare ssid: string;\n\n /**\n * Is the network enabled?\n */\n @attr('boolean', { defaultValue: false })\n declare isEnabled: boolean;\n\n /**\n * Can the network be disabled?\n */\n @attr('boolean', { defaultValue: false })\n declare canBeDisabled: boolean;\n\n /**\n * Is the network visible?\n */\n @attr('boolean', { defaultValue: false })\n declare isVisible: boolean;\n\n /**\n * Network password\n */\n @attr('string', { defaultValue: '' })\n declare password: string;\n\n /**\n * What channel does the network use?\n */\n @attr('number', { defaultValue: 0 })\n declare channel: number;\n\n /**\n * Is the network managed by ADC?\n */\n @attr('boolean', { defaultValue: false })\n declare isManaged: boolean;\n\n /**\n * What is the frequency of the network? (2.4GHz or 5GHz)\n */\n @attr('string', { defaultValue: '' })\n declare frequency: string;\n\n /**\n * What is the group of the network? (Primary, Guest, or Security, etc.)\n */\n @attr('number', { defaultValue: UnknownGroup })\n declare networkGroup: number;\n\n /**\n * What is the network type? This corresponds to AccessPointWiFiProtocolEnum in C#.\n */\n @attr('number')\n declare networkType: number;\n\n /**\n * What is the secondary network type? This corresponds to AccessPointWiFiProtocolEnum in C#.\n * Example: A network may correspond to 2.4g and 5g.\n */\n @attr('number')\n declare secondaryNetworkType: number;\n\n /**\n * The network's encryption protocol\n */\n @attr('number', { defaultValue: Open })\n declare encryption: number;\n\n /**\n * The disallowed characters for the network's SSID\n */\n @attr('string', { defaultValue: '' })\n declare ssidDisallowedCharacters: string;\n\n /**\n * The disallowed characters for the network's SSID Password\n */\n @attr('string', { defaultValue: '' })\n declare ssidPasswordDisallowedCharacters: string;\n\n /**\n * Version of the IQR2 if on account\n */\n @attr('string', { defaultValue: '' })\n declare iqr2Version: string;\n\n /**\n * List of clients attached to the network\n */\n @hasMany('wifi/client', { async: true, inverse: null })\n declare clients: AsyncHasMany;\n\n /**\n * Is this model waiting to be refreshed via Websocket update off of NetworkMapUpdated event?\n */\n @attr('boolean', { defaultValue: false })\n declare isPendingRefresh: boolean;\n\n /**\n * Is this an IQ Router 2 network?\n */\n get isIQR2Network(): boolean {\n return this.devicePanelType === IQRouter2;\n }\n\n /**\n * Is this network a security network?\n */\n get isSecurityNetwork(): boolean {\n return this.networkGroup === Security;\n }\n\n /**\n * Get the translation key for the network group.\n */\n get networkGroupWord(): string {\n switch (this.networkGroup) {\n case Primary:\n return 'primaryNetwork';\n case Guest:\n return 'guestNetwork';\n case Security:\n return 'securityNetwork';\n default:\n return 'unknownNetwork';\n }\n }\n\n /**\n * Get the network band ( 2.4 GHz, etc)\n * Will be empty if the network supports multiple bands.\n */\n get networkBand(): string {\n return !this.secondaryNetworkType ? this.frequency : '';\n }\n\n /**\n * Get the translation key for the device type.\n */\n get networkEncryptionWord(): string {\n switch (this.encryption) {\n case Wpa2Personal:\n return 'encryptionWPA2';\n case Wpa3Personal:\n return 'encryptionWPA3';\n default:\n return 'encryptionNone';\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/network': Network;\n }\n}\n","import { attr } from '@ember-data/model';\nimport { Tcp, TcpUdp, Udp } from 'customer-site/enums/CameraConnectionProtocol';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * Get translations strings for 'generic.wifi' from protocol enum values\n */\nexport const ProtocolTranslationMap: Record = {\n [Tcp]: 'tcp',\n [Udp]: 'udp',\n [TcpUdp]: 'tcpUdp'\n};\n\n/**\n * @classdesc\n *\n * Port forwarding rule.\n */\nexport default class PortForwardingRule extends BaseModel {\n /**\n * Internal IP address\n */\n @attr('string', { defaultValue: '' })\n declare ipAddress: string;\n\n /**\n * Internal Port\n */\n @attr('string', { defaultValue: '' })\n declare internalPort: string;\n\n /**\n * External Port\n */\n @attr('string', { defaultValue: '' })\n declare externalPort: string;\n\n /**\n * Protocol used (UDP/TCP/UDP+TCP)\n */\n @attr('number')\n declare protocol: number;\n\n /*\n * Get a translation key to display a human-readable value for protocol.\n */\n get protocolWord(): string {\n return ProtocolTranslationMap[this.protocol]\n ? `generic.wifi.${ProtocolTranslationMap[this.protocol]}`\n : 'generic.unknown';\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/port-forwarding-rule': PortForwardingRule;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from '@adc/app-infrastructure/models/base-model';\n\n/**\n * @classdesc\n *\n * Static lease model (for IQ Router v2).\n */\nexport default class StaticLease extends BaseModel {\n /**\n * What is the mac address for the static lease?\n */\n @attr('string', { defaultValue: '' })\n declare macAddress: string;\n\n /**\n * What is the ip address for the static lease?\n */\n @attr('string', { defaultValue: '' })\n declare ipAddress: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wifi/static-lease': StaticLease;\n }\n}\n","import AdcBaseRoute from '../classes/base-route';\nimport { EmberNewsAndUpdates } from '../enums/CustomerPageUrl';\n\n/**\n * Route for the News and Updates page.\n */\nexport default class NewsAndUpdatesRoute extends AdcBaseRoute {\n routeId = EmberNewsAndUpdates;\n\n isMediumWidthPage = true;\n}\n","import AdcBaseRoute from '../classes/base-route';\n\n/**\n * @classdesc\n * View for a \"not found\" route, something similar to 404.\n */\nexport default class NotFoundRoute extends AdcBaseRoute {\n redirect() {\n const { router } = this,\n url = window.location.pathname,\n { rootURL = '/' } = router.location;\n\n // Check if this is a legacy url and needs to be handled\n if (!url.toLowerCase().startsWith(rootURL)) {\n router.transitionTo('legacy-page', {\n queryParams: {\n url: encodeURIComponent(url)\n }\n });\n\n return;\n }\n\n // Change the URl if we came from a not found page.\n // Maybe we could pass the original url as a slug?\n // Or maybe we just want to redirect back to Index so that that one solves it.\n const routePath = '/not-found';\n\n if (url !== router.location.formatURL(routePath)) {\n router.transitionTo(routePath);\n }\n }\n\n canUserAccess() {\n return true;\n }\n}\n","import EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport type { ErrorPayload } from '@adc/template-helpers/helpers/validation-error';\nimport type Store from '@ember-data/store';\nimport type PushDeviceAddress from 'customer-site/models/users/push-device-address';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * Allows to save new changes or delete a device\n */\nexport default class EditManageDevicesController extends EmberController {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n declare model: ModelFrom;\n resolvedModel?: PushDeviceAddress;\n\n /**\n * When saving the device name fails, this is the error message.\n */\n @reads('resolvedModel.errors.address')\n declare errorMessage: ErrorPayload;\n\n /**\n * Saves the push device.\n */\n @action\n saveDevice(device: PushDeviceAddress): Promise {\n return device.save();\n }\n\n /**\n * Deletes the push device.\n */\n @action\n async deleteDevice(device: PushDeviceAddress): Promise {\n const { contextManager } = this;\n await device.destroyRecord();\n\n contextManager.transitionToPreviousRoute();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'notifications/manage-devices/edit': EditManageDevicesController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberPushDevicesEdit } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type PushDeviceAddress from 'customer-site/models/users/push-device-address';\n\n/**\n * Edit route for push devices.\n */\nexport default class EditManageDevicesRoute extends AdcBaseRoute {\n @service declare store: Store;\n\n routeId = EmberPushDevicesEdit;\n\n model({ id_device }: { id_device: string }): { device: ADCAsyncStoreFindRecord } {\n return {\n device: this.store.findRecord('users/push-device-address', id_device)\n };\n }\n}\n","import EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n EmberUserEditLanguage,\n EmberEnterpriseAccessControlUserEditLanguage,\n EmberAccessControlUserEditLanguage,\n EmberEnterpriseUserEditLanguage\n} from 'customer-site/enums/CustomerPageUrl';\n\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\nexport default class ManageDevicesIndexController extends EmberController {\n @service declare contextManager: ContextManager;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * Returns the display name of the current locale.\n */\n @computed('resolvedModel.user.localeId', 'contextManager.identityModel.profile.availableLocales')\n get currentLocaleDisplayName(): string {\n return (\n this.contextManager.identityModel.profile.availableLocales.findBy(\n 'id',\n String(this.resolvedModel?.user?.localeId)\n )?.displayName ?? ''\n );\n }\n\n @computed('contextManager.identityModel.{isEnterprise,isAccessControl}')\n get editLanguageRoute(): number {\n const { isEnterprise, isAccessControl } = this.contextManager.identityModel;\n\n if (isEnterprise) {\n return isAccessControl ? EmberEnterpriseAccessControlUserEditLanguage : EmberEnterpriseUserEditLanguage;\n }\n\n return isAccessControl ? EmberAccessControlUserEditLanguage : EmberUserEditLanguage;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'notifications/manage-devices/index': ManageDevicesIndexController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberPushDevices } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type PushDeviceAddress from 'customer-site/models/users/push-device-address';\n\n/**\n * @classdesc\n * Index route for managing push devices.\n */\nexport default class NotificationsManageDevicesIndexRoute extends AdcBaseRoute {\n @service declare store: Store;\n\n routeId = EmberPushDevices;\n\n model(): {\n devices: ADCAsyncStoreFindAll;\n user: Promise | undefined>;\n } {\n const devices = this.store.findAll('users/push-device-address');\n\n return {\n devices,\n user: devices.then((devices) => devices.objectAt(0)?.user)\n };\n }\n}\n","import Ember from 'ember';\nimport { registerWaiter } from '@ember/test';\n\n// this ensures that if @ember/test-waiters exists in multiple places in the\n// build output we will still use a single map of waiters (there really should\n// only be one of them, or else `settled` will not work at all)\nconst WAITERS = function () {\n const HAS_SYMBOL = typeof Symbol !== 'undefined';\n let symbolName = 'TEST_WAITERS';\n let symbol = HAS_SYMBOL ? Symbol.for(symbolName) : symbolName;\n let global = getGlobal();\n let waiters = global[symbol];\n if (waiters === undefined) {\n waiters = global[symbol] = new Map();\n }\n return waiters;\n}();\nfunction indexable(input) {\n return input;\n}\nfunction getGlobal() {\n // eslint-disable-next-line node/no-unsupported-features/es-builtins\n if (typeof globalThis !== 'undefined') return indexable(globalThis);\n if (typeof self !== 'undefined') return indexable(self);\n if (typeof window !== 'undefined') return indexable(window);\n if (typeof global !== 'undefined') return indexable(global);\n throw new Error('unable to locate global object');\n}\n/**\n * Backwards compatibility with legacy waiters system.\n *\n * We want to always register a waiter using the legacy waiter system, as right\n * now if consumers are not on the right version of @ember/test-helpers, using\n * this addon will result in none of these waiters waiting.\n */\n// eslint-disable-next-line ember/new-module-imports\n\nif (Ember.Test) {\n registerWaiter(() => !hasPendingWaiters());\n}\n/**\n * Registers a waiter.\n *\n * @public\n * @param waiter {Waiter} A test waiter instance\n */\n\nexport function register(waiter) {\n WAITERS.set(waiter.name, waiter);\n}\n/**\n * Un-registers a waiter.\n *\n * @public\n * @param waiter {Waiter} A test waiter instance\n */\n\nexport function unregister(waiter) {\n WAITERS.delete(waiter.name);\n}\n/**\n * Gets an array of all waiters current registered.\n *\n * @public\n * @returns {Waiter[]}\n */\n\nexport function getWaiters() {\n let result = [];\n WAITERS.forEach(value => {\n result.push(value);\n });\n return result;\n}\n/**\n * Clears all waiters.\n *\n * @private\n */\n\nexport function _reset() {\n for (let waiter of getWaiters()) {\n waiter.isRegistered = false;\n }\n WAITERS.clear();\n}\n/**\n * Gets the current state of all waiters. Any waiters whose\n * `waitUntil` method returns false will be considered `pending`.\n *\n * @returns {PendingWaiterState} An object containing a count of all waiters\n * pending and a `waiters` object containing the name of all pending waiters\n * and their debug info.\n */\n\nexport function getPendingWaiterState() {\n let result = {\n pending: 0,\n waiters: {}\n };\n WAITERS.forEach(waiter => {\n if (!waiter.waitUntil()) {\n result.pending++;\n let debugInfo = waiter.debugInfo();\n result.waiters[waiter.name] = debugInfo || true;\n }\n });\n return result;\n}\n/**\n * Determines if there are any pending waiters.\n *\n * @returns {boolean} `true` if there are pending waiters, otherwise `false`.\n */\n\nexport function hasPendingWaiters() {\n let state = getPendingWaiterState();\n return state.pending > 0;\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { warn } from '@ember/debug';\nimport Token from './token';\nimport { register } from './waiter-manager';\nconst WAITER_NAME_PATTERN = /^[^:]*:?.*/;\nlet WAITER_NAMES = DEBUG ? new Set() : undefined;\nexport function _resetWaiterNames() {\n WAITER_NAMES = new Set();\n}\nfunction getNextToken() {\n return new Token();\n}\nclass TestWaiterImpl {\n constructor(name, nextToken) {\n _defineProperty(this, \"isRegistered\", false);\n _defineProperty(this, \"items\", new Map());\n _defineProperty(this, \"completedOperationsForTokens\", new WeakMap());\n _defineProperty(this, \"completedOperationsForPrimitives\", new Map());\n this.name = name; // @ts-ignore\n\n this.nextToken = nextToken || getNextToken;\n }\n beginAsync(token = this.nextToken(), label) {\n this._register();\n if (this.items.has(token)) {\n throw new Error(`beginAsync called for ${token} but it is already pending.`);\n }\n let error = new Error();\n this.items.set(token, {\n get stack() {\n return error.stack;\n },\n label\n });\n return token;\n }\n endAsync(token) {\n if (!this.items.has(token) && !this._getCompletedOperations(token).has(token)) {\n throw new Error(`testWaiter.endAsync called with no preceding testWaiter.beginAsync call.\n Test waiter calls should always be paired. This can occur when a test waiter's paired calls are invoked in a non-deterministic order.\n\n See https://github.com/emberjs/ember-test-waiters#keep-beginasyncendasync-in-same-block-scope for more information.`);\n }\n this.items.delete(token); // Mark when a waiter operation has completed so we can distinguish\n // whether endAsync is being called before a prior beginAsync call above.\n\n this._getCompletedOperations(token).set(token, true);\n }\n waitUntil() {\n return this.items.size === 0;\n }\n debugInfo() {\n let result = [];\n this.items.forEach(value => {\n result.push(value);\n });\n return result;\n }\n reset() {\n this.items.clear();\n }\n _register() {\n if (!this.isRegistered) {\n register(this);\n this.isRegistered = true;\n }\n }\n _getCompletedOperations(token) {\n let type = typeof token;\n let isFunction = type === 'function';\n let isObject = token !== null && type === 'object';\n let isPrimitive = !isFunction && !isObject;\n return isPrimitive ? this.completedOperationsForPrimitives : this.completedOperationsForTokens;\n }\n}\nclass NoopTestWaiter {\n constructor(name) {\n this.name = name;\n }\n beginAsync() {\n return this;\n }\n endAsync() {}\n waitUntil() {\n return true;\n }\n debugInfo() {\n return [];\n }\n reset() {}\n}\n/**\n * Builds and returns a test waiter. The type of the\n * returned waiter is dependent on whether the app or\n * addon is in `DEBUG` mode or not.\n *\n * @public\n *\n * @param name {string} The name of the test waiter\n * @returns {TestWaiter}\n *\n * @example\n *\n * import Component from '@ember/component';\n * import { buildWaiter } from '@ember/test-waiters';\n *\n * if (DEBUG) {\n * let waiter = buildWaiter('friend-waiter');\n * }\n *\n * export default class Friendz extends Component {\n * didInsertElement() {\n * let token = waiter.beginAsync(this);\n *\n * someAsyncWork().then(() => {\n * waiter.endAsync(token);\n * });\n * }\n * }\n */\n\nexport default function buildWaiter(name) {\n if (DEBUG) {\n warn(`The waiter name '${name}' is already in use`, !WAITER_NAMES.has(name), {\n id: '@ember/test-waiters.duplicate-waiter-name'\n });\n WAITER_NAMES.add(name);\n }\n if (!DEBUG) {\n return new NoopTestWaiter(name);\n } else {\n warn(`You must provide a name that contains a descriptive prefix separated by a colon.\n\n Example: ember-fictitious-addon:some-file\n\n You passed: ${name}`, WAITER_NAME_PATTERN.test(name), {\n id: '@ember/test-waiters.invalid-waiter-name'\n });\n return new TestWaiterImpl(name);\n }\n}","/* eslint-disable ember/no-private-routing-service */\n/*\n This code is adapted from ember-engines/addon/-private/router-ext.js.\n*/\nimport EmberRouter from '@ember/routing/router';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { macroCondition, getGlobalConfig } from '@embroider/macros';\n\ninterface GlobalConfig {\n '@embroider/core'?: { active: boolean };\n}\n\nlet Router: typeof EmberRouter;\n\ninterface GetRoute {\n (name: string): unknown;\n isEmbroiderRouterHandler?: true;\n}\n\ninterface Internals {\n _engineInfoByRoute: Record;\n _routerMicrolib: {\n getRoute: GetRoute;\n };\n}\n\ninterface EmbroiderBundle {\n names: string[];\n loaded?: true;\n load: () => Promise;\n}\n\nif (macroCondition(getGlobalConfig()['@embroider/core']?.active ?? false)) {\n const waiter = buildWaiter('@embroider/router:lazy-route-waiter');\n\n function embroiderBundles(): {\n _embroiderEngineBundles_?: EmbroiderBundle[];\n _embroiderRouteBundles_?: EmbroiderBundle[];\n } {\n return window as ReturnType;\n }\n\n class EmbroiderRouter extends EmberRouter {\n private seenByRoute = new Set();\n\n private lazyRoute(this: this & Internals, routeName: string): EmbroiderBundle | undefined {\n let bundles = embroiderBundles();\n if (bundles._embroiderRouteBundles_) {\n return bundles._embroiderRouteBundles_.find(bundle => bundle.names.indexOf(routeName) !== -1);\n }\n return undefined;\n }\n\n private lazyEngine(this: this & Internals, routeName: string): EmbroiderBundle | undefined {\n // Here we map engine names to route names. We need to do this because\n // engines can be specified with \"as\" such as:\n //\n // this.mount('lazy-engine', { path: '/use-lazy-engine', as: 'use-lazy-engine' });\n //\n // This presents a problem at build time since we cant get this \"mount point\" name. This is because the\n // router is dynamic and the string could be defined as anything. Luckly, this._engineInfoByRoute contains\n // mappings from routeName to the engines \"original name\" (which we know at build time).\n let bundles = embroiderBundles();\n let engine = this._engineInfoByRoute[routeName];\n if (engine && bundles._embroiderEngineBundles_) {\n let engineName = engine.name;\n return bundles._embroiderEngineBundles_.find(bundle => bundle.names.indexOf(engineName) !== -1);\n }\n return undefined;\n }\n\n private isEngine(this: this & Internals, name: string): boolean {\n return Boolean(this._engineInfoByRoute[name]);\n }\n\n // This is necessary in order to prevent the premature loading of lazy routes\n // when we are merely trying to render a link-to that points at them.\n // Unfortunately the stock query parameter behavior pulls on routes just to\n // check what their previous QP values were.\n _getQPMeta(this: this & Internals, handlerInfo: { name: string }, ...rest: unknown[]) {\n let bundle = this.lazyRoute(handlerInfo.name);\n if (bundle && !bundle.loaded) {\n // unloaded split routes\n return undefined;\n }\n\n if (this.isEngine(handlerInfo.name) && !this.seenByRoute.has(handlerInfo.name)) {\n // unvisited engines, whether loaded or not, because the same bundle\n // could by mounted multiple places and engines expect to only run the\n // super._getQPMeta after they've been visited.\n return undefined;\n }\n\n bundle = this.lazyEngine(handlerInfo.name);\n if (bundle && !bundle.loaded) {\n // unloaded lazy engines\n return undefined;\n }\n\n // @ts-expect-error extending private method\n return super._getQPMeta(handlerInfo, ...rest);\n }\n\n // This is the framework method that we're overriding to provide our own\n // handlerResolver.\n setupRouter(this: this & Internals, ...args: unknown[]) {\n // @ts-expect-error extending private method\n let isSetup = super.setupRouter(...args);\n let microLib = this._routerMicrolib;\n if (!microLib.getRoute.isEmbroiderRouterHandler) {\n microLib.getRoute = this._handlerResolver(microLib.getRoute.bind(microLib));\n }\n return isSetup;\n }\n\n private _handlerResolver(this: this & Internals, original: (name: string) => unknown) {\n let handler = ((name: string) => {\n const bundle = this.lazyRoute(name) ?? this.lazyEngine(name);\n this.seenByRoute.add(name);\n if (!bundle || bundle.loaded) {\n return original(name);\n }\n\n let token = waiter.beginAsync();\n\n return bundle.load().then(\n () => {\n waiter.endAsync(token);\n bundle.loaded = true;\n return original(name);\n },\n err => {\n waiter.endAsync(token);\n throw err;\n }\n );\n }) as GetRoute;\n handler.isEmbroiderRouterHandler = true;\n return handler;\n }\n }\n\n Router = EmbroiderRouter;\n} else {\n Router = EmberRouter;\n}\n\nexport default Router;\n","import { DEBUG } from '@glimmer/env';\nimport buildWaiter from './build-waiter';\nconst PROMISE_WAITER = buildWaiter('@ember/test-waiters:promise-waiter');\n/**\n * A convenient utility function to simplify waiting for a promise.\n *\n * @public\n * @param promise {Promise | RSVP.Promise} The promise to track async operations for\n * @param label {string} An optional string to identify the promise\n *\n * @example\n *\n * import Component from '@ember/component';\n * import { waitForPromise } from '@ember/test-waiters';\n *\n * export default class Friendz extends Component {\n * didInsertElement() {\n * waitForPromise(new Promise(resolve => {\n * doSomeWork();\n * resolve();\n * }));\n * }\n * }\n */\n\nexport default function waitForPromise(promise, label) {\n let result = promise;\n if (DEBUG) {\n PROMISE_WAITER.beginAsync(promise, label);\n result = promise.then(value => {\n PROMISE_WAITER.endAsync(promise);\n return value;\n }, error => {\n PROMISE_WAITER.endAsync(promise);\n throw error;\n });\n }\n return result;\n}","import { DEBUG } from '@glimmer/env';\nimport waitForPromise from './wait-for-promise';\nimport buildWaiter from './build-waiter';\nexport default function waitFor(...args) {\n let isFunction = args.length < 3;\n if (isFunction) {\n let [fn, label] = args;\n return wrapFunction(fn, label);\n } else {\n let [,, descriptor, label] = args;\n if (!DEBUG) {\n return descriptor;\n }\n let fn = descriptor.value;\n descriptor.value = wrapFunction(fn, label);\n return descriptor;\n }\n}\nfunction wrapFunction(fn, label) {\n if (!DEBUG) {\n return fn;\n }\n return function (...args) {\n let result = fn.call(this, ...args);\n if (isThenable(result)) {\n return waitForPromise(result, label);\n } else if (isGenerator(result)) {\n return waitForGenerator(result, label);\n } else {\n return result;\n }\n };\n}\nfunction isThenable(maybePromise) {\n let type = typeof maybePromise;\n return (maybePromise !== null && type === 'object' || type === 'function') && typeof maybePromise.then === 'function';\n}\nfunction isGenerator(maybeGenerator) {\n // Because we don't have Symbol.iterator in IE11\n return typeof maybeGenerator.next === 'function' && typeof maybeGenerator.return === 'function' && typeof maybeGenerator.throw === 'function';\n}\nconst GENERATOR_WAITER = buildWaiter('@ember/test-waiters:generator-waiter');\nfunction waitForGenerator(generator, label) {\n GENERATOR_WAITER.beginAsync(generator, label);\n let isWaiting = true;\n function stopWaiting() {\n if (isWaiting) {\n GENERATOR_WAITER.endAsync(generator);\n isWaiting = false;\n }\n }\n return {\n next(...args) {\n let hasErrored = true;\n try {\n let val = generator.next(...args);\n hasErrored = false;\n if (val.done) {\n stopWaiting();\n }\n return val;\n } finally {\n // If generator.next() throws, we need to stop waiting. But if we catch\n // and re-throw exceptions, it could move the location from which the\n // uncaught exception is thrown, interfering with the developer\n // debugging experience if they have break-on-exceptions enabled. So we\n // use a boolean flag and a finally block to emulate a catch block.\n if (hasErrored) {\n stopWaiting();\n }\n }\n },\n return(...args) {\n stopWaiting();\n return generator.return(...args);\n },\n throw(...args) {\n stopWaiting();\n return generator.throw(...args);\n }\n };\n}","import { inject as service } from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { scheduleTask } from 'ember-lifeline';\nimport config from 'customer-site/config/environment';\nimport { LEGACY_PAGE_ROUTE_NAME } from '@adc/app-infrastructure/routes/utils';\nimport EmberRouter from '@embroider/router';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * Tracks page transitions for registered services.\n */\nfunction onPageTransition(this: ApplicationRouter, transition: Transition): void {\n if (!this.stats.isPolling) {\n this.stats.startPolling();\n }\n\n const { to } = transition;\n if (!to) {\n return;\n }\n\n // TODO: Maybe we could batch the sends to routeTransition somehow so that we are not doing it while loading data?\n // Only do this work when browser is not busy so that nothing else is blocked.\n (window.requestIdleCallback || window.requestAnimationFrame)(() => {\n // Wrapping in try-catch so that this does not cause an app crash.\n try {\n const title = to.name;\n\n // Track route transition so that it can be logged in IIS if this is not legacy page.\n // - We do not log legacy page because that is already done by .Net automatically.\n if (title && title !== LEGACY_PAGE_ROUTE_NAME) {\n const page = (this.rootURL + this.router.currentURL).replace('//', '/');\n\n this.ajax.apiRequest(\n `swa/routeTransition/?page=${encodeURIComponent(page)}&routePath=${encodeURIComponent(\n this.router.currentRouteName\n )}`\n );\n\n this.metrics.trackPage({ page, title });\n }\n } catch (e) {\n if (e.message) {\n // Log error to Sentry so that we can fix the issue.\n console.error(e.message, e);\n }\n }\n });\n}\n\n/**\n * @classdesc\n * The application router.\n */\nexport default class ApplicationRouter extends EmberRouter {\n location = config.locationType;\n rootURL = config.rootURL;\n\n @service declare stats: ServiceRegistry['stats'];\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare accessibility: ServiceRegistry['accessibility'];\n @service declare homepageManager: ServiceRegistry['homepage-manager'];\n @service declare announcer: ServiceRegistry['announcer'];\n @service declare router: ServiceRegistry['router'];\n @service declare metrics: {\n trackPage(props: { page: string; title: string }): void;\n };\n\n announceRouteChange = task({ restartable: true }, async () => {\n await timeout(100);\n this.announcer.announce(document.title.trim(), 'polite');\n });\n\n constructor(...args: any[]) {\n super(...args);\n\n this.on('routeDidChange', (transition: Transition) => {\n this.homepageManager.removeTrapFocusListener();\n // Do not log this while running tests.\n if (!this.envSettings.isTestEnvironment()) {\n // Schedule page tracking for after render.\n scheduleTask(this, 'routerTransitions', onPageTransition, transition);\n this.announceRouteChange.perform();\n }\n });\n }\n}\n\nApplicationRouter.map(function () {\n this.route('home', function () {\n this.route('ac-doors', function () {\n this.route('edit', { path: '/:id_device' });\n this.route('rules');\n });\n this.route('ac-elevators', function () {\n this.route('edit', { path: '/:id_device' });\n });\n this.route('locks', function () {\n this.route('rules');\n this.route('edit', { path: '/:id_device' });\n });\n this.route('garage', function () {\n this.route('rules');\n this.route('edit', { path: '/:id_device' });\n });\n this.route('partitions', function () {\n this.route('rules');\n this.route('reports');\n this.route('smart-arming');\n this.route('arming-schedules');\n this.route('edit', { path: '/:id_device' });\n });\n this.route('water', function () {\n this.route('edit', { path: '/:id_device' });\n this.route('rules');\n });\n this.route('sump-pumps', function () {\n this.route('edit', { path: '/:id_device' });\n });\n this.route('chimes', { path: 'chimes/:id_smart_chime_device' }, function () {\n this.route('settings');\n this.route('wireless-networks');\n });\n this.route('lights', function () {\n this.route('rules');\n this.route('schedules');\n this.route('edit', { path: '/:id_device' });\n this.route('group-details', { path: 'group-details/:id_group' });\n });\n this.route('noise');\n this.route('thermostats', function () {\n this.route('boilers');\n this.route('rules');\n this.route('edit', { path: '/:id_device' });\n this.route('schedules', function () {\n this.route('edit', { path: '/:id_thermostat' }, function () {\n this.route('schedule-type');\n this.route('setpoint', { path: 'setpoint/:setpoint_type' });\n });\n });\n this.route('reports');\n this.route('thermostat-grouping');\n this.route('smart-schedule-audit', { path: 'smart-schedule-audit/:id_smart_schedule' });\n this.route('peak-protect', { path: '/peak-protect/:id_thermostat' }, function () {\n this.route('utility');\n this.route('schedule');\n });\n this.route('thermostat-reward-program');\n });\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/route-path-style\n this.route('image-sensors.rules');\n\n this.route('feature-suggestions');\n this.route('gates', function () {\n this.route('rules');\n this.route('edit', { path: '/:id_device' });\n });\n this.route('shades', function () {\n this.route('schedules');\n this.route('edit', { path: '/:id_device' });\n });\n this.route('switches', function () {\n this.route('edit', { path: '/:id_device' });\n });\n this.route('cc-control');\n this.route('mpers-devices', function () {\n this.route('edit', { path: '/:id_mpers_device' });\n });\n this.route('sensors', function () {\n this.route('reports');\n this.route('rules');\n });\n\n this.route('wellness', function () {\n this.route('reports');\n });\n });\n\n this.route('users', function () {\n this.route('edit', { path: '/:id_user' }, function () {\n this.route('face-recognition', function () {\n this.route('review');\n this.route('modify');\n this.route('invalid');\n });\n this.route('user-information');\n this.route('device-access');\n this.route('access-period');\n this.route('user-type');\n this.route('language');\n this.route('contact-information', { path: 'contact-information/:contact_address' });\n this.route('add-contact');\n this.route('not-supported');\n this.route('type');\n this.route('new-user-add-contact-information');\n this.route('link-login');\n this.route('username');\n\n this.route('user-attributes', function () {\n this.route('edit', { path: '/:id_attribute' });\n });\n });\n this.route('user-access-review', function () {\n this.route('edit', { path: '/:id_unassigned_user_code' }, function () {\n this.route('assign-user');\n });\n });\n this.route('merge-users-list', { path: 'merge-users-list/:id_user' });\n this.route('merge-users-preview', { path: 'merge-users-preview/:id_ssu/:id_stu' });\n });\n\n this.route('reports-center', function () {\n this.route('archives');\n });\n\n this.route('access-control', function () {\n this.route('access-points', function () {\n this.route('edit', { path: '/:id_access_point' });\n });\n this.route('elevators', function () {});\n this.route('access-plans', function () {\n this.route('edit', { path: '/:id_access_plan' });\n this.route('new');\n });\n this.route('timetables', function () {\n this.route('edit', { path: '/:id_timetable' });\n });\n this.route('users', function () {\n this.route('edit', { path: '/:id_user' }, function () {\n this.route('user-information');\n this.route('language');\n this.route('add-contact');\n this.route('contact-information', { path: 'contact-information/:contact_address' });\n this.route('user-group');\n this.route('expiring-credentials');\n this.route('access-plans');\n this.route('user-attributes', function () {\n this.route('edit', { path: '/:id_attribute' });\n });\n this.route('link-login');\n this.route('username');\n });\n this.route('edit-not-supported');\n this.route('bulk-create');\n this.route('user-groups', function () {\n this.route('edit', { path: '/:group_id' });\n this.route('new');\n });\n this.route('promote-user', { path: 'promote-user/:id_user' });\n this.route('merge-users-list', { path: 'merge-users-list/:id_user' });\n this.route('merge-users-preview', { path: 'merge-users-preview/:id_ssu/:id_stu' });\n });\n this.route('holidays', function () {\n this.route('edit');\n });\n this.route('system-mode-configuration', function () {\n this.route('lockdown-configuration', function () {\n this.route('edit', { path: '/:id_access_plan' });\n });\n });\n this.route('badge-management');\n this.route('logins', function () {\n this.route('edit', { path: '/:id_login' });\n });\n });\n\n this.route('automation', function () {\n this.route('rules', function () {\n this.route('builder', { path: '/:id_rule' }, function () {\n this.route('trigger', function () {\n this.route('details', function () {\n this.route('access-control');\n this.route('geo-location');\n });\n });\n this.route('action', function () {\n this.route('details', function () {\n this.route('chimes');\n this.route('lights');\n });\n });\n this.route('restrictions');\n this.route('notifications', function () {\n this.route('new-contact');\n });\n this.route('extra-rule-option', { path: 'extra-rule-option/:id_option' });\n this.route('mobile-no-support');\n this.route('select-lock-user');\n });\n });\n this.route('scenes', function () {});\n this.route('schedules', function () {\n this.route('wifi', { path: 'wifi/:id_schedule' });\n this.route('builder', { path: '/:id_schedule' }, function () {\n this.route('action', function () {\n this.route('details', function () {\n this.route('lights');\n });\n });\n this.route('follow-up');\n this.route('time');\n this.route('additional-option');\n this.route('mobile-no-support');\n });\n });\n this.route('remotes', function () {\n this.route('edit', { path: '/:id_device' });\n });\n this.route('smart-arming', function () {\n this.route('disarm-edit');\n this.route('arm-edit');\n });\n this.route('presence-state-settings');\n });\n\n this.route('default-notification-redirect');\n\n this.route('app-error');\n\n this.route('enterprise', function () {\n this.route('locations', function () {\n this.route('device-access');\n this.route('summary');\n this.route('fleet');\n this.route('personal-safety');\n this.route('thermostats');\n this.route('occupancy');\n this.route('temperatures');\n this.route('video');\n this.route('location', { path: '/:id_location' }, function () {\n this.route('panel');\n this.route('access-points');\n this.route('thermostats');\n this.route('edit', function () {\n this.route('users');\n });\n this.route('manual-move-in');\n this.route('manage-residents');\n this.route('manage-residents-v2');\n });\n });\n this.route('settings', function () {\n this.route('delete-inactive-users');\n this.route('user-settings');\n this.route('delete-expired-users');\n this.route('access-control-restricted-access');\n this.route('access-settings');\n this.route('communication-settings');\n this.route('noise-monitor-settings');\n this.route('energy-settings');\n this.route('panel-settings');\n this.route('permissions-and-integrations');\n this.route('self-guided-tours');\n this.route('water-settings');\n this.route('occupancy-based-thermostat-rules', function () {\n this.route('edit', { path: '/:id_template' });\n });\n this.route('thermostat-settings-templates', function () {\n this.route('edit', { path: '/:id_template' });\n });\n this.route('occupancy-based-pool-controller-rules', function () {\n this.route('edit', { path: '/:id_template' });\n });\n this.route('pool-control-filter-pump-schedules', function () {\n this.route('edit', { path: '/:id_template' });\n });\n this.route('noise-monitor-settings-templates', function () {\n this.route('edit', { path: '/:id_template' });\n });\n this.route('water-meter-configuration', function () {\n this.route('edit', { path: '/:id_template' });\n });\n this.route('welcome-email', function () {\n this.route('new');\n this.route('edit', { path: '/edit/:id_welcomeemail' });\n });\n this.route('new-business-hour-templates', function () {\n this.route('edit', { path: '/edit/:id_template' });\n this.route('apply', { path: '/apply/:id_template' });\n });\n this.route('arming-schedule-templates', function () {\n this.route('edit', { path: '/edit/:id_template' });\n this.route('apply', { path: '/apply/:id_template' });\n this.route('edit-arming-schedule', { path: '/edit-arming-schedule/:id_schedule' });\n });\n this.route('energy-saver-rules');\n this.route('guest-login-access');\n this.route('send-follow-up-text');\n this.route('backup-codes');\n this.route('auto-relock');\n this.route('house-ready-early');\n this.route('automatically-enable-background-capture');\n this.route('send-email-by-default');\n this.route('welcome-message');\n this.route('schedule-welcome-message');\n this.route('user-code-times');\n this.route('thermostat-schedule-templates');\n this.route('business-hour-templates');\n this.route('schedule-email');\n this.route('automatic-panel-arming');\n this.route('login-templates');\n this.route('property-management-integration');\n this.route('self-guided-tours-appointment-length');\n this.route('self-guided-tours-hours-of-operation');\n this.route('self-guided-tours-custom-url');\n this.route('self-guided-tours-support-phone');\n this.route('self-guided-tours-customer-logo');\n this.route('self-guided-tours-web-primary-color');\n this.route('self-guided-tours-cc-verification');\n this.route('self-guided-tours-checkpoint-id');\n this.route('self-guided-tours-configure-knock-crm');\n this.route('self-guided-tours-configure-funnel-crm');\n this.route('self-guided-tours-geofence');\n this.route('self-guided-tours-gate-code');\n this.route('self-guided-tours-community-site-map');\n this.route('self-guided-tours-terms-and-conditions');\n this.route('managed-account-access');\n this.route('temporary-access-code-settings');\n this.route('temporary-access-codes');\n this.route('temporary-access-code-duration');\n this.route('temporary-access-code-availability-schedule');\n this.route('preloaded-codes-for-user-creation');\n this.route('active-directory-setup', function () {\n this.route('active-directory-enterprise-group-mapping');\n this.route('active-directory-location-group-mapping');\n this.route('active-directory-authentication-provider-token');\n this.route('active-directory-group-to-plan-mapping');\n this.route('active-directory-bulk-plan-mapping');\n this.route('active-directory-bulk-login-mapping');\n });\n this.route('support-phone-number');\n this.route('company-logo');\n this.route('company-name');\n this.route('customize-welcome-email');\n this.route('mobile-badge');\n });\n this.route('groups', function () {\n this.route('add-location', { path: '/add-location/:id_selected_enterprise' });\n this.route('new-group', { path: '/new-group/:id_selected_enterprise' });\n this.route('new-enterprise');\n });\n this.route('reports', function () {\n this.route('catalog');\n this.route('edit', { path: '/:id_report' }, function () {\n this.route('video-health-report');\n this.route('access-history-report');\n this.route('user-summary-report');\n this.route('business-activity-analytics-report');\n this.route('alarms-issues-report');\n this.route('trouble-condition-report');\n this.route('trouble-condition-details-report');\n this.route('battery-level-report');\n this.route('user-activity-report');\n this.route('self-guided-tours-report');\n });\n });\n this.route('access-control', function () {\n this.route('access-plans', function () {\n this.route('edit', { path: '/:id_access_plan' });\n this.route('new');\n });\n this.route('users', function () {\n this.route('edit', { path: '/:id_user' }, function () {\n this.route('user-information');\n this.route('language');\n this.route('add-contact');\n this.route('contact-information', { path: 'contact-information/:contact_address' });\n this.route('access-plans');\n this.route('user-group');\n this.route('expiring-credentials');\n this.route('link-login');\n\n this.route('user-attributes', function () {\n this.route('edit', { path: '/:id_attribute' });\n });\n this.route('username');\n });\n this.route('edit-not-supported');\n this.route('bulk-create');\n this.route('user-groups', function () {\n this.route('edit', { path: '/:group_id' });\n this.route('new');\n });\n this.route('promote-user', { path: 'promote-user/:id_user' });\n this.route('merge-users-list', { path: 'merge-users-list/:id_user' });\n this.route('merge-users-preview', { path: 'merge-users-preview/:id_ssu/:id_stu' });\n });\n this.route('logins', function () {\n this.route('add-enterprise-logins-options');\n this.route('elevate-logins');\n this.route('edit', { path: '/:id_login' }, function () {\n this.route('multi-group-login');\n this.route('edit-scheduled-device-login');\n });\n this.route('new-login', function () {\n this.route('new-multi-group-login');\n this.route('new-scheduled-device-login');\n });\n this.route('associate', function () {\n this.route('multi-group-login');\n });\n });\n this.route('access-points', function () {\n this.route('edit', { path: '/:id_access_point' });\n });\n\n this.route('system-mode-configuration', function () {\n this.route('lockdown-configuration', function () {\n this.route('edit', { path: '/:id_access_plan' });\n });\n });\n\n this.route('holidays', function () {\n this.route('edit');\n });\n this.route('elevators', function () {});\n });\n this.route('video', function () {\n this.route('live-view');\n this.route('camera-groups');\n this.route('camera-groups.edit', { path: '/camera-groups/:id_camera_group' });\n this.route('clips', function () {});\n this.route('gallery', function () {});\n this.route('svr-timeline', function () {});\n this.route('advanced-video-search', { path: 'advanced-video-search/:id_camera' });\n this.route('thumbnail-search', { path: '/thumbnail-search/:id_camera' });\n });\n\n this.route('activity', function () {\n this.route('extended-activity-history', function () {});\n this.route('group-event-history');\n this.route('event-history', function () {\n this.route('image', { path: 'image/:id_evt' });\n this.route('video', { path: 'video/:id_evt' });\n });\n });\n\n this.route('users', function () {\n this.route('edit', { path: '/:id_user' }, function () {\n this.route('access-period');\n this.route('add-contact');\n this.route('contact-information', { path: 'contact-information/:contact_address' });\n this.route('device-access', function () {\n this.route('location-devices', { path: 'location-devices/:id_system' });\n this.route('user-code');\n this.route('access-type');\n });\n this.route('language');\n this.route('not-supported');\n this.route('user-information');\n this.route('user-type');\n this.route('new-user-add-contact-information');\n this.route('user-attributes', function () {\n this.route('edit', { path: '/:id_attribute' });\n });\n this.route('link-login');\n this.route('username');\n });\n this.route('merge-users-list', { path: 'merge-users-list/:id_user' });\n this.route('merge-users-preview', { path: 'merge-users-preview/:id_ssu/:id_stu' });\n });\n\n this.route('overview', function () {\n this.route('locations');\n this.route('community-dashboard');\n });\n\n this.route('logins', function () {\n this.route('add-enterprise-logins-options');\n this.route('elevate-logins');\n this.route('edit', { path: '/:id_login' }, function () {\n this.route('multi-group-login');\n this.route('edit-scheduled-device-login');\n });\n this.route('new-login', function () {\n this.route('new-multi-group-login');\n this.route('new-scheduled-device-login');\n });\n this.route('associate', function () {\n this.route('multi-group-login');\n });\n });\n this.route('multi-group-settings');\n this.route('alerts-issues');\n });\n\n this.route('info');\n\n this.route('external-page');\n\n this.route('alerts-issues', function () {\n this.route('water-leak-alert', { path: 'leak/:id_trouble_condition' });\n this.route('trouble-condition', { path: '/:id' });\n this.route('service-appointments', function () {\n this.route('service-appointment', { path: '/:id_request' }, function () {\n this.route('reasons', function () {\n this.route('third-party-service-scheduling');\n });\n this.route('timeframe', { path: '/timeframe/:id_timeframe' }, function () {\n this.route('select-date');\n this.route('select-times');\n });\n });\n });\n });\n\n this.route('legacy-page');\n\n // this is a catch-all route\n this.route('not-found', { path: '/*path' });\n this.route('sso', function () {\n this.route('my-account');\n this.route('support');\n this.route('contact-us');\n this.route('shop');\n this.route('home');\n this.route('equipment-setup');\n this.route('move-portal');\n this.route('custom');\n });\n\n this.route('commercial', function () {\n this.route('reports', function () {\n this.route('webview');\n this.route('catalog');\n this.route('edit', { path: '/:id_report' }, function () {\n this.route('video-health-report');\n this.route('access-history-report');\n this.route('user-summary-report');\n this.route('business-activity-analytics-report');\n this.route('alarms-issues-report');\n this.route('trouble-condition-report');\n this.route('trouble-condition-details-report');\n this.route('battery-level-report');\n this.route('user-activity-report');\n this.route('self-guided-tours-report');\n });\n });\n this.route('temperatures', function () {\n this.route('summary', function () {\n this.route('edit', { path: '/:id' });\n });\n this.route('profiles', function () {\n this.route('edit', { path: '/:id' });\n });\n this.route('reports');\n });\n this.route('arming-schedules', function () {\n this.route('create');\n this.route('edit', { path: '/:id_schedule' });\n });\n });\n\n this.route('video', function () {\n this.route('live-view');\n this.route('camera-groups');\n this.route('camera-groups.edit', { path: '/camera-groups/:id_camera_group' });\n\n this.route('onboard');\n this.route('svr-timeline');\n\n this.route('rules', function () {\n this.route('analytics', { path: '/analytics/:id' }, function () {\n this.route('select');\n this.route('draw', function () {\n this.route('v2');\n });\n this.route('settings');\n });\n });\n this.route('schedules', function () {\n this.route('onboard', function () {\n this.route('edit', { path: '/:id_schedule' });\n });\n\n this.route('svr', function () {\n this.route('select');\n this.route('edit', { path: '/:id_schedule' });\n });\n });\n\n this.route('classifier-visualization');\n\n this.route('cameras', function () {\n this.route('camera', { path: '/:id_camera' }, function () {\n this.route('calibrate', function () {\n this.route('capture', { path: '/capture/:index' });\n this.route('edit', { path: '/edit/:index' });\n this.route('review');\n });\n this.route('analytics');\n\n this.route('post-install', function () {\n this.route('power-check');\n this.route('wedge-select');\n this.route('chime-select');\n this.route('qualitative-power-check');\n });\n });\n });\n this.route('settings', function () {\n this.route('camera', { path: '/:id_selected_camera' }, function () {\n // routes under camera route loads in a device from the parent route\n this.route('general', function () {\n this.route('firmware');\n });\n this.route('network-info', function () {\n this.mount('@adc/network-config-engine', { path: '/network-setup', as: 'network-setup' });\n });\n this.route('audio');\n this.route('video-config', function () {\n this.route('clip-length');\n this.route('clip-quality');\n this.route('image-settings');\n this.route('sd-card-info');\n this.route('privacy-zones');\n this.route('third-party-stream', function () {\n this.route('edit', { path: 'edit/:id_selected_stream' });\n });\n this.route('varifocal-fov');\n this.route('digital-fov');\n });\n this.route('alerts');\n this.route('lights-overview');\n this.route('device-status');\n });\n this.route('sd-card-management', { path: 'sd-card-management/:id_selected_camera' });\n this.route('stream-video-panel');\n this.route('stream-video-panel-v2');\n this.route('varifocal-fov', { path: 'varifocal-fov/:id_selected_camera' });\n this.route('digital-fov', { path: 'digital-fov/:id_selected_camera' });\n this.route('privacy-zones', { path: 'privacy-zones/:id_selected_camera' });\n this.route('advanced-setup', { path: 'advanced-setup/:id_selected_camera' });\n this.route('stream', { path: 'stream/:id_selected_camera' }, function () {\n // This empty function sets up an index route for us\n });\n this.route('enrollment-terms');\n this.route('familiar-subject', function () {\n this.route('review', { path: 'review/:id_cluster' }, function () {\n this.route('edit');\n this.route('photos');\n this.route('notifications');\n });\n this.route('vehicles', function () {\n this.route('camera-access');\n this.route('incorrect-photos');\n this.route('feature-management');\n this.route('faq');\n this.route('recent-images');\n });\n this.route('faces', function () {\n this.route('recent-images');\n this.route('camera-access');\n this.route('feature-management');\n this.route('incorrect-photos');\n });\n });\n this.route('video-device-signal-strength', { path: 'video-device-signal-strength/:id_smart_chime_device' });\n this.route('lights', { path: 'lights/:id_selected_camera' });\n this.route('signal-strength-info', { path: 'signal-strength-info/:id_selected_camera' });\n this.route('motion-detection', { path: 'motion-detection/:id_selected_camera' });\n this.route('light-triggers', { path: 'light-triggers/:id_selected_camera' });\n this.route('motion-configuration', { path: 'motion-configuration/:id_selected_camera' });\n this.route('intercom', function () {\n this.route('setup');\n this.route('video-device-select');\n this.route('customize-directory');\n this.route('associated-device-select');\n this.route('qr-code');\n this.route('create-directory');\n this.route('add-directory');\n this.route('edit-directory', { path: 'edit-directory/:id_edit_directory' });\n this.route('connect-unit-to-system', { path: 'connect-unit-to-system/:id_selected_intercom' });\n this.route('set-concierge', { path: 'set-concierge/:id_selected_intercom' });\n this.route('name-directory-list', { path: 'name-directory-list/:id_selected_intercom' });\n });\n this.route('motion-detection-test');\n this.route('battery-motion-sensitivity-settings');\n this.route('battery-status');\n });\n\n this.route('settings-overview');\n\n this.route('clip-feedback');\n this.route('familiar-subject-clip-feedback', { path: 'familiar-subject-clip-feedback/:id_clip' });\n\n this.route('add-device-redirect');\n\n this.route('business-activity-analytics', function () {\n this.route('rule-list');\n this.route('heat-mapping');\n this.route('rule', { path: 'rule/:id_rule' });\n this.route('rule-group-list');\n this.route('rule-group', { path: 'rule-group/:id_group' });\n this.route('reports');\n });\n\n this.route('clips', function () {});\n this.route('clips-usage-report');\n\n this.route('gallery', function () {});\n\n this.route('international-tests');\n\n this.route('drone-install');\n\n this.route('appearance-search-results');\n\n this.route('onvif-install', function () {\n this.route('terms-of-service');\n this.route('credentials');\n this.route('naming', function () {\n this.route('edit', { path: '/:index' });\n });\n });\n\n this.route('advanced-video-search', { path: 'advanced-video-search/:id_camera' });\n this.route('webrtc-test');\n this.route('youtube-player');\n\n this.route('intercom-contact', function () {\n this.route('enrollment', function () {\n this.route('edit');\n this.route('notifications');\n });\n this.route('edit');\n this.route('notifications');\n });\n this.route('install-overview', function () {\n this.route('replace');\n this.route('install');\n });\n this.route('thumbnail-search', { path: '/thumbnail-search/:id_camera' });\n });\n\n this.route('visual-verification', function () {\n this.route('live-view');\n this.route('v2');\n this.route('responder');\n this.route('onboard-timeline');\n this.route('svr-timeline');\n });\n\n this.route('operator', function () {\n this.route('index', { path: '/' });\n this.route('select-alarm');\n this.route('personal-safety', { path: 'personal-safety/:id_alarm' });\n });\n\n this.route('settings', function () {\n this.route('panel-wifi', function () {\n this.route('config');\n this.route('networks');\n });\n this.route('manage-devices', function () {\n this.route('associated-devices');\n });\n this.route('voice', function () {\n this.route('edit', { path: '/edit/:id_mobile_device_type' });\n });\n this.route('login-information', function () {\n this.route('password');\n this.route('security-question');\n\n this.mount('@adc/login-setup-engine', { path: '/login-setup', as: 'login-setup' });\n\n this.route('new-device-alerts');\n this.route('email-address');\n this.route('site-appearance');\n this.route('login-name');\n this.route('language');\n this.route('multi-system-access', function () {\n this.route('setup');\n });\n this.route('communication-preferences');\n this.route('device-link-request');\n });\n\n this.route('car');\n\n // Routable Ember engine.\n this.mount('@adc/add-device-engine', { as: 'add-device' });\n\n this.route('face-recognition');\n\n this.route('account-management', function () {\n this.route('user-slot-management');\n\n this.mount('@adc/login-setup-engine', { path: '/login-setup', as: 'login-setup' });\n this.route('property-information');\n this.route('move-portal-survey', function () {\n this.route('completed');\n this.route('edit');\n });\n });\n\n this.route('managed-account-access');\n this.route('access-control-lockdown');\n this.route('noise-settings', { path: '/noise-settings/:id_selected_noise_sensor' });\n this.route('mobile-settings', { path: '/mobile-settings/:id_mobile_device' });\n\n this.route('monitoring-station', function () {\n this.route('monitoring-certificate');\n this.mount('@adc/login-setup-engine', { path: '/login-setup', as: 'login-setup' });\n this.route('property-actions');\n this.route('property-notes', function () {\n this.route('property-note-edit', { path: '/:id' });\n });\n this.route('video');\n });\n this.route('control-panel-settings', function () {\n this.route('sensor-names');\n this.route('panel-audio');\n this.route('alarm-delay-settings');\n });\n this.route('access-control-restricted-access');\n this.route('business-hours');\n\n this.route('bluetooth', function () {\n this.route('disarming-settings', function () {\n this.route('edit-disarm-timeout');\n this.route('device-list');\n });\n this.route('device-settings', { path: '/device-settings/:id_bluetooth_device' }, function () {\n this.route('partition-list');\n });\n });\n this.route('everbridge-integration', function () {\n this.route('edit', { path: '/:id_configuration' });\n });\n });\n\n this.route('support', function () {\n this.route('support-website');\n this.route('upcoming-appointments');\n this.route('service-appointments');\n this.route('create');\n this.route('feedback');\n });\n\n this.route('news-and-updates');\n\n this.route('activity', function () {\n this.route('highlights', { path: 'highlights/:id_day' });\n this.route('event-history', function () {\n this.route('image', { path: 'image/:id_evt' });\n this.route('video', { path: 'video/:id_evt' });\n this.route('thumbnail', { path: 'thumbnail/:id_evt' });\n this.route('snapshot', { path: 'snapshot/:id_evt' });\n });\n this.route('extended-activity-history', function () {});\n this.route('heat-map');\n this.route('alarm-recap');\n });\n\n // TODO: Delete this route once the Climax wizard is no longer using it. See app/index/route.js.\n this.route('wizard-launch');\n\n // Routable Ember engine.\n this.mount('@adc/customer-wizard-engine', { path: '/wizard', as: 'wizardEngine' });\n\n this.route('dashboards', function () {\n this.route('thermostats', function () {\n this.route('thermostat', { path: '/:id_thermostat' }, function () {\n this.route('comfort');\n this.route('runtime');\n this.route('cycle');\n this.route('efficiency');\n });\n });\n });\n\n this.route('notifications', function () {\n this.route('manage-devices', function () {\n this.route('edit', { path: '/:id_device' });\n });\n });\n\n this.route('mobile', function () {\n this.route('help', function () {\n this.route('contact');\n });\n });\n\n this.route('generic-wizard-deep-link-landing');\n\n this.route('wifi', function () {\n this.route('settings');\n this.route('devices', function () {\n this.route('device-edit', { path: 'device-edit/:id_device' });\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/route-path-style\n this.route('profile-edit', { path: 'profile_edit/:id_profile' });\n });\n });\n\n this.route('smart-coverage', function () {\n this.route('select-properties');\n });\n\n this.route('builder-trial-account-expiration-warning');\n\n this.route('customer-shop', function () {\n this.route('item', { path: 'item/:id_item' });\n });\n\n this.route('fleet', function () {\n this.route('summary');\n this.route('trip-history');\n this.route('reports');\n });\n\n this.route('logins', function () {\n this.route('edit', { path: '/:id_login' });\n });\n\n this.route('discover', function () {\n this.route('content', { path: '/:id_document' });\n });\n\n this.route('people', function () {});\n});\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @class AccessControlUser\n * @extends serializers.Application\n * @memberof serializers.access-control\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.access-control.AccessControlUser# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n accessCards: defaultEmbeddedRecordSerializerAttribute(),\n pinCodes: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @class AccessControlUser\n * @extends serializers.Application\n * @memberof serializers.access-control\n * @mixes DS.EmbeddedRecordsMixin\n */\n\nexport default class AccessPlanPendingChangeCollectionSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n pendingChanges: defaultEmbeddedRecordSerializerAttribute()\n };\n}\n","import ApplicationSerializer from '../../application';\n\n/**\n * @class serializers.activity.ExtendedActivityHistoryRequestSerializer\n */\nexport default class ExtendedActivityHistoryRequestSerializer extends ApplicationSerializer {\n /** override */\n serializeIntoHash(data, type, snapshot, options) {\n super.serializeIntoHash(data, type, snapshot, options);\n\n // Are there stress test parameters defined?\n const { eahStress } = window;\n if (eahStress) {\n // Include in payload.\n data.stressTestingParameters = { ...eahStress };\n }\n }\n}\n","import BaseSerializer from '@adc/app-infrastructure/serializers/base-serializer';\n\n/**\n * @class Application\n * @extends BaseSerializer\n * @memberof serializers\n */\nexport default BaseSerializer.extend(/** @lends serializers.Application# **/ {});\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for the Presence State Sensor Trigger Option model\n */\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class PresenceStateSensorTriggerOptionSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n sensorSuboptions: { serialize: 'records' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'automation/presence-state/presence-state-sensor-trigger-option': PresenceStateSensorTriggerOptionSerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\nconst defaultAttribute = { serialize: 'records' };\n\n/**\n * @classdesc\n * Serializer for the Presence State Settings Display model\n */ // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class PresenceStateSettingsDisplaySerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n triggerOptions: defaultAttribute,\n sensorTriggerOption: defaultAttribute\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'automation/presence-state/presence-state-settings-display': PresenceStateSettingsDisplaySerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for the Presence State Trigger Option model\n */\nexport default class PresenceStateSensorTriggerDeviceSuboptionSerializer extends Application.extend(\n // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\n EmbeddedRecordsMixin\n) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n durationDropdownOptions: { serialize: 'records' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'automation/presence-state/presence-state-trigger-device-suboption': PresenceStateSensorTriggerDeviceSuboptionSerializer;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for the Presence State Trigger Option model\n */ // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class PresenceStateTriggerOptionSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n dropdownOptions: defaultEmbeddedRecordSerializerAttribute()\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'automation/presence-state/presence-state-trigger-option': PresenceStateTriggerOptionSerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\nconst defaultAttribute = { serialize: 'records' };\n\n/**\n * @classdesc\n * Serializer for the New Contact Notification model\n * @class NewContact\n * @extends serializers.Application\n * @memberof serializers.automation.rules-builder.notification.new-contact\n */\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class NewContactSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n mobiles: defaultAttribute,\n emails: defaultAttribute\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'automation/rules-builder/new-contact': NewContactSerializer;\n }\n}\n","import PolymorphicSerializer from '@adc/app-infrastructure/serializers/polymorphic-serializer';\n\n/**\n * @class Request\n * @extends PolymorphicSerializer\n * @memberof serializers.automation.rules.restrictions\n */\nexport default PolymorphicSerializer.extend(/** @lends serializers.automation.rules.restrictions.Restriction# */ {});\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n *\n * The rule serializer.\n *\n * @class Rule\n * @extends DS.JSONAPISerializer\n * @memberof serializers.automation.rules\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.automation.rules.Rule# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n restrictions: defaultEmbeddedRecordSerializerAttribute(),\n\n triggerType: defaultEmbeddedRecordSerializerAttribute(),\n\n triggerEvent: defaultEmbeddedRecordSerializerAttribute(),\n\n triggerDevices: defaultEmbeddedRecordSerializerAttribute(),\n\n triggerExtraDeviceOption: defaultEmbeddedRecordSerializerAttribute(),\n\n actionType: defaultEmbeddedRecordSerializerAttribute(),\n\n actionEvent: defaultEmbeddedRecordSerializerAttribute(),\n\n actionDevices: defaultEmbeddedRecordSerializerAttribute(),\n\n notificationContactAddresses: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n *\n * The rule serializer.\n *\n * @class Rule\n * @extends DS.JSONAPISerializer\n * @memberof serializers.automation.rules\n */\nexport default Application.extend(EmbeddedRecordsMixin, {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n scheduleEvents: { serialize: 'records' }\n }\n});\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * The schedule event serializer.\n */\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class ScheduleEventSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n actionEvent: { serialize: 'records' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'automation/schedule-builder/schedule-event': ScheduleEventSerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport ApplicationSerializer from '../../application';\n\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class ArmingSchedule extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n daysOfWeekSelection: { embedded: 'always' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'commercial/schedules/arming-schedule': ArmingSchedule;\n }\n}\n","import ApplicationSerializer from '../application';\n\n/**\n * @class serializers.activity.CarMonitorSerializer\n */\nexport default class CarMonitorSerializer extends ApplicationSerializer {\n /**\n * Will get invoked after retrieving a single car monitor model from the server.\n * normalizedDocument will have the structure { data: { relationships }}\n *\n * @override\n */\n normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) {\n let normalizedDocument = super.normalizeSingleResponse(store, primaryModelClass, payload, id, requestType);\n\n this.setupAlertItemsAssociation([normalizedDocument.data]);\n\n return normalizedDocument;\n }\n\n /**\n * Will get invoked after retrieving multiple car monitor models from the server.\n * normalizedDocument will have the structure { data: { 0: { relationships }, 1: { relationships }}}\n *\n * @override\n */\n normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n let normalizedDocument = super.normalizeArrayResponse(store, primaryModelClass, payload, id, requestType);\n\n this.setupAlertItemsAssociation(normalizedDocument.data);\n\n return normalizedDocument;\n }\n\n /**\n * Sets up a link association for the car monitor models.\n * This will allow us to request alert items from the hasMany relationship\n * without needing to pass in each individual alert item id to the httpget request.\n *\n * @param {CarMonitor[]} carMonitors\n */\n setupAlertItemsAssociation(carMonitors) {\n for (const carMonitor of carMonitors) {\n const carIssueItemsLinks = {\n related: `/web/api/fleet/carIssueItems?carMonitorId=${carMonitor.id}`\n },\n tripAlertItemsLinks = {\n related: `/web/api/fleet/tripAlertItems?carMonitorId=${carMonitor.id}&tripAlertItemsDailyOnly=true`\n };\n\n carMonitor.relationships.carIssueItems = { links: carIssueItemsLinks };\n carMonitor.relationships.tripAlertItems = { links: tripAlertItemsLinks };\n }\n }\n}\n","import ApplicationSerializer from '../application';\n\n/**\n * @class serializers.activity.CommercialTemperatureSensorSerializer\n */\nexport default class CommercialTemperatureSensorSerializer extends ApplicationSerializer {\n /** @override */\n normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n let normalizedDocument = super.normalizeArrayResponse(store, primaryModelClass, payload, id, requestType);\n\n const shouldPollRefreshState = normalizedDocument?.meta?.shouldPollRefreshState;\n\n if (shouldPollRefreshState) {\n normalizedDocument.data.forEach((device) => {\n device.attributes['shouldPollRefreshState'] = true;\n });\n }\n\n return normalizedDocument;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for the Discover Article Group Item model\n */ // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class DiscoverArticleGroupItemSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n articleList: defaultEmbeddedRecordSerializerAttribute()\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'discover/discover-article-group-item': DiscoverArticleGroupItemSerializer;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for the Get Discover Article Content Result model\n */ // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class GetDiscoverArticleContentResult extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n blocks: defaultEmbeddedRecordSerializerAttribute(),\n actions: defaultEmbeddedRecordSerializerAttribute()\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'discover/get-discover-article-content-result': GetDiscoverArticleContentResult;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for the Get Discover Dashboard Result model\n */ // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class GetDiscoverDashboardResultSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n articleGroupList: defaultEmbeddedRecordSerializerAttribute()\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'discover/get-discover-dashboard-result': GetDiscoverDashboardResultSerializer;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class Location\n * @extends serializers.Application\n * @memberof serializers.enterprise.locations\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.enterprise.locations.Location# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n tenants: defaultEmbeddedRecordSerializerAttribute(),\n unattendedShowingSetting: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class NoiseMonitorSettingsTemplate\n * @extends serializers.Application\n * @memberof serializers.enterprise.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.enterprise.settings.NoiseMonitorSettingsTemplate# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n thresholdList: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class PoolControlFilterPumpScheduleTemplate\n * @extends serializers.Application\n * @memberof serializers.enterprise.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.enterprise.settings.PoolControlFilterPumpScheduleTemplate# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n filterPumpDayOfWeekInfo: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class ThermostatSettingsTemplate\n * @extends serializers.Application\n * @memberof serializers.enterprise.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.enterprise.settings.ThermostatSettingsTemplate# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n thermostats: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class WaterMeterConfigurationTemplate\n * @extends serializers.Application\n * @memberof serializers.enterprise.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.enterprise.settings.WaterMeterConfigurationTemplate# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n configurations: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import ApplicationSerializer from './application';\n\n/**\n * @class serializers.activity.IdentitySerializer\n */\nexport default class IdentitySerializer extends ApplicationSerializer {\n /** @override */\n normalizeSaveResponse(store, primaryModelClass, payload, id, requestType) {\n let normalizedDocument = super.normalizeArrayResponse(store, primaryModelClass, payload, id, requestType);\n\n // add meta to data json to preserve metaData\n if (normalizedDocument?.data?.attributes) {\n normalizedDocument.data.attributes['meta'] = normalizedDocument.meta;\n }\n\n return normalizedDocument;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @class Request\n * @extends serializers.Application\n * @memberof serializers.service-appointments\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.service-appointments.Request# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n requestedTimes: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @class Request\n * @extends serializers.Application\n * @memberof serializers.service-appointments\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.service-appointments.Timeframe# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n duration: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from 'customer-site/serializers/application';\n\n/**\n * @classdesc\n * Serializer for Everbridge configuration.\n */\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class EverbridgeConfigurationSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n everbridgeTemplates: { serialize: 'records' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'settings/everbridge-integration/everbridge-configuration': EverbridgeConfigurationSerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class serializers.settings.manage-devices.deviceCatalogSerializer\n * @extends serializers.Application\n * @mixes DS.EmbeddedRecordsMixin\n */\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class DeviceCatalogSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n managedDeviceCategories: { serialize: 'records' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'settings/manage-devices/device-catalog': DeviceCatalogSerializer;\n }\n}\n","import PolymorphicSerializer from '@adc/app-infrastructure/serializers/polymorphic-serializer';\n\n/**\n * @class serializers.settings.manage-devices.ManageDeviceSerializer\n * @extends DS.JSONAPISerializer\n */\nexport default class ManagedDeviceCategorySerializer extends PolymorphicSerializer {\n attrs = {\n managedDevices: { serialize: 'records' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'settings/manage-devices/managed-device-category': ManagedDeviceCategorySerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport ApplicationSerializer from '../../application';\n\nexport default class SettingsMonitoringStationPropertyAction extends ApplicationSerializer.extend(\n // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\n EmbeddedRecordsMixin\n) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n propertyActionDevices: {\n serialize: 'records'\n }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'settings/monitoring-station/property-action': SettingsMonitoringStationPropertyAction;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport ApplicationSerializer from '../../application';\n\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class SettingsMonitoringStationVideo extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n visualVerificationDevices: {\n serialize: 'records'\n }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'settings/monitoring-station/video': SettingsMonitoringStationVideo;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * The serializer for voice control device settings.\n *\n * @class serializers.settings.voice.VoiceControlDeviceSettingSerializer\n * @extends serializers.Application\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default class VoiceControlDeviceSettingSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n voicePins: defaultEmbeddedRecordSerializerAttribute(),\n voiceAccessLevelSettingItems: defaultEmbeddedRecordSerializerAttribute()\n };\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @classdesc Serializer for system group model.\n */\nexport default class SystemGroupSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n childGroups: {\n serialize: 'ids-and-types'\n }\n };\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class AccessPointCollection\n * @extends serializers.Application\n * @mixes DS.EmbeddedRecordsMixin\n * @memberof serializers.users.access\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.users.access.AccessControl# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n accessPointItems: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class DeviceAccess\n * @extends serializers.Application\n * @mixes DS.EmbeddedRecordsMixin\n * @memberof serializers.users.access\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.users.access.AccessPointCollectionsSummary# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n deviceAccess: defaultEmbeddedRecordSerializerAttribute(),\n locksAccessPointCollections: defaultEmbeddedRecordSerializerAttribute(),\n partitionsAccessPointCollections: defaultEmbeddedRecordSerializerAttribute(),\n voiceAccessPointCollections: defaultEmbeddedRecordSerializerAttribute(),\n accessPlansAccessPointCollections: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class DeviceAccess\n * @extends serializers.Application\n * @mixes DS.EmbeddedRecordsMixin\n * @memberof serializers.users.access\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.users.access.DeviceAccess# */ {\n isEmbeddedRecordsMixinCompatible: true\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @class User\n * @extends serializers.Application\n * @memberof serializers.users\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.users.User# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n accessCards: defaultEmbeddedRecordSerializerAttribute(),\n deviceAccess: defaultEmbeddedRecordSerializerAttribute(),\n pinCodes: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * Serializer that allows Familiar Target Enrollment Images to be reviewed in bulk\n *\n * see https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin\n *\n * @class FamiliarTargetEnrollmentClusterReview\n * @extends serializers.Application\n * @memberof serializers.video.familiar-targets\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.FamiliarTargetEnrollmentClusterReview# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n imagesToReview: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * Serializer that allows Familiar Target Enrollment Clusters to be from an image\n * and with a profile\n *\n * see https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin\n *\n * @class FamiliarTargetEnrollmentCluster\n * @extends serializers.Application\n * @memberof serializers.video.familiar-targets\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.FamiliarTargetEnrollmentClusterReview# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n reviewedImages: defaultEmbeddedRecordSerializerAttribute(),\n profile: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * @class FamiliarTargetEnrollmentImage\n * @extends serializers.Application\n * @memberof serializers.video.familiar-targets\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.FamiliarTargetEnrollmentImage# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n // When creating a new familiar target enrollment cluster, the full camera record is requested.\n // We do not need the camera model's data to create a new cluster. We only need the id and type for the camera.\n attrs: {\n sourceCamera: { serialize: 'ids-and-types' }\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * Serializer that allows Familiar Target Feedback Events to include new Familiar Targets if one needs\n * to be created\n *\n * see https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin\n *\n * @class FamiliarTargetFeedbackEvent\n * @extends serializers.Application\n * @memberof serializers.video.familiar-targets\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.FamiliarTargetFeedbackEvent# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n familiarTarget: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport ApplicationSerializer from '../../application';\n\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class IntercomCallRuleSerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n pushDeviceRecipients: {\n serialize: 'records'\n }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'video/intercom-call-rule': IntercomCallRuleSerializer;\n }\n}\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport ApplicationSerializer from '../application';\n\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class OvRuleSerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n touchlessRingRule: {\n serialize: 'records'\n },\n perimeterGuardConfig: {\n serialize: 'records'\n },\n parcelDetectionRule: {\n serialize: 'records'\n }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'video/ov-rule': OvRuleSerializer;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * Serializer that allows all of the Audio Settings (including nested models) to be saved at once.\n *\n * see https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin\n *\n * @class AudioSetting\n * @extends serializers.Application\n * @memberof serializers.video.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.AudioSetting# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n microphoneSpeakerSetting: defaultEmbeddedRecordSerializerAttribute(),\n chimeToneSetting: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * Serializer that allows all of the General Settings (including nested models) to be saved at once.\n *\n * see https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin\n *\n * @class GeneralSetting\n * @extends serializers.Application\n * @memberof serializers.video.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.GeneralSetting# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n doorbellNotificationSetting: defaultEmbeddedRecordSerializerAttribute(),\n ledLightSetting: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport ApplicationSerializer from '../../application';\n\n// @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class ImageSetting extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n infraredSetting: { embedded: 'always' }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'video/settings/image-setting': ImageSetting;\n }\n}\n","import { defaultEmbeddedRecordSerializerAttribute } from '@adc/ember-utils/utils/model-helper';\nimport { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../../application';\n\n/**\n * Serializer that allows all of the Video Configs (including nested models) to be saved at once.\n *\n * see https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin\n *\n * @class VideoConfig\n * @extends serializers.Application\n * @memberof serializers.video.settings\n * @mixes DS.EmbeddedRecordsMixin\n */\nexport default Application.extend(\n EmbeddedRecordsMixin,\n /** @lends serializers.video.VideoConfig# */ {\n isEmbeddedRecordsMixinCompatible: true,\n\n attrs: {\n liveVideoConfig: defaultEmbeddedRecordSerializerAttribute(),\n savedVideoSetting: defaultEmbeddedRecordSerializerAttribute(),\n doorbellVideoConfig: defaultEmbeddedRecordSerializerAttribute(),\n pirVideoConfig: defaultEmbeddedRecordSerializerAttribute()\n }\n }\n);\n","import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Application from '../application';\n\n/**\n * @classdesc\n * Serializer for the Wifi Device Profile model\n */ // @ts-expect-error EmbeddedRecordsMixin type is incorrect.\nexport default class WifiDeviceProfileSerializer extends Application.extend(EmbeddedRecordsMixin) {\n isEmbeddedRecordsMixinCompatible = true;\n\n attrs = {\n devices: {\n serialize: 'ids-and-types'\n }\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your serializers.\ndeclare module 'ember-data/types/registries/serializer' {\n export default interface SerializerRegistry {\n 'wifi/device-profile': WifiDeviceProfileSerializer;\n }\n}\n","import { inject as service } from '@ember/service';\nimport Service from '@ember/service';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\n\nconst tagIndex = 'script';\n\n/**\n * ADC Google Tag Manager service enables the adding and removing Google tag manager to the DOM.\n *\n * NOTE: When adding GTM you must also call remove() in the appropriate place.\n * Failure to remove GTM may result in memory leaks or unexpected data being recorded in GTM.\n */\nexport default class AdcGtm extends Service {\n @service declare envSettings: EnvSettingsService;\n\n /** Adds Google Tag Manager to the DOM using the provided key. */\n add(key: string): void {\n // Do not run during tests.\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n\n window.dataLayer = window.dataLayer ?? [];\n window.dataLayer.push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\n\n const firstScript = document.getElementsByTagName(tagIndex)[0],\n gtmScript = document.createElement(tagIndex),\n dataQuery = '&l=dataLayer';\n gtmScript.async = true;\n gtmScript.src = `https://www.googletagmanager.com/gtm.js?id=${key}${dataQuery}`;\n firstScript.parentNode?.insertBefore(gtmScript, firstScript);\n }\n\n /** Removes Google Tag Manager from the DOM and cleans the datalayer. */\n remove(): void {\n // Do not run during tests.\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n\n const gtm = document.querySelectorAll(`${tagIndex}[src*=\"googletagmanager.com\"]`),\n head = document.getElementsByTagName(tagIndex)[0]?.parentNode;\n\n for (const script of gtm) {\n head?.removeChild(script);\n }\n\n window.dataLayer = [];\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseAjaxService from '@adc/ajax/services/adc-ajax';\n\nimport type { AjaxRequestBody } from '@adc/ajax/services/adc-ajax';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationService from '@adc/ui-components/services/notification-manager';\nimport type Model from '@ember-data/model';\nimport type Store from '@ember-data/store';\n\n/**\n * @classdesc\n * The ajax service for this project.\n */\nexport default class AjaxService extends BaseAjaxService {\n @service declare notificationManager: NotificationService;\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n /**\n * Override the apiRequest method.\n * This is needed for now in order for the requests for the add device engine which redirects to json wizards to work properly.\n *\n * @override\n */\n apiRequest(\n apiEndpoint: string,\n optionsOrType?: RequestInit,\n data?: AjaxRequestBody,\n httpVerb?: string,\n useJsonApiFormat?: boolean\n ): Promise {\n // Wizard JSON files include '/api/' in their ajax request URLs but '/api/' is included in our ajax namespace so we get two occurrences.\n // We dedupe it here for now. WEB-6162 will be the real fix.\n if (apiEndpoint[0] === '/') {\n // Removing a leading slash simplifies the next part of the cleaning.\n apiEndpoint = apiEndpoint.substring(1);\n }\n\n if (apiEndpoint.indexOf('api/') === 0) {\n // We do it this way to make sure we only replace 'api/' if it is at the very beginning.\n apiEndpoint = apiEndpoint.substring(3);\n }\n\n return super.apiRequest(apiEndpoint, optionsOrType, data, httpVerb, useJsonApiFormat);\n }\n\n /**\n * Returns the `value` property from the ajax payload, cast to the requested generic.\n *\n * @example\n * { value: T }\n */\n async apiRequestForValue(\n apiEndpoint: string,\n optionsOrType?: RequestInit,\n data?: AjaxRequestBody,\n httpVerb?: string,\n useJsonApiFormat?: boolean\n ): Promise {\n const response = await this.apiRequest<{ value: T }>(\n apiEndpoint,\n optionsOrType,\n data,\n httpVerb,\n useJsonApiFormat\n );\n return get(response, 'value') as T;\n }\n\n /**\n * Returns the `data` property from the ajax payload, pushed into the store and cast to a single instance of the requested generic.\n *\n * @example\n * { data: Partial }\n */\n async apiRequestForDataRecord(\n apiEndpoint: string,\n optionsOrType?: RequestInit,\n data?: AjaxRequestBody,\n httpVerb?: string,\n useJsonApiFormat?: boolean\n ): Promise {\n const response = await this.apiRequest>(\n apiEndpoint,\n optionsOrType,\n data,\n httpVerb,\n useJsonApiFormat\n );\n return this.store.push(response) as unknown as T;\n }\n\n /**\n * Returns the `data` property from the ajax payload, pushed into the store and cast to an array of the requested generic.\n *\n * @example\n * { data: Partial[] }\n */\n async apiRequestForDataRecords(\n apiEndpoint: string,\n optionsOrType?: RequestInit,\n data?: AjaxRequestBody,\n httpVerb?: string,\n useJsonApiFormat?: boolean\n ): Promise {\n const response = await this.apiRequest>(\n apiEndpoint,\n optionsOrType,\n data,\n httpVerb,\n useJsonApiFormat\n );\n return response?.data?.length ? (this.store.push(response) as unknown as T[]) : [];\n }\n\n /**\n * The adc ajax addon has a noInternetConnection method that can be overridden to handle no network errors.\n * In this case, display a notification to the user when a network error occurs.\n *\n * @override\n */\n noInternetConnection(): void {\n this.notificationManager.addError(this.intl.t('generic.noConnection'));\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Service, { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport default class Announcer extends Service {\n @service declare intl: ADCIntlService;\n\n @tracked announceMessage?: string;\n @tracked announceTone = 'polite';\n\n announce(pageTitle: string, tone: string) {\n this.announceMessage = this.intl.tc(this, 'loadMessage', { pageTitle });\n this.announceTone = tone;\n }\n}\n","import Service from '@ember/service';\n\nimport type { SelectedNetwork } from '@adc/network-config-addon/ble-network-setup-interface';\nimport type WifiInfoItem from '@adc/network-config-addon/models/video/wifi-info-item';\n\n/**\n * Service for setting up a camera's wireless network during BLE enrollment.\n */\nexport default class BleNetworkSetup extends Service {\n /**\n * Scans for available networks near the camera.\n */\n async scanNetworksFromCamera(): Promise {\n return [];\n }\n\n /**\n * Assigns the selected network to the BLE camera installation service and continues the BLE enrollment path.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setSelectedNetworkInformation(_network: SelectedNetwork): void {\n return;\n }\n\n /**\n * Requests that the NativeBridge disconnects from the camera\n */\n disconnectCamera(): void {\n return;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n \\n
    \\n\\n
    \\n {{safe-html this.text}}\\n
    \\n\\n\",{ moduleName: \"customer-site/components/app/tour-onboarding/card-preview/partitions-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n/* eslint-disable @adc/ember/no-is-destroyed */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { schedule, later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { addElementMask } from '../../../../help-tour/index';\n\nimport type DomService from '@adc/ember-utils/services/dom';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type PartitionModel from 'customer-site/models/devices/partition';\n\nconst INITIAL = 0,\n OPEN = 1;\n\n/**\n * Moves the card preview to a step with the specified index.\n */\nfunction goToStep(this: CardPreviewPartitionsCard, index: number): void {\n if (isDestroyed(this)) {\n return;\n }\n\n const { dom } = this,\n cssView = '.prompt-view',\n cssEdit = '.prompt-edit';\n\n let cssTransition = cssEdit,\n cssMasked,\n translationTokens;\n\n // Remove listener for end of transition.\n dom.removeAllListeners(this);\n\n switch (index) {\n case INITIAL:\n cssTransition = cssView;\n\n // Masked element is the circular icon.\n cssMasked = `${cssView} .group-icon .circular-fill`;\n break;\n\n case OPEN:\n // Masked element is the container holding the circle icon and the first button.\n cssMasked = `${cssEdit} .buttons`;\n\n translationTokens = {\n buttonName: this.getCardElement(cssMasked)?.innerText.trim()\n };\n break;\n\n default:\n // Show buttons as we can go to the next step.\n this.args.showButtons(true);\n this.addTryAgainClickHandler();\n break;\n }\n\n // Create listener that will run after element that has a transition finishes.\n dom.addListener(this, this.getCardElement(cssTransition) as HTMLElement, 'transitionend', this.updateElementMask);\n // Also fix up the mask if the window gets resized.\n dom.addListener(this, window, 'resize', this.updateElementMask);\n\n Object.assign(this, {\n index,\n cssMasked,\n text: this.intl.tc(this, String(index), translationTokens)\n });\n\n // Also run it right now in case the element that is supposed to transition will not do it.\n this.updateElementMask();\n}\n\ninterface CardPreviewPartitionsCardSignature {\n Element: HTMLDivElement;\n Args: {\n device: PartitionModel;\n showButtons: (isOpen: boolean) => void;\n refreshCardPreview: VoidFunction;\n };\n}\n\n/**\n * @classdesc\n * Partitions preview card.\n */\n@intlPath({ path: 'app/tour-onboarding/card-preview/partitions-card' })\nexport default class CardPreviewPartitionsCard extends Component {\n @service declare intl: ADCIntlService;\n @service declare dom: DomService;\n\n index?: number;\n cssMasked?: string;\n @tracked text = '';\n\n get maskId(): string {\n return `${guidFor(this)}-mask`;\n }\n\n getCardElement(css = ''): HTMLElement | null {\n return document.querySelector(`#${guidFor(this)} .dashboard-prompt-card ${css}`.trim());\n }\n\n clearMask(): void {\n document.getElementById(this.maskId)?.remove();\n }\n\n @action updateElementMask(): void {\n // This is a little tricky. Sometimes an outside element is transitioning so that is why there is the run later in here,\n // to allow for other things to finish what they are doing.\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline scheduleTask.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => {\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline runTask.\n // eslint-disable-next-line ember/no-runloop\n later(() => {\n if (isDestroyed(this)) {\n return;\n }\n\n this.clearMask();\n\n // Create new mask.\n const { cssMasked } = this;\n const mask = addElementMask(\n cssMasked ? this.getCardElement(cssMasked) : null,\n true,\n this.getCardElement(),\n true,\n 4\n );\n mask.setAttribute('id', this.maskId);\n }, 250);\n });\n }\n\n addTryAgainClickHandler(): void {\n // However, add click handler for the try-again link.\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline scheduleTask.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', this, () => {\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline runTask.\n // eslint-disable-next-line ember/no-runloop\n later(() => {\n if (isDestroyed(this)) {\n return;\n }\n\n this.dom.addListener(\n this,\n document.querySelector(`#${guidFor(this)} section.description a`) as HTMLAnchorElement,\n 'click',\n () => {\n this.args.refreshCardPreview();\n return false;\n }\n );\n }, 0);\n });\n }\n\n @action onDeviceChange(element: HTMLElement): void {\n const currentDealer = document.getElementById('app-content')?.getAttribute('dealer') || '';\n element.setAttribute('dealer', currentDealer);\n\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline scheduleTask.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', this, goToStep, INITIAL);\n }\n\n @action tearDown(): void {\n this.clearMask();\n this.dom.removeAllListeners(this);\n }\n\n /**\n * Triggered when card prompt state changes.\n */\n @action promptStateChanged(isOpen: boolean): void {\n const { index = 0 } = this;\n if ((index === INITIAL && isOpen) || (index === OPEN && !isOpen)) {\n goToStep.call(this, index + 1);\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TourOnboarding::CardPreview::PartitionsCard': typeof CardPreviewPartitionsCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n {{tc this \\'example\\'}}\\n
    \\n\\n {{#if (and this.showCard this.demoDevice)}}\\n \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/app/tour-onboarding/card-preview/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport PartitionModel from 'customer-site/models/devices/partition';\nimport { intlPath } from '@adc/i18n/path';\nimport { ArmedAway } from '../../../../enums/ArmingState';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type SystemModel from 'customer-site/models/systems/system';\n\ntype ShowButtonsFn = (v: boolean) => void;\n\ninterface CardPreviewSignature {\n Element: HTMLDivElement;\n Args: {\n model: {\n system: Promise;\n };\n 'show-buttons'?: ShowButtonsFn;\n };\n}\n\n/**\n * Previews usage of a home card by letting the user interact with specific portions of the card at a time.\n */\n@intlPath({ path: 'app/tour-onboarding/card-preview' })\nexport default class CardPreview extends Component {\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n\n @tracked showCard = false;\n @tracked demoDevice?: PartitionModel;\n\n get showButtons(): ShowButtonsFn {\n return this.args['show-buttons'] ?? (() => {});\n }\n\n /**\n * Restarts card preview.\n */\n @action async refreshCardPreview(): Promise {\n this.showButtons(false);\n\n // Hide card so that it can be re-rendered when we get more data.\n this.showCard = false;\n\n this.tearDownCardPreview();\n\n const system = await this.args.model.system,\n [id] = system.hasMany('partitions').ids(),\n { store } = this,\n device = store.peekRecord('devices/partition', id);\n\n assert('No partition model while trying to show partition preview card', device);\n\n // Get non-relationship data from partition.\n const deviceData = {} as Record;\n PartitionModel.eachAttribute((name) => (deviceData[name] = device[name]));\n\n // Create a dummy record so that the real model does not get altered.\n this.demoDevice = store.createRecord('devices/partition', {\n ...deviceData,\n id: `demo-${Date.now()}`,\n state: ArmedAway,\n desiredState: ArmedAway,\n needsClearIssuesPrompt: false\n });\n\n // Show the card once things have synced.\n // TODO: This is not efficient because it re-renders the whole card.\n // - However, the cards currently do not update when an attribute that is passed in is changed,\n // so I could not do it that way. I did not want to rework the whole card structure because\n // it is quite complicated and it effects a ton of stuff.\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => (this.showCard = true));\n }\n\n @action tearDownCardPreview(): void {\n // Please refactor this into a task & remove the eslint-disable\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (!isDestroyed(this)) {\n this.demoDevice?.unloadRecord();\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'App::TourOnboarding::CardPreview': typeof CardPreview;\n }\n}\n","import { RSVPPromise } from '@adc/ember-utils/utils/rsvp';\nimport { schedule } from '@adc/ember-utils/utils/runloop';\nimport { setProperties } from '@ember/object';\nimport { getOwner } from '@ember/owner';\nimport { later } from '@ember/runloop';\nimport { isEmpty } from '@ember/utils';\nimport CardPreview from 'customer-site/components/app/tour-onboarding/card-preview';\nimport StepContent, { getAnchorSelector, getHighlightSelector } from 'customer-site/components/help-tour/step-content';\nimport {\n Commercial,\n Security,\n Undefined,\n StandAlone,\n StandAloneVideo,\n Wellness,\n PointCentral\n} from '../../../enums/AccountType';\nimport { Partitions } from '../../../enums/CardType';\nimport { EmberHome } from '../../../enums/CustomerPageUrl';\nimport Step, { StepDisplayType } from '../../help-tour/step';\nimport Tour from '../../help-tour/tour';\n\nimport './_style.scss';\n\n/**\n * Get resource prefix for accountType.\n *\n * @param {number} accountType\n */\nfunction getResourcePrefix(accountType) {\n if (accountType === Commercial) {\n return 'commercial';\n }\n\n return 'generic';\n}\n\n/**\n * Returns text for specific step and key.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {String} stepName\n * @param {String} key\n * @param {Object} [tokens]\n *\n * @returns {String}\n */\nfunction getText(getTranslation, stepName, key, tokens = {}) {\n return getTranslation(`components.app.tour-onboarding.steps.${stepName}.${key}`, tokens);\n}\n\n/**\n * Returns texts for specific keys of a step.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {String} stepName\n * @param {Array} [keys=['title', 'content']]\n * @param {Array} [translationKeys=keys]\n *\n * @returns {Object}\n */\nfunction getTextsForStep(getTranslation, stepName, keys = ['title', 'content'], translationKeys = keys) {\n return keys.reduce((cache, key, index) => {\n const text = getText(getTranslation, stepName, translationKeys[index]);\n\n if (text) {\n cache[key] = text;\n }\n\n return cache;\n }, {});\n}\n\n/**\n * Ensures that the navigation side bar is open before proceeding.\n *\n * @returns {Promise.}\n */\nasync function ensureNavigationOpen() {\n // What is done here is pretty straightforward:\n // - Get the menu button that opens up navigation.\n // - If it exists, click it.\n // - Wait a bit so that the menu is open when it needs to be.\n // This could probably be done much smarter:\n // - Trigger the action on controller that toggles the nav bar.\n // - Have the action return a promise that resolves when the animation is done.\n // - But in that case it would be probably better to move it into the navigation, or maybe onto context manager.\n // However, all of this seemed a bit too complicated for what I needed here :-).\n const menuButton = document.getElementById('btn-menu');\n\n if (!menuButton) {\n return;\n }\n\n // Click the menu button.\n menuButton.click();\n\n const delay = RSVPPromise();\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n later(() => delay.resolve(), 500);\n\n await delay.promise;\n}\n\n/**\n * Ensures that navigation will get closed.\n */\nfunction ensureNavigationClosed() {\n const backdrop = document.getElementById('nav-backdrop');\n\n if (backdrop) {\n backdrop.click();\n }\n}\n\n/**\n * Creates modal intro step.\n *\n * @param {services.ContextManager} contextManager\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepIntroModal(contextManager, getTranslation) {\n const intro = 'intro',\n shouldUseLightText = (accountType) => [Commercial, Wellness].includes(accountType),\n buttonText = getText(getTranslation, intro, 'nextButton');\n\n return Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n buttons: {\n next: {\n text: buttonText\n }\n }\n }),\n async onBeforeOpen() {\n const identityModel = contextManager.get('identityModel'),\n dealer = await identityModel.get('dealer'),\n accountType = identityModel.get('accountType');\n\n this.model.setProperties({\n cssClass: `${intro} ${shouldUseLightText(accountType) ? 'light-text' : ''} modal-md`,\n title: getText(getTranslation, intro, 'content.title', { dealerName: dealer.get('name') }),\n content: getIntroContent.call(this, contextManager, getTranslation, accountType, intro)\n });\n }\n });\n}\n\n/**\n * Returns the appropriate modal content for the current account type.\n *\n * @param {services.ContextManager} contextManager\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {number} accountType - The AccountTypeEnum value for the currently logged in user.\n * @param {String} stepName - The name of the step (e.g. 'intro' - used for translation lookup).\n *\n * @returns {Array}\n */\nfunction getIntroContent(contextManager, getTranslation, accountType, stepName) {\n const resourcePrefix = {\n [Commercial]: 'commercial',\n [Security]: 'security',\n [Undefined]: 'generic',\n [StandAloneVideo]: 'video',\n [StandAlone]: 'generic',\n [Wellness]: 'wellness',\n [PointCentral]: 'generic'\n }[accountType];\n\n return [\n `\n
    \n

    ${getText(getTranslation, stepName, `content.${resourcePrefix}Text`)}

    \n

    ${getText(getTranslation, stepName, 'content.takeALookAround')}

    \n
    `\n ];\n}\n\n/**\n * Creates home link pointer step.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {services.Media} mediaService\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepHomeLinkIntro(getTranslation, mediaService) {\n const home = 'home-intro';\n\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, home, ['content']),\n attachTo: getAnchorSelector(EmberHome),\n highlightElement: false,\n placement: 'right-start',\n cssClass: home,\n buttons: {\n previous: {\n text: getText(getTranslation, home, 'backButton'),\n action: 'stop',\n isLink: true\n },\n next: {\n text: getText(getTranslation, home, 'nextButton')\n }\n }\n }),\n async onBeforeOpen() {\n // Check if the navigation needs to be opened up.\n if (!mediaService.get('isMobile')) {\n await ensureNavigationOpen();\n }\n },\n async onAfterClose() {\n ensureNavigationClosed();\n }\n });\n}\n\n/**\n * Creates card preview step.\n *\n * @param {DS.Store} store\n * @param {services.ContextManager} contextManager\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepCardPreview(store, identityManager, getTranslation) {\n return Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, 'card-preview', ['title']),\n contentComponent: CardPreview,\n content: {\n system: identityManager.getSelectedSystem()\n },\n cssClass: 'card-preview',\n buttons: {\n previous: {\n show: false\n }\n }\n }),\n async isStepAvailable() {\n // This step should be available if there is a partition card on the home screen.\n return !isEmpty(store.peekAll('ui/home-card').filter((card) => card.cardType == Partitions));\n }\n });\n}\n\n/**\n * Pointer to more details card.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepCardMoreDetails(getTranslation) {\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, 'more-options'),\n placement: 'top-start',\n showHighlightPointer: true\n }),\n async onBeforeOpen() {\n let card, attachTo;\n\n Array.from(document.querySelectorAll(getHighlightSelector('card')) ?? []).some((c) => {\n const elementToAttachTo = c.querySelector(getAnchorSelector('chevron-right-card-button'));\n if (elementToAttachTo) {\n attachTo = elementToAttachTo;\n card = c;\n }\n\n return !!elementToAttachTo;\n });\n\n setProperties(this.model, {\n attachTo: attachTo,\n highlightElement: card\n });\n },\n async beforeIsStepAvailable() {\n return await this.onBeforeOpen();\n }\n });\n}\n\n/**\n * Hero card activity popover step.\n *\n * @param {number} accountType\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepHeroCardActivity(accountType, getTranslation) {\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, 'hero-card-activity', undefined, [\n 'title',\n `content.${getResourcePrefix(accountType)}`\n ]),\n attachTo: getAnchorSelector('hero-card-graph'),\n highlightElement: getHighlightSelector('hero-card-display'),\n placement: 'top'\n })\n });\n}\n\n/**\n * Hero card status popover step.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepHeroCardStatus(getTranslation) {\n const HERO_CARD_STATUS_KEY = 'hero-card-status';\n\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, HERO_CARD_STATUS_KEY, ['title']),\n attachTo: getAnchorSelector('hero-card-status'),\n placement: 'left'\n }),\n async onBeforeOpen() {\n const scenesExtraText = document.getElementsByClassName('hero-card')[0].getElementsByClassName('scenes')\n .length\n ? getText(getTranslation, HERO_CARD_STATUS_KEY, 'scenesExtraText')\n : ' ';\n\n this.set(\n 'model.content',\n getText(getTranslation, HERO_CARD_STATUS_KEY, 'content', {\n heroCardActions: getHeroCardActionsText.call(this, getTranslation),\n scenesExtraText\n })\n );\n }\n });\n}\n\n/**\n * Returns a string that describes the actions that should appear in the \"Hero Card Status\" step of the tour.\n *\n * @note We only want the description of the step to show actions a user can perform. For instance, if they don't\n * have the ability to execute scenes, we shouldn't use scenes in the description.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {String}\n */\nfunction getHeroCardActionsText(getTranslation) {\n const heroCardElement = document.getElementsByClassName('hero-card')[0],\n // Note: The key is the class name of the section in the hero card.\n // The value is the translation key for that corresponding section.\n heroCardActions = {\n 'trouble-conditions': 'systemStatus',\n scenes: 'triggerScenes',\n cameras: 'liveVideo'\n };\n\n const actionTexts = Object.keys(heroCardActions)\n // Filter the sections that actually exist on the hero card.\n .filter((sectionClassName) => heroCardElement.getElementsByClassName(sectionClassName).length)\n // Get translations for each section.\n .map((sectionClassName) => getText(getTranslation, 'hero-card-status', heroCardActions[sectionClassName]));\n\n return formatListOfStrings(actionTexts, getTranslation);\n}\n\n/**\n * Formats a list of strings into a comma-separated string.\n *\n * @param {Array} listOfStrings\n *\n * @returns {String}\n */\nfunction formatListOfStrings(listOfStrings, getTranslation) {\n // Scenario: \"string 1\".\n if (listOfStrings.length === 1) {\n return listOfStrings[0];\n }\n\n const andString = getText(getTranslation, 'outro', 'content.nextSteps.and');\n\n // Scenario: \"string 1 and string 2\".\n if (listOfStrings.length === 2) {\n return `${listOfStrings[0]} ${andString} ${listOfStrings[1]}`;\n }\n\n const firstString = listOfStrings.pop(),\n lastString = listOfStrings.splice(-1, 1),\n middleStrings = listOfStrings.join(', ');\n\n // Scenario: \"string 1, string 2, and string 3\".\n return `${firstString}, ${middleStrings} ${andString} ${lastString}`;\n}\n\n/**\n * Home cards rearrangement step.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepHomeCardRearrangement(getTranslation) {\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, 'home-page-customization'),\n attachTo: getAnchorSelector('card-settings'),\n highlightElement: getHighlightSelector('app-navigation'),\n placement: 'right-start',\n showHighlightPointer: true\n }),\n async onBeforeOpen() {\n await ensureNavigationOpen();\n\n const homeLink = document.querySelector(`${getAnchorSelector(EmberHome)} a`),\n configButton = homeLink.querySelector(getAnchorSelector('card-settings'));\n\n if (!configButton) {\n return;\n }\n\n this.set('homeLink', homeLink);\n\n homeLink.classList.add('hover');\n },\n async onAfterClose() {\n const homeLink = this.homeLink;\n\n if (homeLink) {\n homeLink.classList.remove('hover');\n }\n\n ensureNavigationClosed();\n }\n });\n}\n\n/**\n * Outro modal step.\n *\n * @param {number} accountType\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {components.help-tour.HelpTourStep}\n */\nfunction stepOutro(accountType, getTranslation) {\n const outro = 'outro';\n\n return Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n ...getTextsForStep(getTranslation, outro, ['title']),\n cssClass: outro,\n buttons: {\n previous: {\n show: false\n },\n next: {\n text: getText(getTranslation, outro, 'nextButton')\n }\n }\n }),\n async onBeforeOpen() {\n this.set('model.content', [\n `

    ${getText(getTranslation, outro, 'content.description')}

    `,\n `

    ${getOutroNextStepsText.call(this, accountType, getTranslation)}

    `\n ]);\n }\n });\n}\n\n/**\n * Returns the text for which pages to visit in the outro step of the tour.\n *\n * @param {number} accountType\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {String}\n */\nfunction getOutroNextStepsText(accountType, getTranslation) {\n const navElement = document.getElementById('app-nav'),\n pagesToVisitList = ['automation', 'notifications']\n .filter((routeName) => navElement.querySelectorAll(`[route-id=${routeName}]`).length)\n .map((translationName) => getText(getTranslation, 'outro', `content.${translationName}`));\n\n return getText(getTranslation, 'outro', `content.nextSteps.${getResourcePrefix(accountType)}`, {\n pagesToVisitText: formatListOfStrings(pagesToVisitList, getTranslation),\n numberOfPages: pagesToVisitList.length\n });\n}\n\n/**\n * Creates list of steps for onboarding tour.\n *\n * @param {services.ContextManager} contextManager\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {DS.Store} store\n * @param {services.Media} mediaService\n *\n * @returns {Array.}\n */\nfunction getTourSteps(contextManager, getTranslation, store, mediaService, identityManager) {\n const steps = [],\n accountType = contextManager.get('identityModel').get('accountType');\n\n steps.addObjects([\n // Modal intro.\n stepIntroModal(contextManager, getTranslation),\n // Home link pointer.\n stepHomeLinkIntro(getTranslation, mediaService),\n // Card preview.\n stepCardPreview(store, identityManager, getTranslation),\n // More details for a card.\n stepCardMoreDetails(getTranslation),\n // Hero Card Activity.\n stepHeroCardActivity(accountType, getTranslation),\n // Hero Card Status.\n stepHeroCardStatus(getTranslation),\n // Cards rearrangement.\n stepHomeCardRearrangement(getTranslation),\n // Outro.\n stepOutro(accountType, getTranslation)\n ]);\n\n return steps;\n}\n\n/**\n * Starts onboarding tour.\n *\n * @param {services.ContextManager} contextManager\n */\nexport function startOnboardingTour(contextManager) {\n const getService = (serviceName) => getOwner(contextManager).lookup(`service:${serviceName}`);\n\n const tour = Tour.create({\n name: 'tour-onboarding',\n steps: getTourSteps(\n contextManager,\n (...args) => contextManager.intl.t(...args),\n getService('store'),\n getService('media'),\n getService('identity-manager')\n ),\n async beforeStart() {\n await contextManager.transitionToNativeRoute(EmberHome);\n\n await schedule('afterRender', () => {});\n },\n async afterEnd() {\n ['automation', 'notifications'].forEach((routeName) => {\n const el = document.querySelector(getAnchorSelector(routeName));\n\n if (el) {\n el.classList.add('highlight-pointer-nav-item');\n }\n });\n\n const identity = contextManager.get('identityModel');\n\n identity.set('hasCompletedOnboarding', true);\n\n await identity.save();\n }\n });\n\n contextManager.get('helpTour').start(tour);\n}\n","import { tracked } from '@glimmer/tracking';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { addWeakListener } from '@adc/ember-utils/utils/event-listeners';\nimport { getOwner } from '@ember/application';\nimport { A, isArray } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport EmberObject, { action, get, set, computed, setProperties, getProperties } from '@ember/object';\nimport { notEmpty, equal, alias, or, reads } from '@ember/object/computed';\nimport { run } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { isEmpty, isPresent } from '@ember/utils';\nimport { AVAILABLE_SYSTEMS_CHANGED_KEY } from 'customer-site/components/app/app-system-select/index';\nimport { startOnboardingTour } from 'customer-site/components/app/tour-onboarding/tour';\nimport ENV from 'customer-site/config/environment';\nimport { createNewEvent } from 'customer-site/utils/dom';\nimport { addSearchParam } from 'customer-site/utils/url';\nimport { LEGACY_PAGE_ROUTE_NAME } from '@adc/app-infrastructure/routes/utils';\nimport BaseContextManager from '@adc/app-infrastructure/services/context-manager';\nimport { sentryWithScopeAndWarn } from '@adc/app-infrastructure/utils/sentry';\nimport {\n EmberSettingsFaceRecognition,\n EmberHome,\n EmberAddDeviceCategories,\n EmberAddDeviceDevices,\n EmberAddDeviceStart,\n EmberManageDevices\n} from '../enums/CustomerPageUrl';\n\n// Setup handler for errand submit event.\n// This can happen if there is an error when a button with type=\"submit\" is pressed.\nwindow.onsubmit = function (event) {\n // Stop event.\n event.stopPropagation();\n event.preventDefault();\n\n // Log error.\n console.error('Detected unhandled submit event, stopping propagation', event);\n};\n\n// region Processing visited routes.\n\n/**\n * Get property value from the route data object.\n *\n * @param {RouteDataType} object\n * @param {String} propertyName\n * @returns {*}\n */\nfunction getRouteProperty(object, propertyName) {\n return get(object || {}, propertyName);\n}\n\n/**\n * Is the previous and last route the same?\n *\n * @private\n * @static\n * @memberof services.ContextManager\n *\n * @param {RouteDataType} routeData\n * @param {RouteDataType} previousRouteData\n * @returns {boolean}\n */\nfunction areRoutesTheSame(routeData, previousRouteData) {\n const previousRouteName = getRouteProperty(previousRouteData, 'routeName'),\n newRouteName = getRouteProperty(routeData, 'routeName');\n\n if (newRouteName !== previousRouteName) {\n return false;\n }\n\n if (newRouteName !== LEGACY_PAGE_ROUTE_NAME) {\n // If the native route name is the same as before, then replace the last entry because it probably\n // just update query params or model.\n return true;\n }\n\n const fnGetQueryParamsString = (routeDataObject) => {\n return JSON.stringify(getRouteProperty(routeDataObject, 'queryParams') || {}).toLowerCase();\n };\n\n // If this is legacy page, check if query params are the same. If so, then replace the current route.\n return fnGetQueryParamsString(previousRouteData) === fnGetQueryParamsString(routeData);\n}\n\n/**\n * Should the new route replace the previous one on the stack?\n *\n * This method takes a look at certain edge cases.\n *\n * @private\n * @static\n * @memberof services.ContextManager\n *\n * @param {EmberArray} visitedRoutesStack\n * @param {RouteDataType} routeData\n * @param {RouteDataType} previousRouteData\n * @param {boolean} isFirstRoute\n * @returns {boolean}\n */\nfunction shouldRouteReplacePreviousOnStack(visitedRoutesStack, routeData, previousRouteData, isFirstRoute) {\n if (isEmpty(visitedRoutesStack)) {\n return false;\n }\n\n // Additional fixes for the following issues:\n // - Moving between subRoutes should not change the back button.\n // - Going from parent -> Editing child -> parent should not use Editing child as back button.\n const stackSize = visitedRoutesStack.length,\n newRouteItem = getRouteProperty(routeData, 'routeItem'),\n previousRouteItem = getRouteProperty(previousRouteData, 'routeItem'),\n potentialParentRouteData = visitedRoutesStack.objectAt(stackSize - 2),\n potentialParentRouteItem = getRouteProperty(potentialParentRouteData, 'routeItem');\n\n // If there is no new route item, then it cannot replace the previous one.\n // This can happen if the current route is not identified by a routeItem, for example Terms&Conditions or Privacy policy.\n // - We should probably fix that, but not sure if it is necessary.\n if (!newRouteItem) {\n return false;\n }\n\n // If the current route is a subRoute and the previous route is a subRoute and they have the same parent, replace\n // the last route in the list instead of appending it.\n // MM: Not 100% sure about this behavior, but I think that it is the correct one for Web. Maybe we will want something\n // different while on small devices.\n if (\n newRouteItem.isSubRoute &&\n previousRouteItem &&\n previousRouteItem.isSubRoute &&\n get(newRouteItem, 'parent.id') === get(previousRouteItem, 'parent.id')\n ) {\n return true;\n }\n\n // Need a fix for simulating back for legacy pages and routes that did not implement it yet.\n // - For example -> Scenes -> Edit Scene -> Save/Cancel needs to pop Edit Scene and replace scene.\n // MM: This is not a 100% right solution, but it will provide a workaround until we set our action buttons to\n // go back instead of redirect.\n const newRouteItemId = newRouteItem.id;\n if (\n !isFirstRoute &&\n stackSize >= 2 &&\n newRouteItemId === potentialParentRouteItem?.id &&\n previousRouteItem &&\n !previousRouteItem.isSubRoute &&\n get(previousRouteItem, 'parent.id') === newRouteItemId\n ) {\n visitedRoutesStack.popObject();\n return true;\n }\n\n return false;\n}\n\n/**\n * Ensures that there is a correct root route data on the stack.\n *\n * @private\n * @static\n * @memberof services.ContextManager\n *\n * @param {EmberArray} visitedRoutesStack\n * @param {RouteDataType} routeData\n * @param {RouteDataType} previousRouteData\n * @param {boolean} isFirstRoute\n * @param {boolean} isMobileApp\n */\nfunction ensureRootVisitedRoute(visitedRoutesStack, routeData, previousRouteData, isFirstRoute, isMobileApp) {\n if (!isFirstRoute || previousRouteData) {\n return;\n }\n\n // Skip adding the root route if we're on mobile and the route to load explicilty defines skipping it\n const route = getRouteProperty(routeData, 'route');\n if (isMobileApp && route?.skipAddingRootRouteOnFirstLoadMobile) {\n return;\n }\n\n // If the stack was undefined but this is not the root item, then add root item of the current item\n // so that the user can return back to it.\n // But only if the route is not a subRoute.\n const routeItem = getRouteProperty(routeData, 'routeItem'),\n rootItemForRouteItem = (routeItem || {}).rootItem;\n\n // Only use this if the current route is not a subRoute with only root\n // as a parent because that would mean that it is in the first level.\n if (rootItemForRouteItem && (!routeItem.isSubRoute || routeItem.parent !== rootItemForRouteItem)) {\n visitedRoutesStack.pushObject({\n routeItem: rootItemForRouteItem\n });\n }\n}\n\n/**\n * Processes visited routes stack and ensure its correctness.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n *\n * @param {RouteDataType} routeData\n * @param {boolean} wasReplaceTransition - Was this route entered through a replace transition?\n */\nfunction processVisitedRoutesStack(routeData, wasReplaceTransition) {\n if (!routeData || (get(routeData, 'routeItem.showInModal') && !get(routeData, 'routeItem.isNative'))) {\n return;\n }\n\n // Clear the stack if the user was forced to the app-error route.\n if (routeData.routeName === 'app-error') {\n this.clearVisitedRoutesStack();\n return;\n }\n\n // Only applies to add-device and manage device routes specifically. All other routes will do nothing within the function.\n handleRoutesStackForWizards.call(this, routeData);\n\n this.lastPreErrorUrl = window.location.href;\n let visitedRoutesStack = this.visitedRoutesStack;\n\n // Are we storing the first route during application lifecycle?\n const isFirstRoute = visitedRoutesStack === undefined;\n\n if (isFirstRoute) {\n // Create stack for usage.\n visitedRoutesStack = this.resetVisitedRoutesStack();\n }\n\n const previousRouteData = visitedRoutesStack.lastObject;\n\n // Current route should replace previous route on the stack if the routes are the same or if we need to make some special adjustments.\n if (\n wasReplaceTransition ||\n areRoutesTheSame(routeData, previousRouteData) ||\n shouldRouteReplacePreviousOnStack(visitedRoutesStack, routeData, previousRouteData, isFirstRoute)\n ) {\n // For simplicity we just pop the last object.\n visitedRoutesStack.popObject();\n }\n\n // Need to check the root of the stack.\n ensureRootVisitedRoute(visitedRoutesStack, routeData, previousRouteData, isFirstRoute, this.isMobileApp);\n\n // Set previous route data.\n set(this, 'previousRouteData', previousRouteData);\n\n // Push the new route to the list of visited ones.\n visitedRoutesStack.pushObject(routeData);\n}\n\n/**\n * Remove duplicate routes in the routes stack for wizard routes.\n *\n * Explanation:\n * If we are inserting duplicates, we are going to erase all the sequential routes in the history starting from routeData.\n * Ex. stack = [A, B, C, D, E], routeData = C\n * After splicing: stack = [A, B]\n *\n * This is to prevent a scenario where we have [A, B, C, D, E, C] stack\n * where C's back button is pointing to E when it should point to B.\n *\n * NOTE: The logic will be skipped if the current route is not from the add-device engine or manage device deletion wizard.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n *\n * @param {RouteDataType} routeData\n */\nfunction handleRoutesStackForWizards(routeData) {\n if (!routeData || !routeData.routeItem || !routeData.routeItem.routeId) {\n return;\n }\n\n if (!this.visitedRoutesStack) {\n return;\n }\n\n const preWizardRoutes = [EmberAddDeviceCategories, EmberAddDeviceDevices, EmberAddDeviceStart, EmberManageDevices];\n // If current route is not from a pre-wizard route, skip.\n if (!preWizardRoutes.includes(routeData.routeItem.routeId)) {\n return;\n }\n\n // routeIndex will return a value if the routeData, the route that we are about to put in, already exists in the visitedRoutesStack.\n // If not, routeIndex will just return -1.\n let routeIndex = this.visitedRoutesStack.findIndex((route) => route.routeName === routeData.routeName);\n\n if (routeIndex !== -1 && this.visitedRoutesStack.length > 1) {\n this.visitedRoutesStack.splice(routeIndex);\n }\n}\n\n/**\n * Saves the route stack to localStorage\n * This is used for webviews whose sessions expire in the mobile app\n * The route stack is saved as an array of route IDs\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n */\nfunction saveRouteStackToLocalStorageIfNeeded() {\n // Only save the route stack if the user has visited a subroute\n // (Stack of length 1 is only the root)\n if (!this.visitedRoutesStack || this.visitedRoutesStack.length <= 1) {\n return;\n }\n\n // Make a list of route IDs from the only the visited routes\n // that don't require parameters\n let routeStackInfo = this.visitedRoutesStack;\n\n // Remove all routes before this.siteEntryPoint\n const indexOfEntryPoint = this.visitedRoutesStack.findIndex((x) => x === this.siteEntryPoint);\n\n // Splice is an in-place function\n routeStackInfo.splice(0, indexOfEntryPoint === -1 ? 0 : indexOfEntryPoint);\n\n // Filter routes that require parameters, and convert to IDs\n routeStackInfo = routeStackInfo\n .filter(\n (route) => route.route === undefined || route.route.slugs === undefined || route.route.slugs.length === 0\n )\n .map((route) => route.routeItem.routeId);\n\n if (routeStackInfo.length === 0) {\n return;\n }\n\n // Set localStorage to JSON string of routes array\n window.localStorage.setItem(this.persistedRouteStackName, JSON.stringify(routeStackInfo));\n}\n\n// endregion\n\n// region Route transitions.\n\n/**\n * Resolves the target route based on the passed parameters, returning the route name and parameters.\n *\n * @param {models.navigation.RouteItem} [routeItem]\n * @param {String} [routeName]\n * @param {Object} [queryParamsIn]\n * @param {Object} [searchQueryParams]\n *\n * @returns {{name: String, params: Object}}\n *\n * @private\n * @memberof services.ContextManager\n */\nfunction resolveTargetRoute(routeItem, routeName, queryParamsIn, searchQueryParams = undefined) {\n // Make a new object from queryParamsIn so that we do not alter the original one by accident.\n let queryParams = JSON.parse(JSON.stringify(queryParamsIn || {}));\n\n // Was a routeItem passed?\n if (routeItem) {\n const { isNative, url } = getProperties(routeItem, 'isNative', 'url');\n\n // Native routes use URL, all others use legacy page.\n routeName = isNative ? url : LEGACY_PAGE_ROUTE_NAME;\n\n // Is there NO route name?\n if (!routeName) {\n // Use the first sub-route (no parameters).\n return resolveTargetRoute(get(routeItem, 'relationship.subRoutes.firstObject'));\n }\n\n const queryCharIndex = routeName.indexOf('?');\n\n if (queryCharIndex !== -1) {\n queryParams = Object.assign(\n queryParams || {},\n JSON.parse(\n '{\"' +\n decodeURI(routeName.substring(queryCharIndex + 1))\n .replace(/\"/g, '\\\\\"')\n .replace(/&/g, '\",\"')\n .replace(/=/g, '\":\"') +\n '\"}'\n )\n );\n\n routeName = routeName.substring(0, queryCharIndex);\n }\n\n // Is the route NOT native?\n if (!isNative) {\n // Foolproof query params and hash, because sometimes they get pass in as \"undefined\" to the legacy page route.\n queryParams.search = queryParams.search || '';\n queryParams.hash = queryParams.hash || '';\n\n // Add default parameters.\n queryParams = Object.assign(\n {\n url: encodeURIComponent(url),\n search: '',\n hash: ''\n },\n queryParams\n );\n }\n\n // Are there search query parameters?\n if (searchQueryParams) {\n // Add to parameters.\n // This code is substitute for jQuery.param and was found here: https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object (the ES6 solution)\n queryParams.search =\n (queryParams.search || '') +\n (isEmpty(queryParams.search) ? '?' : '&') +\n Object.keys(searchQueryParams)\n .map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(searchQueryParams[k])}`)\n .join('&');\n }\n }\n\n // Fallback to routeName.\n return {\n name: routeName !== undefined ? routeName : '',\n params: queryParams\n };\n}\n\n/**\n * Transitions ember application to a different route.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n *\n * @param {String} method - Defines transition method to us.\n * @param {Ember.Route} route - Context for transition.\n * @param {number} routeItemId\n * @param {Object|Array|undefined} model\n * @param {Object=} queryParams\n * @returns {Transition}\n */\nfunction transitionFlowFromRouteToRouteId(method, route, routeItemId, model, queryParams) {\n const routeItem = this.getRouteItem(routeItemId);\n\n if (!routeItem) {\n sentryWithScopeAndWarn('Unable to transition to route id.', { routeId: routeItemId }, undefined);\n }\n\n const routeData = resolveTargetRoute(routeItem),\n data = [routeData.name];\n\n if (model) {\n if (!isArray(model)) {\n model = [model];\n }\n\n data.push(...model);\n }\n\n // If query params were passed, add them to the data array.\n if (queryParams) {\n data.push({\n queryParams: Object.assign({}, routeData.params, queryParams)\n });\n }\n\n return route[method](...data);\n}\n\n/**\n * Overwrites virtual methods on some components with the concrete implementations from this service.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n */\nfunction overwriteVirtualRouteNavFunctions() {\n const { getVisitedRoutesStackLength, transitionToPreviousRoute } = this,\n uiComponents = getOwner(this).lookup('@adc/ui-components:appValues'),\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-classic-classes\n navApi = EmberObject.extend({\n transitionToPreviousRoute: transitionToPreviousRoute.bind(this)\n });\n\n if (uiComponents) {\n uiComponents.navigationApi = navApi.create();\n }\n\n let componentsToInit = ['action-buttons', 'route-view'].map((name) => getOwner(this).lookup(`${name}:main`)),\n routeViewNavigationApi = componentsToInit[1];\n\n // Iterate addons to update.\n componentsToInit.forEach((navigationApi) => {\n if (navigationApi) {\n // Pass navigationApi.\n set(navigationApi, 'transitionToPreviousRoute', transitionToPreviousRoute.bind(this));\n }\n });\n\n if (routeViewNavigationApi) {\n // Pass navigationApi.\n set(routeViewNavigationApi, 'getVisitedRoutesStackLength', getVisitedRoutesStackLength.bind(this));\n }\n}\n\n/**\n * Transitions to the previous route on the stack or the knownPreviousRoute if it is passed in.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n *\n * @param {number} [defaultPageIfStackIsEmpty=navigation.firstObject] The id of the route to transition to if the visited route stack is empty.\n * @param {models.navigation.RouteItem} knownPreviousRoute. The previousRoute (if already known).\n *\n * @returns {Transition | null}\n */\nfunction transitionToPreviousRouteExplicit(defaultPageIfStackIsEmpty, knownPreviousRoute) {\n const { nativeBridge, identityModel } = this,\n previousNonSkippedRoute = knownPreviousRoute || popRoutesStackToPreviousNonSkippedRoute.call(this);\n\n // If there are no more routes to pop, then:\n // - If there is NativeBridge, tell it to go back.\n // - Otherwise go to the first navigation object (or defaultPageIfStackIsEmpty if passed in)\n // Note that a use case where visitedRoutesStack will be empty is if the user refreshed the page.\n if (!previousNonSkippedRoute) {\n if (nativeBridge.doesSupportGoBack) {\n return nativeBridge.goBack();\n }\n\n if (defaultPageIfStackIsEmpty && this.getRouteItem(defaultPageIfStackIsEmpty)) {\n return this.transitionToRouteId(defaultPageIfStackIsEmpty);\n }\n\n return this.transitionToRouteId(get(identityModel, 'navigation.firstObject.routeId'));\n }\n\n return this.transitionToRoute(\n ...getObjProperties(previousNonSkippedRoute, 'routeItem', 'routeName', 'queryParams'),\n undefined,\n ...(get(previousNonSkippedRoute, 'route.slugs') || [])\n );\n}\n\n/**\n * Pops the visited route stack to the previous route which doesn't have skipWhenTransitioningBack = true.\n * Returns the value of this previous route.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n */\nfunction popRoutesStackToPreviousNonSkippedRoute() {\n const { visitedRoutesStack = [] } = this,\n currentRouteItem = get(visitedRoutesStack, 'lastObject.routeItem');\n\n // If we are transitioning back, we want to transition back to the previous non-edit route.\n // Keep popping off items until we have popped off all of the trailing edit routes.\n do {\n // Pop the current route.\n visitedRoutesStack.popObject();\n } while (get(visitedRoutesStack, 'lastObject.route.skipWhenTransitioningBack'));\n\n // If the current page was shown in modal and it is not a showInModalRootRouteItem and the\n // previous route is not shown in modal, then push root in modal route to the stack.\n // This is a little hack so that everything works ok in native page modals.\n const previousRouteItem = get(visitedRoutesStack, 'lastObject.routeItem') || {},\n shouldShowRootRouteItem =\n currentRouteItem &&\n currentRouteItem.showInModal &&\n !previousRouteItem.showInModal &&\n currentRouteItem.showInModalRootRouteItem !== currentRouteItem;\n\n if (shouldShowRootRouteItem) {\n visitedRoutesStack.pushObject({\n routeItem: currentRouteItem.showInModalRootRouteItem\n });\n }\n\n return visitedRoutesStack.popObject();\n}\n\n/**\n * Returns to the native app.\n *\n * @private\n * @instance\n * @memberof services.ContextManager\n */\nfunction navigateBackToNativeApp() {\n if (this.nativeBridge && this.nativeBridge.doesSupportGoBack) {\n this.nativeBridge.goBack();\n } else {\n // We want to use the existing location, so we don't log out the session which could cause problems with the mobile webview.\n // Note: this means the loading of the existing location should be carefully written so not to do any action that its not meant to.\n // I.E., saving data on page load could occur twice in a row.\n const { href } = window.location,\n containsQueryParams = href.includes('?'),\n appActionQueryParam = `${containsQueryParams ? '&' : '?'}AppAction=1`,\n url = href + appActionQueryParam;\n\n // Setting AppAction=1 in the querystring tells the mobile app to exit the web interface.\n this.transitionToUrl(url);\n }\n}\n\n// endregion\n\n/**\n * @classdesc\n *\n * Service for handling storage of previous route transitions and triggering events\n *\n * @todo Maybe we can have a full stack of route data and move between them\n *\n * @class services.ContextManager\n * @extends BaseContextManager\n */\nexport default class ContextManager extends BaseContextManager {\n @service store;\n @service intl;\n @service helpTour;\n @service nativeBridge;\n @service router;\n @service cookieManager;\n @service navigation;\n @service identityManager;\n\n constructor(...args) {\n super(...args);\n\n // Modernizr does this check. Relying on the touch event means that we won't get the information until the user touches something.\n if (!(this.hasTouchEvents = 'ontouchstart' in window)) {\n // Just in case the check missed it, attach one time event listener to update touch screen CSS class.\n addWeakListener(this, document, 'touchstart', () => set(this, 'hasTouchEvents', true), true);\n }\n }\n\n // region Context\n\n /**\n * Asynchronously loads the main session data required for the application to operate.\n *\n * @returns {{ identity: models.Identity, profile: models.profile.Profile }}\n */\n async initializeApplicationData() {\n return this.identityManager.initializeApplicationData.perform();\n }\n\n /**\n * Returns the Identity model retrieved from the store.\n *\n * @type {models.Identity}\n */\n @reads('identityManager.identityModel')\n identityModel;\n\n /**\n * Indicates the browser supports touch events.\n *\n * @type {boolean}\n */\n @tracked hasTouchEvents = false;\n\n /**\n * Is the app being served as a webview in a mobile app?\n *\n * @type {boolean}\n */\n @alias('identityModel.isMobileApp')\n isMobileApp;\n\n /**\n * Is the app being served as a webview in the mobile tech app?\n *\n * @type {boolean}\n */\n @alias('identityModel.isMobileTechApp')\n isMobileTechApp;\n\n /**\n * Indicates if the application is being run on a touch screen device.\n *\n * @type {boolean}\n */\n @or('hasTouchEvents', 'isMobileApp')\n isTouchDevice;\n\n /**\n * The last URL accessed before we landed on the error route.\n *\n * @type {String}\n */\n @tracked lastPreErrorUrl = undefined;\n\n /**\n * True if the user is an enterprise user.\n * @deprecated Please use the method from the identity-manager service.\n * @type {boolean}\n */\n @alias('identityModel.isEnterprise')\n isEnterprise;\n\n /**\n * Indicates the user is a PointCentral user.*\n * @deprecated Please use the method from the identity-manager service.\n */\n @reads('identityModel.isPointCentral')\n isPointCentral;\n\n /**\n * Gets the id of the selected system (customer id).\n *\n * @returns {String}\n * @deprecated Please use the method from the identity-manager service.\n */\n getSelectedSystemId() {\n return this.identityManager.getSelectedSystemId();\n }\n\n /**\n * Gets the id of the selected system group.\n *\n * @returns {String}\n * @deprecated Please use the method from the identity-manager service.\n */\n getSelectedSystemGroupId() {\n return this.identityManager.getSelectedSystemGroupId();\n }\n\n /**\n * Returns either the selected system ID or the selected system group ID.\n *\n * @returns {String}\n * @deprecated Please use the method from the identity-manager service.\n */\n getContextId() {\n return this.identityManager.getContextId();\n }\n\n /**\n * Focuses on the app content.\n */\n focusOnAppContent() {\n document.getElementById('app-content')?.focus();\n }\n\n /**\n * Indicates that times should be displayed in preferred timezone because the context has systems in multiple time zones.\n *\n * @returns {boolean|Promise}\n */\n @reads('identityManager.showPreferredTimezone')\n showPreferredTimezone;\n\n /**\n * Gets the length of the visited routes array.\n *\n * @returns {number}\n */\n getVisitedRoutesStackLength() {\n const { visitedRoutesStack } = this;\n return visitedRoutesStack ? visitedRoutesStack.length : 0;\n }\n\n /**\n * Checks if this is for a rep and if the current url has an external query param, since\n * mobile tech attaches that to urls opened by it.\n *\n * @returns {boolean}\n * @deprecated Please use the method from the identity-manager service.\n */\n isMobileTech(hasExternalQueryParam) {\n this.identityManager.isMobileTech(hasExternalQueryParam);\n }\n\n /**\n * Indicates this is the internal ADC dealer (1115).\n *\n * @type {boolean}\n */\n @equal('identityModel.dealer.id', '1115')\n isAdcInternalDevDealer;\n\n /**\n * Indicates this is the ADT Test dealer (794).\n * Necessary for current Linked Devices Functionality.\n *\n * @type {boolean}\n */\n @equal('identity.dealer.id', '794')\n isAdtTestDealer;\n\n /**\n * Indicates this is the internal Alarm dealer (1).\n *\n * @type {boolean}\n */\n @equal('identityModel.dealer.id', '1')\n isAlarmInternalDevDealer;\n\n /**\n * Are there any remaining setup steps for the login to complete before accessing the site.\n *\n * @type {boolean}\n */\n @equal('identityModel.initialSetupSteps.length', 0)\n hasFinishedSetupSteps;\n\n /**\n * Indicates the dealer is internal.\n *\n * @type {boolean}\n */\n @or('isAdcInternalDevDealer', 'isAlarmInternalDevDealer')\n isInternalDealer;\n\n /**\n * Indicates the dealer is an internal release dealer.\n *\n * @type {boolean}\n * @deprecated Please use the method from the identity-manager service.\n */\n getIsInternalReleaseDealer() {\n this.identityManager.getIsInternalReleaseDealer();\n }\n\n /**\n * Indicates this is a Sector dealer.\n *\n * @type {boolean}\n * @deprecated Please use the method from the identity-manager service.\n */\n @reads('identityManager.isSectorDealer')\n isSectorDealer;\n\n /**\n * Indicates that SMRF configuration and enrollment is permitted for the logged in user.\n *\n * @type {boolean}\n */\n @computed()\n get isSmrfAllowed() {\n return isPresent(this.getRouteItem(EmberSettingsFaceRecognition));\n }\n\n /**\n * Refresh application by reloading the page.\n *\n * @param {boolean} [shouldReloadData=false] - Should the application data be reloaded server side? This is VERY expensive.\n * @param {boolean} [shouldRedirectToIndex=false] - After refresh, should the user be redirected to index?\n *\n * @returns {Ember.RSVP.Promise}\n * @deprecated Please use the method from the identity-manager service.\n */\n async refreshApplication(shouldReloadData = false, shouldRedirectToIndex = false) {\n this.identityManager.refreshApplication(shouldReloadData, shouldRedirectToIndex);\n }\n\n /**\n * Forces the SystemSelect component to refresh its list of available systems.\n */\n refreshAvailableSystems() {\n // Tests will fail if this is called without wrapping in a run.\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n run(() => window.dispatchEvent(createNewEvent(AVAILABLE_SYSTEMS_CHANGED_KEY)));\n }\n\n /**\n * Handles switching the context to a new system group with the given id.\n *\n * @param {Number} groupIdToSwitchTo\n * @param {Number} destinationRoute\n * @deprecated Please use the method from the identity-manager service.\n */\n async switchToNewGroup(groupIdToSwitchTo, destinationRoute) {\n await this.identityManager.switchToNewGroup(groupIdToSwitchTo, destinationRoute);\n }\n\n /**\n * Opens inactivity modal.\n * @deprecated Please use the method from the identity-manager service.\n */\n triggerInactivityWarning() {\n this.identityManager.triggerInactivityWarning();\n }\n\n /**\n * Switches customer/system group to the desired item.\n *\n * @param {models.systems.AvailableSystemItem} systemItem\n *\n * @returns {Promise}\n * @deprecated Please use the method from the identity-manager service.\n */\n async switchContext(systemItem) {\n return this.identityManager.switchContext(systemItem);\n }\n\n // endregion\n\n // region Application Activation/Deactivation\n\n /**\n * Marks application as active.\n * @deprecated Please use the method from the identity-manager service.\n */\n activateApplication() {\n this.identityManager.activateApplication();\n }\n\n /**\n * Marks application as inactive.\n * @deprecated Please use the method from the identity-manager service.\n */\n deactivateApplication() {\n this.identityManager.deactivateApplication();\n }\n\n // endregion\n\n // region Loading and Processing\n\n /**\n * Is a route currently loading?\n *\n * @private\n *\n * @type {boolean}\n * @deprecated Please use the method from the identity-manager service.\n */\n @reads('identityManager.isLoading')\n isLoading;\n\n /**\n * Is a should site pe inactive?\n *\n * @private\n *\n * @type {boolean}\n * @deprecated Please use the method from the identity-manager service.\n */\n @reads('identityManager.isInactive')\n isInactive;\n\n /**\n * Sets whether the current route is currently loading data.\n *\n * @note Eventually, we might want to split showing of the loading bar and the content into 2 different properties.\n * That would allow us to show the loader a while we also start showing some content and stop it once the initial\n * content has loaded.\n *\n * @param {boolean} isLoading\n * @deprecated Please use the method from the identity-manager service.\n */\n setIsLoading(isLoading) {\n this.identityManager.setIsLoading(isLoading);\n }\n\n // endregion\n\n // region Initial Setup Steps\n\n /**\n * Does the context need to perform the initial-setup?\n *\n * @type {boolean}\n */\n @notEmpty('identityModel.initialSetupSteps')\n isInitialSetupRequired;\n\n // endregion\n\n // region Routing.\n\n /**\n * Data for the currently viewed route.\n *\n * @type {RouteDataType|undefined}\n */\n currentRouteData;\n\n /**\n * Data for the last viewed route.\n *\n * @type {RouteDataType|undefined}\n */\n previousRouteData;\n\n /**\n * Data for the last route that was visited before a route that was opened in modal.\n *\n * @type {RouteDataType|undefined}\n */\n lastPreModalRouteData;\n\n /**\n * List of visited routes (non page in modal ones).\n *\n * @type {EmberArray}\n */\n visitedRoutesStack = A([]);\n\n /**\n * Does the visited route stack need to be reset on setup?\n *\n * @type {boolean}\n */\n shouldResetRouteStack = true;\n\n /**\n * The url to transition to after an error occurs.\n *\n * @type {string} urlAfterError\n */\n @computed('isMobileApp', 'lastPreErrorUrl', 'siteEntryPoint')\n get urlAfterError() {\n const { siteEntryPoint } = this;\n\n // Use either the last non-error page or root url as the url to transition to after an error.\n let urlToTransitionTo = this.lastPreErrorUrl || ENV.rootURL;\n\n // If this is a mobile app use the entry point into the application.\n if (this.isMobileApp && siteEntryPoint) {\n let routeItemUrl = get(siteEntryPoint, 'routeItem.url');\n\n // If urlToTransitionTo is undefined, the refresh button on the app error page will be hidden.\n urlToTransitionTo = routeItemUrl === undefined ? undefined : routeItemUrl.replace('.', '/');\n }\n\n return urlToTransitionTo;\n }\n\n /**\n * The localStorage key for saving/loading the visited route stack\n */\n persistedRouteStackName = 'persistedRouteStack';\n\n /**\n * Loads the saved route stack from localStorage\n * Returns an array of route items, can return null\n * The route stack is saved as an array of route IDs\n */\n getPersistedRouteStack() {\n // Get the stored route stack string from local storage\n const routeStackInfo = JSON.parse(window.localStorage.getItem(this.persistedRouteStackName)),\n routeStack = routeStackInfo\n ?.map((routeId) => this.getRouteItem(routeId))\n .filter((item) => item !== undefined);\n\n // Immediately remove the stack from storage to prevent any potential race conditions\n window.localStorage.removeItem(this.persistedRouteStackName);\n\n return routeStack;\n }\n\n /**\n * Restores the visited route stack from the identity model if it exists\n * (Only used if the user is logged out on a mobile webview due to inactivity)\n */\n restoreVisitedRouteStackIfNeeded() {\n // Load the route stack from localStorage\n const routeItems = this.getPersistedRouteStack();\n\n if (!routeItems || routeItems?.length === 0) {\n return;\n }\n\n // Take the top item off the route stack\n // (This is where the user will actually be redirected to)\n const routeItemForRedirect = routeItems.pop();\n\n // Add all the remaining route items to the stack\n routeItems.forEach((item) => this.addRouteToVisitedRoutesStack(item.routeId));\n\n // Set a flag to prevent another restore\n this.shouldResetRouteStack = false;\n\n // Transition the user to the last supported route they were on\n this.transitionToRouteId(routeItemForRedirect.routeId);\n }\n\n /**\n * Sets the new route data for a transition.\n *\n * @param {RouteDataType} routeData\n * @param {boolean} wasReplaceTransition - Was the transition to this route a replace transition?\n */\n setCurrentRouteData(routeData, wasReplaceTransition) {\n const clearVisitedRouteStackMobile = this.isMobileApp && routeData?.route?.clearVisitedRouteStackMobile,\n routeItem = routeData?.routeItem,\n parentItem = routeItem?.parent,\n isNavigationTab = (parentItem?.isNavigationItem && routeItem?.isSubRoute) || routeItem?.isNavigationItem;\n\n if (clearVisitedRouteStackMobile || isNavigationTab) {\n this.clearVisitedRoutesStack();\n this.resetVisitedRoutesStack();\n if (clearVisitedRouteStackMobile) {\n this.visitedRoutesStack.pushObject({\n routeItem: routeData.routeItem\n });\n return;\n }\n }\n\n let [currentRouteData, lastPreModalRouteData, siteEntryPoint] = getObjProperties(\n this,\n 'currentRouteData',\n 'lastPreModalRouteData',\n 'siteEntryPoint'\n );\n\n // Is this route shown in a modal?\n if (get(routeData, 'routeItem.showInModal')) {\n // Update last pre modal route (if undefined).\n lastPreModalRouteData = lastPreModalRouteData ||\n currentRouteData || {\n routeName: ''\n };\n } else {\n // Clear last pre modal route.\n lastPreModalRouteData = undefined;\n }\n\n // Update current route data.\n currentRouteData = routeData;\n\n // Update the entry point (if undefined).\n siteEntryPoint = siteEntryPoint || currentRouteData;\n\n // Cache updated values.\n setProperties(this, { currentRouteData, lastPreModalRouteData, siteEntryPoint });\n\n this.identityManager.setPageTitle(routeData);\n\n // Process the routes stack.\n // TODO: Eventually the stack could replace currentRouteData and lastPreModalRouteData.\n processVisitedRoutesStack.call(this, routeData, wasReplaceTransition);\n }\n\n /**\n * Creates a copy of the current route and overwrites the passed in query params.\n * The copy will then either replace the current route data or be pushed on top.\n *\n * @param {Object} updatedQueryParams\n * @param {boolean} wasReplaceTransition\n */\n overwriteQueryParamsOnCurrentRoute(updatedQueryParams, wasReplaceTransition) {\n const { currentRouteData } = this,\n queryParams = currentRouteData?.queryParams;\n\n if (!queryParams) {\n return;\n }\n\n const newQueryParams = { ...queryParams, ...updatedQueryParams };\n this.setCurrentRouteData({ ...currentRouteData, queryParams: newQueryParams }, wasReplaceTransition);\n }\n\n /**\n * Pops modal routes that belong to the current modal.\n *\n * @param {models.navigation.RouteItem} rootRouteItem\n */\n async popVisitedModalRoutes(rootRouteItem) {\n if (!rootRouteItem) {\n return;\n }\n\n // Need to await this because showInModalRootRouteItem is a proxy.\n while ((await this.visitedRoutesStack?.lastObject?.routeItem?.showInModalRootRouteItem) === rootRouteItem) {\n this.visitedRoutesStack.popObject();\n }\n }\n\n /**\n * Return to the mobile app.\n *\n * @param {boolean} closeWebView Should the native bridge send the close web view command instead of the go back command.\n */\n transitionBackToMobileApp(closeWebView = false) {\n if (!this.isMobileApp) {\n return;\n }\n\n if (closeWebView && this.nativeBridge.doesSupportCloseWebViewV2) {\n this.nativeBridge.closeWebViewV2();\n } else {\n navigateBackToNativeApp.call(this);\n }\n }\n\n /**\n * Transitions back to wherever the user came from. If they arrived on this page via the mobile app, it will return them there, otherwise\n * it will transition them back to the previous route they came from.\n *\n * @param {number|undefined} pageToTransitionTo The id of the page to transition to if previous route exists.\n * @param {boolean} closeWebView Should the native bridge send the close web view command instead of the go back command.\n */\n transitionBackToMobileAppOrPreviousRoute(pageToTransitionTo, closeWebView = false) {\n const previousRoute = popRoutesStackToPreviousNonSkippedRoute.call(this);\n\n if (this.isMobileApp && !previousRoute) {\n this.transitionBackToMobileApp(closeWebView);\n } else {\n transitionToPreviousRouteExplicit.call(this, pageToTransitionTo, previousRoute);\n }\n }\n\n /**\n * Transitions to the previous route on the stack.\n * Functions as the \"Back\" button.\n *\n * @param {number} [defaultPageIfStackIsEmpty=navigation.firstObject] The id of the route to transition to if the visited route stack is empty.\n *\n * @returns {Transition}\n */\n @action transitionToPreviousRoute(defaultPageIfStackIsEmpty) {\n transitionToPreviousRouteExplicit.call(this, defaultPageIfStackIsEmpty);\n }\n\n /**\n * Resets the visited routes stack.\n *\n * This is used in cases where we want to reset the backwards navigation.\n */\n resetVisitedRoutesStack() {\n return set(this, 'visitedRoutesStack', A([]));\n }\n\n /**\n * Completely clears the visited routes stack.\n *\n * This will cause recalculation of the initial and root routes.\n */\n clearVisitedRoutesStack() {\n // Need to also clear the currentRouteData and lastPreModalRouteData.\n // TODO: We should drive those off of the visited routes stack, but it is still not 100% there.\n setProperties(this, {\n visitedRoutesStack: undefined,\n currentRouteData: undefined,\n lastPreModalRouteData: undefined\n });\n }\n\n /**\n * Resets the application after an error has occurred.\n */\n resetAfterError() {\n if (!this.urlAfterError) {\n // This should not happen, but log an error if there is no url that can be transitioned to when application is reset.\n console.error('There is no url to transition to in order to reset the application.');\n return;\n }\n\n this.transitionToUrl(this.urlAfterError, true);\n }\n\n /**\n * Resets the visited routes stack and transitions to the index route.\n *\n * @returns {Transition}\n */\n resetToIndex() {\n this.resetVisitedRoutesStack();\n return this.transitionToRoute(undefined, 'index');\n }\n\n /**\n * Gets the route item from the passed-in route ID,\n * reloads the identity model if the route ID is not included in the available routes,\n * and transitions to the route.\n *\n * This function can be very expensive\n * and could cause permissions and devices to be reloaded from the database\n * if the passed-in route ID is not already in the store.\n *\n * @param {boolean} isNativeRoute Are we transitioning to a native route?\n * @param {number} routeId The route ID to transition to.\n * @param {Record|{search: string, hash: string}|undefined} [queryParams]\n * @param {Record|undefined} [searchQueryParams] Additional properties that should be serialized and included as search query params.\n * @param {string|undefined} [model]\n * @param {unknown[]|undefined} [slugs] Slug values to pass as it transitions to the new route.\n *\n * @returns {Promise>}\n */\n async transitionToRouteWithIdentityReloadIfNeeded(\n isNativeRoute,\n routeId,\n queryParams,\n searchQueryParams,\n model,\n ...slugs\n ) {\n await this.getRouteItemWithIdentityReloadIfNeeded(routeId);\n\n if (isNativeRoute) {\n return this.transitionToNativeRoute(routeId, model, queryParams);\n }\n\n return this.transitionToRouteId(routeId, queryParams, searchQueryParams, ...slugs);\n }\n\n /**\n * Transitions to a routeItem defined by the routeItemId.\n *\n * @param {number} routeItemId\n * @param {{search: String, hash: String}} [queryParams]\n * @param {Object} [searchQueryParams] - Additional properties that should be serialized and included as search query params.\n * @param {Array} slugs Slug values to pass as we transition to route.\n *\n * @returns {Transition}\n *\n * @deprecated Please try to use the navigation service methods instead.\n */\n transitionToRouteId(routeItemId, queryParams, searchQueryParams = undefined, ...slugs) {\n const routeItem = this.getRouteItem(routeItemId);\n\n if (!routeItem) {\n sentryWithScopeAndWarn('Unable to transition to route id.', { routeId: routeItemId }, undefined);\n }\n\n return this.transitionToRoute(routeItem, undefined, queryParams, searchQueryParams, ...slugs);\n }\n\n /**\n * Transitions the application the a route specified by the routeItem, or routeName.\n *\n * @Note If transitioning to a native route with query params or model id use transitionToNativeRoute instead.\n *\n * @param {models.navigation.RouteItem} routeItem\n * @param {undefined|String=} routeName\n * @param {Object=} queryParams\n * @param {String=} queryParams.search\n * @param {String=} queryParams.hash\n * @param {Object=} searchQueryParams - Additional properties that should be serialized and included as search query params.\n * @param {String=} slugs Slug values to pass as we transition to route.\n *\n * @returns {Transition}\n *\n * @deprecated Please use the navigation service methods instead.\n */\n transitionToRoute(routeItem, routeName, queryParams, searchQueryParams = undefined, ...slugs) {\n let { name, params } = resolveTargetRoute(routeItem, routeName, queryParams, searchQueryParams);\n\n if (name) {\n // Try to get default query param values and set them on the query params.\n // This is a slight hack, but it is necessary, otherwise Ember will not correctly transition to the\n // same route if query params have not changed.\n const fnLookupRoute = (routeName) => {\n return getOwner(this).lookup(`route:${routeName}`);\n };\n\n const defaultQueryParams = (fnLookupRoute(`${name}.index`) || fnLookupRoute(name) || {}).queryParams;\n\n if (!isEmpty(defaultQueryParams)) {\n Object.keys(defaultQueryParams).forEach((key) => {\n const defaultValue = defaultQueryParams[key].defaultValue;\n\n // Check if the query param is already defined in the params object, if not then add the default one.\n if (defaultValue !== undefined && (!params || !Object.prototype.hasOwnProperty.call(params, key))) {\n params[key] = defaultValue;\n }\n });\n }\n }\n\n // Transition to the route.\n return getOwner(this)\n .lookup('route:application')\n .transitionTo(name, ...slugs, { queryParams: params });\n }\n\n /**\n * Transitions to a native ember route.\n *\n * @note This only works for native routes.\n * @note We should probably refactor transitionToRoute to work with this and simplify things.\n *\n * @param {number} routeItemId\n * @param {Object|Array.|undefined} [model]\n * @param {Object=} [queryParams]\n *\n * @returns {Transition}\n */\n transitionToNativeRoute(routeItemId, model, queryParams) {\n assert('routeItemId must be defined.', routeItemId);\n\n return transitionFlowFromRouteToRouteId.call(\n this,\n 'transitionTo',\n getOwner(this).lookup('route:application'),\n routeItemId,\n model,\n queryParams\n );\n }\n\n /**\n * Replaces the current route with a new one.\n *\n * @note This only works for native routes.\n * @note We should probably refactor transitionToRoute to work with this and simplify things.\n *\n * @param {number} routeItemId - The route to transition to.\n * @param {Object|Array.|undefined=} model\n * @param {Object=} queryParams\n * @param {Ember.Route=} [routeToReplace=this.currentRouteData.route] - The route that will be replaced. If undefined, the current route is replaced.\n *\n * @returns {Transition}\n */\n replaceRouteWithNativeRoute(routeItemId, model, queryParams, routeToReplace) {\n assert('routeItemId must be defined.', routeItemId);\n\n return transitionFlowFromRouteToRouteId.call(\n this,\n 'replaceWith',\n routeToReplace || this.currentRouteData.route,\n routeItemId,\n model,\n queryParams\n );\n }\n\n isSystemInstall() {\n return false;\n }\n\n /**\n * Redirect to a URL.\n *\n * @note This should only be used if the user is trying to reach an external URL.\n * @note If you go from a legacy page to another legacy page, it will lose the back-button history.\n *\n * @param {String} url\n * @param {boolean} [replaceUrl=false] - Should the redirect replace the history, or just assign?\n *\n * @deprecated All this method does is wrap `window.location.replace` and `window.location.assign`, so just use those instead.\n */\n transitionToUrl(url, replaceUrl = false) {\n window.location[replaceUrl ? 'replace' : 'assign'](url);\n }\n\n /**\n * Redirect to a URL in a new browser window.\n * @param {string} url\n */\n transitionToUrlInNewBrowserWindow(url) {\n if (this.isMobileApp) {\n const redirectUrl = addSearchParam(url, 'OpenExternally', 'true');\n this.transitionToUrl(`${redirectUrl}`);\n } else {\n window.open(url);\n }\n }\n\n /**\n * Start the setup wizard.\n *\n * TODO: It is dangerous to get the URL this way, we should probably launch a webservice to get the right location.\n *\n * @param {String} url The URL of the setup wizard.\n * @param {number} returnToRouteId The route ID for the wizard to return to upon completion.\n */\n startWizard(url, returnToRouteId) {\n // Replace with a regex replaces all instances instead of just the first one.\n const routeItem = this.getRouteItem(returnToRouteId);\n if (routeItem) {\n url = `${url}?returnToUrl=${routeItem.url.replace(/\\./g, '/')}`;\n }\n\n this.transitionToUrl(url);\n }\n\n /**\n * Launches a wizard using an engine.\n *\n * @note Transitioning to a wizard with this method is preferred.\n *\n * @param {int} wizardEnum\n * @param {string} returnToUrl\n * @param {object} queryParams\n * @param {number} returnEnumId - The enum of the route for the wizard to return to.\n *\n * @returns {Promise}\n */\n transitionToWizard(wizardEnum, returnToUrl = '', queryParams = {}, returnEnumId = EmberHome) {\n const queryParamsForWizard = {\n wizardEnum,\n returnEnumId,\n returnToUrl,\n ...queryParams\n };\n\n return this.router.transitionTo('wizardEngine.wizard-launch', { queryParams: queryParamsForWizard });\n }\n\n /**\n * Returns the store route item matching the specified routeId, or undefined if not found.\n *\n * @param {String} routeId The ID of the route to search for.\n *\n * @returns {models.navigation.RouteItem|undefined}\n *\n * @deprecated Please use the navigation service.\n */\n getRouteItem(routeId) {\n // Get all routes.\n const routes = this.store.peekAll('navigation/route-item');\n\n // Search by routeId, or just id if not found.\n return routes.findBy('routeId', routeId) || routes.findBy('id', routeId);\n }\n\n /**\n * Gets the route item from the passed-in route ID,\n * and reloads the identity model if the route ID is not included in the available routes.\n *\n * This function can be very expensive\n * and could cause permissions and devices to be reloaded from the database\n * if the passed-in route ID is not already in the store.\n *\n * @param {number} routeId\n *\n * @returns {Promise}\n */\n async getRouteItemWithIdentityReloadIfNeeded(routeId) {\n // Check if the routeId is already in the available routes.\n const routeItemBeforeReload = this.getRouteItem(routeId);\n if (routeItemBeforeReload) {\n return routeItemBeforeReload;\n }\n\n // Try reloading the identity model\n // in case the routeId was recently added to the available routes\n // (e.g. recent device install).\n await this.identityModel.reloadContextAndModel();\n\n // Check again and log info.\n const routeItemAfterReload = this.getRouteItem(routeId);\n console.info(\n routeItemAfterReload\n ? `Transitioning to route id: ${routeId} after reloading the identity model.`\n : // Another warning will be logged when actually attempting to transition to the unavailable route.\n `Route id: ${routeId} still unavailable after reloading the identity model.`\n );\n\n return routeItemAfterReload;\n }\n\n /**\n * Returns the route item in store that matches the specified url (case insensitive).\n *\n * @note Using getRouteItem is always preferred.\n *\n * @param {String} routeUrl\n *\n * @returns {models.navigation.RouteItem|undefined}\n */\n getRouteItemByUrl(routeUrl) {\n // Convert URL to lowercase.\n routeUrl = String(routeUrl).toLowerCase();\n\n if (!routeUrl) {\n return undefined;\n }\n\n // Filter navigation items based on key.\n return this.store.peekAll('navigation/route-item').find((item) => (item.url || '').toLowerCase() === routeUrl);\n }\n\n /**\n * Handles either refreshing the session or logging the user out depending on if the user session can be renewed.\n *\n * @returns {boolean} Returns true if we are able to renew the session.\n */\n handleSessionExpiration() {\n const stayLoggedIn = this.cookieManager.getEssentialCookie('SeamlessLoginEnabled') === '1';\n\n saveRouteStackToLocalStorageIfNeeded.call(this);\n\n if (stayLoggedIn) {\n // Redirect to Default.aspx. It will see the token and create a new session.\n this.transitionToUrl(`${ENV.sitePrefix}/Default.aspx`);\n return true;\n }\n\n // If there is native bridge that supports refreshing of the WebView, do that.\n // This is not super ideal because it might spit out the user at a point where they were not at this point,\n // but it is significantly better than showing a login screen.\n if (this.nativeBridge.doesSupportRefreshWebView) {\n this.nativeBridge.refreshWebView();\n\n return true;\n }\n\n this.logout(true);\n return false;\n }\n\n /**\n * Logout logged in user from the current session.\n *\n * @param {Boolean} useReturnUrl\n * @deprecated Please use the method from the identity-manager service.\n */\n logout(useReturnUrl) {\n this.identityManager.logout(useReturnUrl);\n }\n\n /**\n * Redirect away from the app to the default .Net handling page.\n *\n * @note This is a bit strange and should be removed in the near future when we have everyone running on Ember.\n */\n redirectFromApp() {\n window.location.replace(`${ENV.sitePrefix}/DetermineLandingPage.aspx`);\n }\n\n /**\n * Adds the passed-in route ID to the visited routes stack.\n * This is used in cases when we want the back arrow to redirect back to a specific page.\n *\n * @param {number} routeId\n */\n addRouteToVisitedRoutesStack(routeId) {\n if (!this.visitedRoutesStack) {\n this.visitedRoutesStack = A([]);\n }\n\n this.visitedRoutesStack.push({\n routeItem: this.getRouteItem(routeId),\n route: undefined,\n routeName: '',\n pageTitle: ''\n });\n }\n\n /**\n * Closes mobile tech app's internal browser for webviews loaded with the \"external\" queryparam.\n */\n closeMobileTechWebView() {\n this.transitionToUrl(window.location.origin + '/closewindow');\n }\n\n // endregion\n\n // region Wizard\n\n /**\n * Is \"wizard mode\" currently enabled?\n *\n * @type {boolean}\n */\n @computed('identityModel.wizard', 'isInitialSetupRequired')\n get isWizard() {\n return this.identityModel?.wizard && !this.isInitialSetupRequired;\n }\n\n /**\n * Launches onboarding tour.\n *\n * @param {boolean} [shouldForceStart=false] - Should the tour be started no matter what?.\n */\n startOnboardingTour(shouldForceStart = false) {\n if (shouldForceStart || !this.identityModel?.hasCompletedOnboarding) {\n startOnboardingTour(this);\n }\n }\n\n // endregion\n\n // region Legacy page support.\n\n /**\n * Displays any messages from legacy error manager.\n *\n * @returns {Promise}\n * @deprecated Please use the method from the identity-manager service.\n */\n async checkLegacyErrorManagerMessages() {\n this.identityManager.checkLegacyErrorManagerMessages();\n }\n\n // endregion\n\n /**\n * Indicates if any filters are applied\n *\n * @type {boolean}\n */\n @tracked\n isActivityFilterApplied = false;\n\n /**\n * Indicates that the user is editing the home screen configuration.\n *\n * @type {boolean}\n */\n @tracked isEditingHomeScreen = false;\n\n /**\n * Location of the static resource server.\n *\n * @type {String}\n */\n @computed()\n get rootStaticResourcesServerURL() {\n return ENV.rootStaticResourcesServerURL || '/';\n }\n\n /**\n * Returns full path to a resource.\n *\n * @param {String} relativePath\n * @returns {String}\n */\n getStaticResourcePath(relativePath) {\n return `${this.rootStaticResourcesServerURL}${relativePath}`;\n }\n\n /**\n * Checks whether current route matches any of the passed routes.\n *\n * @param {number[]} idsToCheck The collection of route IDs to check\n *\n * @returns {boolean}\n */\n isCurrentRoute(...idsToCheck) {\n const id = this.currentRouteData?.routeItem?.routeId;\n return !!(id && idsToCheck.includes(id));\n }\n\n setupApplicationContextManager(postLoginRedirect) {\n // Overwrites the virtual route navigation functions.\n overwriteVirtualRouteNavFunctions.call(this);\n\n // Clear stack of visited routes if needed.\n if (this.shouldResetRouteStack) {\n this.clearVisitedRoutesStack();\n }\n // If there was post login redirect, then store it. Not clearing this on purpose so that it does not overwritten to undefined on identity reload.\n if (postLoginRedirect) {\n this.postLoginRedirect = postLoginRedirect;\n }\n }\n}\n\n/**\n * @typedef {{\n * routeItem: models.navigation.RouteItem,\n * routeName: String,\n * queryParams: Object|undefined,\n * route: classes.BaseRoute,\n * pageTitle: String\n * }} RouteDataType\n *\n * @property {models.navigation.RouteItem} routeItem Route item model.\n * @property {String} routeName Name of the route that was visited.\n * @property {Object|undefined} queryParams Query params that were passed to the route.\n * @property {classes.BaseRoute} route Currently active route object.\n * @property {String} pageTitle Title of the page.\n * @property {boolean} isWizard Is true if the route is a wizard.\n */\n","import { inject as service } from '@ember/service';\nimport * as ADD_DEVICE_RESOURCE from 'customer-site/enums/AddDeviceResource';\nimport * as URL_ENUMS from 'customer-site/enums/CustomerPageUrl';\nimport BaseEngineConfigService from '@adc/app-infrastructure/services/base-engine-config';\n\nimport type ContextManager from './context-manager';\n\n/**\n * @classdesc\n * Shares configuration data (e.g. enum values) between this application and the engines it consumes.\n */\nexport default class EngineConfigurationService extends BaseEngineConfigService {\n @service declare contextManager: ContextManager;\n\n //#region Abstract properties\n customerPageUrlEnums = {\n Ember2FASetup: URL_ENUMS.Ember2FASetup,\n EmberAccountInformation: URL_ENUMS.EmberAccountInformation,\n EmberBusinessHours: URL_ENUMS.EmberBusinessHours,\n EmberCommunicationPreferences: URL_ENUMS.EmberCommunicationPreferences,\n EmberDeviceLinkRequest: URL_ENUMS.EmberDeviceLinkRequest,\n EmberEmailVerification: URL_ENUMS.EmberEmailVerification,\n EmberMonitoringStationLocationSettings: URL_ENUMS.EmberMonitoringStationLocationSettings,\n EmberMonitoringStationLocationSettingsEdit: URL_ENUMS.EmberMonitoringStationLocationSettingsEdit,\n EmberMonitoringStationEmergencyContacts: URL_ENUMS.EmberMonitoringStationEmergencyContacts,\n EmberMonitoringStationEmergencyContactsCreate: URL_ENUMS.EmberMonitoringStationEmergencyContactsCreate,\n EmberMonitoringStationEmergencyContactsEdit: URL_ENUMS.EmberMonitoringStationEmergencyContactsEdit,\n EmberPassword: URL_ENUMS.EmberPassword,\n EmberPropertyInformation: URL_ENUMS.EmberPropertyInformation,\n EmberRecognizedDevices: URL_ENUMS.EmberRecognizedDevices,\n EmberSecurityQuestion: URL_ENUMS.EmberSecurityQuestion,\n EmberSystemInformation: URL_ENUMS.EmberSystemInformation,\n EmberTwoFactorAuthentication: URL_ENUMS.EmberTwoFactorAuthentication,\n EmberPushMigrationTool: URL_ENUMS.EmberPushMigrationTool,\n EmberVideoSettingsNetworkConfigChangeNetwork: URL_ENUMS.EmberVideoSettingsNetworkConfigChangeNetwork\n };\n //#endregion\n\n transitionToRoute(key: string) {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n return this.contextManager.transitionToRouteId(this.getRouteIdFromRouteName(key));\n }\n\n /**\n * Returns the enum values for all add device resources.\n *\n * @returns {Object}\n */\n get addDeviceResource(): Record {\n return ADD_DEVICE_RESOURCE;\n }\n\n get routeIdEmberAddDeviceCategories(): number {\n return URL_ENUMS.EmberAddDeviceCategories;\n }\n\n get routeIdEmberAddDeviceDevices(): number {\n return URL_ENUMS.EmberAddDeviceDevices;\n }\n\n get routeIdEmberAddDeviceStart(): number {\n return URL_ENUMS.EmberAddDeviceStart;\n }\n\n get routeIdEmberAddDeviceStartInfo(): number {\n return URL_ENUMS.EmberAddDeviceStartInfo;\n }\n\n get routeIdEmberAddDeviceLinkStart(): number {\n return URL_ENUMS.EmberAddDeviceLinkStart;\n }\n\n get routeIdEmberAddDeviceLinkInProgress(): number {\n return URL_ENUMS.EmberAddDeviceLinkInProgress;\n }\n\n get routeIdEmberAddDeviceLinkComplete(): number {\n return URL_ENUMS.EmberAddDeviceLinkComplete;\n }\n\n get routeIdEmberAddDeviceTryEquipment(): number {\n return URL_ENUMS.EmberAddDeviceTryEquipment;\n }\n\n get routeIdEmberAddDeviceInstallEquipment(): number {\n return URL_ENUMS.EmberAddDeviceInstallEquipment;\n }\n\n get routeIdEmberAddDeviceName(): number {\n return URL_ENUMS.EmberAddDeviceName;\n }\n\n get routeIdEmberAddDeviceAlreadyLinked(): number {\n return URL_ENUMS.EmberAddDeviceAlreadyLinked;\n }\n\n get routeIdEmberAddDeviceComplete(): number {\n return URL_ENUMS.EmberAddDeviceComplete;\n }\n\n get routeIdEmberWizardLaunch(): number {\n return URL_ENUMS.EmberWizardLaunch;\n }\n\n get routeIdEmberAddDeviceTroubleshoot(): number {\n return URL_ENUMS.EmberAddDeviceTroubleshoot;\n }\n\n get routeIdEmberAddDeviceMount(): number {\n return URL_ENUMS.EmberAddDeviceMount;\n }\n\n get routeIdEmberAddDeviceChooseDevice(): number {\n return URL_ENUMS.EmberAddDeviceChooseDevice;\n }\n\n get routeIdEmberAddDeviceTroubleshootMissing(): number {\n return URL_ENUMS.EmberAddDeviceTroubleshootMissing;\n }\n\n get routeIdEmberAddDeviceDefaultNotifications(): number {\n return URL_ENUMS.EmberAddDeviceDefaultNotifications;\n }\n\n get routeIdAddGarageGatewayV1(): number {\n return URL_ENUMS.LiftMasterInstallation;\n }\n\n get routeIdEmberManageDevices(): number {\n return URL_ENUMS.EmberManageDevices;\n }\n\n get routeIdEmberAddDeviceDifferentAccounts(): number {\n return URL_ENUMS.EmberAddDeviceDifferentAccounts;\n }\n\n get routeIdEmberAddDeviceLinkUnsuccessful(): number {\n return URL_ENUMS.EmberAddDeviceLinkUnsuccessful;\n }\n}\n","import { isArray } from '@ember/array';\nimport { setProperties } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport BaseErrorReporting from '@adc/app-infrastructure/services/base-error-reporting';\n\nimport type LocaleModel from '@adc/app-infrastructure/models/locale';\nimport type { ErrorsToIgnore, ADCEventHint } from '@adc/app-infrastructure/services/base-error-reporting';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { Event, SeverityLevel } from '@sentry/types';\nimport type ENV from 'customer-site/config/environment';\nimport type IdentityModel from 'customer-site/models/identity';\n\ntype ErrorHeaderAndIcon = {\n errorMessageHeader: string;\n icon: string;\n};\n\n/**\n * Gets error message header and icon.\n */\nfunction getErrorHeaderAndIcon(level?: SeverityLevel): ErrorHeaderAndIcon {\n const makeObject = (errorMessageHeader: string, icon: string): ErrorHeaderAndIcon => ({ errorMessageHeader, icon });\n\n if (level === 'fatal') {\n return makeObject(\n 'A fatal error has occurred. If this were a production build the application would have transitioned to the app-error route. Please fix this error before it gets to production.{newline}{newline}Unhandled exception:',\n 'issue'\n );\n }\n\n if (level === 'error') {\n return makeObject('An error has occurred, please fix this soon.{newline}{newline}Logged error:', 'warning');\n }\n\n return makeObject('Warning:', 'info');\n}\n\n/**\n * @classdesc\n * Error reporting implementation.\n */\nexport default class ErrorReportingService extends BaseErrorReporting {\n @service declare envSettings: EnvSettingsService;\n @service declare notificationManager: NotificationManager;\n @service declare router: RouterService;\n\n isEnabled = false;\n showNotificationOnError = false;\n redirectToErrorRouteOnUnhandledError = false;\n\n get errorsToIgnore(): ErrorsToIgnore[] {\n return [\n ...super.errorsToIgnore,\n this.getETI(\n 'WARNING: The JSONAPISerializer does not work with the EmbeddedRecordsMixin because the JSON API spec does not describe how to format embedded resources.'\n ),\n this.getETI('Unhandled Promise error detected'),\n this.getETI('TransitionAborted'),\n // We are ignoring this for an IE11 specific issue with the NVDA screen reader.\n // https://github.com/nvaccess/nvda/issues/9060\n this.getETI('Invalid calling object'),\n this.getETI('doc.querySelectorAll')\n ];\n }\n\n get xhrRequestsToIgnoreInBreadcrumbs(): string[] {\n return [\n ...super.xhrRequestsToIgnoreInBreadcrumbs,\n '/web/api/swa/routeTransition',\n '/Web/KeepAlive.aspx',\n '/web/api/troubleConditions/troubleConditions',\n '/web/api/performance/metrics/'\n ];\n }\n\n /**\n * Initializes error reporting.\n */\n initializeForSession(identityModel: IdentityModel, localeModel: LocaleModel, isLoginAsLoginRep: boolean) {\n const { errorReportingConfiguration } = identityModel;\n if (!errorReportingConfiguration) {\n return;\n }\n\n const { releaseId, errorReporting: envErrorReporting } = this.envSettings.getEnvironment()!;\n\n // No error reporting configuration so no dsn setting for Sentry.\n if (!envErrorReporting) {\n return;\n }\n\n const mergedErrorConfig = Object.assign({}, errorReportingConfiguration, envErrorReporting);\n\n const {\n logErrorsToConsole: showDebugInfo,\n machineName: serverName,\n environment,\n showNotificationOnError,\n redirectToErrorRouteOnUnhandledError,\n servicePlan,\n isEnabled\n } = mergedErrorConfig;\n\n setProperties(this, {\n isEnabled,\n showNotificationOnError,\n redirectToErrorRouteOnUnhandledError\n });\n\n // Configure with the error reporting service.\n this.configure({\n dsn: mergedErrorConfig.dsn,\n release: releaseId,\n showDebugInfo,\n serverName,\n environment\n });\n\n // Helper function to get relationship id.\n const fnGetRelationshipId = (relationshipName: 'selectedSystem' | 'selectedSystemGroup' | 'dealer') => {\n const rel = identityModel.belongsTo(relationshipName);\n return !rel ? undefined : rel.id();\n };\n\n // Data for error reporting.\n const customerId = fnGetRelationshipId('selectedSystem'),\n systemGroupId = fnGetRelationshipId('selectedSystemGroup'),\n { id, isMobileApp } = identityModel;\n\n // Setup context.\n this.setContext({\n user: {\n id\n },\n tags: {\n locale: localeModel.isoCode,\n customerId,\n systemGroupId,\n dealerId: fnGetRelationshipId('dealer'),\n isLoginAsLoginRep,\n isMobileApp,\n servicePlan\n }\n });\n\n // Send any errors that occurred before sentry was initialized.\"\n window.isSentryLoaded = true;\n\n const { preSentryErrors } = window;\n\n if (preSentryErrors && isArray(preSentryErrors)) {\n preSentryErrors.forEach((args: string[]) => {\n if (args && isArray(args)) {\n window.console.error(...args);\n } else {\n window.console.error('preSentryErrors contains unexpected value: ', args);\n }\n });\n window.preSentryErrors = undefined;\n }\n }\n\n /** @override */\n beforeSend(event: Event, hint?: ADCEventHint): ADCEventHint | null {\n const env = this.envSettings.getEnvironment()!;\n if (typeof env.sentryBeforeSendHandler === 'function') {\n env.sentryBeforeSendHandler(event, hint);\n }\n\n const supEvent = super.beforeSend(event, hint);\n if (!supEvent) {\n return null;\n }\n\n const message = this.getExceptionStringValue(hint, 'message');\n\n // Do not show or send to Sentry deprecation messages at this point because we have quite a few.\n if (message.startsWith('DEPRECATION:')) {\n return null;\n }\n\n // Decide whether we want to redirect to app-error route.\n const shouldRedirectToAppError = this.redirectToErrorRouteOnUnhandledError && supEvent.level === 'fatal';\n\n if (this.showNotificationOnError) {\n const { errorMessageHeader, icon } = getErrorHeaderAndIcon(supEvent.level);\n\n const text = `${errorMessageHeader}{newline}{newline}${message}{newline}{newline}Please check the console for actual error object. If you configure the browser dev tools to 'Pause on exceptions' or 'Pause on caught exceptions' the debugger will break where the exception was thrown.`;\n\n // Need to do a custom notification so that it does not close on route transition.\n this.notificationManager.addNotification(\n htmlSafe(text.replace(/{newline}/g, '
    ')),\n icon,\n undefined,\n 0,\n true,\n false,\n 'error'\n );\n }\n\n // Transition to the error route if it is desired.\n if (shouldRedirectToAppError) {\n // Transition to the application error route.\n this.router.replaceWith('app-error');\n }\n\n return this.isEnabled ? supEvent : null;\n }\n}\n","import { toggleClassOnBody } from '@adc/ember-utils/utils/browser-helpers';\nimport { set, setProperties, action } from '@ember/object';\nimport { bool } from '@ember/object/computed';\nimport { debounce } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n\nimport type DomService from '@adc/ember-utils/services/dom';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type HelpTourComponent from 'customer-site/components/help-tour/index';\nimport type Step from 'customer-site/components/help-tour/step';\nimport type Tour from 'customer-site/components/help-tour/tour';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nconst ACTION_PREVIOUS = 'previous',\n ACTION_NEXT = 'next',\n ACTION_FINISH = 'finish',\n ACTION_STOP = 'stop';\n\n/**\n * Returns function to be called when button is clicked.\n */\nfunction getButtonFunction(this: HelpTourService, actionName: string): VoidFunction {\n switch (actionName) {\n case ACTION_PREVIOUS:\n return this.goToPreviousStep;\n case ACTION_NEXT:\n return this.goToNextStep;\n case ACTION_FINISH:\n return this.finish;\n case ACTION_STOP:\n return this.stop;\n\n default:\n console.error(`No function for help-tour button action: ${actionName}`);\n\n return () => {};\n }\n}\n\n/**\n * Adds css classes on the body element.\n */\nfunction setClassesOnBody(tourName: string, add: boolean): void {\n ['help-tour', tourName].compact().forEach((className) => toggleClassOnBody(className, add));\n}\n\n/**\n * Makes sure that the steps are correct and sets any necessary data that might not have been set.\n */\nfunction processSteps(this: HelpTourService, stepsIn: Step[]): Step[] {\n const stepsCount = stepsIn.length;\n\n stepsIn.forEach((step, index) => {\n const model = step.model,\n buttons = (model.buttons as Record) || {},\n isLastStep = index === stepsCount - 1,\n isFirstStep = !index,\n processedButtons = [ACTION_PREVIOUS, ACTION_NEXT]\n .map((key: string) => {\n const buttonData = buttons[key] || {},\n { text, action, show } = buttonData;\n\n // Do not generate button content if it was defined not to be shown.\n // Have to check explicitly for false because show property does not need to be defined.\n if (show === false) {\n return undefined;\n }\n\n buttonData.text = text || this.intl.tc(this, `buttons.${key}`);\n\n // Action name is either:\n // - Passed in action.\n // - Finish, if this is the last step and the button is the next button.\n // - No action if this is the first step and the button is previous button.\n // - Respective to button name.\n let actionName = action;\n\n if (!actionName) {\n if (isLastStep && key === ACTION_NEXT) {\n actionName = ACTION_FINISH;\n } else if (isFirstStep && key === ACTION_PREVIOUS) {\n actionName = undefined;\n } else {\n actionName = key;\n }\n }\n\n // If there is no action, we cannot have a button.\n if (!actionName) {\n return undefined;\n }\n\n // Convert actionName to a method on the service.\n buttonData.fn = getButtonFunction.call(this, actionName).bind(this);\n buttonData.isPrimary = key === ACTION_NEXT;\n\n return buttonData;\n })\n .compact();\n\n set(model, 'buttons', processedButtons);\n });\n\n return stepsIn;\n}\n\n/**\n * Stops the currently running tour and cleans up data.\n */\nasync function stopTour(this: HelpTourService, isCompleted = true): Promise {\n removeResizeListener.call(this);\n\n await closeCurrentStep.call(this, undefined, isCompleted);\n\n const { notificationManager, tour } = this;\n\n // If there was a tour running, then clean stuff up.\n if (tour) {\n const { name, afterEnd } = tour;\n\n // Clear the tour.\n setProperties(this, {\n tour: undefined,\n currentStep: undefined\n });\n\n // Remove classes from body.\n setClassesOnBody(name, false);\n\n // Execute whatever the tour defined to be executed after the tour has ended.\n await afterEnd();\n }\n\n notificationManager.showNotifications();\n notificationManager.unMute();\n\n return Promise.resolve();\n}\n\n/**\n * Closes the current tour step and cleans up.\n */\nasync function closeCurrentStep(this: HelpTourService, nextStep?: Step, doOnAfterClose = true) {\n const { currentStep, helpTourComponent } = this;\n\n if (helpTourComponent) {\n await helpTourComponent.closeCurrentStep(nextStep);\n }\n\n return doOnAfterClose && currentStep?.onAfterClose();\n}\n\n/**\n * Progress the tour to the next step.\n */\nasync function moveToNextStep(this: HelpTourService, direction: number, doOnAfterClose = true): Promise {\n const { currentStep, tour, helpTourComponent } = this;\n\n if (!tour?.steps || !helpTourComponent) {\n return Promise.reject();\n }\n\n const steps = tour.steps,\n currentStepIndex = currentStep ? steps.indexOf(currentStep) : -1,\n newStep = steps.objectAt(currentStepIndex + direction);\n\n if (!newStep) {\n const index = currentStepIndex + direction;\n\n // If we went pass the end of the tour, then just finish it.\n if (index >= steps.length) {\n return this.finish();\n }\n\n // If we go past the beginning then restart the tour.\n if (index < 0) {\n return this.start(tour);\n }\n\n return Promise.reject();\n }\n\n // Make sure current step gets properly closed.\n await closeCurrentStep.call(this, newStep, doOnAfterClose);\n\n // Check if the current step is available.\n const isStepAvailable = await newStep.isStepAvailable();\n\n if (!isStepAvailable) {\n if (direction === 0) {\n // Go to the next step.\n direction = 1;\n } else if (direction > 0) {\n direction++;\n } else {\n direction--;\n }\n\n return moveToNextStep.call(this, direction, doOnAfterClose);\n }\n\n // Make sure that whatever needs to be done before step starts gets done.\n await newStep.onBeforeOpen();\n\n // Make the new step be the current one.\n this.set('currentStep', newStep);\n\n // Open the current step.\n return helpTourComponent.showStep(newStep);\n}\n\n/**\n * Creates handler for browser screen resize.\n */\nfunction setupResizeListener(this: HelpTourService): void {\n if (this.resizeListenerId) {\n return;\n }\n\n const fnResizeListener = async () => {\n await closeCurrentStep.call(this, this.currentStep);\n\n // Do not copy this deprecated usage. If you see this, please fix debounceTask\n // eslint-disable-next-line ember/no-runloop\n debounce(this, moveToNextStep, 0, undefined, 500);\n };\n\n this.resizeListenerId = this.dom.addListener(this, window, 'resize', fnResizeListener);\n}\n\n/**\n * Removes handler for browser screen resize.\n */\nfunction removeResizeListener(this: HelpTourService): void {\n if (!this.resizeListenerId) {\n return;\n }\n\n this.dom.removeListener(this, this.resizeListenerId);\n\n this.resizeListenerId = undefined;\n}\n\n/**\n * Service for managing help tours on the site.\n */\nexport default class HelpTourService extends Service {\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare dom: DomService;\n @service declare media: ADCResponsiveMediaService;\n\n /**\n * List of steps that the tour can go through.\n */\n steps?: Step[];\n\n /**\n * Step that the tour is currently on.\n */\n currentStep?: Step;\n\n /**\n * The help tour.\n */\n tour?: Tour;\n\n /**\n * The help tour component.\n */\n helpTourComponent?: HelpTourComponent;\n\n /**\n * The resize event listener id.\n */\n resizeListenerId?: string;\n\n /**\n * Is a tour currently running?\n */\n @bool('currentStep')\n declare isRunning: boolean;\n\n /**\n * Sets reference to the help tour component.\n */\n setHelpTourComponent(helpTourComponent: HelpTourComponent): void {\n set(this, 'helpTourComponent', helpTourComponent);\n }\n\n /**\n * Starts the tour.\n */\n async start(tour: Tour): Promise {\n const { steps, name, beforeStart } = tour;\n\n if (isEmpty(steps)) {\n console.error('No steps defined for help tour');\n return;\n }\n\n await this.stop();\n\n const notificationManager = this.notificationManager;\n\n notificationManager.hideNotifications();\n notificationManager.mute();\n\n set(tour, 'steps', processSteps.call(this, steps));\n\n setProperties(this, {\n tour,\n currentStep: undefined\n });\n\n await beforeStart();\n\n setClassesOnBody(name, true);\n\n setupResizeListener.call(this);\n\n this.goToNextStep();\n }\n\n /**\n * Moves the tour to the next step in the list.\n */\n goToPreviousStep(): Promise {\n return Promise.resolve(moveToNextStep.call(this, -1, false));\n }\n\n /**\n * Returns the tour to the previous step.\n */\n goToNextStep(): Promise {\n return Promise.resolve(moveToNextStep.call(this, 1));\n }\n\n /**\n * Finishes the tour when the user goes through it all.\n */\n finish(): Promise {\n return Promise.resolve(stopTour.call(this));\n }\n\n /**\n * Stops the tour.\n */\n @action stop(): Promise {\n return Promise.resolve(stopTour.call(this, false));\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport {\n addWeakTrapFocusListener,\n removeTrapFocusListener,\n getFocusableElements,\n isEnterOrSpaceCode\n} from '@adc/ember-utils/utils/a11y';\nimport Service from '@ember/service';\n\n/**\n * @classdesc\n * A service for homepage.\n */\nexport default class HomePageManager extends Service {\n /**\n * Current element\n */\n element?: HTMLElement;\n\n /**\n * Id for the trap listener event\n */\n @tracked trapFocusListenerId?: string;\n\n /**\n * Id for the active card (when Enter or Space is pressed on a card)\n */\n @tracked activeCardId?: string;\n\n /**\n * Id for the active card (when Enter or Space is pressed on a card)\n */\n setActiveCardId(id?: string): void {\n this.activeCardId = id;\n }\n\n /**\n * Check if current card is the active card and return tabindex for card's elements\n */\n getElementTabIndex(currentElement: HTMLElement): number {\n return (currentElement.closest('.card')?.id ?? 'none') === this.activeCardId ? 0 : -1;\n }\n\n /**\n * Trap focus in homepage cards\n *\n */\n trapFocusInHomepageCard(): void {\n const newListenerId = addWeakTrapFocusListener(this, {\n scopeSelector: `#${this.activeCardId}`,\n escapeCallback: () => {\n this.element?.focus();\n },\n treatArrowsAsTabEvents: false,\n oldListenerId: this.trapFocusListenerId ?? ''\n });\n\n this.trapFocusListenerId = newListenerId;\n }\n\n /**\n * Destroy trap focus for homepage cards\n *\n */\n removeTrapFocusListener(): void {\n removeTrapFocusListener(this.trapFocusListenerId ?? '');\n }\n\n /**\n * Focus first focusable element from homepage card.\n */\n focusFirstElement(e: KeyboardEvent): void {\n if (isEnterOrSpaceCode(e.key)) {\n e.preventDefault();\n\n const [firstElement] = getFocusableElements(e.target as Element);\n (firstElement as HTMLElement)?.focus();\n }\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    \\n

    {{t \\'components.modals.app.inactivity-warning.sessionExpiresIn\\'}}

    \\n\\n

    \\n {{this.timeToShow}}\\n

    \\n\\n

    \\n {{t \\'components.modals.app.inactivity-warning.instructions\\'\\n continue=(t \\'generic.continue\\')\\n logout=(t \\'generic.logout\\')\\n }}\\n

    \\n
    \\n\",{ moduleName: \"customer-site/components/modals/app/inactivity-warning/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { timeout, task } from 'ember-concurrency';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type UserActivityService from 'customer-site/services/user-activity';\n\ninterface InactivityWarningArgs {\n model: {\n disableBackdropClose: boolean;\n };\n}\n\n/**\n * Get the interval before updating the displayed time again\n *\n * @private\n */\nfunction getIntervalDuration(timeToLogout: number) {\n // Update every second if this is the last 15 seconds,\n // Or if the remainder is not divisible by 15\n if (timeToLogout <= 15 || timeToLogout % 15 !== 0) {\n return 1;\n }\n\n // Just plain 15 seconds\n return 15;\n}\n\n/**\n * @classdesc\n * Modal for session timeout, allows user to refresh session or logout\n */\nexport default class InactivityWarning extends Component {\n @service declare intl: ADCIntlService;\n @service declare userActivity: UserActivityService;\n @service declare modals: ModalService;\n\n /**\n * Time until logout in seconds\n */\n @tracked timeToLogout: number;\n\n constructor(owner: unknown, args: InactivityWarningArgs) {\n super(owner, args);\n\n // Set the initial time to logout and start countdown timer.\n const interval = getIntervalDuration((this.timeToLogout = this.userActivity.getInactivityWarningDuration()));\n this.updateRemainingTime.perform(interval, interval * 1000);\n }\n\n /**\n * Update time until logout\n */\n updateRemainingTime = task(async (intervalSeconds: number, delayTime: number) => {\n await timeout(delayTime);\n\n // Calculate new time and cache it.\n const timeToLogout = (this.timeToLogout = Math.max(this.timeToLogout - intervalSeconds, 0));\n\n // Is timer down to zero?\n if (timeToLogout === 0) {\n // No more need to update.\n return;\n }\n\n // Use 15s interval up to 15s, then 1s\n const newInterval = getIntervalDuration(timeToLogout);\n\n // Restart timer.\n this.updateRemainingTime.perform(newInterval, newInterval * 1000);\n });\n\n /**\n * Time to render to the modal body\n */\n @computed('timeToLogout')\n get timeToShow(): string {\n const time = this.timeToLogout;\n\n let key = 'seconds',\n num = time % 60;\n\n if (time >= 60) {\n key = 'minutes';\n num = Math.round(time / 60);\n }\n\n return this.intl.t(`generic.${key}`, { num });\n }\n\n @action logout(): void {\n this.userActivity.logout(true);\n }\n\n @action continue(): void {\n this.userActivity.clearInactiveStatus();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::App::InactivityWarning': typeof InactivityWarning;\n }\n}\n","import Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport {\n processValidationErrorsFromResponse,\n clearValidationErrors\n} from '@adc/ajax/utils/validation-error-processing';\n\n/**\n * @classdesc\n * Component for handling the update password process.\n */\nexport default class BaseInitialSetupStepComponent extends Component {\n @service intl;\n @service notificationManager;\n @service contextManager;\n\n async submitStep(fnRequest, btnAnimation, msgSuccess) {\n clearValidationErrors.call(this);\n\n btnAnimation.then((isSuccess) => {\n if (isSuccess) {\n if (msgSuccess) {\n this.notificationManager.addSuccess(msgSuccess);\n }\n\n this.goToNextStep();\n }\n });\n\n try {\n await fnRequest();\n } catch (ex) {\n processValidationErrorsFromResponse.call(this, ex);\n throw ex;\n }\n\n // Return false to prevent modal close.\n return false;\n }\n\n goToNextStep() {\n this.updateModalProp('isLoading', true);\n this.args.continueToNextStep();\n }\n\n updateModalProp(k, v) {\n this.args.updateModalProps({\n [k]: v\n });\n }\n\n getInitialSetupImagePath(imageName) {\n return this.contextManager.getStaticResourcePath(`images/initial-setup/${imageName}`);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    {{this.agreement.headerText}}
    \\n\\n
    \\n \\n \\n \\n
    \\n\\n

    {{safe-html this.agreement.text}}

    \\n\\n {{tc this \\'downloadAgreement\\'}}\\n\\n
    {{this.agreement.footerText}}
    \\n\\n {{#if this.agreement.additionalCheckboxText}}\\n \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/agreements/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { set, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Initial-setup step for agreements.\n */\n@intlPath({ path: 'modals/initial-setup/agreements' })\nexport default class AgreementsStep extends BaseStepComponent {\n @service locale;\n @service modals;\n @service store;\n @service contextManager;\n\n @tracked agreement;\n\n @tracked additionalCheckboxValue = true;\n\n @action initStep() {\n this.updateModalProp('hasLogoutButton', true);\n this.getNextMissingAgreement.perform();\n }\n\n @action updateModal() {\n const { intl, agreement } = this;\n\n this.args.updateModalProps({\n currentTitle: agreement.name,\n buttons: [\n getModalFooterButton(agreement.disagreeButtonText, () => {\n const isDeclinable = agreement.isDeclinable;\n\n this.modals.showConfirmationDialog(\n agreement.name,\n agreement.warningModalMessage,\n {\n text: isDeclinable ? agreement.disagreeButtonText : intl.t('generic.logout'),\n css: 'btn-color-danger',\n action: async () => {\n if (isDeclinable) {\n await agreement.declineAgreement();\n this.getNextMissingAgreement.perform();\n return true;\n }\n\n this.contextManager.logout(false);\n }\n },\n {\n text: intl.t('generic.back')\n }\n );\n\n return false;\n }),\n\n getModalFooterButton(\n agreement.agreeButtonText,\n async (btnAnimation) => {\n // Set up code to run once the button finishes animating.\n btnAnimation.then((isSuccess) => {\n if (isSuccess) {\n this.getNextMissingAgreement.perform();\n }\n });\n\n // Agree to the agreement and return the promise so the button knows when to animate.\n await agreement.agreeToAgreement(this.additionalCheckboxValue);\n return false;\n },\n 'btn-color-primary'\n )\n ]\n });\n }\n\n /**\n * Attempts to get the next missing agreement from the server. If it receives null, it completes the step.\n */\n @dropTask()\n *getNextMissingAgreement() {\n this.updateModalProp('isLoading', true);\n\n const agreement = yield this.store.findRecord('agreements/agreement', this.args.identityModel.id);\n\n // Is there no agreement data returned from the API call? NOTE: The check for agreement type is\n // just a safe guard. The API call returns a null value for agreement if there are no more agreements.\n if (!agreement?.type) {\n this.goToNextStep();\n return;\n }\n\n this.agreement = agreement;\n this.updateModalProp('isLoading', false);\n return agreement;\n }\n\n /**\n * Changes the culture to the newly selected language.\n */\n @action\n async languageChanged(newLanguage) {\n const profile = await this.args.identityModel.profile,\n locales = await profile.availableLocales;\n\n set(profile, 'locale', locales.findBy('id', newLanguage));\n await profile.save();\n\n this.locale.refreshCulture();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if this.shouldShowMobileView}}\\n \\n
    \\n {{tc this \\'headlineMobile\\'}}\\n
    \\n
      \\n
    1. {{tc this \\'mobileDirectionsStep1\\'}}
    2. \\n
    3. {{tc this \\'directionsStep2\\'}}
    4. \\n
    \\n \\n {{else}}\\n
    \\n {{tc this \\'headlineDesktop\\'}}\\n
    \\n

    {{tc this \\'directionsHeadlineDesktop\\'}}

    \\n
      \\n
    1. {{tc this \\'desktopDirectionsStep1\\'}}
    2. \\n
    3. {{tc this \\'desktopDirectionsStep2\\' mobileAppBrand=this.contextManager.identityModel.mobileAppBrand}}
    4. \\n
    5. {{tc this \\'desktopDirectionsStep3\\'}}
    6. \\n
    7. {{tc this \\'desktopDirectionsStep4\\'}}
    8. \\n
    \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/ambient-download-app/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { AppDownload } from '../../../../enums/CustomerPageUrl';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Initial Setup Step for Ambient care receivers who have not completed onboarding.\n */\n@intlPath({ path: 'modals/initial-setup/ambient-download-app' })\nexport default class AmbientDownloadApp extends BaseStepComponent {\n @service intl;\n @service contextManager;\n\n @action initStep() {\n this.args.updateModalProps({\n currentTitle: this.intl.tc(this, 'title'),\n hasLogoutButton: true,\n isLoading: false\n });\n }\n\n /**\n * Sends the user to the appropriate app download location based on their device context.\n */\n @action\n downloadAppRedirect() {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n window.open(this.contextManager.getRouteItem(AppDownload)?.url);\n }\n\n /**\n * Returns true if currently in a mobile browser.\n *\n * @type {boolean}\n */\n get shouldShowMobileView() {\n return this.args.isMobileBrowserManuallySet ?? isMobileBrowser();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#each this.billingInformation.errorMessages as |error|}}\\n \\n {{/each}}\\n\\n \\n
    \\n \\n\\n \\n
    \\n\\n \\n\\n \\n\\n \\n\\n
    \\n \\n\\n \\n
    \\n
    \\n\\n \\n {{#if this.billingInformation.isCreditCardNeeded}}\\n\\n \\n\\n \\n\\n
    \\n \\n\\n \\n
    \\n\\n {{else}}\\n\\n
    \\n \\n \\n
    \\n\\n {{/if}}\\n
    \\n\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/dtc-billing-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\nfunction getItems(data) {\n return Object.entries(data).map(([name, value]) => DropdownSelectItem.create({ name, value }));\n}\n\n/**\n * @classdesc\n * Initial-setup step for billing information.\n */\n@intlPath({ path: 'modals/initial-setup/dtc-billing-information' })\nexport default class BillingInformationStep extends BaseStepComponent {\n @service contextManager;\n @service store;\n\n /**\n * The Billing Information model.\n *\n * @type {models.account-information.dtc-billing-information.DTCBillingInformation}\n */\n @tracked billingInformation;\n\n /**\n * List of states for dropdown-select menu.\n *\n * @type {DropdownSelectItem[]}\n */\n get states() {\n return getItems(this.billingInformation?.availableStates ?? {});\n }\n\n /**\n * List of states for dropdown-select menu.\n *\n * @type {DropdownSelectItem[]}\n */\n get creditCardTypes() {\n return getItems(this.billingInformation?.availableCreditCardTypes ?? {});\n }\n\n @action async initStep() {\n const { intl } = this;\n\n this.args.updateModalProps({\n currentTitle: intl.tc(this, 'title'),\n hasLogoutButton: true,\n isLoading: true,\n buttons: [\n getModalFooterButton(\n intl.t('generic.confirm'),\n async (btnAnimation) => {\n // Set up code to run once the button finishes animating.\n btnAnimation.then((isSuccess) => {\n if (isSuccess) {\n this.goToNextStep();\n }\n });\n\n // Clear error notifications.\n this.notificationManager.clearNotifications();\n\n // Save billing information. Return the promise so the button knows when to animate.\n await this.billingInformation?.save();\n return false;\n },\n 'btn-color-primary'\n )\n ]\n });\n\n this.billingInformation = await this.store.findRecord(\n 'settings/account-management/account-information/dtc-billing-information/dtc-billing-information',\n parseInt(this.contextManager.getSelectedSystemId(), 10)\n );\n\n this.updateModalProp('isLoading', false);\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    {{tc this \\'emailVerificationHeader\\'}}
    \\n\\n {{tc\\n\\n \\n \\n \\n\\n
    {{tc this \\'emailVerificationFooter\\'}}
    \\n\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/email-verification/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport {\n processValidationErrorsFromResponse,\n clearValidationErrors\n} from '@adc/ajax/utils/validation-error-processing';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport BaseStepComponent from '../base-step';\n\n/**\n * @classdesc\n * Initial-setup step for email verification.\n */\n@intlPath({ path: 'modals/initial-setup/email-verification' })\nexport default class EmailVerificationStep extends BaseStepComponent {\n /**\n * The path to the email-verification image to use in the modal.\n *\n * @type {string}\n */\n get imageSource() {\n return this.getInitialSetupImagePath('email-verification.png');\n }\n\n @tracked model;\n\n /**\n * The primary email address that needs verification.\n *\n * @type {string}\n */\n @alias('model.primaryEmailAddress')\n primaryEmailAddress;\n\n /**\n * The initial primary Email Address.\n * We need this variable to check whether we want to send the verification email to the same email address\n * OR a different email address.\n *\n * @type {String}\n */\n initialPrimaryEmailAddress = '';\n\n @action initStep() {\n const { intl } = this,\n { profile } = this.args.identityModel;\n\n Object.assign(this, {\n model: profile,\n initialPrimaryEmailAddress: profile.primaryEmailAddress\n });\n\n this.args.updateModalProps({\n currentTitle: intl.tc(this, 'emailVerificationTitle'),\n hasLogoutButton: true,\n isLoading: false,\n buttons: [\n getModalFooterButton(\n intl.tc(this, 'sendEmail'),\n async (btnAnimation) => {\n clearValidationErrors.call(this);\n\n btnAnimation.then((isSuccess) => {\n if (isSuccess) {\n this.notificationManager.addSuccess(intl.tc(this, 'emailVerificationSent'));\n this.goToNextStep();\n }\n });\n\n try {\n const inputEmail = profile.primaryEmailAddress;\n await profile.save();\n\n if (this.initialPrimaryEmailAddress === inputEmail) {\n // If the initial and the changed primaryEmailAddress are different, then .save() already took care of sending a verification email\n // after updating the primary email address.\n await profile.sendVerificationEmail();\n }\n } catch (ex) {\n processValidationErrorsFromResponse.call(this, ex);\n throw ex;\n }\n\n // Return false to prevent modal close.\n return false;\n },\n 'btn-color-primary'\n )\n ]\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n

    {{this.message.text}}

    \\n\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/messages/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { dropTask } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Initial-setup step for customer messages.\n */\n@intlPath({ path: 'modals/initial-setup/messages' })\nexport default class InitialSetupMessagesStep extends BaseStepComponent {\n @service contextManager;\n\n @tracked message;\n accountInformation;\n\n @action async initStep() {\n this.args.updateModalProps({\n currentTitle: this.intl.tc(this, 'title'),\n hasLogoutButton: true\n });\n\n this.accountInformation = await this.args.identityModel.accountInformation;\n this.getNextMessage.perform();\n }\n\n @action updateModal() {\n const { message } = this;\n\n this.args.updateModalProps({\n isLoading: false,\n buttons: message.canBeCleared\n ? [\n getModalFooterButton(\n this.intl.tc(this, 'clear'),\n async (btnAnimation) => {\n btnAnimation.then((isSuccess) => {\n if (isSuccess) {\n this.getNextMessage.perform();\n }\n });\n\n await this.accountInformation.clearMessage(message.id);\n return false;\n },\n 'btn-color-primary'\n )\n ]\n : []\n });\n }\n\n @dropTask()\n *getNextMessage() {\n this.updateModalProp('isLoading', true);\n\n const { value: message } = yield this.accountInformation.getNextMessage();\n if (!message) {\n this.goToNextStep();\n return;\n }\n message.text = htmlSafe(message.text);\n this.message = message;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n
    \\n\",{ moduleName: \"customer-site/components/modals/initial-setup/news-updates/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Modal that displays the News and Updates page for DTC customers.\n */\n@intlPath({ path: 'modals/initial-setup/news-updates' })\nexport default class NewsUpdatesStep extends BaseStepComponent {\n @action async initStep() {\n this.args.updateModalProps({\n currentTitle: this.intl.tc(this, 'title'),\n isLoading: false,\n buttons: [\n getModalFooterButton(\n this.intl.t('generic.done'),\n async (btnAnimation) => {\n btnAnimation.then(() => this.goToNextStep());\n return false;\n },\n 'btn-color-primary'\n )\n ]\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    {{tc this \\'securityQuestionDescription\\'}}
    \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/security-question/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * Component for handling the security question setup process.\n */\n@intlPath({ path: 'modals/initial-setup/security-question' })\nexport default class SecurityQuestionStep extends BaseStepComponent {\n @tracked model;\n @tracked securityQuestions;\n\n selectedQuestionId;\n answer;\n\n @action async initStep() {\n const profile = await this.args.identityModel.profile,\n response = await profile.getSecurityQuestions();\n\n Object.assign(this, {\n model: profile,\n securityQuestions: Object.entries(response.value ?? {}).map(([value, name]) =>\n DropdownSelectItem.create({\n name,\n value\n })\n )\n });\n\n const { intl } = this;\n\n this.args.updateModalProps({\n isLoading: false,\n hasLogoutButton: true,\n currentTitle: intl.tc(this, 'securityQuestionTitle'),\n buttons: [\n getModalFooterButton(\n intl.t('generic.confirm'),\n (btnAnimation) =>\n this.submitStep(\n () => this.model.setSecurityQuestion(this.selectedQuestionId, this.answer),\n btnAnimation,\n intl.tc(this, 'securityQuestionSuccess')\n ),\n 'btn-color-primary'\n )\n ]\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
    {{tc this \\'updatePasswordDescription\\'}}
    \\n\\n \\n\\n {{#if this.model.profile.canLogoutAllLoginsOnPasswordUpdate}}\\n \\n {{#if (and this.contextManager.isAdcInternalDevDealer this.smartSavedLoginDevices.length)}}\\n \\n {{/if}}\\n {{/if}}\\n\",{ moduleName: \"customer-site/components/modals/initial-setup/update-password/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n// eslint-disable-next-line ember/use-ember-data-rfc-395-imports\nimport DS from 'ember-data';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { intlPath } from '@adc/i18n/path';\nimport { getModalFooterButton } from '@adc/ui-components/components/modals/base/footer/modal-footer';\nimport { SmartTV, VoiceDevice } from '../../../../enums/RecognizedDeviceType';\nimport BaseStepComponent from '../base-step';\n\nimport './_style.scss';\n\nconst { PromiseObject } = DS;\n\n/**\n * AllAware Dealer IDs to use for detecting if redirect needed after reset password\n */\nconst allAwareDIDs = ['23409', '26084'];\n\n/**\n * @classdesc\n * Component for handling the update password process.\n */\n@intlPath({ path: 'modals/initial-setup/update-password' })\nexport default class UpdatePasswordStep extends BaseStepComponent {\n @service ajax;\n @service contextManager;\n @service notificationManager;\n\n @tracked model;\n\n @tracked passwordStrengthData;\n\n /**\n * Should all smart speakers and TV apps that are currently logged in be logged out?\n *\n * @type {boolean}\n */\n @tracked shouldLogOutSmartDevices = false;\n\n /**\n * Should all logins that are currently logged in be logged out?\n *\n * @type {boolean}\n */\n @tracked shouldLogOutAllDevices = false;\n\n @action async initStep() {\n const profile = await this.args.identityModel.profile,\n devices = await this.ajax.apiRequest('api/engines/recognizedDevices/recognizedDevices').catch(() => {});\n\n this.model = { profile, devices };\n\n const { intl } = this;\n\n this.args.updateModalProps({\n isLoading: false,\n hasLogoutButton: true,\n currentTitle: intl.tc(this, 'updatePassword'),\n buttons: [\n getModalFooterButton(\n intl.t('generic.save'),\n (btnAnimation) =>\n this.submitStep(\n async () => {\n await this.model.profile.updatePassword(\n this.newPassword,\n this.confirmationPassword,\n this.shouldLogOutAllDevices,\n this.shouldLogOutSmartDevices,\n null, // This is for the current password field, as initial setup steps don't seem to have it.\n this.logoutDeviceIds\n );\n\n const dealer = await this.contextManager.identityModel.dealer;\n\n // all aware customers should not be logged into the web app\n if (\n allAwareDIDs.includes(dealer.id) &&\n !this.contextManager.identityModel.isMobileApp\n ) {\n location.replace(\n `https://${location.hostname}/web/deep-redirect/GenericRedirect?TargetURL=https://www.allaware.com/pages/download-the-all-aware-app`\n );\n }\n },\n btnAnimation,\n intl.tc(this, 'updatePasswordSuccess')\n ),\n 'btn-color-primary'\n )\n ]\n });\n }\n\n /**\n * Returns devices w/ saved logins from the devices list.\n *\n * @returns {models.devices.RecognizedDeviceModel[]}\n */\n get savedLoginDevices() {\n return this.model?.devices?.data?.filterBy('attributes.isSavedLogin') ?? [];\n }\n\n /**\n * Returns smart devices w/ saved logins from the\n * savedLoginDevices list.\n *\n * @returns {models.devices.RecognizedDeviceModel[]}\n */\n get smartSavedLoginDevices() {\n return (\n this.savedLoginDevices?.filter((device) => [SmartTV, VoiceDevice].includes(device.attributes.deviceType)) ??\n []\n );\n }\n\n /**\n * Returns array of device ids that we want to delete\n * saved login tokens for on the backend.\n *\n * @returns {string[]}\n */\n get logoutDeviceIds() {\n if (!this.shouldLogOutAllDevices) {\n return [];\n }\n\n if (!this.shouldLogOutSmartDevices) {\n return this.savedLoginDevices\n .filter((device) => ![SmartTV, VoiceDevice].includes(device.attributes.deviceType))\n .mapBy('id');\n }\n\n return this.savedLoginDevices.mapBy('id');\n }\n\n @action getPasswordStrength(password) {\n if (password === '') {\n this.passwordStrengthData = '';\n return;\n }\n\n this.passwordStrengthData = PromiseObject.create({\n promise: (async () => {\n try {\n const passwordStrength = await this.ajax.apiRequestForValue(\n 'passwordStrength/getPasswordStrength',\n null,\n { password },\n POST\n );\n return passwordStrength;\n } catch (e) {\n return undefined;\n }\n })()\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n <:header as |DialogHeader|>\\n \\n {{#if this.hasLogoutButton}}\\n \\n {{/if}}\\n \\n \\n\\n <:default>\\n
    \\n {{#if this.isLoading}}\\n \\n {{/if}}\\n\\n {{#if this.visibleComponent}}\\n \\n {{/if}}\\n
    \\n \\n\\n <:footer as |DialogFooter|>\\n {{#if this.buttons}}\\n \\n {{/if}}\\n \\n \\n
    \\n\",{ moduleName: \"customer-site/components/modals/initial-setup/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport MissingAgreementsModal from 'customer-site/components/modals/initial-setup/agreements';\nimport AmbientDownloadAppModal from 'customer-site/components/modals/initial-setup/ambient-download-app';\nimport BillingInformationModal from 'customer-site/components/modals/initial-setup/dtc-billing-information';\nimport EmailVerificationModal from 'customer-site/components/modals/initial-setup/email-verification';\nimport CustomerMessagesModal from 'customer-site/components/modals/initial-setup/messages';\nimport NewsUpdatesModal from 'customer-site/components/modals/initial-setup/news-updates';\nimport SecurityQuestionModal from 'customer-site/components/modals/initial-setup/security-question';\nimport UpdatePasswordModal from 'customer-site/components/modals/initial-setup/update-password';\nimport {\n SecurityQuestionSetup,\n UpdatePassword,\n MissingAgreements,\n EmailVerification,\n BillingInformation,\n CustomerMessages,\n NewsUpdates,\n AmbientDownloadApp\n} from '../../../enums/InitialSetupStep';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n * The initial-setup modal component that guides the user through required steps before they can access the site.\n */\nexport default class InitialSetupModal extends Component {\n @service contextManager;\n @service identityManager;\n @service store;\n\n /**\n * An alias to the identity model that is passed in from the initial-setup route.\n *\n * @type {models.Identity}\n */\n @reads('args.model.identity')\n identityModel;\n\n /**\n * The initial-setup steps that need to be displayed.\n *\n * @type {number[]}\n */\n @reads('identityModel.initialSetupSteps')\n initialSetupSteps;\n\n /**\n * Determines the initial-setup step that is currently displayed. Corresponds to the initial-setup step enum on the server.\n *\n * @type {number}\n */\n @tracked currentStep;\n\n /**\n * The title to use for the current step.\n *\n * @type {string}\n */\n @tracked currentTitle = '';\n\n /**\n * The buttons to use in the modal footer.\n *\n * @type Array\n */\n @tracked buttons = [];\n\n /**\n * Determines if the loading bar should be displayed indicating that the step's content is loading.\n *\n * @type {boolean}\n */\n @tracked isLoading = true;\n\n @tracked hasLogoutButton = false;\n\n updateCurrentStep(step) {\n if (step !== this.currentStep) {\n Object.assign(this, {\n isLoading: true,\n currentStep: step\n });\n }\n }\n\n /**\n * Determines which content is visible in the modal based on the current step.\n *\n * @type {Component | undefined}\n */\n get visibleComponent() {\n const componentForStep =\n {\n [SecurityQuestionSetup]: SecurityQuestionModal,\n [UpdatePassword]: UpdatePasswordModal,\n [EmailVerification]: EmailVerificationModal,\n [MissingAgreements]: MissingAgreementsModal,\n [BillingInformation]: BillingInformationModal,\n [CustomerMessages]: CustomerMessagesModal,\n [NewsUpdates]: NewsUpdatesModal,\n [AmbientDownloadApp]: AmbientDownloadAppModal\n }[this.currentStep] ?? undefined;\n\n return componentForStep;\n }\n\n @action initModal() {\n this.updateCurrentStep(this.args.model.identity.initialSetupSteps.firstObject);\n }\n\n /**\n * Log out the logged in user.\n */\n @action logout() {\n this.contextManager.logout();\n }\n\n @action updateModalProps(props) {\n Object.assign(this, props);\n }\n\n /**\n * Displays the next initial-setup step, or completes the process if there are no more steps.\n */\n @action continueToNextStep() {\n const { initialSetupSteps } = this,\n currentIndex = initialSetupSteps.indexOf(this.currentStep);\n\n // Is there another step?\n if (currentIndex > -1 && currentIndex < initialSetupSteps.length - 1) {\n this.updateCurrentStep(initialSetupSteps[currentIndex + 1]);\n return;\n }\n\n this.identityManager.initialSetupCompleted();\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action, computed } from '@ember/object';\nimport { notEmpty, equal, bool, or, reads, alias } from '@ember/object/computed';\nimport { later, once } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { isEmpty } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport { dealerBrands } from 'customer-site/assets/dealer-branding';\nimport InactivityWarning from 'customer-site/components/modals/app/inactivity-warning/index';\nimport InitialSetupModal from 'customer-site/components/modals/initial-setup/index';\nimport ENV from 'customer-site/config/environment';\nimport config from 'customer-site/config/environment';\nimport { IsLoginAsLoginRep } from 'customer-site/enums/LoginFlag';\nimport { unwrapRouteItems } from 'customer-site/models/navigation/route-item';\nimport { WebsocketHandlers } from 'customer-site/websockets/handlers';\nimport { initializePendoMetrics } from '@adc/app-infrastructure/utils/pendo';\nimport { EmberUpcomingAppointments } from '../enums/CustomerPageUrl';\nimport { addFullstoryTrackingScript } from '../utils/point-central';\n\nimport type { RouteData } from '@adc/app-infrastructure/services/context-manager';\nimport type ProfileModel from '@adc/login-setup-addon/models/profile/profile';\nimport type { AddNotificationMethodType } from '@adc/ui-components/services/notification-manager';\nimport type { EmberRunTimer } from '@ember/runloop/types';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type IdentityModel from 'customer-site/models/identity';\nimport type PointCentralIdentity from 'customer-site/models/point-central-identity';\nimport type System from 'customer-site/models/systems/system';\nimport type PageFeature from 'customer-site/models/visual-verification/page-feature';\nimport type { TaskInstance } from 'ember-concurrency';\n\n/**\n * We simply require a class with a selectSystemOrGroup method to process a context switch.\n */\ntype ContextSwitchItem = { selectSystemOrGroup: () => Promise };\n\nexport default class IdentityManager extends Service {\n @service declare accessibility: ServiceRegistry['accessibility'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare errorReporting: ServiceRegistry['error-reporting'];\n @service declare locale: ServiceRegistry['locale'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare router: ServiceRegistry['router'];\n @service declare store: ServiceRegistry['store'];\n @service declare troubleConditions: ServiceRegistry['trouble-conditions'];\n @service declare userActivity: ServiceRegistry['user-activity'];\n @service declare visualVerification: ServiceRegistry['visual-verification'];\n @service declare websocket: ServiceRegistry['websocket'];\n @service declare performanceMonitor: ServiceRegistry['performance-monitor'];\n @service declare metrics: MetricsService;\n\n @tracked identityModel?: IdentityModel;\n\n @tracked pointCentralIdentity?: PointCentralIdentity;\n\n @tracked intialSetupInProgress = false;\n\n /**\n * Processes switching of the context to another system or group.\n * */\n processContextSwitchTask = task(\n { restartable: true },\n async (systemItem: ContextSwitchItem): Promise => {\n const { routeId: currentRouteId } = this.contextManager?.currentRouteData?.routeItem ?? {};\n\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n\n // Mark the context switch as initialized.\n this.performanceMonitor.markContextSwitchInitialized(this.getContextId());\n\n // Ask the model to switch the context.\n const promise = systemItem.selectSystemOrGroup();\n\n this.deactivateApplication();\n\n // Show the screen as inactive while things are switching.\n this.isLoading = true;\n\n await timeout(0);\n\n this.notificationManager.clearNotifications();\n\n try {\n await promise;\n } catch (e) {\n await this.refreshApplication(true);\n return;\n }\n const { identityModel, store } = this,\n id = identityModel?.id;\n\n await timeout(0);\n\n // Ensure that data will be requested again.\n // recordArrayManager is a private field so we must use get so TS does nto complain\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.keys(store.recordArrayManager._liveRecordArrays)\n .filter((modelName) => !['identity', 'navigation/route-item'].includes(modelName))\n .forEach((type) => {\n store.unloadAll(type);\n });\n\n try {\n await identityModel?.reload();\n if (id) {\n await store.findRecord('profile/profile', id);\n this.pointCentralIdentity?.reload();\n }\n\n this.unloadUnusedRouteItems(identityModel);\n\n await this.setupApplication(identityModel);\n\n // Just redirect to index route.\n await this.contextManager.resetToIndex();\n\n this.activateApplication();\n\n this.stayOnCurrentPageAfterContextSwitch(identityModel, currentRouteId);\n\n this.performanceMonitor.markContextSwitchResolved(this.getContextId());\n } catch (exception) {\n // Refresh the page.\n this.refreshApplication();\n }\n }\n );\n\n initializeApplicationData = task(\n async (): Promise<{\n identity: IdentityModel;\n profile: ProfileModel;\n arpFeatures: PageFeature | Record;\n }> => {\n const identityList = await this.store.findAll('identity'),\n // Note: We get the first object because the server sends down a list for each\n // of these since we don't know the ID of the model when making the request.\n identity = identityList.map((i) => i)[0];\n\n assert('Identity must be defined.', identity);\n\n if (identity.isPointCentral || identity.isPointCentralAccessControl) {\n // Initalize PointCentral Identity.\n this.pointCentralIdentity = await this.store.findRecord('point-central-identity', identity.id);\n\n addFullstoryTrackingScript(identity.id, this.pointCentralIdentity.fullStoryConfig);\n }\n\n // If on Visual Verification Flagging, check if we should show the side menu on this page.\n let arpFeatures: PageFeature | undefined;\n if (identity.isVisualVerification) {\n arpFeatures = (await this.store.findAll('visual-verification/page-feature')).map((f) => f)[0];\n if (arpFeatures) {\n await this.visualVerification.loadSession(arpFeatures.enableCDQL);\n }\n }\n\n // Attempt to start websocket service for real time updates. We don't want to run it during all tests since an endpoint won't exist\n if (!this.envSettings.isTestEnvironment()) {\n await this.websocket.start(WebsocketHandlers);\n }\n return {\n arpFeatures: arpFeatures ?? {},\n identity,\n profile: identity?.profile\n };\n }\n );\n\n /**\n * Sets up application after identity model has be (re)loaded.\n */\n setupApplicationTask = task(async (identityModel: IdentityModel): Promise => {\n this.identityModel = identityModel;\n const { locale, userActivity, errorReporting } = this,\n profile = identityModel.profile,\n { postLoginRedirect, pendoConfiguration } = identityModel,\n { loginFlags, locale: localeModel } = profile;\n\n // Setup error reporting and cache login as rep status.\n this.isLoginAsLoginRep = loginFlags[IsLoginAsLoginRep];\n errorReporting.initializeForSession(identityModel, localeModel, this.isLoginAsLoginRep);\n\n // There's a potential a new system group or customer was selected, so reinitialize Pendo.\n if (window.pendo && typeof window.pendo.clearSession === 'function') {\n window.pendo.clearSession();\n }\n\n initializePendoMetrics(pendoConfiguration, config, this.metrics);\n\n // Update favIcon.\n const favIcon = document.querySelector('#favicon');\n if (favIcon) {\n (favIcon as HTMLLinkElement).href = identityModel.favIconUrl;\n }\n\n // Overwrites the virtual route navigation functions.\n this.contextManager.setupApplicationContextManager(postLoginRedirect);\n\n // Set colors.\n const [primaryColor, secondaryColor, navColor] = await Promise.all([\n identityModel.primaryColor,\n identityModel.secondaryColor,\n identityModel.navColor\n ]);\n\n this.accessibility.updateDealerColors(primaryColor, navColor ?? primaryColor, secondaryColor ?? primaryColor);\n this.updateDeviceStateColors();\n\n // If on mobile activate display modes based on mobile device settings.\n if (this.isMobileApp && this.isInternalDealer) {\n const displayModeFeatures = identityModel.profile.siteAppearance.supportedDisplayModeFeatures;\n\n this.accessibility.activateDisplayMode(displayModeFeatures);\n }\n\n // Setup user inactivity.\n userActivity.initialize(identityModel.applicationSessionProperties);\n\n // Change application locale.\n try {\n await locale.changeLocale(localeModel);\n } catch (e) {\n // If getting locales failed, we should just log out because things would be very bad.\n this.logout();\n\n return Promise.reject();\n }\n\n // Are there initial-setup steps that need to be presented?\n if (this.isInitialSetupRequired) {\n return Promise.resolve();\n }\n\n // Should the trouble conditions service be initialized?\n if (identityModel.hasTroubleConditionsService) {\n this.troubleConditions.initialize();\n }\n\n if (identityModel.wizard) {\n // Let the index route figure this out.\n this.router.transitionTo('');\n\n return Promise.resolve(true);\n }\n\n // We are not doing setup wizard, check if we should show a notification message for site tour.\n if (!identityModel.hasCompletedOnboarding) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n later(() => {\n this.contextManager.startOnboardingTour();\n }, 250);\n }\n\n await this.checkLegacyErrorManagerMessages();\n\n this.createUpcomingAppointmentNotification();\n\n return Promise.resolve();\n });\n\n refreshApplicationTask = task(async (shouldReloadData = false, shouldRedirectToIndex = false): Promise => {\n if (shouldReloadData) {\n await this.identityModel?.reloadContext();\n }\n\n if (shouldRedirectToIndex) {\n window.location.replace(this.router.rootURL);\n return;\n }\n\n window.location.reload();\n });\n\n /**\n * Redirects away from the initial-setup route after it has been successfully completed.\n */\n initialSetupCompletedTask = task(async (): Promise => {\n const { identityModel } = this;\n\n identityModel?.eachRelationship(async (name, { kind }) => {\n const relationship = kind == 'hasMany' ? identityModel.hasMany(name) : identityModel.belongsTo(name);\n\n if (!relationship.value()) {\n await relationship.reload();\n }\n });\n\n try {\n await identityModel?.reload();\n const doNotRedirect = await this.setupApplication(identityModel);\n if (doNotRedirect === true) {\n return;\n }\n } finally {\n this.intialSetupInProgress = false;\n this.activateApplication();\n }\n return;\n });\n\n checkLegacyErrorManagerMessagesTask = task({ restartable: true }, async () => {\n // Check if there were any messages on the server side and display them.\n (await this.ajax.apiRequest<[{ type: string; text: string }]>('identities/checkErrorManagerMessages')).forEach(\n ({ type, text }) => this.notificationManager.get(camelize(`add-${type}`) as AddNotificationMethodType)(text)\n );\n });\n\n /**\n * Handles switching the context to a new system group with the given id.\n */\n switchToNewGroupTask = task(async (groupIdToSwitchTo: string, destinationRoute: number) => {\n const availableSystemItems = await this.store.findAll('systems/available-system-item'),\n groupItemToSelect = await availableSystemItems.find((item) => item.id === `group-${groupIdToSwitchTo}`);\n await this.switchContext(groupItemToSelect);\n await this.navigation.transitionToRouteId(destinationRoute);\n });\n\n /**\n * Returns the selected system model in a promise optionally reloaded.\n */\n getSelectedSystemTask = task(async (reload: boolean, relationshipsToReload: string[]): Promise => {\n if (!reload) {\n const { identityModel } = this;\n assert(\n '[services/identity-manager] Identity model must be defined before calling the \"getSelectedSystemTask\" method.',\n identityModel\n );\n return identityModel.selectedSystem;\n }\n\n // Cache this so that it does not have to be recalculated\n const store = this.store,\n systemId = this.getSelectedSystemId();\n\n if (!systemId) {\n assert(\n '[services/identity-manager] Identity model must be defined before calling the \"getSelectedSystemTask\" method.',\n systemId\n );\n }\n const system = await store.findRecord('systems/system', systemId);\n\n if (!isEmpty(relationshipsToReload)) {\n system.eachRelationship(\n (name, { kind }) =>\n function () {\n // Check if this relationship is in the collection of relationships to reload\n if (relationshipsToReload.indexOf(name) === -1) {\n return;\n }\n\n const relationship = kind === 'hasMany' ? system.hasMany(name) : system.belongsTo(name);\n\n // If relationship existed, reload it\n if (relationship.value()) {\n relationship.reload();\n }\n }\n );\n }\n return system;\n });\n\n /**\n * Updates the colors of device states to match the dealer's branding.\n */\n @action\n updateDeviceStateColors(): void {\n const { isDarkModeEnabled, isHighContrastModeEnabled } = this;\n const rootStyle = document.documentElement.style,\n dealer = dealerBrands[this.dealerPath ?? 'adc'],\n theme = isHighContrastModeEnabled\n ? isDarkModeEnabled\n ? 'darkHc'\n : 'hc'\n : isDarkModeEnabled\n ? 'dark'\n : 'light';\n\n // The adc dealer has a full default set, so we iterate over that and apply the values from the selected dealer\n for (const key in dealerBrands['adc']) {\n let value = dealer?.[key]?.[theme];\n if (!value) {\n // If there is no value, try the light key, then the adc default.\n // If nothing else is found, skip and use variable default\n value = dealer?.[key]?.['light'] ?? dealerBrands['adc'][key]?.[theme];\n if (!value) {\n continue;\n }\n }\n\n rootStyle.setProperty(`--${key}`, value);\n }\n }\n\n @action\n switchContext(systemItem: ContextSwitchItem): TaskInstance {\n return this.processContextSwitchTask.perform(systemItem);\n }\n\n @action\n switchToNewGroup(groupIdToSwitchTo: string, destinationRoute: number): TaskInstance {\n return this.switchToNewGroupTask.perform(groupIdToSwitchTo, destinationRoute);\n }\n\n /**\n * Refresh application by reloading the page.\n */\n refreshApplication(shouldReloadData = false, shouldRedirectToIndex = false): Promise {\n return this.refreshApplicationTask.perform(shouldReloadData, shouldRedirectToIndex);\n }\n\n /**\n * Sets up application after identity model has be (re)loaded.\n */\n setupApplication(identityModel: IdentityModel | undefined): TaskInstance | void {\n if (identityModel) return this.setupApplicationTask.perform(identityModel);\n return;\n }\n\n /**\n * Displays any messages from legacy error manager.\n */\n checkLegacyErrorManagerMessages(): TaskInstance {\n return this.checkLegacyErrorManagerMessagesTask.perform();\n }\n\n /**\n * Redirects away from the initial-setup route after it has been successfully completed.\n */\n initialSetupCompleted(): TaskInstance {\n this.modals.closeAllModals();\n return this.initialSetupCompletedTask.perform();\n }\n\n /**\n * Unload route items to which we no longer have access from the store.\n */\n private unloadUnusedRouteItems(identityModel: IdentityModel | undefined): void {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This code should be replaced with: `const currentRouteItems = unwrapRouteItems(identityModel?.availableRouteItems);`.\n const currentRouteItems = unwrapRouteItems(identityModel?.availableRouteItems ?? []);\n this.store.peekAll('navigation/route-item').forEach((routeItem) => {\n if (!currentRouteItems.has(routeItem)) {\n routeItem.unloadRecord();\n }\n });\n }\n\n /**\n * Attempts to return to the previous route after a context switch if possible.\n * Will fail if the route is not available in the current context.\n */\n private stayOnCurrentPageAfterContextSwitch(identityModel?: IdentityModel, currentRouteId?: number): void {\n const { stayOnCurrentPageAfterContextSwitch } = identityModel ?? {};\n\n if (\n stayOnCurrentPageAfterContextSwitch &&\n !!currentRouteId &&\n this.store\n .peekAll('navigation/route-item')\n .slice()\n .some((route) => route.routeId === currentRouteId)\n ) {\n this.navigation.transitionToRouteId(currentRouteId);\n }\n }\n\n // region manage Application\n\n /**\n * Sets isInactive property to the desired value.\n */\n setIsInactiveForApplication(isInactive: boolean): void {\n const fnSetIsInactive = (isInactiveParam: boolean): void => {\n this.isInactive = isInactiveParam;\n };\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n once(this, fnSetIsInactive, isInactive);\n }\n\n activateApplication(): void {\n this.setIsInactiveForApplication(false);\n }\n\n deactivateApplication(): void {\n this.setIsInactiveForApplication(true);\n }\n\n /**\n * Launches the initial-setup process.\n */\n launchInitialSetup(): void {\n this.intialSetupInProgress = true;\n this.deactivateApplication();\n\n this.modals.showModal(InitialSetupModal, {\n disableBackdropClose: true,\n identity: this.identityModel\n });\n }\n\n /**\n * Opens inactivity modal.\n */\n triggerInactivityWarning(): void {\n // Let the application know that it is inactive.\n this.deactivateApplication();\n\n // Open modal.\n this.modals.showModal(InactivityWarning, {\n disableBackdropClose: true\n });\n }\n\n /**\n * Create a notification to inform the customer of their upcoming appointment.\n */\n createUpcomingAppointmentNotification(): void {\n const { identityModel } = this;\n if (!identityModel) {\n return;\n }\n\n (async () => {\n const info = await identityModel.upcomingAppointmentInfo;\n if (info) {\n this.notificationManager.addNotification(\n info.notificationText,\n 'info',\n [\n {\n text: info.notificationButtonText,\n action: () => {\n this.navigation.transitionToRouteId(EmberUpcomingAppointments);\n }\n }\n ],\n 0,\n false\n );\n }\n })();\n }\n\n /**\n * Sets the title of the page\n */\n setPageTitle(routeData: RouteData): void {\n const logoName = this.identityModel?.logoName,\n { pageTitle } = routeData || {},\n title = [logoName];\n\n if (!this.isMobileApp && pageTitle) {\n title.unshift(pageTitle);\n }\n\n document.title = title.join(' | ');\n }\n\n setIsLoading(isLoading: boolean): void {\n const fnSetIsLoadingOnce = (isLoadingOnce: boolean): void => {\n this.isLoading = isLoadingOnce;\n };\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n once(this, fnSetIsLoadingOnce, isLoading);\n }\n\n /**\n * Logout logged in user from the current session.\n */\n logout(useReturnUrl = false): void {\n let logoutPage = ENV.logoutPage;\n const path = window.location.pathname;\n\n // Should we NOT skip the return URL and do we have a path?\n if (path && useReturnUrl) {\n // Add full return URL.\n logoutPage += '?ReturnUrl=' + encodeURIComponent(path + window.location.search + window.location.hash);\n\n // If we have a context, try to save it.\n if (this.identityModel?.belongsTo('selectedSystemGroup')?.id()) {\n logoutPage += '&systemGroupId=' + this.getSelectedSystemGroupId();\n } else if (this.identityModel?.belongsTo('selectedSystem')?.id()) {\n logoutPage += '&customer_id=' + this.getSelectedSystemId();\n }\n }\n\n // Redirect to login.\n window.location.replace(logoutPage);\n }\n\n // endregion\n\n //region system information\n\n /**\n * Gets the id of the selected system (customer id).\n */\n getSelectedSystemId(): string {\n const { identityModel } = this;\n assert('Identity model must be defined.', identityModel);\n return identityModel.belongsTo('selectedSystem').id();\n }\n\n /**\n * Gets the id of the selected system group.\n */\n getSelectedSystemGroupId(): string {\n const { identityModel } = this;\n assert('Identity model must be defined.', identityModel);\n return identityModel.belongsTo('selectedSystemGroup').id();\n }\n\n /**\n * Returns either the selected system ID or the selected system group ID.\n */\n getContextId(): string {\n return this.getSelectedSystemId() || this.getSelectedSystemGroupId();\n }\n\n getSelectedSystem(reload = false, relationshipsToReload: string[] = []): Promise {\n return this.getSelectedSystemTask.perform(reload, relationshipsToReload);\n }\n\n /**\n * Indicates this is a Sector dealer.\n */\n @computed('identityModel.dealer.id', 'identityModel')\n get isSectorDealer(): Promise {\n return (async () => {\n const dealer = await this.identityModel?.dealer,\n dealerId = dealer?.id ?? '',\n sectorDealerIds = [\n '20645', // Norway\n '21770', // Sweden\n '21817', // Finland\n '21816', // Ireland\n '22154', // Spain\n '22153', // France\n '22776', // Italy\n '24635', // Portugal\n '24465' // Sandbox\n ];\n\n return sectorDealerIds.includes(dealerId);\n })();\n }\n\n /**\n * Fetches the timezone based off of if we should use the preferred timezone\n */\n getTimezone(): string | undefined {\n return this.showPreferredTimezone ? this.identityModel?.preferredTimezone : this.intl.timeZone;\n }\n\n /**\n * Indicates that times should be displayed in preferred timezone because the context has systems in multiple time zones.\n */\n @computed('identityModel', 'identityModel.selectedSystemGroup')\n get showPreferredTimezone(): boolean | Promise {\n const id = this.getSelectedSystemGroupId();\n if (!id) {\n return false;\n }\n\n return (async () => {\n const systemGroup = await this.store.findRecord('systems/system-group', id);\n return systemGroup.showPreferredTimezone;\n })();\n }\n\n //endregion\n\n /**\n * Indicates the current context is a rep logged in as the user.\n */\n @tracked isLoginAsLoginRep = false;\n\n @tracked isInactive = false;\n @tracked isLoading = false;\n\n @bool('identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * True if the user is an enterprise user.\n */\n @alias('identityModel.isEnterprise')\n declare isEnterprise: boolean;\n\n /**\n * Indicates the user is a PointCentral user.\n */\n @reads('identityModel.isPointCentral')\n declare isPointCentral: boolean;\n\n /**\n * Indicates if this is a PointCentral Access Control integrated account.\n */\n @reads('identityModel.isPointCentralAccessControl')\n declare isPointCentralAccessControl: boolean;\n\n /**\n * Is this system or group 24/7 Managed?\n *\n * @type {boolean}\n */\n @alias('identityModel.isManagedAccessAccount')\n declare isManagedAccessAccount: boolean;\n\n /**\n * Is Dark Mode enabled?\n */\n @alias('identityModel.profile.siteAppearance.isDarkModeEnabled')\n declare isDarkModeEnabled: boolean;\n\n /**\n * Is High Contrast Mode enabled?\n */\n @alias('identityModel.profile.siteAppearance.isHighContrastModeEnabled')\n declare isHighContrastModeEnabled: boolean;\n\n /**\n * Path for dealer specific styles.\n */\n @alias('identityModel.dealerPath')\n declare dealerPath: string;\n\n /**\n * Indicates this is the internal ADC dealer (1115).\n */\n @equal('identityModel.dealer.id', '1115')\n declare isAdcInternalDevDealer: boolean;\n\n /**\n * Indicates this is the ADT Test dealer (794).\n * Necessary for current Linked Devices Functionality.\n */\n @equal('identity.dealer.id', '794')\n declare isAdtTestDealer: boolean;\n\n /**\n * Indicates this is the internal Alarm dealer (1).\n */\n @equal('identityModel.dealer.id', '1')\n declare isAlarmInternalDevDealer: boolean;\n\n /**\n * Are there any remaining setup steps for the login to complete before accessing the site.\n */\n @equal('identityModel.initialSetupSteps.length', 0)\n declare hasFinishedSetupSteps: boolean;\n\n /**\n * Indicates the dealer is internal.\n */\n @or('isAdcInternalDevDealer', 'isAlarmInternalDevDealer')\n declare isInternalDealer: boolean;\n\n @notEmpty('identityModel.initialSetupSteps')\n declare isInitialSetupRequired: boolean;\n\n /**\n * Checks if this is for a rep and if the current url has an external query param, since\n * mobile tech attaches that to urls opened by it.\n */\n isMobileTech(hasExternalQueryParam: boolean): boolean {\n return this.isLoginAsLoginRep && hasExternalQueryParam;\n }\n\n /**\n * Indicates the dealer is an internal release dealer.\n */\n @or('isInternalDealer', 'isAdtTestDealer')\n declare IsInternalReleaseDealer: boolean;\n\n /**\n * Does the user have permission to manage video analytics\n *\n * @type {boolean}\n */\n @alias('identityModel.canManageVideoAnalytics')\n declare canManageVideoAnalytics: boolean;\n\n /**\n * Can the user view Knowledge Base links?\n *\n * @type {boolean}\n */\n @alias('identityModel.canViewKnowledgeBase')\n declare canViewKnowledgeBase: boolean;\n\n /**\n * Is the customer's dealer a CPI dealer?\n *\n * @type {boolean}\n */\n @alias('identityModel.isCpiDealer')\n declare isCpiDealer: boolean;\n}\n","import Service from '@ember/service';\n\n/**\n * @classdesc\n *\n * Handles application flow.\n *\n * @class InstallManager\n * @memberof services\n */\nexport default class InstallManager extends Service {}\n","import ADCIntlService from '@adc/i18n/services/adc-intl';\n\n// This is a JS file to avoid this: https://github.com/typed-ember/ember-cli-typescript/issues/780. Hopefully fixed in Embroider?\n\nexport default class CustomerSiteIntlService extends ADCIntlService {}\n","import { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport Service from '@ember/service';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { addSearchParam } from 'customer-site/utils/url';\nimport { LEGACY_PAGE_ROUTE_NAME } from '@adc/app-infrastructure/routes/utils';\nimport { sentryWithScopeAndWarn } from '@adc/app-infrastructure/utils/sentry';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type RouteItem from 'customer-site/models/navigation/route-item';\nimport type IdentityManager from './identity-manager';\n\ntype TransitionOptions = {\n queryParams: Record;\n};\n\nexport default class NavigationService extends Service {\n @service declare store: Store;\n @service declare router: RouterService;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare identityManager: IdentityManager;\n\n /**\n * Indicates if the user has access to the route with the provided ID.\n */\n userHasAccess(routeId: number): boolean {\n return !!this.getRouteItem(routeId);\n }\n\n /**\n * Returns the store route item matching the specified model ID, or undefined if not found.\n */\n getRouteItemUsingId(id: string): RouteItem | undefined {\n const routes = this.store.peekAll('navigation/route-item');\n return routes.findBy('id', id);\n }\n\n /**\n * Returns the store route item matching the specified routeId, or undefined if not found.\n */\n getRouteItem(routeId: number): RouteItem | undefined {\n const routes = this.store.peekAll('navigation/route-item');\n return routes.findBy('routeId', routeId) ?? this.getRouteItemUsingId(String(routeId));\n }\n\n /**\n * Resolves the route, including the first sub route if applicable.\n */\n resolveRouteItem(routeItem?: RouteItem): RouteItem | undefined {\n if (routeItem?.isNative && isEmpty(routeItem?.url)) {\n return this.resolveRouteItem(routeItem.relationship.subRoutes.firstObject);\n }\n\n return routeItem;\n }\n\n /**\n * Converts a query param object into a search query string and adds to the returned query param object.\n * This method is to replace `searchParams` parameter for the context-manager transition methods.\n */\n addSearchQueryParam(\n searchParams: Record,\n queryParams: Record = {}\n ): Record {\n const s = (queryParams.search as string) ?? '';\n return Object.assign(queryParams, {\n search:\n s +\n (isEmpty(s) ? '?' : '&') +\n Object.entries(searchParams)\n .map((e) => e.join('='))\n .join('&')\n });\n }\n\n /**\n * A simplified route transition method that closely resembles the router service transitionTo, but uses routeId instead of routeName.\n *\n * @see https://api.emberjs.com/ember/3.28/classes/RouterService/methods/transitionTo?anchor=transitionTo\n */\n @action transitionToRouteId(id: number, ...args: any[]): Transition | undefined {\n const routeItem = this.getRouteItem(id);\n assert(\n `[NavigationService::transitionToRouteId] No route item model found for \"${id}\", we should not provide users a way to transition to inaccessible routes.`,\n routeItem\n );\n\n if (!routeItem) {\n sentryWithScopeAndWarn('[NavigationService::transitionToRouteId] Unable to transition to route id.', {\n routeId: id\n });\n this.notificationManager.addWarning(this.intl.t('generic.routeNotAllowed'));\n return;\n }\n\n return this.transitionToRoute(routeItem, ...args);\n }\n\n private getTransitionArgs(routeItem: RouteItem, ...args: any[]): { routeName: string; params: any[] } {\n const targetRoute = this.resolveRouteItem(routeItem);\n assert(`[NavigationService::getTransitionArgs] No route found for \"${routeItem.id}\"`, !!targetRoute);\n\n const { isNative, url } = targetRoute;\n\n let routeName = isNative ? url : LEGACY_PAGE_ROUTE_NAME;\n assert(`[NavigationService::getTransitionArgs] No route name found for \"${targetRoute.id}\"`, !!routeName);\n\n const models = args.slice(),\n possibleOptions = models[models.length - 1];\n\n let options: TransitionOptions | undefined;\n\n if (possibleOptions && Object.prototype.hasOwnProperty.call(possibleOptions, 'queryParams')) {\n options = models.pop() as TransitionOptions;\n }\n\n if (!isNative) {\n options = options ?? {\n queryParams: {}\n };\n\n options.queryParams.url = encodeURIComponent(url);\n }\n\n const [pathname, search] = routeName.split('?');\n\n // Does the route include a query string?\n if (search) {\n routeName = pathname;\n options = {\n queryParams: {\n ...(options?.queryParams ?? {}),\n ...Object.fromEntries(new URLSearchParams(search))\n }\n };\n }\n\n return {\n routeName,\n params: [...models, options].compact()\n };\n }\n\n /**\n * A simplified route transition method that closely resembles the router service transitionTo, but uses RouteItem model instead of routeName.\n *\n * @see https://api.emberjs.com/ember/3.28/classes/RouterService/methods/transitionTo?anchor=transitionTo\n */\n @action transitionToRoute(routeItem: RouteItem, ...args: any[]): Transition {\n const { routeName, params } = this.getTransitionArgs(routeItem, ...args);\n return this.router.transitionTo(routeName, ...params);\n }\n\n /**\n * A simplified route transition method that closely resembles the router service replaceWith, but uses routeId instead of routeName.\n *\n * @see https://api.emberjs.com/ember/3.28/classes/RouterService/methods/replaceWith?anchor=replaceWith\n */\n @action replaceWithRouteId(id: number, ...args: any[]): Transition {\n const routeItem = this.getRouteItem(id);\n assert(\n `[NavigationService::replaceWithRouteId] No route item model found for \"${id}\", we should not provide users a way to transition to inaccessible routes.`,\n routeItem\n );\n\n const { routeName, params } = this.getTransitionArgs(routeItem, ...args);\n return this.router.replaceWith(routeName, ...params);\n }\n\n /**\n * Redirect to a URL in a new browser window.\n * @param {string} url\n */\n @action transitionToUrlInNewBrowserWindow(url: string): void {\n const { identityManager } = this;\n if (identityManager.isMobileApp) {\n const redirectUrl = addSearchParam(url, 'OpenExternally', 'true');\n window.location['replace'](redirectUrl);\n } else {\n window.open(url);\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport Service from '@ember/service';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport SafetyButtonSession from 'customer-site/models/safety-button/session';\nimport { TrackedArray } from 'tracked-built-ins';\n\nimport type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport type Store from '@ember-data/store';\nimport type PersonalSafetyAlarm from 'customer-site/models/personal-safety/alarm';\nimport type PersonalSafetyEmergencyContact from 'customer-site/models/personal-safety/emergency-contact';\nimport type PersonalSafetyLocation from 'customer-site/models/personal-safety/location';\nimport type PersonalSafetySession from 'customer-site/models/personal-safety/session';\nimport type PersonalSafetyUserProfile from 'customer-site/models/personal-safety/user-profile';\nimport type SafetyButtonNote from 'customer-site/models/safety-button/note';\n\nexport default class PersonalSafetyService extends Service {\n @service declare store: Store;\n\n @tracked session?: Awaited>;\n @tracked alarm?: Awaited>;\n @tracked customerProfile?: Awaited>;\n @tracked emergencyContacts?: Awaited>;\n @tracked locations?: TrackedArray;\n @tracked notes?: Awaited>;\n\n loadSessionTask = task({ drop: true }, async (id: string) => {\n const session = await this.store.findRecord('safety-button/session', id);\n\n if (session === undefined) {\n return;\n }\n\n this.session = session;\n this.alarm = await session.alarm;\n this.locations = new TrackedArray((await session.locations).slice());\n\n if (session instanceof SafetyButtonSession) {\n this.customerProfile = await session.customerProfile;\n this.emergencyContacts = await this.customerProfile.emergencyContacts;\n this.notes = await session.notes;\n }\n\n return session;\n });\n\n @action\n refreshSession(alarmId: string): void {\n this.loadSessionTask.perform(alarmId);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport Service, { service } from '@ember/service';\nimport { getErrorText } from 'customer-site/utils/ember';\nimport { task, timeout } from 'ember-concurrency';\nimport BrowserEnum from 'customer-site/enums/Browser';\nimport { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport { GET, PUT } from '@adc/ajax/services/adc-ajax';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nconst BrowsersSupportingAudioRecording = [BrowserEnum.Chrome, BrowserEnum.Edge];\nconst GrantScreenRecordingPermissionsMaxWaitTimeMs = 15000;\nconst ClippyHealthCheckTimeoutMs = 5000;\nconst StreamCaptureDurationMs = 5000;\nconst StreamCaptureOverlapMs = 500;\nconst NumberOfMediaRecordersToUse = 2;\n\n/**\n * Information about a recorded segment.\n */\ninterface RecordedSegmentInfo {\n /**\n * The media recorder for recording video and optionally audio.\n */\n mediaRecorder?: MediaRecorder;\n\n /**\n * The recorded data from the media recorder.\n */\n chunks: BlobPart[];\n}\n\n/**\n * Gets the user's current browser as an enum value.\n */\nfunction detectBrowser(): BrowserEnum {\n const browserMap = {\n Chrome: BrowserEnum.Chrome,\n Edge: BrowserEnum.Edge,\n Firefox: BrowserEnum.Firefox,\n Safari: BrowserEnum.Safari\n };\n\n const userAgent = navigator.userAgent;\n for (const [key, value] of Object.entries(browserMap)) {\n if (userAgent.includes(key)) {\n return value;\n }\n }\n\n return BrowserEnum.Unknown;\n}\n\n/**\n * Validates the permissions that the user granted for screen recording in the browser,\n * and ensures that either the current tab or entire screen is being recorded.\n */\nfunction validateScreenRecordingPermissions(\n recordAudio: boolean,\n stream: MediaStream\n): { permissionsValidated: boolean; errorMessage?: string } {\n const browser = detectBrowser(),\n permissionsValidatedSuccessfully = { permissionsValidated: true },\n browserDoesNotSupportScreenRecording = `Browser ${browser} does not support screen recording.`,\n browserDoesNotSupportAudio = `Browser ${browser} does not support recording audio`,\n deniedAudioPermissions =\n 'Audio permissions denied. Please enable audio when granting permissions to screen record.',\n unableToValidateWindow =\n 'Unable to validate selected window for screen recording. Please select the current tab or entire screen when granting permissions to screen record.',\n unableToValidateTab =\n 'Unable to validate selected tab for screen recording. Please select the current tab or entire screen when granting permissions to screen record.',\n unableToValidateDisplaySurface =\n 'Unable to validate selected display surface for screen recording. Please select the current tab or entire screen when granting permissions to screen record.';\n\n if (recordAudio) {\n if (!BrowsersSupportingAudioRecording.includes(browser)) {\n return {\n permissionsValidated: false,\n errorMessage: browserDoesNotSupportAudio\n };\n }\n\n if (stream.getAudioTracks().length < 1) {\n return {\n permissionsValidated: false,\n errorMessage: deniedAudioPermissions\n };\n }\n }\n\n const videoTrack = stream.getVideoTracks()[0],\n label = videoTrack?.label?.toLowerCase(),\n settings = videoTrack?.getSettings(),\n displaySurface = settings?.displaySurface;\n\n switch (browser) {\n case BrowserEnum.Chrome:\n case BrowserEnum.Edge:\n if (displaySurface === 'window') {\n return {\n permissionsValidated: false,\n errorMessage: unableToValidateWindow\n };\n }\n\n if (displaySurface === 'browser') {\n if (label.includes('current-web-contents-media-stream')) {\n return permissionsValidatedSuccessfully;\n }\n\n return {\n permissionsValidated: false,\n errorMessage: unableToValidateTab\n };\n }\n\n if (displaySurface === 'monitor') {\n return { permissionsValidated: true };\n }\n\n return {\n permissionsValidated: false,\n errorMessage: unableToValidateDisplaySurface\n };\n case BrowserEnum.Firefox:\n if (label.includes('monitor')) {\n return permissionsValidatedSuccessfully;\n }\n\n if (label.includes('timeline')) {\n return permissionsValidatedSuccessfully;\n }\n\n return {\n permissionsValidated: false,\n errorMessage: unableToValidateDisplaySurface\n };\n case BrowserEnum.Safari:\n if (displaySurface === 'monitor') {\n return permissionsValidatedSuccessfully;\n }\n\n if (label.includes('timeline')) {\n return permissionsValidatedSuccessfully;\n }\n\n return {\n permissionsValidated: false,\n errorMessage: unableToValidateDisplaySurface\n };\n default:\n return {\n permissionsValidated: false,\n errorMessage: browserDoesNotSupportScreenRecording\n };\n }\n}\n\n/**\n * The service for performing screen recording in the browser.\n */\nexport default class ScreenRecordingService extends Service {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare envSettings: EnvSettingsService;\n @service declare notificationManager: NotificationManager;\n\n /**\n * The URL to use when uploading screen recordings to Clippy.\n */\n @tracked clippyUploadUrl?: string;\n\n /**\n * Keeps track of how many screen recording blobs that have been sent to Clippy so the filenames can be unique.\n */\n @tracked uploadCount = 0;\n\n /**\n * An array of objects, with each object containing a snippet of information about the recorded segment.\n * Each entry will contain information about a recorded segment that is StreamCaptureDurationMs long.\n * There will be a total of NumberOfMediaRecordersToUse entries,\n * and we will cycle over them until recording has stopped.\n */\n recordedSegmentInfos: RecordedSegmentInfo[] = Array.from({ length: NumberOfMediaRecordersToUse }, () => ({\n mediaRecorder: undefined,\n chunks: []\n }));\n\n /**\n * Gets the video source API prefix for this specific playback player type (SD or SVR).\n *\n * @returns The video source API prefix to use for requesting Clippy URLs.\n */\n private getVideoSourceApiPrefix(playbackType: StreamUsage | undefined): string | undefined {\n if (playbackType === StreamUsage.SDCard) {\n return 'video/videoSources/sdCardVideoSources';\n }\n\n if (playbackType === StreamUsage.Svr) {\n return 'video/videoSources/svrVideoSources';\n }\n\n return undefined;\n }\n\n /**\n * Gets the Clippy health check URL and checks to make sure the Clippy endpoint is reachable.\n *\n * @returns True if the Clippy health check was successful.\n */\n private async performClippyHealthCheck(videoSourceApiPrefix: string): Promise {\n try {\n const clippyHealthCheckUrl = await this.ajax.apiRequestForValue(\n `${videoSourceApiPrefix}/getPlaybackClippyTestUrl`,\n undefined,\n null,\n GET\n );\n if (!clippyHealthCheckUrl) {\n throw new Error('getPlaybackClippyTestUrl API returned null/empty Clippy health check URL.');\n }\n\n const clippyHealthCheckPromise = this.ajax.request(clippyHealthCheckUrl).then(() => true);\n const clippyApiTimeoutPromise = timeout(ClippyHealthCheckTimeoutMs).then(() => false);\n return await Promise.race([clippyHealthCheckPromise, clippyApiTimeoutPromise]);\n } catch (error) {\n console.log(`Error in performClippyHealthCheck: ${error}`);\n }\n\n return false;\n }\n\n /**\n * Gets and sets the Clippy upload URL for uploading the screen recordings.\n *\n * @returns True if a Clippy upload URL was successfully generated and retrieved.\n */\n private async setClippyUploadUrl(videoSourceApiPrefix: string): Promise {\n try {\n const clippyUploadUrl = await this.ajax.apiRequestForValue(\n `${videoSourceApiPrefix}/getClippyUploadUrlForPlayback`,\n undefined,\n null,\n GET\n );\n if (!clippyUploadUrl) {\n throw new Error('getClippyUploadUrlForPlayback API returned null/empty Clippy upload URL');\n }\n\n this.clippyUploadUrl = clippyUploadUrl;\n return true;\n } catch (error) {\n console.log(`Error in getClippyUploadUrl: ${error}`);\n }\n\n return false;\n }\n\n /**\n * Gets the Clippy upload URL and uses the uploadCount (or 'END' if this marks the last recording to upload) to make it unique.\n */\n private getUniqueClippyUrlForUploadingCurrentRecording(isEnd: boolean): string | undefined {\n const { clippyUploadUrl, uploadCount } = this;\n if (!clippyUploadUrl) {\n return undefined;\n }\n\n return clippyUploadUrl.replace('.mp4', `_${isEnd ? 'END' : uploadCount}.mp4`);\n }\n\n /**\n * Uploads the ~5-second recorded segment to Clippy.\n */\n private async uploadBlobToClippy(blob: Blob): Promise {\n try {\n const headers = {\n headers: {\n 'content-type': blob.type,\n accept: 'application/json;charset=utf-8'\n }\n };\n\n const newOptions: Partial = { ...headers };\n const defaultHeaders = this.ajax.get('defaultHeaders');\n\n newOptions.headers = { ...defaultHeaders, ...newOptions.headers };\n newOptions.method = PUT;\n newOptions.body = blob;\n\n const url = this.getUniqueClippyUrlForUploadingCurrentRecording(false);\n if (!url) {\n throw new Error('URL for uploading recording segment to Clippy is null/empty');\n }\n\n this.uploadCount++;\n\n await fetch(url, newOptions);\n } catch (error) {\n console.log(`Error in uploadBlobToClippy: ${error}`);\n }\n }\n\n /**\n * Sends a final message to Clippy, indicating the end of recording.\n */\n private async sendEndOfRecordingMessageToClippy(): Promise {\n const url = this.getUniqueClippyUrlForUploadingCurrentRecording(true);\n if (!url) {\n return;\n }\n\n await this.ajax.request(url, undefined, null, PUT);\n }\n\n /**\n * Requests permission from the user via the browser to allow screen recording\n * within the browser on the current tab.\n *\n * @param recordAudio Should the browser record audio along with video?\n */\n private async requestPermissionToCapture(recordAudio: boolean): Promise {\n const video = { displaySurface: 'browser' },\n audio = recordAudio\n ? {\n echoCancellation: false,\n noiseSuppression: false,\n suppressLocalAudioPlayback: false,\n sampleRate: 44100\n }\n : false,\n displayMediaOptions = {\n video,\n audio,\n preferCurrentTab: true,\n selfBrowserSurface: 'include',\n surfaceSwitching: 'exclude',\n systemAudio: 'exclude',\n monitorTypeSurfaces: 'exclude'\n },\n // Ask the user for permission to screen record.\n // This will throw an exception if permission is denied.\n stream = await navigator.mediaDevices.getDisplayMedia(displayMediaOptions as MediaStreamConstraints);\n\n const { permissionsValidated, errorMessage } = validateScreenRecordingPermissions(recordAudio, stream);\n if (!permissionsValidated) {\n throw new Error(errorMessage);\n }\n\n this.recordedSegmentInfos.forEach((recordedSegmentInfo) => {\n const mediaRecorder = new MediaRecorder(stream);\n mediaRecorder.ondataavailable = (ev) => recordedSegmentInfo.chunks.push(ev.data);\n mediaRecorder.onstop = () => {\n const blob = new Blob(recordedSegmentInfo.chunks);\n this.uploadBlobToClippy(blob);\n recordedSegmentInfo.chunks.clear();\n };\n\n recordedSegmentInfo.mediaRecorder = mediaRecorder;\n });\n }\n\n /**\n * Stops recording on all media recorders (if any) and resets those properties to default values.\n */\n private async stopAllMediaRecorders(): Promise {\n const { recordedSegmentInfos } = this;\n for (let i = 0; i < recordedSegmentInfos.length; i++) {\n const recordedSegmentInfo = recordedSegmentInfos[i],\n { mediaRecorder } = recordedSegmentInfo;\n if (!mediaRecorder) {\n return;\n }\n\n mediaRecorder.stop();\n mediaRecorder.stream.getTracks().forEach((track) => track.stop());\n await timeout(StreamCaptureOverlapMs);\n mediaRecorder.ondataavailable = null;\n mediaRecorder.onstop = null;\n recordedSegmentInfo.mediaRecorder = undefined;\n }\n }\n\n /**\n * The task for screen recording the current browser tab.\n */\n recordBrowserSession = task({ drop: true }, async (playbackType: StreamUsage | undefined, recordAudio: boolean) => {\n const { envSettings } = this,\n timeoutMessage =\n 'Timed out while waiting for user to grant permissions to screen record. Please grant permissions to screen record upon navigating to the page by selecting the current tab or entire screen.';\n\n // Stop any screen recording that is already in progress.\n await this.stopAllMediaRecorders();\n\n if (envSettings.isTestEnvironment()) {\n return;\n }\n\n try {\n const videoSourceApiPrefix = this.getVideoSourceApiPrefix(playbackType);\n if (!videoSourceApiPrefix) {\n return;\n }\n\n const clippyHealthCheckSuccessful = await this.performClippyHealthCheck(videoSourceApiPrefix);\n if (!clippyHealthCheckSuccessful) {\n return;\n }\n\n const clippyUploadUrlSuccessful = await this.setClippyUploadUrl(videoSourceApiPrefix);\n if (!clippyUploadUrlSuccessful || !this.clippyUploadUrl) {\n return;\n }\n\n const checkScreenRecordingPermissionsWithTimeout = new Promise((_, reject) => {\n setTimeout(() => {\n if (!this.recordedSegmentInfos[0].mediaRecorder) {\n reject(timeoutMessage);\n }\n }, GrantScreenRecordingPermissionsMaxWaitTimeMs);\n });\n\n await Promise.race([\n checkScreenRecordingPermissionsWithTimeout,\n this.requestPermissionToCapture(recordAudio)\n ]).catch((error) => {\n throw new Error(error);\n });\n\n const recordedSegmentInfoIterator = ((): Iterator<\n RecordedSegmentInfo,\n RecordedSegmentInfo,\n IteratorYieldResult\n > => {\n const recordedSegmentInfos = this.recordedSegmentInfos;\n let index = -1;\n\n return {\n next() {\n index = (index + 1) % NumberOfMediaRecordersToUse;\n return {\n value: recordedSegmentInfos[index],\n done: false\n };\n }\n };\n })();\n\n let currentMediaRecorder = recordedSegmentInfoIterator.next().value.mediaRecorder;\n currentMediaRecorder?.start();\n\n for (;;) {\n // Record in intervals, cycling over all the media recorders,\n // and overlapping to avoid missing footage when stopping the recording, uploading the clip, and starting the next recording.\n await timeout(StreamCaptureDurationMs);\n const nextMediaRecorder = recordedSegmentInfoIterator.next().value.mediaRecorder;\n nextMediaRecorder!.start();\n await timeout(StreamCaptureOverlapMs);\n currentMediaRecorder!.stop();\n currentMediaRecorder = nextMediaRecorder;\n }\n } catch (error) {\n // If the user denies permission to screen record,\n // or if the user is not on a supported browser to allow recording audio (if applicable),\n // add a toast notification with the error and redirect back to the previous page.\n this.stopRecording();\n const errorText = getErrorText(error);\n errorText && this.notificationManager.addError(errorText);\n this.contextManager.transitionToPreviousRoute();\n }\n });\n\n /**\n * Stop recording by canceling all running tasks\n * and stopping all tracks for both the first and second media recorders.\n */\n @action\n async stopRecording(): Promise {\n this.recordBrowserSession.cancelAll();\n await this.stopAllMediaRecorders();\n await this.sendEndOfRecordingMessageToClippy();\n this.clippyUploadUrl = undefined;\n this.uploadCount = 0;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport Service, { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { timeout, task } from 'ember-concurrency';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { sentryWithScopeAndError } from '@adc/app-infrastructure/utils/sentry';\n\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface PlaybackErrorBody {\n Route: number;\n ErrorEnum: number;\n}\n\nexport interface EventQueueItem {\n route: number;\n eventEnum: number;\n}\n\n/**\n * Denotes an event that will not be logged\n */\nexport const IGNORED_VALUE = 0;\n\nexport const apiRoot = 'stats',\n bulkApiUrl = `${apiRoot}/events`,\n playbackErrorApiUrl = `${bulkApiUrl}/playerError`;\n\n// If the user has requested data not be tracked, don't post any events\nconst doNotTrackCookie = (document.cookie.match('(^|;)\\\\s*' + 'adc_e_donottrack' + '\\\\s*=\\\\s*([^;]+)') || []).pop();\nconst analyticsDisabled = doNotTrackCookie == 'true' ? true : false;\nconst POST_INTERVAL_MS = 30000;\nexport const MAX_ERRORS_BEFORE_RESET = 100;\n\n/**\n * Service responsible for recording stats and metrics.\n *\n * @extends Service\n */\nexport default class Stats extends Service {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n\n @tracked\n private queuedEvents: EventQueueItem[] = [];\n\n @tracked\n private numLoggedErrorsSinceReset = 0;\n\n private didAttemptLogAfterThreshold = false;\n\n /**\n * Task to handle the event queue and reset the rate limiter count.\n *\n * @param postIntervalMilliseconds number of milliseconds to wait between task executions.\n */\n poll = task({ drop: true }, async (postIntervalMilliseconds: number) => {\n for (;;) {\n await this.postAndFlushQueue();\n this.numLoggedErrorsSinceReset = 0;\n this.didAttemptLogAfterThreshold = false;\n await timeout(postIntervalMilliseconds);\n }\n });\n\n /**\n * Starts a poller that posts any tracked items a specified interval.\n */\n startPolling(postIntervalMilliseconds: number = POST_INTERVAL_MS): void {\n this.poll.perform(postIntervalMilliseconds);\n }\n\n /**\n * Clear the polling interval and log any remaining items if the queue is not empty.\n */\n async stopPolling(): Promise {\n this.poll.cancelAll();\n await this.postAndFlushQueue();\n }\n\n /**\n * If any events have been queued, collects all queued events and packages them to be posted,\n * then clears the queue.\n */\n private async postAndFlushQueue(): Promise {\n // deep copy events before flushing the queue\n const eventsToLog = this.queuedEvents.slice();\n this.queuedEvents = [];\n await this.postBulkEvents(eventsToLog);\n }\n\n /**\n * The number of events in the queue.\n */\n @reads('queuedEvents.length')\n declare count: number;\n\n /**\n * is the poller currently active.\n */\n @reads('poll.isRunning')\n declare isPolling: boolean;\n\n /**\n * Can we post to the player error API?\n */\n @computed('numLoggedErrorsSinceReset')\n get canLogError(): boolean {\n return this.numLoggedErrorsSinceReset < MAX_ERRORS_BEFORE_RESET;\n }\n\n /**\n * Queues an event to be logged with the current route, should one exist.\n */\n logEvent(eventEnum: number): void {\n // If user has asked not to track, don't add any items\n if (analyticsDisabled || !eventEnum) {\n return;\n }\n\n try {\n const routeId = this.getRoute();\n if (routeId) {\n this.queuedEvents.push({\n route: routeId,\n eventEnum\n });\n }\n } catch {\n // swallow\n }\n }\n\n /**\n * Immediately logs an event.\n */\n async postEvent(eventEnum: number): Promise {\n const routeId = this.getRoute();\n\n if (routeId) {\n await this.postBulkEvents([\n {\n route: routeId,\n eventEnum\n }\n ]);\n }\n }\n\n /**\n * Immediately logs a video playback error.\n */\n public async logPlayerError(errorEnum: number): Promise {\n try {\n const routeId = this.getRoute();\n\n if (!errorEnum || !routeId || analyticsDisabled) {\n return Promise.resolve();\n }\n\n if (!this.canLogError) {\n if (this.didAttemptLogAfterThreshold) {\n this.logThresholdErrorToSentry(errorEnum);\n }\n\n return Promise.resolve();\n }\n\n this.numLoggedErrorsSinceReset++;\n\n return await this.ajax.apiRequest(\n playbackErrorApiUrl,\n undefined,\n {\n Route: routeId,\n ErrorEnum: errorEnum\n },\n POST\n );\n } catch {\n // swallow\n }\n }\n\n /**\n * Posts the a queue of events to the stats API.\n */\n private async postBulkEvents(events: EventQueueItem[]): Promise {\n // Don't waste an API request if there are no events\n if (isEmpty(events)) {\n return;\n }\n\n try {\n await this.ajax.apiRequest(\n bulkApiUrl,\n undefined,\n {\n Events: events\n },\n POST\n );\n } catch {\n // swallow\n }\n }\n\n /**\n * Gets the route on the current context if one is available. If none is available, return undefined;\n *\n * @private\n */\n private getRoute(): number | undefined {\n return this.contextManager?.currentRouteData?.routeItem?.routeId;\n }\n\n /**\n * Logs a threshold exceeded error message to Wavefront.\n *\n * @private\n */\n private logThresholdErrorToSentry(errorEnum: number) {\n const errorExtras = { errorEnum },\n sentryTags = { errorEnum: errorEnum };\n\n sentryWithScopeAndError('Wavefront Stats Service: Error log threshold was exceeded', errorExtras, sentryTags);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport Service from '@ember/service';\nimport { inject as service } from '@ember/service';\nimport { EmberEnterpriseGroups } from 'customer-site/enums/CustomerPageUrl';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type AjaxService from './ajax';\nimport type ContextManager from './context-manager';\n\ntype SystemGroupsManagerServiceParameters = {\n openMoveGroupActionSheet: (systemGroup: SystemGroup) => void;\n refreshStandaloneSystemsHandler: () => Promise;\n refreshSystemGroupsAfterAction: VoidFunction;\n showRemoveGroupActionSheet: (systemGroup: SystemGroup) => void;\n};\n\nexport default class SystemGroupsManagerService extends Service {\n @service declare store: Store;\n @service declare router: RouterService;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n\n @tracked wasSystemGroupsManagerServiceInitialized = false;\n\n @tracked openMoveGroupActionSheet?: (systemGroup: SystemGroup) => void;\n\n /**\n * Handles refreshing the standalone systems on the Manage Groups page\n * to ensure they're up to date.\n */\n @tracked refreshStandaloneSystemsHandler?: () => Promise;\n\n @tracked refreshSystemGroupsAfterAction?: VoidFunction;\n\n @tracked showRemoveGroupActionSheet?: (systemGroup: SystemGroup) => void;\n\n public setUpSystemGroupsManagerService(setUpParams: SystemGroupsManagerServiceParameters) {\n if (!this.wasSystemGroupsManagerServiceInitialized) {\n Object.assign(this, { wasSystemGroupsManagerServiceInitialized: true, ...setUpParams });\n }\n }\n\n /**\n * Receives the response and determines whether we should select a new group in the context.\n */\n public async simpleContextSwitchHandler(\n groupActionResponse: ModelPayload,\n shouldRefreshStandaloneSystems = false\n ) {\n const { meta } = groupActionResponse,\n groupIdToSwitchTo = meta['groupIdToSwitchTo'] as number;\n if (groupIdToSwitchTo) {\n this.contextManager.switchToNewGroup(groupIdToSwitchTo, EmberEnterpriseGroups);\n return;\n }\n\n this.assertServiceWasInitialized();\n if (shouldRefreshStandaloneSystems) {\n await this.refreshStandaloneSystemsHandler!();\n }\n\n this.refreshSystemGroupsAfterAction!();\n }\n\n /**\n * Exported function for performing many of the delete functions for a group\n * First, we will make the call to delete the system group. If we should switch the context to a different group,\n * the id of the destination group would have been sent back as a metadata item in the request and\n * pushed to the deleted group's ember model. We will use the destination group id to grab the corresponding\n * system item and switch the context. Finally we'll navigate back to the Manage Groups page.\n *\n * @param groupToDelete\n */\n public async deleteSystemGroup(groupToDelete: SystemGroup) {\n // Cache the id of the group being deleted.\n const { contextManager } = this,\n originalGroupIdSelectedInContext = contextManager.getSelectedSystemGroupId();\n\n // Delete the group.\n await groupToDelete.destroyRecord();\n\n // Check whether we need to switch the group currently selected in context.\n const groupIdToSwitchTo = await this.getGroupIdToSwitchTo(originalGroupIdSelectedInContext);\n\n // Handle any updates to the MSA dropdown / context\n await this.simpleContextSwitchHandler({ data: {}, included: [], meta: { groupIdToSwitchTo } }, true);\n\n this.notificationManager.addSuccess(this.intl.t('components.enterprise.groups.groupDeleted', { count: 1 }));\n }\n\n private async getGroupIdToSwitchTo(originalGroupIdSelectedInContext: string) {\n return await this.ajax.apiRequest(\n 'systems/systemGroups/getGroupToSelectInContext',\n undefined,\n { originalGroupIdSelectedInContext },\n 'POST'\n );\n }\n\n private assertServiceWasInitialized() {\n if (!this.wasSystemGroupsManagerServiceInitialized) {\n assert('SystemGroupsManagerService was not properly initialized.');\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { alias, filterBy, union } from '@ember/object/computed';\nimport Service, { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { task, timeout } from 'ember-concurrency';\nimport {\n EmberAlertsIssues,\n EmberHome,\n EmberFeatureSuggestions,\n EmberEnterpriseAlertsIssues\n} from '../enums/CustomerPageUrl';\nimport { Alarm, Issue } from '../enums/TroubleConditionSeverity';\n\nimport type { AppNotification, AppNotificationButton } from '@adc/ui-components/services/notification-manager';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type TroubleCondition from 'customer-site/models/trouble-conditions/trouble-condition';\n\n/**\n * @classdesc\n * Service for maintaining trouble conditions.\n */\nexport default class TroubleConditionsService extends Service {\n @service declare store: ServiceRegistry['store'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare media: ADCResponsiveMediaService;\n\n @tracked allTroubles?: TroubleCondition[];\n\n @alias('identityManager.isEnterprise')\n declare isEnterprise: boolean;\n\n @alias('identityManager.identityModel.isCommercial')\n declare isCommercial: boolean;\n\n @alias('identityManager.identityModel.hasAccessToEnterpriseAlertsAndIssues')\n declare hasAccessToEnterpriseAlertsAndIssues: boolean;\n\n @alias('identityManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Indicates we haven't fetched trouble conditions yet.\n */\n isInitialFetch = true;\n\n /**\n * Indicates we have already shows the feature tasks notification.\n */\n hasDisplayedTaskToast = false;\n\n /**\n * The currently visible trouble notifications.\n */\n @tracked troubleNotifications: AppNotification[] = [];\n\n /**\n * Should the Stop Alarms button be shown?\n */\n showStopAlarms = false;\n\n /**\n * Did the user acknowledge new trouble conditions?\n */\n @tracked didAcknowledge = false;\n\n /**\n * Initializes internal properties and starts fetch.\n */\n initialize(): void {\n // Clear trouble conditions.\n Object.assign(this, {\n allTroubles: undefined,\n // Will the next fetch be the first fetch of trouble conditions?\n isInitialFetch: true,\n // Have we displayed the feature task toast?\n hasDisplayedTaskToast: false,\n troubleNotifications: []\n });\n\n // Retrieve trouble conditions.\n this.loadTroubleConditions.perform(false);\n }\n\n /**\n * Returns the current trouble conditions, or a promise that will resolve to the current trouble conditions if they haven't been retrieved yet.\n */\n get troublesPromise(): TroubleCondition[] | Promise {\n if (this.loadTroubleConditions.isRunning || !this.allTroubles) {\n return (async () => {\n let exit = false;\n while (!exit) {\n await timeout(50);\n if (!this.loadTroubleConditions.isRunning) {\n exit = true;\n }\n }\n\n return this.allTroubles ?? [];\n })();\n }\n\n return this.allTroubles;\n }\n\n /**\n * Loads trouble condition models.\n */\n private loadTroubleConditions = task({ drop: true }, async (forceRefresh = false): Promise => {\n const troubles: ADCStoreQuery = await this.store.query(\n 'trouble-conditions/trouble-condition',\n { forceRefresh }\n ),\n { allTroubles = [], isInitialFetch } = this,\n newTroubles = troubles.reject(({ id }) => allTroubles.find((item) => item.id === id)),\n clearedTroubles = allTroubles.reject(({ id }) => troubles.find((item) => item.id === id));\n\n // Removing these only conditionally so that the alerts and issues properties will not get recalculated if it is empty.\n if (clearedTroubles.length) {\n allTroubles.filter((item) => !clearedTroubles.includes(item));\n }\n\n // Adding these only conditionally so that the alerts and issues properties will not get recalculated if it is empty.\n if (newTroubles.length) {\n allTroubles.push(...newTroubles);\n }\n\n // Set whether we should show a button to stop alarms.\n Object.assign(this, {\n showStopAlarms: troubles.meta.showStopAlarms,\n isInitialFetch: false,\n allTroubles\n });\n\n // If there are no system alerts, display a toast once for non-enterprise migration customers if they have important tasks remaining\n if (allTroubles.length === 0 && !this.hasDisplayedTaskToast && !this.isEnterprise && !this.isCommercial) {\n this.displayFeatureTasksNotification.perform();\n }\n\n // If there are new troubles, and we have access to the alerts/issues route, display the trouble notifications.\n if (newTroubles.length && this.navigation.userHasAccess(EmberAlertsIssues)) {\n this.displayIssuesAlarmsNotifications.perform(newTroubles, isInitialFetch);\n }\n\n // If there are trouble issues, the user is enterprise and has the feature toggle enabled\n if (newTroubles.length && this.hasAccessToEnterpriseAlertsAndIssues && this.isEnterprise && !this.isMobileApp) {\n this.displayEnterpriseIssuesAlarmNotifications.perform(newTroubles);\n }\n });\n\n private showNotification(\n text: string,\n icon: string,\n btn: AppNotificationButton,\n css = icon\n ): AppNotification | undefined {\n return this.notificationManager.addNotification(text, icon, [btn], 0, true, false, css);\n }\n\n /**\n * Displays the feature suggestions task notification, if appropriate.\n */\n private displayFeatureTasksNotification = task({ restartable: true }, async () => {\n const tasks = await this.store.findAll('feature-suggestions/feature-task');\n\n // Mark that we've successfully retrieved the feature tasks\n this.hasDisplayedTaskToast = true;\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/no-context-manager-get-route\n if (!this.contextManager.getRouteItem(EmberFeatureSuggestions)) {\n return;\n }\n\n const numIncompleteTasks = tasks.filterBy('isCompleted', false).filterBy('isHighPriority', true).length;\n if (numIncompleteTasks === 0) {\n return;\n }\n\n const { intl } = this;\n this.showNotification(intl.tc(this, 'taskNotification', { numIncompleteTasks }), 'warning', {\n text: intl.tc(this, 'taskNotificationButton'),\n action: () => {\n // This will also clear all of the other trouble conditions notifications.\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(EmberFeatureSuggestions);\n }\n });\n });\n\n /**\n * Should any new Alarms be shown as notifications?\n */\n private shouldShowNewAlarmTroubleCondition(isInitialFetch: boolean): boolean {\n const { contextManager } = this,\n isSetupWizardRunning = contextManager.isWizard;\n\n if (contextManager.currentRouteData?.routeItem?.routeId == EmberAlertsIssues) {\n return !isSetupWizardRunning && !isInitialFetch;\n }\n\n // Initial-Setup always hides new alarms.\n if (contextManager.isInitialSetupRequired) {\n return false;\n }\n\n // Default to always show new alarms unless the setup wizard is running.\n return !isSetupWizardRunning;\n }\n\n /**\n * Should any new issues be shown as notifications?\n */\n private shouldShowNewIssueTroubleCondition(isInitialFetch: boolean): boolean {\n if (this.contextManager.currentRouteData?.routeItem?.routeId == EmberHome) {\n return isInitialFetch && this.shouldShowNewAlarmTroubleCondition(isInitialFetch);\n }\n\n // Default to what alarms are set up to do.\n return this.shouldShowNewAlarmTroubleCondition(isInitialFetch);\n }\n\n /**\n * Displays alarm and issue notifications.\n */\n private displayIssuesAlarmsNotifications = task(\n this,\n { drop: true },\n async (newTroubles: TroubleCondition[], isInitialFetch: boolean): Promise => {\n const { intl } = this;\n\n let counter = 50,\n exit = false;\n\n while (!exit) {\n await timeout(100);\n counter--;\n // Does the route data exist?\n if (this.contextManager.currentRouteData?.routeItem?.routeId) {\n exit = true;\n } else if (counter <= 0) {\n console.debug('TroubleCondition service giving up on route resolution.');\n return;\n }\n }\n // Function to show notification for alarms or issues.\n const fnShowNotification = (icon: string, notificationText: string): void => {\n const newNotification = this.showNotification(\n notificationText,\n icon ?? '',\n {\n text: intl.t('generic.view'),\n action: () => {\n // This will also clear all of the other trouble conditions notifications.\n this.navigation.transitionToRouteId(EmberAlertsIssues);\n }\n },\n `trouble-condition-${icon}`\n );\n\n if (newNotification) {\n this.troubleNotifications = [...this.troubleNotifications, newNotification];\n }\n };\n const newAlarms = newTroubles.filter((nt) => nt.severity === Alarm),\n newIssues = newTroubles.filter((nt) => !newAlarms.includes(nt));\n\n // Should we show a notification for an alarm?\n if (newAlarms.length && this.shouldShowNewAlarmTroubleCondition(isInitialFetch)) {\n fnShowNotification(newAlarms[0].icon, intl.tc(this, 'systemInAlarm'));\n }\n\n // Show issues if they exist and if this is not the first fetch (new issues came in) or if the current route is not home and not alerts-issues.\n const { length: issuesCount } = newIssues;\n if (issuesCount > 0 && this.shouldShowNewIssueTroubleCondition(isInitialFetch)) {\n // If there is just one issue then show the text of it, otherwise show the number of issues.\n fnShowNotification(\n newIssues[0].icon,\n issuesCount === 1 ? newIssues[0]?.description ?? '' : intl.tc(this, 'issuesText', { issuesCount })\n );\n }\n }\n );\n\n /**\n * Displays enterprise alarm notifications.\n * Method name indicates issues and they will be added later\n */\n private displayEnterpriseIssuesAlarmNotifications = task(\n this,\n { drop: true },\n async (newTroubles: TroubleCondition[]): Promise => {\n // Display messages for alarms separately\n // Alarms are sorted by the most recent to oldest\n const newAlarms = newTroubles\n .filter((item) => item.severity === Alarm)\n .sort((a1, a2) => (a1.sinceUtc < a2.sinceUtc ? 1 : -1));\n\n // Set of location ids to prevent duplicate notifications from the same location\n const locationSet = new Set();\n\n for (const alarm of newAlarms) {\n const system = await alarm.system,\n locationDescription = system.description;\n\n if (!locationSet.has(system.unitId)) {\n this.showNotificationForEnterprise(\n alarm.icon,\n this.intl.tc(this, 'locationInAlarm', { locationName: locationDescription })\n );\n\n locationSet.add(system.unitId);\n }\n }\n }\n );\n\n /** Function to show notification for Enterprise alarms or issues. **/\n showNotificationForEnterprise(icon: string, notificationText: string): void {\n const newNotification = this.showNotification(\n notificationText,\n icon ?? '',\n {\n text: this.intl.t('generic.view'),\n action: () => {\n this.navigation.transitionToRouteId(EmberEnterpriseAlertsIssues);\n }\n },\n `trouble-condition-${icon}`\n );\n\n // store the new notifications and use the list in the case of preventing them to be displayed\n if (newNotification) {\n this.troubleNotifications = [...this.troubleNotifications, newNotification];\n }\n }\n\n /**\n * \"Acknowledge\" the trouble conditions, so that they can be hidden from display.\n */\n acknowledge(): void {\n this.didAcknowledge = true;\n }\n\n /**\n * Gets the trouble condition alerts and issues fresh from the server/store.\n */\n refresh(): void {\n // Try to get fresh trouble conditions a few times.\n this.loadTroubleConditions.perform(true);\n }\n\n /**\n * Handles displaying a \"Stop Alarms\" confirmation dialog modal\n */\n @action showStopAlarmsModal(): void {\n (async () => {\n const system = await this.identityManager.getSelectedSystem(),\n stopAlarmsText = this.intl.t(\n system.noDisarmWhenClearingAlarms\n ? 'alerts-issues.index.stopAlarmsNoDisarm'\n : 'alerts-issues.index.stopAlarms',\n { count: 2 }\n ),\n partitions = await system.partitions;\n\n this.modals.showConfirmationDialog(\n stopAlarmsText,\n htmlSafe(\n this.intl.t(\n system.noDisarmWhenClearingAlarms\n ? 'alerts-issues.index.stopAlarmsConfirmDialogTextNoDisarm'\n : 'alerts-issues.index.stopAlarmsConfirmDialogText',\n {\n partitionCount: partitions.length\n }\n )\n ),\n {\n text: stopAlarmsText,\n action: async () => {\n await system.stopAlarms();\n this.notificationManager.addSuccess(\n this.intl.t(\n system.noDisarmWhenClearingAlarms\n ? 'alerts-issues.index.successStopAlarmsNoDisarm'\n : 'alerts-issues.index.successStopAlarms'\n )\n );\n\n // Reload partitions.\n system.hasMany('partitions').reload();\n\n // Refresh trouble conditions.\n this.refresh();\n },\n css: 'btn-color-danger'\n },\n {},\n 'stop-alarms'\n );\n })();\n }\n\n /**\n * List of Alerts (Alarms) trouble conditions.\n */\n @filterBy('allTroubles', 'severity', Alarm)\n alerts?: TroubleCondition[];\n\n /**\n * List of Issue trouble conditions.\n */\n @filterBy('allTroubles', 'severity', Issue)\n issues?: TroubleCondition[];\n\n /**\n * List of all trouble conditions (alerts and issues).\n */\n @union('alerts', 'issues')\n troubles?: TroubleCondition[];\n\n /**\n * Hides all open notifications for trouble conditions.\n */\n hideNotifications(): void {\n const { troubleNotifications = [] } = this;\n\n // Clear collection of trouble notifications and remove.\n this.troubleNotifications = [];\n troubleNotifications.forEach((n) => this.notificationManager.removeNotification(n));\n }\n}\n","import { inject as service } from '@ember/service';\nimport ENV from 'customer-site/config/environment';\nimport { LoginScheduleInactive } from 'customer-site/enums/KeepAliveStatus';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport SessionActivity from '@adc/app-infrastructure/services/session-activity';\n\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type AjaxService from './ajax';\nimport type ContextManager from './context-manager';\n\n/**\n * @classdesc\n *\n * Service that handles triggering events based on inactivity timeouts.\n *\n * @class UserActivity\n * @extends services.SessionActivity\n * @memberof services\n */\nexport default class UserActivityService extends SessionActivity {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare nativeBridge: NativeBridgeService;\n\n /** @override */\n logout(useReturnUrl: boolean): void {\n this.contextManager.logout(useReturnUrl);\n }\n\n /** @override */\n refreshApplication(): void {\n this.contextManager.refreshApplication(true);\n }\n\n /** @override */\n triggerInactivityWarning(): void {\n this.contextManager.triggerInactivityWarning();\n }\n\n /** @override */\n async keepSessionActive(): Promise {\n try {\n // The server will return a 4XX if the session has expired which will throw an error. If this completes, we were successful.\n const result = await this.ajax.request<{ status: number }>(\n `${this.keepAliveUrl}?timestamp=${Date.now()}`,\n undefined,\n undefined,\n POST\n );\n if ((result?.status == LoginScheduleInactive ?? false) && this.contextManager.hasFinishedSetupSteps) {\n this.contextManager.transitionToUrl(`${ENV.sitePrefix}/system-install`);\n }\n\n return true;\n } catch (error) {\n // If its a 403, the server received our request but the session already timed out.\n if (error.code === 403) {\n return this.contextManager.handleSessionExpiration();\n }\n\n // If it was not a 403, we received an actual error and throw it.\n throw error;\n }\n\n return false;\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n NotificationsOnly,\n MasterCodeUser as PointCentralMasterCodeUser\n} from 'customer-site/enums/PointCentralUserType';\nimport AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport { MasterCodeUser, None } from '../../enums/AccessPointUserType';\nimport { MasterCodeUser as MasterUser } from '../../enums/ContactUserType';\nimport ShareUser from './share-user';\n\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type User from 'customer-site/models/users/user';\n\n/**\n * @classdesc\n *\n * The service used to share a PointCentral user.\n */\nexport default class PointCentralShareUser extends ShareUser {\n @service declare notificationManager: NotificationManager;\n\n /**\n * Check the user's device access and addresses\n * @param {models.users.User} user\n * @param {any} addresses type is not specified because mobileAddresses and contactAddresses are not the same type\n * @param {String} errorString\n */\n async canShareUserCode(user: User, addressesLength: any, errorString: string) {\n if (user instanceof AccessControlUser) {\n if (user.accessPlans.length === 0) {\n this.notificationManager.addError(this.intl.tc(this, 'noAccessPlans'));\n return false;\n }\n } else {\n const deviceAccess = await user.deviceAccess;\n const accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary;\n\n if (!accessPointCollectionsSummary || get(accessPointCollectionsSummary, 'hasNoDeviceAccess')) {\n this.notificationManager.addError(this.intl.t('services.users.share-user.noDevices'));\n return false;\n }\n }\n\n if (addressesLength === 0) {\n this.notificationManager.addError(errorString);\n return false;\n }\n\n return true;\n }\n\n /** @override **/\n shouldShowShareUserCodeButton(user: User): boolean {\n // Enterprise logins should not be able to share resident visitor user codes\n\n if (user instanceof AccessControlUser) {\n return !(\n !user ||\n !user.isNormalUser ||\n !user.pinCodes.any((pin) => pin.isPointCentral) ||\n user.isPrimary ||\n user.userType === MasterUser ||\n (this.contextManager.identityModel.loginIsEnterprise && user.isResidentVisitor)\n );\n }\n\n return !(\n !user ||\n !get(user.deviceAccess, 'canShareUserCode') ||\n user.get('isPrimary') ||\n get(user.deviceAccess, 'userType') === None ||\n get(user.deviceAccess, 'userType') === MasterCodeUser ||\n get(user.deviceAccess, 'pointCentralUserType') === NotificationsOnly ||\n get(user.deviceAccess, 'pointCentralUserType') === PointCentralMasterCodeUser ||\n (this.contextManager.identityModel.loginIsEnterprise && user.isResidentVisitor)\n );\n }\n\n /**\n * Sends an email to all of the contact's email addresses to share the user code.\n * @param user\n */\n async shareUserCodeEmail(userPromise: Promise | User) {\n const user = await userPromise,\n emailAddresses = await user.emailAddresses;\n\n if (await this.canShareUserCode(user, emailAddresses.length, this.intl.tc(this, 'noEmailAddresses'))) {\n try {\n await user.sendWelcomeEmail();\n this.notificationManager.addSuccess(this.intl.tc(this, 'emailSent'));\n } catch (error) {\n return;\n }\n }\n\n return;\n }\n\n /**\n * Sends a text to all of the contact's mobile numbers to share the user code.\n *\n * @param user\n */\n async shareUserCodeSms(user: User) {\n const { intl } = this,\n mobileAddresses = await user.mobileAddresses;\n\n if (await this.canShareUserCode(user, mobileAddresses.length, intl.tc(this, 'noMobileAddresses'))) {\n user.sendResidentVisitorWelcomeSms()\n .then(() => this.notificationManager.addSuccess(intl.tc(this, 'smsSent')))\n .catch(() => {\n return;\n });\n }\n\n return;\n }\n\n /**\n * Sends a welcome text to a number on the contact.\n *\n * @param user\n */\n async sendPointCentralWelcomeText(user: User) {\n const { intl } = this,\n mobileAddresses = await user.mobileAddresses;\n\n if (await this.canShareUserCode(user, mobileAddresses.length, intl.tc(this, 'noMobileAddresses'))) {\n user.sendPointCentralWelcomeText()\n .then(() => this.notificationManager.addSuccess(intl.tc(this, 'smsSent')))\n .catch(() => {\n return;\n });\n }\n\n return;\n }\n}\n","import { get } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport Service from '@ember/service';\nimport { inject as service } from '@ember/service';\n\nimport type BrowserService from '@adc/app-infrastructure/services/browser';\nimport type NativeBridge from '@adc/app-infrastructure/services/native-bridge';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type User from 'customer-site/models/users/user';\nimport type ContextManager from '../context-manager';\n\n/**\n * Returns a string listing all device names the user has access to\n */\nasync function getSelectedDeviceNames(user: User): Promise {\n const deviceAccess = await user.deviceAccess,\n accessPointCollectionsSummary = await get(deviceAccess, 'accessPointCollectionsSummary'),\n selectedDevices = get(accessPointCollectionsSummary, 'allAccessPointItems').filterBy('hasAccess');\n\n return selectedDevices.mapBy('deviceName').join(', ');\n}\n\n/**\n * @classdesc\n *\n * A service used to share a user\n */\nexport default class ShareUser extends Service {\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare nativeBridge: NativeBridge;\n @service declare browser: BrowserService;\n @service declare intl: ADCIntlService;\n\n /**\n * The page is not displayed as a WebView\n */\n @reads('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Should we show the \"Share User Code\" button?\n */\n shouldShowShareUserCodeButton(user: User): boolean {\n if (!user || !get(user?.deviceAccess ?? {}, 'canShareUserCode')) {\n return false;\n }\n\n if (this.isMobileApp) {\n return (this.nativeBridge || {}).doesSupportLaunchShareActionDialog;\n }\n\n return true;\n }\n\n /**\n * Whether or not we want to show the options to share code via text, email, or contact list.\n */\n showAllSharingOptions(user: User) {\n if (user == null) {\n return false;\n }\n\n // Show all 3 options if we are using a SS PC login.\n return this.contextManager.identityModel.isPointCentral;\n }\n\n /**\n * Are we a single system login looking at a resident visitor or a single system user.\n */\n isSingleSystemLoginWithResidentVisitor(user: User) {\n return !this.contextManager.identityModel.loginIsEnterprise && (user.isResidentVisitor || !user.isEnterprise);\n }\n\n /**\n * Launches a native \"share dialog\" based on the user to share, and the element to anchor the popover (iPad)\n */\n async shareUserCode(user: Promise, anchorSelector: string): Promise {\n if (this.isMobileApp && !this.nativeBridge) {\n return;\n }\n\n const deviceNames = await getSelectedDeviceNames.call(this, await user);\n\n // If user does not have device access, return a rejected promise and display error notification.\n if (!deviceNames || !deviceNames.length) {\n this.notificationManager.addError(this.intl.tc(this, 'noDevices'));\n return Promise.reject();\n }\n\n const subject = this.getShareUserCodeSubject(await user),\n anchorElement = document.querySelector(anchorSelector) as HTMLElement | null,\n message = await this.getShareUserCodeMessage(await user, deviceNames);\n\n if (!anchorElement) {\n this.notificationManager.addError(this.intl.t('generic.failedToCopyToClipboard'));\n return;\n }\n\n /* This takes the message string and removes the %0A characters needed for email formatting\n and replaces them with a new line for copy/paste formatting */\n const result = await this.browser.universalCopyToClipboard(\n subject,\n anchorElement,\n message.replace(/%0A/gi, '\\n')\n );\n\n if (result) {\n if (this.isMobileApp) {\n return Promise.resolve();\n }\n\n window.open(`mailto:?subject=${subject}&body=${message}`, '_blank');\n\n this.notificationManager.addSuccess(this.intl.tc(this, 'copySuccessful'));\n return Promise.resolve();\n }\n\n this.notificationManager.addError(this.intl.tc(this, 'copyUnsuccessful'));\n return Promise.reject();\n }\n\n /**\n * Returns the message title.\n */\n private getShareUserCodeSubject(user: User): string {\n const ret = this.intl.tc(this, 'messageTitle', user.getProperties('firstName', 'lastName'));\n return ret;\n }\n\n /**\n * Returns the message content and copies it to the clipboard.\n */\n private async getShareUserCodeMessage(user: User, deviceNames: string): Promise {\n if (this.contextManager.identityModel.isPointCentral && user.isResidentVisitor) {\n const residentVisitorMessageBody = await this.getShareResidentVisitorUserCodeBody(user, this.isMobileApp);\n return residentVisitorMessageBody.value;\n }\n\n const scheduleDescription = await this.getScheduleDescription(user),\n accessCode = get(user?.deviceAccess ?? {}, 'userCode');\n\n const mobileMessage = this.intl.t('services.users.share-user.mobileMessageBody', {\n accessCode,\n deviceNames,\n scheduleDescription\n });\n\n if (this.isMobileApp) {\n return mobileMessage;\n }\n\n return this.intl.t('services.users.share-user.desktopMessageBody', {\n accessCode,\n deviceNames,\n scheduleDescription\n });\n }\n\n /**\n * Returns a string representing the times the user has access to the selected devices.\n */\n private async getScheduleDescription(user: User): Promise {\n const deviceAccess = await user.deviceAccess,\n { dateText = this.intl.tc(this, 'all'), timeText = '' } =\n [deviceAccess.temporarySchedule, deviceAccess.weeklySchedule].compact().findBy('isValid') || {};\n\n const formattedTimeText = timeText ? ` (${timeText})` : '';\n\n return `${dateText}${formattedTimeText}`;\n }\n\n /**\n * Get resident visitor message body from backend\n */\n getShareResidentVisitorUserCodeBody(user: User, isMobile: boolean): Promise> {\n return user.submitCustomApiCall('getShareResidentVisitorUserCodeBody', 'GET', { isMobile });\n }\n}\n","import Service from '@ember/service';\nimport { inject as service } from '@ember/service';\nimport { ActionOnPageEvent } from 'customer-site/enums/UserExperienceEventType';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ENV from 'customer-site/config/environment';\nimport type AjaxService from './ajax';\nimport type ContextManager from './context-manager';\n\n/**\n * @classdesc A service for logging activity-tracking metrics for website usage.\n *\n * @class services.ActivityTrackingService\n */\nexport default class UserExperienceEventsService extends Service {\n @service declare envSettings: EnvSettingsService;\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n\n /**\n * Logs an event to track certain user activity along with associated data about who the user is.\n *\n * @param eventType {number} - The type of event to log.\n * @param eventSubType {number} - The sub-type of the event to log.\n */\n recordActionOnPageEvent(eventSubType: number): Promise> {\n const { releaseId } = this.envSettings.getEnvironment() as { releaseId: string },\n data = {\n eventType: ActionOnPageEvent,\n eventSubType,\n jsonEventData: {\n customerPageUrlEnum: this.contextManager.currentRouteData?.route?.routeId ?? 0\n },\n releaseId\n };\n\n return this.ajax.apiRequest>('userExperience/recordEvent', undefined, data, 'POST');\n }\n}\n","import { get } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\nimport type AjaxService from '../ajax';\nimport type ContextManagerService from '../context-manager';\n\n/**\n * @classdesc\n * A service for managing modal dialogs.\n */\nexport default class VideoAnalyticsFirmwareManagerService extends Service {\n @service declare ajax: AjaxService;\n @service declare modals: ModalService;\n @service declare contextManager: ContextManagerService;\n @service declare intl: ADCIntlService;\n\n /**\n * Launches OV firmware and package upgrade modal if the correct OV package needs to be installed.\n *\n * @param OV camera model.\n * @param [onSuccessModal] Action to take when modal is successful.\n * @param [onCancelModal] Action to take when operation is cancelled.\n * @param [onValidationFailure] Action to take when given camera model is not valid for upgrade.\n * @param [isCalledFromBaaRoute=false] If supplied and true, OV Ready will be upgraded if camera.requiresOvReadyPackageUpdateForBaa is true\n * @param [isCalledFromBaaRuleGroupRoute=false] If supplied and true, OV Ready will be upgraded if camera.requiresOvReadyPackageUpdateForBaaGroups is true.\n */\n launchOvFirmwareUpgradeModalIfNecessary(\n camera: OvReadyCamera,\n onSuccessModal = () => {},\n onCancelModal = () => {},\n onValidationFailure = () => {},\n isCalledFromBaaRoute = false,\n isCalledFromBaaRuleGroupRoute = false\n ): void {\n const {\n id,\n description: cameraName,\n hasOvReadyPackageInstalled: cameraHasPackage,\n requiresFirmwareUpdate,\n latestFirmwareVersion: firmwareName,\n requiresOvReadyPackageUpdateForBaa: requiresPackageUpdate,\n requiresOvReadyPackageUpdateForBaaGroups: requiresPackageUpdateForGroups\n } = camera,\n modelName = get(camera.constructor, 'modelName');\n\n // Camera must be an OV camera and not have the package.\n const doesNotMeetBaaRequirements =\n !(isCalledFromBaaRoute || isCalledFromBaaRuleGroupRoute) ||\n (!requiresPackageUpdate && !requiresPackageUpdateForGroups);\n\n if (modelName !== 'video/devices/ov-ready-camera' || (cameraHasPackage && doesNotMeetBaaRequirements)) {\n onValidationFailure();\n return;\n }\n\n // If the user is creating a video analytics rule and selects a camera without an analytics package, we need to install a package first.\n const promiseFn = () => {\n return this.ajax\n .apiRequest(`video/devices/ovReadyCameras/initialize/${id}`)\n .then(() => camera.reload())\n .catch(({ errors: [{ detail }] }) => Promise.reject(detail));\n };\n\n const { intl } = this;\n\n let installConfirmation;\n if (!camera.supportsVmdSchedules) {\n installConfirmation = intl.tc(this, 'analyticsInstallationConfirmationWithoutVMD', { cameraName });\n } else if (requiresPackageUpdate || (isCalledFromBaaRuleGroupRoute && requiresPackageUpdateForGroups)) {\n installConfirmation = intl.tc(this, 'ovreadyUpgradeConfirmation', { cameraName });\n } else {\n installConfirmation = intl.tc(this, 'analyticsInstallationConfirmation', { cameraName });\n }\n\n // Use different body and button text for if the user is upgrading firmware and installing analytics versus just installing analytics.\n const shouldUpgradeFirmware = requiresFirmwareUpdate && firmwareName !== '',\n confirmationString = shouldUpgradeFirmware\n ? intl.tc(this, 'analyticsAndFirmwareConfirmation', { firmwareName })\n : installConfirmation,\n buttonString = intl.t(`generic.${shouldUpgradeFirmware ? 'upgrade' : 'ok'}`);\n\n this.modals.closeModal();\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => {\n // Show modal.\n this.modals.showPromiseModal({\n title: intl.tc(this, 'videoAnalyticsSetup'),\n promiseFn,\n stepConfirm: {\n bodyText: confirmationString,\n buttonText: buttonString,\n buttonCss: 'btn-color-primary',\n displayCancel: true,\n cancelOnClickFunction: onCancelModal\n },\n stepPromise: {\n bodyText: intl.tc(this, 'analyticsInstalling', { cameraName }),\n footerText: intl.tc(this, 'objectVideoTagline'),\n footerImagePath: this.contextManager.getStaticResourcePath('webimages/OVL_Brand_Logo.png'),\n footerImageAlt: intl.tc(this, 'objectVideoLogo'),\n displayCancel: false\n },\n stepSuccess: {\n bodyText: intl.tc(this, 'analyticsInstallationSuccessful'),\n buttonText: intl.t('generic.close'),\n buttonCss: 'btn-color-primary',\n successOnClickFunction: onSuccessModal\n },\n stepFailure: {\n bodyText: intl.tc(this, 'analyticsInstallationFailed'),\n buttonText: intl.t('generic.tryAgain'),\n buttonCss: 'btn-color-primary',\n showError: true,\n allowRetry: true,\n displayCancel: true,\n cancelOnClickFunction: onCancelModal\n }\n });\n });\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\nimport { SDCard, SVR } from 'customer-site/enums/ClipExportType';\nimport ClipExporter from './clip-exporter';\n\nimport type { TaskInstance } from 'ember-concurrency';\n\n/**\n * @classdesc\n * A service for downloading video clips.\n */\nexport default class ClipDownloader extends ClipExporter {\n /**\n * Task info for continuous SD card clip download\n */\n @tracked sdCardDownloadTaskInfo?: TaskInstance;\n\n /**\n * Task info for continuous SVR clip download\n */\n @tracked svrDownloadTaskInfo?: TaskInstance;\n\n /**\n * If any of the download tasks are currently running.\n */\n @computed('svrDownloadTaskInfo.isRunning', 'sdCardDownloadTaskInfo.isRunning')\n get isAnyDownloadTaskRunning(): boolean {\n const { svrDownloadTaskInfo, sdCardDownloadTaskInfo } = this,\n svrRunning = svrDownloadTaskInfo && svrDownloadTaskInfo.isRunning,\n sdRunning = sdCardDownloadTaskInfo && sdCardDownloadTaskInfo.isRunning;\n\n return !!(svrRunning || sdRunning);\n }\n\n /**\n * Asynchronously Download a clip.\n */\n downloadClipTask = task(\n this,\n { restartable: true },\n async (getDownloadUrlFn: () => Promise<{ value: string }>, handleDownload: (downloadUrl: string) => void) => {\n try {\n const downloadUrl = await getDownloadUrlFn();\n\n if (!downloadUrl || !downloadUrl.value) {\n console.error('Download URL could not be retrieved.');\n this.notifyClipExportFailed();\n return;\n }\n\n await handleDownload(downloadUrl.value);\n } catch (error) {\n this.notifyClipExportFailed(error);\n }\n }\n );\n\n /** @override */\n cancelClipExport(clipExportType: number): void {\n switch (clipExportType) {\n case SDCard:\n this.sdCardDownloadTaskInfo?.cancel();\n break;\n case SVR:\n this.svrDownloadTaskInfo?.cancel();\n break;\n default:\n console.log(`${clipExportType} clip export type is not recognized`);\n break;\n }\n }\n\n /**\n * Begin a clip download task.\n */\n downloadClip(\n clipExportType: number,\n requestDownloadUrl: () => Promise<{ value: string }>,\n handleDownload: (downloadUrl: string) => void\n ): void {\n switch (clipExportType) {\n case SDCard:\n this.sdCardDownloadTaskInfo = this.downloadClipTask.perform(requestDownloadUrl, handleDownload);\n break;\n case SVR:\n this.svrDownloadTaskInfo = this.downloadClipTask.perform(requestDownloadUrl, handleDownload);\n break;\n default:\n console.log(`${clipExportType} clip export type is not recognized`);\n break;\n }\n }\n}\n","import Service, { inject as service } from '@ember/service';\nimport { NotLoggedIn, ServerProcessingError, ServiceUnavailable } from '@adc/ajax/enums/AjaxResponseHttpCode';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * @classdesc\n * A service for exporting video clips.\n */\nexport default abstract class ClipExporter extends Service {\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n\n /**\n * The clip generation has failed serverside. Send a global notification.\n */\n notifyClipExportFailed(error?: any): void {\n const prefix = 'services.video.clip-exporter.',\n errors: { [key: number]: string } = {\n 400: 'badRequest',\n [NotLoggedIn]: 'unauthorized',\n 404: 'fileNotFound',\n [ServerProcessingError]: 'internalServerError',\n [ServiceUnavailable]: 'serviceNotAvailable'\n };\n\n if (error) {\n const keyFromErrorCode = errors[error.code],\n errorFromApiResponse = error.errors?.[0]?.detail;\n if (keyFromErrorCode || errorFromApiResponse) {\n this.notificationManager.addError(\n keyFromErrorCode ? this.intl.t(`${prefix}${keyFromErrorCode}`) : errorFromApiResponse\n );\n return;\n }\n }\n\n this.notificationManager.addError(this.intl.t(`${prefix}fileRequestError`));\n }\n\n /**\n * Cancel a clip export task.\n */\n abstract cancelClipExport(clipExportType: number): void;\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\nimport { SVR } from 'customer-site/enums/ClipExportType';\nimport ClipExporter from './clip-exporter';\n\nimport type { TaskInstance } from 'ember-concurrency';\n\n/**\n * @classdesc\n * A service for uploading video clips.\n */\nexport default class ClipUploader extends ClipExporter {\n /**\n * Task info for SVR clip upload\n */\n @tracked svrUploadTaskInfo?: TaskInstance;\n\n /**\n * Task info for SD clip upload\n */\n @tracked sdUploadTaskInfo?: TaskInstance;\n\n /**\n * If any of the upload tasks are currently running.\n */\n @computed('svrUploadTaskInfo.isRunning')\n get isAnyUploadTaskRunning(): boolean {\n const { svrUploadTaskInfo } = this,\n svrRunning = svrUploadTaskInfo && svrUploadTaskInfo.isRunning;\n\n return !!svrRunning;\n }\n\n /**\n * Asynchronously upload a clip.\n */\n uploadClipTask = task(\n this,\n { restartable: true },\n async (uploadClipFn: () => Promise<{ metaData: { UploadClipStatus: boolean } }>) => {\n try {\n const uploadClipResult = await uploadClipFn();\n\n if (!uploadClipResult || uploadClipResult.metaData?.['UploadClipStatus'] === false) {\n console.error('Upload Clip failed.');\n this.notifyClipExportFailed();\n return;\n }\n\n // Upload clip successfully.\n this.notificationManager.addInfo(this.intl.tc(this, 'uploadRequested'));\n return;\n } catch (error) {\n this.notifyClipExportFailed(error);\n }\n }\n );\n\n /** @override */\n cancelClipExport(clipExportType: number): void {\n switch (clipExportType) {\n case SVR:\n this.svrUploadTaskInfo?.cancel();\n break;\n default:\n console.log(`${clipExportType} clip export type is not recognized`);\n break;\n }\n }\n\n /**\n * Begin a clip upload task.\n */\n uploadClip(clipExportType: number, uploadClipFn: () => Promise<{ metaData: { UploadClipStatus: boolean } }>): void {\n switch (clipExportType) {\n case SVR:\n this.svrUploadTaskInfo = this.uploadClipTask.perform(uploadClipFn);\n break;\n default:\n console.log(`${clipExportType} clip export type is not recognized`);\n break;\n }\n }\n}\n","import Service from '@ember/service';\n\nexport const EVENT_CLEAR_SELECTED_DRAWING = 'clearSelectedDrawing';\n\n/**\n * TODO(VID-49776): The draw-window component needs to be refactored\n * to be reactive to its arguments, but in the meantime, this can\n * be used to send events from external components.\n */\nexport default class DrawWindowEventBus extends Service {}\n","import { action } from '@ember/object';\nimport Service from '@ember/service';\nimport { TrackedArray, TrackedMap } from 'tracked-built-ins';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type OnvifPtzPreset from 'customer-site/models/video/onvif-ptz-preset';\n\n/**\n * Service responsible for managing ONVIF PTZ Presets.\n */\nexport default class OnvifPtzPresetManagerService extends Service {\n /**\n * Presets grouped by camera id.\n */\n presetsByCameraId = new TrackedMap>();\n\n /**\n * Sets the presets available through this service.\n */\n @action setPresets(presets: ArrayProxy): void {\n // This rule is incorrectly applying for a map.\n // eslint-disable-next-line ember/no-array-prototype-extensions\n this.presetsByCameraId.clear();\n presets.forEach((preset) => {\n this.insertPreset(preset);\n });\n }\n\n /**\n * Inserts a preset into our grouped presets.\n */\n @action insertPreset(preset: OnvifPtzPreset): void {\n const { presetsByCameraId } = this;\n const cameraId = `${preset.unitId}-${preset.deviceId}`;\n\n if (!presetsByCameraId.has(cameraId)) {\n presetsByCameraId.set(cameraId, new TrackedArray());\n }\n\n presetsByCameraId.get(cameraId)!.push(preset);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Service from '@ember/service';\n\nimport type { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport type IntervalsGroup from 'customer-site/models/video/intervals-group';\nimport type SdCardVideoSource from 'customer-site/models/video/video-sources/sd-card-video-source';\nimport type SvrVideoSource from 'customer-site/models/video/video-sources/svr-video-source';\n\n/**\n * A VideoSource which contains Intervals.\n */\ntype PlaybackVideoSource = SdCardVideoSource | SvrVideoSource;\n\ninterface PlaybackInfo {\n /** Video source for this playback info instance. */\n videoSource: PlaybackVideoSource | null;\n /** Timestamp of when we retrieved the intervals. */\n intervalRetrievalTimestamp: number;\n}\n\ninterface PlaybackTimes {\n /** Timeline start time. */\n timelineStartTime: Date | null;\n /** Timeline end time. */\n timelineEndTime: Date | null;\n /** Current time within start and end. */\n currentTime: Date | null;\n}\n\n/**\n * Gets the key to use for inserting into or retrieving values from the dictionary.\n *\n * @param deviceIds The id(s) of the camera(s) to add to or retrieve from the cache.\n * @param playbackType The type of player (SD Card, SVR).\n */\nfunction getKeyForDictionary(deviceIds: string[], playbackType: StreamUsage): string {\n return playbackType + '_' + deviceIds.sort().join('_');\n}\n\n/**\n * Class for efficient management of video source and other data for cameras.\n *\n * @memberOf components.video.utils\n */\nexport default class PlaybackInfoCacheManager extends Service {\n /**\n * A dictionary that maps a camera's id to that camera's saved playback info.\n */\n @tracked cameraIdToPlaybackInfoMapping: Record = {};\n\n /**\n * A dictionary that maps a list of camera ids to that group's saved playback times.\n */\n @tracked camerasToPlaybackTimeMapping: Record = {};\n\n /**\n * Adds a camera's videoSource to the cache.\n *\n * @function\n * @param deviceId The id of the camera to add to the cache.\n * @param playbackType The type of player.\n * @param videoSource The videoSource model that is associated with that camera.\n */\n addVideoSourceToCache(deviceId: string, playbackType: StreamUsage, videoSource: PlaybackVideoSource): void {\n const key = getKeyForDictionary([deviceId], playbackType);\n this.cameraIdToPlaybackInfoMapping[key] = {\n videoSource,\n intervalRetrievalTimestamp: performance.now()\n };\n }\n\n /**\n * Adds a videoSource's intervals to the cache.\n *\n * @function\n * @param deviceId The id of the camera whose intervals we want to add to the cache.\n * @param playbackType The type of player.\n * @param intervals The intervals to add.\n */\n addIntervalsToCache(deviceId: string, playbackType: StreamUsage, intervals: IntervalsGroup): void {\n const key = getKeyForDictionary([deviceId], playbackType),\n playbackInfo = this.getPlaybackInfoFromCache(key);\n\n if (!playbackInfo || !playbackInfo.videoSource) {\n console.warn(\n `Unable to add intervals to cache because cameraIdToPlaybackInfoMapping has no videoSource entry for deviceId=${deviceId}, playbackType=${playbackType}.`\n );\n return;\n }\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This code should be replaced with `playbackInfo.videoSource.intervals.setObjects(intervals);`.\n playbackInfo.videoSource.intervals = intervals;\n playbackInfo.intervalRetrievalTimestamp = performance.now();\n this.cameraIdToPlaybackInfoMapping[key] = playbackInfo;\n }\n\n /**\n * Adds the timelineStartTime, timelineEndTime, and currentTime to the cache.\n *\n * @function\n * @param deviceIds The ids of the cameras whose playback times we want to add to the cache.\n * @param playbackType The type of player.\n * @param timelineStartTime The most recent timelineStartTime for the player.\n * @param timelineEndTime The most recent timelineEndTime for the player.\n * @param currentTime The most recent currentTime for the player.\n */\n addPlaybackTimesToCache(\n deviceIds: string[],\n playbackType: number,\n timelineStartTime: Date | null,\n timelineEndTime: Date | null,\n currentTime: Date | null\n ): void {\n if (!deviceIds?.length) {\n return;\n }\n\n const key = getKeyForDictionary(deviceIds, playbackType),\n playbackTimes = this.getPlaybackTimesFromCache(deviceIds, playbackType),\n start = timelineStartTime || playbackTimes.timelineStartTime,\n end = timelineEndTime || playbackTimes.timelineEndTime,\n current = currentTime || playbackTimes.currentTime;\n this.camerasToPlaybackTimeMapping[key] = {\n timelineStartTime: start,\n timelineEndTime: end,\n currentTime: current\n };\n }\n\n /**\n * Retrieves the playback info from the cache for a particular camera.\n * Returns null if there is no playback information available for that key.\n *\n * @function\n * @param key The key to use when inserting data into / retrieving data from the dictionary.\n */\n getPlaybackInfoFromCache(key: string): PlaybackInfo | null {\n return this.cameraIdToPlaybackInfoMapping[key];\n }\n\n /**\n * Retrieves the videoSource model from the cache for a particular camera.\n *\n * @function\n * @param {string} deviceId The id of the camera to retrieve the videoSource for.\n * @param {number} playbackType The type of player.\n */\n getVideoSourceFromCache(deviceId: string, playbackType: number): PlaybackVideoSource | null {\n const key = getKeyForDictionary([deviceId], playbackType),\n playbackInfo = this.getPlaybackInfoFromCache(key);\n return playbackInfo?.videoSource ?? null;\n }\n\n /**\n * Retrieves the intervals from the cache for a particular camera.\n *\n * If it has been longer than this time, the intervals are old and should be retrieved again.\n *\n * @function\n * @param deviceId The id of the camera to retrieve the videoSource for.\n * @param playbackType The type of player.\n * @param maxTimeToUseOldCoverage The number of milliseconds to use the current coverage data for.\n */\n getIntervalsFromCache(\n deviceId: string,\n playbackType: number,\n maxTimeToUseOldCoverage: number\n ): IntervalsGroup | null {\n const videoSource = this.getVideoSourceFromCache(deviceId, playbackType);\n if (!videoSource) {\n return null;\n }\n\n const coverageRetrievalTimestamp = this.getIntervalRetrievalTimestampFromCache(deviceId, playbackType);\n if (performance.now() - coverageRetrievalTimestamp > maxTimeToUseOldCoverage) {\n const key = getKeyForDictionary([deviceId], playbackType);\n delete this.cameraIdToPlaybackInfoMapping[key];\n return null;\n }\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error The return type of this method should be: `AsyncBelongsTo | null`.\n return videoSource.intervals;\n }\n\n /**\n * Retrieves the time value when the most recent intervals were placed into the cache.\n * Returns 0 if there is no entry in the cache for that camera.\n *\n * @function\n * @param deviceId The id of the camera to retrieve the timestamp for.\n * @param playbackType The type of player.\n */\n getIntervalRetrievalTimestampFromCache(deviceId: string, playbackType: number): number {\n const key = getKeyForDictionary([deviceId], playbackType),\n playbackInfo = this.getPlaybackInfoFromCache(key);\n return playbackInfo?.intervalRetrievalTimestamp ?? 0;\n }\n\n /**\n * Retrieves the playback times from the cache for a particular camera.\n *\n * @function\n * @param deviceIds The ids of the cameras to retrieve the playback times for.\n * @param playbackType The type of player.\n */\n getPlaybackTimesFromCache(deviceIds: string[], playbackType: number): PlaybackTimes {\n const key = getKeyForDictionary(deviceIds, playbackType),\n playbackTimes = this.camerasToPlaybackTimeMapping[key];\n return {\n timelineStartTime: playbackTimes?.timelineStartTime,\n timelineEndTime: playbackTimes?.timelineEndTime,\n currentTime: playbackTimes?.currentTime\n };\n }\n}\n","import { schedule } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { Calibrated } from 'customer-site/enums/CalibrationStatus';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\nimport type PrivacyZonesSetting from 'customer-site/models/video/privacy-zones-setting';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * A service for managing privacy zones modals.\n */\nexport default class PrivacyZonesManager extends Service {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n @service declare notificationManager: NotificationManager;\n\n /**\n * Launches disable privacy zones modal if any privacy zones are enabled.\n *\n * @param camera OV camera model.\n * @param [onSuccessModal=VoidFn] Action to take when modal is successful.\n * @param [onCancelModal=VoidFn] Action to take when operation is cancelled.\n * @param [onValidationFailure=VoidFn] Used only for testing.\n */\n launchDisablePrivacyZonesModalIfNecessary(\n camera: OvReadyCamera,\n onSuccessModal = () => {},\n onCancelModal = () => {},\n onValidationFailure = () => {}\n ): void {\n // If the camera is already calibrated, there's no need to temporarily disable privacy zones.\n if (camera.calibrationStatus?.value === Calibrated) {\n onValidationFailure();\n return;\n }\n\n // Always convert privacy zones setting to a promise.\n Promise.resolve(camera.privacyZonesSetting).then((privacyZonesSetting: PrivacyZonesSetting) => {\n // If no zones are enabled, we can return.\n if (!privacyZonesSetting?.someZonesEnabled) {\n onValidationFailure();\n return;\n }\n\n // Define properties for the modal.\n const { intl } = this,\n buttonCss = 'btn-color-primary',\n promiseFn = () => {\n return this.ajax\n .apiRequest(`video/privacyZonesSettings/${camera.id}/pause`, undefined, null, 'PUT')\n .then(() => Promise.resolve())\n .catch(({ errors: [{ detail }] }) => Promise.reject(detail));\n };\n\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => {\n // Show modal.\n this.modals.showPromiseModal({\n title: intl.tc(this, 'disablePrivacyZones'),\n promiseFn,\n stepConfirm: {\n bodyText: intl.tc(this, 'disablePrivacyZonesConfirmation'),\n buttonText: intl.t('generic.ok'),\n buttonCss,\n displayCancel: true,\n cancelOnClickFunction: onCancelModal\n },\n stepPromise: {\n bodyText: intl.tc(this, 'disablePrivacyZonesInProgress'),\n displayCancel: false\n },\n stepSuccess: {\n bodyText: intl.tc(this, 'disablePrivacyZonesSuccessful'),\n buttonText: intl.t('generic.close'),\n buttonCss,\n successOnClickFunction: onSuccessModal\n },\n stepFailure: {\n bodyText: intl.tc(this, 'disablePrivacyZonesFailed'),\n buttonText: intl.t('generic.tryAgain'),\n buttonCss,\n showError: true,\n allowRetry: true,\n displayCancel: true,\n cancelOnClickFunction: onCancelModal\n }\n });\n });\n });\n }\n\n /**\n * Attempts to enable privacy zones and display a success/failure notification.\n *\n * @param camera OV camera model.\n * @param onSuccess Action to take when privacy zones are successfully enabled.\n * @param onValidationFailure Action to take when given camera doesn't have any privacy zones that need to be re-enabled.\n * @param shouldReloadOnSuccess Whether to reload the privacy zones on success.\n */\n enablePrivacyZonesAndDisplayNotification(\n camera: OvReadyCamera,\n onSuccess = () => {},\n onValidationFailure = () => {},\n shouldReloadOnSuccess = true\n ): void {\n const { ajax, intl, notificationManager } = this;\n\n // Always convert privacy zones setting to a promise.\n Promise.resolve(camera.privacyZonesSetting).then((privacyZonesSetting: PrivacyZonesSetting) => {\n // If no zones exist or they're not paused, we can return.\n if (\n !privacyZonesSetting ||\n !Object.keys(privacyZonesSetting.privacyZones).length ||\n !privacyZonesSetting.someZonesPaused\n ) {\n onValidationFailure();\n return;\n }\n\n ajax.apiRequest(`video/privacyZonesSettings/${camera.id}/resume`, undefined, null, 'PUT')\n .then(() => {\n if (shouldReloadOnSuccess) {\n // Refresh the model to reflect that the privacy zones have been re-enabled.\n privacyZonesSetting.reload().then(() => {\n notificationManager.addSuccess(intl.tc(this, 'enablePrivacyZonesSuccessful'));\n });\n }\n\n onSuccess();\n })\n .catch(() => notificationManager.addError(intl.tc(this, 'enablePrivacyZonesFailed')));\n });\n }\n}\n","import { setProperties } from '@ember/object';\nimport { cancel, later, run } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { GET, POST } from '@adc/ajax/services/adc-ajax';\n\nimport type Store from '@ember-data/store';\nimport type { EmberRunTimer } from '@ember/runloop/types';\nimport type AjaxService from 'customer-site/services/ajax';\n\nexport const POLL_WAIT_TIME_MS = 2000;\n\ninterface SnapshotPollResult {\n data?: [\n {\n attributes: { error: string; url: string };\n id: string;\n type: string;\n }\n ];\n}\n\n/**\n * Creates query string from IDs.\n */\nfunction createQueryString(ids: string[]): string {\n return ids.map((id) => `ids${encodeURIComponent('[]')}=${id}`).join('&');\n}\n\n/**\n * @classdesc A service for polling snapshots.\n */\nexport default class SnapshotPoller extends Service {\n @service declare store: Store;\n @service declare ajax: AjaxService;\n\n /**\n * IDs of snapshots to poll. Initially set to empty array, but updated as the service is used.\n */\n idsToPoll: string[] = [];\n\n /**\n * Poll timer, if we have one.\n */\n declare pollTimer: EmberRunTimer;\n\n /**\n * Polls for specified IDs.\n */\n poll = task({ drop: true }, async (startPoll: boolean, ids: string[]) => {\n const { pollTimer, ajax, store, idsToPoll } = this;\n const idsForUrl = idsToPoll.concat(ids.filter((id) => !idsToPoll.includes(id)));\n let idsForNextPoll: string[] = [];\n\n // Cancel timer if it exists and we're starting poll\n if (startPoll && pollTimer) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n cancel(pollTimer);\n }\n\n try {\n const data = (\n await ajax.apiRequest(\n `video/snapshots/${(startPoll ? 'startPoll' : 'poll') + '?' + createQueryString(idsForUrl)}`,\n undefined,\n null,\n startPoll ? POST : GET\n )\n ).data;\n\n const recordIds = data?.mapBy('id');\n\n idsForNextPoll = idsForUrl.filter((id: any) => !recordIds?.includes(id));\n\n // Push records we have\n if (data?.length) {\n // Have to use run for tests\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n run(() => store.push({ data }));\n }\n } catch (err) {\n return false;\n }\n\n // Poll for the rest\n if (idsForNextPoll.length) {\n setProperties(this, {\n idsToPoll: idsForNextPoll,\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n pollTimer: later(this, this.poll.perform, false, idsToPoll, POLL_WAIT_TIME_MS)\n });\n }\n\n return true;\n });\n}\n","import Service, { inject as service } from '@ember/service';\nimport { compare } from '@ember/utils';\nimport { EmberEnterpriseVideoLiveView, EmberVideoLiveView } from 'customer-site/enums/CustomerPageUrl';\nimport { getStringArrayIfJsonString } from 'customer-site/utils/json';\nimport {\n COOKIE_SELECTED_CAMERA_GROUP,\n COOKIE_SELECTED_CAMERAS,\n getCookieForPage\n} from 'customer-site/utils/video/cookies';\nimport VideoPreloaderDetail from 'customer-site/utils/video/video-preloader-detail';\nimport { getLiveViewDisplayableCameraGroups } from 'customer-site/video/video-streaming-features-route';\n\nimport type CookieManager from '@adc/app-infrastructure/services/cookie-manager';\nimport type Store from '@ember-data/store';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type IdentityManager from '../identity-manager';\nimport type NavigationService from '../navigation';\n\nconst NUM_CAMERAS_TO_PRELOAD = 5;\n\n/**\n * Service for preloading WebRTC streams.\n */\nexport default class VideoPreloaderService extends Service {\n @service declare cookieManager: CookieManager;\n @service declare identityManager: IdentityManager;\n @service declare navigation: NavigationService;\n @service declare store: Store;\n\n /**\n * Has preload started?\n */\n preloadStarted = false;\n\n /**\n * The list of cameras to preload.\n */\n private cameras: Camera[] = [];\n\n /**\n * The details of video preloaders.\n */\n private videoPreloaderDetails: Record = {};\n\n /**\n * Loads the camera models to be preloaded.\n */\n private async loadCameras(): Promise {\n const liveViewInContext = this.identityManager.isEnterprise ? EmberEnterpriseVideoLiveView : EmberVideoLiveView,\n routeName = this.navigation.getRouteItem(liveViewInContext)?.url;\n\n if (!routeName) {\n // If we can't get a live view route item, we don't have access to live view in general. Skip preloading.\n return;\n }\n\n // We'll either preload the first camera group, or a group or specific set of cameras based on cookies.\n // First check for a cookie for cameras.\n const camerasCookie = getCookieForPage.call(this, routeName, COOKIE_SELECTED_CAMERAS);\n if (camerasCookie != null) {\n const cameraIds = getStringArrayIfJsonString(camerasCookie);\n if (cameraIds) {\n this.cameras = (\n await this.store.query('video/devices/camera', { ids: cameraIds.slice(0, NUM_CAMERAS_TO_PRELOAD) })\n ).slice();\n\n if (this.cameras.length > 0) {\n return;\n }\n }\n\n // If we can't parse the camera cookie or we get no cameras, we can default back to first group.\n }\n\n // Otherwise check for camera groups.\n const cameraGroups = [...(await getLiveViewDisplayableCameraGroups(this.store))].sort((a, b) =>\n compare(a.order, b.order)\n );\n\n // We'll preload the first camera group, unless the browser has a cookie specifying another group.\n let cameraGroup = cameraGroups[0];\n\n const cameraGroupCookie = getCookieForPage.call(this, routeName, COOKIE_SELECTED_CAMERA_GROUP);\n if (cameraGroupCookie != null) {\n const cameraGroupByCookie = cameraGroups.find((cameraGroup) => cameraGroup.id === cameraGroupCookie);\n if (cameraGroupByCookie) {\n cameraGroup = cameraGroupByCookie;\n }\n }\n\n if (!cameraGroup) {\n return;\n }\n\n this.cameras = (await cameraGroup.orderedCameras).slice(0, NUM_CAMERAS_TO_PRELOAD);\n }\n\n /**\n * Starts streaming for all loaded cameras.\n */\n async startAllStreams(): Promise {\n const webrtcPreloadingSupport = this.identityManager?.identityModel?.webrtcPreloadingSupportEnum;\n\n // Don't start another preload unless the flag is set back to false, or if there's no preloading support.\n if (this.preloadStarted || !webrtcPreloadingSupport) {\n return;\n }\n\n this.preloadStarted = true;\n\n await this.loadCameras();\n\n if (!this.cameras) {\n return;\n }\n\n const onDisconnectedCallback = (playerId: string): void => {\n delete this.videoPreloaderDetails[playerId];\n };\n\n this.cameras.forEach((camera: Camera) => {\n if (camera.supportsStreamPreloading) {\n const preloader = new VideoPreloaderDetail(\n this,\n camera,\n webrtcPreloadingSupport,\n onDisconnectedCallback.bind(this)\n );\n this.videoPreloaderDetails[preloader.playerId] = preloader;\n preloader.startStream();\n }\n });\n }\n\n /**\n * Gets the video preloader detail by player ID.\n */\n getVideoPreloaderDetail(playerId: string): VideoPreloaderDetail | undefined {\n return this.videoPreloaderDetails[playerId];\n }\n\n /**\n * Resets and reloads preloaded streams.\n */\n resetPreloadedStreams(): void {\n if (!this.preloadStarted) {\n return;\n }\n\n Object.entries(this.videoPreloaderDetails).forEach(\n ([, preloaderDetail]: [id: string, preloaderDetail: VideoPreloaderDetail]) => {\n preloaderDetail.rtcPlayer?.disconnectStream('', true);\n }\n );\n\n this.videoPreloaderDetails = {};\n this.preloadStarted = false;\n\n this.startAllStreams();\n }\n}\n","import Service, { inject as service } from '@ember/service';\nimport { Activated, Cancelled } from 'customer-site/enums/CameraSirenStatus';\n\nimport type Store from '@ember-data/store';\nimport type CameraSiren from 'customer-site/models/video/camera-siren';\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * Service responsible for managing camera Warning Sound requests.\n */\nexport default class WarningSound extends Service {\n @service declare store: Store;\n @service declare ajax: AjaxService;\n\n /**\n * Request that the Warning Sound be started.\n *\n * @param siren\n */\n async start(siren: CameraSiren): Promise {\n return await this.requestSirenStateChange(siren, Activated);\n }\n\n /**\n * Request that the Warning Sound be stopped.\n *\n * @param siren\n * @param isForTwoWayAudio is the siren being stopped so 2WA can start?\n */\n async stop(siren: CameraSiren, isForTwoWayAudio: boolean): Promise {\n siren.isTwoWayAudio = isForTwoWayAudio;\n return await this.requestSirenStateChange(siren, Cancelled);\n }\n\n /**\n * Request that all Warning Sounds be stopped.\n */\n cancelAll(): Promise {\n return this.ajax.apiRequest('api/video/cameraSirens/cancelAll');\n }\n\n /**\n * Request that all Warning Sounds be triggered.\n */\n triggerAll(): Promise {\n return this.ajax.apiRequest('api/video/cameraSirens/triggerAll');\n }\n\n /**\n * Request for the given camera siren be transitioned to the provided status.\n * @param siren siren object to transition\n * @param status status that the siren should transition into\n * @private\n */\n private async requestSirenStateChange(siren: CameraSiren, status: number): Promise {\n siren.status = status;\n siren.isAlreadyRequested = false;\n\n let updatedSiren: CameraSiren | undefined;\n try {\n updatedSiren = await siren.save();\n if (updatedSiren.error) {\n return;\n }\n } catch {\n return;\n }\n\n return updatedSiren;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport Service from '@ember/service';\nimport { inject as service } from '@ember/service';\nimport { getErrorText } from 'customer-site/utils/ember';\nimport { task, timeout } from 'ember-concurrency';\nimport { X_VV_CUSTOMER } from '../adapters/visual-verification-base-adapter';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type VisualVerificationAlarm from 'customer-site/models/visual-verification/alarm';\nimport type VisualVerificationEvent from 'customer-site/models/visual-verification/event';\nimport type PageFeature from 'customer-site/models/visual-verification/page-feature';\nimport type SessionDeviceLink from 'customer-site/models/visual-verification/session-device-link';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { Resolved } from 'customer-site/utils/type-utils';\n\nconst PollingFrequencyMs = 15000;\n\nexport default class VisualVerificationService extends Service {\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare identityManager: IdentityManager;\n @service declare ajax: AjaxService;\n @service declare notificationManager: NotificationManager;\n @service declare envSettings: EnvSettingsService;\n\n @tracked alarms?: VisualVerificationAlarm[] | Resolved>;\n @tracked events?: VisualVerificationEvent[] | Resolved>;\n @tracked lastAlarmDate?: string;\n @tracked sessionNumber?: number;\n @tracked totalSessions?: number;\n @tracked start?: Date;\n @tracked end?: Date;\n @tracked previousSessionDate?: string;\n @tracked nextSessionDate?: string;\n @tracked sessionDeviceLinks?: SessionDeviceLink[];\n @tracked pageFeatures?: PageFeature;\n\n async loadSession(cdqlEnabled: boolean, sessionDate?: string): Promise {\n const { store } = this;\n if (cdqlEnabled) {\n const sessions = sessionDate\n ? await store.query('visual-verification/session', {\n forDate: sessionDate\n })\n : await store.findAll('visual-verification/session');\n const session = sessions.firstObject;\n this.alarms = session?.alarms;\n this.events = session?.events;\n !sessionDate && (this.lastAlarmDate = session?.lastAlarmDate?.toISOString());\n this.sessionNumber = session?.sessionNumber;\n this.totalSessions = session?.totalSessions;\n this.start = session?.start;\n this.end = session?.end;\n this.previousSessionDate = session?.previousSessionDate?.toISOString();\n this.nextSessionDate = session?.nextSessionDate?.toISOString();\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error We should either change the type of `sessionDeviceLinks` to `SyncHasMany<>`, or this code should be replace with: `this.sessionDeviceLinks = session?.sessionDeviceLinks.toArray();`.\n this.sessionDeviceLinks = session?.sessionDeviceLinks;\n } else {\n this.alarms = (await store.findAll('visual-verification/alarm')).sortBy('eventDateUtc').reverse();\n this.events = await store.findAll('visual-verification/event');\n }\n this.pageFeatures = (await this.store.findAll('visual-verification/page-feature')).slice()[0];\n }\n\n convertTime(timestamp: string | Date, timeFormat = 'longTimeFormat') {\n const { intl } = this;\n\n return intl.formatDateTz(timestamp, { format: timeFormat });\n }\n\n /**\n * Method that returns CID in headers\n */\n headerWithCID(): { headers: { [X_VV_CUSTOMER]: string } } {\n return { headers: { [X_VV_CUSTOMER]: this.identityManager.getSelectedSystemId() || '' } };\n }\n\n /**\n * Is this a Visual Verification session?\n *\n * @returns {boolean}\n */\n @reads('identityManager.identityModel.isVisualVerification')\n declare isVisualVerification: boolean;\n\n /**\n * Polls the backend to check if new alarms have been uploaded.\n * If they have, displays a notification to refresh the page.\n */\n checkForNewAlarms = task({ drop: true }, async () => {\n for (;;) {\n try {\n const newAlarms = await this.ajax.apiRequest(\n `visualverification/alarms/new?afterDate=${this.lastAlarmDate}`\n );\n if (newAlarms) {\n this.notificationManager.addNotification(\n this.intl.t('generic.visualVerification.newAlarmsAvailable'),\n 'info',\n [\n {\n text: this.intl.t('generic.visualVerification.refresh'),\n icon: 'refresh',\n action: () => {\n // Hide all open notifications\n this.notificationManager.hideNotifications();\n return this.loadSession(true);\n }\n }\n ],\n 10000\n );\n }\n } catch (error) {\n const errorText = getErrorText(error)!;\n errorText && this.notificationManager.addError(errorText);\n }\n // We can't run intervals in the automated tests because it causes them to hang since the promise never settles. So the below IF is needed in order to avoid an infinite loop while running the test.\n if (this.envSettings.isTestEnvironment()) {\n return;\n }\n await timeout(PollingFrequencyMs);\n }\n });\n\n /**\n * Cancel tasks when leaving route.\n */\n @action\n cancelTasks(): void {\n this.checkForNewAlarms.cancelAll();\n }\n}\n","import Service, { inject as service } from '@ember/service';\n\nimport type RouterService from '@ember/routing/router-service';\nimport type AjaxService from './ajax';\nimport type ContextManager from './context-manager';\n\n/**\n * @classdesc\n *\n * Service for handling storage of previous route transitions and triggering events inside of json wizards.\n * This service will probably be extracted into an addon at a later date.\n */\nexport default class WizardManager extends Service {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare router: RouterService;\n\n /**\n * The root directory of the Wizard json assets.\n */\n wizardAssetPath = '/web/wizardAssets';\n\n /**\n * Handler for any errors that occured within the app.\n *\n * @param {*} error - the error that occured.\n * @param {string} errorRecoveryUrl - optional URL that the wizard was instructed to go to in the event of an error.\n *\n */\n onError(/* error, errorRecoveryUrl */): boolean {\n // For the default implementation we just return true, which will bubble the error up the route tree.\n return true;\n }\n\n /**\n * Callback that is executed on every step change by adc-wizard.\n */\n onStepChanged(step: string): void {\n const page = `${window.location.pathname}/${step}`;\n\n // Send to our IIS logs.\n this.ajax.apiRequest(`swa/routeTransition/?page=${encodeURIComponent(page)}`);\n }\n\n /**\n * Callback this is executed anytime the Wizard changes its title.\n */\n onTitleChanged(pageTitle: string): void {\n this.contextManager.setCurrentRouteData(\n {\n pageTitle,\n isWizard: true\n },\n false\n );\n }\n}\n","import EmberController from '@ember/controller';\n\n/**\n * @classdesc\n *\n * TODO: Add description.\n *\n * @class settings.control-panel-settings.Controller\n * @extends Ember.Controller\n */\nexport default class BaseControlPanelSettingsController extends EmberController {}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\n// import { EmberSettingsControlPanel } from 'customer-site/enums/CustomerPageUrl';\n/**\n * @classdesc\n *\n * Control Panel Settings page\n *\n * @class settings.panel-settings.Route\n * @extends AdcBaseRoute\n */\nexport default class BaseControlPanelSettingsRoute extends AdcBaseRoute {\n // routeId = EmberSettingsControlPanel;\n\n isMediumWidthPage = true;\n}\n","import Controller from '@ember/controller';\nimport { set } from '@ember/object';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport {\n processValidationErrors,\n getValidationErrorsFromResponse,\n clearValidationErrors\n} from '@adc/ajax/utils/validation-error-processing';\nimport { reject } from 'rsvp';\n\nimport type { ApiError } from '@adc/ajax/services/adc-ajax';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * Sets sensitive properties to null.\n */\nfunction resetSensitiveProperties(this: BaseLoginInformationController): void {\n this.getSensitiveProperties().forEach((property) => {\n this.set(property, undefined);\n });\n}\n\n/**\n * @classdesc\n * Base controller for all login information routes.\n */\nexport default class BaseLoginInformationController extends Controller {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare media: ServiceRegistry['media'];\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n /**\n * List of errors returned from api call.\n */\n errors?: Record;\n\n /**\n * Sensitive properties that should be reset when transitioning away from login information route.\n */\n getSensitiveProperties(): string[] {\n return ['currentPassword'];\n }\n\n /**\n * Helper method for making an asynchronous api request.\n *\n * @param {Function} fnRequest - The request function which needs to return a promise.\n * @param {Promise} buttonAnimation - The button's promise that allows us to take action after the button finishes animating.\n * @param {String} [successMessage] - The optional success message to display.\n * @param {Function=} fnAfterButtonAnimation\n *\n * @returns {Promise}\n */\n submitApiRequest(\n fnRequest: () => Promise,\n buttonAnimation: Promise,\n successMessage?: string,\n fnAfterButtonAnimation?: VoidFunction\n ): Promise {\n clearValidationErrors.call(this);\n\n const promise = fnRequest();\n\n // This code will execute once the button finishes animating.\n if (fnAfterButtonAnimation) {\n buttonAnimation.then((isSuccess) => {\n if (isSuccess !== false) {\n fnAfterButtonAnimation.call(this);\n }\n });\n }\n\n // Show success message after promise resolves if one was defined.\n if (successMessage) {\n promise.then(() => this.notificationManager.addSuccess(successMessage));\n }\n\n resetSensitiveProperties.call(this);\n\n // Process errors if they exist.\n promise.catch((response) => {\n set(this, 'errors', getValidationErrorsFromResponse(response));\n processValidationErrors.call(this, this.errors);\n const contextManager = this.contextManager;\n\n let responseErrors = response.errors,\n responseData: {\n isLockedOut?: boolean;\n logoutUrl?: string;\n } = {};\n\n // Responses that pass in dictionaries from the back-end have different structures.\n if (responseErrors.errors) {\n responseErrors = responseErrors.errors;\n }\n\n if (responseErrors[0].data) {\n responseData = responseErrors[0].data || {};\n }\n\n (responseErrors || [])\n .filter(\n (error: ApiError & { status: string }) =>\n error.source && error.source.pointer && error.status !== '422'\n )\n .forEach((error: ApiError & { status: string }) => {\n if (this.notificationManager) {\n this.notificationManager.addError(error.detail);\n }\n });\n\n const isLockedOut = responseData.isLockedOut,\n logoutUrl = responseData.logoutUrl;\n\n if (isLockedOut) {\n // Redirect to the logoutUrl if it exists, or logout after a delay so user can see the message.\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n later(() => {\n logoutUrl ? contextManager.transitionToUrl(logoutUrl, true) : contextManager.logout(false);\n }, 1000);\n }\n\n // Bubble the rejection up to the button.\n return reject(response);\n });\n\n return promise;\n }\n\n /**\n * List of properties that should be reset when controller exists.\n *\n * @note Format is Array of arrays where the inner array's first item is key(String) and second item is object(value to reset the key to).\n */\n getPropertiesToResetOnExit(): (keyof BaseLoginInformationController)[][] {\n return [];\n }\n\n /**\n * Resets data on the controller.\n */\n resetData(): void {\n clearValidationErrors.call(this);\n resetSensitiveProperties.call(this);\n\n (this.getPropertiesToResetOnExit() || []).forEach(([key, value]) => set(this, key, value as this[typeof key]));\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type BaseController from './base-controller';\n\n/**\n * @classdesc\n * Base route used for all login information routes.\n */\nexport default class BaseLoginInformationRoute extends AdcBaseRoute {\n declare currentModel: { profile?: Promise };\n\n isMediumWidthPage = true;\n\n resetController(controller: BaseController): void {\n if (controller) {\n controller.resetData();\n }\n }\n\n async rollbackModelOnTransition(): Promise {\n (await this.currentModel.profile)?.rollback();\n }\n}\n","import AdcBaseRoute from '../../classes/base-route';\n\nimport type System from 'customer-site/models/systems/system';\n\n/**\n * @classdesc\n * Route to the panel wifi network scan page\n */\nexport default class BasePanelWifiRoute extends AdcBaseRoute {\n /** @override */\n model(): { system: Promise } {\n return {\n system: this.identityManager.getSelectedSystem(false)\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { action, computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\nimport { SourceOfCustomerMap } from 'customer-site/enums/SourceOfCustomerMap';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type { SafeString } from '@ember/template';\nimport type SmartCoverageDiscountType from 'customer-site/enums/SmartCoverageDiscountType';\nimport type Property from 'customer-site/models/smart-coverage/property';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type Navigation from 'customer-site/services/navigation';\nimport type SmartCoverageRoute from 'customer-site/smart-coverage/route';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\n\nconst imagePaths = {\n residential: {\n dark: '/images/smart-coverage/smartcoverageresidentiallogodark.png',\n light: '/images/smart-coverage/smartcoverageresidentiallogolight.png'\n },\n business: {\n dark: '/images/smart-coverage/smartcoveragebusinesslogodark.png',\n light: '/images/smart-coverage/smartcoveragebusinesslogolight.png'\n },\n generic: {\n dark: '/images/smart-coverage/smartcoveragegenericlogodark.png',\n light: '/images/smart-coverage/smartcoveragegenericlogolight.png'\n },\n about: {\n residential: 'images/smart-coverage/smartcoverageaboutresidential.jpg',\n business: 'images/smart-coverage/smartcoverageaboutbusiness.jpeg'\n }\n};\n\n/**\n * @classdesc\n *\n * Handles redirecting the user to insurance application or the intermediary page\n */\nexport default class SmartCoverageGetStartedController extends Controller {\n @service declare contextManager: ContextManager;\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n @service declare navigation: Navigation;\n @service declare identityManager: IdentityManager;\n @service declare modals: ModalService;\n\n /**\n * Query parameter of the customers source\n */\n queryParams = ['mktsrc'];\n\n /**\n * Mapping the incoming query parameter to the valid SourceOfCustomer enum. If the query parameter is not valid, it will default to Unknown.\n */\n mktsrc = SourceOfCustomerMap[SourceOfCustomerMap.Unknown];\n\n /**\n * Model of the properties and policy type.\n */\n declare model: ResolvedModelFrom;\n\n /**\n * If the desired policy type has not been selected, we must show the policy type selection component.\n */\n @computed('model.policyType')\n get displayPolicySelection(): boolean {\n const { model } = this;\n return model.policyType === SmartCoveragePolicyType.None && !model.showErrorPage;\n }\n\n @tracked learnMoreClick = false;\n\n /**\n * Gets the page title depending on policy type.\n */\n get title(): SafeString {\n return htmlSafe(\n this.intl.tc(\n this,\n this.model.policyType == SmartCoveragePolicyType.Residential\n ? 'smartCoverageResidentialTitle'\n : 'smartCoverageBusinessTitle'\n )\n );\n }\n\n /**\n * Gets the primary image path depending on policy type.\n */\n get aboutImagePath(): string {\n const { model } = this;\n const policyType = model.policyType === SmartCoveragePolicyType.Residential ? 'residential' : 'business';\n return imagePaths.about[policyType];\n }\n\n /**\n * Gets the page subtitle depending on policy type.\n */\n get subTitle(): SafeString {\n const { model, identityManager, intl } = this;\n const subtitle = this.currentSelectedPropertyIfEligible\n ? model.policyType === SmartCoveragePolicyType.Residential\n ? 'smartCoverageResidentialSubtitle'\n : 'smartCoverageBusinessSubtitle'\n : model.policyType === SmartCoveragePolicyType.Residential\n ? 'smartCoverageSubtitleResidentialAlternate'\n : 'smartCoverageSubtitleBusinessAlternate';\n\n return htmlSafe(\n intl.tc(this, subtitle, {\n dealerName: identityManager.identityModel?.logoName\n })\n );\n }\n\n /**\n * Gets the text for the about description depending on policy type.\n */\n get aboutDescription(): string {\n const { model, intl, identityManager } = this;\n const aboutDescription =\n model.policyType === SmartCoveragePolicyType.Residential\n ? 'smartCoverageResidentialAboutDescription'\n : 'smartCoverageBusinessAboutDescription';\n return intl.tc(this, aboutDescription, {\n dealerName: identityManager.identityModel?.logoName\n });\n }\n\n /**\n * The image path for the Smart Coverage logo based on the selected policy type and the user's dark mode preference.\n */\n get logoPath(): string {\n const { model, identityManager } = this;\n const darkModeEnabled = identityManager.isDarkModeEnabled;\n const policyType = model.policyType === SmartCoveragePolicyType.Residential ? 'residential' : 'business';\n const mode = darkModeEnabled ? 'dark' : 'light';\n return imagePaths[policyType][mode];\n }\n\n /**\n * The image path for the Smart Coverage logo when a dark mode variant is needed regarless of the user's dark mode preference.\n */\n get logoPathDark(): string {\n const { model } = this;\n const policyType = model.policyType === SmartCoveragePolicyType.Residential ? 'residential' : 'business';\n return imagePaths[policyType].dark;\n }\n\n /**\n * Gets the Smart Coverage generic logo, primarily used for the policy type selection and error message components.\n */\n get genericLogoPath(): string {\n const { identityManager } = this;\n const darkModeEnabled = identityManager.isDarkModeEnabled;\n const mode = darkModeEnabled ? 'dark' : 'light';\n return imagePaths['generic'][mode];\n }\n\n /**\n * Properties that the customer login has access to. The key is the property id and the value is a boolean indicating if the property is selected.\n */\n get properties(): { [key: string]: boolean } {\n const { model } = this;\n return Object.fromEntries(\n model.properties\n .filter((property) => property.policyType === model.policyType)\n .map(({ id, isEligible }) => [id, !!isEligible])\n );\n }\n\n /**\n * The text for the first step of the Smart Coverage process.\n */\n get stepOne(): SafeString {\n const { model, intl } = this;\n return htmlSafe(\n model.policyType === SmartCoveragePolicyType.Residential\n ? intl.tc(this, 'stepOneTextResidential')\n : intl.tc(this, 'stepOneTextBusiness')\n );\n }\n\n /**\n * The text for the third step of the Smart Coverage process.\n */\n get stepThree(): string {\n const { model, intl } = this;\n return model.policyType === SmartCoveragePolicyType.Residential\n ? intl.tc(this, 'stepThreeTextResidential')\n : intl.tc(this, 'stepThreeTextBusiness');\n }\n\n /**\n * Is the currently selected property eligible for Smart Coverage based on the selected policy type?\n */\n get currentSelectedPropertyIfEligible(): Property | undefined {\n const { model } = this;\n return model.properties.find(\n (property) => property.isDefaultProperty && property.isEligible && property.policyType === model.policyType\n );\n }\n\n /**\n * Gets the most relevant discounts to display based on the selected policy type.\n */\n get discountsForCards(): SmartCoverageDiscountType[] {\n const { model } = this;\n const defaultProperty = this.currentSelectedPropertyIfEligible;\n if (defaultProperty) {\n return defaultProperty.discounts;\n }\n const eligibleProperties = this.model.properties.filter(\n (property) => property.isEligible && property.policyType === model.policyType\n );\n const allDiscounts = eligibleProperties.map((property) => property.discounts);\n return allDiscounts && allDiscounts.length > 0 ? allDiscounts.sort((a, b) => b.length - a.length)[0] : [];\n }\n\n /**\n * Gets the id to insert into the template to assist google tag manager in understand the pages context.\n */\n get id(): string {\n return this.model.policyType == SmartCoveragePolicyType.Residential ? 'lp_is_residential' : 'lp_is_business';\n }\n\n /**\n * Determines if the selected policy is commercial.\n */\n get isCommercial(): boolean {\n return this.model.policyType == SmartCoveragePolicyType.Commercial;\n }\n\n /**\n * Toggles the visibility of the \"Learn More\" content.\n */\n @action\n toggleLearnMore(): void {\n this.learnMoreClick = !this.learnMoreClick;\n }\n\n /**\n * Updates the model with the selected policyType.\n * @param policyType\n */\n @action\n updatePolicyType(policyType: SmartCoveragePolicyType): void {\n set(this.model, 'policyType', policyType);\n }\n\n /**\n * Returns text from the resource file with the terms and privacy being links to external pages.\n * @returns An HTML safe string\n */\n get termsAndPrivacyDescription(): SafeString {\n const { model } = this;\n const termsAndPrivacyDesc =\n model.policyType === SmartCoveragePolicyType.Residential\n ? 'termsAndPrivacyDescResidential'\n : 'termsAndPrivacyDescBusiness';\n return htmlSafe(\n this.intl.tc(this, termsAndPrivacyDesc, {\n privacyAnchor: this.anchorHtml(\n 'https://www.smartcoverage.com/privacy-policy/?OpenExternally=true',\n 'privacyPolicy'\n ),\n licensesAnchor: this.anchorHtml(\n 'https://www.smartcoverage.com/licenses/?OpenExternally=true',\n 'smartCoverageLicenses'\n ),\n dealerName: this.identityManager.identityModel?.logoName\n })\n );\n }\n\n /**\n * Helper function to generate the anchor tags displayed on the page\n * @param {String} href - The URL the navigate to\n * @param {String} resourceKey - The resource key to use for the link's text\n * @returns An HTML anchor element as a string\n */\n anchorHtml(href: string, resourceKey: string): string {\n return `${this.intl.tc(this, resourceKey)}`;\n }\n}\n\ndeclare module '@ember/controller' {\n interface Registry {\n 'smart-coverage/index': SmartCoverageGetStartedController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberSmartCoverageGetStarted } from 'customer-site/enums/CustomerPageUrl';\n\nexport default class GetStartedRoute extends AdcBaseRoute {\n /** @override */\n routeId = EmberSmartCoverageGetStarted;\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport ENV from 'customer-site/config/environment';\nimport { EmberSmartCoverageGetStarted } from 'customer-site/enums/CustomerPageUrl';\nimport SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\n\nimport type Property from 'customer-site/models/smart-coverage/property';\nimport type AdcGtm from 'customer-site/services/adc-gtm';\n\ninterface SmartCoverageRouteModel {\n properties: Property[];\n showErrorPage: boolean;\n policyType: SmartCoveragePolicyType;\n}\n\nexport default class SmartCoverageRoute extends AdcBaseRoute {\n /** @override */\n routeId = EmberSmartCoverageGetStarted;\n\n @service declare adcGtm: AdcGtm;\n\n /**\n * Activates Google Tag Manager\n */\n activate(): void {\n this.adcGtm.add(ENV.APP.GTM_ID);\n }\n\n /**\n * Deactivates Google Tag Manager\n */\n deactivate(): void {\n this.adcGtm.remove();\n }\n\n /**\n * Constructs the model to pass down to the controller\n * @returns An interface of the properties and policy type.\n */\n model(): Promise {\n return this.store.query('smart-coverage/property', {}).then((propertiesArray) => {\n const properties = propertiesArray.map((property) => property);\n const hasCommercial = properties.some(\n (property) => property.isEligible && property.policyType === SmartCoveragePolicyType.Commercial\n );\n const hasResidential = properties.some(\n (property) => property.isEligible && property.policyType === SmartCoveragePolicyType.Residential\n );\n // Determine the policy type based on the properties the user has access to. If the user has both commercial and residential properties, the policy type will default to None and the user must select.\n const policyType: SmartCoveragePolicyType =\n hasCommercial && !hasResidential\n ? SmartCoveragePolicyType.Commercial\n : hasResidential && !hasCommercial\n ? SmartCoveragePolicyType.Residential\n : SmartCoveragePolicyType.None;\n return {\n properties,\n showErrorPage: !hasCommercial && !hasResidential, // Show error page if the user does not have an eligible property for commerical or residential.\n policyType\n };\n });\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\nimport { SourceOfCustomerMap } from 'customer-site/enums/SourceOfCustomerMap';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type Property from 'customer-site/models/smart-coverage/property';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type SmartCoverageRoute from 'customer-site/smart-coverage/route';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\n\nconst imagePaths = {\n residential: {\n dark: '/images/smart-coverage/smartcoverageresidentiallogodark.png',\n light: '/images/smart-coverage/smartcoverageresidentiallogolight.png'\n },\n business: {\n dark: '/images/smart-coverage/smartcoveragebusinesslogodark.png',\n light: '/images/smart-coverage/smartcoveragebusinesslogolight.png'\n }\n};\n\nexport default class SmartCoverageSelectPropertiesController extends Controller {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare identityManager: IdentityManager;\n @service declare modals: ModalService;\n\n /**\n * Query parameter of the customers source\n */\n queryParams = ['mktsrc'];\n\n /**\n * Mapping the incoming query parameter to the valid SourceOfCustomer enum. If the query parameter is not valid, it will default to Unknown.\n */\n mktsrc = SourceOfCustomerMap[SourceOfCustomerMap.Unknown];\n\n /**\n * Model of the properties, policy type.\n */\n declare model: ResolvedModelFrom;\n\n /**\n * The search string that is used to filter the list of properties.\n */\n @tracked searchString = '';\n\n /**\n * The state of the 'Select All' checkbox.\n */\n @tracked isAllSelected = true;\n\n /**\n * The eligible Smart Coverage properties that have been selected by the user.\n */\n @tracked selectedLocations: Record = {};\n\n /**\n * Should the selection be multi-select?\n */\n get isMultiSelect(): boolean {\n const { model } = this;\n return model.policyType === SmartCoveragePolicyType.Commercial;\n }\n\n /**\n * The image path for the Smart Coverage logo.\n */\n get logoPath(): string {\n const { model } = this;\n const darkModeEnabled = this.identityManager.isDarkModeEnabled;\n const policyType = model.policyType === SmartCoveragePolicyType.Residential ? 'residential' : 'business';\n const mode = darkModeEnabled ? 'dark' : 'light';\n return imagePaths[policyType][mode];\n }\n\n /**\n * Gets the correct message depending on the policy type.\n */\n get multiLocationMessage(): string {\n const { model, intl } = this;\n return model.policyType === SmartCoveragePolicyType.Residential\n ? intl.tc(this, 'multiLocationMessageResidential')\n : intl.tc(this, 'multiLocationMessageCommercial');\n }\n\n /**\n * Determines if the selected policy type is commercial.\n */\n get isCommercial(): boolean {\n return this.model.policyType === SmartCoveragePolicyType.Commercial;\n }\n\n /**\n * The filtered list of properties based on the search string.\n */\n get filteredLocations(): Property[] {\n const { model, searchString } = this;\n const lowerSearchString = searchString.toLowerCase();\n return model.properties\n .filter(\n (property: Property) =>\n property.policyType === model.policyType &&\n (property.name.toLowerCase().includes(lowerSearchString) ||\n property.address.toLowerCase().includes(lowerSearchString))\n )\n .sort((a, b) => (b.isEligible ? 1 : 0) - (a.isEligible ? 1 : 0) || a.name.localeCompare(b.name));\n }\n\n /**\n * Gets the id to insert into the template to assist google tag manager in understand the pages context.\n */\n get id(): string {\n return this.model.policyType == SmartCoveragePolicyType.Residential\n ? 'residential_select_locations'\n : 'business_select_locations';\n }\n\n /**\n * Updates filteredLocations to locations that match the current search string.\n * The search string is compared with the name and address of each property.\n */\n @action\n applySearchFn(searchString: string): void {\n this.searchString = searchString;\n }\n\n /**\n * Selects a location based on the id.\n */\n @action\n buttonSelected(id: string): void {\n const { model } = this;\n // If the policy is residential, only one property can be selected at a time.\n if (model.policyType === SmartCoveragePolicyType.Residential) {\n model.properties.forEach((property) => {\n if (property.isEligible && property.policyType === model.policyType) {\n this.selectedLocations[property.id] = false;\n }\n });\n }\n // Update the selected locations by including the new selection.\n this.selectedLocations = {\n ...this.selectedLocations,\n [id]: !this.selectedLocations[id]\n };\n // Update the 'Select All' toggle depending on if all eligible locations are selected.\n const isAllLocationsSelected = Object.values(this.selectedLocations).every((selected) => selected);\n this.isAllSelected = isAllLocationsSelected;\n }\n\n /**\n * Toggles the selection of all locations based on the state of the select all checkbox.\n */\n @action\n toggleSelectAll(toggleEvent: Event & { target: HTMLInputElement }): void {\n // If the passed event is undefined, and the toggle is not selected, do not clear the selected properties.\n if (!toggleEvent?.target && !this.isAllSelected) {\n return;\n }\n this.selectAll(toggleEvent?.target ? toggleEvent.target.checked : this.isAllSelected);\n }\n\n /**\n * Initializes the selection of all properties. This is called from the did-insert in the template.\n */\n @action\n selectAllInit(): void {\n this.selectAll(true);\n }\n\n /**\n * Shareable logic to perform the select all action.\n */\n selectAll(doEnable: boolean): void {\n const { model } = this;\n this.isAllSelected = doEnable;\n const newSelectedLocations = { ...this.selectedLocations };\n model.properties.forEach((property) => {\n if (property.isEligible && property.policyType === model.policyType) {\n newSelectedLocations[property.id] = this.isAllSelected;\n }\n });\n this.selectedLocations = newSelectedLocations;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'smart-coverage/select-properties': SmartCoverageSelectPropertiesController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberSmartCoverageGetStarted, EmberSmartCoverageSelectProperties } from 'customer-site/enums/CustomerPageUrl';\nimport SmartCoveragePolicyType from 'customer-site/enums/SmartCoveragePolicyType';\n\nimport type Navigation from 'customer-site/services/navigation';\nimport type SmartCoverageRoute from 'customer-site/smart-coverage/route';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\n\nexport default class SelectPropertiesRoute extends AdcBaseRoute {\n /** @override */\n routeId = EmberSmartCoverageSelectProperties;\n\n @service declare navigation: Navigation;\n\n /**\n * Redirects the user to the landing page if the user does not have a selected policy type.\n */\n afterModel(model: ResolvedModelFrom): void {\n if (model.policyType === SmartCoveragePolicyType.None) {\n this.navigation.transitionToRouteId(EmberSmartCoverageGetStarted);\n }\n }\n}\n","import { isPresent } from '@ember/utils';\nimport AdcBaseRoute from '../classes/base-route';\n\n/**\n * @classdesc\n * Base class for SSO routes.\n *\n * @note This will need to be redone so that it is more flexible and so that routes themselves do not remember the DestinationRouteId.\n * @note We can probably use a single template for all of these SSO routes that just contains the iframe.\n */\nexport default abstract class BaseSsoRoute extends AdcBaseRoute {\n queryParams = {\n redirect: {\n refreshModel: true,\n defaultValue: ''\n }\n };\n\n /**\n * The ID of the destination page for SSO.\n */\n abstract destinationPage: number;\n\n async model({ redirect }: { redirect?: string }): Promise {\n // Trigger a request to get the right URL.\n const request = [`sso/getUrl/${this.destinationPage}`];\n\n // Add the redirectTo parameter if a redirect URL was passed into this route.\n if (isPresent(redirect)) {\n request.push(`?redirectTo=${redirect}`);\n }\n\n try {\n const { url, showInIframe } = await this.ajax.apiRequestForValue<{ url: string; showInIframe?: boolean }>(\n request.join('')\n );\n\n if (showInIframe) {\n return url;\n }\n\n // Redirect to the url we got\n // By using replace() instead of assign(), we do not add the sso redirect page to the browser history,\n // which allows users to use the browser back button to go back to ember pages from sso-served pages.\n window.location.replace(url);\n } catch (ex) {\n // Show error\n this.notificationManager.addError(ex.errors[0].detail);\n\n // Transition to whatever the main route is.\n this.router.transitionTo('index');\n\n return Promise.reject(ex);\n }\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport { A } from '@ember/array';\nimport EmberObject from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport setDay from 'date-fns/setDay';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { TimetableScheduleDay } from 'customer-site/models/access-control/access-control-timetable';\n\ninterface TimetableScheduleDayServerSide {\n day: number;\n startMinutesLocal: number;\n endMinutesLocal?: number;\n durationMinutes: number;\n}\n\n/**\n * @classdesc\n * Access control schedule transform.\n */\nexport default class AccessControlSchedule extends Transform {\n @service declare intl: ADCIntlService;\n\n /**\n * Serialize the Ember array back into the server side object.\n */\n serialize(schedule: TimetableScheduleDay[]): TimetableScheduleDayServerSide[] {\n return schedule.reduce((scheduleDictionary, { day, startMinutesLocal, endMinutesLocal }, index) => {\n scheduleDictionary[index] = {\n day,\n startMinutesLocal,\n durationMinutes: endMinutesLocal - startMinutesLocal\n };\n return scheduleDictionary;\n }, {} as TimetableScheduleDayServerSide[]);\n }\n\n /**\n * Deserialize the server side schedule dictionary into Ember array of schedule days.\n *\n * @override\n */\n deserialize(scheduleDictionary: TimetableScheduleDayServerSide[]): ReturnType> {\n const { intl } = this,\n now = new Date();\n\n return A(\n Object.keys(scheduleDictionary || {}).map((scheduleDay) => {\n const { startMinutesLocal, durationMinutes, day } = scheduleDictionary[Number(scheduleDay)];\n\n return EmberObject.create({\n // @ts-expect-error TypeScript doesn't understand EmberObject, please refactor this to not use EmberObject.\n day,\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n dayString: intl.formatDate(setDay(now, day), {\n weekday: 'long'\n }),\n startMinutesLocal,\n endMinutesLocal: startMinutesLocal + durationMinutes\n }) as TimetableScheduleDay;\n })\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'access-control-schedule': TimetableScheduleDay;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\n\nimport type { DayTime } from 'customer-site/models/commercial/schedules/arming-schedule';\n\nexport interface DayTimeMapServerSide {\n [key: number]: {\n StartTime: number;\n EndTime: number;\n IsRearming: boolean;\n }[];\n}\n\n/**\n * @classdesc\n * Arming Schedule DayTime transform.\n */\nexport default class ArmingScheduleDayTime extends Transform {\n /**\n * Serialize the Ember map back to the backend model.\n */\n serialize(timeDay: Map): DayTimeMapServerSide {\n const serverModel = {} as DayTimeMapServerSide;\n\n timeDay?.forEach((val, key) => {\n serverModel[key] = val.map((time) => {\n return {\n StartTime: time.startTime,\n EndTime: time.endTime,\n IsRearming: time.isRearming\n };\n });\n });\n\n return serverModel;\n }\n\n /**\n * Deserialize the server side time dictionary to an ember map.\n *\n * @override\n */\n deserialize(timeDictionary: DayTimeMapServerSide): Map {\n const dayMap = new Map() as Map;\n\n Object.keys(timeDictionary || {}).map((objKey) => {\n const times = timeDictionary[Number(objKey)];\n\n const newTimes = times.map((time) => {\n return {\n startTime: time.StartTime ?? 0,\n endTime: time.EndTime ?? 0,\n isRearming: time.IsRearming\n } as DayTime;\n });\n\n dayMap.set(Number(objKey), newTimes);\n });\n\n return dayMap;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'arming-schedule-day-time': ArmingScheduleDayTime;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport { isEmpty } from '@ember/utils';\nimport IconMap from '../enums/IconMap';\nimport ComplexIconData from '../utils/transforms-objects/complex-icon-data';\n\nimport type { IconPayload } from './icon-data';\n\nexport interface ComplexIconPayload extends IconPayload {\n subIcon: number;\n source: number;\n format: number;\n}\n\n/**\n * @classdesc\n *\n * Transforms the Icon enum received from the backend into an object that contains the icon string\n * and additional properties for displaying icons that may contain secondary icons (e.g. colored light color).\n */\nexport default class ComplexIconDataTransform extends Transform {\n /**\n * Converts the icon's enum integer value into the string value so the correct SVG can be used,\n * and provides computed properties to help with displaying the icon (and any secondary icons, e.g. colored light's color)\n */\n deserialize(serialized: ComplexIconPayload): ComplexIconData | null {\n if (isEmpty(serialized)) {\n return null;\n }\n\n return new ComplexIconData({\n ...serialized,\n ...{\n icon: (IconMap as Record)[serialized.icon],\n subIcon: (IconMap as Record)[serialized.subIcon]\n }\n });\n }\n\n /* eslint-disable no-empty-function, no-unused-vars */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n serialize(_: any): null {\n // No need to edit the icon information, but we need a serialize method defined.\n return null;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'complex-icon-data-transform': ComplexIconDataTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport { FisheyeMode } from '@oecommon/oscar-js';\n\n// TODO(VID-72068): Remove this and use generic transform\n// TODO(VID-67697): look into using an enum for backend values of 0,1,2,3\nexport default class FisheyeModeTransform extends Transform {\n deserialize(serialized: null | 0 | 1 | 2 | 3): FisheyeMode {\n switch (serialized) {\n case 0:\n return FisheyeMode.Original;\n case 1:\n return FisheyeMode.SplitPanorama;\n case 2:\n return FisheyeMode.Panorama;\n case 3:\n return FisheyeMode.Ptz;\n default:\n return FisheyeMode.Original;\n }\n }\n\n serialize(deserialized: FisheyeMode | null): 0 | 1 | 2 | 3 {\n switch (deserialized) {\n case FisheyeMode.Original:\n return 0;\n case FisheyeMode.SplitPanorama:\n return 1;\n case FisheyeMode.Panorama:\n return 2;\n case FisheyeMode.Ptz:\n return 3;\n default:\n return 0;\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transforms.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'fisheye-mode': FisheyeModeTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\n\n/**\n * @classdesc\n *\n * Transforms a beckend HeatmapParameters object into one with camelCase attributes\n * and Date objects.\n *\n * @class transforms.HeatMapParameterTransform\n * @extends Transform\n * @memberOf transforms\n */\nexport default class HeatMapParameterTransform extends Transform {\n /**\n * Converts attributes to camelCase and converts date strings to Date objects.\n *\n * @param serialized\n * @returns {{cameraId: String, endDate: Date, startDate: Date}}\n */\n deserialize(serialized) {\n return {\n cameraId: serialized.CameraId,\n startDate: new Date(serialized.StartDate ?? 0),\n endDate: new Date(serialized.EndDate ?? 0)\n };\n }\n\n /**\n * Converts a camelCased object into a backend HeatmapParameters object.\n *\n * @param deserialized\n * @returns {{StartDate: *, EndDate: *, CameraId: *}}\n */\n serialize(deserialized) {\n return {\n CameraId: deserialized.cameraId,\n StartDate: deserialized.startDate,\n EndDate: deserialized.endDate\n };\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport IconMap from '../enums/IconMap';\nimport IconData from '../utils/transforms-objects/icon-data';\n\ntype IconMapEnum = typeof IconMap;\n\nexport interface IconPayload {\n icon: number;\n color?: string;\n cssClass?: string;\n}\n\n/**\n * @classdesc\n * Transforms the Icon enum received from the backend into an object that contains the icon string and additional properties for displaying icons.\n */\nexport default class IconDataTransform extends Transform {\n /**\n * Converts the icon's enum integer value into the string value so the correct SVG can be used.\n */\n deserialize(serialized: IconPayload): IconData {\n // Transform icon id to icon name and return IconData.\n return new IconData({\n ...serialized,\n icon: IconMap[serialized.icon as keyof IconMapEnum]\n });\n }\n\n /**\n * Converts the icon's string value to the corresponding enum integer value.\n */\n serialize(iconData: IconData): IconPayload {\n if (!iconData) {\n return iconData;\n }\n\n const icon = parseInt(\n Object.keys(IconMap).find((key) => IconMap[key as unknown as keyof IconMapEnum] === iconData.icon) as string\n );\n return {\n ...iconData,\n ...{ icon }\n };\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'icon-data-transform': IconDataTransform;\n }\n}\n","import TemporaryScheduleTransform from 'customer-site/transforms/temporary-schedule';\nimport LoginTemporarySchedule from 'customer-site/utils/transforms-objects/login-temporary-schedule';\n\nimport type { TempScheduleParams } from '../utils/transforms-objects/temporary-schedule';\n\n/**\n * @classdesc\n * Transforms the data sent/received corresponding to a {@link objects.LoginTemporarySchedule} object.\n */\nexport default class LoginTemporaryScheduleTransform extends TemporaryScheduleTransform {\n /** @override */\n createNewTemporarySchedule(schedule: TempScheduleParams): LoginTemporarySchedule {\n return new LoginTemporarySchedule(this, schedule);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'login-temporary-schedule-transform': LoginTemporaryScheduleTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\n\nexport interface PanTiltPreset {\n id: string;\n name: string;\n iconClass: string;\n}\n\ninterface BackendPanTilt {\n Id: string;\n Name: string;\n IconClass: string;\n}\n\n/**\n * @classdesc\n *\n * Transforms a backend list of PanTiltPresets into a list of objects with camelCase attributes.\n */\nexport default class PanTiltPresetListTransform extends Transform {\n /**\n * Converts a backend PanTiltPreset list into a list of camelCased objects.\n */\n deserialize(serialized: BackendPanTilt[]): PanTiltPreset[] {\n if (serialized) {\n return serialized.map((preset) =>\n Object.create({\n id: preset.Id,\n name: preset.Name,\n iconClass: preset.IconClass\n })\n );\n }\n return [];\n }\n\n /**\n * Converts a list of camelCased objects into a backend PanTiltPreset list.\n */\n serialize(deserialized: PanTiltPreset[]): BackendPanTilt[] {\n if (deserialized) {\n return deserialized.map((preset) =>\n Object.create({\n Id: preset.id,\n Name: preset.name,\n IconClass: preset.iconClass\n })\n );\n }\n return [];\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'pan-tilt-preset-list': PanTiltPreset[];\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport { isPresent } from '@ember/utils';\n\n/**\n * @classdesc\n * Transforms the Icon enum received from the backend into an object that contains the icon string and additional properties for displaying icons.\n */\nexport default class RuleExtraDataTransform extends Transform {\n /**\n * Converts String to Record\n */\n deserialize(extraData: string): Record {\n return (extraData ?? '').split(',').reduce((result, item) => {\n const [k, v] = item.split(':');\n return {\n ...result,\n [k]: v\n };\n }, {});\n }\n\n /**\n * Converts Record to string\n */\n serialize(extraData: Record): string {\n return (Object.keys(extraData) as string[])\n .filter((key) => isPresent(extraData[key]))\n .map((key) => key + ':' + extraData[key])\n .join(',');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'rule-extra-data': RuleExtraDataTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\n\nexport interface SerializedRuleGroupInfo {\n RuleGroupId: string;\n ThresholdIndex: number;\n}\n\nexport interface RuleGroupInfo {\n ruleGroupId: string;\n thresholdIndex: number;\n}\n\n/**\n * Transforms a backend RuleGroupInfo object into one with camelCase attributes.\n */\nexport default class RuleGroupInfoListTransform extends Transform {\n /**\n * Converts attributes to camelCase and converts date strings to Date objects.\n */\n deserialize(serialized: SerializedRuleGroupInfo[]): RuleGroupInfo[] {\n return (serialized ?? []).map((s: SerializedRuleGroupInfo) => ({\n ruleGroupId: s.RuleGroupId,\n thresholdIndex: s.ThresholdIndex\n }));\n }\n\n /**\n * Converts a camelCased object into a backend RuleIdInfo object.\n */\n serialize(deserialized: RuleGroupInfo[]): SerializedRuleGroupInfo[] {\n return (deserialized ?? []).map((d: RuleGroupInfo) => ({\n RuleGroupId: d.ruleGroupId,\n ThresholdIndex: d.thresholdIndex\n }));\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'rule-group-info-list': RuleGroupInfoListTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\n\nexport interface SerializedRuleIdInfo {\n RuleId: string;\n PersonCountThresholdIndex: number;\n WaitTimeThresholdIndex: number;\n}\n\nexport interface RuleIdInfo {\n ruleId: string;\n personCountThresholdIndex: number;\n waitTimeThresholdIndex: number;\n}\n\n/**\n * Transforms a beckend RuleIdInfo object into one with camelCase attributes\n * and Date objects.\n */\nexport default class RuleIdInfoListTransform extends Transform {\n /**\n * Converts attributes to camelCase and converts date strings to Date objects.\n */\n deserialize(serialized: SerializedRuleIdInfo[]): RuleIdInfo[] {\n return serialized.map((s: SerializedRuleIdInfo) => ({\n ruleId: s.RuleId,\n personCountThresholdIndex: s.PersonCountThresholdIndex,\n waitTimeThresholdIndex: s.WaitTimeThresholdIndex\n }));\n }\n\n /**\n * Converts a camelCased object into a backend RuleIdInfo object.\n */\n serialize(deserialized: RuleIdInfo[]): SerializedRuleIdInfo[] {\n return deserialized.map((d: RuleIdInfo) => ({\n RuleId: d.ruleId,\n PersonCountThresholdIndex: d.personCountThresholdIndex,\n WaitTimeThresholdIndex: d.waitTimeThresholdIndex\n }));\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'rule-id-info-list': RuleIdInfoListTransform;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Transform from '@ember-data/serializer/transform';\nimport { action, computed, setProperties } from '@ember/object';\nimport { MobileAppAsKeyLogin } from 'customer-site/enums/LoginRole';\n\n/**\n * The backend's representation of the role the login has on a system or system group.\n */\nexport interface SerializeSystemGroupLoginRolesItem {\n IdentifierId: number;\n HasBeenModified: boolean;\n Role: string | null;\n LoginFeatureAccessLevels: number[];\n UserTypePermissions: Record;\n}\n\n/**\n * The login role id associated with a login not having a direct role on the system or group.\n */\nexport const NO_DIRECT_ACCESS_LOGIN_ROLE_ID = '-1';\n\n/**\n * The login role id for the mobile app as key login.\n */\nexport const MOBILE_APP_AS_KEY_LOGIN_ROLE_ID = MobileAppAsKeyLogin.toString();\n\n/**\n * The login or customer roles that a login has on a system or group. Determines if the roles associated\n * with the login on the system or group has changed as well.\n */\nexport class LoginRoleOnSystemOrGroup {\n constructor(role: string | null) {\n setProperties(this, {\n role,\n originalRole: role\n });\n }\n\n /**\n * The login or customer role the login has on a system or group.\n */\n @tracked\n declare role: string | null;\n\n /**\n * The original login or customer role the login has on the system or group.\n */\n declare originalRole: string | null;\n\n /**\n * The custom customer roles assigned to the login.\n */\n @tracked\n loginFeatureAccessLevels?: number[];\n\n /**\n * The original login feature access levels the login has on the system or group.\n */\n originalLoginFeatureAccessLevels?: number[];\n\n /**\n * The custom user type permissions assigned to the login.\n */\n @tracked\n userTypePermissions?: Record;\n\n /**\n * The original user type permissions the login has on the system or group.\n */\n originalUserTypePermissions?: Record;\n\n /**\n * Have the role that this login has on the system or group changed?\n */\n @computed('loginFeatureAccessLevelsHaveBeenModified', 'role', 'originalRole', 'userTypePermissionsHaveBeenModified')\n get hasBeenModified(): boolean {\n return (\n this.role !== this.originalRole ||\n this.loginFeatureAccessLevelsHaveBeenModified ||\n this.userTypePermissionsHaveBeenModified\n );\n }\n\n /**\n * Has the custom, login feature access levels changed for this login?\n */\n get loginFeatureAccessLevelsHaveBeenModified(): boolean {\n const { loginFeatureAccessLevels, originalLoginFeatureAccessLevels } = this;\n if (!loginFeatureAccessLevels || !originalLoginFeatureAccessLevels) {\n return false;\n }\n\n return (\n loginFeatureAccessLevels.length !== originalLoginFeatureAccessLevels.length ||\n !loginFeatureAccessLevels.every((role) => originalLoginFeatureAccessLevels.includes(role))\n );\n }\n\n /**\n * Has the custom, user type permissions changed for this login?\n */\n get userTypePermissionsHaveBeenModified(): boolean {\n const { userTypePermissions, originalUserTypePermissions } = this;\n if (!userTypePermissions || !originalUserTypePermissions) {\n return false;\n }\n\n const userTypeKeys = Object.keys(userTypePermissions),\n originalUserTypeKeys = Object.keys(originalUserTypePermissions);\n\n return (\n userTypeKeys.length !== originalUserTypeKeys.length ||\n !userTypeKeys.every((key) => userTypePermissions[Number(key)] === originalUserTypePermissions[Number(key)])\n );\n }\n\n /**\n * Adds a role to this login on the system or group.\n *\n * @param roleToAdd\n */\n @action\n addRole(roleToAdd: string | null): void {\n if (roleToAdd === null) {\n return;\n }\n\n this.role = roleToAdd;\n }\n\n /**\n * Remove a role from the login on the system or group.\n */\n @action\n removeRole(): void {\n this.role = null;\n }\n\n /**\n * Resets to the original login role.\n */\n @action\n resetRole(): void {\n Object.assign(this, {\n role: this.originalRole,\n loginFeatureAccessLevels: this.originalLoginFeatureAccessLevels\n });\n }\n}\n\nexport default class SystemGroupLoginRolesListTransform extends Transform {\n /**\n * Converts attributes to a dictionary (JS object) with the key as the system or system group id\n * and the value as a LoginRoleOnSystemOrGroup object.\n *\n * @param serialized\n */\n deserialize(\n serialized: SerializeSystemGroupLoginRolesItem[] | null\n ): { [index: string]: LoginRoleOnSystemOrGroup } | null {\n if (!serialized) {\n return null;\n }\n\n // Stores a map between a system or system group id and a LoginRoleOnSystemOrGroup object.\n const systemGroupToRolesDictionary: { [index: string]: LoginRoleOnSystemOrGroup } = {};\n serialized.map((serializedItem) => {\n systemGroupToRolesDictionary[serializedItem.IdentifierId] = new LoginRoleOnSystemOrGroup(\n serializedItem.Role || null\n );\n });\n\n return systemGroupToRolesDictionary;\n }\n\n /**\n * Modifies the 'dictionary' of system or system group id to customer roles mappings to be easier to process for the backend.\n *\n * @param deserialized\n */\n serialize(deserialized: { [index: string]: LoginRoleOnSystemOrGroup }): SerializeSystemGroupLoginRolesItem[] {\n const modifiedLoginRoles = [];\n for (const [identifierId, customerRolesOnGroup] of Object.entries(deserialized)) {\n modifiedLoginRoles.push({\n IdentifierId: identifierId,\n HasBeenModified: customerRolesOnGroup.hasBeenModified,\n Role: customerRolesOnGroup.role || null,\n LoginFeatureAccessLevels: customerRolesOnGroup.loginFeatureAccessLevels || [],\n UserTypePermissions: customerRolesOnGroup.userTypePermissions\n ? this.serializeUserTypePermissions(customerRolesOnGroup.userTypePermissions)\n : null\n } as unknown as SerializeSystemGroupLoginRolesItem);\n }\n\n return modifiedLoginRoles;\n }\n\n /**\n * Serializes the dictionary of user type to access level into 'userTypeId-accessLevelId'\n */\n private serializeUserTypePermissions(userTypePermissions: Record) {\n const serializedUserTypePermissions: string[] = [];\n for (const userTypePermissionsKey in userTypePermissions) {\n serializedUserTypePermissions.push(\n `${userTypePermissionsKey}-${userTypePermissions[userTypePermissionsKey]}`\n );\n }\n\n return serializedUserTypePermissions;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'system-group-login-roles-list': SystemGroupLoginRolesListTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport isDate from 'date-fns/isDate';\nimport TemporarySchedule from '../utils/transforms-objects/temporary-schedule';\n\nimport type { TempScheduleParams } from '../utils/transforms-objects/temporary-schedule';\n\ninterface TemporarySchedulePayload {\n beginDateTime?: Date | string;\n endDateTime?: Date | string;\n}\n\n/**\n * @classdesc\n * Transforms the data sent/received corresponding to a {@link objects.TemporarySchedule} object.\n */\nexport default class TemporaryScheduleTransform extends Transform {\n /**\n * Transforms the JSON data sent from the server into a schedule object.\n */\n deserialize(payload?: TemporarySchedulePayload): TemporarySchedule | null {\n if (!payload) {\n return null;\n }\n\n const schedule = ['beginDateTime', 'endDateTime'].reduce(\n (values: TempScheduleParams, n: 'beginDateTime' | 'endDateTime') => {\n let v = payload[n];\n if (v !== undefined) {\n if (isDate(v)) {\n values[n] = v as Date;\n } else if (typeof v === 'string') {\n if (v.slice(-1) !== 'Z') {\n v = `${v}Z`;\n }\n\n values[n] = new Date(v);\n }\n }\n\n return values;\n },\n {}\n );\n\n return (schedule && this.createNewTemporarySchedule(schedule)) ?? null;\n }\n\n /**\n * Transforms the data sent to the server.\n */\n serialize(schedule?: TemporarySchedule): TempScheduleParams | null {\n return schedule?.isValid ? schedule.toJSON() : null;\n }\n\n /**\n * Creates new Temporary Schedule model.\n */\n createNewTemporarySchedule(schedule: TempScheduleParams): TemporarySchedule {\n return new TemporarySchedule(this, schedule);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'temporary-schedule-transform': TemporaryScheduleTransform;\n }\n}\n","import Transform from '@ember-data/serializer/transform';\nimport WeeklySchedule from '../utils/transforms-objects/weekly-schedule';\n\nimport type { WeeklyScheduleParams } from '../utils/transforms-objects/weekly-schedule';\n\n/**\n * @classdesc\n * Transforms the data sent/received corresponding to a weekly schedule.\n *\n * @note A weekly schedule might be MWF from 9am-5pm.\n */\nexport default class WeeklyScheduleTransform extends Transform {\n /**\n * Transforms the JSON data sent from the server into a schedule object.\n */\n deserialize(schedule?: WeeklyScheduleParams): WeeklySchedule | null {\n return (\n (schedule &&\n new WeeklySchedule(this, {\n ...schedule\n })) ??\n null\n );\n }\n\n /**\n * Transforms the data sent to the server.\n */\n serialize(schedule?: WeeklySchedule): WeeklyScheduleParams | null {\n return schedule?.isValid ? schedule.toJSON() : null;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your transform.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'weekly-schedule-transform': WeeklyScheduleTransform;\n }\n}\n","/**\n * Utility helper module for access control access point devices.\n * @module\n */\n\nimport { Unknown, Open, Closed, Buzz, Hidden } from '../enums/CardReaderState';\nimport { getDeviceStateKey } from './device-state';\n\nexport const ANTI_PASSBACK_UNIT_VALUES = [\n 0, 15, 30, 45, 60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 780, 840, 900, 960, 1020, 1080, 1140,\n 1200, 1260, 1320, 1380, 1440, 2880, 4320, 5760, 7200, 8640, 10080\n];\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param {number} state The state to show.\n *\n * @returns {String}\n */\nexport function getAccessPointStateCSS(state) {\n return {\n [Unknown]: 'unknown',\n [Open]: 'open',\n [Closed]: 'closed',\n [Buzz]: 'buzz',\n [Hidden]: 'hidden-status'\n }[state];\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param {number} state The state to represent.\n * @param {(key: string) => string} getTranslation Function for requesting a translation.\n * @param {boolean} [inTransition=false] Indicates the door is in transition to the indicated state.\n *\n * @returns {string}\n */\nexport function getAccessPointStateText(state, getTranslation, inTransition = false) {\n const cssFunction = function (state) {\n return {\n unknown: 'generic.unknown',\n open: 'generic.unlocked',\n closed: 'generic.locked',\n buzz: 'components.dashboard-cards.devices.access-control-access-point-devices-card.buzzing',\n 'hidden-status': 'generic.hiddenStatus'\n }[getAccessPointStateCSS(state)];\n };\n\n return getTranslation(getDeviceStateKey(cssFunction, state, inTransition));\n}\n","import { Line, Rectangle } from 'customer-site/enums/DrawShape';\nimport {\n angleBetweenLines,\n distanceBetweenFiniteLineAndPoint,\n distanceBetweenPoints,\n distanceBetweenTwoFiniteLines,\n doLinesIntersect,\n isPointInShape\n} from './math-methods';\n\nimport type { Point } from './math-methods';\n\n/**\n * Utility file containing canvas drawing functions.\n * @module\n */\n\n/**\n * Default side width for points.\n */\nexport const ANALYTICS_POINT_SIZE = 8;\n\n// region Constants\n\n/**\n * The keys for shape validation errors, including:\n * - Key for error when points are too close.\n * - Key for error when lines intersect.\n * - Key for error when lines are too close.\n * - Key for error when an angle is too small.\n */\nconst POINTS_TOO_CLOSE = 'pointsTooClose',\n LINES_INTERSECT = 'linesIntersect',\n LINES_CLOSE = 'linesTooClose',\n SMALL_ANGLE = 'angleSmall';\n\n/**\n * Maximum number of points for ground zone shapes and tripwires.\n */\nexport const MAXIMUM_NUMBER_OF_GROUND_ZONE_POINTS = 28,\n MAXIMUM_NUMBER_OF_TRIPWIRE_POINTS = 2,\n MAXIMUM_NUMBER_OF_RECTANGLE_POINTS = 2,\n MAXIMUM_NUMBER_OF_POINTS_FOR_BATTERY_ANALYTICS = 6,\n MAXIMUM_NUMBER_OF_PRIVACY_ZONE_POINTS = 8;\n\n/**\n * Minimum number of ground zone points needs to close the shape.\n */\nexport const MINIMUM_NUMBER_OF_GROUND_ZONE_POINTS = 3;\n\n/**\n * Minimum distance allowable between points or lines in shape on canvas.\n */\nexport const MIN_DISTANCE = 20;\n\n// endregion\n\n// region Validation Functions\n\n/**\n * Checks if a newly completed shape intersects any warning zones.\n *\n * @param points - Shape to check intersections for.\n * @param warningZones - Warning zones that we don't want the shape to intersect with.\n */\nexport function shapeIntersectsWarningZonesValidation(\n points: Array,\n warningZones: Array>\n): boolean {\n // If any of these are null, there is no point in continuing.\n if (points === null || warningZones === null || warningZones.length === 0 || points.length < 2) {\n return false;\n }\n\n // Check if any pair of lines between the drawn shape and the warning zones intersects.\n for (let zone = 0; zone < warningZones.length; zone++) {\n const warningZone = warningZones[zone];\n\n let prevPoint = points[0];\n for (let i = 1; i <= points.length; i++) {\n const nextPoint = points[i % points.length];\n\n let prevWarningPoint = warningZone[0];\n for (let j = 1; j <= warningZone.length; j++) {\n const nextWarningPoint = warningZone[j % warningZone.length];\n if (doLinesIntersect(prevPoint, nextPoint, prevWarningPoint, nextWarningPoint)) {\n return true;\n }\n\n prevWarningPoint = nextWarningPoint;\n }\n\n prevPoint = nextPoint;\n }\n }\n\n // If none of the lines intersect, one of the polygons might still be completely contained within the other.\n // Check if a point from the shape is completely within a warning zone, or vice versa.\n for (let zone = 0; zone < warningZones.length; zone++) {\n const warningZone = warningZones[zone];\n\n const point = points[0];\n const warningPoint = warningZones[zone][0];\n\n // 1. Is any drawn shape point within a warning zone?\n // 2. Are any warning zone point within the drawn shape?\n if (\n (warningZone.length > 2 && isPointInShape(warningZone, point.x, point.y)) ||\n (points.length > 2 && isPointInShape(points, warningPoint.x, warningPoint.y))\n ) {\n return true;\n }\n }\n\n // If it passed all of the above checks, the shapes do not intersect.\n return false;\n}\n\n/**\n * Checks that a newly-drawn point is a valid rule drawing point.\n *\n * @note This must be called with a bound controller or component context that uses the intl service.\n *\n * @param points\n * @param newPoint\n * @param shapeOfDrawing\n * @param getTranslation - Function that gets translation by key.\n *\n * @returns An i18n string name matching an occurring error, or null if lines are acceptable.\n */\nexport function newPointValidation(\n points: Array,\n newPoint: Point,\n shapeOfDrawing: number,\n getTranslation: (resource: string) => string\n): string | null {\n if (points.length === 1 && distanceBetweenPoints(points[0], newPoint) < MIN_DISTANCE) {\n // User is trying to draw initial points too close to each other. All other point distance checks are done in pointValidation.\n return getErrorText(POINTS_TOO_CLOSE, getTranslation);\n }\n\n if (shapeOfDrawing === Rectangle) {\n if (points.length === 0) {\n // No validation necessary.\n return null;\n }\n\n // Rectangles need to have their four vertices interpolated before point validation.\n points = computeRectanglePoints([...points, newPoint]);\n\n // Rectangles are always closed, and the index of the new point is always 2.\n return pointValidation(points, 2, true, false, shapeOfDrawing, getTranslation);\n }\n\n if (points.length < 2) {\n // No other validation necessary.\n return null;\n }\n\n // Is the user trying to close the shape?\n const closingShape = points.length > 0 && arePointsClose(points[0], newPoint);\n\n if (!closingShape) {\n // Add new pair if it isn't in the set of points yet. If we are closing the shape, new point already exists as points[0].\n points = [...points, newPoint];\n }\n\n return pointValidation(\n points,\n closingShape ? 0 : points.length - 1,\n closingShape,\n false,\n shapeOfDrawing,\n getTranslation\n );\n}\n\n/**\n * Determines if a point in a new position is valid. Used for drawing and dragging points.\n * Possible errors: lines intersect, a new line is too close to another, or a new angle is too small.\n *\n * @note This must be called with a bound controller or component context that uses the intl service.\n *\n * @param points Points to validate against.\n * @param index Index in points array we are checking for validation (this point is new or changed).\n * @param shapeIsClosed Are we validating with a closed shape (true) or an in-progress one (false).\n * @param pointWasDragged Are we validating a shape after one of its points was dragged? (true, else false)\n * @param shapeOfDrawing The shape being used for point validation.\n * @param getTranslation - Function that gets translation by key.\n *\n * @returns A string if points are invalid, null if points are valid.\n */\nexport function pointValidation(\n points: Array,\n index: number,\n shapeIsClosed: boolean,\n pointWasDragged: boolean,\n shapeOfDrawing: number,\n getTranslation: (resource: string) => string\n): string | null {\n // Check if the line is too small.\n if (shapeOfDrawing === Line) {\n if (\n points.length === MAXIMUM_NUMBER_OF_TRIPWIRE_POINTS &&\n distanceBetweenPoints(points[0], points[1]) < MIN_DISTANCE\n ) {\n return getErrorText(POINTS_TOO_CLOSE, getTranslation);\n }\n\n return null;\n }\n\n // previousPoint - currentPoint is a guaranteed new line (for drawing and dragging).\n // currentPoint - nextPoint is a modified line if currentPoint was dragged to a new position.\n const fnPointRelativeToIndex = (j: number, shift: number) => points[(j + shift + points.length) % points.length],\n previousPoint = fnPointRelativeToIndex(index, -1),\n currentPoint = points[index],\n nextPoint = fnPointRelativeToIndex(index, 1),\n minAngle = 10,\n // These are two lines joined on pt2.\n // Runs distanceBetweenFiniteLineAndPoint twice, line pt1-pt2 and point pt3, then line pt3-pt2 and point pt1. Returns min.\n fnLineToPointMinDistance = (pt1: Point, pt2: Point, pt3: Point) =>\n Math.min(\n distanceBetweenFiniteLineAndPoint(pt1, pt2, pt3),\n distanceBetweenFiniteLineAndPoint(pt3, pt2, pt1)\n );\n\n // Currently, a point can only be dragged if the shape is closed, so ensure shapeIsClosed isn't an invalid value.\n shapeIsClosed = pointWasDragged || shapeIsClosed;\n\n // Check connecting lines don't intersect and aren't too close to other lines.\n // Use for loop to cycle through all existing points and lines to compare against our new point(s) and line(s).\n for (let i = 0; i < points.length; i++) {\n if (i === index && !shapeIsClosed) {\n // If the shape isn't closed, point[i] is the last point so this line (point[i] - point[i+1])\n // doesn't actually exist. Nothing to check.\n continue;\n }\n\n // When cycling through points, firstPoint is the \"current\" point and firstPoint to secondPoint is the \"current\" line.\n const firstPoint = points[i],\n secondPoint = fnPointRelativeToIndex(i, 1),\n firstIsCurrent = firstPoint === currentPoint,\n firstIsNext = firstPoint === nextPoint,\n secondIsPrevious = secondPoint === previousPoint,\n secondIsCurrent = secondPoint === currentPoint,\n fnDoesCurrentLineIntersect = doLinesIntersect.bind(null, firstPoint, secondPoint),\n fnDistanceFromCurrentLine = distanceBetweenTwoFiniteLines.bind(null, firstPoint, secondPoint);\n\n if (!secondIsCurrent && !firstIsCurrent) {\n // Intersection and distance checks for the previousPoint - currentPoint line.\n if (!secondIsPrevious) {\n // Always check for intersections, unless lines are next to each other because they are guaranteed to intersect.\n if (fnDoesCurrentLineIntersect(previousPoint, currentPoint)) {\n return getErrorText(LINES_INTERSECT, getTranslation);\n }\n\n if (fnDistanceFromCurrentLine(previousPoint, currentPoint) < MIN_DISTANCE) {\n return getErrorText(LINES_CLOSE, getTranslation);\n }\n }\n\n // Intersection and distance checks for the currentPoint - nextPoint line.\n if (pointWasDragged && !firstIsNext) {\n // Only check the second line intersection if the shape was dragged,\n // otherwise this line (current-next) never changed or doesn't exist (if point wasn't dragged).\n if (fnDoesCurrentLineIntersect(currentPoint, nextPoint)) {\n return getErrorText(LINES_INTERSECT, getTranslation);\n }\n\n if (fnDistanceFromCurrentLine(currentPoint, nextPoint) < MIN_DISTANCE) {\n return getErrorText(LINES_CLOSE, getTranslation);\n }\n }\n }\n\n // Connected lines have a distance of 0, so instead check the distance from each line to the opposing disconnected point.\n // Below: If lines are connected like firstPoint - (secondPoint==previousPoint) - currentPoint.\n if (\n (secondIsPrevious && fnLineToPointMinDistance(firstPoint, secondPoint, currentPoint) < MIN_DISTANCE) ||\n // Below: If lines are connected like previousPoint - (currentPoint==firstPoint) - secondPoint.\n (shapeIsClosed &&\n firstIsCurrent &&\n fnLineToPointMinDistance(previousPoint, firstPoint, secondPoint) < MIN_DISTANCE) ||\n // Below: If lines are connected like currentPoint - (nextPoint==firstPoint) - secondPoint.\n (pointWasDragged &&\n firstIsNext &&\n fnLineToPointMinDistance(currentPoint, firstPoint, secondPoint) < MIN_DISTANCE)\n ) {\n return getErrorText(LINES_CLOSE, getTranslation);\n }\n }\n\n if (\n angleBetweenLines(fnPointRelativeToIndex(index, -2), previousPoint, currentPoint) < minAngle ||\n (shapeIsClosed && angleBetweenLines(previousPoint, currentPoint, nextPoint) < minAngle) ||\n (pointWasDragged && angleBetweenLines(currentPoint, nextPoint, fnPointRelativeToIndex(index, 2)) < minAngle)\n ) {\n return getErrorText(SMALL_ANGLE, getTranslation);\n }\n\n // If we got here, no error was found, so this new point is valid.\n return null;\n}\n\n/**\n * Checks if two coordinates are very close to each other.\n *\n * @param x0\n * @param y0\n * @param x1\n * @param y1\n * @param [buffer=ANALYTICS_POINT_SIZE]\n *\n * @returns If two coordinates are very close to each other.\n */\nexport function arePointsClose(\n { x: x0, y: y0 }: Point,\n { x: x1, y: y1 }: Point,\n buffer = ANALYTICS_POINT_SIZE * 2\n): boolean {\n // Check if the x points are close to each other.\n return (\n x0 <= x1 + buffer &&\n x1 - buffer <= x0 &&\n // And check if the y points are close to each other.\n y0 <= y1 + buffer &&\n y1 - buffer <= y0\n );\n}\n\n/**\n * Checks if a coordinate is normalized (i.e. between 0 and 1, inclusive).\n *\n * @param coordinate The coordinate to validate.\n * @returns If a coordinate is normalized.\n */\nfunction isCoordinateNormalized(coordinate: number): boolean {\n return coordinate >= 0 && coordinate <= 1;\n}\n\n/**\n * Checks if a point is normalized (i.e. both x and y values between 0 and 1, inclusive).\n *\n * @param point The point to validate.\n * @returns If a point is normalized.\n */\nfunction isPointNormalized(point: Point): boolean {\n const { x, y } = point;\n return isCoordinateNormalized(x) && isCoordinateNormalized(y);\n}\n\n/**\n * Checks if a set of points are normalized.\n *\n * @param points The set of points to validate.\n * @returns If a set of points are normalized.\n */\nexport function arePointsNormalized(points: Array): boolean {\n return points.every(isPointNormalized);\n}\n\n// endregion\n\n// region Public Helper Functions\n\n/**\n * Computes all four vertices from a two-vertex rectangle passed in.\n * @param points\n * @returns The four vertices of the rectangle.\n */\nexport function computeRectanglePoints(points: Array): Array {\n if (points === null || points.length !== 2) {\n return points;\n }\n\n return [points[0], { x: points[1].x, y: points[0].y }, points[1], { x: points[0].x, y: points[1].y }];\n}\n\n/**\n * Returns the two corners of a rectangle that is passed in.\n * The first point is the top-left corner and the second point is the bottom-right corner.\n * @param points The four vertices of the rectangle.\n * @returns An array of length 2: The top-left corner and the bottom-right corner of the rectangle.\n */\nexport function getRectangleCorners(points: Array): Array {\n return [\n points.reduce(function (prev, curr) {\n return prev.x <= curr.x && prev.y <= curr.y ? prev : curr;\n }),\n points.reduce(function (prev, curr) {\n return prev.x >= curr.x && prev.y >= curr.y ? prev : curr;\n })\n ];\n}\n\n// endregion\n\n// region Private Functions\n\n/**\n * Gets the full translated error text from an error const value.\n *\n * @param errorId\n * @param getTranslation - Function that gets translation by key.\n * @returns The full translated error text from an error const value\n */\nfunction getErrorText(errorId: string, getTranslation: (resource: string) => string): string {\n return getTranslation(`utils.analytics-shape-validation.${errorId}`);\n}\n\n// endregion\n","/**\n * Utility helper module for camera light devices.\n * @module\n */\n\nimport { On, Off, Offline, NoState } from '../enums/LightStatus';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param {number} state The state to show.\n *\n * @returns {String}\n */\nexport function getCameraLightStateCSS(state: number): string {\n return (\n {\n [On]: 'on',\n [Off]: 'off',\n [NoState]: 'no-state',\n [Offline]: 'offline'\n } as Record\n )[state];\n}\n\n/**\n * Returns the indicated state in text form.\n * @param state\n * @param getTranslation\n */\nexport function getCameraLightStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string\n): string {\n return getTranslation(`generic.${getCameraLightStateCSS(state)}`);\n}\n","import { isBetween } from '@adc/ember-utils/utils/math';\nimport { assert } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\nimport { Line, CustomShape } from 'customer-site/enums/DrawShape';\nimport { AnyDirection, LeftToRight, RightToLeft } from '../enums/TripwireDirection';\nimport { getSegmentAngle, findMidPoint } from './math-methods';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { Point } from './math-methods';\n\n/**\n * Utility file containing canvas drawing functions.\n * @module\n */\n\nexport type CanvasContextStyleValueType = {\n lineWidth?: number;\n strokeStyle?: string;\n fillStyle?: string;\n};\n\nexport type CanvasShapeShiftingInfoType = {\n mouseX: number;\n mouseY: number;\n lastValidDeltaX: number;\n lastValidDeltaY: number;\n};\n\n// region Constants\n\n/**\n * Pixel value relating to half the width of our normal base grid.\n *\n * @type {number}\n */\nconst baseGridHalf = 4;\n\n/**\n * The style values that should be applied to any bounding boxes surrounding text on the canvas.\n *\n * @type {CanvasContextStyleValueType}\n */\nconst boundingBoxStyles = {\n strokeStyle: 'rgba(255, 255, 255, 0.75)',\n fillStyle: 'rgba(255, 255, 255, 0.75)'\n};\n\n/**\n * The style values that should be applied to black text.\n *\n * @type {CanvasContextStyleValueType}\n */\nconst strokeStyleBlack = {\n strokeStyle: 'rgba(0, 0, 0, 1)'\n};\n\n/**\n * An amount of pixels to offset from the base of an arrow before drawing text.\n * This should include both the height of the arrow and some padding.\n *\n * @type {number}\n */\nconst arrowHeight = 35;\n\n// endregion\n\n// region Canvas Drawing\n\n/**\n * Erase polygon shape.\n *\n * @param canvas The canvas HTML element.\n * @param canvasContext The canvas' corresponding canvas context.\n */\nexport function clearShape(canvas: HTMLCanvasElement, canvasContext: CanvasRenderingContext2D): void {\n // Clear the entire space.\n canvasContext.save();\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.restore();\n}\n\n/**\n * Applies values to the drawing context, if they exist.\n *\n * @param drawingContext The canvas drawing context to manipulate.\n * @param styleValues The source for style values.\n * @param valuesToApply The value names to apply.\n *\n * @private\n */\nfunction applyContextStyle(\n drawingContext: CanvasRenderingContext2D,\n styleValues: CanvasContextStyleValueType,\n ...valuesToApply: Array\n): void {\n // Iterate values to apply.\n valuesToApply.forEach((name) => {\n // Do we have the requested value?\n const value = styleValues[name];\n if (value) {\n // Apply to drawing context.\n drawingContext[name] = value as number & (string | CanvasGradient | CanvasPattern);\n }\n });\n}\n\n/**\n * Draws an image (png/jpg/svg/etc) on the canvas.\n *\n * @param canvasContext The canvas we are drawing on.\n * @param x position to draw the image at.\n * @param y position to draw the image at.\n * @param imageUrl The url path of the image to draw.\n */\nexport function drawImage(canvasContext: CanvasRenderingContext2D, x: number, y: number, imageUrl: string): void {\n const img = new Image();\n img.addEventListener('load', function () {\n try {\n canvasContext.drawImage(this, x, y);\n } catch {\n // Sometimes IE has problems drawing SVGs: https://stackoverflow.com/questions/25214395/unexpected-call-to-method-or-property-access-while-drawing-svg-image-onto-canvas\n // In this case, we will just ignore the error because this does not break the site and this works for other browsers.\n // Fix taken from this CR: https://github.com/ryross/streetmix/commit/b9c5334ac5f1b9dfe35ae92214e74fb9dd624872\n }\n });\n\n img.src = imageUrl;\n}\n\n/**\n * Draw polygon shape based on a set of given-in points and styles.\n *\n * @param canvasContext The canvas we are drawing on.\n * @param points The points to draw.\n * @param closeShape Should this shape be closed? If so, we will fill in the shape with a transparent color.\n * @param [styleValues] Optional style values applied to the drawing context.\n */\nexport function drawShape(\n canvasContext: CanvasRenderingContext2D,\n points: Array,\n closeShape: boolean,\n styleValues: CanvasContextStyleValueType = {}\n): void {\n const [{ x, y }] = points && points.length ? points : [{ x: undefined, y: undefined }];\n assert('Cannot draw points, no valid points given.', x !== undefined && y !== undefined);\n\n // Save style state.\n canvasContext.save();\n\n // Start drawing.\n canvasContext.beginPath();\n\n // Get the starting point for the shape.\n canvasContext.moveTo(x, y);\n\n // Draw all the remaining lines using points.\n points.slice(1).forEach(({ x, y }) => canvasContext.lineTo(x, y));\n\n // Do we want to close the polygon?\n if (closeShape) {\n // Connect back to the first point to close shape.\n canvasContext.closePath();\n\n // Fill the canvas.\n applyContextStyle(canvasContext, styleValues, 'lineWidth', 'fillStyle');\n canvasContext.fill();\n }\n\n // Stroke the canvas.\n applyContextStyle(canvasContext, styleValues, 'strokeStyle');\n canvasContext.stroke();\n\n // Restore style state.\n canvasContext.restore();\n}\n\n/**\n * Draw a single corner point on the canvas with a rectangle.\n *\n * @param canvasContext The canvas we are drawing on.\n * @param point The coordinate point.\n * @param side The length of the sides to use when drawing the rectangular point.\n * @param [styleValues] Optional style values applied to the drawing context.\n */\nexport function drawSingleCornerPoint(\n canvasContext: CanvasRenderingContext2D,\n point: Point,\n side: number,\n styleValues: CanvasContextStyleValueType = {}\n): void {\n const { x, y } = point || {};\n assert('Cannot draw point, no valid point given.', x !== undefined && y !== undefined);\n\n // Side represents width and height of a square.\n const halfSide = side / 2;\n\n // Save canvas styles.\n canvasContext.save();\n\n // Apply styles.\n applyContextStyle(canvasContext, styleValues, 'strokeStyle', 'fillStyle');\n\n // Create a rectangle and fill.\n canvasContext.strokeRect(x - halfSide, y - halfSide, side, side);\n canvasContext.fillRect(x - halfSide, y - halfSide, side, side);\n\n // Restore canvas styles.\n canvasContext.restore();\n}\n\n/**\n * Draw a single corner point on the canvas with a rectangle.\n *\n * @param canvasContext The canvas drawing context.\n * @param points The shape corner points.\n * @param radius The length of the circular handle radius.\n * @param [styleValues] Optional style values applied to the drawing context.\n */\nexport function drawSideHandles(\n canvasContext: CanvasRenderingContext2D,\n points: Array,\n radius: number,\n styleValues: CanvasContextStyleValueType = {}\n): void {\n // Save canvas styles.\n canvasContext.save();\n\n // Apply styles.\n applyContextStyle(canvasContext, styleValues, 'strokeStyle', 'fillStyle', 'lineWidth');\n\n // Iterate points.\n points.forEach((point, idx) => {\n canvasContext.beginPath();\n\n // Get mid point for this and previous point.\n const { x, y } = findMidPoint(points[idx - 1] || points.slice(-1).pop(), point);\n\n // Draw circle.\n canvasContext.arc(x, y, radius, 0, 360, false);\n canvasContext.stroke();\n canvasContext.fill();\n });\n\n // Restore canvas styles.\n canvasContext.restore();\n}\n\n// endregion\n\n// region Transform Points From Normalized to Canvas Size\n\n/**\n * Create an array of normalized points adjusted to the canvas dimensions passed in.\n * This is done by dividing the x values by canvas width and y values by canvas height.\n *\n * @param points The points to normalize.\n * @param canvasWidth The width of the canvas.\n * @param canvasHeight The height of the canvas.\n */\nexport function normalize(points: Array, canvasWidth: number, canvasHeight: number): Array {\n return transformPoints(points, canvasWidth, canvasHeight, true);\n}\n\n/**\n * Create an array of denormalized points adjusted to the canvas dimensions passed in.\n * This is done by multiplying the x values by canvas width and y values by canvas height.\n *\n * @param normalizedPoints The points to de-normalize.\n * @param canvasWidth The width of the canvas.\n * @param canvasHeight The height of the canvas.\n */\nexport function denormalize(normalizedPoints: Array, canvasWidth: number, canvasHeight: number): Array {\n return transformPoints(normalizedPoints, canvasWidth, canvasHeight, false);\n}\n\n/**\n * Create an array of points either divided or multiplied by canvas dimensions.\n *\n * @param points The points to transform.\n * @param canvasWidth The width of the canvas.\n * @param canvasHeight The height of the canvas.\n * @param willDivide Whether to divide the points by the canvas dimensions.\n */\nfunction transformPoints(\n points: Array,\n canvasWidth: number,\n canvasHeight: number,\n willDivide: boolean\n): Array {\n // Create an array to store the points after adjusting to canvas size.\n return (points || []).map((point) => {\n return willDivide\n ? { x: point.x / canvasWidth, y: point.y / canvasHeight }\n : {\n x: point.x * canvasWidth,\n y: point.y * canvasHeight\n };\n });\n}\n\n// endregion\n\n// region Events\n\n/**\n * Get coordinates of the current mouse position.\n *\n * @param canvas The canvas HTML element.\n * @param event The MouseEvent we are checking.\n */\nexport function getMouseCoordinate(canvas: HTMLCanvasElement, { clientX, clientY }: MouseEvent): Array {\n const { left, top } = canvas.getBoundingClientRect();\n return [clientX - left, clientY - top];\n}\n\n// endregion\n\n// region Analytics Points Functions\n\n/**\n * Create an array of default points based on the analytics rule type.\n *\n * @param canvasWidth The width of the canvas.\n * @param canvasHeight The height of the canvas.\n * @param shapeOfDrawing The shape of the drawing.\n */\nexport function getDefaultAnalyticsShapePoints(\n canvasWidth: number,\n canvasHeight: number,\n shapeOfDrawing: number\n): Array {\n // Stores size of default point box as percentage taken up\n const defaultBoxWidthRatio = 0.6,\n defaultBoxHeightRatio = 0.4,\n halfCanvasHeight = canvasHeight / 2,\n halfCanvasWidth = canvasWidth / 2;\n\n // Create points that could be for a default square or line that is smaller than the container.\n const sampleBottom = halfCanvasHeight * (1 - defaultBoxHeightRatio),\n sampleTop = halfCanvasHeight * (1 + defaultBoxHeightRatio),\n sampleLeft = halfCanvasWidth * (1 - defaultBoxWidthRatio),\n sampleRight = halfCanvasWidth * (1 + defaultBoxWidthRatio);\n\n switch (shapeOfDrawing) {\n case CustomShape:\n return [\n { x: sampleRight, y: sampleTop },\n { x: sampleRight, y: sampleBottom },\n { x: sampleLeft, y: sampleBottom },\n { x: sampleLeft, y: sampleTop }\n ];\n case Line:\n return [\n { x: sampleRight, y: sampleTop },\n { x: sampleLeft, y: sampleTop }\n ];\n default:\n console.warn(`Attempted to get the default points for shape: ${shapeOfDrawing}`);\n return [];\n }\n}\n\n// endregion\n\n// region Analytics Tripwire Arrows\n\n/**\n * Draw a single arrow based on the canvas context.\n * This is used when drawing a video analytics tripwire.\n *\n * @param canvasContext The canvas we are drawing on.\n * @param rotatedAngle Note that this starts at pi radians and steadily decreases to negative pi radians as you progress around a unit circle.\n * @param [currentStyleValues] The style values that are currently applied in case any changes need to be made.\n * @param [isEnter=false] Optional flag to specify if this is the enter arrow or the exit arrow.\n * @param [showEnterExitText=false] Optional flag to specify whether to show the enter or exit text.\n * @param [intl] Optional service to translate resources.\n */\nexport function drawSingleArrow(\n canvasContext: CanvasRenderingContext2D,\n rotatedAngle: number,\n currentStyleValues: CanvasContextStyleValueType,\n isEnter: boolean,\n showEnterExitText: boolean,\n intl: ADCIntlService\n): void {\n // Save non-rotated state.\n canvasContext.save();\n\n // Rotate to new angle.\n canvasContext.rotate(rotatedAngle);\n\n // Draw the arrow.\n // NOTE: If you change the size of this arrow,\n // please also update the arrowHeight const to something appropriate with some padding.\n canvasContext.beginPath();\n canvasContext.moveTo(0, 0);\n canvasContext.lineTo(0, -1);\n canvasContext.lineTo(10, -1);\n canvasContext.lineTo(10, -5);\n canvasContext.lineTo(19, 0);\n canvasContext.lineTo(10, 5);\n canvasContext.lineTo(10, 1);\n canvasContext.lineTo(0, 1);\n canvasContext.lineTo(0, 0);\n canvasContext.closePath();\n\n // Then stroke and fill.\n canvasContext.stroke();\n canvasContext.fill();\n\n // Restore to non-rotated state.\n canvasContext.restore();\n\n // Add enter/exit text if appropriate.\n if (showEnterExitText && intl) {\n drawEnterExitText(canvasContext, rotatedAngle, isEnter, intl, currentStyleValues);\n }\n}\n\n/**\n * Draw arrow based on current rule model properties.\n * This contains logic for drawing the one or two arrows necessary when displaying a video analytics tripwire.\n *\n * @param canvasContext The canvas we are drawing on.\n * @param direction\n * @param points All points including mouse move point during draw.\n * @param [styleValues] Optional style values applied to the drawing context.\n * @param [showEnterExitText=false] Optional flag to specify whether to show the enter or exit text.\n * @param [intl] Optional service to translate resources.\n */\nexport function drawArrow(\n canvasContext: CanvasRenderingContext2D,\n direction: number,\n points: Array,\n styleValues: CanvasContextStyleValueType = {},\n showEnterExitText: boolean,\n intl: ADCIntlService\n): void {\n // We only draw arrows where we have 2 points for tripwire.\n if (isEmpty(points) || points.length !== 2) {\n return;\n }\n\n const rad90Degree = Math.PI / 2.0,\n angle = getSegmentAngle(points[0], points[1]),\n // Find segment midpoint to translate coordinate system.\n midpointX = (points[0].x + points[1].x) / 2,\n midpointY = (points[0].y + points[1].y) / 2;\n\n // Save state of canvas context.\n canvasContext.save();\n\n // Apply styles.\n applyContextStyle(canvasContext, styleValues, 'strokeStyle', 'fillStyle');\n\n // Translate coordinate system.\n canvasContext.translate(midpointX, midpointY);\n\n // Handle LTR arrow.\n if (direction === AnyDirection || direction === LeftToRight) {\n // Draw the arrow.\n drawSingleArrow(canvasContext, angle + rad90Degree, styleValues, true, showEnterExitText, intl);\n }\n\n // Handle RTL arrow.\n if (direction === AnyDirection || direction === RightToLeft) {\n // Draw the arrow. We always want to include the enter label for one-way rules.\n drawSingleArrow(\n canvasContext,\n angle - rad90Degree,\n styleValues,\n direction === RightToLeft,\n showEnterExitText,\n intl\n );\n }\n\n // Restore state of canvas context.\n canvasContext.restore();\n}\n\n/**\n * Draws the \"Enter\" and \"Exit\" directional texts on the canvas relative to a bi-directional arrow.\n *\n * @param canvasContext The canvas we are drawing on.\n * @param rotatedAngle Note that this starts at pi radians and steadily decreases to negative pi radians as you progress around a unit circle.\n * @param isEnter Whether this is the enter arrow or the exit arrow.\n * @param intl Used to translate resources.\n * @param [currentStyleValues] The style values that are currently applied in case any changes need to be made.\n */\nfunction drawEnterExitText(\n canvasContext: CanvasRenderingContext2D,\n rotatedAngle: number,\n isEnter: boolean,\n intl: ADCIntlService,\n currentStyleValues: CanvasContextStyleValueType\n): void {\n // Set some styles.\n applyContextStyle(canvasContext, boundingBoxStyles, 'strokeStyle');\n\n // Load some info about the text.\n const text = intl.t(`generic.${isEnter ? 'enter' : 'exit'}`),\n textMetrics = canvasContext.measureText(text),\n width = textMetrics.width,\n height = textMetrics.actualBoundingBoxAscent,\n correctedAngle = -(rotatedAngle + (isEnter ? -Math.PI : Math.PI) / 2 - Math.PI),\n directionSign = isEnter ? -1 : 1,\n y = directionSign * Math.cos(correctedAngle) * (arrowHeight + height / 2) + height / 2,\n x = directionSign * Math.sin(correctedAngle) * (arrowHeight + width / 2) - width / 2;\n\n // Draw the box.\n const points = [\n { x: x - baseGridHalf, y: y + baseGridHalf },\n { x: x - baseGridHalf, y: y - height - baseGridHalf },\n { x: x + width + baseGridHalf, y: y - height - baseGridHalf },\n { x: x + width + baseGridHalf, y: y + baseGridHalf }\n ];\n drawShape(canvasContext, points, true, boundingBoxStyles);\n\n // Apply some text styling.\n applyContextStyle(canvasContext, strokeStyleBlack, 'strokeStyle');\n\n // Draw the text.\n canvasContext.strokeText(text, x, y);\n\n // Reset the style\n if (!isEmpty(currentStyleValues)) {\n applyContextStyle(\n canvasContext,\n currentStyleValues,\n ...(Object.keys(currentStyleValues) as Array)\n );\n }\n}\n\n/**\n * Correct the shape location if outside the canvas when dragging by moving it to the closest location where it would be inside the canvas.\n *\n * @param canvas The canvas HTML element.\n * @param pointsForAdjustedCanvas Points array of the shape.\n * @param shapeShiftInfo Object to handle translation of shape.\n * @param x X coordinate of mouse.\n * @param y Y coordinate of mouse.\n */\nexport function moveShape(\n canvas: HTMLCanvasElement,\n pointsForAdjustedCanvas: Array,\n shapeShiftInfo: CanvasShapeShiftingInfoType,\n x: number,\n y: number\n): Array {\n // Difference between our current mouse location and the center of the shape.\n const deltaX = x - shapeShiftInfo.mouseX,\n deltaY = y - shapeShiftInfo.mouseY;\n\n // Copy of the points.\n const movedPoints = pointsForAdjustedCanvas.map((p) => ({ x: p.x + deltaX, y: p.y + deltaY }));\n\n if (isShapeInCanvas(movedPoints, canvas)) {\n shapeShiftInfo.lastValidDeltaX = deltaX;\n shapeShiftInfo.lastValidDeltaY = deltaY;\n } else {\n correctShapeTranslation(movedPoints, canvas.width, canvas.height, shapeShiftInfo, deltaX, deltaY);\n }\n\n return movedPoints;\n}\n\n/**\n * Correct the shape location if outside the canvas when dragging by moving it to the closest location where it would be inside the canvas.\n *\n * @param points An array of vertices that define a shape.\n * @param width The width of the canvas.\n * @param height The height of the canvas.\n * @param shapeShiftInfo Information about the current shape shift operation.\n * @param mouseDeltaX The difference between the current mouse press x and the initial mouse press x.\n * @param mouseDeltaY The difference between the current mouse press y and the initial mouse press y.\n */\nfunction correctShapeTranslation(\n points: Array,\n width: number,\n height: number,\n shapeShiftInfo: CanvasShapeShiftingInfoType,\n mouseDeltaX: number,\n mouseDeltaY: number\n): void {\n // Find largest magnitude of difference between each coordinate and the edge of the canvas (if outside).\n const [maxDeltaX, maxDeltaY] = points.reduce(\n ([x, y], p) => [updateMaxDelta(p.x, width, x), updateMaxDelta(p.y, height, y)],\n [0, 0]\n );\n\n // Shift point values by max delta values.\n points.forEach((p) => {\n p.x -= maxDeltaX;\n p.y -= maxDeltaY;\n });\n\n // Update the last valid deltas.\n shapeShiftInfo.lastValidDeltaX = mouseDeltaX - maxDeltaX;\n shapeShiftInfo.lastValidDeltaY = mouseDeltaY - maxDeltaY;\n}\n\n/**\n * Helper function for correctShapeTranslation. Updates the max delta of a coordinate.\n *\n * @param coordinate, value for coordinate that we are checking.\n * @param length, max value for the coordinate that we are checking.\n * @param maxDelta, current max difference between a coordinate outside the bounds and the edge of the canvas.\n *\n * @returns New max delta for that coordinate.\n */\nfunction updateMaxDelta(coordinate: number, length: number, maxDelta: number): number {\n if (coordinate < 0 && coordinate < maxDelta) {\n return coordinate;\n }\n\n if (coordinate >= length && coordinate - length + 1 > maxDelta) {\n return coordinate - length + 1;\n }\n\n return maxDelta;\n}\n\n/**\n * Checks if the shape is in canvas.\n *\n * @param points Array of vertices that define a shape.\n * @param canvas The canvas HTML element.\n */\nfunction isShapeInCanvas(points: Array, canvas: HTMLCanvasElement): boolean {\n const { width, height } = canvas;\n return !isEmpty(points) && points.every(({ x, y }) => x >= 0 && x <= width && y >= 0 && y <= height);\n}\n\n/**\n * Returns true if the passed point coordinates are within the passed height and width.\n *\n * @param cX The X coordinate of point that we're checking.\n * @param cY The Y coordinate of point that we're checking.\n * @param width The canvas width.\n * @param height The canvas height.\n */\nexport function isPointInCanvas(cX: number, cY: number, width: number, height: number): boolean {\n return isBetween(cX, 0, width) && isBetween(cY, 0, height);\n}\n\n// endregion\n","/**\n * Utility file containing variables/methods related to custom color schemes.\n * @module\n */\n\n/**\n * A list of colors that appear very distinct from each other. This is currently used to color bounding boxes during camera calibration\n * to distinguish each box. If there are 3 boxes, the first one will be lime green, the second one will be blue, and the third orange.\n */\nexport const DISTINCT_COLORS = [\n '125, 200, 10', // lime green\n '32, 113, 221', // blue\n '245, 130, 32', // orange\n '240, 105, 154', // pink\n '0, 199, 177', // teal\n '255, 205, 0', // yellow\n '91, 61, 140', // purple\n '0, 139, 141', // dark teal\n '78, 195, 224', // aqua\n '38, 184, 68' // green\n];\n\nexport const ADC_SVG_FILL_COLORS = [\n 'red',\n 'orange',\n 'yellow',\n 'lime',\n 'green',\n 'greenblue',\n 'greencyan',\n 'cyanblue',\n 'blue',\n 'navy',\n 'purple',\n 'pink',\n 'gray-100',\n 'gray-80',\n 'gray-60',\n 'gray-40',\n 'gray-20',\n 'gray-10',\n 'gray-0'\n] as const;\n\nexport type ADCSvgFillColorsType = (typeof ADC_SVG_FILL_COLORS)[number];\n","import { isEmpty } from '@ember/utils';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type { AsyncHasMany } from '@ember-data/model';\nimport type CountryMobileCarrier from 'customer-site/models/users/country-mobile-carrier';\n\n/**\n * Returns available carriers for the given selected country in the form of {@link DropdownSelectItem} objects.\n */\nexport async function getCarriersForSelectedCountry(\n countries: AsyncHasMany | Awaited>,\n selectedCountryId?: number\n): Promise {\n if (isEmpty(selectedCountryId)) {\n return [];\n }\n\n const selectedCountry = (await countries).slice().find((c) => c.id === String(selectedCountryId));\n return Object.entries(selectedCountry?.carriers ?? {}).map(([value, name]) =>\n DropdownSelectItem.create({ name, value })\n );\n}\n\n// endregion\n","import { getOwner, setOwner } from '@ember/application';\n\n/**\n * A simple object with the necessary plumbing to support service injection.\n *\n * @class utils.ContainerObject\n */\nexport default class ContainerObject {\n /**\n * @param {Object} host The host object (controller, route, component, etc) that is instantiating this instance.\n */\n constructor(host) {\n // Set owner so service injection works.\n setOwner(this, getOwner(host));\n }\n}\n","import { MINUTES_IN_HOUR } from '@adc/ember-utils/constants/time';\nimport { newDate } from '@adc/ember-utils/utils/date-time';\n\n/**\n * Utility helper module for dealing with date/time fields.\n * @module\n */\n\nexport const NUM_SECONDS_IN_MINUTE = 60,\n NUM_SECONDS_IN_HOUR = 3600,\n NUM_SECONDS_IN_DAY = NUM_SECONDS_IN_HOUR * 24,\n NUM_MILLISECONDS_IN_SECOND = 1000,\n NUM_MILLISECONDS_IN_MINUTE = NUM_MILLISECONDS_IN_SECOND * 60,\n NUM_MILLISECONDS_IN_HOUR = NUM_MILLISECONDS_IN_MINUTE * 60,\n NUM_MILLISECONDS_IN_DAY = NUM_MILLISECONDS_IN_HOUR * 24;\n\n/**\n * Int values that correspond to the days of the week.\n *\n * @type {number}\n */\nexport const SUNDAY_INT = 0,\n MONDAY_INT = 1,\n TUESDAY_INT = 2,\n WEDNESDAY_INT = 3,\n THURSDAY_INT = 4,\n FRIDAY_INT = 5,\n SATURDAY_INT = 6;\n\n/**\n * Bit int values that correspond to the days of the week.\n *\n * @type {number}\n */\nexport const SUNDAY_BIT = 1,\n MONDAY_BIT = 2,\n TUESDAY_BIT = 4,\n WEDNESDAY_BIT = 8,\n THURSDAY_BIT = 16,\n FRIDAY_BIT = 32,\n WEEKDAY_BITS = 62,\n SATURDAY_BIT = 64,\n WEEKEND_BITS = 65,\n EVERY_DAY_BITS = 127;\n\n/**\n * An array containing every day of the week as ints.\n *\n * @type {Array}\n */\nexport const EVERY_DAY = [SUNDAY_INT, MONDAY_INT, TUESDAY_INT, WEDNESDAY_INT, THURSDAY_INT, FRIDAY_INT, SATURDAY_INT];\n\n/**\n * An array containing every weekday as ints.\n *\n * @type {Array}\n */\nexport const WEEK_DAYS = [MONDAY_INT, TUESDAY_INT, WEDNESDAY_INT, THURSDAY_INT, FRIDAY_INT];\n\n/**\n * Converts a dayBits int to an array of ints expected by the schedule-input add-on.\n * This array has the numbers 0 to 6 for Sunday through Saturday.\n *\n * @param {number} dayBits\n * @returns {Array}\n */\nexport function dayBitsToArray(dayBits) {\n if (dayBits < 0 || dayBits > EVERY_DAY_BITS) {\n // Default value for invalid dayBits.\n return EVERY_DAY;\n }\n\n const dayBitsConverter = [\n SATURDAY_INT,\n FRIDAY_INT,\n THURSDAY_INT,\n WEDNESDAY_INT,\n TUESDAY_INT,\n MONDAY_INT,\n SUNDAY_INT\n ];\n\n return dayBitsConverter.reduce((daysArray, currentDayInt) => {\n const currentDayBit = Math.pow(2, currentDayInt);\n if (dayBits >= currentDayBit) {\n dayBits = dayBits - currentDayBit;\n daysArray.unshift(currentDayInt);\n }\n\n return daysArray;\n }, []);\n}\n\n/**\n * Converts an array of days ints to a dayBits int.\n *\n * @param {Array} selectedDays\n * @returns {number}\n */\nexport function dayArrayToBits(selectedDays) {\n const dayBitsConversion = [\n SUNDAY_BIT,\n MONDAY_BIT,\n TUESDAY_BIT,\n WEDNESDAY_BIT,\n THURSDAY_BIT,\n FRIDAY_BIT,\n SATURDAY_BIT\n ];\n return selectedDays.reduce((dayBits, number) => dayBits + dayBitsConversion[number], 0);\n}\n\n/**\n * Converts an int of minutes to a Date.\n *\n * @param {number} minutes\n * @param {Date|number} [base=undefined]\n * @returns {Date}\n */\nexport function minutesToDate(minutes, base = undefined) {\n return newDate(Math.floor(minutes / MINUTES_IN_HOUR), minutes % MINUTES_IN_HOUR, base);\n}\n\n/**\n * Converts a Date to an int of minutes.\n *\n * @param {Date} date\n * @returns {number}\n */\nexport function dateToMinutes(date) {\n return date.getHours() * MINUTES_IN_HOUR + date.getMinutes();\n}\n\n/**\n * Returns a new Date object set to the passed time in UTC time (not relative).\n *\n * @param {Date} date The date to emulate.\n *\n * @returns {Date}\n */\nexport function getUTCDate(date) {\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n )\n );\n}\n\n/**\n * If a passes in date value is a valid date\n *\n * @param d\n * @returns {boolean}\n */\nexport function isValidDate(d) {\n return d instanceof Date && !isNaN(d);\n}\n\n/**\n * Takes a date, and returns the time formatted as 6:44 PM, 12:15 AM, etc\n *\n * @param {Date} date\n * @returns\n */\nexport function formatAMPM(date) {\n let hours = date.getHours();\n let minutes = date.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n hours = hours % 12;\n hours = hours ? hours : 12; // the hour '0' should be '12'\n minutes = minutes < 10 ? '0' + minutes : minutes;\n const strTime = hours + ':' + minutes + ' ' + ampm;\n return strTime;\n}\n\n/**\n * Function to convert date object to translation string.\n * If specified with a timezone add timezone to translated string\n * @param {ADCIntlService} intl\n * @param {Date} timestamp\n * @param {boolean} withTimeZone\n * @returns {string}\n * */\nexport function convertDateToString(intl, timestamp, withTimeZone) {\n const dateConfigWithoutTimezone = {\n year: '2-digit',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n },\n dateConfigWithTimezone = { ...dateConfigWithoutTimezone, timeZoneName: 'short' };\n return withTimeZone\n ? intl.formatDateTz(timestamp, dateConfigWithTimezone)\n : intl.formatDateTz(timestamp, dateConfigWithoutTimezone);\n}\n\n/**\n * Function which converts a duration in milliseconds to a string format.\n * Example: 2000 milliseconds -> \"0:02\"\n * @param {number} milliseconds\n * @returns {string}\n */\nexport function millisecondsToDurationString(milliseconds) {\n const totalSeconds = Math.floor(milliseconds / 1000),\n minutes = Math.floor(totalSeconds / 60),\n seconds = totalSeconds % 60;\n\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n}\n","/**\n * Utility helper module for device state.\n * @module\n */\n\n/**\n * Returns the appropriate CSS class to show the current state for devices.\n * (for devices with the states inputted plus the unknown state(-1))\n *\n * @param {number} currentState The state to show.\n * @param {number[]} states An array of possible states (excluding unknown).\n * @param {String[]} values An array of values that match the possible states (excluding unknown).\n * @param {boolean} [flipState=false] If true we should return the CSS for the opposite state (does not apply to \"Unknown\" state).\n * */\nexport function getDeviceStateCSS(\n currentState: number,\n states: number[],\n values: string[],\n flipState: boolean = false\n): string {\n const idx = states.indexOf(currentState);\n\n // Was the \"unknown' state requested?\n if (idx === -1) {\n return 'unknown';\n }\n\n // Should we flip states?\n if (flipState) {\n // Reverse states.\n values.reverse();\n }\n\n // Return value.\n return values[idx];\n}\n\n/**\n * Returns the i18n key for the current device state.\n *\n * @param {function(number):String} fnStateCSS A function that returns the CSS for a given state.\n * @param {number} state The current device state.\n * @param {boolean} [inTransition=false] Whether the device is currently in transition to this state.\n */\nexport function getDeviceStateKey(\n fnStateCSS: (state: number) => string,\n state: number,\n inTransition: boolean = false\n): string {\n // Get default state text.\n let key = fnStateCSS(state);\n\n // Is the device in transition to this state?\n if (inTransition) {\n // Change key to verb form.\n key = key.replace('ed', 'ing');\n }\n\n return key;\n}\n","import { TwoFourGHz, FiveGHz, DualBandTwoFourAndFiveGHz, Wired } from 'customer-site/enums/AccessPointWifiFrequency';\nimport ConnectionStatus from 'customer-site/enums/ConnectionStatus';\nimport { Poor, Good, Excellent } from 'customer-site/enums/SignalStrength';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type FrequencyBandEnum from 'customer-site/enums/FrequencyBand';\nimport type { SignalStrength } from 'customer-site/enums/SignalStrength';\n\n/**\n * Get the translated network group string with the frequency number\n *\n */\nexport function getConnectionFrequencyString(\n connectionFrequency: FrequencyBandEnum | number,\n intl: ADCIntlService\n): string {\n let key;\n\n switch (connectionFrequency) {\n case TwoFourGHz:\n key = 'twoFour';\n break;\n case FiveGHz:\n key = 'five';\n break;\n case DualBandTwoFourAndFiveGHz:\n key = 'twoFourAndFive';\n break;\n case Wired:\n key = 'wired';\n break;\n default:\n return intl.t('generic.unknown');\n }\n\n return intl.t(`generic.wifi.frequencies.${key}`);\n}\n\n/**\n * Get the translated connection type string (wireless, ethernet, or unknown)\n *\n */\nexport function getConnectionTypeString(connectionTypeEnum: ConnectionStatus, intl: ADCIntlService): string {\n let key;\n\n switch (connectionTypeEnum) {\n case ConnectionStatus.Remembered:\n key = 'ethernet';\n break;\n case ConnectionStatus.Connected:\n key = 'wireless';\n break;\n default:\n return intl.t('generic.unknown');\n }\n\n return intl.t(`generic.wifi.${key}`);\n}\n\n/**\n * Get the translated signal strength string with the normalized signal strength percentage\n */\nexport function getWifiSignalStrengthString(\n signalStrengthEnum: SignalStrength,\n normalizedSignalStrength: number,\n intl: ADCIntlService\n): string {\n let key;\n\n switch (signalStrengthEnum) {\n case Poor:\n key = 'poorWithPercentage';\n break;\n case Good:\n key = 'goodWithPercentage';\n break;\n case Excellent:\n key = 'excellentWithPercentage';\n break;\n default:\n return intl.t('generic.unknown');\n }\n\n return intl.t(`generic.quality.${key}`, { value: normalizedSignalStrength });\n}\n","/**\n * Utility helper module for anything having to deal with devices.\n * @module\n */\n\n/**\n * Function that returns a unit id from a global device id.\n *\n * @public\n * @memberof utils.device\n *\n * @param {string} globalDeviceId The global device id to split.\n * @return {string}\n */\nexport function getUnitId(globalDeviceId) {\n return splitGlobalDeviceId(globalDeviceId)[0];\n}\n\n/**\n * Function that returns a device id from a global device id.\n *\n * @public\n * @memberof utils.device\n *\n * @param {string} globalDeviceId The global device id to split.\n * @return {string}\n */\nexport function getDeviceId(globalDeviceId) {\n return splitGlobalDeviceId(globalDeviceId)[1];\n}\n\n/**\n * Splits a global device id into an array of strings containing unit id and device id, split on '-'.\n *\n * @memberof utils.device\n *\n * @param {string} globalDeviceId The global device id to split.\n * @returns {Array}\n */\nfunction splitGlobalDeviceId(globalDeviceId) {\n return globalDeviceId.split('-');\n}\n","/**\n * A utility helper module for dimmer-switch addon component.\n * @module\n */\n\nimport { UNKNOWN, OFF, ON } from '@adc/ui-components/utils/dimmer-switch';\n\n/**\n * The different possible states for the dimmer.\n *\n * @note Re-exporting these so WebStorm knows their definitions.\n *\n * @type {String}\n */\nexport const STATE_UNKNOWN = UNKNOWN,\n STATE_OFF = OFF,\n STATE_ON = ON;\n","/**\n * Utility helper module for anything having to deal with ember internals.\n * @module\n */\n\n/**\n * Creates a Browser Event w/ fallback compatibility for IE11.\n *\n * @public\n * @memberof utils.dom\n *\n * @param {string} eventName\n * @returns {Event}\n */\nexport function createNewEvent(eventName) {\n if (typeof Event === 'function') {\n return new Event(eventName);\n }\n\n const event = document.createEvent('Event');\n event.initEvent(eventName, true, true);\n return event;\n}\n\n/**\n * Determines if a browser is in full screen mode.\n *\n * @public\n * @memberof utils.dom\n *\n * @returns {boolean}\n */\nexport function isBrowserFullScreen() {\n // Checks for full screen mode in the following browsers, respectively:\n // Chrome, Edge, Safari, Firefox, IE.\n return (\n document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.webkitCurrentFullScreenElement ||\n document.mozFullScreenElement ||\n document.msFullscreenElement\n );\n}\n\n/**\n * Toggles browser full screen mode.\n *\n * @public\n * @memberof utils.dom\n *\n * @param {boolean} toFullScreenMode Are we toggling to view the page in full screen mode?\n * @param {Document | HTMLElement} [elem=document.documentElement] Optional element to request full screen mode.\n *\n * @returns {Promise}\n */\nexport function toggleFullScreen(toFullScreenMode, elem = document.documentElement) {\n if (toFullScreenMode) {\n return elem[\n ['requestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen', 'msRequestFullscreen'].find(\n (name) => elem[name]\n )\n ]();\n } else if (isBrowserFullScreen()) {\n return document[\n ['exitFullscreen', 'mozCancelFullScreen', 'webkitExitFullscreen', 'msExitFullscreen'].find(\n (name) => document[name]\n )\n ]();\n }\n}\n\n/**\n * Check if we already have microphone permissions enabled without actually enabling the microphone.\n *\n * @returns {boolean}\n */\nexport async function areMicrophonePermissionsAllowed() {\n const mediaDeviceList = await navigator.mediaDevices.enumerateDevices();\n\n // If microphone permissions haven't been granted yet, none of our audio inputs will have labels that describe the actual input.\n // Conversely, if microphone permissions are granted, we'll have more audio input objects with more content filled.\n // For some browsers (like Firefox), it's possible we already granted microphone permissions but we can't tell without\n // audio actually being used.\n const audioInputs = mediaDeviceList.filterBy('kind', 'audioinput'),\n audioGranted = audioInputs.filter((input) => input.label !== '').length > 0;\n\n return audioGranted;\n}\n\n/**\n * Check to see if the element (or its parent) is not set to display: none or visibility: hidden.\n * It'll return false if the selector is invalid.\n *\n * @param {*} selector CSS selector to select the target element.\n * @returns {boolean}\n */\nexport function isElementViewable(selector) {\n const element = document.querySelector(selector),\n boundingRect = element?.getBoundingClientRect();\n return !!(boundingRect?.width && boundingRect?.height);\n}\n","import type Transition from '@ember/routing/transition';\n\n/**\n * Utility helper module for anything having to deal with ember internals.\n * @module\n */\n\n/**\n * A dummy empty function.\n *\n * @memberof utils.ember\n */\nexport const fnEmpty = (): void => {};\n\n/**\n * Indicates if the supplied transition is a full transition from a different route.\n */\nexport function isFullTransition(transition: Transition = {} as Transition): boolean {\n const { to, from } = transition;\n return !from || to.name !== from.name;\n}\n\nexport interface ErrorPayload {\n message?: string;\n errors?: {\n detail: string;\n }[];\n}\n\n/**\n * Extracts error message from returned API errors.\n */\nexport function getErrorText(error: ErrorPayload): string | undefined {\n const { message, errors } = error,\n [firstError] = errors ?? [];\n\n return firstError?.detail ?? message;\n}\n","/**\n * Utility helper module for fleet pages.\n * @module\n */\n\n/**\n * The string that is shown when the fuel used/efficiency is 0 or null\n */\nconst ZERO_OR_NULL_PLACEHOLDER_STRING = '--';\n\nconst METERS_TO_MILES_CONVERSION_FACTOR = 1609.344;\n\n/**\n * Rounds fuel used value based on how small the value is.\n * Also maintains specific sig figs based on how small the value is\n * @param {number} rawFuelUsed\n * @returns {string}\n */\nexport function roundFuelUsed(rawFuelUsed: number) {\n if (!rawFuelUsed || rawFuelUsed == 0) {\n return ZERO_OR_NULL_PLACEHOLDER_STRING;\n } else if (rawFuelUsed > 0 && rawFuelUsed <= 0.01) {\n return '0.01'; // display 0.01 if value is nonzero but less than 0.01\n } else if (rawFuelUsed > 0.01 && rawFuelUsed < 0.095) {\n return (Math.round(rawFuelUsed * 100) / 100).toFixed(2); // round to nearest hundredth if > 0.01 and < 0.1 and value does not round up to 0.1\n }\n return (Math.round(rawFuelUsed * 10) / 10).toFixed(1); // round to nearest tenth if greater than or equal to 0.1\n}\n\n/**\n * Rounds distance driven to nearest tenth.\n * @param {number} rawDistanceDriven\n * @returns {string}\n */\nexport function roundDistanceDriven(rawDistanceDriven: number) {\n return (Math.round(rawDistanceDriven * 10) / 10).toFixed(1); // round to nearest tenth\n}\n\n/**\n * Rounds fuel efficiency to nearest tenth.\n * @param {number} rawFuelEfficiency\n * @returns {string}\n */\nexport function roundFuelEfficiency(rawFuelEfficiency: number) {\n if (!rawFuelEfficiency || rawFuelEfficiency == 0) {\n return ZERO_OR_NULL_PLACEHOLDER_STRING;\n }\n return (Math.round(rawFuelEfficiency * 10) / 10).toFixed(1); // round to nearest tenth\n}\n\n/**\n * Converts a coordinate to DMS format\n */\nexport function getDMSStringFromCoordinates(\n latitude: number,\n longitude: number\n): { displayString: string; ariaString: string } {\n const latDirection = latitude >= 0 ? 'N' : 'S',\n lngDirection = longitude >= 0 ? 'E' : 'W',\n ariaLatDirection = latitude >= 0 ? 'North' : 'South',\n ariaLngDirection = longitude >= 0 ? 'East' : 'West',\n latDMS = getDMSStringFromDouble(latitude),\n lngDMS = getDMSStringFromDouble(longitude),\n displayString = `${latDMS.degrees}°${latDMS.minutes}'${latDMS.seconds}\" ${latDirection} ${lngDMS.degrees}°${lngDMS.minutes}'${lngDMS.seconds}\" ${lngDirection}`,\n ariaString = `${latDMS.degrees} degrees ${latDMS.minutes} minutes ${latDMS.seconds} seconds ${ariaLatDirection} ${lngDMS.degrees} degrees ${lngDMS.minutes} minutes ${lngDMS.seconds} seconds ${ariaLngDirection}`;\n\n return { displayString, ariaString };\n}\n\nfunction getDMSStringFromDouble(coord: number): { degrees: number; minutes: number; seconds: string } {\n coord = Math.abs(coord);\n const degrees = Math.floor(coord);\n let minutes = (coord - degrees) * 60.0;\n const seconds = (minutes - Math.floor(minutes)) * 60.0;\n\n minutes = Math.floor(minutes);\n return { degrees, minutes, seconds: (Math.round(seconds * 100) / 100).toFixed(2) };\n}\n\nexport function convertMetersToMiles(valueInMeters: number): number {\n return valueInMeters / METERS_TO_MILES_CONVERSION_FACTOR;\n}\n\nexport function convertMilesToMeters(valueInMiles: number): number {\n return valueInMiles * METERS_TO_MILES_CONVERSION_FACTOR;\n}\n\nexport function convertCultureUnitsToMeters(distanceValue: number, isMetric: boolean): number {\n if (isMetric) {\n return Math.round(distanceValue * 1000);\n }\n return Math.round(convertMilesToMeters(distanceValue));\n}\n\nexport function convertMetersToCultureUnits(distanceValue: number, isMetric: boolean): number {\n if (isMetric) {\n return Math.round(distanceValue / 1000);\n }\n return Math.round(convertMetersToMiles(distanceValue));\n}\n","/**\n * Utility helper module for form elements.\n * @module\n */\n\nimport { createBinaryInputItemObject } from '@adc/ui-components/utils/binary-input';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\n/**\n * Creates an object representing an item in a dropdown list\n *\n * @deprecated This will be removed in favor of importing DropdownSelectItem manually.\n *\n * @param {String} name - Label for the item\n * @param {String|number|boolean} value - Value for the item\n * @param {String=} description - Additional description for the label of the item\n * @param {boolean} [enabled=true] - Is the item will be selectable in the dropdown?\n *\n * @returns {{name: String, value: String|number|boolean, description: undefined|String, enabled: boolean}}\n */\nexport function getDropdownSelectItemObject(name, value, description, enabled = true) {\n return DropdownSelectItem.create({ name, value, description, disabled: !enabled });\n}\n\n/**\n * Creates an object representing a binary-input item (e.g. checkbox, radio, or toggle item).\n *\n * @param {number | string} id - ID to identify the item in a group.\n * @param {String} label - Label for the item.\n * @param {boolean} value - Binary state (on/off) for the item.\n * @param {String|undefined} [icon=undefined] - The name of the icon to display with the binary input.\n * @param {boolean} [disabled=false] - Is this item disabled?\n *\n * @returns {BinaryInputItemType}\n */\nexport function createBinaryInputItem(id, label, value, icon, disabled = false) {\n return createBinaryInputItemObject(id, label, value, icon, disabled);\n}\n\n/**\n * The configuration item for a single binary input button.\n *\n * @typedef {{\n * id: number,\n * label: String,\n * value: boolean,\n * icon: String,\n * disabled: Parameter\n * }} BinaryInputItemType\n *\n * @property {number} id ID to identify the item in a group.\n * @property {String} label Label for the item.\n * @property {boolean} value Binary state (on/off) for the item.\n * @property {String|undefined} [icon=undefined] The name of the icon to display with the binary input.\n * @property {boolean} [disabled=false] Is this item disabled?\n *\n * @global\n */\n","/**\n * Utility helper module for garage doors.\n * @module\n */\n\nimport { Closed, Open, Hidden } from '../enums/GarageDoorStatus';\nimport { getDeviceStateCSS } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current garage state.\n */\nexport function getGarageStateCSS(state: number, flipState = false): string {\n return getDeviceStateCSS(state, [Closed, Open, Hidden], ['closed', 'open', 'hidden-status'], flipState);\n}\n\n/**\n * Returns the indicated state in text form.\n */\nexport function getGarageStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string,\n inTransition = false\n): string {\n let key;\n\n if (state === Hidden) {\n key = 'hidden';\n } else if (inTransition) {\n key = state === Closed ? 'closing' : 'opening';\n } else {\n key = state === Closed ? 'closed' : 'opened';\n }\n\n return getTranslation(`home.garage.${key}`);\n}\n","/**\n * Utility helper module for gates.\n * @module\n */\n\nimport { Closed, Open, Hidden } from '../enums/GateStatus';\nimport { getDeviceStateCSS } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current gate state.\n */\nexport function getGateStateCSS(state: number, flipState = false): string {\n return getDeviceStateCSS(state, [Closed, Open, Hidden], ['closed', 'open', 'hidden-status'], flipState);\n}\n\n/**\n * Returns the indicated state in text form.\n */\nexport function getGateStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string,\n inTransition = false\n): string {\n let key;\n\n if (state === Hidden) {\n key = 'hidden';\n } else if (inTransition) {\n key = state === Closed ? 'closing' : 'opening';\n } else {\n key = state === Closed ? 'closed' : 'opened';\n }\n\n return getTranslation(`home.gates.${key}`);\n}\n","/**\n * Utility helper module for general purposes.\n * @module\n */\n\nconst GLOBAL_ID_SEPARATOR = '-';\n\n/**\n * Attempts to find an element of an array using the passed in function\n * as the find criteria. Returns the first found or undefined.\n *\n * @param {Array} array Array of objects to search\n * @param {Function} asyncFunc Function that returns a boolean used to find an element of the array\n * @returns {Promise}\n */\nexport async function asyncFind(array, asyncFunc) {\n for (let i = 0; i < array.length; i++) {\n if (await asyncFunc(array[i])) {\n return array[i];\n }\n }\n\n return undefined;\n}\n\n/**\n * Checks if a given JSON object is empty/{}\n *\n * @param {Object} obj Any arbitrary JSON object.\n *\n * @returns {boolean}\n */\nexport function isEmptyObject(obj) {\n if (obj) {\n return Object.keys(obj).length === 0;\n }\n\n return true;\n}\n\n/**\n * Gets the global ID from the unit ID and device ID.\n *\n * @param {number|string} unitId\n * @param {number|string} deviceId\n * @returns {string} A string containing the unit ID and device ID separated by a '-'.\n *\n * @public\n * @static\n * @function\n */\nexport function getGlobalIdFromUnitAndDevice(unitId, deviceId) {\n return `${unitId}${GLOBAL_ID_SEPARATOR}${deviceId}`;\n}\n\n/**\n * Gets the device ID from the global ID.\n *\n * @param {string} globalId\n * @returns {string} A string containing only the device ID.\n *\n * @public\n * @static\n * @function\n */\nexport function getDeviceIdFromGlobalId(globalId) {\n if (!globalId) {\n return undefined;\n }\n\n return globalId.split(GLOBAL_ID_SEPARATOR)[1];\n}\n\n/**\n * Gets an error message found in a catch statement.\n */\nexport function getCaughtError(error) {\n return error.errors?.length ? error.errors[0].detail : error.message;\n}\n","import { tracked } from '@glimmer/tracking';\nimport merge from 'deepmerge';\n\nimport type { Options } from 'highcharts';\n\nexport default class LineChart {\n @tracked chartOptions;\n\n /**\n * Create a LineChart compatible with the `draw-chart` modifier.\n *\n * @param chartOptions The chart options to be provided to Highcharts.\n * @see {@link https://api.highcharts.com/highcharts/plotOptions.line}\n */\n constructor({ chartOptions }: { chartOptions: Options }) {\n this.chartOptions = chartOptions;\n }\n\n /**\n * Merges user-specified chart options with the defaults that should be true for any Line Chart that we want to show\n * on the customer site.\n */\n get highchartsOptions(): Options {\n const { chartOptions, isLegendEnabled } = this;\n\n return merge(\n {\n chart: {\n backgroundColor: 'transparent',\n type: 'line'\n },\n\n legend: {\n enabled: isLegendEnabled\n }\n },\n chartOptions\n );\n }\n\n /**\n * Gets whether the legend should be enabled on the chart.\n */\n get isLegendEnabled(): boolean {\n const { series } = this.chartOptions;\n\n return (series?.length ?? 0) > 1;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport merge from 'deepmerge';\n\nimport type { SeriesColumnOptions, Options, PointOptionsObject } from 'highcharts';\n\n/**\n * Adds a css class to the very top point for stacked column charts.\n *\n * @param series The series to add the css classes to.\n */\nfunction addClassToTopPoint(series: SeriesColumnOptions[]): void {\n if (!series || !series.length) {\n return;\n }\n\n let maxDataLength = 0;\n\n series.forEach((item) => {\n if (item.data && item.data.length > maxDataLength) {\n maxDataLength = item.data.length;\n }\n });\n\n // If there are no data points, return.\n if (!maxDataLength) {\n return;\n }\n\n const topIndex = Array(maxDataLength);\n for (let dataIndex = 0; dataIndex < topIndex.length; dataIndex++) {\n // Shallow copying and reversing it since highcharts orders the last item at the top for stacked column charts.\n const reversedSeries = [...series].reverse();\n reversedSeries.every((item) => {\n if (!item.data) {\n return true;\n }\n\n const point = item.data[dataIndex];\n if (!point) {\n return true;\n }\n\n // If data is not of type PointOptionsObject, convert it so that className can be applied.\n if (typeof point === 'number') {\n item.data[dataIndex] = { y: point };\n }\n\n const pointY = (item.data[dataIndex]).y;\n if (pointY) {\n (item.data[dataIndex]).className = 'top-point';\n return false;\n }\n\n return true;\n });\n }\n}\n\nexport default class VerticalBarChart {\n @tracked chartOptions;\n\n /**\n * Create a VerticalBarChart compatible with the `draw-chart` modifier.\n *\n * @param chartOptions The chart options to be provided to Highcharts.\n * @see {@link https://api.highcharts.com/highcharts/plotOptions.column}\n */\n constructor({ chartOptions }: { chartOptions: Options }) {\n this.chartOptions = chartOptions;\n }\n\n /**\n * Gets merged user-specified chart options with defaults that should be true for any VBar Chart that we want to show\n * on the customer site\n */\n get highchartsOptions(): Options {\n const { chartOptions, isLegendEnabled } = this;\n\n addClassToTopPoint(chartOptions.series as SeriesColumnOptions[]);\n\n return merge(\n {\n chart: {\n backgroundColor: 'transparent',\n type: 'column'\n },\n\n legend: {\n enabled: isLegendEnabled\n },\n\n plotOptions: {\n column: {\n stacking: 'normal'\n }\n }\n },\n chartOptions\n );\n }\n\n /**\n * Gets whether the legend should be enabled on the chart.\n */\n get isLegendEnabled(): boolean {\n const { series } = this.chartOptions;\n\n return (series?.length ?? 0) > 1;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport merge from 'deepmerge';\n\nimport type { Options } from 'highcharts';\n\nexport default class XrangeChart {\n @tracked chartOptions;\n\n /**\n * Create an XRange chart compatible with the `draw-chart` modifier.\n *\n * @param chartOptions The chart options to be provided to Highcharts.\n * @see {@link https://api.highcharts.com/highcharts/plotOptions.xrange}\n */\n constructor({ chartOptions }: { chartOptions: Options }) {\n this.chartOptions = chartOptions;\n }\n\n /**\n * Merges the user-specified options with XRange defaults to get the Highcharts options for the chart.\n */\n get highchartsOptions(): Options {\n const { chartOptions, isLegendEnabled } = this;\n\n return merge(\n {\n chart: {\n backgroundColor: 'transparent',\n type: 'xrange'\n },\n\n legend: {\n enabled: isLegendEnabled\n }\n },\n chartOptions\n );\n }\n\n /**\n * Gets whether the legend should be enabled on the chart.\n */\n get isLegendEnabled(): boolean {\n const { series } = this.chartOptions;\n\n return (series?.length ?? 0) > 1;\n }\n}\n","/**\n * Utility helper module for json methods.\n * @module\n */\n\n/**\n * Detects if the string passed is a JSON string (a string that will parse into any object) and returns the resulting object if so.\n */\nexport function getObjectIfJsonString(string: string): any | undefined {\n let parsedObject;\n\n try {\n parsedObject = JSON.parse(string);\n } catch (e) {\n return undefined;\n }\n\n return parsedObject;\n}\n\n/**\n * Detects if the string passed is a JSON string that will parse into an array of strings, and returns the resulting object if so.\n */\nexport function getStringArrayIfJsonString(string: string): Array | undefined {\n const parsedObject = getObjectIfJsonString(string);\n\n return Array.isArray(parsedObject) && parsedObject.every((item) => typeof item === 'string')\n ? parsedObject\n : undefined;\n}\n","/**\n * Utility helper module for light devices.\n * @module\n */\n\nimport { camelize } from '@ember/string';\nimport {\n Circulate,\n Desktop,\n FanOn,\n FeatureSpeaker,\n Light,\n Media,\n NotSet,\n SceneButton,\n SceneGame,\n StatusBatteryCharging,\n SumpPumpRunning,\n SwitchOn,\n ThermostatModeCool,\n ThermostatModeHeat,\n Tree,\n VideoCamera,\n Wifi\n} from 'customer-site/enums/Icon';\nimport IconMap from 'customer-site/enums/IconMap';\nimport { On, Off, Offline, NoState } from '../enums/LightStatus';\nimport { getDeviceStateKey } from './device-state';\n\nimport type AdcIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param state The state to show.\n * @param flipState If true we should return the CSS for the opposite state (does not apply to \"Unknown\" state).\n */\nexport function getLightStateCSS(state: number, flipState = false): string {\n if (flipState) {\n switch (state) {\n case On:\n state = Off;\n break;\n case Off:\n state = On;\n break;\n }\n }\n\n return (\n {\n [On]: 'on',\n [Off]: 'off',\n [NoState]: 'no-state',\n [Offline]: 'offline'\n }[state] ?? 'no-state'\n );\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param state The state to represent.\n * @param isDimmer Is the light a dimmer?\n * @param lightLevel Light level of the dimmer.\n * @param getTranslation - Function that gets translation by key.\n * @param inTransition Indicates the lock is in transition to the indicated state.\n */\nexport function getLightStateText(\n state: number,\n isDimmer: boolean,\n lightLevel: number,\n getTranslation: AdcIntlService['t'],\n inTransition = false\n): string {\n if (state === NoState) {\n return '';\n }\n\n if (state === Offline) {\n return getTranslation(`generic.${camelize(getLightStateCSS(state))}`);\n }\n\n if (!isDimmer || state === Off) {\n return getTranslation(`generic.${getDeviceStateKey(getLightStateCSS, state, inTransition)}`);\n }\n\n return `${lightLevel}%`;\n}\n\n/**\n * List of available custom icons as strings for light or switch devices.\n * This list should be the same as IconEnumExtensions.cs in Alarm.Swtiches.Core.\n */\nexport const lightCustomIcons = [\n IconMap[NotSet],\n IconMap[SwitchOn],\n IconMap[Wifi],\n IconMap[FanOn],\n IconMap[SceneGame],\n IconMap[StatusBatteryCharging],\n IconMap[VideoCamera],\n IconMap[Desktop],\n IconMap[FeatureSpeaker],\n IconMap[Media],\n IconMap[SumpPumpRunning],\n IconMap[Tree],\n IconMap[ThermostatModeCool],\n IconMap[ThermostatModeHeat],\n IconMap[Circulate],\n IconMap[SceneButton],\n IconMap[Light]\n];\n","/**\n * Utility helper module for lock devices.\n * @module\n */\n\nimport { camelize } from '@ember/string';\nimport { Hidden, Locked, Unlocked } from '../enums/LockStatus';\nimport { getDeviceStateCSS, getDeviceStateKey } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n */\nexport function getLockStateCSS(state: number, flipState = false): string {\n return getDeviceStateCSS(state, [Locked, Unlocked, Hidden], ['locked', 'unlocked', 'hidden-status'], flipState);\n}\n\n/**\n * Returns the indicated state in text form.\n */\nexport function getLockStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string,\n inTransition = false\n): string {\n return getTranslation(`generic.${camelize(getDeviceStateKey(getLockStateCSS, state, inTransition))}`);\n}\n","import { constrainRange, isBetween } from '@adc/ember-utils/utils/math';\n\nexport type Point = { x: number; y: number };\n\nconst TAU = 2 * Math.PI;\n\n/**\n * Utility file containing standard math functions.\n * @module\n */\n\n/**\n * Determines if two (finite) line segments intersect.\n * (x1, y1) --- (x2, y2) form one line.\n * (x3, y3) --- (x4, y4) form another line.\n * Also allows for an epsilon buffer value, used in calculations to see if the calculated intersection point exists on both segments.\n *\n * @note Eps > 0 is recommended, particularly between horizontal/vertical lines, due to floating-point calculation imperfections.\n * @note Otherwise, for example, using a line (0, 180) --- (50, 180) may fail if the calculated intersection point is (10, 180.000000001).\n *\n * @param x1 Line one, point one, x value.\n * @param y1 Line one, point one, y value.\n * @param x2 Line one, point two, x value.\n * @param y2 Line one, point two, y value.\n * @param x3 Line two, point one, x value.\n * @param y3 Line two, point one, y value.\n * @param x4 Line two, point two, x value.\n * @param y4 Line two, point two, y value.\n * @param [eps=0.00001] Small epsilon buffer value used when comparing values with < and >.\n *\n * @returns Whether the two lines intersect.\n */\nexport function doLinesIntersect(\n { x: x1, y: y1 }: Point,\n { x: x2, y: y2 }: Point,\n { x: x3, y: y3 }: Point,\n { x: x4, y: y4 }: Point,\n eps = 0.00001\n): boolean {\n // Calculate intersection point of the lines, and confirm point contains real numbers.\n const numeratorInput1 = x1 * y2 - y1 * x2,\n numeratorInput2 = x3 * y4 - y3 * x4,\n denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4),\n x = (numeratorInput1 * (x3 - x4) - (x1 - x2) * numeratorInput2) / denominator,\n y = (numeratorInput1 * (y3 - y4) - (y1 - y2) * numeratorInput2) / denominator;\n\n // If x or y are NaN, lines are parallel.\n if (Number.isNaN(x) || Number.isNaN(y)) {\n return false;\n }\n\n // Non-parallel infinite lines will always cross, but our finite lines may not.\n // Make sure the intersection (x,y) is actually within the scope of our finite lines. Otherwise, no intersection.\n return (\n isBetween(x, x1, x2, eps) && isBetween(y, y1, y2, eps) && isBetween(x, x3, x4, eps) && isBetween(y, y3, y4, eps)\n );\n}\n\n/**\n * Returns the Euclidean distance between two 2D points, (x1, y1) and (x2, y2).\n *\n * @param x1 Point one, x value.\n * @param y1 Point one, y value.\n * @param x2 Point two, x value.\n * @param y2 Point two, y value.\n *\n * @returns The distance between points one and two.\n */\nexport function distanceBetweenPoints({ x: x1, y: y1 }: Point, { x: x2, y: y2 }: Point): number {\n return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n}\n\n/**\n * Returns the shortest distance between a point and a (finite) line segment, defined by two points.\n * (x1, y1) --- (x2, y2) form a line segment.\n * (px, py) is a point.\n *\n * @param x1 Line point one, x value.\n * @param y1 Line point one, y value.\n * @param x2 Line point two, x value.\n * @param y2 Line point two, y value.\n * @param px Single point, x value.\n * @param py Single point, y value.\n *\n * @returns The distance between the point and the finite line segment.\n */\nexport function distanceBetweenFiniteLineAndPoint(\n { x: x1, y: y1 }: Point,\n { x: x2, y: y2 }: Point,\n { x: px, y: py }: Point\n): number {\n const lineLengthSquared = Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2);\n\n // Length (and squared length) is 0 if (x1, y1) and (x2, y2) are the same points.\n if (lineLengthSquared === 0) {\n return distanceBetweenPoints({ x: x1, y: y1 }, { x: px, y: py });\n }\n\n // Find the point on the infinite (x1, y1) --- (x2, y2) line closest to (px, py),\n // but then constrain it so it exists between (x1, y1) and (x2, y2).\n const t = constrainRange(((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / lineLengthSquared, 0, 1),\n forcedProjectionX = x1 + t * (x2 - x1),\n forcedProjectionY = y1 + t * (y2 - y1);\n\n // This forced projection will be the closest point to (px, py), so find that distance.\n return distanceBetweenPoints({ x: px, y: py }, { x: forcedProjectionX, y: forcedProjectionY });\n}\n\n/**\n * Returns the distance between two (finite) line segments.\n * (x1, y1) --- (x2, y2) form one line segment.\n * (x3, y3) --- (x4, y4) form another line segment.\n *\n * @param x1 Line one, point one, x value.\n * @param y1 Line one, point one, y value.\n * @param x2 Line one, point two, x value.\n * @param y2 Line one, point two, y value.\n * @param x3 Line two, point one, x value.\n * @param y3 Line two, point one, y value.\n * @param x4 Line two, point two, x value.\n * @param y4 Line two, point two, y value.\n *\n * @returns The distance between the two finite line segments.\n */\nexport function distanceBetweenTwoFiniteLines(\n { x: x1, y: y1 }: Point,\n { x: x2, y: y2 }: Point,\n { x: x3, y: y3 }: Point,\n { x: x4, y: y4 }: Point\n): number {\n // The distance between two lines, AB and CD, is the shortest distance between:\n // AB and C, AB and D, CD and A, and CD and B.\n // (Where A, B, C, D are (x1, y1), (x2, y2), (x3, y3), (x4, y4).)\n return Math.min(\n distanceBetweenFiniteLineAndPoint({ x: x1, y: y1 }, { x: x2, y: y2 }, { x: x3, y: y3 }),\n distanceBetweenFiniteLineAndPoint({ x: x1, y: y1 }, { x: x2, y: y2 }, { x: x4, y: y4 }),\n distanceBetweenFiniteLineAndPoint({ x: x3, y: y3 }, { x: x4, y: y4 }, { x: x1, y: y1 }),\n distanceBetweenFiniteLineAndPoint({ x: x3, y: y3 }, { x: x4, y: y4 }, { x: x2, y: y2 })\n );\n}\n\n/**\n * Returns the angle between two lines.\n * (x1, y1) --- (x2, y2) form one line.\n * (x2, y2) --- (x3, y3) form another line, connected to the first via (x2, y2).\n * Result is in degrees. Multiply result by PI/180 to get answer in radians.\n *\n * @param x1 Point one, x value.\n * @param y1 Point one, y value.\n * @param x2 Point two, x value - center point in angle.\n * @param y2 Point two, y value - center point in angle.\n * @param x3 Point three, x value.\n * @param y3 Point three, y value.\n *\n * @returns The number of degrees in the angle formed by points one, two, and three (in that order).\n */\nexport function angleBetweenLines({ x: x1, y: y1 }: Point, { x: x2, y: y2 }: Point, { x: x3, y: y3 }: Point): number {\n const length12 = distanceBetweenPoints({ x: x1, y: y1 }, { x: x2, y: y2 }),\n length13 = distanceBetweenPoints({ x: x1, y: y1 }, { x: x3, y: y3 }),\n length23 = distanceBetweenPoints({ x: x2, y: y2 }, { x: x3, y: y3 }),\n degreeConversion = 180 / Math.PI;\n\n // The Law of Cosines.\n return (\n Math.acos((Math.pow(length12, 2) + Math.pow(length23, 2) - Math.pow(length13, 2)) / (2 * length12 * length23)) *\n degreeConversion\n );\n}\n\n/**\n * Checks if a line segment crosses a horizontal ray casted from the point (cX, cY).\n *\n * @param p1, First point of the edge.\n * @param p2, Second point of the edge.\n * @param cX, X coordinate of point that we're casting the ray from.\n * @param cY, Y coordinate of point that we're casting the ray from.\n *\n * @returns Whether or not the line segment intersects with the horizontal ray\n */\nexport function doesLineSegmentAndHorizontalRayIntersect(p1: Point, p2: Point, cX: number, cY: number): boolean {\n // Get the delta vector.\n const delta = { x: p2.x - p1.x, y: p2.y - p1.y };\n\n if (delta.y === 0) {\n return false;\n }\n\n const t = (cY - p1.y) / delta.y,\n s = p1.x + delta.x * t - cX;\n\n // Checks if there is an intersection.\n return isBetween(t, 0, 1) && s >= 0;\n}\n\n/**\n * Gets angle of segment.\n *\n * @param x1 Point one, x value.\n * @param y1 Point one, y value.\n * @param x2 Point two, x value.\n * @param y2 Point two, y value..\n *\n * @returns The number of degrees for segment angle.\n */\nexport function getSegmentAngle({ x: x1, y: y1 }: Point, { x: x2, y: y2 }: Point): number {\n return Math.atan2(y2 - y1, x2 - x1);\n}\n\n/**\n * Checks if a point is within the bounds of a shape defined by an array of vertices using\n * the algorithm described at https://en.wikipedia.org/wiki/Point_in_polygon#Ray_casting_algorithm.\n *\n * @param points, Array of vertices that make up the shape.\n * @param cX, X coordinate of point that we're checking for.\n * @param cY, Y coordinate of point that we're checking for.\n *\n * @returns Whether or not the point is within the shape.\n */\nexport function isPointInShape(points: Array, cX: number, cY: number): boolean {\n if (points.length === 0) {\n return false;\n }\n\n let intersectionCount = 0;\n\n for (let i = 0; i < points.length; i++) {\n // get 2 points that make up an edge of a shape\n const p1 = points[i],\n p2 = points[(i + 1) % points.length];\n\n // checks if there is an intersect between line segment and horizontal ray\n if (doesLineSegmentAndHorizontalRayIntersect(p1, p2, cX, cY)) {\n intersectionCount++;\n }\n }\n\n return intersectionCount % 2 === 1;\n}\n\n/**\n * Rotates a point around another point by multiplying the vector by the rotation matrix.\n *\n * @param point, 2D point with x and y coordinate.\n * @param cX, x coordinate of point that we're rotating around.\n * @param cY, y coordinate of point that we're rotating around.\n * @param angle, amount that we're rotating in radians counter clockwise.\n *\n * @returns Rotated point\n */\nexport function rotatePoint(point: Point, cX: number, cY: number, angle: number): Point {\n // Translate pivot point to (0,0)\n const deltaX = point.x - cX,\n deltaY = point.y - cY,\n cos = Math.cos(angle),\n sin = Math.sin(angle);\n\n // rotate translated point around origin\n const diffX = deltaX * cos - deltaY * sin,\n diffY = deltaX * sin + deltaY * cos;\n\n // move point back to around pivot location\n return { x: diffX + cX, y: diffY + cY };\n}\n\n/**\n * Finds the midpoint between two points.\n *\n * @param startPoint\n * @param endPoint\n *\n * @returns The midpoint.\n */\nexport function findMidPoint({ x: x1, y: y1 }: Point, { x: x2, y: y2 }: Point): Point {\n return {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n };\n}\n\n/**\n * Changes the angle to be within -PI and PI.\n *\n * @param angle\n * @returns The angle within -PI and PI.\n */\nexport function getAngleWithinRange(angle: number): number {\n angle %= TAU;\n if (angle > Math.PI) {\n angle -= TAU;\n } else if (angle < -Math.PI) {\n angle += TAU;\n }\n\n return angle;\n}\n\n/**\n * Returns the smallest angle difference between 2 angles in radians.\n *\n * @param angle1\n * @param angle2\n *\n * @returns The smallest angle difference between 2 angles in radians.\n */\nexport function getAngleDistance(angle1: number, angle2: number): number {\n const delta = getAngleWithinRange(angle1) - getAngleWithinRange(angle2);\n\n // Angles can have many values so check those different values.\n return Math.min(Math.abs(delta), Math.abs(delta + TAU), Math.abs(delta - TAU));\n}\n\n/**\n * Returns true when `value` is a number or a string that can be parsed as a number.\n * Returns false when `value` is null, undefined, or a non-parsing string.\n *\n * @param value\n * @returns Whether `value` can be parsed as a number.\n */\nexport function isNumber(value: any): boolean {\n return !Number.isNaN(parseFloat(value));\n}\n","/**\n * Utility helper module for mpers devices.\n * @module\n */\n\nimport {\n Active,\n Charging,\n Panic,\n FallDetected,\n Unregistered,\n NoCommunication,\n LowBattery,\n CriticalBattery\n} from '../enums/MpersDeviceStatus';\nimport { getDeviceStateKey, getDeviceStateCSS } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n */\nexport function getMpersDeviceStateCSS(state: number): string {\n return getDeviceStateCSS(\n state,\n [Unregistered, Active, Charging, Panic, FallDetected, NoCommunication, LowBattery, CriticalBattery],\n ['pending', 'active', 'charging', 'panic', 'fallDetected', 'noCommunication', 'lowBattery', 'criticalBattery'],\n false\n );\n}\n\n/**\n * Returns the indicated state in text form.\n */\nexport function getMpersDeviceStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string,\n inTransition = false\n): string {\n return getTranslation(`generic.${getDeviceStateKey(getMpersDeviceStateCSS, state, inTransition)}`);\n}\n","/**\n * Utility helper module for partition/systems.\n * @module\n */\n\nimport { camelize } from '@ember/string';\nimport { Unknown, Disarmed, ArmedAway, ArmedStay, ArmedNight, Hidden } from '../enums/ArmingState';\nimport { getDeviceStateKey } from './device-state';\n\nimport type AdcIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * The resource name for the generic armed edge case.\n * Should match the resource name in home.partitions\n */\nconst GENERIC_ARMED_RESOURCE = 'armed-only';\n\n/**\n * State for when we want to arm but don't want to say Armed Away or Armed Stay.\n */\nexport const ArmedState = -3;\n\n/**\n * Returns the appropriate CSS class to show the current partition state.\n *\n * @param state The partition state.\n */\nexport function getPartitionStateCSS(state: number): string {\n // Return computed state.\n return (\n {\n [Unknown]: 'unknown',\n [Disarmed]: 'disarmed',\n [ArmedAway]: 'armed-away',\n [ArmedState]: 'armed-away',\n [ArmedStay]: 'armed-stay',\n [ArmedNight]: 'armed-night',\n [Hidden]: 'hidden-status'\n }[state] ?? 'unknown'\n );\n}\n\n/**\n * Returns the appropriate icon name for the current partition state.\n *\n * @param state The partition state.\n */\nexport function getPartitionStateIcon(state: number): string {\n // Return computed state.\n return (\n {\n [Unknown]: 'unknown',\n [Disarmed]: 'system-disarmed',\n [ArmedAway]: 'system-armed-away',\n [ArmedState]: 'system-armed-away',\n [ArmedStay]: 'system-armed-stay',\n [ArmedNight]: 'system-armed-night',\n [Hidden]: 'system'\n }[state] ?? 'unknown'\n );\n}\n\n/**\n * Returns the name for the current partition state. Needed to properly localize the 'Armed' edge case.\n * @param state The partition state.\n */\nfunction getPartitionStateName(state: number): string {\n if (state == ArmedState) {\n return GENERIC_ARMED_RESOURCE;\n }\n\n return getPartitionStateCSS(state);\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param state The state to represent.\n * @param getTranslation - Function that gets translation by key.\n * @param inTransition Indicates the partition is in transition to the indicated state.\n */\nexport function getPartitionStateText(\n state: Parameters[1],\n getTranslation: AdcIntlService['t'],\n inTransition = false\n): string {\n return getTranslation(`home.partitions.${camelize(getDeviceStateKey(getPartitionStateName, state, inTransition))}`);\n}\n","/**\n * PointCentral uses Fullstory for user tracking\n */\nexport function addFullstoryTrackingScript(loginId: string, fullStoryConfig: string): void {\n const fullstoryScript = document.createElement('script'),\n fullstoryIdScript = document.createElement('script');\n fullstoryScript.text = `\n window['_fs_debug'] = false;\n window['_fs_host'] = 'fullstory.com';\n window['_fs_script'] = 'edge.fullstory.com/s/fs.js';\n window['_fs_org'] = 'o-1C3ZV8-na1';\n window['_fs_namespace'] = 'FS';\n (function (m, n, e, t, l, o, g, y) {\n if (e in m) { if (m.console && m.console.log) { m.console.log('FullStory namespace conflict. Please set window[\"_fs_namespace\"].'); } return; }\n g = m[e] = function (a, b, s) { g.q ? g.q.push([a, b, s]) : g._api(a, b, s); }; g.q = [];\n o = n.createElement(t); o.async = 1; o.crossOrigin = 'anonymous'; o.src = 'https://' + _fs_script;\n y = n.getElementsByTagName(t)[0]; y.parentNode.insertBefore(o, y);\n g.identify = function (i, v, s) { g(l, { uid: i }, s); if (v) g(l, v, s) }; g.setUserVars = function (v, s) { g(l, v, s) }; g.event = function (i, v, s) { g('event', { n: i, p: v }, s) };\n g.anonymize = function () { g.identify(!!0) };\n g.shutdown = function () { g(\"rec\", !1) }; g.restart = function () { g(\"rec\", !0) };\n g.log = function (a, b) { g(\"log\", [a, b]) };\n g.consent = function (a) { g(\"consent\", !arguments.length || a) };\n g.identifyAccount = function (i, v) { o = 'account'; v = v || {}; v.acctId = i; g(o, v) };\n g.clearUserCookie = function () { };\n g.setVars = function (n, p) { g('setVars', [n, p]); };\n g._w = {}; y = 'XMLHttpRequest'; g._w[y] = m[y]; y = 'fetch'; g._w[y] = m[y];\n if (m[y]) m[y] = function () { return g._w[y].apply(this, arguments) };\n g._v = \"1.3.0\";\n })(window, document, window['_fs_namespace'], 'script', 'user');\n `;\n\n fullstoryIdScript.type = 'text/javascript';\n fullstoryIdScript.text = `\n FS.identify(${loginId}, ${fullStoryConfig});\n `;\n document.body.appendChild(fullstoryScript);\n document.body.appendChild(fullstoryIdScript);\n}\n","import { setProperties } from '@ember/object';\n\n/**\n * Utility helper module observing properties without the usage of the ember observer.\n * @module\n */\n\n/**\n * Whether the observed properties have been changed (or if the cache is empty and needs to be created).\n *\n * @param cachedProperties\n * @param observedProperties\n * @returns {boolean}\n */\nexport function observedPropertiesAreChanged(cachedProperties, observedProperties) {\n if (!cachedProperties) {\n // If the cache is empty it needs to be updated.\n return true;\n }\n\n return Object.keys(observedProperties).some((key) => cachedProperties[key] !== observedProperties[key]);\n}\n\n/**\n * Used for observing properties. If observed properties are changed, it will update the cached properties object and return true, otherwise returns false.\n *\n * @param observedPropertyNames An array of strings representing variables to observe here.\n * @param nameOfCachedPropertiesObject String represents the variable for storing the cached properties\n * @returns {boolean}\n */\nexport function propertiesObserverTrigger(observedPropertyNames, nameOfCachedPropertiesObject) {\n const currentProperties = retrieveObservedProperties.call(this, observedPropertyNames),\n cachedProperties = this.get(nameOfCachedPropertiesObject);\n\n if (observedPropertiesAreChanged(cachedProperties, currentProperties)) {\n if (cachedProperties) {\n setProperties(cachedProperties, currentProperties);\n } else {\n this.set(nameOfCachedPropertiesObject, currentProperties);\n }\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Retrieves an object of the properties being observed.\n *\n * @param observedPropertyNames An array of strings representing variables to observe here.\n *\n * @instance\n * @returns {Object}\n */\nexport function retrieveObservedProperties(observedPropertyNames) {\n let currentValues = {};\n\n observedPropertyNames.forEach((observedVariable) => {\n currentValues[observedVariable] = this.get(observedVariable);\n });\n\n return currentValues;\n}\n","import * as SceneButtonKeyAttributeEnumType from 'customer-site/enums/SceneButtonKeyAttributeEnumType';\n\nimport type { IntlTextOptions } from '@adc/i18n/utils/get-translation';\nimport type SimpleListItem from '@adc/ui-components/components/simple-list/list-item';\nimport type IconData from './transforms-objects/icon-data';\n\n/**\n * Utility helper module for scene rule displays.\n * @module\n */\n\nexport type SceneRuleListItem = SimpleListItem<{\n actionType: number;\n buttonNumber: number;\n isSuggested: boolean;\n icon?: IconData;\n ruleId?: string;\n}>;\n\ntype TranslationFunction = (resource: string, options?: IntlTextOptions | undefined) => string;\n\n/**\n * Map an action type to a translation string, and add the button number as a parameter.\n * @param button the button associated with the scene rule.\n * @param actionType The action type associated with the scene rule.\n * @param getTranslation A function that returns a translation string given an absolute path (i.e. intl.t)\n * @returns A translated string, all in the format: \"Button [number]: [Action]\"\n */\nexport function getTriggerDescription(button: number, actionType: number, getTranslation: TranslationFunction): string {\n let translationKey: string | undefined;\n switch (actionType) {\n case SceneButtonKeyAttributeEnumType.SinglePress:\n translationKey = 'buttonPressed';\n break;\n case SceneButtonKeyAttributeEnumType.KeyHeldDown:\n translationKey = 'buttonLongPressed';\n break;\n case SceneButtonKeyAttributeEnumType.DoublePress:\n translationKey = 'buttonDoublePressed';\n break;\n case SceneButtonKeyAttributeEnumType.TriplePress:\n translationKey = 'buttonTriplePressed';\n break;\n case SceneButtonKeyAttributeEnumType.QuadruplePress:\n translationKey = 'buttonQuadruplePressed';\n break;\n case SceneButtonKeyAttributeEnumType.QuintuplePress:\n translationKey = 'buttonQuintuplePressed';\n break;\n }\n\n if (!translationKey) {\n return getTranslation('generic.unknown');\n }\n return getTranslation(`utils.scene-rule-display.${translationKey}`, { number: button });\n}\n\n/**\n * The compare function for sorting a list of scene rules, using the following sorting priority:\n * 1. Sort by button action (single press, hold, double press, triple press, quad press, quint press)\n * 2. Sort by button number (1-N)\n * @param sceneRuleA An arbitrary scene rule from the list.\n * @param sceneRuleB An arbitrary scene rule from the list.\n * @returns A number that determines which should be sorted first. (negative if A is sorted first, positive if B is).\n */\nexport function sortSceneRuleListItems(sceneRuleA: SceneRuleListItem, sceneRuleB: SceneRuleListItem): number {\n if (sceneRuleA.props.actionType === sceneRuleB.props.actionType) {\n return sceneRuleA.props.buttonNumber - sceneRuleB.props.buttonNumber;\n }\n return sceneRuleA.props.actionType - sceneRuleB.props.actionType;\n}\n","/**\n * Utility helper module for sensor devices.\n * @module\n */\n\nimport { Closed, Open, Active, Idle, Dry, Wet, Low, Full, Issue, Ok, Unknown } from '../enums/SensorStatus';\nimport { getDeviceStateCSS } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param {number} state The state to show.\n */\nexport function getSensorStateCSS(state: number): string {\n return getDeviceStateCSS(\n state,\n [Closed, Open, Active, Idle, Dry, Wet, Low, Full, Issue, Ok],\n ['closed', 'open', 'active', 'idle', 'dry', 'wet', 'low', 'full', 'issue', 'ok'],\n false\n );\n}\n\n/**\n * Returns the appropriate CSS class to show the current state for noise sensors.\n *\n * @param {number} state The state to show.\n */\nexport function getNoiseSensorStateCSS(state: number): string {\n return getDeviceStateCSS(state, [Active, Idle, Unknown], ['active', 'idle', 'offline'], false);\n}\n","/**\n * Utility helper module for determining severity status.\n * @module\n */\nimport { Help, Issue, OkFill, Warning } from '../enums/Icon';\nimport IconMap from '../enums/IconMap';\nimport { Unknown, Ok, Warning as SeverityWarning, Issue as SeverityIssue } from '../enums/SeverityStatus';\n\n/**\n * Returns the icon that corresponds to the given severity enum.\n * [SeverityStatusEnum]: IconEnum\n *\n * @memberof utils\n *\n * @param {number} severity The severity status enum.\n * @returns {String}\n */\nexport function getSeverityStatusIcon(severity) {\n return {\n [Unknown]: IconMap[Help],\n [Ok]: IconMap[OkFill],\n [SeverityWarning]: IconMap[Warning],\n [SeverityIssue]: IconMap[Issue]\n }[severity];\n}\n\n/**\n * Returns a custom CSS class for the given severity enum.\n * [SeverityStatusEnum]: custom-css-string\n *\n * @memberof utils\n *\n * @param {number} severity The severity status enum.\n * @returns {String}\n */\nexport function getSeverityStatusCss(severity) {\n return {\n [Unknown]: 'unknown',\n [Ok]: 'ok',\n [SeverityWarning]: 'warning',\n [SeverityIssue]: 'issue'\n }[severity];\n}\n\n/**\n * Returns a string translation for the given severity enum.\n * [SeverityStatusEnum]: string-translation\n *\n * @memberof utils\n *\n * @param {number} severity The severity status enum.\n * @param {function} getTranslation - Function that gets translation by key.\n * @returns {String}\n */\nexport function getSeverityStatusTranslation(severity, getTranslation) {\n return {\n [Unknown]: getTranslation('generic.unknown'),\n [Ok]: getTranslation('generic.ok'),\n [SeverityWarning]: getTranslation('generic.warning'),\n [SeverityIssue]: getTranslation('generic.issue')\n }[severity];\n}\n","/**\n * Utility helper module for sfg devices.\n * @module\n */\n\nimport { camelize } from '@ember/string';\nimport { Unknown, Deployed, Deploying, Idle } from '../enums/SFGDeviceStatus';\nimport { getDeviceStateCSS, getDeviceStateKey } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n */\nexport function getSFGStateCSS(state: number, flipState = false): string {\n return getDeviceStateCSS(\n state,\n [Unknown, Deployed, Deploying, Idle],\n ['unknown', 'deployed', 'in-deployment', 'ready'],\n flipState\n );\n}\n\n/**\n * Returns the indicated state in text form.\n */\nexport function getSFGStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string,\n inTransition = false\n): string {\n return getTranslation(`generic.${camelize(getDeviceStateKey(getSFGStateCSS, state, inTransition))}`);\n}\n","/**\n * Utility helper module for shade devices.\n * @module\n */\nimport { Changed, Closed, Offline, Open } from '../enums/ShadeStatus';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n */\nexport function getShadeStateCSS(state: number): string {\n return (\n {\n [Open]: 'open',\n [Changed]: 'open',\n [Closed]: 'closed',\n [Offline]: 'unknown'\n } as Record\n )[state];\n}\n\n/**\n * Returns the indicated state in text form.\n *\n */\nexport function getShadeStateText(\n state: number,\n shadeLevel: number,\n getTranslation: (arg0: string, arg1?: Record) => string\n): string {\n if (state === Offline) {\n return '';\n }\n\n if (state === Closed) {\n return getTranslation(`home.shades.${getShadeStateCSS(state)}`);\n }\n\n return `${shadeLevel}%`;\n}\n","/**\n * Utility helper module for slider addons\n * @module\n */\n\n/**\n * Reverse the slider's value by taking difference of max value and current value.\n *\n * @note This can be used to transform to and from the slider value since it's logically the same.\n * @note We reverse the values of the slider so that it transitions from only Very Large circle to all circles. This is more intuitive for the user.\n *\n * @param currentValue - The current value of the slider.\n * @param maxValue - The max value of the slider.\n */\nexport function reverseSliderValue(currentValue: number, maxValue: number): number {\n return maxValue - currentValue;\n}\n","import { htmlSafe } from '@ember/template';\n\n/**\n * Utility helper module for string related methods\n * @module\n */\n\n/**\n * Appends one string to another string with a space in between.\n *\n * @param originalCssClass\n * @param newCssClass\n * @returns {string}\n */\nexport function appendStrings(originalCssClass, newCssClass) {\n return `${originalCssClass} ${newCssClass}`;\n}\n\n/**\n * Returns a string appended to another string (with a space between) if the conditional passed in is true. Otherwise returns the original string untouched.\n *\n * @param conditional\n * @param originalCssClass\n * @param newCssClass\n * @returns {string}\n */\nexport function appendStringsIf(conditional, originalCssClass, newCssClass) {\n return conditional ? appendStrings(originalCssClass, newCssClass) : originalCssClass;\n}\n\n/**\n * Creates a new line separated string using the new line separator based off of whether or not we're in the mobile app.\n *\n * @param {*} contextManager\n * @param {...any} strings an array of strings which we want to separate by either \\n\\n or

    \n * @returns\n */\nexport function getDoubleNewLineSeparatedString(contextManager, ...strings) {\n const { isMobileApp } = contextManager.identityModel,\n newLineSeparator = isMobileApp ? '\\n' : '
    ',\n doubleNewLineSeparatedString = strings.join(`${newLineSeparator}${newLineSeparator}`);\n\n return isMobileApp ? doubleNewLineSeparatedString : htmlSafe(doubleNewLineSeparatedString);\n}\n\n/**\n * Converts a string to HTML-encoded text.\n *\n * @param textToEscape\n * @returns {string}\n */\nexport function escapeHtml(textToEscape) {\n const div = document.createElement('div'),\n textNode = document.createTextNode(textToEscape);\n div.appendChild(textNode);\n return div.innerHTML;\n}\n","/**\n * Utility helper module for css style related methods\n * @module\n */\n\n/**\n * Returns the scale value of an element. This is normally 1 for non-scaled\n *\n * @param element\n * @returns {number}\n */\nexport function getScaleValueForElement(element) {\n const matrixValues = getMatrixFromElement(element);\n\n if (!matrixValues) {\n return;\n }\n\n const a = matrixValues[0],\n b = matrixValues[1];\n\n return Math.sqrt(a * a + b * b);\n}\n\n/**\n * Returns the translate x and translate y values of an element. 0 by default.\n *\n * @param element\n * @returns {{x, y}}\n */\nexport function getTranslateValuesForElement(element) {\n const matrixValues = getMatrixFromElement(element);\n\n if (!matrixValues) {\n return;\n }\n\n return {\n x: matrixValues[4],\n y: matrixValues[5]\n };\n}\n\n/**\n * Creates a matrix array of transform properties of an element.\n *\n * @param element\n * @returns {string[]}\n */\nfunction getMatrixFromElement(element) {\n const computedStyle = getComputedStyle(element),\n { transform } = computedStyle;\n\n if (transform === 'none') {\n return;\n }\n\n return transform.match(/matrix.*\\((.+)\\)/)[1].split(', ');\n}\n","/**\n * Created by msalim on 6/21/2016.\n *\n * Utility helper module for sump pumps.\n * @module\n */\nimport {\n Unknown,\n Idle,\n NormalOperation,\n PossibleIssue,\n PumpInMalfunction,\n PumpNotRunning,\n Offline\n} from '../enums/SumpPumpStatus';\n\n/**\n * Returns the appropriate CSS class to show the current sump pump state.\n */\nexport function getSumpPumpStateCSS(state: number): string {\n // Return computed state.\n return (\n {\n [Unknown]: 'critical',\n [Idle]: 'idle',\n [Offline]: 'unknown',\n [NormalOperation]: 'running',\n [PossibleIssue]: 'critical',\n [PumpInMalfunction]: 'running-critical',\n [PumpNotRunning]: 'critical'\n } as Record\n )[state];\n}\n\n/**\n * Returns the indicated state in text form.\n */\nexport function getSumpPumpStateText(\n state: number,\n getTranslation: (arg0: string, arg1?: Record) => string\n): string {\n const resource = (\n {\n [Unknown]: 'unknown',\n [Idle]: 'idle',\n [Offline]: 'offline',\n [NormalOperation]: 'normal-operation',\n [PossibleIssue]: 'possible-issue',\n [PumpInMalfunction]: 'pump-in-malfunction',\n [PumpNotRunning]: 'pump-not-running'\n } as Record\n )[state];\n\n return getTranslation(`home.sump-pumps.${resource}`);\n}\n","/**\n * Utility helper module for switch (mercury control point) devices.\n * @module\n */\n\nimport { Open, Closed, Unknown } from '../enums/ControlPointRelayStatus';\nimport { getDeviceStateKey } from './device-state';\n\nimport type AdcIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param state The state to show.\n */\nexport function getSwitchStateCSS(state: number): string {\n return (\n {\n [Unknown]: 'unknown',\n [Open]: 'on',\n [Closed]: 'off'\n }[state] ?? 'unknown'\n );\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param state The state to represent.\n * @param getTranslation Function for requesting a translation.\n * @param inTransition Indicates the door is in transition to the indicated state.\n */\nexport function getSwitchStateText(state: number, getTranslation: AdcIntlService['t'], inTransition = false): string {\n const cssFunction = function (state: number): string {\n return (\n {\n [Unknown]: 'generic.unknown',\n [Open]: 'generic.on',\n [Closed]: 'generic.off'\n }[state] ?? 'generic.unknown'\n );\n };\n\n return getTranslation(getDeviceStateKey(cssFunction, state, inTransition));\n}\n","/**\n * Utility helper module for thermostats.\n * @module\n */\n\nimport { capitalize } from '@ember/string';\nimport { AutoLow, AutoMedium, OnLow, Circulate, OnMedium, OnHigh } from '../enums/ThermostatFanMode';\nimport { Disabled, Enabled, Partial } from '../enums/ThermostatLock';\nimport { MANUAL_MODE, SCHEDULED, SMART_SCHEDULES } from '../enums/ThermostatProgrammingMode';\nimport { Unknown, Off, Heat, Cool, Auto, AuxHeat } from '../enums/ThermostatStatus';\n\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\n\n/**\n * TODO:\n * While these types are made and used here, they are unioned with the more generic number type.\n * As part of EM-38483, we should remove that union, and enforce these types.\n */\ntype ThermostatSimpleState = typeof Heat | typeof Cool | typeof AuxHeat;\ntype ThermostatState = ThermostatSimpleState | typeof Unknown | typeof Off | typeof Auto;\ntype ThermostatScheduleMode = typeof MANUAL_MODE | typeof SCHEDULED | typeof SMART_SCHEDULES;\ntype ThermostatFanMode =\n | typeof AutoLow\n | typeof AutoMedium\n | typeof OnLow\n | typeof Circulate\n | typeof OnMedium\n | typeof OnHigh;\ntype ThermostatLockingMode = typeof Disabled | typeof Enabled | typeof Partial;\n\n/**\n * Returns the CSS class for the indicated state.\n */\nexport function getThermostatStateCSS(state: ThermostatState | number): 'unknown' | 'off' | 'heat' | 'cool' | 'auto' {\n // Return computed state.\n const cssMap: { [state: number]: 'unknown' | 'off' | 'heat' | 'cool' | 'auto' } = {\n [Unknown]: 'unknown',\n [Off]: 'off',\n [Heat]: 'heat',\n [Cool]: 'cool',\n [Auto]: 'auto',\n [AuxHeat]: 'heat'\n };\n return cssMap[state] ?? 'unknown';\n}\n\n/**\n * Returns a string key for the indicated state.\n */\nexport function getThermostatStateKey(\n state: ThermostatState | number\n): 'offline' | 'off' | 'heat' | 'cool' | 'auto' | 'auxHeat' {\n const stateMap: { [state: number]: 'offline' | 'off' | 'heat' | 'cool' | 'auto' | 'auxHeat' } = {\n [Unknown]: 'offline',\n [Off]: 'off',\n [Heat]: 'heat',\n [Cool]: 'cool',\n [Auto]: 'auto',\n [AuxHeat]: 'auxHeat'\n };\n\n return stateMap[state] ?? 'offline';\n}\n\n/**\n * Returns a string key for the indicated state.\n */\nexport function getThermostatSimpleStateKey(state: ThermostatSimpleState | number): 'heat' | 'cool' {\n if (state === Cool) return 'cool';\n\n return 'heat';\n}\n\n/**\n * Returns the icon name for the indicated state.\n */\nexport function getThermostatStateIcon(state: ThermostatState | number): string {\n // Return icon name for state.\n return (\n {\n [Unknown]: 'circle-x',\n [Off]: 'circle-dash',\n [Heat]: 'heat',\n [Cool]: 'cool',\n [Auto]: 'auto',\n [AuxHeat]: 'heat-emergency'\n }[state] ?? 'circle-x'\n );\n}\n\n/**\n * Returns the alternate icon name for the indicated state.\n */\nexport function getThermostatStateAltIcon(state: ThermostatState | number): string {\n // Return icon name for state.\n return (\n {\n [Unknown]: 'close',\n [Off]: 'minus'\n }[state] || getThermostatStateIcon(state)\n );\n}\n\n/**\n * Returns a string key for the indicated fan mode.\n */\nexport function getThermostatScheduleModeKey(scheduleMode: ThermostatScheduleMode | number): string {\n return (\n {\n [SMART_SCHEDULES]: 'Smart',\n [SCHEDULED]: 'Basic',\n [MANUAL_MODE]: 'Off'\n }[scheduleMode] ?? 'Off'\n );\n}\n\n/**\n * Returns a string key for the indicated fan mode.\n */\nexport function getThermostatFanModeKey(fanMode: ThermostatFanMode | number): string {\n return (\n {\n [AutoLow]: 'auto',\n [AutoMedium]: 'auto',\n [OnLow]: 'on',\n [OnMedium]: 'on',\n [OnHigh]: 'on',\n [Circulate]: 'circulate'\n }[fanMode] || 'unknown'\n );\n}\n\n/**\n * Returns a string key for the indicated local display locking mode.\n */\nexport function getLocalDisplayLockingModeKey(localDisplayLockingMode: ThermostatLockingMode | number): string {\n return (\n {\n [Disabled]: 'Disabled',\n [Enabled]: 'Enabled',\n [Partial]: 'Partial'\n }[localDisplayLockingMode] ?? 'Disabled'\n );\n}\n\n/**\n * Does the state have a heat setpoint?\n */\nexport function hasHeatSetpoint(state: ThermostatState | number): boolean {\n return state === Heat || state === Auto || state === AuxHeat;\n}\n\n/**\n * Does the state have a cool setpoint?\n */\nexport function hasCoolSetpoint(state: ThermostatState | number): boolean {\n return state === Cool || state === Auto;\n}\n\n/**\n * Does the state have any setpoint?\n */\nexport function hasSetpoint(state: ThermostatState | number, supportsSetpoints = true): boolean {\n return supportsSetpoints && (hasHeatSetpoint(state) || hasCoolSetpoint(state));\n}\n\n/**\n * Increment or decrement the thermostat's setpoint.\n */\nexport function offsetSetpoint(\n thermostat: ThermostatModel,\n state: ThermostatState | number,\n numberOffsetSteps: number\n): void {\n if (state === Off) {\n return;\n }\n\n const autoSetpointBuffer = thermostat.get('autoSetpointBuffer'),\n setpointOffset = thermostat.get('setpointOffset'),\n thermostatState = thermostat.get('thermostatState'),\n supportsAutoMode = thermostat.get('supportsAutoMode'),\n targetStateString = capitalize(getThermostatSimpleStateKey(state)),\n opposingStateString = capitalize(getThermostatSimpleStateKey(hasHeatSetpoint(state) ? Cool : Heat)),\n // Get setpoint properties\n targetProperty = `desired${targetStateString}Setpoint` as keyof ThermostatModel,\n opposingProperty = `desired${opposingStateString}Setpoint` as keyof ThermostatModel,\n // Object for holding setpoint data for processing\n setpointData: { [data: string]: number } = {},\n // Function for setting the new setpoint\n fnDoOffset = (property: keyof ThermostatModel) =>\n thermostat.incrementProperty(property, numberOffsetSteps * setpointOffset);\n\n // Increment/decrement the desired (target) setpoint\n setpointData[targetProperty] = fnDoOffset(targetProperty);\n\n // Check if we need to bump the other setpoint\n if (thermostatState === Auto && supportsAutoMode) {\n const targetValue = thermostat.get(targetProperty),\n opposingValue = thermostat.get(opposingProperty);\n\n const setpointsTooClose = Math.abs(targetValue - opposingValue) < autoSetpointBuffer;\n\n // If we're changing the heat setpoint and heat setpoint >= cool setpoint\n if (hasHeatSetpoint(state) && targetValue >= opposingValue) {\n // Change the cool setpoint to match the heat setpoint but with the buffer\n thermostat.set(opposingProperty, targetValue + autoSetpointBuffer);\n }\n // If we're changing the cool setpoint and cool setpoint <= heat setpoint\n else if (hasCoolSetpoint(state) && targetValue <= opposingValue) {\n // Change the heat setpoint to match the cool setpoint but with the buffer\n thermostat.set(opposingProperty, targetValue - autoSetpointBuffer);\n }\n // If the heat and cool setpoints are too close, bump one of them to ensure the buffer is maintained\n else if (setpointsTooClose) {\n // Adjust the opposing setpoint so that the buffer is maintained\n if (hasHeatSetpoint(state)) {\n setpointData[opposingProperty] = targetValue + autoSetpointBuffer;\n } else if (hasCoolSetpoint(state)) {\n setpointData[opposingProperty] = targetValue - autoSetpointBuffer;\n }\n }\n }\n\n // Process setpoint change\n thermostat.setSetpoints(setpointData);\n}\n","import { setProperties } from '@ember/object';\n\nexport default class BaseTransform {\n constructor(parameters: object = {}) {\n this.cachedData = parameters;\n setProperties(this, { ...parameters });\n }\n\n private cachedData;\n\n rollback() {\n if (this.cachedData) {\n setProperties(this, { ...this.cachedData });\n }\n }\n}\n","import { computed } from '@ember/object';\nimport { alias, equal } from '@ember/object/computed';\nimport { htmlSafe } from '@ember/template';\nimport { isEmpty } from '@ember/utils';\nimport { Unknown } from 'customer-site/enums/Icon';\nimport IconMap from 'customer-site/enums/IconMap';\nimport { percentWarmthToHexString } from '@adc/ui-components/utils/color-pickers/color';\nimport { Manual, Weather } from '../../enums/ColorSource';\nimport { RGBW, WarmToCool } from '../../enums/LightColorFormat';\nimport IconData from './icon-data';\n\nimport type { Warmth } from '@adc/ui-components/utils/color-pickers/color';\nimport type { SafeString } from 'handlebars';\nimport type { IconDataParameters } from './icon-data';\n\ninterface ComplexIconDataParameters extends IconDataParameters {\n subIcon?: string;\n source: number;\n format: number;\n}\n\n/**\n * @classdesc\n * The de-serialized complex-icon-data transform object.\n * TODO: Extract properties specific to multicolored lights into light-specific transform object (e.g. light-icon-data).\n */\nexport default class ComplexIconData extends IconData {\n constructor(parameters: ComplexIconDataParameters) {\n super(parameters);\n }\n\n /**\n * Secondary icon name.\n */\n declare subIcon: string;\n\n /**\n * Source\n */\n declare source: number;\n\n /**\n * Format\n */\n declare format: number;\n\n /**\n * Whether the icon for this icon-description pair contains information for displaying an additional icon\n * (e.g. for color lights, information on the light color)\n */\n @computed('subIcon', 'hasUnknownSubIcon')\n get hasSecondaryIcon(): boolean {\n return !this.hasUnknownSubIcon && !isEmpty(this.subIcon);\n }\n\n /**\n * Indicates the secondary icon is \"Unknown\".\n */\n @equal('subIcon', IconMap[Unknown])\n declare hasUnknownSubIcon: boolean;\n\n /**\n * Whether the icon for this icon-description pair contains information for displaying an additional icon\n * (e.g. for color lights, information on the light color)\n */\n @alias('subIcon')\n declare secondaryIconName: boolean;\n\n /**\n * Whether the extra icon data specifies a color format of warm to cool white\n */\n @equal('format', WarmToCool)\n declare isWarmToCoolWhite: boolean;\n\n /**\n * Whether the extra icon data specifies a color format of RGBW\n */\n @equal('format', RGBW || WarmToCool)\n declare isHexColor: boolean;\n\n /**\n * CSS class corresponding to the extra icon data's color format that should be applied when displaying the extra icon\n */\n @computed('format', 'source')\n get secondaryIconCss(): string {\n const lookup: Record> = {\n [Manual]: {\n [RGBW]: 'rgb',\n [WarmToCool]: 'rgb'\n },\n [Weather]: ''\n };\n\n return (lookup[this.source] && lookup[this.source][this.format]) || '';\n }\n\n /**\n * In-line style corresponding to the extra icon data's color format that should be applied when displaying the extra icon\n *\n * @function\n * @returns {Ember.Handlebars.SafeString}\n */\n @computed('source', 'isWarmToCoolWhite', 'color')\n get secondaryIconStyle(): SafeString {\n const { source, isWarmToCoolWhite, color } = this;\n const ColorIsNotANumber = isNaN(parseInt(color));\n if (source == null || source !== Manual || (isWarmToCoolWhite && ColorIsNotANumber)) {\n return htmlSafe('');\n }\n\n let htmlColor = color;\n\n if (isWarmToCoolWhite) {\n htmlColor = percentWarmthToHexString(Number(color) as Warmth);\n }\n\n return htmlSafe(`color: ${htmlColor};`);\n }\n}\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface ModelRegistry {\n 'complex-icon-data': ComplexIconData;\n }\n}\n","import { computed } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { htmlSafe } from '@ember/template';\nimport { isEmpty } from '@ember/utils';\nimport { Unknown } from 'customer-site/enums/Icon';\nimport IconMap from 'customer-site/enums/IconMap';\nimport BaseTransform from './base-transform';\n\nimport type { SafeString } from 'handlebars';\n\nexport interface IconDataParameters {\n icon: string;\n color?: string;\n cssClass?: string;\n}\n\n/**\n * @classdesc\n * The de-serialized icon-data transform object.\n */\nexport default class IconData extends BaseTransform {\n constructor(parameters: IconDataParameters) {\n super(parameters);\n }\n\n /**\n * Icon name to be passed into svg-symbol.\n */\n declare icon: string;\n\n /**\n * Color of the icon.\n */\n declare color: string;\n\n /**\n * Css Style of the icon\n */\n declare cssClass: string;\n\n /**\n * Css style for the icon that can be applied.\n */\n @computed('color')\n get cssStyle(): SafeString {\n const color = this.color;\n return htmlSafe(color ? `color: ${color}` : '');\n }\n\n /**\n * Indicates the icon is \"Unknown\".\n */\n @equal('icon', IconMap[Unknown])\n declare hasUnknownIcon: boolean;\n\n /**\n * Indicates the icon has a non-\"Unknown\" value.\n */\n @computed('icon', 'hasUnknownIcon')\n get hasIcon(): boolean {\n return !this.hasUnknownIcon && !isEmpty(this.icon);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface ModelRegistry {\n 'icon-data': IconData;\n }\n}\n","import { computed } from '@ember/object';\nimport isAfter from 'date-fns/isAfter';\nimport TemporarySchedule from './temporary-schedule';\n\n/**\n * @classdesc\n * A temporary schedule which doesn't require an end date.\n */\nexport default class LoginTemporarySchedule extends TemporarySchedule {\n /**\n * Does the temporary schedule have valid data?\n */\n @computed('beginDateTime', 'endDateTime')\n get isValid(): boolean {\n const { beginDateTime, endDateTime } = this;\n\n if (!beginDateTime) {\n return false;\n }\n\n // Login schedules do not require an end date.\n return endDateTime === undefined || isAfter(endDateTime, beginDateTime);\n }\n}\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface ModelRegistry {\n 'login-temporary-schedule': LoginTemporarySchedule;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport isAfter from 'date-fns/isAfter';\nimport ContainerObject from '../container-object';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport interface TempScheduleParams {\n beginDateTime?: Date;\n endDateTime?: Date;\n}\n\n/**\n * @classdesc\n * Information representing a temporary schedule (e.g. \"Jan 1 2018 07:00:00am\" to \"Jan 31 2018 10:00:00pm\").\n */\nexport default class TemporarySchedule extends ContainerObject {\n @service declare intl: ADCIntlService;\n\n constructor(host: unknown, params: TempScheduleParams) {\n super(host);\n\n if (params) {\n this.beginDateTime = params.beginDateTime;\n this.endDateTime = params.endDateTime;\n }\n }\n\n // region Properties\n\n /**\n * The date and time when the schedule becomes active.\n */\n @tracked\n beginDateTime?: Date;\n\n /**\n * The date and time when the schedule becomes inactive.\n */\n @tracked\n endDateTime?: Date;\n\n // endregion\n\n // region Computed Properties\n\n /**\n * Does the temporary schedule have valid data?\n */\n @computed('beginDateTime', 'endDateTime')\n get isValid(): boolean {\n const { beginDateTime, endDateTime } = this;\n\n if (!beginDateTime || !endDateTime) {\n return false;\n }\n\n return isAfter(endDateTime, beginDateTime);\n }\n\n /**\n * Has this temporary schedule expired?\n */\n @computed('endDateTime')\n get isExpired(): boolean {\n const { endDateTime } = this;\n return !!endDateTime && isAfter(new Date(), endDateTime);\n }\n\n /**\n * Is this temporary schedule inactive?\n */\n @computed('beginDateTime')\n get isInactive(): boolean {\n const { beginDateTime } = this;\n return !!beginDateTime && isAfter(beginDateTime, new Date());\n }\n\n /**\n * Date from-to representation.\n *\n * @note This is the same as description.\n */\n @alias('description')\n declare dateText: string;\n\n /**\n * The textual description of this schedule.\n */\n @computed('beginDateTime', 'endDateTime', 'isValid')\n get description(): string {\n if (!this.isValid) {\n return '';\n }\n\n const { intl } = this,\n [startDate, endDate] = ['begin', 'end'].map((n) =>\n intl.formatDateTz(this[`${n}DateTime` as keyof TemporarySchedule] as Date, {\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n })\n );\n\n return intl.t('generic.hyphenatedDates', { startDate, endDate });\n }\n\n /**\n * Time from-to representation.\n */\n get timeText(): string {\n return '';\n }\n\n // endregion\n\n /**\n * The JSON representation of this object.\n */\n toJSON(): TempScheduleParams {\n const { beginDateTime, endDateTime } = this;\n return { beginDateTime, endDateTime };\n }\n}\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface ModelRegistry {\n 'temporary-schedule': TemporarySchedule;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport ContainerObject from '../container-object';\nimport { minutesToDate } from '../datetime';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nexport interface WeeklyScheduleParams {\n selectedDays: number[];\n beginTime: number;\n endTime: number;\n}\n\nconst BASE_DATE = new Date('1900-01-01'),\n WEEK_DAY_SEED = new Date('10/07/2018').valueOf();\n\n/**\n * @classdesc\n * Represents a weekly schedule (e.g. MWF from 9am-4pm).\n */\nexport default class WeeklySchedule extends ContainerObject {\n @service declare intl: ADCIntlService;\n\n constructor(host: unknown, params: WeeklyScheduleParams) {\n super(host);\n\n if (params) {\n this.selectedDays = params.selectedDays;\n this.beginTime = params.beginTime;\n this.endTime = params.endTime;\n }\n }\n\n // region Properties\n\n /**\n * An array of integers representing which days of the week the schedule is active for.\n */\n @tracked\n selectedDays: number[] = [];\n\n /**\n * The time of day when the schedule becomes active in minutes after midnight (e.g. 60 => 1:00AM, 120 => 2:00AM).\n *\n * @note The schedule-picker component expects minutes after midnight.\n */\n @tracked\n beginTime = 0;\n\n /**\n * The time of day when the schedule becomes inactive in minutes after midnight (e.g. 60 => 1:00AM, 120 => 2:00AM).\n *\n * @note The time-picker component expects minutes after midnight.\n */\n @tracked\n endTime = 0;\n\n // endregion\n\n // region Computed Properties\n\n /**\n * Does the weekly schedule have a valid time and date selection?\n */\n @computed('selectedDays', 'beginTime', 'endTime')\n get isValid(): boolean {\n return !isEmpty(this.selectedDays) && this.endTime > this.beginTime;\n }\n\n /**\n * The begin time in the form of a Date object.\n */\n @computed('beginTime')\n get beginTimeAsDate(): Date {\n return minutesToDate(this.beginTime, BASE_DATE);\n }\n\n /**\n * The end time in the form of a Date object.\n */\n @computed('endTime')\n get endTimeAsDate(): Date {\n return minutesToDate(this.endTime, BASE_DATE);\n }\n\n /**\n * Date from-to representation.\n */\n @computed('selectedDays.[]')\n get dateText(): string {\n const { selectedDays } = this,\n { length } = selectedDays,\n [firstDay] = selectedDays,\n lastDay = selectedDays.slice().pop(),\n fnGetDayOfWeek = (day: number) => {\n // Adjust date for day offset.\n const date = new Date(WEEK_DAY_SEED);\n date.setDate(date.getDate() + day);\n\n // Return formatted value.\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n return this.intl.formatDate(date, {\n weekday: 'short'\n });\n };\n\n // Is more than one day selected?\n if (length > 1 && lastDay) {\n // Are the selected days contiguous?\n if (lastDay - firstDay + 1 === length) {\n // Show range (Mon-Fri).\n return [firstDay, lastDay].map(fnGetDayOfWeek).join('-');\n }\n\n // Show all days (Mon/Tue/Fri/Sat).\n return selectedDays.map(fnGetDayOfWeek).join('/');\n }\n\n // Single day selected.\n return fnGetDayOfWeek(firstDay);\n }\n\n /**\n * Time from-to representation.\n */\n @computed('beginTimeAsDate', 'endTimeAsDate')\n get timeText(): string {\n return [this.beginTimeAsDate, this.endTimeAsDate]\n .map((date) =>\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line @adc/ember/require-tz-functions\n this.intl.formatDate(date, {\n hour: 'numeric',\n minute: '2-digit'\n })\n )\n .join('-')\n .replace(/\\s/g, '')\n .toLowerCase();\n }\n\n /**\n * The textual description of this schedule.\n */\n @computed('dateText', 'timeText')\n get description(): string {\n return `${this.dateText} (${this.timeText})`;\n }\n\n // endregion\n\n /**\n * The JSON representation of this object.\n */\n toJSON(): WeeklyScheduleParams {\n const { selectedDays, beginTime, endTime } = this;\n return { selectedDays, beginTime, endTime };\n }\n}\n// DO NOT DELETE: this is how TypeScript knows how to look up your models.\ndeclare module 'ember-data/types/registries/transform' {\n export default interface ModelRegistry {\n 'weekly-schedule': WeeklySchedule;\n }\n}\n","/**\n * List with regexes for unused Third Party Cookies to be removed from the browser\n * */\n\nexport const unusedCookiesRegexes = [\n // First Party Cookies\n /CAS_AUTH/,\n /JSESSIONID/,\n /fromRimDotNet/,\n\n // Adobe Analytics\n /s_cc/,\n /s_fid/,\n /s_sq/,\n /mbox/,\n\n // Optimizely\n /^optimizely.*$/,\n\n // DoubleClick\n /^C3UID.*$/,\n /^C3S.*$/,\n\n // Segment\n /ajs_group_id/,\n /ajs_user_id/,\n\n // Hubspot\n /hubspotutk/,\n /hsfirstvisit/,\n\n // Wisepop\n /wisepop_date_last_request/,\n /wisepops/,\n\n // Impravata\n /imprivata_extension_installed/,\n\n // Auto-Refresh Plus (Chrome Extension)\n /arp_scroll_position/,\n /^arp_scroll_switch.*$/,\n\n // Mindspark Toolbars\n /^mindsparktb.*$/,\n /^mindspark_extension_api_features_.*$/,\n /^mindsparktbsupport_.*$/,\n\n // Full Story\n /fs_uid/,\n\n // Hotjar\n /_hjDonePolls/,\n /_hjid/,\n /_hjIncludedInSample/,\n /_hjMinimizedPolls/,\n /hjAbsoluteSessionInProgress/,\n /hjIncludedInPageviewSample/,\n /hjTLDTest/,\n\n // Unknown\n /__extfc/,\n /__lfcc/,\n /_sc_token/,\n /^BCSI_AC.*$/,\n /domain/,\n /expires/,\n /FSSBBIl1UgzbN7N80T/,\n /GED_PLAYLIST_ACTIVITY/,\n /hibext_instdsigdipv2/,\n /HttpOnly/,\n /^iptac.*$/,\n /path/,\n /secure/,\n /vfdis/,\n /SL_GWPT_Show_Hide_tmp/,\n /SL_wptGlobTipTmp/,\n /UM_distinctid/\n];\n","/**\n * Takes an existing url and adds a new search param to the url.\n * In case the url has existing search params this function will add\n * ?searchparm=searchParamValue or &searchParam=searchParamValue\n *\n * @param {string} url\n * @param {string} queryParamKey\n * @param {string} queryParamValue\n * @returns {string} the url of the new string with the additional search param\n */\nexport function addSearchParam(url, queryParamKey, queryParamValue) {\n const currentUrl = new URL(url);\n const searchParams = currentUrl.searchParams;\n searchParams.append(queryParamKey, queryParamValue);\n currentUrl.search = searchParams.toString();\n return currentUrl.toString();\n}\n","/**\n * Utility helper module for users.\n * @module\n */\n\nimport {\n None,\n Cleaning,\n Contractor,\n Employee,\n Guest,\n Inspection,\n Maintenance,\n Manager,\n MasterCodeUser,\n Owner,\n Vendor,\n Other,\n Resident,\n ProspectiveResident,\n WorkOrder,\n BackupCode,\n RequestedCode\n} from 'customer-site/enums/AccessPointUserType';\n\n/**\n * Map to get a user's icon based on the access point user type.\n *\n * NOTE: If you add an association between a new user type and an icon below, make sure to add the icon description to\n * the resources of components/users/item/user-avatar with the user type id of the new user type.\n *\n * @private\n * @type {Object.}\n */\nconst USER_TYPE_ICON_MAP = {\n [None]: 'notifications',\n [Cleaning]: 'scenes-commercial-occupied',\n [Contractor]: 'truck',\n [Employee]: 'scenes-travel',\n [Guest]: 'feature-users',\n [Inspection]: 'search',\n [Maintenance]: 'schedule-custom',\n [Manager]: 'property-manage',\n [Owner]: 'scenes-commercial-open',\n [Vendor]: 'scenes-dinner',\n [Other]: 'circle-o',\n [MasterCodeUser]: 'lock',\n [Resident]: 'user',\n [ProspectiveResident]: 'feature-tour',\n [WorkOrder]: 'inspection',\n [BackupCode]: 'user-code-start-end',\n [RequestedCode]: 'user-code-start-end'\n};\n\n/**\n * SVG Icon name for this user type.\n *\n * @param {string} userType of current user\n * @returns {String}\n */\nexport function getUserIcon(userType) {\n return USER_TYPE_ICON_MAP[userType];\n}\n\n/**\n * Opens a confirmation modal with a warning about downloading users.\n *\n * @param {ModalService} modals\n * @param {NativeBridge} nativeBridge\n * @param {string} title\n * @param {ADCIntlService} intl\n * @param {function} action\n */\nexport function openDownloadUsersWarningModal(modals, title, intl, action) {\n modals.showConfirmationDialog(title, intl.t('utils.users.downloadUsersWarning'), {\n text: intl.t('generic.download'),\n action\n });\n}\n","import addDays from 'date-fns/addDays';\n\nexport const COOKIE_LAYOUT = 'layoutType',\n COOKIE_MAX_VIDEOS_PER_PAGE_AUTO_VIEW = 'maxPerPageAutoView',\n COOKIE_SELECTED_CAMERAS = 'selectedCams',\n COOKIE_SELECTED_CAMERA_GROUP = 'selectedCamGroup',\n COOKIE_INTERVAL = 'intervalTime',\n COOKIE_USE_COLLAPSED_TIMELINE = 'useCollapsedTimeline',\n COOKIE_HIDE_SIDEBAR = 'hideSidebar',\n COOKIE_DEVICE_TYPES = 'deviceTypesFilter',\n COOKIE_HISTORY_EVENTS = 'historyEventsFilter',\n COOKIE_PREFER_LOCAL_RULES = 'preferLocalRecordingRules',\n CLIP_LIMIT_SUGGESTION_LAST_COLLAPSED = 'clipLimitSuggestionCardLastCollapsed',\n VIDEO_STREAMING_FEATURES_UNIFIED_ROUTE_NAME = 'vsf';\n\n/**\n * Concatenates a cookie name with the route name so that cookies used here are page specific.\n *\n * @private\n *\n * @param cookieName\n * @param routeName\n * @returns {string}\n */\nfunction cookieNameForPage(cookieName, routeName) {\n return `${cookieName}${routeName}`;\n}\n\n/**\n * Gets the specified cookie for the page.\n *\n * @param routeName\n * @param cookieName\n * @returns {string|null}\n */\nexport function getCookieForPage(routeName, cookieName) {\n const { cookieManager } = this,\n cookie = cookieManager.getEssentialCookie(cookieNameForPage(cookieName, routeName));\n\n // Blank string can be treated as if it is a null value for simplicity sake.\n return cookie !== '' ? cookie : null;\n}\n\n/**\n * Stores the specified cookie for the page. Will set the cookie to expire in 30 days\n *\n * @param cookieName\n * @param value\n * @param useVsfAsRouteName if we should store this as a cookie shared across the video-streaming-features pages\n */\nexport function storeCookieForPage(cookieName, value, useVsfAsRouteName) {\n const { contextManager, cookieManager } = this;\n\n const routeName = useVsfAsRouteName\n ? VIDEO_STREAMING_FEATURES_UNIFIED_ROUTE_NAME\n : contextManager.currentRouteData.routeName;\n const cookieNameFull = cookieNameForPage(cookieName, routeName);\n\n cookieManager.setEssentialCookie(cookieNameFull, value, addDays(new Date(), 30));\n}\n","import { None, WedgeA, WedgeB, WedgeC, WedgeD, WedgeE, WedgeF, WedgeG } from 'customer-site/enums/DoorbellWedge';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * Translate the doorbell wedge enum.\n */\nexport function translateDoorbellWedge(\n doorbellWedge: number,\n onlySupportsWedgeYesNo: boolean | undefined,\n intl: ADCIntlService\n): string {\n const translatedYesString: string = intl.t('generic.yes');\n\n switch (doorbellWedge) {\n case None:\n return onlySupportsWedgeYesNo ? intl.t('generic.no') : intl.t('generic.none');\n case WedgeA:\n return 'A';\n case WedgeB:\n return 'B';\n case WedgeC:\n return 'C';\n case WedgeD:\n return 'D';\n case WedgeE:\n return onlySupportsWedgeYesNo ? translatedYesString : 'E';\n case WedgeF:\n return onlySupportsWedgeYesNo ? translatedYesString : 'F';\n case WedgeG:\n return onlySupportsWedgeYesNo ? translatedYesString : 'G';\n default:\n return '';\n }\n}\n","/**\n * Utility helper module for video.\n * @module\n */\n\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { setProperties, get, getProperties } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { didCancel } from 'ember-concurrency';\nimport NewVideoScheduleModal from 'customer-site/components/modals/automation/rules/new-video-schedule/index';\nimport BaseVideoPlayer from 'customer-site/components/video/video-player/base-video-player';\nimport {\n DeviceNotConnected,\n DeviceNotFound,\n LiveStreamConnectionFailed,\n StreamDisconnected,\n LiveStreamTimeout,\n NoError,\n NoPermissions,\n NoPlaybackVideoAvailable,\n PlaybackEnded,\n PlaybackServerConnectionFailed,\n PlaybackStreamConnectionFailed,\n PlaybackStreamTimeout,\n RecentlyAddedRecordingSchedule,\n SdCardHasRecordingsFromAnotherCamera,\n SdCardNotWorking,\n SdCardRemoved,\n StreamNotAvailable,\n WebRtcIceNegotiationFailed,\n SdCardNotSupported,\n AutoplayFailed,\n StunReconnectionFailed,\n SdCardHasRecordingsFromAnotherCustomer,\n SdCardIsBusy,\n SdCardNotSupported4Mp,\n DataUsageCritical\n} from 'customer-site/enums/VideoSourceError';\nimport { getDeviceId } from 'customer-site/utils/device';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { Animal, Human, Vehicle, Unknown, DeliveryVehicle } from '../../enums/ClassificationCategoryType';\nimport {\n VideoAddSvrRecordingSchedule,\n EmberVideoSdCardSchedule,\n EmberVideoSelectSvrSchedule\n} from '../../enums/CustomerPageUrl';\nimport {\n PackageDeliveryAlert,\n PackageRetrievalAlert,\n VideoCameraTriggered,\n VideoEventTriggered\n} from '../../enums/EventType';\nimport { SvrRecordingSchedule } from '../../enums/RuleCatalogItemType';\nimport { isPointInCanvas } from '../canvas';\nimport { transitionToCreateRule } from './rule-transition';\nimport VideoPreloaderDetail from './video-preloader-detail';\n\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type Store from '@ember-data/store';\nimport type PlaybackFeatures from 'customer-site/components/video/video-player/playback-features';\nimport type { PlayerInfo } from 'customer-site/components/video/video-streaming/video-streaming-features/types';\nimport type { RelativeDirection } from 'customer-site/enums/RelativeDirection';\nimport type HistoryEvent from 'customer-site/models/activity/history-event';\nimport type RuleSuggestion from 'customer-site/models/automation/rules/rule-suggestion';\nimport type BaseCamera from 'customer-site/models/video/devices/base-camera';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type SdCardCamera from 'customer-site/models/video/devices/sd-card-camera';\nimport type Svr from 'customer-site/models/video/devices/svr';\nimport type ApexConnectionInfo from 'customer-site/models/video/video-sources/apex-connection-info';\nimport type EndToEndWebrtcConnectionInfo from 'customer-site/models/video/video-sources/end-to-end-webrtc-connection-info';\nimport type LiveVideoSource from 'customer-site/models/video/video-sources/live-video-source';\nimport type SdCardVideoSource from 'customer-site/models/video/video-sources/sd-card-video-source';\nimport type SvrVideoSource from 'customer-site/models/video/video-sources/svr-video-source';\nimport type VideoSource from 'customer-site/models/video/video-sources/video-source';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport const NewVideoScheduleModalType = 'modals/automation/rules/new-video-schedule';\nexport const NewVideoRuleModalType = 'modals/automation/rules/new-video-rule';\n\ntype PanTiltApiResult = { value: { x: number; y: number; zoom: number } };\n\ntype ReloadVideoSourceStreamingProperties = Pick<\n VideoSource,\n | 'audioUpStreamUrl'\n | 'coturnAddressesTuplets'\n | 'janusGatewayUrl'\n | 'janusToken'\n | 'iceServers'\n | 'proxyWebrtcConnectionInfo'\n> & {\n apexConnectionInfo: ApexConnectionInfo | null;\n attemptedDirectAndProxy: boolean;\n currentStreamIsEndToEnd: boolean;\n currentVideoSource: VideoSource;\n endToEndWebrtcConnectionInfo: EndToEndWebrtcConnectionInfo | null;\n playerUrl: string | null;\n};\n\n// region Constant Values\n\nconst PAN_TILT_URL = 'video/panTilt/';\n\n// endregion\n\n// region Video Events\n\n/**\n * Lookup table for OV classification icons.\n *\n * @param {ClassificationCategoryType} ovClassification Best OV classification for event\n * @returns {String} icon to be used for the ov classification\n */\nexport function classificationIconLookup(ovClassification: number): string {\n return (\n {\n [Human]: 'va-person',\n [Vehicle]: 'va-vehicle',\n [Animal]: 'va-animal',\n [Unknown]: 'other-obj',\n [DeliveryVehicle]: 'va-vehicle'\n }[ovClassification] || 'video-record'\n );\n}\n\n/**\n * Gets the appropriate icon to display for the event specified.\n */\nexport function getIconForEvent(event: HistoryEvent): string {\n if (!event) {\n return '';\n }\n\n const isVideoEvent = event.eventType === VideoCameraTriggered || event.eventType === VideoEventTriggered;\n\n return isVideoEvent ? classificationIconLookup(event.ovClassification) : event.iconData.icon;\n}\n\n/**\n * Checks if the provided event type is associated with a video event.\n * Video events can be have the event type VideoCameraTriggered or VideoEventTriggerd.\n *\n * @returns true if the event type is considered a video event, otherwise false.\n */\nexport function isVideoEvent(eventType: number): boolean {\n return eventType === VideoCameraTriggered || eventType === VideoEventTriggered;\n}\n\n/**\n * Checks if the provided event type is associated with a package detection event.\n * Package detection event types are PackageDeliveryAlert (363) or PackageRetrivalAlert (364).\n *\n * @returns true if the event type is considered a package detection event, otherwise false.\n */\nexport function isPackageDetectionEvent(eventType: number): boolean {\n return eventType === PackageDeliveryAlert || eventType === PackageRetrievalAlert;\n}\n\n// endregion\n\n// region Video Streaming\n\n/**\n * Gets a video source object from the camera based on an boolean isHd attribute.\n *\n * @param camera The camera from which we want to get a video source.\n * @param isHd Do we want to get the regular video source or the Hd video source?\n *\n */\nexport function getVideoSource(camera: Camera, isHd = false): Promise {\n return get(camera, `videoSource${isHd ? 'Hd' : ''}`);\n}\n\n/**\n * Try to load stream a second time but through proxy instead of direct.\n *\n * @param videoSource Object that contains video source. This includes camera or player objects.\n * @param attemptedDirectAndProxy Have we already tried to connect directly and via proxy?\n */\nexport function attemptProxy(\n this: BaseVideoPlayer | PlayerInfo,\n videoSource: VideoSource | PlayerInfo | null,\n attemptedDirectAndProxy?: boolean\n): boolean {\n // If we've already tried both direct and proxy, then let the connection die.\n // MJPEG streams will also exit out here because the new MJPEG player only goes through the proxy.\n if (attemptedDirectAndProxy || !videoSource) {\n return false;\n }\n\n // Otherwise, try the proxy connection and prevent any attempts after that.\n const updatedProperties = {\n attemptedDirectAndProxy: true\n };\n\n // Update player values for proxy streaming.\n const {\n proxyUrl,\n janusGatewayUrl,\n janusToken,\n iceServers,\n coturnAddressesTuplets,\n proxyWebrtcConnectionInfo,\n audioUpStreamUrl\n } = getProperties(\n videoSource,\n 'proxyUrl',\n 'janusGatewayUrl',\n 'janusToken',\n 'iceServers',\n 'coturnAddressesTuplets',\n 'proxyWebrtcConnectionInfo',\n 'audioUpStreamUrl'\n );\n\n Object.assign(updatedProperties, {\n endToEndWebrtcConnectionInfo: null,\n janusGatewayUrl,\n janusToken,\n iceServers,\n coturnAddressesTuplets,\n playerUrl: proxyUrl,\n proxyWebrtcConnectionInfo,\n audioUpStreamUrl\n });\n\n // If we have a proxy url, we can update that the current streaming url is proxy and return success.\n if (!isEmpty(proxyUrl)) {\n if (this instanceof BaseVideoPlayer) {\n this.updateCurrentStreamIsEndToEnd(false);\n }\n\n setProperties(this, updatedProperties);\n return true;\n }\n\n // If the proxy url is empty, we can't stream and we need to indicate that the connection failed.\n setProperties(this, updatedProperties);\n return false;\n}\n\n/**\n * Loads and gets the fresh video source from an unresolved promise.\n * Returns false instead of a model if we have an error.\n */\nexport async function getFreshVideoSource(\n videoSourcePromise: Promise | VideoSource\n): Promise {\n // Retrieve current video source and check if it's old or still pending.\n // If it's still pending, then it's a new video source coming in and we don't need to reload.\n const isPending = await get(videoSourcePromise, 'isPending');\n\n // Wait for the current video source to come back.\n let freshVideoSource = await videoSourcePromise;\n\n if (!freshVideoSource) {\n return false;\n }\n\n // If it wasn't pending, then it could have been old, so reload a fresh copy of the video source.\n if (!isPending) {\n freshVideoSource = await freshVideoSource.reload();\n }\n\n return freshVideoSource;\n}\n\n/**\n * Get fresh copy of the video source such that we avoid expired tokens from the camera.\n * It also processes the video source and sets other properties.\n *\n * @param videoSourcePromise The video source we are trying to reload.\n * @param options The options for forcing a specific type of streaming.\n * forceProxy = Should we force the stream to use the proxy connection?\n * forceEndToEnd = Should we force the stream to use the end-to-end connection?\n * forceOesp = Should we force the stream to use OESP when it supports OESP and WebRTC (in live streams)?\n */\nexport async function reloadVideoSource(\n this: BaseVideoPlayer | PlaybackFeatures | VideoPreloaderDetail,\n videoSourcePromise: Promise | VideoSource,\n options?: { forceProxy?: boolean; forceEndToEnd?: boolean; forceOesp?: boolean }\n): Promise {\n const freshVideoSource = await getFreshVideoSource(videoSourcePromise);\n if (!freshVideoSource) {\n return;\n }\n\n // The end-to-end connection info and apex connection info is loaded with the video source; awaiting just confirms that this promise is completed.\n const proxyWebrtcConnectionInfo = freshVideoSource.proxyWebrtcConnectionInfo;\n let endToEndWebrtcConnectionInfo: EndToEndWebrtcConnectionInfo | null =\n await freshVideoSource.endToEndWebrtcConnectionInfo,\n apexConnectionInfo: ApexConnectionInfo | null = await freshVideoSource.apexConnectionInfo;\n\n // Get all possible streaming variables.\n // Sometimes we may not send the direct URL because we know user can't directly communicate with the cameras.\n const {\n isMjpeg,\n proxyUrl,\n janusGatewayUrl,\n janusToken,\n iceServers,\n coturnAddressesTuplets,\n errorEnum,\n audioUpStreamUrl\n } = freshVideoSource,\n isFromVideoPlayerComponent = !(this instanceof VideoPreloaderDetail);\n\n // If this camera has OESP streaming and WebRTC proxy streaming, but NO end-to-end streaming, default to proxy unless we force with a query param.\n // The only cameras that should default to OESP streaming are ONVIF cameras.\n // This should be later removed in VID-47310.\n if (apexConnectionInfo?.apexId && !endToEndWebrtcConnectionInfo && proxyUrl && !options?.forceOesp) {\n apexConnectionInfo = null;\n }\n\n // If we support both OESP streaming and end-to-end streaming for this ADC device, default to WebRTC unless we have an OESP query param.\n // This should be later removed in VID-47310.\n if (apexConnectionInfo?.apexId && endToEndWebrtcConnectionInfo) {\n if (options?.forceOesp) {\n endToEndWebrtcConnectionInfo = null;\n } else {\n apexConnectionInfo = null;\n }\n }\n\n // Make sure the video source doesn't have an error and the component isn't destroyed when saving the live view URL.\n // The latter can happen if we are awaiting the above models, then we navigate away from the route that called this function.\n // For now we aren't logging this message for preloaded cases, but this may change in VID-80437\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isFromVideoPlayerComponent && (errorEnum || isDestroyed(this))) {\n logNoStreamingInfoWebrtcLog.call(\n this,\n freshVideoSource,\n isMjpeg,\n apexConnectionInfo,\n proxyUrl,\n endToEndWebrtcConnectionInfo\n );\n return;\n }\n\n // For the WebRTC case: if we don't have end-to-end WebRTC info and we're not forcing end-to-end, or we are forcing proxy, then we're using proxy.\n // If we are using the MJPEG player or OESP for live view, we are always going through the proxy.\n const usingProxy = (!endToEndWebrtcConnectionInfo && !options?.forceEndToEnd) || options?.forceProxy,\n usingEndToEnd = !usingProxy || apexConnectionInfo?.allowWebrtc,\n streamingProperties = {\n apexConnectionInfo,\n endToEndWebrtcConnectionInfo: usingProxy ? null : endToEndWebrtcConnectionInfo,\n janusGatewayUrl,\n janusToken,\n iceServers,\n coturnAddressesTuplets,\n playerUrl: usingEndToEnd ? null : proxyUrl,\n audioUpStreamUrl,\n proxyWebrtcConnectionInfo,\n attemptedDirectAndProxy: !!usingProxy,\n currentStreamIsEndToEnd: !!usingEndToEnd,\n currentVideoSource: freshVideoSource\n };\n\n // We want to make sure the url we are using for streaming is not null or an empty string.\n // For now we aren't logging this message for preloaded cases, but this may change in VID-80437\n if (\n isEmpty(streamingProperties.playerUrl) &&\n isEmpty(streamingProperties.endToEndWebrtcConnectionInfo) &&\n isEmpty(streamingProperties.apexConnectionInfo) &&\n isFromVideoPlayerComponent\n ) {\n logNoStreamingInfoWebrtcLog.call(\n this,\n freshVideoSource,\n isMjpeg,\n apexConnectionInfo,\n proxyUrl,\n endToEndWebrtcConnectionInfo\n );\n return;\n }\n\n return streamingProperties;\n}\n\n/**\n * Helper to log a WebRTC log indicating no streaming info was received.\n */\nasync function logNoStreamingInfoWebrtcLog(\n this: BaseVideoPlayer | PlaybackFeatures,\n freshVideoSource: LiveVideoSource | SvrVideoSource | SdCardVideoSource,\n isMjpeg: boolean,\n apexConnectionInfo: ApexConnectionInfo,\n proxyUrl: string,\n endToEndWebrtcConnectionInfo: EndToEndWebrtcConnectionInfo\n): Promise {\n // Send WebRTC log when we get no streaming info\n const usingWebRtc = !isMjpeg && apexConnectionInfo?.apexId === undefined;\n if (usingWebRtc && isEmpty(proxyUrl) && isEmpty(endToEndWebrtcConnectionInfo)) {\n const { ajax, store } = this,\n camera = await freshVideoSource.camera,\n errorEnum = freshVideoSource.errorEnum;\n\n if (!camera || camera.isVirtualCamera || errorEnum === NoPermissions) {\n return;\n }\n\n const log = store.createRecord('video/stream-logs/webrtc-stream-log', {\n customerId: camera.get('system.id'),\n deviceModel: camera.deviceModel,\n disconnectionReason: `Received no streaming info, error code=${errorEnum}`,\n failed: true,\n globalId: camera.id,\n webrtcStreamType: this.webStreamingLogType\n });\n\n ajax.apiRequest('video/streamLogs/webrtcStreamLogs/sendInitialWebrtcStreamLog', undefined, log, POST);\n }\n}\n\n// endregion\n\n// region Pan Tilt API Calls\n\n/**\n * Helper function to make the api call for all pan tilt requests.\n *\n * @param ajax The ajax service for making the api call.\n * @param command The api command string.\n * @param camera The camera we want to modify\n * @param additionalQueryParams Any query params needed for the api call aside from camera id.\n */\nfunction panTiltApiRequest(\n ajax: AjaxService,\n command: string,\n camera: BaseCamera,\n additionalQueryParams: string\n): Promise {\n return ajax.apiRequest(\n `${PAN_TILT_URL}${command}?cameraId=${camera.id}&${additionalQueryParams}`,\n undefined,\n null,\n POST\n );\n}\n\n/**\n * Send a command to the camera to pan or tilt.\n *\n * @param ajax The ajax service for making the api call.\n * @param camera The camera we want to modify.\n * @param relativeDirection the RelativeDirection enum we are requesting the device to do\n */\nexport function panTilt(\n ajax: AjaxService,\n camera: Camera,\n relativeDirection: RelativeDirection\n): boolean | Promise {\n if (!camera.canPanTilt) {\n return false;\n }\n\n return panTiltApiRequest(ajax, 'move', camera, `direction=${relativeDirection}`);\n}\n\n/**\n * Send a command to the camera to zoom in or out.\n *\n * @param ajax The ajax service for making the api call.\n * @param camera The camera we want to modify.\n * @param relativeDirection the RelativeDirection enum we are requesting the device to do\n */\nexport function zoom(\n ajax: AjaxService,\n camera: Camera,\n relativeDirection: RelativeDirection\n): boolean | Promise {\n if (!camera.canZoom) {\n return false;\n }\n\n return panTiltApiRequest(ajax, 'zoom', camera, `direction=${relativeDirection}`);\n}\n\n/**\n * Send a command to the camera to shift the pan tilt focus.\n * The x and y values are relative based on the current view.\n * For example: x=0.5, y=0.5 will not shift the view. x=1, y=1 will center the view on the bottom-right-most visible position.\n *\n * @param ajax The ajax service for making the api call.\n * @param camera The camera we want to modify.\n * @param x The change in x which must be within [0, 1].\n * @param y The change in y which must be within [0, 1].\n */\nexport function moveTo(ajax: AjaxService, camera: Camera, x: number, y: number): boolean | Promise {\n const maxPosition = 1;\n\n // Use isPointInCanvas for validation since it checks if values are within 0 and height/width without a canvas.\n if (!camera.canPanTilt || !isPointInCanvas(x, y, maxPosition, maxPosition)) {\n return false;\n }\n\n return panTiltApiRequest(ajax, 'moveTo', camera, `x=${x}&y=${y}`);\n}\n\n/**\n * Send a command to the camera to go to one of its pan/tilt/zoom presets.\n *\n * @param ajax The ajax service for making the api call.\n * @param camera The camera we want to modify.\n * @param panTiltId The ID for the preset as stored in the camera.\n */\nexport function goToPreset(ajax: AjaxService, camera: Camera, panTiltId: string): boolean | Promise {\n if (!camera.canPanTilt) {\n return false;\n }\n\n return panTiltApiRequest(ajax, 'goToPreset', camera, `presetId=${panTiltId}`);\n}\n\n// endregion\n\n// region Page transitions\n\n/**\n * Retrieves the video schedules transition function based on various factors.\n *\n * @param routeIds The list of available IDs\n * @param contextManager The contextManager for this context\n * @param modals The modals service for this context\n * @param svrDevices The list of SVRs on the account\n * @param sdCardCameras The list of SD card cameras on the account\n * @param videoRuleSuggestions The list of rules or schedules.\n * @returns {function | undefined}\n */\nexport function videoScheduleTransitionFunction(\n routeIds: number[],\n contextManager: ContextManager,\n modals: ModalService,\n svrDevices: Svr[],\n sdCardCameras: SdCardCamera[] | null,\n videoRuleSuggestions: RuleSuggestion[]\n) {\n const createPermissionToRoute = (route: number, additionalCheck = true) => {\n return {\n permission: routeIds.includes(route) && additionalCheck,\n route\n };\n },\n // If we have access to SVRs, then check the number of SVRs. We cannot add a schedule if there's no SVRs.\n haveSvrs = !isEmpty(svrDevices),\n // If we have access to SD cards, then check the number of SD card cameras without max number of schedules.\n sdWithoutMaxNumberOfSchedules = (sdCardCameras || []).filter(\n (sd) => !sd.get('hasMaxNumberOfSdRecordingSchedules')\n ),\n canAddSdCardSchedules = !isEmpty(sdWithoutMaxNumberOfSchedules),\n permissionsToRoutes = [\n createPermissionToRoute(VideoAddSvrRecordingSchedule, haveSvrs),\n createPermissionToRoute(EmberVideoSdCardSchedule, canAddSdCardSchedules)\n ],\n availableRoutes = permissionsToRoutes.filter((r) => r.permission);\n\n if (!availableRoutes.length || !videoRuleSuggestions) {\n return undefined;\n }\n\n const firstSchedule = videoRuleSuggestions.firstObject;\n\n if (!firstSchedule) {\n return undefined;\n }\n\n /* If the user can only create one type of schedule, let's send them directly to the next page in that flow. */\n if (videoRuleSuggestions.length === 1) {\n if (firstSchedule.type === SvrRecordingSchedule) {\n /**\n * TODO(gneukum): Avoiding transitionToCreateRule() is a bit of a hack, but we have an extra 'select'\n * page in the SVR flow until we transition the legacy add/edit page to ember. Once that page has\n * been transitioned over, we can merge that with the 'select' page and do this the \"Right Way™.\"\n */\n return () => contextManager.transitionToRouteWithIdentityReloadIfNeeded(false, EmberVideoSelectSvrSchedule);\n }\n\n return () =>\n transitionToCreateRule(\n firstSchedule.get('addEditRouteId'),\n firstSchedule.get('addEditPageQueryParameters'),\n contextManager\n );\n }\n\n return () => {\n // TODO: WEB-17805 Fix circular dependency between video and modals\n modals.showModal(NewVideoScheduleModal, { videoSchedules: videoRuleSuggestions });\n };\n}\n\n/**\n * Transition to a Video Settings route.\n *\n * @param contextManager context manager that should make the route transition\n * @param store ember store to check for available systems\n * @param camera the camera for which we should go to settings\n * @param routeEnum The enum for the route we want to transition to\n * @param canViewSettings Is the current context able to view settings?\n */\nexport function transitionToSettings(\n contextManager: ContextManager,\n store: Store,\n camera: BaseCamera,\n routeEnum: number,\n canViewSettings: boolean\n): void {\n // The settings pages take the device id, not our full unitId-deviceId.\n const deviceId = getDeviceId(camera.id),\n settingsRouteTransition = () =>\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(routeEnum, { search: `?deviceId=${deviceId}` });\n\n // Are we at the Enterprise level?\n if (contextManager.getSelectedSystemGroupId()) {\n // Switch to the single system context for the camera before transitioning to the settings route.\n // eslint-disable-next-line ember/no-get\n contextManager\n .switchContext(store.peekRecord('systems/available-system-item', get(camera, 'system.id') as number))\n .then(() => settingsRouteTransition())\n .catch((e) => {\n if (!didCancel(e)) {\n throw e;\n }\n });\n\n return;\n }\n\n // Otherwise we can just transition to the settings route.\n // Sometimes the route is not valid because of permissions, so checking before doing the transition\n if (canViewSettings) {\n settingsRouteTransition();\n }\n}\n\n// endregion\n\n// region Player overlays and errors.\n\n/**\n * Converts an error enum to a string.\n *\n * @param errorEnum The enum to convert to a string.\n *\n * @returns The string version of the enum.\n */\nexport function convertErrorEnumToString(errorEnum: number): string | null {\n switch (errorEnum) {\n case DeviceNotFound:\n return 'DeviceNotFound';\n case DeviceNotConnected:\n return 'DeviceNotConnected';\n case LiveStreamConnectionFailed:\n return 'FailedToConnect';\n case StreamDisconnected:\n return 'StreamHasDisconnected';\n case LiveStreamTimeout:\n return 'StreamHasTimedOut';\n case NoPermissions:\n return 'NoPermissions';\n case NoPlaybackVideoAvailable:\n return 'NoVideoAvailable';\n case PlaybackEnded:\n return 'PlaybackEndedMessage';\n case PlaybackServerConnectionFailed:\n return 'CannotConnectToServer';\n case PlaybackStreamConnectionFailed:\n return 'ConnectionFailedMessage';\n case PlaybackStreamTimeout:\n return 'TimeoutMessage';\n case SdCardNotWorking:\n return 'SdCardNotWorking';\n case SdCardRemoved:\n return 'SdCardRemoved';\n case StreamNotAvailable:\n return 'StreamNotAvailable';\n case RecentlyAddedRecordingSchedule:\n return 'RecentlyAddedRecordingSchedule';\n case SdCardHasRecordingsFromAnotherCamera:\n return 'SdCardHasRecordingsFromAnotherCamera';\n case WebRtcIceNegotiationFailed:\n return 'WebRtcIceNegotiationFailed';\n case SdCardNotSupported:\n return 'SdCardNotSupported';\n case AutoplayFailed:\n return 'AutoplayFailed';\n case StunReconnectionFailed:\n return 'StunReconnectionFailed';\n case SdCardHasRecordingsFromAnotherCustomer:\n return 'SdCardHasRecordingsFromAnotherCustomer';\n case SdCardIsBusy:\n return 'SdCardIsBusy';\n case SdCardNotSupported4Mp:\n return 'SdCardNotSupported4Mp';\n case DataUsageCritical:\n return 'DataUsageCritical';\n case NoError:\n return '';\n default:\n console.error(`Unable to convert errorEnum=${errorEnum} to string.`);\n return null;\n }\n}\n\n// endregion\n\n// region Global Device ID\n\n/**\n * Get the GlobalDeviceId (UnitID-DeviceID) from the playerID.\n *\n * @function\n *\n * @param playerId\n *\n * @returns The last component of the playerId, or null if Unit ID and Device ID could not be extracted.\n */\nexport function getGlobalDeviceIdFromPlayerId(playerId: string): string | null {\n if (!playerId) {\n return null;\n }\n\n const playerIdParts = playerId.split('_');\n if (!playerIdParts || !playerIdParts.length) {\n return null;\n }\n\n return playerIdParts[playerIdParts.length - 1];\n}\n\n// endregion\n","import { EmberVideoBusinessActivityAnalytics } from '../../enums/CustomerPageUrl';\n\nimport type RouteItem from 'customer-site/models/navigation/route-item';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * Transitions to the appropriate create rule page for video rules.\n */\nexport async function transitionToCreateRule(\n routeID: number,\n queryParams: Record,\n contextManager: ContextManager\n): Promise {\n const routeItem = await contextManager.getRouteItemWithIdentityReloadIfNeeded(routeID);\n\n // If there is no route item, then there is nothing to transition to.\n if (!routeItem) {\n return;\n }\n\n const routeTransitionArgs: (Record | RouteItem | null | string)[] = [routeItem, null, {}, queryParams];\n\n // Most native routes will need a 'new' slug.\n if (routeItem.get('isNative') && routeID !== EmberVideoBusinessActivityAnalytics) {\n routeTransitionArgs.push('new');\n }\n\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // @ts-expect-error This is moved from JS to TS to fix a circular dependency. Video, please fix this\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRoute(...routeTransitionArgs);\n}\n","import { Drawing } from 'customer-site/components/video/rules/draw-window/index';\n\nimport type OvRule from 'customer-site/models/video/ov-rule';\nimport type TouchlessRingRule from 'customer-site/models/video/touchless-ring-rule';\n\nexport type DictionaryOfDrawings = { [key: number]: Drawing };\n\n/**\n * Creates a dictionary of Drawings from an OvRule.\n * The resulting object will likely be fed into the DrawWindow.\n *\n * @param rule\n * @returns A key-value pair of { 0: Drawing }, where the Drawing is populated with values from the rule.\n */\nexport function createDictionaryOfDrawingsFromRule(rule: OvRule | TouchlessRingRule): DictionaryOfDrawings {\n const { points, direction, duration } = rule.getProperties('points', 'direction', 'duration');\n\n return {\n // Do not copy this incorrect usage, please fix it.\n // @ts-expect-error I believe the `rule#points` property should use the `Point[]` type.\n 0: new Drawing(points, direction, duration)\n };\n}\n","import { isPresent } from '@ember/utils';\nimport { EmberRulesBuilder } from 'customer-site/enums/CustomerPageUrl';\n\nimport type BaseAutomationItem from 'customer-site/models/automation/base-automation-item';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport function editItem(\n item: BaseAutomationItem,\n contextManager: ContextManager,\n navigation: NavigationService,\n queryParameters?: Record\n): void {\n const { id: ruleId, editPage, editPageQueryParameters } = item,\n routeItem = navigation.getRouteItem(editPage);\n\n if (!item.isSchedule && isPresent(navigation.getRouteItem(EmberRulesBuilder))) {\n navigation.transitionToRouteId(EmberRulesBuilder, item.id, {\n queryParams: { ...queryParameters, ...editPageQueryParameters }\n });\n return;\n }\n\n if (routeItem?.isNative) {\n // Get the id for the item from the query parameters if it exists and then append the id as a slug to the route.\n if (editPageQueryParameters?.id) {\n contextManager.transitionToNativeRoute(editPage, String(editPageQueryParameters.id));\n return;\n }\n\n if (editPageQueryParameters) {\n navigation.transitionToRouteId(editPage, ruleId, {\n queryParams: navigation.addSearchQueryParam(editPageQueryParameters)\n });\n } else {\n navigation.transitionToRouteId(editPage, ruleId);\n }\n\n return;\n }\n\n // Else wise just transition to route without a slug.\n if (editPageQueryParameters) {\n navigation.transitionToRouteId(editPage, {\n queryParams: navigation.addSearchQueryParam(editPageQueryParameters)\n });\n } else {\n navigation.transitionToRouteId(editPage);\n }\n}\n","import type Store from '@ember-data/store';\nimport type Stats from 'customer-site/services/stats';\n\n/**\n * Log an event to the stats service if the store does not have any OV rules present.\n *\n * @param store store to check\n * @param stats stats service to log to\n * @param eventId event ID to log\n */\nexport function logEventIfHasNoOvRules(store: Store, stats: Stats, eventId: number): void {\n if (!hasOvRules(store)) {\n return stats.logEvent(eventId);\n }\n}\n\n/**\n * Does the store have any OV rules present?\n */\nexport function hasOvRules(store: Store): boolean {\n return store.peekAll('video/ov-rule').any((r) => r.id != null);\n}\n","import {\n EmberVideoFamiliarFaces,\n EmberVideoFamiliarSubjectsEnrollmentFacesCameraAccess,\n EmberVideoFamiliarSubjectsEnrollmentVehiclesCameraAccess,\n EmberVideoFamiliarSubjectsReview,\n EmberVideoFamiliarSubjectsReviewNotifications,\n EmberVideoFamiliarSubjectsReviewPhotoList,\n EmberVideoFamiliarVehicles,\n VideoCameraSettingsOverview\n} from 'customer-site/enums/CustomerPageUrl';\nimport { Face, Vehicle } from 'customer-site/enums/FamiliarObjectType';\nimport { Pending } from 'customer-site/enums/FamiliarTargetStatus';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type FamiliarTargetEnrollmentCluster from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\nimport type FamiliarTargetFeedbackEvent from 'customer-site/models/video/familiar-targets/familiar-target-feedback-event';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { SafeString } from 'handlebars';\n\n/**\n * Maximum text length for a Familiar Target description\n */\nexport const MaxDescriptionTextLength = 30;\n\n/**\n * Maximum allowed vehicles for enrollment\n */\nexport const MaxAllowedVehicles = 5;\n\n/**\n * Maximum allowed faces for enrollment\n */\nexport const MaxAllowedFaces = 15;\n\n/**\n * Minimum amount of photos recommended to start recognizing\n */\nexport const MinimumRecommendedPhotos = 5;\n\n/**\n * Get the index route enum for the familiar subject type\n */\nexport function getFamiliarSubjectRouteEnum(familiarObjectType: number): number {\n return familiarObjectType === Vehicle ? EmberVideoFamiliarVehicles : EmberVideoFamiliarFaces;\n}\n\n/**\n * Does a FamiliarTargetFeedbackEvent have a linked familiar target?\n * @param targetEvent\n * @returns\n */\nexport function hasTarget(targetEvent: FamiliarTargetFeedbackEvent): boolean {\n return targetEvent.belongsTo('familiarTarget').id() != null;\n}\n\n/**\n * Does a FamiliarTargetFeedbackEvent have a linked familiar target enrollment image?\n *\n * @param targetEvent\n * @returns\n */\nexport function hasEnrollmentImage(targetEvent: FamiliarTargetFeedbackEvent): boolean {\n return targetEvent.belongsTo('enrollmentImage').id() != null;\n}\n\n/**\n * Gets all of the Familiar Subject enrollments for the current customer. Try to get the enrollments from the local store\n * if possible to avoid making an API call\n */\nexport async function getEnrollments(store: Store): Promise {\n // If we came from a page that already checked the enrollment state, we may already have the enrollments in the store\n const enrollmentsInStore = store.peekAll('video/familiar-targets/familiar-target-enrollment').toArray();\n\n // Check if both enrollments are in the store. If just one is in the store, make an API call because there might be the case where\n // the user has just created a second enrollment.\n if (enrollmentsInStore.length === 2) {\n return enrollmentsInStore;\n }\n return (await store.findAll('video/familiar-targets/familiar-target-enrollment')).toArray();\n}\n\n/**\n * Get the Ov ready cameras that support familiar subject and check if at least one of them is opted in\n * Try to get from local store If possible to avoid making an API call\n */\nexport async function hasOptedInCamera(store: Store, familiarObjectType: number): Promise {\n let cameras = (await store.findAll('video/devices/ov-ready-camera')).toArray();\n\n // We filter cameras depending on the familiarObjectType\n // Because we haven't released Face recognition support for other devices yet.\n cameras =\n familiarObjectType === Face\n ? cameras.filter((camera: OvReadyCamera) => camera.supportsFamiliarFace)\n : cameras.filter((camera: OvReadyCamera) => camera.supportsFamiliarSubjectRecognition);\n\n const properties = await Promise.all(\n cameras.map(async (c: OvReadyCamera) => await c.familiarSubjectCameraProperties)\n );\n const optInStatus =\n familiarObjectType === Face\n ? properties.some((p) => p.isFaceOptedIn)\n : properties.some((p) => p.isVehicleOptedIn);\n\n return optInStatus;\n}\n\n/**\n * Use the provided store to find a single familiar target enrollment of the given type\n * @param store\n * @param familiarObjectType\n * @returns\n */\nexport async function findEnrollmentOfType(\n store: Store,\n familiarObjectType: number\n): Promise {\n const enrollmentsInStore = store.peekAll('video/familiar-targets/familiar-target-enrollment').toArray(),\n enrollmentOfType = enrollmentsInStore.findBy('familiarObjectType', familiarObjectType);\n\n if (enrollmentOfType) {\n return enrollmentOfType;\n }\n\n const familiarTargetEnrollment = (\n await store.query('video/familiar-targets/familiar-target-enrollment', {\n type: familiarObjectType\n })\n ).findBy('familiarObjectType', familiarObjectType);\n\n return familiarTargetEnrollment;\n}\n\n/**\n * Get the Familiar Subject FamiliarTargetEnrollmentClusters to add to the Familiar Subject filter\n *\n * @param enrollments list of enrollments returned\n * @returns list of FamiliarTargetEnrollmentClusters that are eligible for filtering\n */\nexport async function getFamiliarSubjectsForFiltering(\n enrollments: FamiliarTargetEnrollment | undefined\n): Promise {\n const clusters = await enrollments?.clusters;\n return clusters ? clusters.filter((item) => item.isEligibleForNotifications) : [];\n}\n\n/**\n * Transition to the Familiar Target review profile page. If shouldRenameTarget is true, the user will be prompted to rename\n * the vehicle when the transition is complete\n * @param contextManager manager to make the transition\n * @param clusterId ID of the cluster for the review page\n * @param shouldRenameTarget Should the user be prompted to rename the target when the page is loaded?\n */\nexport function transitionToFamiliarSubjectReview(navigation: NavigationService, clusterId: string): void {\n navigation.transitionToRouteId(EmberVideoFamiliarSubjectsReview, undefined, undefined, clusterId);\n}\n\n/**\n * Transitions to the camera access page if the user has not opted in to camera access\n */\nexport async function navigateToCameraAccessPageIfNoCamerasOptedIn(\n navigation: NavigationService,\n store: Store,\n familiarObjectType: number\n): Promise {\n const cameraAccessRoute =\n familiarObjectType === Face\n ? EmberVideoFamiliarSubjectsEnrollmentFacesCameraAccess\n : EmberVideoFamiliarSubjectsEnrollmentVehiclesCameraAccess;\n if (!(await hasOptedInCamera(store, familiarObjectType))) {\n navigation.transitionToRouteId(cameraAccessRoute);\n }\n return;\n}\n\n/**\n * Clear the route stack and set the back button to navigate to the given route ID\n * @param contextManager manager of the route stack to clear\n * @param routeId route ID to set as the previous route\n */\nexport function clearAndSetPreviousRouteId(contextManager: ContextManager, routeId: number): void {\n contextManager.resetVisitedRoutesStack();\n contextManager.addRouteToVisitedRoutesStack(VideoCameraSettingsOverview);\n contextManager.addRouteToVisitedRoutesStack(routeId);\n}\n\n/**\n * Data needed for the backend to properly process a familiar target feedback event.\n */\nexport type FeedbackParams = {\n feedbackEventId: string;\n isNotificationEvent: boolean;\n};\n\n/**\n * Save a photo that was recently moved to a new cluster as a processed feedback event.\n * This is not intended to affect on the site itself, so we do not asynchronously handle this API request.\n *\n * @param ajax AJAX service to make the API request.\n * @param feedbackEventId Familiar target feedback event id: {video or OV Ready event id}_{feedback event index}\n * @param isNotificationEvent Whether the feedback is processed as a notification.\n * @param originalClusterModelId Cluster model ID of the image's cluster prior to moving the image.\n * @param image Enrollment image that was moved to a new cluster.\n */\nexport function saveMovedPhotoAsFeedback(\n ajax: AdcAjaxService,\n feedbackEventId: string,\n isNotificationEvent: boolean,\n originalClusterModelId: string,\n image: FamiliarTargetEnrollmentImage\n): void {\n const url = `video/familiarTargets/familiarTargetEnrollmentImages/recordFeedback/${feedbackEventId}?isNotificationEvent=${isNotificationEvent}&originalClusterModelId=${originalClusterModelId}`;\n ajax.apiRequest(url, undefined, image, 'PUT');\n}\n\n/**\n * Check a target description to make sure it is valid. A cluster description must be\n * less than the maximum number of characters and be unique to all existing target descriptions\n * @param clusterDescription\n * @param enrollment\n * @param cluster\n * @returns\n */\nexport async function validateClusterDescription(\n clusterDescription: string | undefined,\n enrollment: FamiliarTargetEnrollment,\n cluster?: FamiliarTargetEnrollmentCluster\n): Promise {\n return (\n checkIfDescriptionIsValid(clusterDescription) &&\n (await checkIfClusterDescriptionIsUnique(enrollment, cluster, clusterDescription))\n );\n}\n\n/**\n * Checks if new familiar subject cluster name is just white space\n * @param clusterDescription: string | undefined\n * @returns boolean: true if description is valid\n */\nexport function checkIfDescriptionIsValid(clusterDescription: string | undefined): boolean {\n if (clusterDescription && clusterDescription.length <= MaxDescriptionTextLength) {\n return clusterDescription.trim().length != 0;\n }\n\n return false;\n}\n\n/**\n * Checks if the new description already exists in the enrollment\n * @param cluster\n * @param clusterDescription: string or undefined\n * @returns boolean: true if the description is unique\n */\nexport async function checkIfClusterDescriptionIsUnique(\n enrollment: FamiliarTargetEnrollment,\n cluster?: FamiliarTargetEnrollmentCluster,\n clusterDescription?: string\n): Promise {\n const clusters = await enrollment.get('clusters');\n if (clusters.length == 0) {\n // There are no other clusters assigned to this user, return true;\n return true;\n } else if (clusterDescription) {\n return !clusters\n .map((c: FamiliarTargetEnrollmentCluster) => c.id != cluster?.id && c.description)\n .includes(clusterDescription);\n }\n return false;\n}\n\n/**\n * Create a new cluster of the given type with the provided description. If there are any images provided they will be\n * added to the cluster\n * @param store\n * @param description\n * @param familiarObjectType\n * @param images\n * @returns\n */\nexport function createCluster(\n store: Store,\n description: string,\n familiarObjectType: number,\n images: FamiliarTargetEnrollmentImage[] = []\n): FamiliarTargetEnrollmentCluster {\n const profile = store.createRecord('video/familiar-targets/familiar-target-cluster-profile', {\n description\n });\n\n return store.createRecord('video/familiar-targets/familiar-target-enrollment-cluster', {\n familiarObjectType,\n status: Pending,\n reviewedImages: images,\n profile\n });\n}\n\n/**\n * Shows the correct success message when a user is creating a new cluster or moving a recent image\n */\nexport function showCreationOrMoveSuccessMessage(\n navigation: NavigationService,\n notificationManager: NotificationManager,\n intl: ADCIntlService,\n cluster: FamiliarTargetEnrollmentCluster,\n isCreatingANewCluster = false,\n imageCount = 0\n): void {\n const familiarObjectType = cluster.familiarObjectType;\n const creationMessage = familiarObjectType == Face ? 'faceCreationSuccessMessage' : 'creationSuccessMessage';\n const key = isCreatingANewCluster ? creationMessage : 'imageMovedNotificationMessage',\n reviewedImagesLength = cluster.reviewedImages.length as number;\n let message = intl.t(`generic.video.settings.familiar-subject.${key}`, {\n subjectName: cluster.description,\n count: imageCount\n });\n\n if (reviewedImagesLength < MinimumRecommendedPhotos) {\n message = message.concat(\n ' ',\n intl.t('generic.video.settings.familiar-subject.minimumReviewedPhotosRecommendation')\n );\n }\n\n notificationManager.addNotification(\n message,\n 'circle-o-check',\n // Add view vehicle button\n [\n {\n text: intl.t('generic.view'),\n action: () => {\n navigation.transitionToRouteId(\n EmberVideoFamiliarSubjectsReviewPhotoList,\n undefined,\n undefined,\n cluster.id\n );\n }\n }\n ],\n 0,\n true,\n false,\n 'success'\n );\n}\n\n/**\n * Move the provided images to the desired familiar subjects\n */\nexport async function moveImagesToSubject(\n images: FamiliarTargetEnrollmentImage[],\n navigation: NavigationService,\n notificationManager: NotificationManager,\n intl: ADCIntlService,\n subject: FamiliarTargetEnrollmentCluster\n): Promise {\n try {\n await subject.moveImagesToCluster(images);\n\n // reload the enrollment to refresh all if its clusters. This operation can change a lot on the backend\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error enrollment is async, so this code should be replaced with `await (await subject.enrollment).reload();`.\n await subject.enrollment.reload();\n\n showCreationOrMoveSuccessMessage(navigation, notificationManager, intl, subject, false, images.length);\n return true;\n } catch (err) {\n // adapter error will be shown as a toast message\n return false;\n }\n}\n\n/**\n * Prompt for a name and create a new familiar subject with that name as the description, with the images provided\n */\nexport async function nameAndCreateSubject(\n enrollment: FamiliarTargetEnrollment,\n selectedPhotos: FamiliarTargetEnrollmentImage[],\n store: Store,\n navigation: NavigationService,\n notificationManager: NotificationManager,\n intl: ADCIntlService,\n modals: ModalService\n): Promise {\n const title =\n enrollment.familiarObjectType == Vehicle\n ? intl.t('generic.video.settings.familiar-subject.nameVehicle')\n : intl.t('generic.video.settings.familiar-subject.nameFace');\n modals.showRenameModal({\n title,\n rename: async (name: string) => {\n const newTarget = await attemptCreateAndMove(name, enrollment, selectedPhotos, store);\n\n if (!newTarget) {\n return false;\n }\n\n showCreationOrMoveSuccessMessage(\n navigation,\n notificationManager,\n intl,\n newTarget,\n true,\n selectedPhotos.length\n );\n navigateToNotificationsPageForNewVehicle(newTarget, navigation);\n return true;\n },\n maxLength: MaxDescriptionTextLength,\n output: {\n value: '',\n error: intl.t('generic.errorSaving')\n }\n });\n}\n\n/**\n * Attempts to create a new cluster for the user and adds selected images to it\n */\nexport async function attemptCreateAndMove(\n name: string,\n enrollment: FamiliarTargetEnrollment,\n images: FamiliarTargetEnrollmentImage[],\n store: Store\n): Promise {\n if (await validateClusterDescription(name, enrollment)) {\n const newTarget = createCluster(store, name, enrollment.familiarObjectType, images);\n\n try {\n await newTarget\n .save()\n .then(() => Promise.all(images.map((img) => img.reload())).then(() => enrollment.reload()));\n } catch (ex) {\n newTarget.unloadRecord();\n }\n return newTarget;\n }\n return;\n}\n\n/**\n * Attempt to delete an enrollment image. The image will be unloaded after it is deleted successfully.\n * Rollback the image if the operation fails\n *\n * @param image\n */\nexport async function tryDeleteFamiliarTargetImage(image: FamiliarTargetEnrollmentImage): Promise {\n image.deleteRecord();\n try {\n const cluster = await image.cluster;\n await image.save();\n\n // If the image resulted in a cluster being deleted, unload that cluster\n if (cluster.get('hasNoImages')) {\n cluster?.unloadRecord();\n }\n\n image.unloadRecord();\n\n // If the profile picture was the image deleted, reload the cluster to get the new key image\n if (image.id === cluster.profileImageId) {\n cluster.reload();\n }\n } catch {\n image.rollbackAttributes();\n return false;\n }\n\n return true;\n}\n\n/**\n * Shows the modal for deleting images\n */\nexport async function showDeleteImagesModal(\n images: FamiliarTargetEnrollmentImage[],\n enrollment: FamiliarTargetEnrollment,\n modals: ModalService,\n intl: ADCIntlService,\n notificationManager: NotificationManager,\n navigation: NavigationService\n): Promise {\n modals.showDeleteModal({\n title: intl.t('generic.video.settings.familiar-subject.deletePhotoDialogHeader', {\n num: images.length\n }),\n message: intl.t('generic.video.settings.familiar-subject.deletePhotoDialogInstruction', {\n num: images.length\n }),\n delete: async () => {\n const success = await Promise.all(images.map((img) => tryDeleteFamiliarTargetImage(img)));\n\n if (success) {\n await enrollment.reload();\n\n const deletedText = intl.t('generic.video.settings.familiar-subject.photoWasDeleted', {\n num: images.length\n });\n notificationManager.addNotification(deletedText, 'circle-o-check', [], 5000);\n\n const cluster = await images[0].cluster;\n // only checking the first image deleted for this since all images would have been set to true for this\n if (cluster == null || cluster.get('hasNoImages')) {\n navigation.transitionToRouteId(getFamiliarSubjectRouteEnum(enrollment.familiarObjectType));\n }\n }\n }\n });\n}\n\n/**\n * Clears the route stack and then navigates to the review notifications page for a new vehicle enrollment\n */\nexport async function navigateToNotificationsPageForNewVehicle(\n newTarget: FamiliarTargetEnrollmentCluster,\n navigation: NavigationService\n): Promise {\n const queryParams = {\n onboarding: true\n };\n\n navigation.transitionToRouteId(EmberVideoFamiliarSubjectsReviewNotifications, undefined, undefined, newTarget.id, {\n queryParams\n });\n}\n/**\n * Get an intl resource from the familiar subject review actions section\n * @param intl\n * @param key\n * @returns\n */\nexport function getReviewButtonResource(intl: ADCIntlService, key: string): string {\n return intl.t(`generic.video.settings.familiar-subject.actions.${key}`);\n}\n\n/**\n * Get the SVG icon selector for the \"Correct\" review button, depending on\n * if the button is selected or not\n *\n * @param isSelected\n * @returns\n */\nexport function getCorrectButtonIcon(isSelected = false): string {\n return isSelected ? 'circle-check' : 'circle-o-check';\n}\n\n/**\n * Get the SVG icon selector for the \"Incorrect\" review button, depending on\n * if the button is selected or not\n *\n * @param isSelected\n * @returns\n */\nexport function getIncorrectButtonIcon(isSelected = false): string {\n return isSelected ? 'circle-x' : 'circle-close-o';\n}\n\n/**\n * The subheader for the action sheet (if open) displaying similar to \"Photo taken on 07/27/23 at 6:01 AM\"\n */\nexport function getActionSheetPhotoDateString(intl: ADCIntlService, date?: Date): string | SafeString {\n if (!date) {\n return '';\n }\n\n const dateString = intl.formatDateTz(date, {\n format: 'shortDateFormat'\n });\n const timeString = intl.formatDateTz(date, {\n hour: 'numeric',\n minute: '2-digit'\n });\n\n return intl.t('generic.video.settings.familiar-subject.photoTaken', {\n date: dateString,\n time: timeString,\n htmlSafe: true\n });\n}\n\n/**\n * Represents the types of action sheet that can be opened for a familiar target enrollment or feedback image\n */\nexport enum ActionSheetTypes {\n photo,\n incorrectMove,\n none\n}\n","import { LightAlertOption } from 'customer-site/enums/LightAlertOption';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nconst lightOptionResourceLoc = 'generic.video.settings.perimeter-guard-rule.lightAlertOption';\n\nconst lightOptionToResource = (intl: ADCIntlService, option: LightAlertOption) => {\n const lightOptionMap: { [key in LightAlertOption]?: string } = {\n [LightAlertOption.FullFloodlightOnly]: `${lightOptionResourceLoc}.fullFloodlightOnly`,\n [LightAlertOption.FlashingFloodlightOnly]: `${lightOptionResourceLoc}.flashingFloodlightOnly`,\n [LightAlertOption.AlarmLightOnly]: `${lightOptionResourceLoc}.alarmLightOnly`,\n [LightAlertOption.FlashingFloodlightAndAlarmLight]: `${lightOptionResourceLoc}.flashingFloodlightAndAlarmLight`,\n [LightAlertOption.FullFloodlightAndAlarmLight]: `${lightOptionResourceLoc}.fullFloodlightAndAlarmLight`,\n [LightAlertOption.PulsingFloodlightAndAlarmLight]: `${lightOptionResourceLoc}.pulsingFloodlightAndAlarmLight`,\n [LightAlertOption.FullSpotlight]: `${lightOptionResourceLoc}.spotlightOn`,\n [LightAlertOption.BlinkingSpotlight]: `${lightOptionResourceLoc}.spotlightBlinking`,\n [LightAlertOption.PulsingSpotlight]: `${lightOptionResourceLoc}.spotlightPulsing`,\n [LightAlertOption.SpoitlightOff]: `${lightOptionResourceLoc}.spotlightOff`\n };\n\n const resourceKey = lightOptionMap[option];\n return resourceKey ? intl.t(resourceKey) : '';\n};\n\nexport function lightAlertDropdownItems(intl: ADCIntlService, options?: LightAlertOption[]): DropdownSelectItem[] {\n return (\n options?.map((option) =>\n DropdownSelectItem.create({\n value: option.toString(),\n name: lightOptionToResource(intl, option)\n })\n ) ?? []\n );\n}\n","import { LongBeep, ShortBeep, Whistle, SingleSiren, SingleSiren2 } from 'customer-site/enums/PerimeterGuardAudioOption';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\n\nconst audioOptionResourceLoc = 'generic.video.settings.perimeter-guard-rule.audioOption';\n\n/**\n * Get the translated resource string for the given perimeter guard audio option enum value\n * @param intl\n * @param option The perimeter guard audio option enum value\n * @param useNumberedWarningSounds Should the numbered warning sound names be used\n * @returns The translated resource string\n */\nconst audioOptionToResource = (intl: ADCIntlService, option: number, useNumberedWarningSounds: boolean) => {\n const audioOptionMap: { [key in number]: string } = {\n [LongBeep]: `${audioOptionResourceLoc}.longBeep`,\n [ShortBeep]: `${audioOptionResourceLoc}.shortBeep`,\n [Whistle]: `${audioOptionResourceLoc}.whistle`,\n [SingleSiren]: useNumberedWarningSounds\n ? `${audioOptionResourceLoc}.singleSiren1`\n : `${audioOptionResourceLoc}.singleSiren`,\n [SingleSiren2]: `${audioOptionResourceLoc}.singleSiren2`\n };\n\n const resourceKey = audioOptionMap[option];\n return resourceKey ? intl.t(resourceKey) : '';\n};\n\n/**\n * Get the dropdown items for the the given list of perimeter guard audio options\n * @param intl\n * @param options List of PerimeterGuardAudioOption values\n * @returns List of DropdownSelectItem\n */\nexport function perimeterGuardAudioDropdownItems(intl: ADCIntlService, options: number[] = []): DropdownSelectItem[] {\n const useNumberedWarningSounds = options.includes(SingleSiren2);\n return options.map((option) =>\n DropdownSelectItem.create({\n value: option.toString(),\n name: audioOptionToResource(intl, option, useNumberedWarningSounds)\n })\n );\n}\n","/**\n * Helper methods and properties for video streaming.\n */\n\nimport ForcedStreamingMethodEnum from 'customer-site/enums/ForcedStreamingMethod';\n\n/**\n * The relay query param value if we want to force proxy.\n */\nexport const ForceProxyQueryParamValue = '1';\n\n/**\n * The relay query param value if we want to force end-to-end.\n */\nexport const ForceEndToEndQueryParamValue = '0';\n\n/**\n * Returns an enum for a forced streaming mode based on query params.\n *\n * @param relayQueryParam The value of the relay query param (if present)\n * @param forceOespQueryParam The value of the forceOEsp query param (if present)\n */\nexport function getForcedStreamingMethod(\n relayQueryParam?: string,\n forceOespQueryParam?: string\n): ForcedStreamingMethodEnum {\n if (relayQueryParam) {\n if (relayQueryParam === ForceEndToEndQueryParamValue) {\n return ForcedStreamingMethodEnum.ForceWebRTCEndToEnd;\n } else if (relayQueryParam === ForceProxyQueryParamValue) {\n return ForcedStreamingMethodEnum.ForceWebRTCProxy;\n }\n }\n\n if (forceOespQueryParam) {\n return ForcedStreamingMethodEnum.ForceOESP;\n }\n\n return ForcedStreamingMethodEnum.NoForcedStreamingMethod;\n}\n","import { getOwner, setOwner } from '@ember/owner';\nimport { inject as service } from '@ember/service';\nimport { runTask } from 'ember-lifeline';\nimport WebrtcPreloadingSupport from 'customer-site/enums/WebrtcPreloadingSupport.ts';\nimport EndToEndRtcPlayer from '@adc/video-player/classes/webrtc/end-to-end-rtc-player';\nimport { getPlayerId } from '@adc/video-player/components/base-player';\nimport { BaseVideoIdPrefix } from '@adc/video-player/components/live-video-player';\nimport { StreamingTypeLive } from '@adc/video-player/constants/generic';\nimport { FailedToConnect, Error, Disconnected } from '@adc/video-player/constants/player-messages';\nimport { logMessageToWavefront } from '@adc/video-player/utils/wavefront';\nimport { reloadVideoSource } from './general.ts';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type { StateInfo } from '@adc/video-player/components/base-player';\nimport type Store from '@ember-data/store';\nimport type Owner from '@ember/owner';\nimport type Camera from 'customer-site/models/video/devices/camera';\n\ntype VideoPreloaderRtcProps = {\n preloadingSupportEnum: WebrtcPreloadingSupport;\n onTrackCallback: (event: RTCTrackEvent) => void;\n disconnectCallback: () => void;\n};\n\n/**\n * The player state object type.\n */\ntype State = {\n eventName: string;\n args: StateInfo;\n};\n\n/**\n * Class representing the details and operations for preloading a video.\n */\nexport default class VideoPreloaderDetail {\n @service declare store: Store;\n @service declare ajax: AdcAjaxService;\n\n /**\n * The RTC player instance.\n */\n rtcPlayer?: EndToEndRtcPlayer;\n\n /**\n * The current player state.\n */\n state?: State;\n\n /**\n * Flag indicating if the timeout timer has finished.\n */\n timerFinished = false;\n\n /**\n * The player ID.\n */\n playerId: string;\n\n /**\n * How far are we preloading this stream?\n */\n preloadingSupportEnum: WebrtcPreloadingSupport;\n\n /**\n * The RTC track event. Used for attaching to a video element later.\n */\n private trackEvent?: RTCTrackEvent;\n\n /**\n * The loaded camera model.\n */\n private camera: Camera;\n\n /**\n * The host object.\n */\n private host: object;\n\n /**\n * Callback method if this preloaded stream disconnects.\n */\n private onDisconnectedCallback: (playerId: string) => void;\n\n /**\n * Creates an instance of VideoPreloaderDetail.\n */\n constructor(\n host: object,\n camera: Camera,\n preloadingSupportEnum: WebrtcPreloadingSupport,\n onDisconnectedCallback: (playerId: string) => void\n ) {\n this.camera = camera;\n this.preloadingSupportEnum = preloadingSupportEnum;\n this.playerId = getPlayerId(BaseVideoIdPrefix, camera.id);\n this.host = host;\n this.onDisconnectedCallback = onDisconnectedCallback;\n\n setOwner(this, getOwner(host) as Owner);\n }\n\n /**\n * Sets up the end-to-end RTC player.\n */\n private async setupRtcPlayer(): Promise {\n const { ajax, store, host, camera, playerId, preloadingSupportEnum } = this,\n streamingProperties = await reloadVideoSource.call(this, camera.videoSource);\n\n if (!streamingProperties) {\n return;\n }\n\n const endToEndWebrtcConnectionInfo = streamingProperties.endToEndWebrtcConnectionInfo;\n\n if (!endToEndWebrtcConnectionInfo) {\n return;\n }\n\n const onTrackCallback = (event: RTCTrackEvent): void => {\n this.trackEvent = event;\n\n if (preloadingSupportEnum === WebrtcPreloadingSupport.PreloadToSdp) {\n this.attachEventToVideoElement();\n }\n },\n disconnectCallback = (): void => {\n this.timerFinished = true;\n return;\n },\n updateState = (eventName: string, args: StateInfo): void => {\n this.state = { eventName, args };\n\n if ([Error, FailedToConnect, Disconnected].includes(eventName)) {\n // Stream failed to connect - clear from the preloader service.\n this.onDisconnectedCallback(this.playerId);\n }\n },\n videoPreloaderRtcProps: VideoPreloaderRtcProps = {\n preloadingSupportEnum,\n onTrackCallback,\n disconnectCallback\n },\n webRtcProperties = {\n mac: camera.macAddress,\n deviceModel: camera.deviceModel,\n firmware: camera.firmwareVersion,\n endToEndWebrtcConnectionInfo,\n playerId,\n streamingType: StreamingTypeLive,\n updateState,\n onTrackCallback,\n videoPreloaderRtcProps,\n logMessageToWavefront: (message: string) =>\n logMessageToWavefront(ajax, store, true, camera.isVirtualCamera, message)\n };\n\n this.rtcPlayer = new EndToEndRtcPlayer(host, webRtcProperties);\n }\n\n /**\n * Checks if the WebRTC connection is established.\n */\n get isConnected(): boolean {\n return !!this.rtcPlayer?.isWebRtcConnected;\n }\n\n /**\n * Attaches the RTC event to the video element.\n */\n attachEventToVideoElement(): void {\n const { trackEvent } = this;\n\n if (trackEvent) {\n runTask(this, () => this.rtcPlayer?.attachStreamToVideoTag(trackEvent), 0);\n }\n }\n\n /**\n * Starts the video stream.\n */\n async startStream(): Promise {\n await this.setupRtcPlayer();\n this.rtcPlayer?.startStream();\n }\n\n /**\n * Attaches an update state function to the RTC player.\n */\n attachUpdateState(updateState: (eventName: string, args: StateInfo) => void): void {\n const { rtcPlayer } = this;\n\n if (rtcPlayer) {\n rtcPlayer.updateState = updateState;\n }\n }\n}\n","import {\n AutoView,\n FourPlusTwoPlusFourView,\n HybridView,\n OnePlusFiveView,\n OnePlusSevenView,\n TwoPlusEightView\n} from 'customer-site/components/video/video-streaming/video-streaming-features/index';\nimport {\n ExitFullScreen,\n FullScreen,\n ExitTheaterMode,\n TheaterMode,\n HDToggleOff,\n HDToggleOn,\n PlayerRestore,\n PlayerExpand,\n CameraDropdown,\n SeekBack,\n SeekForward,\n TimelineArrowBack,\n TimelineArrowForward,\n TimelineCollapse,\n TimelineExpand,\n HourButton,\n DayButton,\n SidebarClose,\n SidebarOpen,\n CloseDateTimePicker,\n DateTimePicker,\n TimelineEvent,\n ActivityEvent,\n DownloadClip,\n DownloadThumbnail,\n SpeedDropdown1x,\n SpeedDropdown2x,\n SpeedDropdown4x,\n SpeedDropdown8x,\n LayoutAutoView,\n LayoutHybridView,\n LayoutOnePlusFive,\n LayoutOnePlusSeven,\n LayoutTwoPlusEight,\n LayoutFourPlusTwoPlusFour\n} from 'customer-site/enums/TrackedEvent';\nimport { IGNORED_VALUE } from 'customer-site/services/stats';\n\nimport type Stats from 'customer-site/services/stats';\n\n// Item lookup selection keys\nexport const FULL_SCREEN_TOGGLE = 'full-screen',\n THEATER_MODE_TOGGLE = 'theater-mode',\n HD_TOGGLE = 'hd_toggle',\n CAMERA_GROUPS = 'camera_groups',\n PLAYER_SIZE = 'player-size',\n PLAYBACK_SEEK = 'playback-seek',\n PLAYBACK_INTERVAL = 'playback-interval',\n PLAYBACK_DATE_PICKER = 'playback-date-picker',\n PLAYBACK_SIDEBAR_OPEN_CLOSE = 'playback-sidebar-open-close',\n PLAYBACK_EXPAND_COLLAPSE_TIMELINE = 'playback-expand-collapse-timeline',\n TIMELINE_TIME_UPDATE = 'timeline-update-time',\n TIMELINE_EVENT_POPOVER = 'timeline-event-popover',\n DOWNLOAD_CLIP = 'download-clip';\n\ninterface EventsCollection {\n [key: string]: T;\n}\n\ninterface SpeedCollection {\n [key: number]: T;\n}\n\nconst eventConditionCollection: EventsCollection = {\n [FULL_SCREEN_TOGGLE]: [ExitFullScreen, FullScreen],\n [THEATER_MODE_TOGGLE]: [ExitTheaterMode, TheaterMode],\n [HD_TOGGLE]: [HDToggleOff, HDToggleOn],\n [PLAYER_SIZE]: [PlayerRestore, PlayerExpand],\n [CAMERA_GROUPS]: [IGNORED_VALUE, CameraDropdown],\n [PLAYBACK_SEEK]: [SeekBack, SeekForward],\n [TIMELINE_TIME_UPDATE]: [TimelineArrowBack, TimelineArrowForward],\n [PLAYBACK_EXPAND_COLLAPSE_TIMELINE]: [TimelineCollapse, TimelineExpand],\n [PLAYBACK_INTERVAL]: [HourButton, DayButton],\n [PLAYBACK_SIDEBAR_OPEN_CLOSE]: [SidebarClose, SidebarOpen],\n [PLAYBACK_DATE_PICKER]: [CloseDateTimePicker, DateTimePicker],\n [TIMELINE_EVENT_POPOVER]: [TimelineEvent, ActivityEvent],\n [DOWNLOAD_CLIP]: [DownloadClip, DownloadThumbnail]\n};\n\nconst speedDropdownEventCollection: SpeedCollection = {\n 1: SpeedDropdown1x,\n 2: SpeedDropdown2x,\n 4: SpeedDropdown4x,\n 8: SpeedDropdown8x\n};\n\n// region Public Helpers\n\n/**\n * Resolve the event item enum for an event string and log it using the supplied stats service.\n * @param { Stats } stats stats service to log\n * @param { string } event event key\n * @param { boolean? } condition determines the conditional result, if one should exist\n */\nexport async function logEventConditionToWavefront(stats: Stats, event: string, condition: boolean): Promise {\n const eventEnum = getEnumForEventCondition(event, condition);\n\n if (stats) {\n await stats.logEvent(eventEnum);\n }\n}\n\n/**\n * Resolves the event item enum for an event string and the given user context and condition. If the enum\n * is dependant on a condition, the condition can be passed as an argument.\n *\n * @param { string | undefined } event event key\n * @param { boolean } condition determines the conditional result, if one should exist\n */\nexport function getEnumForEventCondition(event: string | undefined, condition: boolean): number {\n if (event === undefined) {\n return IGNORED_VALUE;\n }\n\n const eventList = eventConditionCollection[event];\n\n if (eventList.length === 1) {\n return eventList[0];\n }\n\n return eventList ? eventList[condition ? 1 : 0] : IGNORED_VALUE;\n}\n\n// endregion\n\n// region video-streaming-features\n\n/**\n * Resolve the item enum for the layout change event.\n *\n * @param { number } layoutType The layout to which the view is being switched\n */\nexport function getLayoutChangeEventEnum(layoutType: string): number {\n switch (layoutType) {\n case AutoView:\n return LayoutAutoView;\n case HybridView:\n return LayoutHybridView;\n case OnePlusFiveView:\n return LayoutOnePlusFive;\n case OnePlusSevenView:\n return LayoutOnePlusSeven;\n case TwoPlusEightView:\n return LayoutTwoPlusEight;\n case FourPlusTwoPlusFourView:\n return LayoutFourPlusTwoPlusFour;\n default:\n return IGNORED_VALUE;\n }\n}\n\n// endregion\n\n// playback-features\n\nexport function getSpeedDropdownEventEnum(speed: number): number {\n return speedDropdownEventCollection[speed] ?? IGNORED_VALUE;\n}\n\n// endregion\n","/**\n *\n * Utility helper module for water meters.\n * @module\n */\n\nimport { Offline, Leak, Normal, Unknown } from '../enums/WaterMeterStatus';\n\n/**\n * Returns the appropriate CSS class to show the current water meter state.\n *\n * @param {number} state the water meter state.\n *\n * @returns {String}\n */\nexport function getWaterMeterStateCSS(state) {\n // Return computed state.\n return {\n [Offline]: 'offline',\n [Leak]: 'leak',\n [Normal]: 'normal',\n [Unknown]: 'unknown'\n }[state];\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param {number} state The state to represent.\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n *\n * @returns {String}\n */\nexport function getWaterMeterStateText(state, getTranslation) {\n return getTranslation(`home.water-meters.${getWaterMeterStateCSS(state)}`);\n}\n","/**\n * Utility helper module for water-sensor devices.\n * @module\n */\n\nimport { Wet, Dry } from '../enums/SensorStatus';\nimport { getDeviceStateCSS } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param {number} state The state to show.\n */\nexport function getWaterSensorStateCSS(state: number): string {\n return getDeviceStateCSS(state, [Wet, Dry], ['wet', 'dry'], false);\n}\n","/**\n * Utility helper module for water-valve devices.\n * @module\n */\n\nimport { Closed, Open } from '../enums/WaterValveStatus';\nimport { getDeviceStateCSS } from './device-state';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param {number} state The state to show.\n * @param {boolean} [flipState=false] If true we should return the CSS for the opposite state (does not apply to \"Unknown\" state).\n *\n * @returns {String}\n */\nexport function getWaterValveStateCSS(state, flipState = false) {\n return getDeviceStateCSS(state, [Closed, Open], ['closed', 'open'], flipState);\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param {number} state The state to represent.\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {boolean} [inTransition=false] Indicates the water valve is in transition to the indicated state.\n *\n * @returns {String}\n */\nexport function getWaterValveStateText(state, getTranslation, inTransition = false) {\n let key;\n\n if (inTransition) {\n key = state === Closed ? 'closing' : 'opening';\n } else {\n key = state === Closed ? 'closed' : 'opened';\n }\n\n return getTranslation(`home.water.${key}`);\n}\n","import { set } from '@ember/object';\n\n/**\n * Define what an appropriate callback method looks like (returns boolean)\n */\nexport type ValidationCallback = (value: string, args?: Record) => boolean;\n\n/**\n * Define what an appropriate message method looks like (returns a string)\n */\nexport type MessageCallback = (message: string) => string;\n\n/**\n * Define what validation rules look like.\n */\nexport type ValidationRules = Record;\n\n/**\n * Define validation model and error message\n */\nexport type RecordConfig = {\n validation: string | RegExp | ValidationCallback;\n message: string | MessageCallback;\n args?: Record;\n};\n\n/**\n * Common regular expressions\n */\nconst formats: { [key: string]: RegExp } = {\n // No validation\n none: new RegExp('^.*$'),\n // IP Addresses\n ip: new RegExp('^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'),\n // MAC Addresses\n mac: new RegExp('^([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})$'),\n // Hostnames\n hostname: new RegExp(\n '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\\\-]*[a-zA-Z0-9])\\\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\\\-]*[A-Za-z0-9])$'\n )\n};\n\n/**\n * Minimum port number value\n */\nconst MIN_PORT_RANGE = 0;\n\n/**\n * Maximum port number value\n */\nconst MAX_PORT_RANGE = 65535;\n\n/**\n * Get netmask parts\n */\nfunction getNetmaskParts(parts: string[]): RegExpMatchArray | null {\n return ('1'.repeat(parseInt(parts[1], 10)) + '0'.repeat(32 - parseInt(parts[1], 10))).match(/.{1,8}/g);\n}\n\n/**\n * Validation callback for port checking\n */\nexport const ipToNum = (ip: string): number => {\n const d = ip.split('.');\n return ((+d[0] * 256 + +d[1]) * 256 + +d[2]) * 256 + +d[3];\n};\n\n/**\n * Determine start and end ip address from a netmask\n * Netmask format : x.x.x.x/x (ex. 192.168.0.0/24);\n */\nexport const ipRangesFromNetmask = (netmask: string): Record => {\n const part = netmask.split('/'), // part[0] = base address, part[1] = netmask\n ipaddress = part[0].split('.');\n let netmaskParts: RegExpMatchArray | null,\n netmaskBlocks: number[] = [0, 0, 0, 0];\n\n if (!/\\d+\\.\\d+\\.\\d+\\.\\d+/.test(part[1])) {\n // part[1] has to be between 0 and 32\n netmaskParts = getNetmaskParts(part);\n if (netmaskParts != null) {\n netmaskBlocks = netmaskParts.map(function (el) {\n return parseInt(el, 2);\n });\n }\n } else {\n // xxx.xxx.xxx.xxx\n netmaskBlocks = part[1].split('.').map(function (el) {\n return parseInt(el, 10);\n });\n }\n\n const invertedNetmaskblocks = netmaskBlocks.map(function (el) {\n return el ^ 255;\n }),\n baseAddress = ipaddress.map(function (block, idx) {\n return parseInt(block, 10) & netmaskBlocks[idx];\n }),\n broadcastaddress = ipaddress.map(function (block, idx) {\n return parseInt(block, 10) | invertedNetmaskblocks[idx];\n });\n\n if (baseAddress[3] == 0) {\n baseAddress[3] = 2;\n }\n\n if (broadcastaddress[3] === invertedNetmaskblocks[3]) {\n broadcastaddress[3] = invertedNetmaskblocks[3] - 1;\n }\n\n return { startRange: baseAddress.join('.'), endRange: broadcastaddress.join('.') };\n};\n\n/**\n * Validate a given IP address is within acceptable range for IQ Router\n */\nexport const ipRangeValidation = (value: string, args: Record): boolean => {\n if (!formats.ip.test(value)) {\n return false;\n }\n\n if (!args.netmask) {\n return false;\n }\n\n const parts = args.netmask.split('/');\n\n if (!formats.ip.test(parts[0])) {\n return false;\n }\n\n if (!/\\d+/.test(parts[1])) {\n return false;\n }\n\n const netmaskParts = getNetmaskParts(parts) ?? ['0', '0', '0', '0'],\n invertedNetmaskblocks = netmaskParts?.map(function (el) {\n return parseInt(el, 2) ^ 255;\n }),\n netmaskBits =\n ((parseInt(netmaskParts[0], 10) << 24) |\n (parseInt(netmaskParts[1], 10) << 16) |\n (parseInt(netmaskParts[2], 10) << 8) |\n parseInt(netmaskParts[3], 10)) >>>\n 0,\n base = ipToNum(parts[0]),\n ip = ipToNum(value),\n ipNetwork = netmaskBits & ip,\n baseNetwork = netmaskBits & base,\n lastOctet = Number(value.slice(value.lastIndexOf('.') + 1));\n\n return (\n ipNetwork === baseNetwork &&\n ip !== base &&\n value.slice(-2) !== '.0' &&\n lastOctet < (invertedNetmaskblocks ? invertedNetmaskblocks[3] : 255)\n );\n};\n\n/**\n * Validate a given port for port forwarding rules\n */\nexport const portValidation = (value: string): boolean => {\n return !(isNaN(Number(value)) || Number(value) > MAX_PORT_RANGE || Number(value) < MIN_PORT_RANGE);\n};\n\n/**\n * Validates the input based on the input type.\n */\nexport function validateInput(\n localModelData: Partial,\n rules: ValidationRules,\n property: string,\n value: string\n): boolean {\n const rule = rules[property],\n validationMethod = rule.validation,\n args = rule.args;\n let retVal = false;\n\n if (typeof validationMethod === 'function') {\n retVal = validationMethod(value, args);\n }\n\n if (typeof validationMethod === 'object') {\n retVal = validationMethod.test(value);\n }\n\n if (typeof validationMethod === 'string' && formats[validationMethod] != undefined) {\n retVal = formats[validationMethod].test(value);\n }\n\n if (!retVal) {\n set(localModelData.errors, property, rule.message);\n } else {\n set(localModelData.errors, property, undefined);\n }\n\n return retVal;\n}\n\n/**\n * Does the model data have errors?\n */\nexport function hasErrors(localModelData: Partial, rules: ValidationRules): boolean {\n const validKeys: Array = Object.keys(rules),\n allValid = validKeys.every((property) => {\n return validateInput(localModelData, rules, property, localModelData[property]);\n });\n\n return !allValid;\n}\n\n/**\n * Does the model data have changes?\n */\nexport function hasChanges(localModelData: Partial, modelData: Partial, rules: ValidationRules): boolean {\n const validKeys: Array = Object.keys(rules);\n\n return validKeys.some((key) => (modelData !== undefined ? modelData[key] !== localModelData[key] : true));\n}\n\n/**\n * Called when a property changes, validates the input and sets errors if they are present\n */\nexport function propertyChanged(\n localModelData: Partial,\n property: string,\n value: string,\n rules: ValidationRules\n): void {\n validateInput(localModelData, rules, property, value);\n\n set(localModelData, property, value);\n}\n","/**\n * Utility helper module for generic zwave devices.\n * @module\n */\n\nimport { On, Off, Offline, NoState } from '../enums/LightStatus';\nimport { getDeviceStateKey } from './device-state';\n\nimport type AdcIntlService from '@adc/i18n/services/adc-intl';\n\n/**\n * Returns the appropriate CSS class to show the current state.\n *\n * @param state The state to show.\n * @param flipState If true we should return the CSS for the opposite state (does not apply to \"Unknown\" state).\n */\nexport function getZWaveGenericCSS(state: number, flipState = false): string {\n if (flipState) {\n switch (state) {\n case On:\n state = Off;\n break;\n case Off:\n state = On;\n break;\n }\n }\n\n return (\n {\n [On]: 'on',\n [Off]: 'off',\n [NoState]: 'no-state',\n [Offline]: 'offline'\n }[state] ?? 'no-state'\n );\n}\n\n/**\n * Returns the indicated state in text form.\n *\n * @param state The state to represent.\n * @param getTranslation - Function that gets translation by key.\n * @param inTransition Indicates the lock is in transition to the indicated state.\n */\nexport function getZWaveGenericText(state: number, getTranslation: AdcIntlService['t'], inTransition = false): string {\n if (state === NoState || state === Offline) {\n return '';\n }\n\n return getTranslation(`generic.${getDeviceStateKey(getZWaveGenericCSS, state, inTransition)}`);\n}\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport { AutoView } from '../components/video/video-streaming/video-streaming-features/index';\nimport { EmberVideoCameraGroups, EmberVideoCameraGroupsEdit } from '../enums/CustomerPageUrl';\n\nimport type { StreamUsage } from 'customer-site/enums/StreamUsage';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Base Playback Route Controller.\n */\nexport default class BasePlaybackController extends Controller {\n @service declare contextManager: ContextManager;\n\n queryParams = ['cameraGroupId', 'cameraId', 'relay', 'startTime', 'timeInterval'];\n\n /** @override */\n editGroupRouteId = EmberVideoCameraGroupsEdit;\n\n /** @override */\n manageGroupsRouteId = EmberVideoCameraGroups;\n\n /**\n * The type of playback (SD or SVR) for this controller.\n */\n playbackType?: StreamUsage;\n\n /**\n * The ID of the camera/s to show on the page. This is either a globaldeviceid or json string (which is an array of globaldeviceid when parsed).\n * todo rename this to cameraIds and have this universally be JSON (VID-36824)\n */\n @tracked cameraId?: string;\n\n /**\n * The ID of the camera group being viewed.\n */\n @tracked cameraGroupId?: number;\n\n /**\n * Whether we should use the collapsed timeline display mode (as opposed to the expanded display mode).\n */\n collapsedModeForTimeline = false;\n\n /**\n * Whether we should hide the sidebar/event-history\n */\n hideSidebar = true;\n\n /**\n * The current time interval in seconds between the start and end of the timeline.\n */\n @tracked timeInterval?: number;\n\n /**\n * The current layout type.\n */\n layoutType = AutoView;\n\n /**\n * Should we force the page to only connect through proxy?\n */\n relay?: string;\n\n /**\n * The time which the SVR or SD Player should seek to upon loading.\n */\n startTime?: string;\n\n /**\n * When screen recording in the browser for auditing CS operator-viewed playback,\n * should audio be recorded along with video?\n */\n recordAudio = false;\n}\n","import { reads } from '@ember/object/computed';\nimport { NUM_SECONDS_IN_DAY, NUM_SECONDS_IN_HOUR } from 'customer-site/utils/datetime';\nimport {\n COOKIE_INTERVAL,\n COOKIE_USE_COLLAPSED_TIMELINE,\n COOKIE_HIDE_SIDEBAR,\n getCookieForPage\n} from 'customer-site/utils/video/cookies';\nimport { getForcedStreamingMethod } from 'customer-site/utils/video/streaming';\nimport VideoStreamingFeaturesRoute from 'customer-site/video/video-streaming-features-route';\nimport { Video } from '../enums/LocationDataType';\n\nimport type Transition from '@ember/routing/transition';\nimport type ForcedStreamingMethodEnum from 'customer-site/enums/ForcedStreamingMethod';\nimport type HistoryDeviceIdFilter from 'customer-site/models/activity/history-device-id-filter';\nimport type HistoryDeviceTypeFilter from 'customer-site/models/activity/history-device-type-filter';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type Svr from 'customer-site/models/video/devices/svr';\nimport type DewarpConfig from 'customer-site/models/video/dewarp-config';\nimport type VideoStreamingPermissionsCollection from 'customer-site/models/video/permissions/video-streaming-permissions-collection';\nimport type BasePlaybackController from './base-playback-controller';\n\nexport type CameraFilter = 'hasSdRecordingSchedule' | 'hasSvrSchedule';\n\nexport interface BasePlaybackModel {\n cameras: Camera[];\n cameraGroups: CameraGroup[];\n dewarpConfigs: ADCAsyncStoreFindAll;\n forcedStreamingMethodFromQueryParam: ForcedStreamingMethodEnum;\n hasVideoDeviceThatSupportsPlaybackType: boolean;\n videoStreamingPermissions: ADCAsyncStoreFindRecord;\n allowedDeviceTypesForFilter: ADCAsyncStoreFindAll;\n customerDevicesById: ADCAsyncStoreFindAll;\n locationCameraGroupInfos: ADCAsyncStoreQuery | [];\n svrs?: ADCAsyncStoreFindAll;\n groupResolution?: number;\n}\n\nexport interface BasePlaybackQueryParams {\n cameraGroupId?: number;\n cameraId?: string;\n relay?: string;\n startTime?: Date;\n timeInterval?: number;\n}\n\n/**\n * @classdesc\n * Base route for video playback pages.\n */\nexport default abstract class BasePlaybackRoute extends VideoStreamingFeaturesRoute {\n /** @override */\n queryParams = {\n cameraGroupId: { replace: true },\n cameraId: { replace: true },\n relay: { replace: true },\n startTime: { replace: true },\n timeInterval: { replace: true, type: 'number' }\n };\n\n /** @override */\n doNotTimeOut = true;\n\n /**\n * Camera model from system to select from.\n */\n abstract cameraModel: string;\n\n /**\n * Camera model property to filter by.\n */\n abstract cameraFilterProperty?: CameraFilter;\n\n ignoreCache = false;\n\n /**\n * Is this an Operator Site session?\n */\n @reads('identityManager.identityModel.isVisualVerification')\n declare isOperatorSite: boolean;\n\n /** @override */\n async setupController(\n controller: BasePlaybackController,\n model: BasePlaybackModel,\n transition: Transition\n ): Promise {\n super.setupController(controller, model, transition);\n\n const { contextManager, ignoreCache, routeName } = this;\n\n if (ignoreCache) {\n return;\n }\n\n const cookieInterval = getCookieForPage.call(this, routeName, COOKIE_INTERVAL),\n cookieUseCollapsedTimeline = getCookieForPage.call(this, routeName, COOKIE_USE_COLLAPSED_TIMELINE),\n cookieHideSidebar = getCookieForPage.call(this, routeName, COOKIE_HIDE_SIDEBAR),\n urlSearchParams = new URLSearchParams(window.location.search),\n queryParams = Object.fromEntries(urlSearchParams.entries()),\n hasInternalBetaAccess = contextManager.identityModel.hasInternalBetaAccess;\n\n // intentionally using != instead of !== to catch both null and undefined\n // Querystring takes priority over cookie value for interval\n if (queryParams.timeInterval != null) {\n let timeInterval = parseInt(queryParams.timeInterval);\n\n // Making sure non internalbeta users dont set the interval parameter to anything other the DAY or HOUR mode\n if (!hasInternalBetaAccess && ![NUM_SECONDS_IN_HOUR, NUM_SECONDS_IN_DAY].includes(timeInterval)) {\n timeInterval = NUM_SECONDS_IN_HOUR;\n }\n\n controller.set('timeInterval', timeInterval);\n } else if (cookieInterval != null) {\n controller.set('timeInterval', parseInt(cookieInterval));\n } else {\n controller.set('timeInterval', NUM_SECONDS_IN_HOUR);\n }\n\n if (cookieUseCollapsedTimeline != null) {\n controller.set('collapsedModeForTimeline', cookieUseCollapsedTimeline === 'true');\n }\n\n if (cookieHideSidebar != null) {\n controller.set('hideSidebar', cookieHideSidebar === 'true');\n }\n }\n\n /**\n * Selects the correct system and filters the cameras with a playback schedule\n */\n async model({ relay }: BasePlaybackQueryParams): Promise {\n const { contextManager, store, cameraFilterProperty, cameraModel, isOperatorSite } = this,\n selectedSystemOrGroupId = contextManager.getSelectedSystemId() || contextManager.getSelectedSystemGroupId(),\n cameras = store.findAll(cameraModel),\n videoStreamingPermissions = store.findRecord(\n 'video/permissions/videoStreamingPermissionsCollection',\n selectedSystemOrGroupId\n ),\n allCameraGroups = store.query('video/camera-group', {}),\n promises = [cameras, allCameraGroups, videoStreamingPermissions],\n getCameraGroups = async () => {\n if (isOperatorSite) {\n // If we are on the Operator Portal, we return an array of custom camera groups\n return await this.getCameraGroups(cameraFilterProperty, filteredCameras);\n }\n // If we are on the Customer Site, we return an array of regular groups\n return await this.getFilteredCameraGroups(allCameraGroups);\n };\n\n await Promise.all(promises);\n const filteredCameras = cameraFilterProperty ? cameras.filterBy(cameraFilterProperty) : cameras.filterBy('id');\n\n return {\n cameras: filteredCameras,\n cameraGroups: await getCameraGroups(),\n dewarpConfigs: store.findAll('video/dewarp-config'),\n forcedStreamingMethodFromQueryParam: getForcedStreamingMethod(relay, undefined),\n hasVideoDeviceThatSupportsPlaybackType: !!cameras.length,\n videoStreamingPermissions,\n\n // These filter models take enterprise vs single system into account and they only\n // return filterable objects and ignore others.\n allowedDeviceTypesForFilter: store.findAll('activity/history-device-type-filter'),\n customerDevicesById: store.findAll('activity/history-device-id-filter'),\n locationCameraGroupInfos: contextManager.isEnterprise\n ? store.query('enterprise/locations/location', {\n locationDataType: Video,\n startIndex: 0,\n searchString: '',\n filterString: '',\n getSimpleModels: true\n })\n : []\n };\n }\n\n /**\n * Filters the provided camera groups' camera lists using cameraFilterProperty.\n */\n async getFilteredCameraGroups(allCameraGroups: ADCAsyncStoreFindAll): Promise {\n const filteredCameraGroups: CameraGroup[] = [];\n\n for (const cameraGroup of allCameraGroups.toArray()) {\n await cameraGroup.cameras;\n if (this.cameraFilterProperty) {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This code should be replaced with `cameraGroup.cameras.setObjects(cameraGroup.cameras.filter((c) => !!c[this.cameraFilterProperty]));`.\n cameraGroup.cameras = cameraGroup.cameras.filterBy(this.cameraFilterProperty);\n }\n\n if (cameraGroup.cameras.length) {\n filteredCameraGroups.push(cameraGroup);\n }\n }\n\n return filteredCameraGroups;\n }\n}\n","import AdcBaseRoute from '../classes/base-route';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type BaseCamera from 'customer-site/models/video/devices/base-camera';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\nexport type RouteRequirementsValidationResult = {\n routeId?: number;\n reason?: string;\n};\n\n/**\n * @classdesc\n * Base route for video automation routes.\n */\nexport default class BaseVideoAutomationRoute extends AdcBaseRoute {\n /**\n * Model name of the devices which are being loaded by the route.\n * This is used to reload non-pending schedules and rules for the devices.\n */\n ruleOrScheduleModelName?: string;\n\n /** @override */\n async afterModel(model: ModelFrom): Promise {\n // Have the route requirements NOT been met?\n const { reason, routeId } = await this.validateRouteRequirements(model);\n\n // Warn the user if there is a reason.\n if (reason) {\n this.notificationManager.addWarning(reason);\n }\n\n // Redirect if there is a route ID.\n if (routeId) {\n this.contextManager.transitionToNativeRoute(routeId);\n }\n }\n\n /**\n * Reload all of the rules/schedules, unless they are pending, for the given videoDevices.\n */\n reloadVideoDevicesIfNotPending(videoDevices: BaseCamera[] | ArrayProxy): void {\n if (this.ruleOrScheduleModelName) {\n // For each video device, reload the rules/schedules unless they are pending.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore - Please fix this!\n videoDevices.mapBy(this.ruleOrScheduleModelName).rejectBy('isPending').invoke('reload');\n }\n }\n\n /**\n * Validates that all requirements have been met for this route. If requirements are not met this method will return an\n * object containing the reason and route ID to redirect to.\n */\n // The routes that extends this class passes in a model to their implementations of this method.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async validateRouteRequirements(model: ModelFrom): Promise {\n return {};\n }\n}\n","import { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { get } from '@ember/object';\nimport AdcBaseRoute from '../../../classes/base-route';\n\nimport type System from 'customer-site/models/systems/system';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type VideoStreamingPermissionsCollection from 'customer-site/models/video/permissions/video-streaming-permissions-collection';\n\ninterface BaseCameraGroupEditModel {\n cameraGroup: CameraGroup | Promise;\n cameras: ADCAsyncStoreQuery;\n videoStreamingPermissions: ADCAsyncStoreFindRecord;\n systems: ADCAsyncStoreQuery | ADCAsyncStoreFindRecord;\n}\n\n/**\n * @classdesc\n * Route for creating and editing camera groups.\n */\nexport default class BaseCameraGroupEditRoute extends AdcBaseRoute {\n declare currentModel: BaseCameraGroupEditModel;\n\n /** @override */\n model({ id_camera_group }: { id_camera_group: string }): BaseCameraGroupEditModel {\n const { contextManager, store } = this;\n\n return {\n cameraGroup:\n id_camera_group === 'new'\n ? store.createRecord('video/camera-group')\n : store.queryRecord('video/camera-group', {\n id: id_camera_group,\n filterByLiveViewDisplayable: true\n }),\n cameras: store.query('video/devices/camera', {\n filterByLiveViewDisplayable: true\n }),\n videoStreamingPermissions: store.findRecord(\n 'video/permissions/videoStreamingPermissionsCollection',\n contextManager.getContextId()\n ),\n systems: contextManager.identityModel.isEnterprise\n ? store.query('systems/system', { onlyFromCurrentSystemGroup: true })\n : store.findRecord('systems/system', contextManager.getSelectedSystemId())\n };\n }\n\n /** @override */\n async rollbackModelOnTransition(): Promise {\n const cameraGroup = await this.currentModel.cameraGroup;\n if (!cameraGroup || isDestroyed(cameraGroup) || get(cameraGroup, 'isSaving')) {\n return;\n }\n\n if (get(cameraGroup, 'isNew')) {\n cameraGroup.destroyRecord();\n } else if (get(cameraGroup, 'hasDirtyAttributes')) {\n cameraGroup.rollbackAttributes();\n }\n }\n}\n","import { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport type Transition from '@ember/routing/transition';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Base controller for pages to manage camera groups.\n */\nexport default class BaseCameraGroupsController extends EmberController {\n @service declare contextManager: ContextManager;\n\n readonly missingAbstractMember = -1;\n\n /**\n * Property to determine whether to show manage vs. edit markup.\n *\n * @function\n */\n @computed('contextManager.currentRouteData.routeItem.routeId', 'manageGroupsRouteId')\n get isManageRoute(): boolean {\n return this.contextManager.isCurrentRoute(this.manageGroupsRouteId);\n }\n\n /**\n * Function to transition to relevant edit camera group page.\n *\n * @function\n */\n @computed('editGroupRouteId')\n get editCameraGroupTransitionFn(): (cameraGroupId: string) => Transition {\n return (cameraGroupId) =>\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(this.editGroupRouteId, undefined, undefined, cameraGroupId);\n }\n\n /**\n * Route ID for manage groups page.\n *\n * @abstract\n */\n get manageGroupsRouteId(): number {\n logMissingAbstractMember(this, '\"manageGroupsRouteId\" property');\n return this.missingAbstractMember;\n }\n\n /**\n * Route ID for edit group page.\n *\n * @abstract\n */\n get editGroupRouteId(): number {\n logMissingAbstractMember(this, '\"editGroupRouteId\" property');\n return this.missingAbstractMember;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type VideoStreamingPermissionsCollection from 'customer-site/models/video/permissions/video-streaming-permissions-collection';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface BaseCameraGroupModel {\n cameraGroups: ADCAsyncStoreQuery;\n videoStreamingPermissions: ADCAsyncStoreFindRecord;\n}\n\n/**\n * @classdesc\n * Base route for manage camera groups pages.\n */\nexport default class BaseCameraGroupsRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n\n model(): BaseCameraGroupModel {\n const selectedSystemOrGroupId = this.contextManager.getContextId();\n return {\n cameraGroups: this.store.query('video/camera-group', {\n filterByLiveViewDisplayable: true\n }),\n videoStreamingPermissions: this.store.findRecord(\n 'video/permissions/videoStreamingPermissionsCollection',\n selectedSystemOrGroupId\n )\n };\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\n\n/**\n * Base route for analytics camera routes.\n * This route will find the OV ready camera model based on the given camera model.\n */\nexport default class BaseAnalyticsCameraRoute extends AdcBaseRoute {\n @service declare store: Store;\n\n model(): { camera: ADCAsyncStoreFindRecord } {\n return {\n camera: this.store.findRecord(\n 'video/devices/ov-ready-camera',\n (this.paramsFor('video.cameras.camera') as { id_camera: string })['id_camera']\n )\n };\n }\n}\n","import EmberController from '@ember/controller';\nimport { computed, getProperties, action } from '@ember/object';\nimport { alias, equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { FeedbackRequired } from 'customer-site/enums/CalibrationStatus';\nimport {\n EmberVideoCameraCalibrate,\n EmberVideoCameraCalibrateCapture,\n EmberVideoCameraCalibrateEdit,\n EmberVideoCameraCalibrateReview\n} from 'customer-site/enums/CustomerPageUrl';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type RouterService from '@ember/routing/router-service';\nimport type { SnapshotsRequired, ReadyForCalibration, Calibrated } from 'customer-site/enums/CalibrationStatus';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type Navigation from 'customer-site/services/navigation';\nimport type PrivacyZonesManager from 'customer-site/services/video/privacy-zones-manager';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type BaseRoute from './base-route';\n\ntype QueryParamsType = Pick<\n BaseController,\n 'newCamera' | 'installParamWifiDone' | 'installParamWifiSkipped' | 'varifocalSetupComplete'\n>;\n\n/**\n * @classdesc\n * Base controller for the video cameras calibration routes.\n *\n */\nexport default class BaseController extends EmberController {\n @service declare ajax: AdcAjaxService;\n @service declare contextManager: ContextManager;\n @service declare navigation: Navigation;\n @service('video.privacy-zones-manager') declare privacyZonesManager: PrivacyZonesManager;\n @service declare router: RouterService;\n\n declare model: ModelFrom;\n\n /**\n * Defining query parameters.\n */\n queryParams = [\n 'external',\n 'newCamera',\n 'installParamWifiDone',\n 'installParamWifiSkipped',\n 'varifocalSetupComplete'\n ];\n\n /**\n * The 'external' query param comes from MobileTech during tech calibrating the device.\n */\n external = false;\n\n /**\n * The 'newCamera' query param gets passed from the post install flow.\n */\n newCamera = '';\n\n /**\n * The 'wifi_done' query param gets passed from the post install flow.\n */\n installParamWifiDone = '';\n\n /**\n * The 'wifi_skipped' query param gets passed from the post install flow.\n */\n installParamWifiSkipped = '';\n\n /**\n * The 'varifocalSetupComplete' query param gets passed from the post install flow.\n */\n varifocalSetupComplete = '';\n\n /**\n * The current camera calibration status.\n */\n @alias('model.camera.calibrationStatus.value')\n declare calibrationStatus:\n | typeof SnapshotsRequired\n | typeof ReadyForCalibration\n | typeof FeedbackRequired\n | typeof Calibrated;\n\n /**\n * The current camera calibration status.\n */\n @alias('model.camera.id')\n declare cameraModelID: string;\n\n /**\n * Indicates we have five clips, but feedback is required before calibration.\n */\n @equal('calibrationStatus', FeedbackRequired)\n declare isFeedbackRequired: boolean;\n\n /**\n * The current clip index value.\n */\n @alias('model.index')\n declare clipIndex: ModelFrom['index'];\n\n /**\n * The current clip index value.\n */\n @alias('model.snapshotsRequired')\n declare snapshotsRequired: ModelFrom['snapshotsRequired'];\n\n /**\n * The display value for the current clip index.\n */\n\n @computed('clipIndex')\n get clipIndexDisplay(): number {\n return (this.clipIndex ?? 0) + 1;\n }\n\n /**\n * Returns a dictionary of query params\n */\n getQueryParams(): QueryParamsType {\n return getProperties(\n this,\n 'newCamera',\n 'installParamWifiDone',\n 'installParamWifiSkipped',\n 'varifocalSetupComplete'\n );\n }\n\n /**\n * Transitions to the supplied route with the optional slug value.\n */\n private transitionToCalibrationRoute(routeId: number, slug?: number, queryParams?: Partial) {\n this.navigation.transitionToRouteId(\n routeId,\n ...[\n this.cameraModelID,\n slug,\n queryParams && Object.keys(queryParams).length ? { queryParams } : undefined\n ].compact()\n );\n }\n\n /**\n * Transitions to the capture route.\n *\n * @param [index=clipIndex] Optional index to capture.\n * @param queryParams Optional query params for transition\n */\n @action transitionToCaptureRoute(index = this.clipIndex, queryParams = {}): void {\n this.transitionToCalibrationRoute(EmberVideoCameraCalibrateCapture, index, queryParams);\n }\n\n /**\n * Transitions to the edit route.\n *\n * @param [index=clipIndex] Option index to edit.\n * @param queryParams Optional query params for transition\n */\n @action transitionToEditRoute(index = this.clipIndex, queryParams = {}): void {\n this.transitionToCalibrationRoute(EmberVideoCameraCalibrateEdit, index, queryParams);\n }\n\n /**\n * Transitions to the review captures route.\n *\n * @param queryParams Optional query params for transition\n */\n @action transitionToReviewRoute(queryParams = {}): void {\n this.transitionToCalibrationRoute(EmberVideoCameraCalibrateReview, undefined, queryParams);\n }\n\n /**\n * Transitions to the index route.\n *\n * @param queryParams Optional query params for transition\n */\n @action transitionToIndexRoute(queryParams = {}): void {\n this.transitionToCalibrationRoute(EmberVideoCameraCalibrate, undefined, queryParams);\n this.model.camera.then((camera) => this.privacyZonesManager.enablePrivacyZonesAndDisplayNotification(camera));\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport {\n EmberVideoCameraCalibrate,\n EmberVideoCameraCalibrateEdit,\n EmberVideoCameraCalibrateCapture,\n EmberVideoCameraCalibrateReview\n} from 'customer-site/enums/CustomerPageUrl';\nimport AdcBaseRoute from '../../../../classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type Navigation from 'customer-site/services/navigation';\nimport type VideoAnalyticsFirmwareManagerService from 'customer-site/services/video/analytics-firmware-manager';\nimport type PrivacyZonesManager from 'customer-site/services/video/privacy-zones-manager';\nimport type { ModelFrom, Resolved } from 'customer-site/utils/type-utils';\nimport type BaseController from './base-controller';\nimport type ParentRoute from './route';\n\ntype RouteModel = ModelFrom & { index?: number; snapshotsRequired: number };\ntype ModelCamera = Resolved;\n\n/**\n * Check if the camera has the OV package or not. If not, show OV upgrade modal.\n *\n * @param camera\n * @param onFirmwareUpToDate Function to be called when firmware is already up to date, or when it updates successfully.\n *\n * @private\n */\nfunction verifyCameraFirmware(this: BaseCalibrateRoute, camera: ModelCamera, onFirmwareUpToDate = () => {}) {\n if (camera) {\n this.analyticsFirmwareManager.launchOvFirmwareUpgradeModalIfNecessary(\n camera,\n () => {\n // Refresh the model to reflect that the correct OV version is now installed.\n camera.reload();\n\n onFirmwareUpToDate();\n },\n () => {\n cancelCalibration.call(this);\n },\n onFirmwareUpToDate\n );\n }\n}\n\n/**\n * Check if the camera has all their privacy zones disabled. If not, show privacy zone disable modal.\n *\n * @private\n */\nfunction verifyCameraPrivacyZonesDisabled(this: BaseCalibrateRoute, camera: ModelCamera) {\n if (camera) {\n this.privacyZonesManager.launchDisablePrivacyZonesModalIfNecessary(\n camera,\n () => {\n // Refresh the model to reflect that the privacy zones have been disabled.\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error privacyZonesSetting is async, so this code should be replaced with `(await camera.privacyZonesSetting).reload();`.\n camera.privacyZonesSetting.reload();\n },\n () => {\n // If the modal was canceled, then transition out of calibration.\n cancelCalibration.call(this);\n }\n );\n }\n}\n\n/**\n * Cancels calibration by logging out customer reps or transitioning to the previous route.\n *\n * @private\n */\nfunction cancelCalibration(this: BaseCalibrateRoute) {\n const { contextManager, identityManager } = this;\n\n // If it's a login rep that came externally, then kick out the session\n\n if (identityManager.isLoginAsLoginRep && this.external) {\n contextManager.logout(false);\n return;\n }\n\n // Else wise just go back to the previous route.\n contextManager.transitionBackToMobileAppOrPreviousRoute();\n}\n\n/**\n * @classdesc\n * Base route for video calibration.\n */\nexport default class BaseCalibrateRoute extends AdcBaseRoute {\n @service('video.analytics-firmware-manager') declare analyticsFirmwareManager: VideoAnalyticsFirmwareManagerService;\n @service('video.privacy-zones-manager') declare privacyZonesManager: PrivacyZonesManager;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare store: Store;\n @service declare navigation: Navigation;\n\n declare controller: BaseController;\n\n /** @override */\n @computed('contextManager.visitedRoutesStack.[]')\n get clearVisitedRouteStackMobile(): boolean {\n /**\n * When `clearVisitedRouteStackMobile` is false AND this is the first route visited,\n * contextManager will add the root item for the route to the visitedRoutesStack. In this\n * particular case, this will be the base \"Video\" page. When the \"Video\" page is in the\n * back stack, pressing the back button will cause the user to go back to the base video page.\n * On mobile, this is sort of confusing because they actually came from the native\n * settings page.\n *\n * When `clearVisitedRouteStackMobile` is true, the contextManager will dump the entire\n * visitedRoutesStack during the transition, avoiding the above problem.\n *\n * However, we want to make sure that we avoid that behavior when we've visited other routes\n * before this one, as that could mess up the backward navigation.\n */\n return (this.contextManager.visitedRoutesStack?.length ?? 0) === 0;\n }\n\n /** @override */\n skipWhenTransitioningBack = true;\n\n /**\n * The 'external' query param comes from MobileTech during tech calibrating the device.\n */\n external = false;\n\n /**\n * Index slug for the URL.\n */\n @tracked index?: number;\n\n model(params: { external?: boolean; index?: string }): RouteModel {\n const model: RouteModel = {\n ...this.modelFor>('video.cameras.camera.calibrate'),\n snapshotsRequired: 5\n },\n { index } = params;\n\n this.external = !!params.external;\n\n // Do we have an index slug?\n if (index !== undefined) {\n // Add parsed index to model.\n model.index = parseInt(index, 10);\n }\n\n return model;\n }\n\n async afterModel(model: ModelFrom): Promise {\n const camera = await model.camera,\n snapshotsLength = camera.hasMany('calibrationSnapshots').ids().length;\n\n let expectedSnapshotsLength = 0;\n switch (this.routeId) {\n case EmberVideoCameraCalibrateCapture:\n expectedSnapshotsLength = model.index || 0;\n break;\n case EmberVideoCameraCalibrateEdit:\n expectedSnapshotsLength = (model.index || 0) + 1;\n break;\n case EmberVideoCameraCalibrateReview:\n expectedSnapshotsLength = model.snapshotsRequired;\n break;\n }\n\n // If the actual snapshot length is less than the expected snapshot length, it probably means the page\n // was refreshed, in which case the data is gone, so the user needs to restart the calibration process.\n // SnapshotLength can be larger than ExpectedSnapshotLength however, in the circumstance where the user\n // clicks the back button in the middle of this calibration process.\n if (snapshotsLength < expectedSnapshotsLength) {\n this.navigation.transitionToRouteId(EmberVideoCameraCalibrate);\n }\n\n verifyCameraFirmware.call(this, camera, () => {\n // If verifyCameraFirmware succeeds, run verifyCameraPrivacyZonesDisabled next.\n verifyCameraPrivacyZonesDisabled.call(this, camera);\n });\n }\n}\n","import EmberController from '@ember/controller';\nimport { computed, action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport default class BasePostInstallController extends EmberController {\n @service declare ajax: AjaxService;\n @service declare nativeBridge: NativeBridgeService;\n @service declare notificationManager: NotificationManager;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n /**\n * Retrieves native bridge back button\n */\n @computed('nativeBridge')\n get backButton(): string {\n return this.nativeBridge.getButtonTypeBack();\n }\n\n /**\n * Id of the selected camera.\n */\n @reads('model.camera.id')\n declare cameraId: number;\n\n /**\n * Transition to the previous page\n */\n @action goBack(): void {\n this.contextManager.transitionToPreviousRoute();\n }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../../classes/base-route';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * @classdesc\n * Base route for video post-install.\n */\nexport default class BasePostInstallRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n\n @computed('contextManager.visitedRoutesStack.[]')\n get clearVisitedRouteStackMobile(): boolean {\n /**\n * When `clearVisitedRouteStackMobile` is false AND this is the first route visited,\n * contextManager will add the root item for the route to the visitedRoutesStack. In this\n * particular case, this will be the base \"Video\" page. When the \"Video\" page is in the\n * backstack, pressing the back button will cause the user to go back to the base video page.\n * On mobile, this is sort of confusing because they actually came from the native\n * settings page.\n *\n * When `clearVisitedRouteStackMobile` is true, the contextManager will dump the entire\n * visitedRoutesStack during the transition, avoiding the above problem.\n *\n * However, we want to make sure that we avoid that behavior when we've visited other routes\n * before this one, as that could mess up the backward navigation.\n */\n return !(this.contextManager.visitedRoutesStack?.length > 0);\n }\n}\n","import addHours from \"../addHours/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name eachHourOfInterval\n * @category Interval Helpers\n * @summary Return the array of hours within the specified time interval.\n *\n * @description\n * Return the array of hours within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of hours from the hour of the interval start to the hour of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each hour between 6 October 2014, 12:00 and 6 October 2014, 15:00\n * const result = eachHourOfInterval({\n * start: new Date(2014, 9, 6, 12),\n * end: new Date(2014, 9, 6, 15)\n * })\n * //=> [\n * // Mon Oct 06 2014 12:00:00,\n * // Mon Oct 06 2014 13:00:00,\n * // Mon Oct 06 2014 14:00:00,\n * // Mon Oct 06 2014 15:00:00\n * // ]\n */\nexport default function eachHourOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var startTime = startDate.getTime();\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setMinutes(0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate = addHours(currentDate, step);\n }\n\n return dates;\n}","import startOfHour from \"../startOfHour/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour (and same day)?\n *\n * @description\n * Are the given dates in the same hour (and same day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour (and same day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 5 September 06:00:00 in the same hour?\n * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 5, 6, 0))\n * //=> false\n */\n\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfHour = startOfHour(dirtyDateLeft);\n var dateRightStartOfHour = startOfHour(dirtyDateRight);\n return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime();\n}","import { cached, tracked } from '@glimmer/tracking';\nimport { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Color } from 'customer-site/components/highcharts/simple-chart/index';\nimport { Animal, Human, Vehicle, Unknown } from 'customer-site/enums/ClassificationCategoryType';\nimport ContainerObject from 'customer-site/utils/container-object';\nimport { eachDayOfInterval, eachHourOfInterval, isSameHour, isSameDay } from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type AggregatedVideoEventsSummaryModel from 'customer-site/models/video/aggregated-video-events-summary';\nimport type BaseCamera from 'customer-site/models/video/devices/base-camera';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type { Interval } from 'date-fns';\nimport type { SeriesLineOptions, SeriesColumnOptions } from 'highcharts';\n\nexport function localToZonedTime(date: Date, { timeZone }: { timeZone: string | undefined }) {\n const systemTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n return utcToZonedTime(zonedTimeToUtc(date, systemTimezone), timeZone ?? '');\n}\n\n/**\n * An object that combines two dates to represent the time interval.\n */\nexport type DateInterval = {\n start: Exclude;\n end: Exclude;\n};\n\n/**\n * The length of time associated with each point in the series.\n */\nexport enum TimePeriod {\n HOUR,\n DAY\n}\n\ntype FormattedSeriesLineOptions = Required> &\n Pick;\ntype FormattedSeriesColumnOptions = Required> &\n Pick;\n\n/**\n * The formatted series options for a Line or Column chart.\n *\n * @see https://api.highcharts.com/highcharts/series.line\n * @see https://api.highcharts.com/highcharts/series.column\n */\nexport type FormattedSeries = FormattedSeriesLineOptions | FormattedSeriesColumnOptions;\n\n/**\n * Base implementation for classes which can format AggregatedVideoEventsSummaryModels into `series` compatible with\n * the Highcharts charting library.\n *\n * @see https://www.highcharts.com/docs/chart-concepts/series\n */\nexport abstract class SeriesFormatter extends ContainerObject {\n @service declare intl: ADCIntlService;\n @service declare identityManager: IdentityManager;\n\n @tracked protected dateRange: DateInterval;\n @tracked protected pointInterval: TimePeriod;\n @tracked protected allEventsSummaries: AggregatedVideoEventsSummaryModel[];\n\n constructor(\n context: unknown,\n dateRange: DateInterval,\n pointInterval: TimePeriod,\n allEventsSummaries: AggregatedVideoEventsSummaryModel[]\n ) {\n super(context);\n\n this.dateRange = dateRange;\n this.pointInterval = pointInterval;\n this.allEventsSummaries = allEventsSummaries;\n }\n\n /**\n * Gets a `Date` object for each of the points (as defined by in `pointInterval`) in the `dateRange`.\n */\n @cached public get dates(): Date[] {\n return this.eachDateInInterval(this.dateRange);\n }\n\n /**\n * Gets a series compatible with Highcharts.\n *\n * @see https://www.highcharts.com/docs/chart-concepts/series\n */\n public abstract get eventCountsByTrigger(): { total: number; trigger: string | BaseCamera }[];\n\n /**\n * Gets the total event counts grouped by date sorted from greatest to least.\n */\n public get eventCountsByDate(): { total: number; date: Date }[] {\n const { summariesByDate } = this,\n totals: { total: number; date: Date }[] = [];\n\n summariesByDate.forEach((summariesOnDate) => {\n // There will be no summaries if \"last 24 hours\" is selected.\n if (summariesOnDate[0]) {\n totals.push({\n total: this.totalEventsFromSummaries(summariesOnDate),\n date: localToZonedTime(summariesOnDate[0].eventDate, {\n timeZone: this.identityManager.getTimezone()\n })\n });\n }\n });\n\n totals.sort((a, b) => b.total - a.total);\n\n return totals;\n }\n\n /**\n * Gets the chart series.\n */\n public abstract get series(): FormattedSeries[];\n\n /**\n * Gets the function to use to divide up the `dateRange` into individual points.\n */\n protected get eachDateInInterval(): (interval: Interval, options?: { step?: number }) => Date[] {\n return this.pointInterval === TimePeriod.HOUR ? eachHourOfInterval : eachDayOfInterval;\n }\n\n /**\n * Gets the function to use to determine if an event happened during a given date point.\n */\n protected get isSameTime(): (a: Date | number, b: Date | number) => boolean {\n return this.pointInterval === TimePeriod.HOUR ? isSameHour : isSameDay;\n }\n\n /**\n * Series comparator function, useful when calling `sort` on a SeriesOptions array where each individual series has\n * (required) numerical x,y data (formatted as [x, y]).\n *\n * This sorts highest data count to lowest data count.\n *\n * @param a The first element for comparison.\n * @param b The second element for comparison.\n * @returns number\n */\n protected seriesCompareFn(a: { data: number[] }, b: { data: number[] }): number {\n const sum = (s: { data: number[] }) =>\n s.data.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n\n return sum(b) - sum(a);\n }\n\n /**\n * Gets an array, indexable by `this.dates`, where each element represents the set of all summaries that occurred\n * in that given date-time slice.\n */\n protected get summariesByDate(): AggregatedVideoEventsSummaryModel[][] {\n const { allEventsSummaries, dates, isSameTime } = this;\n\n return dates.map((date) =>\n allEventsSummaries.filter((summary) =>\n isSameTime(date, localToZonedTime(summary.eventDate, { timeZone: this.identityManager.getTimezone() }))\n )\n );\n }\n\n /**\n * Calculates the total number of events that occurred across an array of AggregatedVideoEventsSummaryModels.\n *\n * @param summaries The array of AggregatedVideoEventsSummaryModels.\n */\n protected totalEventsFromSummaries(summaries: AggregatedVideoEventsSummaryModel[]): number {\n return summaries\n .map((event) => event.eventCount)\n .reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n }\n}\n\n/**\n * SeriesFormatter which can calculate a Highcharts series describing the number of clips that each camera on the\n * account triggered over a given time period.\n */\nexport class ClipUsageByDateSeriesFormatter extends SeriesFormatter {\n /**\n * Gets series data describing number of events in a given time interval for all of the cameras on the account\n * sorted from \"most\" to \"least\" events across the entire time interval.\n *\n * @note The top 5 cameras are shown individually, and the rest of the cameras are rolled up into a single group.\n */\n @cached public get series(): FormattedSeries[] {\n const { allCamerasByDateSeries } = this,\n filteredSeries = allCamerasByDateSeries.slice(0, 5),\n seriesToSummarize = allCamerasByDateSeries.slice(5),\n numCamerasInOtherGroup = seriesToSummarize.length;\n\n if (numCamerasInOtherGroup) {\n const otherSeriesData = seriesToSummarize.reduce((accumulator: Array, currentValue) => {\n currentValue.data?.forEach(\n (datum: number, i: number) =>\n // Note: all of these arrays should have this.dates length\n (accumulator[i] += datum)\n );\n\n return accumulator;\n }, new Array(this.dates.length).fill(0));\n\n filteredSeries.push({\n custom: {\n camerasInGroup: numCamerasInOtherGroup\n },\n data: otherSeriesData,\n name:\n numCamerasInOtherGroup > 1\n ? this.intl.t('video.clips-usage-report.remainingCameras')\n : seriesToSummarize[0].name\n });\n }\n\n return filteredSeries;\n }\n\n /**\n * Gets the total events counts grouped by the triggering camera sorted from greatest to least.\n */\n public get eventCountsByTrigger(): { total: number; trigger: BaseCamera }[] {\n const { summariesByDate } = this,\n summariesByCameras = summariesByDate.flat().mapBy('camera').uniqBy('id');\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error camera is async, so tye code above should be awaiting the camera before using it.\n return summariesByCameras\n .map((camera) => {\n const total = this.totalEventsFromSummaries(\n summariesByDate.flat().filter((summary) => get(summary.camera, 'id') === get(camera, 'id'))\n );\n\n return {\n total,\n trigger: camera\n };\n })\n .sort((a, b) => b.total - a.total);\n }\n\n /**\n * Gets series data describing number of events in a given time interval for all of the cameras on the account\n * sorted from \"most\" to \"least\" events across the entire time interval.\n */\n private get allCamerasByDateSeries(): FormattedSeries[] {\n const { allEventsSummaries, summariesByDate } = this,\n cameras = allEventsSummaries.mapBy('camera').uniqBy('id');\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error camera is async, so tye code above should be awaiting the camera before using it.\n return cameras\n .map((camera) => {\n return {\n data: summariesByDate.map((summariesOnDate) => {\n const summariesForCameraOnDate =\n summariesOnDate.filter((summary) => get(summary.camera, 'id') === get(camera, 'id')) ?? [];\n\n return this.totalEventsFromSummaries(summariesForCameraOnDate);\n }),\n name: get(camera, 'description')\n };\n })\n .sort(this.seriesCompareFn);\n }\n}\n\n/**\n * Calculates a Highcharts series which describes the number of clips that were uploaded on an account over a given\n * time period grouped by Video Analytics Classification type.\n */\nexport class ClassifiedUploadsSeriesFormatter extends SeriesFormatter {\n @service declare intl: ADCIntlService;\n\n /**\n * Whether we should include statistics for non-video analytics clip uploads.\n */\n private showNonVAStatistics: boolean;\n\n constructor(\n context: unknown,\n dateRange: DateInterval,\n pointInterval: TimePeriod,\n rawData: AggregatedVideoEventsSummaryModel[],\n showNonVAStatistics = true\n ) {\n super(context, dateRange, pointInterval, rawData);\n\n this.showNonVAStatistics = showNonVAStatistics;\n }\n\n /**\n * The classification types that we want to include in our series.\n */\n protected get supportedTypes(): (number | null)[] {\n const supportedClassifications: (number | null)[] = [Human, Animal, Vehicle, Unknown];\n\n if (this.showNonVAStatistics) {\n // Null represents non-video analytics clip uploads\n supportedClassifications.push(null);\n }\n\n return supportedClassifications;\n }\n\n /**\n * Gets series data describing number of classified events in a given time interval for a given rule on the account\n * sorted from \"most\" to \"least\" events across the entire time interval.\n */\n @cached public get series(): FormattedSeries[] {\n const {\n classificationColors,\n classificationLabels,\n classificationLegendIndex,\n summariesByDate,\n supportedTypes\n } = this;\n\n return supportedTypes\n .map((ovType) => {\n return {\n colorIndex: classificationColors.get(ovType),\n data: summariesByDate.map((summariesOnDate) => {\n const summariesForCameraOnDate =\n summariesOnDate.filter((summary) => summary.ovClassificationType === ovType) ?? [];\n\n return this.totalEventsFromSummaries(summariesForCameraOnDate);\n }),\n legendIndex: classificationLegendIndex.get(ovType),\n name: classificationLabels.get(ovType) ?? ''\n };\n })\n .sort(this.seriesCompareFn);\n }\n\n /**\n * Gets the total events counts grouped by classification sorted from greatest to least.\n */\n public get eventCountsByTrigger(): { total: number; trigger: string }[] {\n const { summariesByDate } = this,\n summariesByOvType = summariesByDate.flat().mapBy('ovClassificationType');\n\n return summariesByOvType\n .map((ovType) => {\n const total = this.totalEventsFromSummaries(\n summariesByDate.flat().filter((summary) => summary.ovClassificationType === ovType)\n );\n\n return {\n total,\n trigger: this.classificationLabels.get(ovType)!\n };\n })\n .sort((a, b) => b.total - a.total);\n }\n\n /**\n * Gets the mapping from Classification Type to Highcharts colorIndex.\n *\n * @see https://api.highcharts.com/highcharts/plotOptions.series.colorIndex\n */\n private get classificationColors(): Map {\n return new Map([\n [Human, Color.AccentOrange],\n [Animal, Color.AccentLime],\n [Vehicle, Color.AccentGreenCyan],\n [Unknown, Color.Gray80],\n [null, Color.AccentBlue]\n ]);\n }\n\n /**\n * Gets the mapping from Classification Type to label for the chart legend.\n */\n private get classificationLabels(): Map {\n return new Map([\n [Animal, this.intl.t('generic.video.objectDetection.animal')],\n [Human, this.intl.t('generic.video.objectDetection.person')],\n [Vehicle, this.intl.t('generic.video.objectDetection.vehicle')],\n [Unknown, this.intl.t('generic.video.objectDetection.other')],\n [null, this.intl.t('generic.video.nonVideoAnalytics')]\n ]);\n }\n\n /**\n * Gets the mapping from Classification Type to sequential index for the chart legend.\n *\n * @see https://api.highcharts.com/highcharts/series.line.legendIndex\n * @see https://api.highcharts.com/highcharts/series.bar.legendIndex\n */\n private get classificationLegendIndex(): Map {\n return new Map([\n [Human, 0],\n [Vehicle, 1],\n [Animal, 2],\n [Unknown, 3],\n [null, 4]\n ]);\n }\n}\n","import EmberController from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport { InstallTutorialVideoVdb750 } from 'customer-site/enums/WizardUrl';\n\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\n/**\n * Consts for strings in this file.\n */\nconst FrenchLanguageCode = 'fr';\n\n/**\n * @classdesc\n * The Controller for Replace Overview Video page\n */\nexport default class BaseInstallOverviewController extends EmberController {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n\n /**\n * Is the account language French?\n */\n @computed('identityManager.identityModel.profile.locale.language')\n get isAccountLanguageFrench(): boolean {\n return this.identityManager.identityModel?.profile.locale.language === FrenchLanguageCode;\n }\n\n /**\n * Action to transition back to the mobile app upon clicking the Close button.\n */\n @action\n transitionBackToMobileApp(): void {\n this.contextManager.transitionBackToMobileApp(true);\n }\n\n /**\n * Action to transition to the VDB750 installation wizard.\n * Allows us to pass in a return URL enum\n */\n @action\n transitionToVDB750Wizard(returnUrlEnum: number): void {\n this.contextManager.transitionToWizard(InstallTutorialVideoVdb750, '', {}, returnUrlEnum);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/install-overview': BaseInstallOverviewController;\n }\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\nimport { VideoAddNewDevice } from 'customer-site/enums/CustomerPageUrl';\nimport { getQueryParam } from '@adc/app-infrastructure/routes/base-route';\n\n/**\n * The base route for the install overview routes.\n */\nexport default abstract class BaseInstallOverviewRoute extends AdcBaseRoute {\n queryParams = {\n shouldKeepWebviewOpen: getQueryParam('boolean')\n };\n\n /** @override */\n redirect() {\n const { shouldKeepWebviewOpen } = this.paramsFor(this.routeName) as { shouldKeepWebviewOpen: boolean };\n\n // Hack for wizard navigation to close the webview, because native bridge isn't available\n // If we navigate to our install subpages from the install overview route, we don't close the webview\n // If we navigate to our install subpages from any other route (i.e install wizard), we need to close the webview\n if (!shouldKeepWebviewOpen) {\n this.contextManager.clearVisitedRoutesStack();\n this.contextManager.transitionBackToMobileAppOrPreviousRoute(VideoAddNewDevice, true);\n }\n return;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { logMissingAbstractMember } from '@adc/ember-utils/utils/debug';\nimport EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { AutoView } from '../../components/video/video-streaming/video-streaming-features/index';\n\n/**\n * @classdesc\n * Base controller for live view pages.\n */\nexport default class BaseLiveViewController extends EmberController {\n /**\n * Query params for live view page.\n */\n queryParams = ['cameraGroupId', 'cameraId', 'relay', 'allowMic', 'maxZoomOutLevel'];\n\n /**\n * The ID of the camera group being viewed.\n */\n cameraGroupId?: number;\n\n /**\n * The ID of the camera/s to show on the page. This is either a globaldeviceid or json string (which is an array of globaldeviceid when parsed).\n * todo rename this to cameraIds and have this universally be JSON (VID-36824)\n */\n cameraId?: string;\n\n /**\n * The largest value allowed for the max videos per page in auto view\n */\n maxZoomOutLevel = 25;\n\n /**\n * The current layout type.\n */\n layoutType = AutoView;\n\n /**\n * What is the maximum allowed videos per page while using auto-view. This number can change while using the auto-view zoom feature.\n * This value will get set to autoViewMaxVideosPerPageLimit inside of the init\n */\n maxVideosPerPageAutoView = undefined;\n\n /**\n * Should we force the page to only connect through proxy or end-to-end?\n * A value of 1 forces proxy; a value of 0 forces end-to-end.\n */\n relay?: string;\n\n /**\n * Should we force this live stream to use OESP streaming?\n * This is only relevant for cameras that support both WebRTC and OESP streaming.\n *\n * @note If there is a value for this query param, we consider this to be true.\n * @note Temporary for VID-41514.\n */\n forceOesp: number | string | null = null;\n\n /**\n * Do we want to allow advanced WebRTC troubleshooting features to appear?\n * Specifically, if WebRTC fails due to an ICE negotiation failure, do we want to give users\n * the option to request microphone permissions to fix this issue?\n * Otherwise, ICE failures will look like generic failed to connect messages.\n *\n * @note If there is a value for this query param, we consider this to be true.\n * @note This is parsed as true in the live-video component if allowMic is a truthy value.\n * @note See VID-29847 for full context.\n */\n allowMic: number | string | null = null;\n\n /**\n * Are we on a visual verification or Remote Video Monitoring page?\n */\n isOperatorSite = false;\n\n /**\n * Has there been a recent operator event?\n * This time window depends on the CentralStationLiveViewDuration dealer parameter.\n *\n * Note:\n * This is only used for the Operator Site (Visual Verification or Remote Video Monitoring). For Visual Verification the\n * \"operator event\" we check for is an alarm, and for Remote Video Monitoring Console the operator event is an escalated event.\n *\n * @type {boolean}\n */\n @tracked systemHasRecentOperatorEvent = false;\n\n /**\n * Should this page use HD streams?\n */\n @tracked useHdStream = false;\n\n /**\n * Route ID for edit group page.\n *\n * @abstract\n */\n @computed()\n get editGroupRouteId(): number | undefined {\n logMissingAbstractMember(this, '\"editGroupRouteId\" property');\n return undefined;\n }\n\n /**\n * Route ID for manage groups page.\n *\n * @abstract\n */\n @computed()\n get manageGroupsRouteId(): number | undefined {\n logMissingAbstractMember(this, '\"manageGroupsRouteId\" property');\n return undefined;\n }\n}\n","import { timeout } from 'ember-concurrency';\nimport { COOKIE_MAX_VIDEOS_PER_PAGE_AUTO_VIEW, getCookieForPage } from 'customer-site/utils/video/cookies';\nimport { getForcedStreamingMethod } from 'customer-site/utils/video/streaming';\nimport VideoStreamingFeaturesRoute from 'customer-site/video/video-streaming-features-route';\nimport { GET } from '@adc/ajax/services/adc-ajax';\nimport { sentryWithScopeAndError } from '@adc/app-infrastructure/utils/sentry';\nimport { reportClippyMessageToWavefront, WaveFrontClippyMessage } from '@adc/video-player/utils/wavefront';\nimport { Video } from '../../enums/LocationDataType';\nimport { Highest } from '../../enums/Resolution';\n\nimport type Transition from '@ember/routing/transition';\nimport type ForcedStreamingMethodEnum from 'customer-site/enums/ForcedStreamingMethod';\nimport type Location from 'customer-site/models/enterprise/locations/location';\nimport type CameraGroup from 'customer-site/models/video/camera-group';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type DewarpConfig from 'customer-site/models/video/dewarp-config';\nimport type OnvifPtzPreset from 'customer-site/models/video/onvif-ptz-preset';\nimport type VideoStreamingPermissionsCollection from 'customer-site/models/video/permissions/video-streaming-permissions-collection';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type BaseLiveViewController from './controller';\n\nexport interface BaseLiveViewModel {\n cameraGroups: CameraGroup[];\n cameras: ADCAsyncStoreQuery;\n cannotDoBrowserUploadsForOperatorSite?: Promise;\n dewarpConfigs: ADCAsyncStoreFindAll;\n forcedStreamingMethodFromQueryParam: ForcedStreamingMethodEnum;\n groupResolution: Promise;\n locationCameraGroupInfos: ADCAsyncStoreQuery | [];\n videoStreamingPermissions: ADCAsyncStoreFindRecord;\n onvifPtzPresets: ADCAsyncStoreFindAll;\n}\n\ninterface BaseLiveViewRouteParams {\n allowMic?: string;\n cameraGroupId?: string;\n cameraId?: string;\n forceOesp?: string;\n maxZoomOutLevel?: number;\n relay?: string;\n}\n\nexport type ResolvedBaseLiveViewModel = {\n cameraGroups: CameraGroup[];\n cameras: Camera[];\n cannotDoBrowserUploadsForOperatorSite?: boolean;\n forcedStreamingMethodFromQueryParam: ForcedStreamingMethodEnum;\n groupResolution: number;\n locationCameraGroupInfos: Location[] | [];\n videoStreamingPermissions: VideoStreamingPermissionsCollection[];\n};\n\n/**\n * The longest we'll wait for VVCLIP's health check or options call before we just load the operator portal without e2e streaming.\n */\nconst OperatorPortalClippyHealthCheckTimeoutMs = 5000;\n\n/**\n * A method that makes a couple of network requests to see if we are blocked from Clippy uploads within the VV/EE portal.\n * First a network call to get the Clippy url, then another network request to check said url.\n */\nfunction checkIfClippyUploadsAreBlocked(\n ajax: AjaxService,\n contextManager: ContextManager,\n healthCheckTimeout: number\n): Promise {\n if (!contextManager.identityModel.isOperatorSite) {\n return Promise.resolve(false);\n }\n\n return (async () => {\n // First, check webapi to get the local Clippy instance to use and a test url for it.\n let clippyCheckUrl = '',\n isClippyUploadingBlocked = await ajax\n .apiRequestForValue(\n 'video/videoSources/liveVideoSources/getClippyTestUrl',\n undefined,\n null,\n GET\n )\n .then((url) => {\n clippyCheckUrl = url;\n return false;\n })\n .catch(() => {\n return true;\n });\n\n if (\n // If for some reason even the initial webapi request fails, we can't confirm if Clippy works so just say it's blocked.\n isClippyUploadingBlocked ||\n // If we have no url to check but the webapi call succeeded (i.e. we don't have e2e permissions), we don't need to check Clippy.\n !clippyCheckUrl\n ) {\n return isClippyUploadingBlocked;\n }\n\n const clippyHealthCheckPromise = ajax\n .request(clippyCheckUrl, undefined, null, GET)\n .then(() => {\n reportClippyMessageToWavefront(ajax, WaveFrontClippyMessage.successOnStart);\n // If it succeeds, we aren't blocked!\n return false;\n })\n .catch((ex) => {\n reportClippyMessageToWavefront(ajax, WaveFrontClippyMessage.failureOnStart);\n\n // If we caught an exception, perhaps it is blocked, maybe the service is down, etc.\n sentryWithScopeAndError(`VV/EE clippy initial GET health check failed: ${ex}`);\n return true;\n }),\n timeoutPromise = timeout(healthCheckTimeout).then(() => true);\n\n // We can't add a timeout to CORS options calls auto sent by the browser, so make our own timeout outside of Ajax's built-in way.\n isClippyUploadingBlocked = await Promise.race([clippyHealthCheckPromise, timeoutPromise]).then(\n (result) => result\n );\n\n return isClippyUploadingBlocked;\n })();\n}\n\n/**\n * @classdesc\n * Base route for live view pages.\n */\nexport default class BaseLiveViewRoute extends VideoStreamingFeaturesRoute {\n /** @override */\n doNotTimeOut = true;\n\n /**\n * Timeout value for the VVCLIP health check within the operator portal.\n */\n operatorPortalClippyHealthCheckTimeout = OperatorPortalClippyHealthCheckTimeoutMs;\n\n /** @override */\n async model(params: BaseLiveViewRouteParams): Promise {\n const { ajax, store, contextManager, operatorPortalClippyHealthCheckTimeout } = this,\n selectedSystemOrGroupId = contextManager.getContextId(),\n cameras = store.query('video/devices/camera', {\n filterByLiveViewDisplayable: true\n });\n const cannotDoBrowserUploadsForOperatorSite = checkIfClippyUploadsAreBlocked(\n ajax,\n contextManager,\n operatorPortalClippyHealthCheckTimeout\n );\n\n const [resolvedCameraGroups, videoStreamingPermissions] = await Promise.all([\n this.getCameraGroups(undefined, cameras),\n store.findRecord('video/permissions/videoStreamingPermissionsCollection', selectedSystemOrGroupId)\n ]);\n\n const dewarpConfigs = this.store.findAll('video/dewarp-config');\n\n return {\n cameraGroups: resolvedCameraGroups,\n cameras,\n dewarpConfigs,\n forcedStreamingMethodFromQueryParam: getForcedStreamingMethod(params.relay, params.forceOesp),\n groupResolution: ajax.apiRequestForValue(\n 'video/videoSources/liveVideoSources/getDefaultResolution',\n undefined,\n null,\n GET\n ),\n videoStreamingPermissions,\n locationCameraGroupInfos: contextManager.isEnterprise\n ? store.query('enterprise/locations/location', {\n locationDataType: Video,\n startIndex: 0,\n searchString: '',\n filterString: '',\n getSimpleModels: true\n })\n : [],\n cannotDoBrowserUploadsForOperatorSite,\n onvifPtzPresets: store.findAll('video/onvif-ptz-preset')\n };\n }\n\n /** @override */\n queryParams = {\n cameraGroupId: { replace: true },\n cameraId: { replace: true },\n forceOesp: { replace: true },\n maxZoomOutLevel: { replace: true }\n };\n\n /** @override */\n async setupController(\n controller: BaseLiveViewController,\n model: BaseLiveViewModel,\n transition: Transition\n ): Promise {\n await super.setupController(controller, model, transition);\n\n const { routeName } = this,\n cookieMaxVideosPerPageAutoView = getCookieForPage.call(\n this,\n routeName,\n COOKIE_MAX_VIDEOS_PER_PAGE_AUTO_VIEW\n );\n\n // intentionally using != instead of !== to catch both null and undefined\n if (cookieMaxVideosPerPageAutoView != null) {\n // Lets make sure maxZoomOutLevel isnt smaller than the cookie's value before we use the cookie's value\n if (!controller.maxZoomOutLevel || controller.maxZoomOutLevel >= Number(cookieMaxVideosPerPageAutoView)) {\n controller.set('maxVideosPerPageAutoView', cookieMaxVideosPerPageAutoView);\n }\n }\n\n model.groupResolution.then((resolution: number) => {\n controller.useHdStream = resolution === Highest;\n });\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { EmberHome } from 'customer-site/enums/CustomerPageUrl';\nimport { EmberOnvifInstallation } from 'customer-site/enums/CustomerPageUrl';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type Transition from '@ember/routing/transition';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n// how long a camera name is allowed to be\nexport const MaxCameraNameLength = 16;\n\n/**\n * This navigates to the first ONVIF installation route.\n */\nexport function restartOnvifInstallation(this: { contextManager: ContextManager }): void {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(EmberOnvifInstallation);\n}\n\ntype QueryParams = {\n forward: boolean;\n external?: boolean;\n};\n\n/**\n * @classdesc\n * The base controller for ONVIF installation section pages.\n */\nexport default abstract class BaseOnvifInstallationController extends Controller {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalsService;\n\n queryParams = ['external'];\n\n /**\n * A query param that's passed in if the user is navigating to this page from MobileTech\n */\n external = false;\n\n /**\n * True if the user is on a touch device, and false otherwise.\n * Translations will use \"tap\" instead of \"click\".\n */\n @reads('contextManager.isTouchDevice')\n declare isTouchDevice: boolean;\n\n abstract nextRouteId: number;\n\n /**\n * Replaces the current route with the next one.\n */\n @action transitionToNextInstallationRoute(): Transition {\n const queryParams: QueryParams = {\n forward: true\n };\n\n // If the \"external\" query param was passed in, lets propogate it to the next route\n if (this.external) {\n queryParams.external = true;\n }\n\n // the forward querystring is added so that we can distinguish this type of transition from other types (such as clicking the back button)\n return this.contextManager.replaceRouteWithNativeRoute(this.nextRouteId, '', queryParams);\n }\n\n /**\n * Action to go back.\n */\n @action goBack(): void {\n this.contextManager.transitionBackToMobileAppOrPreviousRoute(EmberHome, true);\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type ModalsService from '@adc/ui-components/services/modals';\n\n/**\n * @classdesc\n * The base route for ONVIF installation section pages.\n */\nexport default abstract class BaseOnvifInstallationRoute extends AdcBaseRoute {\n @service declare modals: ModalsService;\n}\n","import AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type OnvifInstallNamingController from './controller';\nimport type OnvifInstallNamingEditController from './edit/controller';\nimport type OnvifInstallNamingEditRoute from './edit/route';\nimport type OnvifInstallNamingIndexController from './index/controller';\nimport type OnvifInstallNamingIndexRoute from './index/route';\n\nexport type OnvifNamingChildController = OnvifInstallNamingIndexController | OnvifInstallNamingEditController;\ntype OnvifNamingChildRoute = OnvifInstallNamingIndexRoute | OnvifInstallNamingEditRoute;\n\nexport type SnapshotInfo = {\n blobUrl?: string;\n errorMessage?: string;\n};\n\n/**\n * @classdesc\n * The Base route for OnvifInstallNaming's child routes.\n */\nexport default class BaseOnvifInstallationNamingRoute extends AdcBaseRoute {\n /** @override */\n setupController(\n controller: OnvifNamingChildController,\n model: ModelFrom,\n transition: Transition\n ): void {\n super.setupController(controller, model, transition);\n\n const parentController = this.controllerFor('video/onvif-install/naming') as OnvifInstallNamingController,\n snapshotDataObjects = parentController?.snapshotDataObjects;\n\n controller.snapshotDataObjects = snapshotDataObjects;\n controller.shouldLoadSnapshots = true;\n }\n\n /** @override */\n resetController(controller: OnvifNamingChildController, isExiting: boolean): void {\n if (isExiting) {\n controller.shouldLoadSnapshots = false;\n }\n }\n}\n","import { getForcedStreamingMethod } from 'customer-site/utils/video/streaming';\nimport BaseVideoAutomationRoute from '../../base-video-automation-route';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\n\ninterface BaseAnalyticsRouteParams {\n relay?: string;\n}\n\n/**\n * @classdesc\n * Base route for analytics sub-routes.\n */\nexport default class BaseAnalyticsRoute extends BaseVideoAutomationRoute {\n /** @override */\n queryParams = {\n relay: { replace: false, refreshModel: false }\n };\n\n /** @override */\n model(): any {\n return this.modelFor('video/rules/analytics');\n }\n\n /** @override */\n async afterModel(model: ModelFrom): Promise {\n const { relay } = this.paramsFor(this.routeName) as BaseAnalyticsRouteParams;\n model.forcedStreamingMethodFromQueryParam = getForcedStreamingMethod(relay, undefined);\n\n super.afterModel(model);\n }\n}\n","import { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isNone } from '@ember/utils';\nimport { EmberOvReadyRuleSelect } from '../../../enums/CustomerPageUrl';\nimport BaseAnalyticsRoute from './base-analytics-route';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { RouteRequirementsValidationResult } from 'customer-site/video/base-video-automation-route';\n\n/**\n * @classdesc\n * Base route used for analytic rule routes that are accessed during editing the rule.\n * It will do validation making sure the given rule model is editable.\n */\nexport default class BaseEditableAnalyticsRoute extends BaseAnalyticsRoute {\n @service declare intl: ADCIntlService;\n\n /** @override */\n skipWhenTransitioningBack = true;\n\n /** @override */\n async validateRouteRequirements(model: ModelFrom): Promise {\n const [ruleType, cameraId] = getObjProperties(model.rule, 'ruleType', 'camera.id');\n\n // Have the camera and rule type NOT been selected yet?\n if (get(model.rule, 'isDestroyed') || isNone(ruleType) || !cameraId) {\n // Redirect.\n return {\n routeId: EmberOvReadyRuleSelect,\n reason: this.intl.t('video.rules.analytics.selectCameraType')\n };\n }\n\n return {};\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:header as |DialogHeader|>\\n \\n \\n\\n <:default>\\n
    \\n
    \\n {{#each this.filters as |filter|}}\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n {{/each}}\\n
    \\n

    {{this.bodyText}}

    \\n {{this.recommendationText}}\\n
    \\n \\n\\n <:footer>\\n
    \\n \\n
    \\n {{#if this.canSaveWithSelectedFilters}}\\n \\n {{/if}}\\n \\n
    \\n
    \\n \\n
    \",{ moduleName: \"customer-site/components/video/rules/rvm-rule-filters-modal/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { Animal, Other } from 'customer-site/enums/SavedClipFilterOption';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport './_style.scss';\n\ninterface RvmRuleFiltersModalSignature {\n Args: {\n model: {\n filters: number[];\n onSave: (buttonAnimation: Promise, evt: PointerEvent, filtersToRemove: number[]) => Promise;\n };\n };\n}\n\n/**\n * Enum to determine the content that should be shown in the modal\n */\nexport enum ModalType {\n Other = 1,\n Animal = 2,\n AnimalAndOther = 3\n}\n\n/**\n * Map of modal type to the title resource\n */\nconst modalTypeTitleKeyMap = {\n [ModalType.Animal]: 'animalRuleTitle',\n [ModalType.Other]: 'otherRuleTitle',\n [ModalType.AnimalAndOther]: 'animalAndOtherTitle'\n};\n\n/**\n * Map of modal type to the body text resource\n */\nconst modalTypeBodyKeyMap = {\n [ModalType.Animal]: 'animalRuleBody',\n [ModalType.Other]: 'otherRuleBody',\n [ModalType.AnimalAndOther]: 'animalAndOtherRuleBody'\n};\n\n/**\n * Map of filter value to icon SVG key for the selection icons\n */\nconst filterIconMap: { [key: number]: string } = {\n [Animal]: 'scenes-pets',\n [Other]: 'other-obj'\n};\n\n@intlPath({ path: 'video/rules/rvm-rule-filters-modal' })\nexport default class RvmRuleFiltersModal extends Component {\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare modals: ServiceRegistry['modals'];\n\n /**\n * The relevant filters that are currently selected.\n */\n @cached\n get filters(): number[] {\n return this.args.model.filters.filter((filter) => filter === Animal || filter === Other);\n }\n\n /**\n * The type of modal that should be displayed based on the selected filters.\n */\n @cached\n get modalType(): ModalType {\n const { filters } = this;\n\n // If both Animal and Other are selected, show the AnimalAndOther modal.\n // The max length of the filters array is 2, and the min length is 1 since either Animal or Other must be selected to see this modal.\n if (filters.length === 2) {\n return ModalType.AnimalAndOther;\n }\n\n return filters[0] === Animal ? ModalType.Animal : ModalType.Other;\n }\n\n /**\n * Is the user able to save with the current selection of filters? Currently only enabled if Animal is enabled but not Other\n */\n @cached\n get canSaveWithSelectedFilters(): boolean {\n return this.modalType === ModalType.Animal;\n }\n\n /**\n * The dynamic title of the modal based on the selected filters.\n */\n @cached\n get title(): string {\n const { intl } = this,\n key = modalTypeTitleKeyMap[this.modalType] ?? '';\n\n if (!key) {\n return '';\n }\n\n return intl.tc(this, key);\n }\n\n /**\n * The dynamic body text of the modal based on the selected filters.\n */\n @cached\n get bodyText(): string {\n const { intl } = this;\n\n const key = modalTypeBodyKeyMap[this.modalType] ?? '';\n if (!key) {\n return '';\n }\n\n return intl.tc(this, key);\n }\n\n /**\n * The dynamic recommendation text of the modal based on the selected filters.\n */\n @cached\n get recommendationText(): string {\n const { intl } = this,\n key = this.modalType === ModalType.Animal ? 'animalRuleRecommendation' : 'otherRuleRecommendation';\n\n return intl.tc(this, key);\n }\n\n /**\n * The dynamic primary button text of the modal based on the selected filters.\n */\n @cached\n get primaryButtonText(): string {\n const { intl } = this,\n key = this.filters.length > 1 ? 'removeBothAndSave' : 'removeAndSave';\n\n return intl.tc(this, key);\n }\n\n /**\n * Is the rule currently being saved?\n */\n @tracked isSaving = false;\n\n /**\n * Get the SVG icon key for the provided filter value\n */\n @action getIcon(filter: number): string {\n return filterIconMap[filter] ?? '';\n }\n\n /**\n * Save the current selection of filters an save the rule. This is only enabled if the user has selected Animal but not Other.\n */\n @action keepAndSave(buttonAnimation: Promise, evt: PointerEvent): Promise {\n return this.args.model.onSave(this.handleSaveState(buttonAnimation), evt, []);\n }\n\n /**\n * Remove the current selection of filters and save the rule.\n */\n @action removeAndSave(buttonAnimation: Promise, evt: PointerEvent): Promise {\n return this.args.model.onSave(this.handleSaveState(buttonAnimation), evt, this.filters);\n }\n\n /**\n * Handle the state of the saving process. Disble the action buttons while saving is in progress so the other option can't be selected.\n */\n handleSaveState(promise: Promise) {\n this.isSaving = true;\n return promise.then((result) => {\n this.isSaving = false;\n return result;\n });\n }\n\n /**\n * Close the modal.\n */\n @action closeModal() {\n this.modals.closeModal();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Video::Rules::RvmRuleFiltersModal': typeof RvmRuleFiltersModal;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { MINUTES_IN_DAY } from '@adc/ember-utils/constants/time';\nimport { areArraysSame } from '@adc/ember-utils/utils/array';\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { getDayScheduleDuration } from '@adc/ember-utils/utils/date-time';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport Controller from '@ember/controller';\nimport { action, computed, setProperties, set, get } from '@ember/object';\nimport { alias, and, equal, not, or, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { isEmpty, isPresent } from '@ember/utils';\nimport { ValueFilter, CompositeFilter } from 'customer-site/classes/video/rules/classification-filter';\nimport { Drawing } from 'customer-site/components/video/rules/draw-window';\nimport RvmRuleFiltersModal from 'customer-site/components/video/rules/rvm-rule-filters-modal/index';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\nimport { Line, CustomShape } from 'customer-site/enums/DrawShape';\nimport { PackageDeliveryAlert } from 'customer-site/enums/EventType';\nimport {\n ArmedAway,\n ArmedStay,\n Disarmed,\n PresenceStateAway,\n PresenceStateHome,\n PresenceStateSleep\n} from 'customer-site/enums/RecordingException';\nimport { ThirdPartyEventType } from 'customer-site/enums/ThirdPartyEventType';\nimport {\n AnalyticsRulesPushNotificationsTooltipHover,\n AnalyticsRulesSetMinimumDelayBetweenClipsTooltipViewed\n} from 'customer-site/enums/TrackedEvent';\nimport OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\nimport ThirdPartyAnalyticsCamera from 'customer-site/models/video/devices/third-party-analytics-camera';\nimport OvRule from 'customer-site/models/video/ov-rule';\nimport ThirdPartyAnalyticsRule from 'customer-site/models/video/third-party-analytics-rule';\nimport { reverseSliderValue } from 'customer-site/utils/slider';\nimport { isPackageDetectionEvent } from 'customer-site/utils/video/general';\nimport { createDictionaryOfDrawingsFromRule } from 'customer-site/utils/video/rule';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport DropdownSelectItem, { UNSELECTED, SELECTED } from '@adc/ui-components/utils/dropdown-select-item';\nimport DataUsageModeEnum from '@adc/video-player/enums/DataUsageModeEnum';\nimport {\n EmberOvReadyRuleSettings,\n EmberVideoClipFeedback,\n EmberOvReadyRuleSelect,\n EmberVideoRules\n} from '../../../../enums/CustomerPageUrl';\nimport { GroundZone, PersonDetection, ThirdPartyAnalytics } from '../../../../enums/OvlRuleType';\nimport {\n Person,\n Animal,\n Vehicle,\n Other,\n DeliveryVehicle,\n AnyUnfamiliarVehicle,\n SpecificFamiliarVehicle,\n Package\n} from '../../../../enums/SavedClipFilterOption';\nimport { TextOnly, AttachThumbnail, AttachVideoClip } from '../../../../enums/VideoNotificationFormat';\nimport { arePointsNormalized } from '../../../../utils/analytics-shape-validation';\nimport { getDefaultAnalyticsShapePoints } from '../../../../utils/canvas';\nimport { EVERY_DAY_BITS, NUM_SECONDS_IN_MINUTE } from '../../../../utils/datetime';\nimport { NUM_MILLISECONDS_IN_HOUR } from '../../../../utils/datetime';\n\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { ClassificationFilter } from 'customer-site/classes/video/rules/classification-filter';\nimport type { PackageRetrievalAlert } from 'customer-site/enums/EventType';\nimport type Light from 'customer-site/models/devices/light';\nimport type PartitionModel from 'customer-site/models/devices/partition';\nimport type GeoFence from 'customer-site/models/geolocation/fence';\nimport type GeoDevice from 'customer-site/models/geolocation/geo-device';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type BaseAnalyticsRule from 'customer-site/models/video/base-analytics-rule';\nimport type BaseAnalyticsCamera from 'customer-site/models/video/devices/base-analytics-camera';\nimport type FamiliarTargetEnrollmentCluster from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-cluster';\nimport type TouchlessRingRule from 'customer-site/models/video/touchless-ring-rule';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type { DictionaryOfDrawings } from 'customer-site/utils/video/rule';\nimport type { ForceEndToEndQueryParamValue, ForceProxyQueryParamValue } from 'customer-site/utils/video/streaming';\nimport type { ContactData } from '../route';\nimport type AnalyticsRoute from '../route';\nimport type DrawBaseRoute from './draw-base-route';\n\ntype NotificationGroup = {\n type: ContactTypeEnum;\n text: string;\n disabled: boolean;\n items: {\n contact: ContactAddress;\n isSelected: boolean;\n previewTypes: DropdownSelectItem[];\n description: string;\n isReadOnlyPreviewType: boolean;\n }[];\n};\n\ntype FilterArray = Array<\n [typeof Person | typeof Vehicle | typeof DeliveryVehicle | typeof Animal | typeof Other, string, string]\n>;\n\ntype DoorbellFilterArray = Array<\n [typeof Person | typeof PackageDeliveryAlert | typeof PackageRetrievalAlert, string, string, string | undefined]\n>;\n\nconst MAX_MOBILE_BROWSER_WIDTH_PIXELS = 1024,\n NO_FILTERING_OR_DELAY = 0,\n FILTERING_OR_DELAY = 1;\n\n/**\n * Contains an array of OvlRuleTypeEnums that allow the user to draw an AOI.\n */\nconst AOI_ELIGIBLE_RULES = [GroundZone, PersonDetection];\n\n/**\n * Contains an array of OvlRuleTypeEnums that allow the duration dropdown for AOI.\n */\nconst AOI_DURATION_ELIGIBLE_RULES = [GroundZone];\n\n/**\n * Contains an array of OvlRuleTypeEnums that should use the entire FOV by default.\n */\nconst AOI_FULL_FOV_ELIGIBLE_RULES = [PersonDetection];\n\n/**\n * Maximum value for the sensitivity slider.\n */\nconst MAX_SENSITIVITY_SLIDER_VALUE = 4;\n\n/**\n * The shortest and longest that a vacation schedule is allowed to be.\n */\nconst MIN_VACATION_HOURS = 12,\n MAX_VACATION_DAYS = 90;\n\n/**\n * This is a helper function to get a resource using the absolute path to video.rules.analytics.draw.\n */\nfunction getLocalizedResource(\n this: DrawBaseController,\n resourceKey: string,\n args: Record | undefined = undefined\n): string {\n return this.intl.t(`video.rules.analytics.draw.${resourceKey}`, args);\n}\n\n/**\n * The notification group to update.\n *\n * @param group The notification group to update.\n */\nfunction updateNotifications(this: DrawBaseController, group: NotificationGroup): void {\n // Compute property name to store on rule.\n const namePotentials: Record = {\n [ContactTypeEnum.Mobile]: 'mobile',\n [ContactTypeEnum.Email]: 'email',\n [ContactTypeEnum.IPhonePush]: 'pushDevice',\n [ContactTypeEnum.MonitoringStation]: 'monitoringStation'\n };\n\n const name = namePotentials[group.type];\n\n // Lock rule if monitoring station contact is selected.\n if (group.type === ContactTypeEnum.MonitoringStation && group.items[0].isSelected) {\n this.isDealerLocked = true;\n }\n\n // Update rule.\n this.set(\n `model.rule.${name}Recipients`,\n group.items.filterBy('isSelected').reduce((map, item) => {\n const previewType = item.previewTypes.findBy('state');\n return {\n ...map,\n // If we created a new MonitoringStation contact address, it won't have an id.\n [item.contact.id || 0]: previewType ? parseInt(previewType.value, 10) : -1\n };\n }, {})\n );\n}\n\n/**\n * Deselect all other Familiar Vehicle filters if the All Vehicles filter is enabled\n */\nfunction deselectOtherFilters(filters: ValueFilter[]): void {\n const selectedFilters = filters.filterBy('state') ?? [];\n if (selectedFilters.findBy('value', Vehicle)) {\n filters\n .filter((e) => e.value !== Vehicle)\n .forEach((f) => {\n f.isSelected = false;\n });\n }\n}\n\n/**\n * Deselect the All Vehicles filter when other filter is selected. Selects the All Vehicles filter if everything else is selected.\n */\nfunction makeAllVehiclesSelectionAdjustments(filters: ValueFilter[]): void {\n const selectedFilterLength = filters.filter((item) => item.isSelected && item.value !== Vehicle).length;\n\n // If all selections other than the ALL VEHICLES selection are selected, lets only select the ALL VEHICLES selection\n if (selectedFilterLength === filters.length - 1) {\n filters.forEach((filter) => {\n filter.isSelected = filter.value === Vehicle;\n });\n\n return;\n }\n\n // deselect ALL VEHICLES selection\n const vehicleFilter = filters.find((filter) => filter.value === Vehicle);\n if (vehicleFilter) {\n vehicleFilter.isSelected = false;\n }\n}\n\n/**\n * Return ValueFilters for the given list familiar vehicle subjects\n *\n * @param selectedFilters list selected classification filter values\n * @param subjects All possible familiar vehicle subjects\n * @param subjectFilters List of selected subject filters from the rule\n */\nfunction getFamiliarVehicleClassificationValues(\n this: DrawBaseController,\n selectedFilters: number[],\n subjects: FamiliarTargetEnrollmentCluster[],\n subjectFilters: string[]\n): ValueFilter[] {\n return [\n new ValueFilter({\n value: Vehicle,\n label: getLocalizedResource.call(this, 'allVehicles'),\n isSelected: selectedFilters.includes(Vehicle),\n disabled: !this.canEditRule,\n onItemChange: (filters) => deselectOtherFilters(filters)\n }),\n new ValueFilter({\n value: AnyUnfamiliarVehicle,\n label: getLocalizedResource.call(this, 'allUnknownVehicles'),\n isSelected: !selectedFilters.includes(Vehicle) && selectedFilters.includes(AnyUnfamiliarVehicle),\n disabled: !this.canEditRule,\n onItemChange: (filters) => makeAllVehiclesSelectionAdjustments(filters)\n }),\n ...subjects.map(\n (s) =>\n new ValueFilter({\n value: SpecificFamiliarVehicle,\n label: s.description,\n isSelected: !selectedFilters.includes(Vehicle) && subjectFilters.includes(s.id),\n disabled: !this.canEditRule,\n subjectId: s.id,\n onItemChange: (filters) => makeAllVehiclesSelectionAdjustments(filters)\n })\n )\n ];\n}\n\n/**\n * Get the array of Classification Filter objects from the selected filters on the rule\n */\nfunction getAdvancedFilterArray(\n this: DrawBaseController,\n selectedFilters: number[],\n includeAnimalFilter: boolean,\n includeDeliveryVehicle: boolean,\n canHaveFamiliarVehicles: boolean,\n familiarVehicles: FamiliarTargetEnrollmentCluster[],\n familiarVehicleFilters: string[],\n canUseStories: boolean,\n ruleClassificationFilters: number[]\n): Array {\n return getFilterArray(includeAnimalFilter, includeDeliveryVehicle).map(([type, resource, icon]) => {\n const isFamiliarVehicleFilter = canHaveFamiliarVehicles && familiarVehicles.length > 0 && type === Vehicle,\n notIncluded =\n canUseStories && ruleClassificationFilters != undefined && !ruleClassificationFilters.includes(type);\n return isFamiliarVehicleFilter\n ? new CompositeFilter({\n value: type,\n label: getLocalizedResource.call(this, resource),\n icon,\n disabled: !this.canModifyRuleUiElements || notIncluded,\n subItems: getFamiliarVehicleClassificationValues.call(\n this,\n selectedFilters,\n familiarVehicles,\n familiarVehicleFilters\n )\n })\n : new ValueFilter({\n value: type,\n label: getLocalizedResource.call(this, resource),\n icon,\n isSelected: selectedFilters.includes(type) && !notIncluded,\n disabled: !this.canEditRule || notIncluded\n });\n });\n}\n\n/**\n * The filters (Person, Animal, Vehicle, Other) used for the ui.\n *\n * @param includeAnimalFilter If the array should include the animal notification filter.\n * @param includeDeliveryVehicle If the array should include the animal notification filter.\n */\nfunction getFilterArray(includeAnimalFilter: boolean, includeDeliveryVehicle: boolean): FilterArray {\n return [\n [Person, 'person', 'wellness-activity'],\n [Vehicle, 'vehicle', 'car'],\n includeDeliveryVehicle ? [DeliveryVehicle, 'deliveryVehicle', 'truck'] : undefined,\n includeAnimalFilter ? [Animal, 'animal', 'scenes-pets'] : undefined,\n [Other, 'other', 'other-obj']\n ].filter((f) => f != undefined) as FilterArray;\n}\n\n/**\n * The filters (Person, Package Delivery, Package Retrieval) used for doorbell analytics.\n * Package delivery/retrieval are restricted to 770 with the PackageAlertsDelivery or PackageAlertsRetrieval permissions.\n * The person detection filter should always be selected and disabled.\n *\n * @param selectedFilters Selected classification filters for the selected rule.\n * @param supportedParcelEvents Package alerts the selected camera supports. Numbers correspond to EventTypeEnum values.\n * @returns Array of classification filters that the customer can set.\n */\nfunction getAdvancedDoorbellFilterArray(\n this: DrawBaseController,\n selectedFilters: number[],\n supportedParcelEvents: number[]\n): ValueFilter[] {\n return getDoorbellFilterArray(supportedParcelEvents).map(([type, resource, icon, tooltipResource]) => {\n const isPersonWithoutParcelEvents = type === Person && !supportedParcelEvents.length,\n isSelected = selectedFilters.includes(type) || isPersonWithoutParcelEvents,\n disabled = !this.canEditRule || isPersonWithoutParcelEvents;\n return new ValueFilter({\n value: type,\n label: getLocalizedResource.call(this, resource),\n icon,\n isSelected,\n disabled,\n tooltip: tooltipResource ? getLocalizedResource.call(this, tooltipResource) : undefined\n });\n });\n}\n\n/**\n * The filters used for the ui.\n *\n * @param supportedParcelEvents Package alerts the selected camera supports. Numbers correspond to EventTypeEnum values.\n * @returns Array of values that correspond to the filter's value, the resource name for the filter, the filter's icon,\n * then the optional resource name for an icon tooltip.\n */\nfunction getDoorbellFilterArray(supportedParcelEvents: number[]): DoorbellFilterArray {\n return [\n [Person, 'person', 'va-person', undefined],\n ...supportedParcelEvents.map((eventType) => {\n return [\n eventType,\n eventType === PackageDeliveryAlert ? 'packageDeliveryDescription' : 'packageRetrievalDescription',\n eventType === PackageDeliveryAlert ? 'package-delivery' : 'package-retrieval',\n eventType === PackageDeliveryAlert ? 'packageDeliveryTooltip' : 'packageRetrievalTooltip'\n ];\n })\n ].filter((item) => item != undefined) as DoorbellFilterArray;\n}\n\n/**\n * Checks if the current browser is mobile sized.\n */\nfunction checkMobileBrowserSize(this: DrawBaseController): void {\n // Determines whether the current browser is mobile/tablet sized.\n set(this, 'isMobileBrowserSize', document.body.clientWidth <= MAX_MOBILE_BROWSER_WIDTH_PIXELS);\n}\n\n/**\n * Checks if the given rule type supports sending clip notifications.\n *\n * @param ruleType The rule type chosen for this analytics rule.\n */\nfunction doesRuleTypeSupportClipNotifications(ruleType: number): boolean {\n switch (ruleType) {\n // Clip notifications were disabled for PersonDetection rules in VID-31001.\n // They will be reinstated in VID-32179.\n case PersonDetection:\n return false;\n default:\n return true;\n }\n}\n\n/**\n * Creates list of minimum delay values in seconds.\n */\nfunction getMinimumDelays(this: DrawBaseController): DropdownSelectItem[] {\n return [30, 60, 120, 180, 240, 300, 600, 900].map((value) => {\n // Based on number of seconds, produce a different text.\n let key, tokens;\n\n if (value === 1) {\n key = 'none';\n } else if (value < 60) {\n key = 'seconds';\n tokens = { num: value };\n } else {\n key = 'minutes';\n tokens = { num: value / 60 };\n }\n\n return DropdownSelectItem.create({\n value: value.toString(),\n name: this.intl.t(`generic.${key}`, tokens)\n });\n });\n}\n\n/**\n * Controller for drawing the window and selecting settings for OV Ready rules.\n */\nexport default class DrawBaseController extends Controller {\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare dom: ServiceRegistry['dom'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare intl: ServiceRegistry['intl'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare stats: ServiceRegistry['stats'];\n @service declare store: ServiceRegistry['store'];\n\n /**\n * The mobile contact type enum (used in the template for checking group type).\n */\n mobileContactType = ContactTypeEnum.Mobile;\n\n /**\n * The monitoring station contact type enum (used in the template for checking group type).\n */\n monitoringStationContactType = ContactTypeEnum.MonitoringStation;\n\n /**\n * The knowledge base link for notification types (push, text, email).\n */\n notificationTypesKnowledgeBaseLink = CustomerKnowledgeBase.PushAndTextNotificationsDifferences;\n\n /**\n * The tracked event ID for the user hovering over the push notifications helper tooltip\n *\n * @readonly\n */\n pushNotificationsTooltipHoverEventId = AnalyticsRulesPushNotificationsTooltipHover;\n\n /**\n * The tracked event ID for the user clicking the push notifications helper tooltip\n *\n * @readonly\n */\n minimumDelayTooltipHoverEventId = AnalyticsRulesSetMinimumDelayBetweenClipsTooltipViewed;\n\n /**\n * Should we force the page to only connect through proxy or end-to-end?\n * A value of '1' forces proxy; a value of '0' forces end-to-end.\n */\n relay?: typeof ForceEndToEndQueryParamValue | typeof ForceProxyQueryParamValue;\n\n /**\n * Have we recently saved this rule?\n */\n recentlySaved = false;\n\n /**\n * Bind resizing of notification options to window resize.\n *\n * @override\n */\n constructor(...args: any) {\n super(...args);\n\n // Determine whether initial browser is mobile/tablet sized.\n checkMobileBrowserSize.call(this);\n }\n\n /**\n * Computed value to determine if the user has selected a type that can draw an AOI.\n */\n @computed('model.rule.ruleType')\n get doesRuleTypeAllowAOI(): boolean {\n return AOI_ELIGIBLE_RULES.includes(get(this.model.rule, 'ruleType'));\n }\n\n /**\n * Determine which shape we're drawing in the DrawWindow.\n */\n @computed('doesRuleTypeAllowAOI')\n get shapeOfDrawing(): number {\n return this.doesRuleTypeAllowAOI ? CustomShape : Line;\n }\n\n /**\n * Does the user have knowledge base permissions?\n */\n @alias('contextManager.identityModel.canViewKnowledgeBase')\n declare hasKnowledgeBasePermissions: boolean;\n\n /**\n * Whether the user has permission to edit this rule.\n */\n @reads('model.permissions.hasAnalyticsEditPermission')\n declare hasAnalyticsEditPermission: boolean;\n\n /**\n * Whether the user can edit dealer locked rules.\n * If the rule is locked and the user doesn't have permission to edit it,\n * they can still toggle whether the rule is active.\n */\n @reads('model.permissions.canEditLockedRules')\n declare canEditLockedRules: boolean;\n\n /**\n * Whether the user can edit Remote Video Monitoring rules.\n * Note that in order to make any EE edits, they'll also need to edit locked rules.\n */\n @reads('model.permissions.canEditEscalatedEventRules')\n declare canEditEscalatedEventRules: boolean;\n\n /**\n * Whether the customer can set extended ground zone loiter options.\n */\n @reads('model.permissions.canSetExtendedLoiterOptions')\n declare canSetExtendedLoiterOptions: boolean;\n\n /**\n * Whether the user can toggle whether a rule is locked.\n */\n @computed('canEditLockedRules', 'isEscalatedEvent')\n get canToggleRuleIsLocked(): boolean {\n return this.canEditLockedRules && !this.isEscalatedEvent;\n }\n\n /**\n * Whether the vacation watch feature toggle is enabled for this user.\n */\n @reads('model.permissions.canUseVacationWatch')\n declare canUseVacationWatch: boolean;\n\n /**\n * Whether the video event notification can be sent to panel.\n */\n @reads('model.rule.camera.supportsVideoPanelNotification')\n declare canSendPanelNotification: boolean;\n\n /**\n * Whether the current rule has panel notification enabled.\n */\n @reads('model.rule.hasPanelNotification')\n declare hasPanelNotification: boolean;\n\n /**\n * Representing the video notification format to the panel.\n * Value taken from VideoNotificationFormat enum.\n */\n @tracked panelNotificationFormat?: number;\n\n /**\n * Panel name for panel notification.\n */\n @reads('model.rule.camera.panelName')\n declare panelName: string;\n\n /**\n * Whether animal events have been excluded for the customer.\n */\n @reads('model.permissions.areAnimalEventsExcluded')\n declare areAnimalEventsExcluded: boolean;\n\n /**\n * Whether delivery vehicle events are included for the customer.\n */\n @reads('model.permissions.isDeliveryVehicleIncluded')\n declare isDeliveryVehicleIncluded: boolean;\n\n /**\n * Whether the customer's MMS notifications are disabled.\n */\n @reads('model.permissions.disableMMSVideoNotifications')\n declare disableMMSVideoNotifications: boolean;\n\n /**\n * Whether the customer can use AI Perimeter Guard with Image Processing.\n */\n @reads('model.permissions.hasAiDeterrenceFeatureToggle')\n declare hasAiDeterrenceFeatureToggle: boolean;\n\n /**\n * Can the customer access the AI Deterrence configuration?\n */\n @reads('model.permissions.canAccessAiDeterrenceResponseConfiguration')\n declare canAccessAiDeterrenceResponseConfiguration: boolean;\n\n /**\n * Can the user access the randomized messages checkbox during AI Deterrence rule creation?\n */\n @reads('model.permissions.canAccessAiDeterrenceRandomizedMessages')\n declare canAccessAiDeterrenceRandomizedMessages: boolean;\n\n /**\n * Can the user access the language settings dropdown during AI Deterrence rule creation?\n */\n @reads('model.permissions.canAccessAiDeterrenceLanguageConfiguration')\n declare canAccessAiDeterrenceLanguageConfiguration: boolean;\n\n /**\n * Can the user access the AI Deterrence Free-Text UI during rule creation?\n */\n @reads('model.permissions.canAccessAiDeterrenceFreeTextEntry')\n declare canAccessAiDeterrenceFreeTextEntry: boolean;\n\n /**\n * Whether the customer has the AIDeterrenceServicePackage\n */\n @reads('model.permissions.hasAiDeterrenceServicePlan')\n declare hasAiDeterrenceServicePlan: boolean;\n\n /**\n * Whether the customer has the two-way audio add-on (Audio for Non-doorbell cameras)\n * and they have accepted either the V1 or V2 audio agreement.\n */\n @reads('model.permissions.hasTwoWayAudioAddOnAndAcceptedAudioAgreement')\n declare hasTwoWayAudioAddOnAndAcceptedAudioAgreement: boolean;\n\n /**\n * What cameras on this account have AI Deterrence enabled?\n */\n @reads('model.permissions.camerasWithAiDeterrence')\n declare camerasWithAiDeterrence: number[];\n\n /**\n * How many AI Deterrence cameras is the user allowed to have on their account?\n */\n @reads('model.permissions.aiDeterrenceMaxCameraQuota')\n declare aiDeterrenceMaxCameraQuota: number;\n\n /**\n * Whether the customer should see the SMS warning message.\n */\n @reads('model.permissions.canShowSMSWarning')\n declare canShowSMSWarning: boolean;\n\n /**\n * If the user has camera arming access\n */\n @reads('model.permissions.hasCameraArmingAccess')\n declare hasCameraArmingAccess: boolean;\n\n /**\n * Whether Stories features should be used for this rule.\n */\n @and('identityManager.identityModel.hasStoriesAccess', 'model.rule.camera.supportsStories')\n declare canUseStories: boolean;\n\n /**\n * Whether this rule has been locked by the dealer.\n * This value is initially loaded from model.rule.isDealerLocked in the route.\n */\n @tracked\n declare isDealerLocked: boolean;\n\n /**\n * Whether this rule has a monitoring station recipient selected.\n */\n @computed('model.rule.monitoringStationRecipients')\n get isEscalatedEvent(): boolean {\n const { monitoringStationRecipients } = this.model.rule;\n\n return !!monitoringStationRecipients && Object.keys(this.model.rule.monitoringStationRecipients).length > 0;\n }\n\n /**\n * Whether this rule can be an Remote Video Monitoring rule.\n */\n @reads('model.rule.camera.canCreateEscalatedEventRule')\n declare canCreateEscalatedEventRule: boolean;\n\n /**\n * Whether the user can edit the analytics rule.\n */\n @computed(\n 'canEditEscalatedEventRules',\n 'canEditLockedRules',\n 'hasAnalyticsEditPermission',\n 'isDealerLocked',\n 'isEscalatedEvent'\n )\n get canEditRule(): boolean {\n return (\n this.hasAnalyticsEditPermission &&\n (!this.isDealerLocked || this.canEditLockedRules) &&\n (!this.isEscalatedEvent || this.canEditEscalatedEventRules)\n );\n }\n\n /**\n * Whether the user can interact with elements for troubleshooting.\n * Usually passed to dropdown components, but also to components that gate dropdowns.\n */\n @or('canEditRule', 'identityManager.isLoginAsLoginRep')\n declare canModifyRuleUiElements: boolean;\n\n /**\n * The drawing associated with the analytics rule indexed at 0 within a dictionary.\n */\n @computed('model.rule.{points,direction,duration}')\n get dictionaryWithRuleDrawing(): DictionaryOfDrawings {\n if (!(this.model.rule instanceof OvRule)) {\n return { 0: new Drawing() };\n }\n return createDictionaryOfDrawingsFromRule(this.model.rule);\n }\n\n /**\n * A message to contact the service provider.\n */\n @reads('contextManager.identityModel.dealer.contactServiceProviderMessage')\n declare contactServiceProviderMessage: string;\n\n /**\n * The message that displays when a user cannot edit some or all fields on a rule.\n * This will either display info about not having permissions to edit, or that the rule is locked.\n */\n @computed(\n 'canEditEscalatedEventRules',\n 'canEditLockedRules',\n 'contactServiceProviderMessage',\n 'hasAnalyticsEditPermission',\n 'isDealerLocked',\n 'isEscalatedEvent',\n 'canCreateEscalatedEventRule'\n )\n get cannotEditRuleMessage(): string | null {\n if (\n (this.isDealerLocked && !this.canEditLockedRules) ||\n (this.isEscalatedEvent && !this.canEditEscalatedEventRules)\n ) {\n const ruleHasBeenLockedMessage = this.intl.t('generic.rules.ruleHasBeenLockedByServiceProvider'),\n { contactServiceProviderMessage } = this;\n\n return ruleHasBeenLockedMessage + ' ' + contactServiceProviderMessage;\n }\n\n if (!this.hasAnalyticsEditPermission) {\n return this.intl.t('generic.rules.cannotConfigureRule');\n }\n\n if (this.canEditEscalatedEventRules && !this.canCreateEscalatedEventRule) {\n return getLocalizedResource.call(this, 'cannotCreateEscalatedEventRule');\n }\n\n return null;\n }\n\n /**\n * Tracked model\n */\n @tracked model: ResolvedModelFrom & ResolvedModelFrom = this.model;\n\n /**\n * Whether the \"Advanced filtering\" dropdown is visible. Checks that rule has person detection selected.\n */\n get canViewNoonlightVerifyDropdown(): boolean {\n return (\n !!this.model.rule.showNoonlightVerify &&\n (this.model.rule.notificationFilters.includes(Person) ||\n (Array.isArray(this.analyticTriggers) &&\n this.analyticTriggers.includes(ThirdPartyEventType.AnalyticPersonDetected)))\n );\n }\n\n /**\n * Whether the \"Dialer delay\" dropdown is visible. Checks that NL verify is not selected.\n */\n get canViewDialerDelayDropdown(): boolean {\n return !!this.model.rule.showDialerDelay && !(this.model.rule.noonlightVerifyType == FILTERING_OR_DELAY);\n }\n\n /**\n * Whether the \"Rule is Locked\" toggle is visible.\n */\n @or('isDealerLocked', 'canEditLockedRules')\n declare canViewLockToggle: boolean;\n\n /**\n * Whether the \"Rule Is Active\" toggle is disabled.\n */\n @computed('model.videoUsage.isOverUploadQuota', 'hasAnalyticsEditPermission')\n get disableRuleIsActiveToggle(): boolean {\n return this.model.videoUsage.isOverUploadQuota || !this.hasAnalyticsEditPermission;\n }\n\n /**\n * The maximum value for the sensitivity slider.\n */\n maxSensitivitySliderValue = MAX_SENSITIVITY_SLIDER_VALUE;\n\n /**\n * Determines whether the browser's size is mobile.\n */\n isMobileBrowserSize = false;\n\n /**\n * Is the browser a mobile user agent?\n */\n isMobileBrowser = isMobileBrowser();\n\n /**\n * The previous value for the exceptions. Set by setupController.\n */\n previousExceptions: number[] = [];\n\n /**\n * The previous value for the Exit Delay. Set by setupController.\n */\n previousExitDelay = 0;\n\n /**\n * The previous value for the selected geo devices. Set by setupController.\n */\n previousGeoDevices: string[] = [];\n\n /**\n * The previous value for the selected geo fence. Set by setupController.\n */\n previousGeofence = -1;\n\n /**\n * Should we display the warning text that changes may take 60 seconds to apply?\n * (due to the caching of VideoRecordingExceptionRules)\n */\n @computed(\n 'model.rule.{exceptions,exitDelay,geoDevicesForException,geoFenceForException}',\n 'previousExceptions',\n 'previousExitDelay',\n 'previousGeoDevices',\n 'previousGeofence'\n )\n get showExceptionsChangedWarning(): boolean {\n const { model, previousExitDelay, previousGeofence, previousExceptions, previousGeoDevices } = this,\n { rule } = model,\n exceptions = rule.exceptions ?? [],\n geoDevices = rule.geoDevicesForException ?? [];\n return (\n rule.exitDelay != previousExitDelay ||\n exceptions.length != previousExceptions.length ||\n geoDevices.length != previousGeoDevices.length ||\n (rule.geoFenceForException != previousGeofence && geoDevices.length > 0) ||\n !areArraysSame(exceptions.sort(), previousExceptions.sort()) ||\n !areArraysSame(geoDevices.sort(), previousGeoDevices.sort())\n );\n }\n\n /**\n * Selection of minimum delays between clips.\n */\n get ovRuleMinimumDelays(): DropdownSelectItem[] {\n return getMinimumDelays.call(this);\n }\n\n /**\n * Selection of minimum delays between siren rule activations.\n */\n get perimeterGuardConfigMinimumDelays(): DropdownSelectItem[] {\n return getMinimumDelays.call(this);\n }\n\n /**\n * Which third party analytic triggers the rule is configured to trigger on.\n */\n @alias('model.rule.thirdPartyEventTypes')\n declare analyticTriggers: number[];\n\n /**\n * The original analytic triggers for the rule before they are modified.\n * This variable is set in the setupController hook in the route.\n */\n originalAnalyticTriggers: number[] | null = null;\n\n /**\n * Which third party analytic triggers the rule is configured to trigger on for light rules.\n */\n @alias('model.rule.thirdPartyLightRuleTriggers')\n declare thirdPartySelectedLightRuleTriggers: number[];\n\n /**\n * This property is set in draw-base-route::setupController.\n */\n declare camera: BaseAnalyticsCamera;\n\n /**\n * The URL for the 3PC's internal page. This property is set in draw-base-route::setupController.\n */\n declare cameraLinkUrl: string;\n\n /**\n * Creates list of SupportedEventTypes dropdown items.\n */\n get thirdPartySupportedEvents(): DropdownSelectItem[] {\n if (\n !(this.model.rule instanceof ThirdPartyAnalyticsRule) ||\n !(this.camera instanceof ThirdPartyAnalyticsCamera)\n ) {\n return [];\n }\n\n const { availableEventTypes, supportedEventTypes } = this.camera,\n { thirdPartyEventTypes } = this.model.rule;\n\n return Object.entries(supportedEventTypes).map(([key, value]) => {\n const triggerIsAvailable =\n availableEventTypes.includes(parseInt(key)) || this.originalAnalyticTriggers?.includes(parseInt(key));\n\n return DropdownSelectItem.create({\n value: key,\n name: triggerIsAvailable\n ? value\n : getLocalizedResource.call(this, 'disabledTriggerText', { event: value }),\n state: thirdPartyEventTypes?.includes(parseInt(key)) ? SELECTED : UNSELECTED,\n // We disable the option if the event is used by another rule, and not configured on this rule (if we are editing)\n disabled: !triggerIsAvailable\n });\n });\n }\n\n /**\n * Creates a list of available third party analytic triggers for light rules.\n *\n * @return {DropdownSelectItem[]}\n */\n get thirdPartyLightRuleSupportedEvents(): DropdownSelectItem[] {\n if (!(this.camera instanceof ThirdPartyAnalyticsCamera)) {\n return [];\n }\n\n const { supportedEventTypes } = this.camera;\n\n return Object.entries(supportedEventTypes)\n .filter(([key]) => this.analyticTriggers?.includes(Number(key)))\n .map(([key, value]) => {\n return DropdownSelectItem.create({\n value: key,\n name: value,\n state: this.thirdPartySelectedLightRuleTriggers?.includes(parseInt(key)) ? SELECTED : UNSELECTED,\n disabled: !this.canEditRule\n });\n });\n }\n\n /**\n * Controls whether or not the notifications collapsible section is expanded.\n * The initial value is set by if any recipients are selected for the rule.\n */\n @tracked\n showNotifications = false;\n\n /**\n * The header text for the notifications area.\n */\n @computed('supportsAdditionalRuleFeatures')\n get notificationHeader(): string {\n return getLocalizedResource.call(\n this,\n this.supportsAdditionalRuleFeatures ? 'notifyRecipientsAndAlerts' : 'notifyRecipients'\n );\n }\n\n /**\n * Contact IDs for mobile contacts with preview types moved MMS to SMS.\n * These contacts should display the preview types dropdown, but the clip and thumbnail options should be disabled.\n */\n @tracked\n showMMSDisabledContacts: string[] = [];\n\n /**\n * Converts a video notification format to a translated preview type string.\n * @param previewType VideoNotificationFormatEnum value for a selected contact.\n * @returns Translated string for the video notification's preview type.\n */\n getPreviewTypeTranslated(previewType: number): string {\n const resourceKey =\n {\n [TextOnly]: 'textPreview',\n [AttachThumbnail]: 'thumbnailPreview',\n [AttachVideoClip]: 'videoPreview'\n }[previewType] ?? '';\n\n return getLocalizedResource.call(this, resourceKey);\n }\n\n /**\n * The collection of notification types to display.\n */\n @computed(\n 'canCreateEscalatedEventRule',\n 'canEditEscalatedEventRules',\n 'canEditLockedRules',\n 'canUseStories',\n 'disableMMSVideoNotifications',\n 'model.contacts.isLoaded',\n 'model.rule.{isClipUploadActive,ruleType}',\n 'showMMSDisabledContacts',\n 'showNotifications',\n 'systemConfig.hasMonitoringStationContactReadPermissions'\n )\n get notificationGroups(): NotificationGroup[] | null {\n const {\n model,\n canCreateEscalatedEventRule,\n canEditEscalatedEventRules,\n canEditLockedRules,\n canEditRule,\n canUseStories,\n disableMMSVideoNotifications,\n showMMSDisabledContacts\n } = this,\n { rule } = model,\n contacts: Record | unknown | undefined = model.contacts;\n\n if (!contacts) {\n return null;\n }\n\n const {\n emailRecipients,\n isClipUploadActive,\n mobileRecipients,\n monitoringStationRecipients,\n pushDeviceRecipients,\n ruleType\n } = rule,\n hasMonitoringStationContactReadPermissions = model.systemConfig.hasMonitoringStationContactReadPermissions,\n groups: [ContactTypeEnum, string, Record | undefined][] = [\n [ContactTypeEnum.IPhonePush, 'push', pushDeviceRecipients],\n [ContactTypeEnum.Email, 'email', emailRecipients]\n ];\n\n // For the V2 page, the Monitoring Station group should be last.\n if (canUseStories) {\n groups.push([ContactTypeEnum.Mobile, 'mobile', mobileRecipients]);\n groups.push([ContactTypeEnum.MonitoringStation, 'monitoringStation', monitoringStationRecipients]);\n } else {\n groups.push([ContactTypeEnum.MonitoringStation, 'monitoringStation', monitoringStationRecipients]);\n groups.push([ContactTypeEnum.Mobile, 'mobile', mobileRecipients]);\n }\n\n return groups\n .map(([type, key, selectedRecipients = {}]) => {\n // Are there NO contacts of this type?\n let items: ContactAddress[] = contacts[type as keyof typeof contacts];\n\n const isMonitoringStation = type === ContactTypeEnum.MonitoringStation,\n hasPermissionToAddMonitoringStationRecipient =\n hasMonitoringStationContactReadPermissions && canEditLockedRules && canEditEscalatedEventRules;\n if (isEmpty(items)) {\n if (isMonitoringStation && hasPermissionToAddMonitoringStationRecipient) {\n items = [this.store.createRecord('users/monitoring-station-address')];\n } else {\n // Don't display this contact type.\n return;\n }\n }\n\n // Hide monitoring station recipient when it's not selected and the user doesn't have permission to select it.\n if (\n isMonitoringStation &&\n items.firstObject &&\n !isPresent(selectedRecipients[Number(items.firstObject.id)]) &&\n !hasPermissionToAddMonitoringStationRecipient\n ) {\n return;\n }\n\n const fnGetPreviewTypes = (\n contact: ContactAddress,\n selectedFormat = type === ContactTypeEnum.Mobile ? TextOnly : AttachThumbnail\n ): DropdownSelectItem[] => {\n // Iterate preview types and convert to items.\n const previewTypes = [\n TextOnly,\n AttachThumbnail,\n type !== ContactTypeEnum.IPhonePush && doesRuleTypeSupportClipNotifications(ruleType)\n ? AttachVideoClip\n : undefined\n ].filter((format: number) => format != undefined) as number[];\n\n return previewTypes.map((format) =>\n DropdownSelectItem.create({\n value: String(format),\n name: this.getPreviewTypeTranslated(format),\n state: format === selectedFormat ? SELECTED : UNSELECTED,\n disabled:\n (disableMMSVideoNotifications &&\n type === ContactTypeEnum.Mobile &&\n selectedFormat === TextOnly &&\n format !== TextOnly &&\n !!showMMSDisabledContacts.find((contactId) => contactId === contact.id)) ||\n (canUseStories && format === AttachVideoClip && !isClipUploadActive)\n })\n );\n };\n\n return {\n type,\n text: getLocalizedResource.call(this, `${key}Title`),\n disabled: !canEditRule || (isMonitoringStation && !canCreateEscalatedEventRule),\n items: items.map((item) => {\n const previewType = selectedRecipients[Number(item.id)],\n isSelected = isPresent(previewType);\n return {\n contact: item,\n isSelected,\n previewTypes: fnGetPreviewTypes(item, previewType),\n description: this.getRecipientDescription(previewType),\n isReadOnlyPreviewType:\n disableMMSVideoNotifications &&\n type === ContactTypeEnum.Mobile &&\n (previewType ?? TextOnly) === TextOnly &&\n !showMMSDisabledContacts?.find((contactId) => contactId === item.id)\n };\n })\n };\n })\n .filter((group): group is NotificationGroup => group != undefined);\n }\n\n /**\n * Return the description text based on the value of the notification format chosen by the recipient.\n */\n getRecipientDescription(selectedFormat = AttachThumbnail): string {\n return getLocalizedResource.call(\n this,\n [TextOnly, AttachThumbnail].includes(selectedFormat)\n ? 'recipientRapidDescription'\n : 'recipientClipDescription'\n );\n }\n\n /**\n * The description text for panel notification.\n */\n get getRecipientDescriptionForPanelNotification(): string {\n return this.getRecipientDescription(this.panelNotificationFormat);\n }\n\n /**\n * Create dropdown select items for preview types.\n */\n @computed('model.rule.panelNotificationFormat')\n get getDropdownSelectItemsForPreviewTypes(): DropdownSelectItem[] {\n if (!(this.model.rule instanceof OvRule)) {\n return [];\n }\n const rule = this.model.rule;\n\n return [TextOnly, AttachThumbnail].compact().map((format) =>\n DropdownSelectItem.create({\n value: String(format),\n name: getLocalizedResource.call(\n this,\n {\n [TextOnly]: 'textPreview',\n [AttachThumbnail]: 'thumbnailPreview'\n }[format] ?? ''\n ),\n state: format === rule.panelNotificationFormat ? SELECTED : UNSELECTED\n })\n );\n }\n\n /**\n * Create dropdown select items for Noonlight verify processing types.\n */\n get getDropdownSelectItemsForNoonlightVerifyTypes(): DropdownSelectItem[] {\n const noonlightVerifyType = this.model.rule.noonlightVerifyType;\n return [\n [NO_FILTERING_OR_DELAY, 'noonlightNoAdvancedFiltering'],\n [FILTERING_OR_DELAY, 'noonlightWithAdvancedFiltering']\n ].map(([value, resource]: [value: number, resource: string]) => {\n return DropdownSelectItem.create({\n value: String(value),\n name: getLocalizedResource.call(this, resource),\n state: value == noonlightVerifyType ? SELECTED : UNSELECTED\n });\n });\n }\n\n /**\n * Create dropdown select items for Dialer delay processing types.\n */\n get getDropdownSelectItemsForDialerDelayTypes(): DropdownSelectItem[] {\n const dialerDelayType = this.model.rule.dialerDelayType;\n return [\n [NO_FILTERING_OR_DELAY, 'dialerDelayNone'],\n [FILTERING_OR_DELAY, 'dialerDelayApply']\n ].map(([value, resource]: [value: number, resource: string]) => {\n return DropdownSelectItem.create({\n value: String(value),\n name: getLocalizedResource.call(this, resource),\n state: value == dialerDelayType ? SELECTED : UNSELECTED\n });\n });\n }\n\n /**\n * Create list of binary input items representing the notification filters for the rule.\n */\n @computed(\n 'model.rule.{notificationFilters,ruleClassificationFilters,camera.supportedNotificationFilterTypes}',\n 'areAnimalEventsExcluded',\n 'isDeliveryVehicleIncluded',\n 'canHaveFamiliarVehicles',\n 'canUseStories'\n )\n get notificationFilterSelection(): ReturnType {\n const { canHaveFamiliarVehicles, canUseStories, isDeliveryVehicleIncluded } = this,\n { rule, familiarVehicles } = this.model,\n includeAnimalFilter = !this.areAnimalEventsExcluded,\n supportedFilters = get(rule, 'camera.supportedNotificationFilterTypes') as number[],\n selectedFilters = get(rule, 'notificationFilters'),\n vehicleNotificationFilters = get(rule, 'vehicleNotificationFilters'),\n ruleClassificationFilters = get(rule, 'ruleClassificationFilters');\n\n return getAdvancedFilterArray\n .call(\n this,\n selectedFilters,\n includeAnimalFilter,\n isDeliveryVehicleIncluded,\n canHaveFamiliarVehicles,\n familiarVehicles,\n vehicleNotificationFilters,\n canUseStories,\n ruleClassificationFilters\n )\n .filter(({ value }) => supportedFilters.includes(value));\n }\n\n /**\n * Create list of input items representing notification filters for the rule.\n * This is a based on notificationFilterSelection, restricted to doorbell features.\n */\n @computed('model.rule.{notificationFilters,activeParcelDetectionEvents,camera.supportedParcelEvents}')\n get doorbellNotificationFilterSelection(): ReturnType {\n const { rule } = this.model,\n selectedFilters = get(rule, 'notificationFilters') as number[],\n selectedParcelEvents = get(rule, 'activeParcelDetectionEvents') as number[],\n supportedParcelFilters = get(rule, 'camera.supportedParcelEvents') as number[];\n\n return getAdvancedDoorbellFilterArray.call(\n this,\n [...selectedFilters, ...selectedParcelEvents],\n supportedParcelFilters\n );\n }\n\n /**\n * Create list of ClassificationFilter items representing the light rule filters for the rule.\n */\n @computed(\n 'areAnimalEventsExcluded',\n 'canHaveFamiliarVehicles',\n 'canUseStories',\n 'familiarVehicles',\n 'isDeliveryVehicleIncluded',\n 'isThirdPartyCamera',\n 'model.rule.{lightRuleFilters,ruleClassificationFilters,camera.supportedLightRuleFilterTypes,vehicleLightRuleFilters}'\n )\n get lightRuleFilters(): ReturnType {\n // Third party cameras use thirdPartyLightRuleSupportedEvents().\n if (this.isThirdPartyCamera) {\n return [];\n }\n\n const { canUseStories, isDeliveryVehicleIncluded } = this,\n { rule, familiarVehicles } = this.model,\n includeAnimalFilter = !this.areAnimalEventsExcluded,\n supportedFilters = get(rule, 'camera.supportedLightRuleFilterTypes') as number[],\n selectedFilters = get(rule, 'lightRuleFilters'),\n ruleClassificationFilters = get(rule, 'ruleClassificationFilters'),\n vehicleLightRuleFilters = get(rule, 'vehicleLightRuleFilters'),\n { canHaveFamiliarVehicles } = this;\n\n return getAdvancedFilterArray\n .call(\n this,\n selectedFilters,\n includeAnimalFilter,\n isDeliveryVehicleIncluded,\n canHaveFamiliarVehicles,\n familiarVehicles,\n vehicleLightRuleFilters,\n canUseStories,\n ruleClassificationFilters\n )\n .filter(({ value }) => supportedFilters.includes(value));\n }\n\n /**\n * Alias for contact push devices.\n */\n @alias('contextManager.identityModel.selectedSystem.geoDevices')\n declare geoDevices: GeoDevice[];\n\n /**\n * All geolocation fences within this system.\n */\n @alias('contextManager.identityModel.selectedSystem.fences')\n declare geoFences: GeoFence[];\n\n /**\n * If true, users can view and interact with clip donation UI as well as donate clips.\n */\n @alias('contextManager.identityModel.canDonateClips')\n declare canDonateClips: boolean;\n\n /**\n * Can this rule have a Familiar Vehicle section?\n */\n @and(\n 'contextManager.identityModel.hasFamiliarObjectEnrollmentBeta',\n 'model.rule.camera.isOptedIntoFamiliarVehicleRecognition'\n )\n declare canHaveFamiliarVehicles: boolean;\n\n /**\n * Bool for if user has light rule permission and lights.\n */\n @computed('model.systemConfig.hasAnalyticsLightRule', 'eligibleLightsForAnalyticsLightRule.length')\n get canViewAnalyticsLightRuleSetup(): boolean {\n const hasAnalyticsLightRule = this.model.systemConfig.hasAnalyticsLightRule;\n const eligibleLightsCount = this.eligibleLightsForAnalyticsLightRule.length;\n return !!hasAnalyticsLightRule && eligibleLightsCount > 0;\n }\n\n /**\n * Create list of lights representing eligibile lights for the analytics light rule.\n */\n @computed('model.lights.{[],isLoaded}', 'model.rule.camera.{supportsLurkerDetection,id,canUseOwnLightInAutomation}')\n get eligibleLightsForAnalyticsLightRule(): Light[] {\n const lights = get(this.model, 'lights')?.toArray() ?? [];\n\n if (!get(this.model.rule, 'camera.supportsLurkerDetection')) {\n return lights;\n }\n\n if (get(this.model.rule, 'camera.canUseOwnLightInAutomation')) {\n return lights;\n }\n\n // We don't have canUseOwnLightInAutomation so remove the camera's light from the list\n const associatedLightId = get(this.model.rule, 'camera.id');\n return lights.filter((light) => light.id !== associatedLightId);\n }\n\n /**\n * Create list of eligible lights with selected values representing lights for the\n * analytics light rule.\n */\n @computed('eligibleLightsForAnalyticsLightRule', 'model.rule.lightsSelected')\n get eligbileLightsWithSelectedValues(): { light: Light; isSelected: boolean }[] {\n const selectedLights = get(this.model.rule, 'lightsSelected') ?? [];\n\n return this.eligibleLightsForAnalyticsLightRule.map((light) => ({\n light,\n isSelected: selectedLights.includes(light)\n }));\n }\n\n /**\n * The current exception values for the rule exception component.\n */\n @computed('model.rule.{exceptions,geoDevicesForException,geoFenceForException}')\n get exceptionValues(): { exceptionStates: number[]; devices: string[]; fenceId: string } {\n const [exceptions, geoDevices = [], geoFence] = getObjProperties(\n this.model.rule,\n 'exceptions',\n 'geoDevicesForException',\n 'geoFenceForException'\n );\n return {\n exceptionStates: exceptions as number[],\n devices: geoDevices as string[],\n fenceId: geoFence.toString()\n };\n }\n\n /**\n * Indicates the panel exceptions are a valid option and should be displayed.\n */\n @alias('contextManager.identityModel.selectedSystem.supportsSecureArming')\n declare showPanelExceptions: boolean;\n\n /**\n * All partitions in this system\n */\n @reads('contextManager.identityModel.selectedSystem.partitions')\n declare partitions: PartitionModel[];\n\n /**\n * Indicates whether we should display the at home exceptions component.\n */\n @computed('showPanelExceptions', 'geoFences', 'geoDevices')\n get showExceptions(): Promise {\n return (async () => {\n const hasFences = isPresent(await this.geoFences),\n hasDevices = isPresent(await this.geoDevices);\n return this.showPanelExceptions || (hasFences && hasDevices);\n })();\n }\n\n /**\n * Indicates whether we should display the \"At all times\" schedule warning for Commercial Video plans.\n */\n @reads('model.systemConfig.hasCommercialVideo')\n declare showActiveWarning: boolean;\n\n /**\n * Does this user have permission to use Property Status?\n */\n @reads('model.systemConfig.hasGlobalPresenceStateVideoPermissions')\n declare hasPresenceState: boolean;\n\n /**\n * Do we have not have permission to view any type of contact type for recipients?\n */\n @not('model.systemConfig.hasContactReadPermissions')\n declare noPermissionsForContacts: boolean;\n\n /**\n * Indicates whether we should display the notification filter types based on how many\n * the camera supports. If it only supports 1, we do not want to show it.\n */\n @computed('model.rule.camera.supportedNotificationFilterTypes')\n get displaySavedClipNotificationFilterTypes(): boolean {\n const supportedNotificationFilterTypes = get(\n this.model.rule,\n 'camera.supportedNotificationFilterTypes'\n ) as number[];\n return supportedNotificationFilterTypes?.length > 1;\n }\n\n /**\n * Is the camera in question for this page a ThirdPartyAnalyticsCamera?\n */\n @computed('camera')\n get isThirdPartyCamera(): boolean {\n return this.camera instanceof ThirdPartyAnalyticsCamera;\n }\n\n /**\n * The resource string for the rule type we are creating.\n */\n @computed('isThirdPartyCamera', 'doesRuleTypeAllowAOI')\n get ruleTypeResource(): string {\n if (this.isThirdPartyCamera) {\n return 'generic.video.videoAnalytics';\n }\n return this.doesRuleTypeAllowAOI ? 'generic.video.groundZone' : 'generic.video.tripwire';\n }\n\n /**\n * If the camera supports setting a duration for activity inside an AOI, then\n * we want to display ground zone text in the template that includes duration. Otherwise display the other\n * resource string that does not contain duration in its text.\n */\n @computed('supportsDurationAreaOfInterest')\n get groundZoneText(): string {\n return getLocalizedResource.call(\n this,\n this.supportsDurationAreaOfInterest ? 'descriptionGroundZone' : 'descriptionGroundZoneNoDuration'\n );\n }\n\n /**\n * Check whether or not the rule type we are using supports setting the duration\n * for an AOI. Right now this only applies to GroundZone rules.\n */\n @computed('model.rule.ruleType')\n get supportsDurationAreaOfInterest(): boolean {\n return AOI_DURATION_ELIGIBLE_RULES.includes(get(this.model.rule, 'ruleType'));\n }\n\n /**\n * Check whether or not the rule type we are using should use the entire FOV\n * as the AOI by default. Right now this only applies to PersonDetection rules.\n */\n @computed('model.rule.ruleType')\n get defaultEntireFieldOfView(): boolean {\n return AOI_FULL_FOV_ELIGIBLE_RULES.includes(get(this.model.rule, 'ruleType'));\n }\n\n /**\n * Whether to display the sensitivity slider.\n */\n @and('model.rule.camera.supportsDetectionSensitivity', 'doesRuleTypeAllowAOI')\n declare displaySensitivitySlider: boolean;\n\n /**\n * Should we display the doorbell notification filters?\n */\n @alias('model.rule.camera.supportsDoorbellNotificationFiltersUI')\n declare displayDoorbellNotificationFilters: boolean;\n\n /**\n * Which parcel events can we show to the user?\n */\n @reads('model.rule.camera.supportedParcelEvents')\n declare parcelEventsToDisplay: number[];\n\n /**\n * Keeps track of the value shown on the slider.\n * This value is initially loaded from model.rule.camera.detectionSensitivity in the route.\n */\n @tracked currentSliderValue?: number;\n\n /**\n * Based on the rule type we are creating, we want to display different text to match that.\n * For now, only person detection rule types uses different text.\n */\n @computed('displayDoorbellNotificationFilters', 'model.rule.ruleType')\n get notificationsFilterText(): string {\n const ruleType = get(this.model.rule, 'ruleType');\n return getLocalizedResource.call(\n this,\n ruleType === PersonDetection\n ? this.displayDoorbellNotificationFilters\n ? 'notificationTriggersHelpText'\n : 'notificationsFilterHelpTextPersonDetection'\n : 'notificationsFilterHelpText'\n );\n }\n\n /**\n * The possible duration options (in seconds) for GroundZone OV Ready rules.\n */\n @computed('canSetExtendedLoiterOptions')\n get groundZoneDurationOptions(): number[] {\n return this.canSetExtendedLoiterOptions\n ? [\n 0.5,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 15,\n 20,\n 30,\n 45,\n 60,\n 90,\n 120,\n 3 * NUM_SECONDS_IN_MINUTE,\n 4 * NUM_SECONDS_IN_MINUTE,\n 5 * NUM_SECONDS_IN_MINUTE,\n 6 * NUM_SECONDS_IN_MINUTE,\n 7 * NUM_SECONDS_IN_MINUTE,\n 8 * NUM_SECONDS_IN_MINUTE,\n 9 * NUM_SECONDS_IN_MINUTE,\n 10 * NUM_SECONDS_IN_MINUTE\n ]\n : [0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 30, 45, 60, 90, 120];\n }\n\n /**\n * Should the camera sound dropdown be enabled?\n */\n @and('model.rule.perimeterGuardConfig.audioEnabled', 'cameraSoundOptions.length', 'canEditPerimeterGuardSound')\n declare enableCameraSoundDropdown: boolean;\n\n // region touchlessRingRule\n\n /**\n * The touchless ring rule associated with this OV rule.\n */\n @alias('model.rule.touchlessRingRule')\n declare touchlessRingRule: TouchlessRingRule;\n\n /**\n * The drawing associated with the touchless ring rule indexed at 0 within a dictionary.\n */\n @computed('touchlessRingRule')\n get dictionaryWithTouchlessRingRuleDrawing(): ReturnType {\n return createDictionaryOfDrawingsFromRule(this.touchlessRingRule);\n }\n\n /**\n * Should we display the touchless ring rule section?\n */\n @alias('model.rule.camera.supportsTouchlessRingRule')\n declare displayTouchlessRingRuleSection: boolean;\n\n /**\n * Is the touchless ring rule's toggle enabled or not?\n */\n @alias('model.isTouchlessRingEnabled')\n declare touchlessRingRuleIsEnabled: boolean;\n\n /**\n * The possible duration options for touchless ring rules.\n */\n get touchlessRingDurationOptions(): number[] {\n return [0.5, 1, 2, 3, 4, 5];\n }\n\n /**\n * Whether a touchless ring rule can modify its points and duration.\n */\n @equal('model.rule.camera.maxNumberOfOvRules', 1)\n declare canCustomizeTouchlessRingRule: boolean;\n\n /**\n * Whether to display Groundzone/Duration Inside area of interest option.\n */\n @and('canCustomizeTouchlessRingRule', 'touchlessRingRuleIsEnabled')\n declare areTouchlessRingRuleOptionsVisible: boolean;\n\n // endregion\n\n /**\n * Does this user have access to additional rule features (i.e., Perimeter Guard)?\n */\n @alias('model.rule.camera.supportsLurkerDetection')\n declare supportsAdditionalRuleFeatures: boolean;\n\n /**\n * Track if Perimeter Guard rule is enabled.\n */\n @reads('model.rule.perimeterGuardConfig.enabled')\n declare perimeterGuardEnabled: boolean;\n\n /**\n * Does this camera support subschedules for Perimeter Guard?\n */\n @alias('model.rule.camera.supportsPerimeterGuardSubSchedule')\n declare supportsPerimeterGuardSubSchedule: boolean;\n\n /**\n * Used to track whether the recording rule schedule component is custom or not.\n */\n @tracked scheduleIsCustom = false;\n\n /**\n * Used to track whether the Perimeter Guard schedule component is custom or not.\n */\n @tracked perimeterGuardSubScheduleIsCustom = false;\n\n /**\n * Whether the user has entered an invalid schedule (i.e. vacation is too long or too short).\n */\n @tracked invalidSchedule = false;\n\n /**\n * Notification explaining why the vacation schedule is invalid, if it is.\n */\n vacationDatesInvalidNotification?: AppNotification | null = null;\n\n /**\n * The mobile notification group recipients.\n */\n @computed('notificationGroups')\n get mobileNotificationGroup(): NotificationGroup | null {\n const mobileGroup = this.notificationGroups?.filter((group) => group.type === ContactTypeEnum.Mobile);\n return mobileGroup?.length ? mobileGroup[0] : null;\n }\n\n /**\n * The selected recipients of the mobile notification group.\n */\n @computed('mobileNotificationGroup.items.@each.isSelected')\n get selectedMobileNotificationGroupItems(): NotificationGroup['items'] | undefined {\n return this.mobileNotificationGroup?.items.filter((item) => item.isSelected);\n }\n\n /**\n * The preview type objects of the selected mobile recipients.\n */\n @computed('selectedMobileNotificationGroupItems')\n get selectedMobilePreviewTypes(): DropdownSelectItem[] {\n const previewTypeList: DropdownSelectItem[] = [];\n this.selectedMobileNotificationGroupItems?.forEach((item) => {\n item.previewTypes.forEach((type) => {\n previewTypeList.push(type);\n });\n });\n return previewTypeList;\n }\n\n /**\n * Should we display the text only warning for the mobile notification group?\n * We should show this only if all recipients have Text Only selected.\n */\n @computed('selectedMobilePreviewTypes.@each.{state,value}', 'selectedMobileNotificationGroupItems.length')\n get shouldDisplayMobileTextOnlyWarning(): boolean {\n const selectedTextOnlyList = this.selectedMobilePreviewTypes?.filter(\n (type) => Number(type.value) === TextOnly && type.state === SELECTED\n );\n return selectedTextOnlyList.length === this.selectedMobileNotificationGroupItems?.length;\n }\n\n /**\n * Should we display the mobile warning message? Only display if at least one recipient is selected.\n * Knowledge base permission will only affect if the link shows.\n */\n @computed('selectedMobileNotificationGroupItems.length', 'canShowSMSWarning')\n get shouldDisplayMobileWarningMessage(): boolean {\n return !!this.selectedMobileNotificationGroupItems?.length && this.canShowSMSWarning;\n }\n\n /**\n * The warning message text to display.\n */\n @computed('shouldDisplayMobileTextOnlyWarning')\n get mobileWarningMessageText(): string {\n const resourceKey = this.shouldDisplayMobileTextOnlyWarning\n ? 'mobileTextOnlyWarning'\n : 'mobileThumbnailOrClipWarning';\n\n return getLocalizedResource.call(this, resourceKey);\n }\n\n /**\n * Should we display a message letting the user know the camera associated with this EE rule has warning sounds disabled?\n */\n @computed('isEscalatedEvent', 'model.rule.camera.{supportsSiren,isWarningReactionEnabled}')\n get shouldDisplayDisabledWarningSoundMessage(): boolean {\n return (\n this.isEscalatedEvent &&\n !!get(this.model.rule, 'camera.supportsSiren') &&\n !get(this.model.rule, 'camera.isWarningReactionEnabled')\n );\n }\n\n /**\n * If the user has permission, show the Exit Delay dropdown if they have one of the supported exceptions selected.\n */\n @computed('model.{permissions.canUseExitDelay,rule.exceptions}')\n get showExitDelay(): boolean {\n if (!this.model.permissions.canUseExitDelay) {\n return false;\n }\n\n const supportedExceptions = [Disarmed, ArmedStay, PresenceStateHome, PresenceStateSleep],\n notSupportedExceptions = [ArmedAway, PresenceStateAway];\n let [hasSupportedException, hasNotSupportedException] = [false, false];\n this.model.rule.exceptions.forEach((e) => {\n if (notSupportedExceptions.includes(e)) {\n hasNotSupportedException = true;\n return;\n } else if (supportedExceptions.includes(e)) {\n hasSupportedException = true;\n }\n });\n return hasNotSupportedException ? false : hasSupportedException;\n }\n\n /**\n * Calls the method changing the date picker type whenever the page is resized.\n */\n @action\n addWindowResizeListener(): void {\n // Add a listener for resizing the notification options on window resize (for mobile/tablet view on desktop).\n this.dom.addListener(this, window, 'resize', checkMobileBrowserSize.bind(this));\n }\n\n /**\n * Updates the current third party event selection on the rule.\n */\n @action\n updateThirdPartyEventSelection(values: DropdownSelectItem[]): void {\n this.analyticTriggers = values\n .filter((v) => v.isFullySelected)\n .map((v) => parseInt(v.value))\n .toArray();\n\n // If the user de-selected a filter, remove it from the light rule selected filters.\n this.thirdPartySelectedLightRuleTriggers = this.thirdPartySelectedLightRuleTriggers?.filter((f) =>\n this.analyticTriggers?.includes(f)\n );\n }\n\n /**\n * Saves the current state of the rule.\n *\n * @param buttonAnimation Async button animation promise\n * @param _ Pointer event for the initiating button. Currently unused, but required for positional arguments\n * @param ignoreRvmWarnings Should RVM filter warnings be ignored?\n */\n @action\n async save(\n buttonAnimation: Promise,\n _: PointerEvent,\n ignoreRvmWarnings = false\n ): Promise {\n const {\n contextManager,\n modals,\n notificationManager,\n recentlySaved,\n touchlessRingRule,\n touchlessRingRuleIsEnabled\n } = this,\n { rule, videoUsage, newestClipDonationAgreementVersion } = this.model,\n [ruleWasLocked, ruleIsNew, ruleType] = getObjProperties(rule, 'isDealerLocked', 'isNew', 'ruleType'),\n camera = await rule.camera,\n cameraId = camera.id,\n supportsStories = camera.supportsStories,\n [isOverUploadQuota, uploadQuota] = getObjProperties(videoUsage, 'isOverUploadQuota', 'uploadQuota');\n\n let autoDonate: boolean | undefined,\n hasLoginSeenAutoDonatePrompt: boolean | undefined,\n hasAcceptedClipDonationAgreement: boolean | undefined,\n acceptedClipDonationAgreementVersion: number | null | undefined,\n ruleClassificationFilters: number[] | undefined;\n\n if (camera instanceof OvReadyCamera && rule instanceof OvRule) {\n const ovRule = rule;\n autoDonate = camera.autoDonate;\n hasLoginSeenAutoDonatePrompt = camera.hasLoginSeenAutoDonatePrompt;\n hasAcceptedClipDonationAgreement = camera.hasAcceptedClipDonationAgreement;\n acceptedClipDonationAgreementVersion = camera.acceptedClipDonationAgreementVersion;\n ruleClassificationFilters = ovRule.ruleClassificationFilters;\n }\n\n const completeShapeText = getLocalizedResource.call(this, 'completeShape'),\n normalizePointsText = getLocalizedResource.call(this, 'normalizePoints');\n\n // Load drawing for rule.\n let { drawingCompleted, points, duration } = this.dictionaryWithRuleDrawing[0] ?? {};\n const { direction } = this.dictionaryWithRuleDrawing[0] ?? {};\n\n // If the drawing isn't completed, we want to prevent the user from being able to save a rule.\n // TODO in VID-13309 or other: we may want to do a similar check for the rule name and any other fields as well\n // or we should otherwise unify this frontend validation with the validation done in that ticket.\n // Note: If the camera has the entire FOV by default and points is empty, we will just assume the entire FOV\n // Note 2: If this is a third party analytics rule, we do not expect any drawings since it is configured on the camera's internal site.\n if (\n ruleType !== ThirdPartyAnalytics &&\n !drawingCompleted &&\n !(this.defaultEntireFieldOfView && isEmpty(points))\n ) {\n notificationManager.addError(completeShapeText);\n return Promise.reject();\n }\n\n // If the points are not normalized, prevent the user from being able to save the rule.\n if (!arePointsNormalized(points)) {\n notificationManager.addError(normalizePointsText);\n return Promise.reject();\n }\n\n // Third party analytic rule checks\n if (ruleType === ThirdPartyAnalytics) {\n // Rules must have a name\n if (!rule.name?.trim()) {\n notificationManager.addError(getLocalizedResource.call(this, 'emptyRuleName'));\n return Promise.reject();\n }\n\n // Make sure we have selected an event to trigger on\n if (!this.analyticTriggers?.length) {\n notificationManager.addError(getLocalizedResource.call(this, 'noThirdPartyAnalyticsSelected'));\n return Promise.reject();\n }\n }\n\n if (this.isEscalatedEvent && this.ruleHasRVMWarningFilters(rule) && !ignoreRvmWarnings) {\n modals.showModal(RvmRuleFiltersModal, {\n filters: rule.notificationFilters,\n onSave: async (\n modalButtonAnimation: Promise,\n evt: PointerEvent,\n filtersToRemove: number[]\n ) => {\n // If the user chose to remove the invalid filters and save, remove them from the rule\n rule.notificationFilters = rule.notificationFilters.filter(\n (filter) => !filtersToRemove.includes(filter)\n );\n\n // Wait for for the rule to be saved before closing the modal. The button animation promise will handle the page transition\n await this.save(modalButtonAnimation, evt, true); // Ignore the RVM warning this time just in case the user chose to have the \"Animal\" filter\n modals.closeModal();\n }\n });\n\n // Prevent the user from saving the rule until they have confirmed they want to remove the invalid filters.\n return Promise.reject();\n }\n\n // For transitioning from old exceptions to Property Status: If one of the previous exceptions are saved on the model,\n // Reset the exceptions if the user saves an old rule without any changes.\n if (\n this.hasPresenceState &&\n rule.exceptions.length &&\n !rule.exceptions.includes(PresenceStateHome) &&\n !rule.exceptions.includes(PresenceStateSleep) &&\n !rule.exceptions.includes(PresenceStateAway)\n ) {\n set(rule, 'exceptions', []);\n }\n\n // Update drawing properties in the rule.\n if (rule instanceof OvRule) {\n setProperties(rule, {\n points,\n direction: direction ?? -1,\n duration: duration ?? -1\n });\n }\n\n if (supportsStories && ruleClassificationFilters != null) {\n if (ruleClassificationFilters.length == 0) {\n notificationManager.addError(getLocalizedResource.call(this, 'detectionTypeNotSelected'));\n return Promise.reject();\n }\n if (ruleClassificationFilters.includes(Package) && ruleType === GroundZone) {\n const parcelRule = await (rule as OvRule).parcelDetectionRule;\n parcelRule.points = points;\n }\n }\n\n if (touchlessRingRuleIsEnabled) {\n if (this.canCustomizeTouchlessRingRule) {\n // Update these values from the main rule to the drawing for touchless ring rule.\n ({ drawingCompleted, points, duration } = this.dictionaryWithTouchlessRingRuleDrawing[0]);\n\n // Prevent saving if the user has enabled a touchless ring sub-rule but the drawing isn't completed.\n if (!drawingCompleted) {\n notificationManager.addError(completeShapeText);\n return Promise.reject();\n }\n\n if (!arePointsNormalized(points)) {\n // Prevent saving if the user has enabled a touchless ring sub-rule but the points aren't normalized.\n notificationManager.addError(normalizePointsText);\n return Promise.reject();\n }\n } else if (points.length === 0) {\n points = getDefaultAnalyticsShapePoints(1, 1, 0);\n }\n\n // Update drawing properties in the touchless ring rule.\n // If we can't customize the rule, we'll inherit the same values from the main rule.\n setProperties(touchlessRingRule, {\n points,\n direction: direction ?? -1,\n duration: duration ?? -1\n });\n }\n\n // If the user has selected lights to enable an analytics light rule, make sure the user also selects a light rule filter and a light duration.\n if ((get(rule, 'lightsSelected.length') as number) > 0) {\n if (\n (get(rule, 'lightRuleFilters.length') as number) < 1 ||\n (this.isThirdPartyCamera && (get(rule, 'thirdPartyLightRuleTriggers.length') as number) < 1)\n ) {\n notificationManager.addError(getLocalizedResource.call(this, 'lightRuleSelectTriggerText'));\n return Promise.reject();\n }\n\n if (get(rule, 'lightTimeOnLengthInSeconds') === 0) {\n notificationManager.addError(getLocalizedResource.call(this, 'lightRuleSelectLightDurationText'));\n return Promise.reject();\n }\n }\n\n // If exit delay is configured, verify the user has permissions and has exceptions selected.\n if (rule.exitDelay > 0 && !this.showExitDelay) {\n set(rule, 'exitDelay', 0);\n }\n\n // If the user has selected at least one recipient to receive notifications, make sure the user has also selected at least one rule filter.\n if (\n get(rule, 'hasSelectedRecipients') &&\n !(get(rule, 'notificationFilters.length') || get(rule, 'activeParcelDetectionEvents.length'))\n ) {\n notificationManager.addError(getLocalizedResource.call(this, 'selectNotificationFilters'));\n return Promise.reject();\n }\n\n // If this is a 3PC rule, we don't support perimeter guard, so can skip this logic.\n if (rule.ruleType !== ThirdPartyAnalytics && rule instanceof OvRule) {\n // If the user has selected a perimeter guard sub-schedule, ensure it's within the bounds of the overall rule schedule; if not, error.\n const { scheduleIsCustom, perimeterGuardSubScheduleIsCustom } = this,\n perimeterGuardConfig = await rule.perimeterGuardConfig,\n [ruleStartTime, ruleEndTime, ruleDayBits] = getObjProperties(rule, 'startTime', 'endTime', 'dayBits'),\n {\n startTime: pGStartTime = 0,\n endTime: pGEndTime = MINUTES_IN_DAY,\n dayBits: pGDayBits = EVERY_DAY_BITS,\n enabled = false\n } = perimeterGuardConfig || {};\n\n const dayBitsOutOfBounds = ~ruleDayBits & pGDayBits;\n\n if (!this.supportsPerimeterGuardSubSchedule || !enabled || !perimeterGuardSubScheduleIsCustom) {\n const perimeterGuardConfig = await rule.perimeterGuardConfig;\n setProperties(perimeterGuardConfig, {\n dayBits: ruleDayBits,\n startTime: ruleStartTime,\n endTime: ruleEndTime\n });\n } else if (\n scheduleIsCustom &&\n (ruleStartTime > pGStartTime || ruleEndTime < pGEndTime || dayBitsOutOfBounds > 0)\n ) {\n notificationManager.addError(\n getLocalizedResource.call(this, 'errorPerimeterGuardSubScheduleOutOfBounds')\n );\n return Promise.reject();\n }\n }\n\n if (!this.canViewNoonlightVerifyDropdown) {\n set(rule, 'noonlightVerifyType', NO_FILTERING_OR_DELAY);\n }\n if (!this.canViewDialerDelayDropdown) {\n set(rule, 'dialerDelayType', NO_FILTERING_OR_DELAY);\n }\n\n // Do we have a rule and did we not recently save a rule?\n if (rule && !recentlySaved) {\n // Set up delayed transition after save action.\n buttonAnimation.then(() => {\n // Notify user of success.\n notificationManager.addSuccess(getLocalizedResource.call(this, 'success'));\n\n // Notify the user that the saved rule will be disabled if they have exceeded the clip limit\n if (isOverUploadQuota) {\n notificationManager.addError(\n getLocalizedResource.call(this, 'errorUnitUploadAboveMonthlyLimit', { uploadQuota })\n );\n }\n\n // Allow rules to be saved after the delay.\n this.recentlySaved = false;\n\n // If the current login can donate clips, prompt to enable automatic clip donation for the camera associated with this rule.\n const showAutoDonatePrompt =\n this.canDonateClips && !autoDonate && !hasLoginSeenAutoDonatePrompt && ruleIsNew;\n\n // If the current camera is auto donating under an older clip donation agreement, reprompt it with the new agreement\n const showAutoDonateReprompt =\n this.canDonateClips &&\n autoDonate &&\n hasAcceptedClipDonationAgreement &&\n (acceptedClipDonationAgreementVersion ?? -1) < (newestClipDonationAgreementVersion ?? -1);\n\n // If this is for a third party camera, skip showing the clip donation prompt.\n if (ruleType !== ThirdPartyAnalytics && (showAutoDonatePrompt || showAutoDonateReprompt)) {\n this.navigation.transitionToRouteId(EmberVideoClipFeedback, { queryParams: { cameraId } });\n } else {\n contextManager.transitionBackToMobileAppOrPreviousRoute(EmberVideoRules, true);\n }\n });\n\n // If the rule is locked and the user can't edit locked rules, only limited info can be saved for the rule.\n // Note this also applies to Remote Video Monitoring rules.\n // In these cases, allow the rule to save, but terminate before updating models and saving camera information.\n if (\n ((ruleWasLocked || this.isDealerLocked) && !this.canEditLockedRules) ||\n (this.isEscalatedEvent && !this.canEditEscalatedEventRules)\n ) {\n if (this.canUseVacationWatch && rule.vacationWatchConfigured) {\n // Save the rule.\n const ruleSavingPromise = rule.save();\n\n ruleSavingPromise.then(() => (this.recentlySaved = true));\n\n if (contextManager.identityModel.isMobileApp) {\n this.modals.showLoadingModal(ruleSavingPromise);\n }\n\n return ruleSavingPromise;\n }\n\n return Promise.resolve();\n }\n\n if (!ruleIsNew && !!rule.ruleItem) {\n set(rule, 'isActive', !get(rule.ruleItem, 'isPaused'));\n }\n\n // Update whether the rule is locked in the model.\n set(rule, 'isDealerLocked', this.isDealerLocked);\n\n // Save the rule.\n const ruleSavingPromise = rule.save();\n\n // All SMS text only recipients with MMS disabled should no longer display a dropdown.\n this.showMMSDisabledContacts = [];\n\n // Update the camera model.\n // Reverse the slider value so the correct value is stored.\n const sensitivity = reverseSliderValue(this.currentSliderValue ?? 0, this.maxSensitivitySliderValue);\n if (camera instanceof OvReadyCamera) {\n set(camera, 'detectionSensitivity', sensitivity);\n }\n\n // Save the camera.\n const cameraSavingPromise = rule.camera.then((camera) => {\n // If the camera supports detection sensitivity and the value was changed, save the camera.\n if (\n camera instanceof OvReadyCamera &&\n camera.supportsDetectionSensitivity &&\n camera.hasDirtyAttributes\n ) {\n return camera.save();\n }\n\n // Otherwise return an empty resolved promise.\n return Promise.resolve(camera);\n });\n\n // Make sure all saving promises complete before setting recentlySaved to true.\n // Reload the rule model so changes can be shown on the recording rules page.\n Promise.all([ruleSavingPromise, cameraSavingPromise]).then(() => {\n this.recentlySaved = true;\n rule.reload();\n });\n\n if (contextManager.identityModel.isMobileApp) {\n this.modals.showLoadingModal(ruleSavingPromise);\n }\n\n return ruleSavingPromise;\n }\n }\n\n /**\n * Transitions back to settings route.\n */\n @action async back(): Promise {\n const { navigation } = this,\n { rule } = this.model,\n camera = await rule.camera;\n\n // If the camera has OV settings, then go to the settings route.\n if (camera instanceof OvReadyCamera && camera.canChangeOvCameraSettings) {\n navigation.transitionToRouteId(EmberOvReadyRuleSettings);\n return;\n }\n\n // If this is a new rule, then go back to the select page if the camera didn't support the settings page functionalities.\n if (rule.id === null) {\n navigation.transitionToRouteId(EmberOvReadyRuleSelect);\n return;\n }\n\n // Otherwise, transition back to wherever we came from before the analytics routes.\n this.contextManager.transitionToPreviousRoute();\n }\n\n /**\n * Deletes the current rule if confirmed by the user.\n */\n @action async deleteItem(): Promise {\n const { rule } = this.model,\n item = await rule.ruleItem,\n itemName = item.name,\n { intl } = this,\n deleteText = intl.t('components.automation.rules.rule-collection.delete.rule'),\n deleteBody = intl.t('components.automation.rules.rule-collection.confirmDelete.rule', {\n itemName,\n showWarning: item.editPageQueryParameters.svr_device_id !== undefined\n }),\n updateItemStatus = (isProcessing: boolean): void => {\n setProperties(item, {\n isDetached: isProcessing\n });\n };\n\n this.modals.showConfirmationDialog(deleteText, deleteBody, {\n text: deleteText,\n css: 'btn-color-danger',\n action: async () => {\n updateItemStatus(true);\n try {\n await item.destroyRecord();\n this.notificationManager.addSuccess(\n intl.t('components.automation.rules.rule-collection.successDelete.rule', {\n itemName\n })\n );\n if (item) {\n this.navigation.transitionToRouteId(EmberVideoRules);\n }\n } catch (ex) {\n item.rollback();\n updateItemStatus(false);\n }\n }\n });\n }\n\n /**\n * Store the current rule name in the dirty instance.\n */\n @action onRuleNameChange(ruleName: string): void {\n set(this.model.rule, 'name', ruleName);\n }\n\n /**\n * Store the currently selected minimum delay between clips in the dirty instance.\n */\n @action onMinimumDelayChange(minimumDelay: string): void {\n set(this.model.rule, 'minimumDelayBetweenClips', parseInt(minimumDelay, 10));\n }\n\n /**\n * Fired when the schedule changes.\n *\n * @param scheduleProperties\n * @param _isAfterSunset Not used.\n * @param _oldScheduleProperties Not used.\n * @param isCustom Whether the new schedule is a custom weekly schedule (e.g. weekdays 9-5).\n * @param isVacation Whether the new schedule is a vacation schedule.\n */\n @action scheduleChanged(\n {\n dayBits,\n beginTime: startTime,\n endTime,\n vacationStartDate,\n vacationEndDate\n }: {\n dayBits: number;\n beginTime: number;\n endTime: number;\n vacationStartDate: Date | undefined;\n vacationEndDate: Date | undefined;\n },\n _isAfterSunset: boolean | undefined,\n _oldScheduleProperties: { selectedDays: number[]; beginTime: Date; endTime: Date } | undefined,\n isCustom: boolean | undefined,\n isVacation: boolean | undefined\n ): void {\n const { rule } = this.model;\n setProperties(rule, { dayBits, startTime, endTime });\n if (isCustom != null) {\n this.scheduleIsCustom = isCustom;\n }\n\n if (isVacation != null) {\n setProperties(rule, { vacationWatchConfigured: isVacation });\n }\n\n if (vacationStartDate && vacationEndDate) {\n setProperties(rule, {\n vacationWatchStartDate: vacationStartDate,\n vacationWatchEndDate: vacationEndDate\n });\n }\n\n if (this.vacationDatesInvalidNotification) {\n this.notificationManager.removeNotification(this.vacationDatesInvalidNotification);\n this.vacationDatesInvalidNotification = null;\n }\n\n if (isVacation) {\n this.invalidSchedule = !this.validateVacationSchedule(\n rule.vacationWatchStartDate,\n rule.vacationWatchEndDate\n );\n } else {\n // We don't perform validation on any other schedule types\n this.invalidSchedule = false;\n }\n }\n\n /**\n * Determines whether a vacation schedule is valid and displays an error if not.\n *\n * @returns Whether the given schedule is valid.\n */\n validateVacationSchedule(startDate: Date, endDate: Date): boolean {\n const vacationHours = (endDate.getTime() - startDate.getTime()) / NUM_MILLISECONDS_IN_HOUR;\n\n if (vacationHours < 0) {\n this.vacationDatesInvalidNotification = this.notificationManager.addError(\n getLocalizedResource.call(this, 'vacationDatesWrongOrder')\n );\n return false;\n } else if (vacationHours < MIN_VACATION_HOURS) {\n this.vacationDatesInvalidNotification = this.notificationManager.addError(\n getLocalizedResource.call(this, 'vacationTooShort', { minHours: MIN_VACATION_HOURS })\n );\n return false;\n } else if (vacationHours > 24 * MAX_VACATION_DAYS) {\n this.vacationDatesInvalidNotification = this.notificationManager.addError(\n getLocalizedResource.call(this, 'vacationTooLong', { maxDays: MAX_VACATION_DAYS })\n );\n return false;\n }\n\n return true;\n }\n\n /**\n * Called when a Noonlight verify type is changed for Escalated Event rule\n */\n @action noonlightVerifyTypeChanged(value: string): void {\n set(this.model.rule, 'noonlightVerifyType', parseInt(value));\n }\n\n /**\n * Called when a Dialer delay type is changed for Escalated Event rule\n */\n @action dialerDelayTypeChanged(value: string): void {\n set(this.model.rule, 'dialerDelayType', parseInt(value));\n }\n\n /**\n * Called when a preview type is changed.\n *\n * @param group The edited group.\n * @param contact The edited contact.\n * @param value The new preview type value.\n */\n @action previewTypeChanged(\n group: NotificationGroup,\n contact: {\n contact: ContactAddress;\n isSelected: boolean;\n previewTypes: DropdownSelectItem[];\n isReadOnlyPreviewType: boolean;\n description: string;\n },\n value: string\n ): void {\n // Deselect all preview types then select new value.\n const { previewTypes } = contact,\n { addressType } = contact.contact;\n previewTypes.setEach('state', UNSELECTED);\n set(previewTypes.findBy('value', value) as DropdownSelectItem, 'state', SELECTED);\n\n // If we have an MMS notification set as SMS, add the contact's ID to the list of contacts to show the disabled options.\n if (this.disableMMSVideoNotifications && value === `${TextOnly}` && addressType === ContactTypeEnum.Mobile) {\n this.showMMSDisabledContacts = [...this.showMMSDisabledContacts, contact.contact.id];\n }\n\n // The value field of a DropdownSelectItem is a string, so we have to parse it.\n set(contact, 'description', this.getRecipientDescription(parseInt(value)));\n // Update notifications on rule.\n updateNotifications.call(this, group);\n }\n\n /**\n * Called when a preview type is changed for panel notification.\n * @param value The new preview type value.\n */\n @action previewTypeChangedForPanelNotification(value: string): void {\n if (this.model.rule instanceof OvRule) {\n this.panelNotificationFormat = parseInt(value);\n set(this.model.rule, 'panelNotificationFormat', parseInt(value));\n }\n }\n\n /**\n * Called when the selected notification contacts have changed.\n *\n * @param group The edited group.\n */\n @action notificationsChanged(group: NotificationGroup): void {\n // Update notifications on rule.\n updateNotifications.call(this, group);\n }\n\n /**\n * Called when the user changes the exception state.\n *\n * @param atHomeExceptions The current exception state.\n */\n @action atHomeExceptionsChanged({\n exceptionStates,\n devices,\n fenceId\n }: {\n exceptionStates: number[];\n devices: string[];\n fenceId: string;\n }): void {\n setProperties(this.model.rule, {\n exceptions: exceptionStates,\n geoDevicesForException: devices,\n geoFenceForException: parseInt(fenceId, 10)\n });\n }\n\n /**\n * For doorbell analytics, update the rule's notification filters if the user changed them.\n *\n * @param filterSelection\n */\n @action doorbellNotificationFilterSelectionChanged(filterSelection: ClassificationFilter[]): void {\n const personFilter = filterSelection.findBy('value', Person);\n const activeParcelDetectionEvents = filterSelection\n .map((filter: ClassificationFilter) => {\n if (isPackageDetectionEvent(filter.value) && filter.state) {\n return filter.value;\n }\n return null;\n })\n .compact();\n\n set(this.model.rule, 'notificationFilters', personFilter?.state ? [Person] : []);\n if (this.model.rule instanceof OvRule) {\n set(this.model.rule, 'activeParcelDetectionEvents', activeParcelDetectionEvents);\n }\n }\n\n /**\n * Update panel notification to enabled/disabled.\n */\n @action panelNotificationSelectionChanged(event: Event & { target: HTMLInputElement }): void {\n if (this.model.rule instanceof OvRule) {\n set(this.model.rule, 'hasPanelNotification', event.target.checked);\n }\n }\n\n /**\n * Update current slider value.\n *\n * @param sliderValue What's the new sensitivity value the user just slid to?\n */\n @action sensitivitySliderChanged(sliderValue: number): void {\n this.currentSliderValue = sliderValue;\n }\n\n /**\n * Toggles whether or not the analytics rule will contain a touchless ring sub-rule.\n */\n @action async toggleTouchlessRing(): Promise {\n const { model, touchlessRingRuleIsEnabled } = this;\n\n if (!(model.rule instanceof OvRule)) {\n return;\n }\n\n const touchlessRingRule = await model.rule.touchlessRingRule;\n\n // Since we are using the points array to keep track of whether or not the rule is enabled,\n // we need to clear it out every time we disable it.\n if (touchlessRingRuleIsEnabled) {\n set(touchlessRingRule, 'points', []);\n }\n set(model, 'isTouchlessRingEnabled', !touchlessRingRuleIsEnabled);\n }\n\n /**\n * Fired when the svg-warning icon is clicked.\n */\n @action showWarningModal(): void {\n const uploadQuota = this.model.videoUsage.uploadQuota;\n this.modals.showInfoModal({\n title: getLocalizedResource.call(this, 'cannotEnableRule'),\n css: 'more-info',\n info: htmlSafe(\n `

    ${getLocalizedResource.call(this, 'errorUnitUploadAboveMonthlyLimit', { uploadQuota })}

    `\n )\n });\n }\n\n /**\n * If Perimeter Guard sub-schedule is corrected, display text informing of this (if Perimeter Guard is enabled and sub-schedule supported).\n */\n @action onPerimeterGuardScheduleCorrected(): void {\n if (this.perimeterGuardEnabled && this.supportsPerimeterGuardSubSchedule) {\n this.notificationManager.addInfo(getLocalizedResource.call(this, 'subScheduleEditedText'));\n }\n }\n\n @action async dataLoaded({ rule }: { rule: BaseAnalyticsRule }): Promise {\n const [ruleStartTime, ruleEndTime, ruleDayBits] = getObjProperties(rule, 'startTime', 'endTime', 'dayBits'),\n scheduleDuration = getDayScheduleDuration(ruleStartTime, ruleEndTime),\n customSchedule =\n (ruleDayBits !== EVERY_DAY_BITS || scheduleDuration < MINUTES_IN_DAY) &&\n ruleStartTime !== undefined &&\n ruleEndTime !== undefined;\n\n if (rule instanceof OvRule) {\n const perimeterGuardConfig = await rule.perimeterGuardConfig,\n {\n startTime: pGStartTime = 0,\n endTime: pGEndTime = MINUTES_IN_DAY,\n dayBits: pGDayBits = EVERY_DAY_BITS\n } = perimeterGuardConfig || {},\n PGscheduleDuration = getDayScheduleDuration(pGStartTime, pGEndTime),\n customPGSchedule = !(\n (pGDayBits === EVERY_DAY_BITS && PGscheduleDuration === MINUTES_IN_DAY) ||\n (ruleStartTime === pGStartTime && ruleEndTime === pGEndTime && ruleDayBits === pGDayBits)\n );\n this.perimeterGuardSubScheduleIsCustom = customPGSchedule;\n }\n\n this.scheduleIsCustom = customSchedule;\n }\n\n @action removeAllDomListeners(): void {\n this.dom.removeAllListeners(this);\n }\n\n /**\n * Links the user to the camera's internal web page if it is allowed.\n */\n @action\n clickCameraInternalPage(): void {\n if (this.camera.dataUsageMode == DataUsageModeEnum.CriticalDataMode) {\n this.notificationManager.addError(this.intl.t(`generic.video.errorConnectDataLimited`));\n } else {\n window.open(this.cameraLinkUrl, '_blank');\n }\n }\n\n /**\n * Should a warning be shown for the rule if it a RVM rule and has invalid filter selections?\n */\n ruleHasRVMWarningFilters(rule: BaseAnalyticsRule): boolean {\n return rule.notificationFilters.includes(Animal) || rule.notificationFilters.includes(Other);\n }\n\n @computed('model.rule.monitoringStationRecipients')\n get showDuplicateNotificationWarning(): boolean {\n const { rule, permissions } = this.model;\n return (\n permissions.canClientCancelVerifyEscalatedEvent &&\n rule.monitoringStationRecipients &&\n !!Object.keys(rule.monitoringStationRecipients).length\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/rules/analytics/draw': DrawBaseController;\n }\n}\n","import { action, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport ThirdPartyAnalyticsCamera from 'customer-site/models/video/devices/third-party-analytics-camera';\nimport ThirdPartyAnalyticsRule from 'customer-site/models/video/third-party-analytics-rule';\nimport {\n EmberOvReadyRuleSelect,\n EmberOvReadyRuleDraw,\n EmberOvReadyRuleDrawV2\n} from '../../../../enums/CustomerPageUrl';\nimport BaseEditableAnalyticsRoute from '../base-editable-analytics-route';\n\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type { LightAlertOption } from 'customer-site/enums/LightAlertOption';\nimport type BaseAnalyticsRule from 'customer-site/models/video/base-analytics-rule';\nimport type CameraLinkInfo from 'customer-site/models/video/camera-link-info';\nimport type BaseAnalyticsCamera from 'customer-site/models/video/devices/base-analytics-camera';\nimport type VideoPerimeterGuardConfig from 'customer-site/models/video/perimeter-guard-config';\nimport type OvRulePermission from 'customer-site/models/video/permissions/ov-rule-permission';\nimport type VideoUsageModel from 'customer-site/models/video/video-usage';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { AnalyticsModel } from 'customer-site/video/rules/analytics/route';\nimport type DrawBaseController from './draw-base-controller';\nimport type DrawController from './index/controller';\nimport type DrawV2Controller from './v2/controller';\n\nexport interface DrawBaseModel {\n camera: BaseAnalyticsCamera;\n cameraLink: CameraLinkInfo | Record;\n hasStoriesAccess: boolean;\n permissions: OvRulePermission;\n rule: BaseAnalyticsRule;\n videoUsage: VideoUsageModel;\n availableLightAlertOptions: LightAlertOption[];\n}\n\n/**\n * @classdesc\n * Route for drawing the window and selecting settings for an OV Ready rule.\n *\n * @class video.rules.analytics.draw.BaseDrawRoute\n * @extends video.rules.analytics.BaseEditableAnalyticsRoute\n */\n\nclass DrawBaseRoute extends BaseEditableAnalyticsRoute {\n @service declare identityManager: IdentityManager;\n @service declare navigation: NavigationService;\n @service declare store: Store;\n\n /** @override */\n routeId = EmberOvReadyRuleDraw;\n\n async model(): Promise {\n // Get the rule from the parent route's model\n const { permissions, rule, videoUsage } = this.modelFor('video.rules.analytics') as AnalyticsModel;\n\n const camera = await rule.camera;\n\n // If the user refreshes the page when entering a new rule the camera object will be null.\n // Redirect the user back to the Rule Select\n if (!camera) {\n this.navigation.transitionToRouteId(EmberOvReadyRuleSelect);\n return {\n camera,\n cameraLink: {},\n hasStoriesAccess: false,\n permissions,\n rule,\n videoUsage,\n availableLightAlertOptions: []\n };\n }\n\n const availableLightAlertOptions = (\n await this.ajax.apiRequest<{ value: LightAlertOption[] }>(\n `video/perimeterGuardConfigs/${camera.id}/getAvailableLightAlertOptions`,\n undefined,\n null,\n 'GET'\n )\n ).value;\n\n const pgConfig = rule.get('perimeterGuardConfig') as VideoPerimeterGuardConfig;\n // If perimeter guard config exists, but the light alert option hasn't been set yet.\n if (pgConfig?.get('content') && !pgConfig.get('lightAlertOption') && availableLightAlertOptions.length) {\n pgConfig.set('lightAlertOption', availableLightAlertOptions[0]);\n }\n\n // Fetch the camera link info\n let cameraLink = {};\n\n if (camera instanceof ThirdPartyAnalyticsCamera) {\n cameraLink = await camera.cameraLink;\n }\n\n return {\n camera,\n cameraLink,\n hasStoriesAccess: false,\n permissions,\n rule,\n videoUsage,\n availableLightAlertOptions\n };\n }\n\n /** @override */\n setupController(\n controller: DrawController | DrawV2Controller,\n model: ModelFrom,\n transition: Transition\n ): void {\n // Pass in the parent route's model since it gets overridden by the child's route model above\n super.setupController(controller, this.modelFor('video.rules.analytics'), transition);\n\n controller.set('cameraLinkUrl', model.cameraLink.cameraLinkUrl);\n controller.set('camera', model.camera);\n\n // Keep rule disabled if user currently exceeds clip limit.\n if (model.videoUsage.isOverUploadQuota) {\n model.rule.isActive = false;\n }\n\n // Set the value for the detection sensitivity slider.\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error There are multiple issues with this code. 1) camera is async, so this it should be awaited. 2) The type of camera is BaseAnalyticsCamera, which doesn't have a detectionSensitivity property.\n const detectionSensitivity = model.rule.camera.get('detectionSensitivity') as number;\n const maxSliderValue = controller.maxSensitivitySliderValue;\n const sliderValue = maxSliderValue - detectionSensitivity;\n\n controller.set('currentSliderValue', sliderValue);\n\n // Set whether the rule has been locked by the dealer.\n const isDealerLocked = model.rule.get('isDealerLocked'),\n monitoringStationRecipients = model.rule.get('monitoringStationRecipients'),\n hasMonitoringStationRecipientsSelected =\n !!monitoringStationRecipients && Object.keys(monitoringStationRecipients).length > 0;\n\n // If monitoring station recipients have been selected, the rule must be locked.\n controller.set('isDealerLocked', isDealerLocked || hasMonitoringStationRecipientsSelected);\n\n // Used to keep track of if changes have been made to these properties.\n controller.set('previousExceptions', model.rule.isNew ? [] : model.rule.exceptions ?? []);\n controller.set('previousExitDelay', model.rule.exitDelay);\n controller.set('previousGeoDevices', model.rule.geoDevicesForException ?? []);\n controller.set('previousGeofence', model.rule.geoFenceForException);\n\n if (model.rule instanceof ThirdPartyAnalyticsRule) {\n // Set the original analytic triggers for the rule before they are potentially modified.\n controller.set('originalAnalyticTriggers', model.rule.thirdPartyEventTypes);\n }\n }\n\n /**\n * Now that there are multiple versions of the draw page,\n * redirect the user if they're going to the wrong one.\n *\n * @param model\n */\n redirect(model: ModelFrom): void {\n const cameraSupportsStories = get(model.rule.camera, 'supportsStories');\n const shouldUseDrawV2 = cameraSupportsStories;\n\n if (shouldUseDrawV2 && this.routeId !== EmberOvReadyRuleDrawV2) {\n this.navigation.transitionToRouteId(EmberOvReadyRuleDrawV2);\n } else if (!shouldUseDrawV2 && this.routeId !== EmberOvReadyRuleDraw) {\n this.navigation.transitionToRouteId(EmberOvReadyRuleDraw);\n }\n }\n\n /**\n * When transitioning to this page we need to trigger the date picker type resizing event.\n */\n @action\n didTransition(): void {\n super.actions.didTransition.call(this);\n this.controller.send('addWindowResizeListener');\n }\n\n @action\n willTransition(transition: Transition): void {\n super.actions.willTransition.call(this, transition);\n (this.controller as DrawBaseController).removeAllDomListeners();\n }\n}\n\nexport default DrawBaseRoute;\n","import { schedule, later } from '@adc/ember-utils/utils/runloop';\nimport { set } from '@ember/object';\nimport Step, { StepDisplayType } from 'customer-site/components/help-tour/step';\nimport StepContent, { getAnchorSelector } from 'customer-site/components/help-tour/step-content';\nimport Tour from 'customer-site/components/help-tour/tour';\nimport { VideoRulesPageTour } from 'customer-site/enums/HelpTourType';\nimport { VideoLocalSchedule, VideoCameras } from 'customer-site/enums/RuleFilter';\n\n/**\n * Returns text for specific step and key.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {String} stepName\n * @param {String} key\n * @param {Object} [tokens]\n *\n * @returns {String}\n */\nfunction getText(getTranslation, stepName, key, tokens = {}) {\n return getTranslation(`video.rules.help-tour.${stepName}.${key}`, tokens);\n}\n\n/**\n * Returns texts for specific keys of a step.\n *\n * @private\n * @static\n * @memberof video.rules.help-tour\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {String} stepName\n * @param {Array} [resourceKeys=['title', 'content']]\n * @returns {Object}\n */\nfunction getTextsForStep(getTranslation, stepName = '', resourceKeys = ['title', 'content']) {\n return resourceKeys.reduce(\n (acc, key, index) => ({\n ...acc,\n [key]: getText(getTranslation, stepName, resourceKeys[index])\n }),\n {}\n );\n}\n\n/**\n * Transition to the correct tab depending on the filter type provided.\n *\n * @private\n * @instance\n * @memberof video.rules.help-tour\n */\nasync function changeTabs(filterType) {\n // No need to set variable and add artificial delay if we are already on the correct tab.\n if (this.filterTags.firstObject !== filterType) {\n // Change to the appropriate tab\n set(this, 'filterTags', [filterType]);\n\n // Await the schedule suggestion items.\n await this.model.ruleSuggestions;\n\n // Wait until after render.\n await schedule('afterRender', () => {});\n\n // Adding a bit of manual delay makes the transition look smoother.\n return later(() => Promise.resolve(), 500);\n }\n}\n\n/**\n * Create a popover step.\n *\n * @private\n * @static\n * @memberof video.rules.help-tour\n *\n * @param {Object} stepText Contains the 'title' and 'content' propertiesfor the popover step.\n * @param {String} attachTo The css class to attach the popover modal to.\n * @param {String} placement The placement to bias the modal towards.\n * @param {function} onBeforeOpen Optional parameter if any code is needed to execute before showing the modal.\n * @param {function} isStepAvailable Default all the steps to be available.\n *\n * @returns {Step}\n */\nfunction getPopoverStep(\n stepText,\n attachTo,\n placement,\n onBeforeOpen = () => {},\n isStepAvailable = () => Promise.resolve(true)\n) {\n return Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n attachTo: getAnchorSelector(attachTo),\n placement,\n scrollAlignToTop: false,\n cssClass: `popover-step-${attachTo}`,\n ...stepText\n }),\n onBeforeOpen,\n isStepAvailable\n });\n}\n\n/**\n * Create a modal popover step. Used for the intro and outro in the tour.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {Boolean} localRecordingPageAvailable Does this user have access to the local recording page for the tour?\n *\n * @returns {Array}\n */\nfunction getModalStep(getTranslation, resourceKey) {\n return Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n title: getText(getTranslation, resourceKey, 'title'),\n content: `
    ${getText(getTranslation, resourceKey, 'content')}
    `,\n cssClass: 'video-rules-help-tour',\n buttons: {\n next: {\n text: getText(getTranslation, resourceKey, 'button')\n },\n previous: {\n show: false\n }\n }\n })\n });\n}\n\n/**\n * Get the steps for the new feature tour.\n *\n * @param {function(String, object?):string} getTranslation - Function that gets translation by key.\n * @param {Boolean} localRecordingPageAvailable Does this user have access to the local recording page for the tour?\n *\n * @returns {Array}\n */\nfunction getTourSteps(getTranslation, localRecordingPageAvailable) {\n return [\n getModalStep(getTranslation, 'intro'),\n getPopoverStep(getTextsForStep(getTranslation, 'searchRules'), 'search-input', 'right'),\n getPopoverStep(\n getTextsForStep(getTranslation, 'cloudStorageInfo'),\n 'cloud-storage-info',\n 'top',\n changeTabs.bind(this, VideoCameras)\n ),\n localRecordingPageAvailable\n ? getPopoverStep(\n getTextsForStep(getTranslation, 'localStorageInfo'),\n 'local-storage-info',\n 'top',\n changeTabs.bind(this, VideoLocalSchedule)\n )\n : undefined,\n getModalStep(getTranslation, 'outro')\n ].compact();\n}\n\n/**\n * Starts the tour for the video rules page.\n */\nexport function startVideoRulesPageTour() {\n const { contextManager, availableFilterTags } = this,\n { intl, identityModel } = contextManager;\n\n const localRecordingPageAvailable =\n availableFilterTags.map((x) => x.value).includes(VideoLocalSchedule) && this.model.svrs.length;\n\n const tour = Tour.create({\n name: 'tour',\n steps: getTourSteps.call(this, intl.t.bind(intl), localRecordingPageAvailable),\n async beforeStart() {\n // Wait until after render.\n await schedule('afterRender', () => {});\n },\n afterEnd() {\n // Mark tour completed on completion or early exiting.\n identityModel.markHelpTourAsCompleted(VideoRulesPageTour);\n }\n });\n\n return contextManager.get('helpTour').start(tour);\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\n\nimport type BaseModel from '@adc/app-infrastructure/models/base-model';\nimport type ModalsService from '@adc/ui-components/services/modals';\nimport type Transition from '@ember/routing/transition';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * Clear the route stack and add routes to the visited routes stack.\n * @param contextManager manager of the route stack to clear\n * @param routeIds route IDs to add in the routes stack\n */\nexport function clearAndSetVisitedRoutesStack(contextManager: ContextManager, routeIds: number[]) {\n contextManager.resetVisitedRoutesStack();\n routeIds.forEach((routeId) => contextManager.addRouteToVisitedRoutesStack(routeId));\n}\n\n/**\n * @classdesc\n * The base route for Video Settings Redesign pages.\n */\nexport default abstract class BaseVideoSettingsRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare modals: ModalsService;\n\n /**\n * If the user has clicked exit\n */\n hasConfirmedExit = false;\n\n /**\n * If the user has discarded changes.\n */\n hasDiscardedChanges = false;\n\n /** @override */\n @action willTransition(transition: Transition): void {\n this.transitionBackToNativeOrNextRoute(transition);\n }\n\n /**\n * Opens a confirmation modal asking if the user wants to save their changes\n * @param transition The transition object.\n * @param canUserEditVideoSettings Does the user have permission to edit video settings?\n * @param saveChanges The function we're calling for saving changes.\n * @param models The models we're checking for hasDirtyAttributes.\n * @param didSettingsUpdate We pass this parameter in if checking hasDirtyAttributes isn't accurate, and we want to check if attributes changed manually.\n * @param visitedRouteIds The route IDs we visited before reaching this page. Used so that the back button will reappear after displaying the unsaved changes modal.\n * @returns void\n */\n showUnsavedChangesModalIfNeeded(\n transition: Transition,\n canUserEditVideoSettings: boolean,\n saveChanges: () => Promise,\n models: BaseModel[],\n didSettingsUpdate?: boolean,\n visitedRouteIds: number[] = []\n ): void {\n this.hasDiscardedChanges = false;\n\n // If the user doesn't have edit permissions\n // or if the user has already selected exit\n // or the model does not have dirty attributes\n if (\n !canUserEditVideoSettings ||\n this.hasConfirmedExit ||\n models.every((m) => !m.hasDirtyAttributes) ||\n didSettingsUpdate === false\n ) {\n this.hasConfirmedExit = false;\n this.transitionBackToNativeOrNextRoute(transition);\n return;\n }\n\n // stop the transition\n transition.abort();\n\n // The back button disappears once we click it and display the unsaved changes modal.\n // We need to manually add back the visited route IDs so that the back button reappears.\n if (visitedRouteIds.length !== 0) {\n clearAndSetVisitedRoutesStack(this.contextManager, visitedRouteIds);\n }\n\n // Show a confirmation modal for the user to save the settings or exit without saving\n this.modals.showConfirmationDialog(\n this.intl.t('video.settings.camera.unsavedChanges'),\n this.intl.t('video.settings.camera.unsavedChangesDescription'),\n {\n text: this.intl.t('generic.save'),\n action: async () => {\n await saveChanges()\n .then(() => {\n this.hasConfirmedExit = true;\n transition.retry();\n })\n .catch();\n }\n },\n {\n text: this.intl.t('generic.exit'),\n action: () => {\n models.forEach((m) => {\n m?.rollbackAttributes();\n });\n this.hasDiscardedChanges = true;\n this.hasConfirmedExit = true;\n transition.retry();\n }\n },\n 'unsaved-changes-modal'\n );\n }\n\n /**\n * On Mobile, the device overview page is *not* exposed as a WebView, so that\n * transition will never actually work. To avoid the problem, let's just send them\n * back to the mobile app / page from which they came.\n * @param transition\n * @returns\n */\n transitionBackToNativeOrNextRoute(transition: Transition) {\n if (transition.to.name === 'video.live-view') {\n this.contextManager.transitionBackToMobileApp(true);\n return;\n }\n // If we are transitioning to another webview, continue with the transition\n return;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { alias, not } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { getErrorText } from 'customer-site/utils/ember';\nimport { isAdapterErrorProcessingError } from '@adc/ajax/utils/status-codes';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type SavedVideoSetting from 'customer-site/models/video/settings/saved-video-setting';\nimport type VideoConfig from 'customer-site/models/video/settings/video-config';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * The Controller for Video Config page.\n */\nexport default class BaseVideoConfigController extends EmberController {\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n\n /**\n * This contains promises that have been resolved from the model.\n */\n @tracked resolvedModel?: ResolvedModelFrom;\n\n /**\n * The video settings for the device.\n */\n @alias('resolvedModel.videoConfig')\n declare videoConfig: VideoConfig;\n\n /**\n * The saved video settings for the device.\n */\n @alias('videoConfig.savedVideoSetting')\n declare savedVideoSetting: SavedVideoSetting;\n\n /**\n * Should we disable the save button? Only disable if the user does not have edit permissions.\n */\n @not('videoConfig.canUserEditVideoSettings')\n declare shouldDisableSaveButton: boolean;\n\n /**\n * Save the video settings to the camera and DB.\n */\n @action\n async saveSettings(): Promise {\n const { videoConfig, intl, notificationManager } = this;\n\n return videoConfig\n .save()\n .then(() => notificationManager.addSuccess(intl.t('generic.video.deviceSettingsSavedSuccessfully')))\n .catch((ex) => {\n if (!isAdapterErrorProcessingError(ex)) {\n notificationManager.addError(getErrorText(ex) ?? intl.t('generic.video.failedToUpdateVideoDevice'));\n }\n\n return Promise.reject();\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/settings/camera/video-config': BaseVideoConfigController;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action, computed, get, getProperties } from '@ember/object';\nimport { gte, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { EmberVideoSettingsThirdPartyStream } from 'customer-site/enums/CustomerPageUrl';\nimport { getDeviceIdFromGlobalId } from 'customer-site/utils/general';\nimport { POST } from '@adc/ajax/services/adc-ajax';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type OnvifCameraStream from 'customer-site/models/video/onvif-camera-stream';\nimport type StreamSetting from 'customer-site/models/video/stream-setting';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\n/**\n * The third party stream settings route name.\n */\nexport const ThirdPartyStreamSettingsRouteName = 'video.settings.camera.video-config.third-party-stream',\n ThirdPartyStreamSettingsEditRouteName = 'video.settings.camera.video-config.third-party-stream.edit',\n ThirdPartyStreamSettingsIndexRouteName = 'video.settings.camera.video-config.third-party-stream.index';\n\n/**\n * Consts for different stream ids.\n */\nexport const HighStreamId = 1,\n MediumStreamId = 2,\n LowStreamId = 3;\n\n/**\n * The id to use for the dummy OnvifCameraStream and StreamSetting so we can easily\n * check if the record has already been made.\n */\nexport const DummyRecordId = 'dummy';\n\n/**\n * Helper to get existing records that have been edited.\n */\nexport function isDirtyExistingRecord(record: OnvifCameraStream | StreamSetting): boolean {\n // Used get for both properties due to the error: \"This condition will always return true since this function is always defined.\"\n const { hasDirtyAttributes, isNew } = getProperties(record, 'hasDirtyAttributes', 'isNew');\n\n // Dummy records are always considered dirty\n return !isNew && hasDirtyAttributes;\n}\n\n/**\n * Helper function to check if an array is null or empty.\n */\nexport function isArrayNullOrEmpty(array: number[] | string[] | null): boolean {\n return array === null || array.length === 0;\n}\n\n/**\n * @classdesc\n * Stream Settings Index Controller\n */\nexport default class BaseThirdPartyStreamController extends EmberController {\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare navigation: NavigationService;\n @service declare notificationManager: NotificationManager;\n @service declare contextManager: ContextManager;\n @service declare router: RouterService;\n @service declare store: Store;\n\n declare model: any; // Please replace this 'any' with the actual model type!\n\n /**\n * The customer page URL enum for this particular settings page.\n */\n settingsPageId = EmberVideoSettingsThirdPartyStream;\n\n /**\n * The route's model after it is successfully loaded.\n */\n @tracked\n declare resolvedModel: any;\n\n /**\n * The OnvifCameraStreams that we can select during stream mapping.\n */\n @tracked\n onvifCameraStreams: OnvifCameraStream[] = [];\n\n /**\n * The settings for each stream set up for the camera.\n */\n @tracked\n streamSettings: StreamSetting[] = [];\n\n /**\n * If the settings network requests failed\n */\n @reads('resolvedModel.failedToRetrieveSettings')\n declare failedToRetrieveSettings: boolean;\n\n /**\n * If the user has permissions to save stream settings and mappings.\n */\n @reads('contextManager.identityModel.canEditOnvifSettings')\n declare canEditOnvifSettings: boolean;\n\n /**\n * If the svr supports ONVIF stream mappings.\n */\n @reads('resolvedModel.svr.supportsOnvifStreamMappings')\n declare supportsOnvifStreamMappings: boolean;\n\n /**\n * Users should only be allowed to remap their streams if they have at least 3 streams.\n * If they have just 2 streams, they can see their streams (isStreamMappingVisible) but won't be able to remap them.\n *\n * This assumes the user's SVR also supports ONVIF stream mapping (we wouldn't be able to load OnvifCameraStreams otherwise)\n */\n @gte('onvifCameraStreams.length', 3)\n declare isStreamMappingEnabled: boolean;\n\n /**\n * Returns the deviceId of the selected camera.\n *\n * This is grabbed off model instead of resolvedModel, since the template's VideoSettingsContainer requires this immediately.\n * After VideoSettingsContainer runs the dataLoaded hook, we'll have resolvedModel to use.\n */\n @computed('model.id')\n get deviceId(): string {\n return getDeviceIdFromGlobalId(this.model.id);\n }\n\n /**\n * If we should disable the save button\n */\n @computed('canEditOnvifSettings', 'failedToRetrieveSettings')\n get disableSaveButton(): boolean {\n return !this.canEditOnvifSettings || this.failedToRetrieveSettings;\n }\n\n /**\n * Makes a request to update all edited stream settings.\n */\n @action\n async saveStreamSettings(selectedStreamSetting?: StreamSetting): Promise {\n const { id } = this.model;\n\n let records;\n\n if (selectedStreamSetting) {\n records = isDirtyExistingRecord(selectedStreamSetting) ? [selectedStreamSetting] : [];\n } else {\n records = this.streamSettings.filter(isDirtyExistingRecord);\n }\n\n if (!records.length) {\n return;\n }\n\n // Convert values back to numbers since are set using DropdownSelect's values, which are only strings.\n records.forEach((record) => {\n record.bitRate = parseInt(record.bitRate.toString());\n record.frameRate = parseInt(record.frameRate.toString());\n record.gopLength = parseInt(record.gopLength.toString());\n });\n\n const url = `video/streamSettings/${id}/save`,\n body = records.invoke('serialize');\n\n try {\n this.streamSettings = await this.ajax.apiRequestForDataRecords(\n url,\n undefined,\n body as any,\n POST\n );\n } catch (error) {\n this.notificationManager.addError(\n this.intl.t('generic.video.settings.third-party-stream.streamSettingsFailed')\n );\n throw error;\n }\n\n // If we support stream mappings, then we need our OnvifCameraStream records to be up to date.\n if (this.supportsOnvifStreamMappings) {\n await this.refreshModel();\n }\n\n this.notificationManager.addSuccess(\n this.intl.t('generic.video.settings.third-party-stream.streamSettingsUpdated')\n );\n }\n\n @action\n dataLoaded(resolvedModel: any): void {\n if (!resolvedModel) {\n return;\n }\n\n this.resolvedModel = resolvedModel;\n\n // These arrays are copied out because they are still being referenced by {{promise-hash-tracked}}.\n // Calling pushObject with dummy records on these will cause dataLoaded to rerun.\n this.onvifCameraStreams = [...resolvedModel.onvifCameraStreams];\n this.streamSettings = [...resolvedModel.streamSettings];\n\n if (this.isStreamMappingEnabled) {\n const doesMediumStreamExist = this.onvifCameraStreams.findBy('currentStreamId', MediumStreamId) != null,\n dummyStreamId = doesMediumStreamExist ? undefined : MediumStreamId,\n dummyStream = this.getDummyStream(dummyStreamId);\n\n this.onvifCameraStreams.pushObject(dummyStream);\n\n // Users will see High, Medium, and Low streams for mapping. When the Medium stream is disabled, there'll be\n // just High and Low streams for editing. We create a disabled dummy stream setting to still show 3 columns.\n const shouldShowDisabledMediumSetting = this.isStreamMappingEnabled && this.streamSettings.length === 2;\n if (shouldShowDisabledMediumSetting) {\n const doesMediumSettingExist = this.streamSettings.findBy('streamId', MediumStreamId) != null,\n dummySettingId = doesMediumSettingExist ? undefined : MediumStreamId,\n dummySetting = this.getDummySetting(dummySettingId);\n\n this.streamSettings.pushObject(dummySetting);\n }\n }\n }\n\n // region Helpers\n\n /**\n * Returns an array containing stream settings section data (stream options, should display stream settings section).\n */\n getStreamSettingsSectionData(\n streamSetting: StreamSetting\n ): [boolean, number[] | null, number[] | null, number[] | null, string[] | null, boolean] {\n const isDummyRecord = get(streamSetting, 'isNew'),\n streamOption = this.failedToRetrieveSettings ? undefined : streamSetting.streamOptions;\n\n const [hasValidOptions, bitRateOptions, frameRateOptions, gopLengthOptions, resolutionOptions] = isDummyRecord\n ? [\n // For dummy records, hide the dropdowns.\n false,\n null,\n null,\n null,\n null\n ]\n : streamOption\n ? [\n // When there are stream options, enable the dropdowns and use the options in the dropdowns\n true,\n streamOption.bitRateOptions,\n streamOption.frameRateOptions,\n streamOption.gopLengthOptions,\n streamOption.resolutionOptions\n ]\n : [\n // When there are no stream options, disable the dropdowns and show the current settings.\n false,\n [streamSetting.bitRate],\n [streamSetting.frameRate],\n [streamSetting.gopLength],\n [streamSetting.resolution]\n ];\n\n const shouldDisplayStreamSettingsSection =\n !isArrayNullOrEmpty(bitRateOptions) &&\n !isArrayNullOrEmpty(frameRateOptions) &&\n !isArrayNullOrEmpty(gopLengthOptions) &&\n !isArrayNullOrEmpty(resolutionOptions) &&\n !this.isStreamMappingEnabled;\n\n return [\n hasValidOptions,\n bitRateOptions,\n frameRateOptions,\n gopLengthOptions,\n resolutionOptions,\n shouldDisplayStreamSettingsSection\n ];\n }\n\n /**\n * Returns an existing or new dummy record that is used for disabled Medium streams.\n */\n getDummyStream(currentStreamId?: number): OnvifCameraStream {\n // Null values align with default values for unset properties\n // Also works well with our DropdownSelects\n const existingRecord = this.store.peekRecord('video/onvif-camera-stream', DummyRecordId);\n if (existingRecord) {\n existingRecord.currentStreamId = currentStreamId;\n return existingRecord;\n }\n\n return this.store.createRecord('video/onvif-camera-stream', {\n currentStreamId,\n id: DummyRecordId,\n name: this.intl.t('generic.disabled')\n });\n }\n\n /**\n * Returns a new or existing dummy record for the Medium stream that has null for all of its settings.\n */\n getDummySetting(streamId?: number): StreamSetting {\n const existingRecord = this.store.peekRecord('video/stream-setting', DummyRecordId);\n if (existingRecord) {\n // Avoid typecheck here by casting, we just want the existing record to not have an ID\n // since we display all stream settings with an ID in streamSettingDisplayProps\n existingRecord.streamId = streamId as any;\n return existingRecord;\n }\n\n return this.store.createRecord('video/stream-setting', {\n streamId,\n id: DummyRecordId\n });\n }\n\n /**\n * Refreshes the route's model.\n */\n refreshModel(): Transition {\n const { router } = this;\n\n return router.refresh(ThirdPartyStreamSettingsRouteName);\n }\n\n // endregion\n\n @action\n updateFrameRate(setting: StreamSetting, value: string): void {\n setting.frameRate = Number(value);\n }\n\n @action\n updateGopLength(setting: StreamSetting, value: string): void {\n setting.gopLength = Number(value);\n }\n\n @action\n updateBitRate(setting: StreamSetting, value: string): void {\n setting.bitRate = Number(value);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/settings/camera/video-config/third-party-stream': BaseThirdPartyStreamController;\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberVideoFamiliarSubjectsEnrollmentTerms } from 'customer-site/enums/CustomerPageUrl';\nimport { Face, Vehicle } from 'customer-site/enums/FamiliarObjectType';\n\nimport type OvReadyCamera from 'customer-site/models/video/devices/ov-ready-camera';\nimport type FamiliarSubjectCameraContext from 'customer-site/models/video/familiar-targets/familiar-subject-camera-context';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { FamiliarSubjectRouteModel } from 'customer-site/video/settings/familiar-subject/route';\n\nexport interface FamiliarSubjectCameraAccessRouteModel {\n cameraProperties: FamiliarSubjectCameraContext[];\n subjectEnrollment: FamiliarTargetEnrollment | undefined;\n}\n\n/**\n * @classdesc\n *\n * Route for the Familiar Subject Camera Access view\n */\nexport default class FamiliarSubjectCameraAccessRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n\n declare familiarSubjectObjectType: number;\n\n async model(): Promise {\n const parentModel = this.modelFor('video.settings.familiar-subject') as FamiliarSubjectRouteModel,\n subjectEnrollment = (await parentModel.enrollments).find(\n (enrollment) => enrollment.familiarObjectType === this.familiarSubjectObjectType\n );\n\n // Even though the cameras are loaded in the parent route, we use findAll to get the most up to date data\n let cameras = (await this.store.findAll('video/devices/ov-ready-camera')).toArray();\n\n if (this.familiarSubjectObjectType === Face) {\n cameras = cameras.filter((camera: OvReadyCamera) => camera.supportsFamiliarFace);\n } else {\n cameras = cameras.filter((camera: OvReadyCamera) => camera.supportsFamiliarSubjectRecognition);\n }\n\n const properties = await Promise.all(\n cameras.map(async (c: OvReadyCamera) => await c.familiarSubjectCameraProperties)\n ).then((cameraProperties) => cameraProperties.filter((p) => p !== null));\n\n return {\n cameraProperties: properties,\n subjectEnrollment: subjectEnrollment\n };\n }\n\n /** Check if we have an enrollment for the given type */\n async afterModel(): Promise {\n const parentModel = this.modelFor('video.settings.familiar-subject') as FamiliarSubjectRouteModel,\n subjectEnrollment = (await parentModel.enrollments).find(\n (enrollment) => enrollment.familiarObjectType === this.familiarSubjectObjectType\n );\n\n if (!subjectEnrollment) {\n this.familiarSubjectObjectType === Face\n ? sessionStorage.setItem('familiarObjectType', JSON.stringify(Face))\n : sessionStorage.setItem('familiarObjectType', JSON.stringify(Vehicle));\n this.navigation.transitionToRouteId(EmberVideoFamiliarSubjectsEnrollmentTerms);\n return;\n }\n }\n\n @action willTransition(): void {\n const camerasProperties = (this.modelFor(this.routeName) as FamiliarSubjectCameraAccessRouteModel)\n .cameraProperties;\n camerasProperties.forEach((p) => p.rollbackAttributes());\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n EmberVideoFamiliarSubjectsEnrollment,\n EmberVideoFamiliarSubjectsReviewFAQ\n} from 'customer-site/enums/CustomerPageUrl';\nimport { navigateToCameraAccessPageIfNoCamerasOptedIn } from 'customer-site/utils/video/settings/familiar-subject';\n\nimport type Transition from '@ember/routing/transition';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { FamiliarSubjectRouteModel } from 'customer-site/video/settings/familiar-subject/route';\n\ninterface FamiliarSubjectFAQModel {\n subjectEnrollment: FamiliarTargetEnrollment;\n}\n\n/**\n * @classdesc\n *\n * Route for the Familiar Subject Feature Management view\n */\nexport default class FamiliarSubjectFAQRoute extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n\n declare familiarSubjectObjectType: number;\n\n /** @override */\n routeId = EmberVideoFamiliarSubjectsReviewFAQ;\n\n /**\n * Redirect to the camera access page if the user has not opted in to camera access\n */\n async beforeModel(transition: Transition): Promise {\n await super.beforeModel(transition);\n\n await navigateToCameraAccessPageIfNoCamerasOptedIn(this.navigation, this.store, this.familiarSubjectObjectType);\n }\n\n async model(): Promise {\n const parentModel = this.modelFor('video.settings.familiar-subject') as FamiliarSubjectRouteModel,\n subjectEnrollment = (await parentModel.enrollments).find(\n (enrollment) => enrollment.familiarObjectType === this.familiarSubjectObjectType\n );\n\n if (!subjectEnrollment) {\n // Transition back to familiar subjects index if there's no vehicle enrollment\n this.navigation.transitionToRouteId(EmberVideoFamiliarSubjectsEnrollment);\n return;\n }\n\n return {\n subjectEnrollment\n };\n }\n\n /**\n * Rollback any unsaved changes to the enrollment if navigating away without changing the enrollment status\n */\n async rollbackModelOnTransition(): Promise {\n const model = this.modelFor>(this.routeName);\n const enrollment = await model?.subjectEnrollment;\n\n if (enrollment && !enrollment.get('isDeleted')) {\n enrollment.rollbackAttributes();\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n EmberVideoFamiliarSubjectsEnrollment,\n EmberVideoFamiliarSubjectsEnrollmentVehiclesFeatureManagement\n} from 'customer-site/enums/CustomerPageUrl';\nimport { navigateToCameraAccessPageIfNoCamerasOptedIn } from 'customer-site/utils/video/settings/familiar-subject';\n\nimport type Transition from '@ember/routing/transition';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { FamiliarSubjectRouteModel } from 'customer-site/video/settings/familiar-subject/route';\n\ninterface FamiliarSubjectFeatureManagementModel {\n subjectEnrollment: FamiliarTargetEnrollment;\n}\n\n/**\n * @classdesc\n *\n * Route for the Familiar Subject Feature Management view\n */\nexport default class FamiliarSubjectFeatureManagementRoute extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n\n declare familiarSubjectObjectType: number;\n\n /** @override */\n routeId = EmberVideoFamiliarSubjectsEnrollmentVehiclesFeatureManagement;\n\n /**\n * Redirect to the camera access page if the user has not opted in to camera access\n */\n async beforeModel(transition: Transition): Promise {\n await super.beforeModel(transition);\n\n await navigateToCameraAccessPageIfNoCamerasOptedIn(this.navigation, this.store, this.familiarSubjectObjectType);\n }\n\n async model(): Promise {\n const parentModel = this.modelFor('video.settings.familiar-subject') as FamiliarSubjectRouteModel,\n subjectEnrollment = (await parentModel.enrollments).find(\n (enrollment) => enrollment.familiarObjectType === this.familiarSubjectObjectType\n );\n\n if (!subjectEnrollment) {\n // Transition back to familiar subjects index if there's no vehicle enrollment\n this.navigation.transitionToRouteId(EmberVideoFamiliarSubjectsEnrollment);\n return;\n }\n\n return {\n subjectEnrollment\n };\n }\n\n /**\n * Rollback any unsaved changes to the enrollment if navigating away without changing the enrollment status\n */\n async rollbackModelOnTransition(): Promise {\n const model = this.modelFor>(this.routeName);\n const enrollment = await model?.subjectEnrollment;\n\n if (enrollment && !enrollment.get('isDeleted')) {\n enrollment.rollbackAttributes();\n }\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport { EmberVideoFamiliarSubjectsEnrollment } from 'customer-site/enums/CustomerPageUrl';\nimport { navigateToCameraAccessPageIfNoCamerasOptedIn } from 'customer-site/utils/video/settings/familiar-subject';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type Transition from '@ember/routing/transition';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { FamiliarSubjectRouteModel } from 'customer-site/video/settings/familiar-subject/route';\n\nexport interface FamiliarSubjectIncorrectPhotosRouteModel {\n enrollment: FamiliarTargetEnrollment;\n incorrectImages: ArrayProxy;\n}\n\n/**\n * @classdesc\n *\n * Route for displaying images of images of familiar vehicles that have been reviewed as incorrect\n */\nexport default class FamiliarSubjectIncorrectPhotosRoute extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n\n declare familiarObjectTypes: number;\n\n /**\n * Redirect to the camera access page if the user has not opted in to camera access\n */\n async beforeModel(transition: Transition): Promise {\n await super.beforeModel(transition);\n\n await navigateToCameraAccessPageIfNoCamerasOptedIn(this.navigation, this.store, this.familiarObjectTypes);\n }\n\n async model(): Promise {\n const parentModel = this.modelFor('video.settings.familiar-subject') as FamiliarSubjectRouteModel,\n subjectEnrollment = (await parentModel.enrollments).find(\n (enrollment) => enrollment.familiarObjectType === this.familiarObjectTypes\n );\n\n if (!subjectEnrollment) {\n // Transition back to familiar subjects index if there's no vehicle enrollment\n this.navigation.transitionToRouteId(EmberVideoFamiliarSubjectsEnrollment);\n return;\n }\n\n const incorrectImages = await subjectEnrollment.incorrectImages;\n return {\n enrollment: subjectEnrollment,\n incorrectImages\n };\n }\n\n /** @override */\n async rollbackModelOnTransition(): Promise {\n const model = this.modelFor>(this.routeName);\n model?.enrollment.incorrectImages.forEach((i) => i.rollbackAttributes());\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from 'customer-site/classes/base-route';\nimport {\n EmberVideoFamiliarSubjectsEnrollmentRecentImages,\n EmberVideoFamiliarSubjectsEnrollment\n} from 'customer-site/enums/CustomerPageUrl';\nimport { navigateToCameraAccessPageIfNoCamerasOptedIn } from 'customer-site/utils/video/settings/familiar-subject';\nimport { differenceInMinutes } from 'date-fns';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type Transition from '@ember/routing/transition';\nimport type FamiliarTargetEnrollment from 'customer-site/models/video/familiar-targets/familiar-target-enrollment';\nimport type FamiliarTargetEnrollmentImage from 'customer-site/models/video/familiar-targets/familiar-target-enrollment-image';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { FamiliarSubjectRouteModel } from 'customer-site/video/settings/familiar-subject/route';\n\nexport interface FamiliarSubjectRecentPhotosRouteModel {\n enrollment: FamiliarTargetEnrollment;\n recentImages: ArrayProxy;\n shouldDisplayWaitText: boolean;\n}\n\n/*\n * Amount of time to display text to return to page after an enrollment has been created\n */\nconst NewEnrollmentMinutes = 20;\n\n/**\n * @classdesc\n *\n * Route for displaying new, unreviewed familiar subject clusters for review\n */\nexport default class FamiliarSubjectsRecentImagesRoute extends AdcBaseRoute {\n @service declare navigation: NavigationService;\n\n routeId = EmberVideoFamiliarSubjectsEnrollmentRecentImages;\n declare familiarSubjectObjectType: number;\n\n /**\n * Redirect to the camera access page if the user has not opted in to camera access\n */\n async beforeModel(transition: Transition): Promise {\n await super.beforeModel(transition);\n\n await navigateToCameraAccessPageIfNoCamerasOptedIn(this.navigation, this.store, this.familiarSubjectObjectType);\n }\n\n async model(): Promise {\n const parentModel = this.modelFor('video.settings.familiar-subject') as FamiliarSubjectRouteModel,\n subjectEnrollment = (await parentModel.enrollments).find(\n (enrollment) => enrollment.familiarObjectType === this.familiarSubjectObjectType\n );\n\n if (!subjectEnrollment) {\n // Transition back to familiar subjects index if there's no subject enrollment\n this.navigation.transitionToRouteId(EmberVideoFamiliarSubjectsEnrollment);\n return;\n }\n\n // display return back to page message if enough time hasn't passed yet\n const shouldDisplayWaitText =\n differenceInMinutes(new Date(), subjectEnrollment.startDateUtc) < NewEnrollmentMinutes;\n\n const recentImages = await subjectEnrollment.recentImages;\n\n return {\n enrollment: subjectEnrollment,\n recentImages,\n shouldDisplayWaitText\n };\n }\n\n /** @override */\n async rollbackModelOnTransition(): Promise {\n const model = this.modelFor>(this.routeName);\n model?.enrollment.recentImages.forEach((i) => i.rollbackAttributes());\n }\n}\n","import IntercomAddLoginsRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/intercom-add-logins-request-body';\n\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * Adds logins to the intercom, granting the necessary roles and permissions to the login.\n */\nasync function addLoginsToIntercom(intercomLogins: string[], ajax: AjaxService): Promise {\n if (!intercomLogins.length) {\n return;\n }\n\n const request = new IntercomAddLoginsRequestBody(intercomLogins);\n // Send update to CDN.\n ajax.apiRequest(`api/video/settings/intercom/addLoginsToIntercom`, undefined, request.serialize(), 'POST');\n}\n\nexport default addLoginsToIntercom;\n","/**\n * @classdesc\n * Base request body class to be used in ajax api request.\n */\nexport default abstract class BaseRequestBody {\n // Method for validating request data, such as business logic constraints.\n validate(): void {}\n\n // Method to serialize the data.\n serialize(): string {\n return JSON.stringify(this);\n }\n}\n","import BaseRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/base-request-body';\n\nclass IntercomAddLoginsRequestBody extends BaseRequestBody {\n constructor(public intercomLogins: string[]) {\n super();\n }\n}\n\nexport default IntercomAddLoginsRequestBody;\n","import BaseRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/base-request-body';\n\nimport type { IntercomContactInsert } from 'customer-site/video/settings/intercom/name-directory-list/controller';\n\nclass IntercomBulkInsertContactsRequestBody extends BaseRequestBody {\n constructor(public contacts: IntercomContactInsert[]) {\n super();\n }\n}\n\nexport default IntercomBulkInsertContactsRequestBody;\n","import BaseRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/base-request-body';\n\nclass IntercomCreateCallForwardingRulesRequestBody extends BaseRequestBody {\n constructor(public apartmentNumbers: number[], public deviceId: string) {\n super();\n }\n}\n\nexport default IntercomCreateCallForwardingRulesRequestBody;\n","import BaseRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/base-request-body';\n\nclass IntercomRemoveLoginsRequestBody extends BaseRequestBody {\n constructor(public intercomLoginIds: number[], public intercomDeviceIds: number[]) {\n super();\n }\n}\n\nexport default IntercomRemoveLoginsRequestBody;\n","import { inject as service } from '@ember/service';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * Base route for intercom pages. Used to check that the current context is at the single system level instead of the group level.\n * This is necessary because our intercom pages require a unit.\n */\nexport default class BaseIntercomRoute extends BaseRoute {\n @service declare store: ServiceRegistry['store'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare ajax: ServiceRegistry['ajax'];\n @service declare router: ServiceRegistry['router'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n\n beforeModel(): void {\n if (this.identityManager.isEnterprise) {\n this.router\n .transitionTo('index')\n .finally(() =>\n this.notificationManager.addError(\n this.intl.t('video.settings.intercom.intercomLocationNotSelected')\n )\n );\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\n\n/**\n * @classdesc\n * Base controller for intercom setting pages.\n */\nexport default class BaseIntercomSettingsController extends Controller {\n queryParams = ['deviceId'];\n\n @tracked deviceId: number | null = null;\n}\n","import IntercomRemoveLoginsRequestBody from 'customer-site/video/settings/intercom/ajax-request-utils/intercom-remove-logins-request-body';\n\nimport type AjaxService from 'customer-site/services/ajax';\n\n/**\n * Removes the intercom role and intercom device permissions from a login.\n */\nasync function removeLoginsFromIntercoms(\n oldLoginIds: number[],\n newLoginIds: number[],\n intercomDeviceIds: number[],\n ajax: AjaxService\n): Promise {\n if (!oldLoginIds.length || !intercomDeviceIds.length) {\n return;\n }\n\n const difference = oldLoginIds.filter((login) => !newLoginIds.includes(login));\n const request = new IntercomRemoveLoginsRequestBody(difference, intercomDeviceIds);\n\n if (difference.length) {\n await ajax.apiRequest(\n `api/video/settings/intercom/removeLoginsFromIntercom`,\n undefined,\n request.serialize(),\n 'POST'\n );\n }\n}\n\nexport default removeLoginsFromIntercoms;\n","import { tracked } from '@glimmer/tracking';\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport EmberController from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport { alias, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Drawing } from 'customer-site/components/video/rules/draw-window/index';\nimport { EmberVideoSettingsMotionConfiguration } from 'customer-site/enums/CustomerPageUrl';\nimport {\n DeepMotionDetection,\n NoMotionDetection,\n StandardMotionDetection\n} from 'customer-site/enums/MotionDetectionType';\nimport { getDeviceIdFromGlobalId } from 'customer-site/utils/general';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport { reject } from 'rsvp';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type MotionConfigurationSetting from 'customer-site/models/video/settings/motion-configuration-setting';\nimport type { Point } from 'customer-site/utils/math-methods';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type VideoSettingsMotionConfiguration from './route';\n\n/**\n * Represents the maximum number of exclusion zones that can be drawn per camera.\n */\nconst MAX_NUM_ZONES = 3;\n\n/**\n * Maximum value for the People & Vehicle Motion (DMD) sensitivity slider.\n */\nconst MAX_SENSITIVITY_SLIDER_VALUE = 5;\n\n/**\n * Minimum value for the People & Vehicle Motion (DMD) sensitivity slider.\n */\nconst MIN_SENSITIVITY_SLIDER_VALUE = 1;\n\n/**\n * Default value for the People & Vehicle Motion (DMD) sensitivity slider.\n */\nexport const DEFAULT_SENSITIVITY_SLIDER_VALUE = 3;\n\nexport default class MotionConfigurationController extends EmberController {\n // region Services\n @service declare intl: ADCIntlService;\n @service declare store: ServiceRegistry['store'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare notificationManager: NotificationManager;\n\n // endregion\n\n /**\n * Route query params.\n */\n queryParams = ['isVSR'];\n\n /**\n * Query param for isVSR query param.\n */\n isVSR?: boolean;\n\n declare model: ModelFrom;\n\n /**\n * The customer page URL enum for this particular settings page.\n */\n settingsPageId = EmberVideoSettingsMotionConfiguration;\n\n /**\n * Max number of points that can be drawn on the DrawWindow.\n */\n maxPoints = 8;\n\n /**\n * The maximum value for the sensitivity slider.\n */\n maxSensitivitySliderValue = MAX_SENSITIVITY_SLIDER_VALUE;\n\n /**\n * The minimum value for the sensitivity slider.\n */\n minSensitivitySliderValue = MIN_SENSITIVITY_SLIDER_VALUE;\n\n /**\n * The default value for the sensitivity slider.\n */\n defaultSensitivitySliderValue = DEFAULT_SENSITIVITY_SLIDER_VALUE;\n\n @tracked resolvedModel?: ResolvedModelFrom;\n\n @alias('resolvedModel.camera.svrSupportsDeepMotionDetection')\n svrSupportsDeepMotionDetection?: boolean;\n\n @alias('motionConfigurationSetting.motionDetectionType')\n motionDetectionType?: number;\n\n @alias('motionConfigurationSetting.motionZones')\n motionZones?: Record>;\n\n @alias('motionConfigurationSetting.dmdConfidence')\n dmdConfidence?: number;\n\n /**\n * The motion configuration settings for the camera.\n */\n @reads('resolvedModel.motionConfigurationSetting')\n declare motionConfigurationSetting: MotionConfigurationSetting;\n\n /**\n * Whether the user can edit privacy zones.\n */\n @reads('motionConfigurationSetting.canEditMotionConfiguration')\n declare canEditMotionConfiguration: boolean;\n\n /**\n * The name of the SVR that the camera has a recording schedule on.\n */\n @reads('motionConfigurationSetting.connectedSVRName')\n declare connectedSVRName: string;\n\n /**\n * Whether the camera's connected SVR has local display enabled.\n */\n @reads('motionConfigurationSetting.hasLocalDisplayEnabledOnSVR')\n declare hasLocalDisplayEnabledOnSVR: boolean;\n\n /**\n * Whether the SVR has reached its maximum number of schedules using DMD as the motion detection type.\n */\n @reads('motionConfigurationSetting.hasMaxDMDSchedulesOnSVR')\n declare hasMaxDMDSchedulesOnSVR: boolean;\n\n /**\n * This will override the instructions when drawing a new shape on the DrawWindow.\n */\n get newShapeInstructions(): string | null {\n if (!this.canEditMotionConfiguration) {\n return null;\n }\n\n const drawWindowResources = 'components.video.rules.draw-window',\n drawNewShape = this.intl.t(\n `${drawWindowResources}.${isMobileBrowser() ? 'drawNewShapeMobile' : 'drawNewShape'}`\n ),\n customShape = this.intl.tc(this, 'instructionsCreateExclusionZone'),\n customShapeFinish = this.intl.t(`${drawWindowResources}.instructionsCustomShapeFinish`);\n\n return `${drawNewShape} ${customShape} ${customShapeFinish}`;\n }\n\n /**\n * This will override the editShapeInstructions when adjusting a pre-existing shape on the DrawWindow.\n */\n get editShapeInstructions(): string | null {\n return this.canEditMotionConfiguration\n ? this.intl.tc(\n this,\n isMobileBrowser() ? 'instructionsMoveExclusionZoneMobile' : 'instructionsMoveExclusionZone'\n )\n : null;\n }\n\n /**\n * The unitId-deviceId of the camera.\n */\n @computed('model.id')\n get deviceId(): string {\n return getDeviceIdFromGlobalId(this.model.id);\n }\n\n /**\n * The motion zone drawings which are passed into the DrawWindow component.\n */\n @tracked dictionaryOfDrawings: Record = {\n 0: new Drawing(),\n 1: new Drawing(),\n 2: new Drawing()\n };\n\n /**\n * Options for Motion Detection Types. Select the appropriate option if there was a motionDetectionType on the model.\n */\n get modeOptions(): Promise[]> {\n return (async () => {\n const motionConfigurationSetting = this.motionConfigurationSetting;\n\n if (!motionConfigurationSetting) {\n return [];\n }\n\n const selectedMotionDetectionType =\n motionConfigurationSetting.motionDetectionType === NoMotionDetection\n ? -1\n : motionConfigurationSetting.motionDetectionType;\n\n return [\n new BinaryListItem({\n label: this.intl.tc(this, 'standardMotionDetection'),\n state: selectedMotionDetectionType === StandardMotionDetection,\n props: {\n descText: this.intl.tc(this, 'standardMotionDetectionDescription')\n }\n }),\n new BinaryListItem({\n label: this.intl.tc(this, 'deepMotionDetection'),\n state: selectedMotionDetectionType === DeepMotionDetection,\n props: {\n descText: this.intl.tc(this, 'deepMotionDetectionDescription')\n }\n })\n ];\n })();\n }\n\n /**\n * Converts the dmdConfidence value to a slider value.\n * @note the slider value is *sensitivity*, which is inversely proportional to dmdConfidence.\n * Example: When we set the slider to a high sensitivity of 78, our confidence will be (100 - 78) = 22.\n */\n get currentSliderValue(): number {\n if (this.dmdConfidence == null) {\n return DEFAULT_SENSITIVITY_SLIDER_VALUE;\n }\n\n switch (this.dmdConfidence) {\n case 30:\n return 5;\n case 50:\n return 4;\n case 70:\n return 3;\n case 80:\n return 2;\n case 90:\n return 1;\n default:\n return DEFAULT_SENSITIVITY_SLIDER_VALUE;\n }\n }\n\n /**\n * Whether we have selected DeepMotionDetection as the motion detection type.\n * For example, this is used to determine whether the sensitivity slider should be shown\n */\n get deepMotionDetectionSelected(): boolean {\n return this.motionDetectionType === DeepMotionDetection;\n }\n\n @action\n cancel(): void {\n this.contextManager.transitionToPreviousRoute();\n }\n\n /**\n * Updates dmdConfidence value when slider value is changed.\n */\n @action\n sensitivitySliderChanged(sliderValue: number): void {\n switch (sliderValue) {\n case 1:\n this.dmdConfidence = 90;\n break;\n case 2:\n this.dmdConfidence = 80;\n break;\n case 3:\n this.dmdConfidence = 70;\n break;\n case 4:\n this.dmdConfidence = 50;\n break;\n case 5:\n this.dmdConfidence = 30;\n break;\n default:\n this.dmdConfidence = 70;\n break;\n }\n }\n\n /**\n * Updates the model with the selected motion detection type when the selected button items are changed.\n */\n @action\n onMotionDetectionTypeChange(motionDetectionTypes: BinaryListItem[]): void {\n this.motionDetectionType = motionDetectionTypes[0].state ? StandardMotionDetection : DeepMotionDetection;\n }\n\n /**\n * Instead of just populating resolvedModel, we also populate a dictionary of drawings to be used on the Draw Window\n */\n @action\n dataLoaded(resolvedModel: ResolvedModelFrom) {\n this.resolvedModel = resolvedModel;\n\n //Initialize the dictionary of drawings with the motionZones data.\n const { motionZones } = this.motionConfigurationSetting,\n indexes = [...Array(MAX_NUM_ZONES).keys()],\n dictionaryOfDrawings: Record = {};\n indexes.forEach((index) => {\n const motionZone = motionZones[index];\n let points;\n\n if (motionZone) {\n points = motionZone;\n }\n dictionaryOfDrawings[index] = new Drawing(points);\n });\n\n this.dictionaryOfDrawings = dictionaryOfDrawings;\n }\n\n /**\n * Attempts to save the motion configuration settings and posts a notification based on the result.\n */\n @action\n async save(): Promise {\n const { dictionaryOfDrawings } = this,\n allDrawingIndexes = Object.keys(dictionaryOfDrawings).map((index) => parseInt(index)),\n allDrawingsCompletedOrEmpty = allDrawingIndexes.every((index) => {\n const drawing = dictionaryOfDrawings[index];\n\n return drawing.drawingCompleted || !drawing.points.length;\n });\n\n // If any of the drawings are not completed or empty, we should not save the zones.\n if (!allDrawingsCompletedOrEmpty) {\n this.notificationManager.addError(this.intl.tc(this, 'completeOrClearShapesToSave'));\n return reject();\n }\n\n const drawings = Object.keys(dictionaryOfDrawings).map((index) => parseInt(index)),\n dictionaryOfDrawingsToSave: Record> = {};\n\n // Add the drawings onto the dictionaryOfDrawingsToSave if they have points.\n drawings.forEach((index) => {\n const points = this.dictionaryOfDrawings[index].points;\n\n if (points.length) {\n dictionaryOfDrawingsToSave[index] = points;\n }\n });\n\n // Saves the drawings to our model.\n this.motionZones = dictionaryOfDrawingsToSave;\n\n // Save the record.\n try {\n await this.motionConfigurationSetting?.save();\n\n return this.notificationManager.addSuccess(this.intl.t('generic.savedSuccessfully'));\n } catch (response) {\n return reject();\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/settings/motion-configuration': MotionConfigurationController;\n }\n}\n","import { getCaughtError } from 'customer-site/utils/general';\nimport { GET } from '@adc/ajax/services/adc-ajax';\nimport { EmberVideoSvrTimeline, EmberEnterpriseVideoSvrTimeline } from '../../enums/CustomerPageUrl';\nimport BasePlaybackRoute from '../base-playback-route';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type { BasePlaybackQueryParams, CameraFilter } from '../base-playback-route';\n\n/**\n * Returns the page url for either the enterprise svr timeline page or the regular, depending on isEnterprise\n *\n * @param isEnterprise\n * @returns\n */\nexport function getContextAwareSvrTimelinePage(isEnterprise: boolean) {\n return isEnterprise ? EmberEnterpriseVideoSvrTimeline : EmberVideoSvrTimeline;\n}\n\n/**\n * @classdesc\n * Route for SVR playback page.\n */\nexport default class SvrTimelineRoute extends BasePlaybackRoute {\n /** Ensure queryParams inherits superclass attributes */\n mergedProperties = ['queryParams'];\n\n /** @override */\n routeId = EmberVideoSvrTimeline;\n\n /** @override */\n cameraModel = 'video/devices/camera';\n\n /** @override */\n cameraFilterProperty: CameraFilter = 'hasSvrSchedule';\n\n async model(params: BasePlaybackQueryParams): Promise> {\n const model = await super.model(params),\n svrs = this.store.findAll('video/devices/svr'),\n groupResolution = this.ajax.apiRequestForValue(\n 'video/videoSources/liveVideoSources/getDefaultResolution',\n undefined,\n null,\n GET\n ),\n promises = [svrs, groupResolution];\n\n await Promise.all(promises)\n .then(() => {\n model.svrs = svrs;\n model.hasVideoDeviceThatSupportsPlaybackType = !!svrs.length;\n svrs.forEach((svr) => {\n const videoSources = svr.get('videoSources');\n videoSources.forEach((source) => source.get('recordingSchedule'));\n });\n\n // This variable should be a resolved promise at this point, using 'then' to extract the object from it.\n groupResolution.then((resolution) => {\n model.groupResolution = resolution;\n });\n })\n .catch((error) => {\n const errMsg = getCaughtError(error);\n console.error(errMsg);\n });\n\n return model;\n }\n}\n","import { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { inject as service } from '@ember/service';\nimport {\n OPERATOR_CAMERA_GROUP_ID,\n OPERATOR_SVR_GROUP_ID,\n OPERATOR_SD_GROUP_ID,\n ESCALATED_EVENTS_CAMERA_GROUP_ID,\n createOrUpdateCameraGroupWithCameras\n} from 'customer-site/models/video/camera-group';\nimport { toggleFullScreen } from 'customer-site/utils/dom';\nimport { getDeviceIdFromGlobalId } from 'customer-site/utils/general';\nimport {\n COOKIE_LAYOUT,\n COOKIE_SELECTED_CAMERA_GROUP,\n COOKIE_SELECTED_CAMERAS,\n getCookieForPage,\n VIDEO_STREAMING_FEATURES_UNIFIED_ROUTE_NAME\n} from 'customer-site/utils/video/cookies';\nimport { GET } from '@adc/ajax/services/adc-ajax';\nimport AdcBaseRoute from '../classes/base-route';\n\n/**\n * Returns the list of camera groups we can display on the live view page.\n */\nexport function getLiveViewDisplayableCameraGroups(store) {\n return store\n .query('video/camera-group', {\n filterByLiveViewDisplayable: true\n })\n .then((groups) => groups.slice());\n}\n\n/**\n * Base route for video streaming features routes\n *\n * @class video.VideoStreamingFeaturesRoute\n * @extends classes.BaseRoute\n */\nconst VideoStreamingFeaturesRoute = AdcBaseRoute.extend(\n /** @lends video.BaseRoute# */ {\n cookieManager: service(),\n store: service(),\n ajax: service(),\n intl: service(),\n notificationManager: service(),\n identityManager: service(),\n videoPreloader: service('video.video-preloader'),\n\n /**\n * If we should skip setting parameters on the page based on cache data. (for preselecting cameras/layouts)\n */\n ignoreCache: false,\n\n /**\n * When the controller resets, lets clear out cameraId and cameraGroupId\n */\n resetController(controller, isExiting) {\n if (isExiting) {\n // resetting these properties so that we rely on the cookie values when transitioning between VSF pages\n controller.set('cameraId', null);\n controller.set('cameraGroupId', null);\n }\n },\n\n /** @override */\n async setupController(controller, model) {\n // need an await otherwise window.location.search might be empty when we try to get it. (some sort of timing thing)\n await this._super(controller, model);\n\n const { ignoreCache, routeName } = this;\n\n if (ignoreCache) {\n return;\n }\n\n const cookieLayoutType = getCookieForPage.call(this, routeName, COOKIE_LAYOUT),\n urlSearchParams = new URLSearchParams(window.location.search),\n queryParams = Object.fromEntries(urlSearchParams.entries());\n\n const routeNameToUseForCamSelection = model.videoStreamingPermissions.get('hasModifiedCameraSelection')\n ? VIDEO_STREAMING_FEATURES_UNIFIED_ROUTE_NAME\n : routeName;\n\n const cookieSelectedCameras = getCookieForPage.call(\n this,\n routeNameToUseForCamSelection,\n COOKIE_SELECTED_CAMERAS\n ),\n cookieSelectedCameraGroup = getCookieForPage.call(\n this,\n routeNameToUseForCamSelection,\n COOKIE_SELECTED_CAMERA_GROUP\n );\n\n // intentionally using != instead of !== to catch both null and undefined\n // for all of these we are making sure that we only pull from the cookie if we don't have querystring parameters.\n // Querystring always takes priority over cookie when available.\n if (cookieLayoutType != null && queryParams.layoutType == null) {\n controller.set('layoutType', cookieLayoutType);\n }\n\n if (queryParams.cameraId == null && queryParams.cameraGroupId == null) {\n if (cookieSelectedCameras != null) {\n controller.set('cameraId', cookieSelectedCameras);\n controller.set('cameraGroupId', null);\n } else if (cookieSelectedCameraGroup != null) {\n controller.set('cameraId', null);\n controller.set('cameraGroupId', cookieSelectedCameraGroup);\n }\n }\n },\n\n /**\n * Gets the device ids with Remote Video Monitoring Console rules, and creates a dictionary of\n * the most recent Remote Video Monitoring Console triggers for each device.\n * This is used when creating the Remote Video Monitoring Console camera group.\n */\n async getDeviceIdsWithEERulesAndMostRecentEventTimeForDevices(\n recentEscalatedEventsPromise,\n deviceIdsWithEERulesPromise,\n notificationManager\n ) {\n const { recentEscalatedEvents, deviceIdsWithEERules } = await Promise.all([\n recentEscalatedEventsPromise,\n deviceIdsWithEERulesPromise\n ])\n .then(([recentEscalatedEvents, deviceIdsWithEERules]) => {\n return {\n recentEscalatedEvents,\n deviceIdsWithEERules\n };\n })\n .catch((error) => {\n notificationManager.addError(error.errors[0].detail);\n return {\n recentEscalatedEvents,\n deviceIdsWithEERules\n };\n });\n\n // Create a dictionary with\n // key: The deviceId\n // value: The most recent time that device triggered EE.\n const mostRecentEventTimeForDevice = {};\n recentEscalatedEvents.forEach((event) => {\n const mostRecentEventTime = mostRecentEventTimeForDevice[event.deviceId];\n if (!mostRecentEventTime || mostRecentEventTime < event.eventDateLocal) {\n mostRecentEventTimeForDevice[event.deviceId] = event.eventDateLocal;\n }\n });\n\n return { deviceIdsWithEERules, mostRecentEventTimeForDevice };\n },\n\n /**\n * Compares two cameras.\n * Orders them first by their timestamp in mostRecentEventTimeForDevice, then by their description.\n *\n * @param deviceIdToTimestampDictionary A dictionary where device ids map to a timestamp.\n */\n sortCamerasByTimestampThenDescription(deviceIdToTimestampDictionary) {\n return (a, b) => {\n // Store these values as constants so it's easier to understand what they represent.\n const SortABeforeB = -1,\n SortBBeforeA = 1;\n\n // Get the timestamp, if one exists, for the given camera.\n const aDateTime = deviceIdToTimestampDictionary[parseInt(getDeviceIdFromGlobalId(a.id))],\n bDateTime = deviceIdToTimestampDictionary[parseInt(getDeviceIdFromGlobalId(b.id))];\n\n if (!!aDateTime && !!bDateTime) {\n return aDateTime > bDateTime ? SortABeforeB : SortBBeforeA;\n }\n\n if (aDateTime) {\n return SortABeforeB;\n }\n\n if (bDateTime) {\n return SortBBeforeA;\n }\n\n return a.description > b.description ? SortBBeforeA : SortABeforeB;\n };\n },\n\n /**\n * Creates and returns custom camera groups\n * @param filterProperty Property based on which cameras are filtered on operator SD/SVR pages\n * @param cameras Array of cameras to be used\n */\n async getCameraGroups(filterProperty, cameras) {\n const { store, ajax, intl, notificationManager, identityManager, routeName } = this,\n isVisualVerification = identityManager.identityModel.isVisualVerification,\n isEscalatedEvents = identityManager.identityModel.isEscalatedEvents;\n if (isVisualVerification) {\n if (filterProperty) {\n // Create an operator camera group containing only the SD or SVR cameras that are not excluded by the customer.\n const filteredCameras = (await cameras).filter(\n (camera) => !camera.excludedFromVisualVerification && camera[filterProperty]\n );\n\n const name = intl.t('generic.video.allCameras'),\n operatorCameraGroup = createOrUpdateCameraGroupWithCameras(\n store,\n routeName === 'visual-verification.svr-timeline'\n ? OPERATOR_SVR_GROUP_ID\n : OPERATOR_SD_GROUP_ID,\n filteredCameras,\n name,\n 1,\n 'folder-open'\n );\n\n return [operatorCameraGroup];\n }\n\n const isCdql = await store.findAll('visual-verification/page-feature'),\n enableCDQL = !!isCdql?.firstObject?.enableCDQL;\n\n if (enableCDQL) {\n // When Camera-Device Quick Links(CDQL) is enabled, the liveViewDevices endpoint will return a list of id's containing cameras for VV and EE filtered and sorted in the backend.\n const [liveViewDevices, availableCameras] = await Promise.all([\n ajax.apiRequest('api/visualVerification/liveViewDevices', undefined, null, GET),\n cameras\n ]);\n\n const liveViewDevicesContent = liveViewDevices.value,\n updatedCameraList = liveViewDevicesContent.map((device) => {\n return availableCameras.filter((camera) => {\n return camera?.id?.includes(device);\n })[0];\n }),\n name = intl.t('generic.video.allCameras'),\n operatorCameraGroup = createOrUpdateCameraGroupWithCameras(\n store,\n OPERATOR_CAMERA_GROUP_ID,\n updatedCameraList,\n name,\n 1,\n 'folder-open'\n );\n\n return [operatorCameraGroup];\n }\n\n // Create a customer camera group containing only the cameras that are not excluded by the user.\n const filteredCameras = (await cameras).filter(\n (camera) => !camera.excludedFromVisualVerification && camera.supportsLiveView\n );\n\n const name = intl.t('generic.video.allCameras'),\n operatorCameraGroup = createOrUpdateCameraGroupWithCameras(\n store,\n OPERATOR_CAMERA_GROUP_ID,\n filteredCameras,\n name,\n 1,\n 'folder-open'\n );\n\n return [operatorCameraGroup];\n }\n\n if (isEscalatedEvents) {\n // For EE, create a camera group for all cameras that have an enabled EE rule.\n // Order by which triggered EE most recently, then description.\n\n const recentEscalatedEventsPromise = ajax.apiRequestForDataRecords(\n 'escalatedevents/escalatedEvents/getRecentEscalatedEvents'\n ),\n deviceIdsWithEERulesPromise = ajax.apiRequestForValue(\n 'escalatedevents/escalatedEvents/getDeviceIdsWithEnabledEscalatedEventRules'\n );\n\n const [{ deviceIdsWithEERules, mostRecentEventTimeForDevice }, resolvedCameras] = await Promise.all([\n this.getDeviceIdsWithEERulesAndMostRecentEventTimeForDevices(\n recentEscalatedEventsPromise,\n deviceIdsWithEERulesPromise,\n notificationManager\n ),\n cameras\n ]);\n\n const orderedDevices = resolvedCameras\n .filter((c) => {\n const deviceId = parseInt(getDeviceIdFromGlobalId(c.id)),\n hasEnabledEERule = deviceIdsWithEERules.includes(deviceId),\n hasTriggeredEE = mostRecentEventTimeForDevice[deviceId] !== undefined;\n\n return (\n !c.excludedFromEscalatedEvents && c.supportsLiveView && (hasEnabledEERule || hasTriggeredEE)\n );\n })\n .sort(this.sortCamerasByTimestampThenDescription(mostRecentEventTimeForDevice));\n\n const name = intl.t('video.live-view.eeCameraGroupName'),\n escalatedEventsCameraGroup = createOrUpdateCameraGroupWithCameras(\n store,\n ESCALATED_EVENTS_CAMERA_GROUP_ID,\n orderedDevices,\n name,\n 2,\n 'folder-open'\n );\n\n return [escalatedEventsCameraGroup];\n }\n\n return await getLiveViewDisplayableCameraGroups(store);\n },\n\n /** @ignore */\n actions: /** @lends video.VideoStreamingFeaturesRoute# */ {\n /**\n * Make sure we exit theater mode/full screen whenever we navigate out of the page.\n */\n willTransition() {\n this.videoPreloader.resetPreloadedStreams();\n\n // Don't worry about exiting full screen if the user is on a phone/tablet.\n if (isMobileBrowser()) {\n return;\n }\n\n toggleFullScreen(false);\n this.controllerFor('application').set('isFullScreen', false);\n }\n }\n }\n);\n\nexport default VideoStreamingFeaturesRoute;\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { computed } from '@ember/object';\nimport { filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Human } from '../enums/ClassificationCategoryType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type ImageSensor from 'customer-site/models/image-sensor/image-sensor';\nimport type Camera from 'customer-site/models/video/devices/camera';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type VisualVerificationItem from '../classes/visual-verification/visual-verification-item';\nimport type VVBaseRoute from './base-route';\n\n/**\n * Returns a list of filtered events.\n */\nexport function filterEventsForPersonDetected(\n vvItems: VisualVerificationItem[],\n peopleDetected: boolean\n): VisualVerificationItem[] {\n return vvItems.filter((item) => {\n const hasHuman = item.clipItem?.model.ovClassifications.includes(Human);\n return peopleDetected ? hasHuman : !!(!item.model.isVideoEvent || !hasHuman);\n });\n}\n\n/**\n * A base controller for displaying a list of visual verification events for Central Station Visual Verification.\n */\nexport default abstract class VVBaseController extends EmberController {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n\n // region Component state\n\n /**\n * The resolved model used for this route.\n */\n abstract resolvedModel?: ResolvedModelFrom;\n\n /**\n * Array of selected device ids\n */\n @tracked selectedDevices?: string[];\n\n /**\n * Array of cameras available for visual verification\n */\n @filterBy('resolvedModel.cameras', 'excludedFromVisualVerification', false)\n availableCameras?: Camera[];\n\n /**\n * Array of cameras not available for visual verification.\n */\n @filterBy('resolvedModel.cameras', 'excludedFromVisualVerification', true)\n excludedCameras?: Camera[];\n\n /**\n * Array of image sensors available for visual verification\n */\n @filterBy('resolvedModel.imageSensors', 'excludedFromVisualVerification', false)\n availableImageSensors?: ImageSensor[];\n\n /**\n * Array of image sensors not available for visual verification.\n */\n @filterBy('resolvedModel.imageSensors', 'excludedFromVisualVerification', true)\n excludedImageSensors?: ImageSensor[];\n\n /**\n * Returns the IDs of the currently selected devices, defaulting to all devices if selected devices is undefined.\n */\n getSelectedDevices() {\n const {\n availableCameras = [],\n availableImageSensors = [],\n selectedDevices = [...availableCameras.mapBy('id'), ...availableImageSensors.mapBy('id')]\n } = this;\n\n return selectedDevices;\n }\n\n /**\n * Indicates if at least one camera or image sensor is hidden.\n */\n @computed('excludedCameras.length', 'excludedImageSensors.length')\n get areDevicesExcluded(): boolean {\n const { excludedCameras = [], excludedImageSensors = [] } = this;\n return excludedCameras.length + excludedImageSensors.length > 0;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'visual-verification/base-controller': VVBaseController;\n }\n}\n","import ArrayProxy from '@ember/array/proxy';\nimport { inject as service } from '@ember/service';\nimport BaseRoute from 'customer-site/classes/base-route';\n\nimport type Store from '@ember-data/store';\nimport type ImageSensor from 'customer-site/models/image-sensor/image-sensor';\nimport type SystemModel from 'customer-site/models/systems/system';\nimport type Camera from 'customer-site/models/video/devices/camera';\n\ntype VisualVerificationRoute = {\n cameras: ADCAsyncStoreFindAll;\n imageSensors: ADCAsyncStoreFindAll;\n showPreferredTimezone: boolean;\n};\n\nexport default class VVBaseRoute extends BaseRoute {\n @service declare store: Store;\n\n /** @override */\n model(): VisualVerificationRoute {\n const { store } = this;\n\n // Check for the presence of image sensors to avoid fetching the models from the backend if we lack permissions.\n const vvImageSensors = this.identityManager.getSelectedSystem().then((result: SystemModel | undefined) => {\n if (!result || result.hasMany('imageSensors').ids().length == 0) {\n return new ArrayProxy([]);\n }\n\n return store.findAll('image-sensor/image-sensor');\n }) as ADCAsyncStoreFindAll;\n\n return {\n cameras: store.findAll('video/devices/camera'),\n imageSensors: vvImageSensors,\n showPreferredTimezone: false\n };\n }\n}\n","import AccessPointMessageHandler from 'customer-site/websockets/handlers/access-control-access-points';\nimport CameraLightMessageHandler from 'customer-site/websockets/handlers/camera-lights';\nimport FleetFilterCountsMessageHandler from 'customer-site/websockets/handlers/fleet-filter-counts';\nimport FleetVehicleMessageHandler from 'customer-site/websockets/handlers/fleet-vehicles';\nimport GarageDoorMessageHandler from 'customer-site/websockets/handlers/garage-doors';\nimport GateMessageHandler from 'customer-site/websockets/handlers/gates';\nimport IqRoutersMessageHandler from 'customer-site/websockets/handlers/iq-routers';\nimport LightMessageHandler from 'customer-site/websockets/handlers/lights';\nimport LockMessageHandler from 'customer-site/websockets/handlers/locks';\nimport MpersDeviceMessageHandler from 'customer-site/websockets/handlers/mpers-device';\nimport NetworkMessageHandler from 'customer-site/websockets/handlers/networks';\nimport PartitionMessageHandler from 'customer-site/websockets/handlers/partitions';\nimport SafetyButtonLocationMessageHandler from 'customer-site/websockets/handlers/safety-button-location';\nimport SensorMessageHandler from 'customer-site/websockets/handlers/sensors';\nimport ShadesMessageHandler from 'customer-site/websockets/handlers/shades';\nimport SumpPumpMessageHandler from 'customer-site/websockets/handlers/sump-pumps';\nimport ThermostatMessageHandler from 'customer-site/websockets/handlers/thermostats';\nimport WarningSoundMessageHandler from 'customer-site/websockets/handlers/warning-sounds';\nimport WaterSensorMessageHandler from 'customer-site/websockets/handlers/water-sensors';\nimport WaterValveMessageHandler from 'customer-site/websockets/handlers/water-valves';\nimport WifiHostsMessageHandler from 'customer-site/websockets/handlers/wifi-hosts';\nimport WifiProfilesMessageHandler from 'customer-site/websockets/handlers/wifi-profiles';\n\n/**\n * All websocket handlers used by customer-site\n */\nexport const WebsocketHandlers = [\n AccessPointMessageHandler,\n FleetVehicleMessageHandler,\n FleetFilterCountsMessageHandler,\n GarageDoorMessageHandler,\n GateMessageHandler,\n IqRoutersMessageHandler,\n LightMessageHandler,\n LockMessageHandler,\n MpersDeviceMessageHandler,\n NetworkMessageHandler,\n PartitionMessageHandler,\n SensorMessageHandler,\n ShadesMessageHandler,\n SumpPumpMessageHandler,\n ThermostatMessageHandler,\n WarningSoundMessageHandler,\n WaterSensorMessageHandler,\n WaterValveMessageHandler,\n WifiHostsMessageHandler,\n WifiProfilesMessageHandler,\n CameraLightMessageHandler,\n SafetyButtonLocationMessageHandler\n];\n","import { DoorUnlocked, DoorLocked, DoorBuzzedFromWebsite } from 'customer-site/enums/EventType';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Open, Closed, Buzz } from '../../enums/CardReaderState';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type AccessControlAccessPointDevice from 'customer-site/models/devices/access-control-access-point-device';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Access Control Access Point message handler class for websockets\n */\nexport default class AccessPointMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [DoorLocked, DoorUnlocked, DoorBuzzedFromWebsite];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/access-control-access-point-device';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Closed]: { desc: 'locked', iconName: 'user-control-closed' },\n [Open]: { desc: 'unlocked', iconName: 'user-control-open' },\n [Buzz]: { desc: 'buzzOpen', iconName: 'user-control-buzz' }\n };\n }\n\n /** @override **/\n getPayload(model: AccessControlAccessPointDevice, message: BaseWebsocketMessage): Payload | undefined {\n const { subtype } = message,\n state = (\n {\n [DoorUnlocked]: Open,\n [DoorLocked]: Closed,\n [DoorBuzzedFromWebsite]: Buzz\n } as Record\n )[Number(subtype)];\n\n this.activityEvent = this.getActivityData(model, subtype, state);\n\n if (state === Buzz) {\n return;\n }\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import { inject as service } from '@ember/service';\nimport { Opened, Closed, OpenedClosed } from 'customer-site/enums/EventType';\nimport { OpenedClosed as OpenedClosedState } from 'customer-site/enums/SensorStatus';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { parseQueryString } from '@adc/app-infrastructure/websockets/base-handler';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type BaseManagedDevice from 'customer-site/models/devices/base-managed-device';\n\n/**\n * @classdesc\n *\n * Base Sensor message handler class for sensors and water sensors\n */\nexport default abstract class BaseSensorMessageHandler extends BaseWebsocketMessageHandler {\n @service declare intl: ADCIntlService;\n\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed, OpenedClosed];\n }\n\n /** @override **/\n getPayload(model: BaseManagedDevice, message: BaseWebsocketMessage): Payload | undefined {\n let qStringJson: { openClosedStatusWord?: string } = {};\n const { subtype, subvalue } = message;\n\n if (Number(subtype) === OpenedClosed) {\n this.activityEvent = this.getActivityData(model, subtype, OpenedClosedState);\n return;\n }\n\n if (!subvalue) {\n return;\n }\n\n try {\n qStringJson = parseQueryString(subvalue);\n } catch {\n return;\n }\n\n const state = this.getSensorState(Number(subtype), model);\n\n return this.getSensorPayload(model, state, subtype, qStringJson.openClosedStatusWord);\n }\n\n /**\n * Get the sensor's state based on sensor type\n */\n abstract getSensorState(subtype: number, model: BaseManagedDevice): number | undefined;\n\n /**\n * Get the translated word for the state text\n */\n getSensorStateKey(key?: string): string | undefined {\n if (!key) {\n return;\n }\n\n const { intl } = this,\n k = `generic.${key.toLowerCase()}`;\n\n return intl.exists(k) ? intl.t(k) : undefined;\n }\n\n /**\n * Return the payload for various sensor device handlers\n */\n getSensorPayload(\n model: BaseManagedDevice,\n state: number | undefined,\n subtype: string,\n statusWord?: string\n ): Payload | undefined {\n const attributes: { state: number | undefined; desiredState: number | undefined; displayStateText?: string } = {\n state: state,\n desiredState: state\n };\n\n attributes.displayStateText = this.getSensorStateKey(statusWord);\n\n if (!attributes.state || !attributes.displayStateText) {\n return;\n }\n\n this.activityEvent = this.getActivityData(model, subtype, state);\n\n return {\n ...this.getIdType(model),\n attributes: attributes\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, set } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport IconData from 'customer-site/utils/transforms-objects/icon-data';\nimport BaseWebsocketMessageHandler from '@adc/app-infrastructure/websockets/base-handler';\nimport { format, utcToZonedTime } from 'date-fns-tz';\n\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AsyncBelongsTo } from '@ember-data/model';\nimport type BaseDevice from 'customer-site/models/devices/base-device';\nimport type LocationModel from 'customer-site/models/enterprise/locations/location';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface WebsocketActivityData {\n id: null;\n eventDate: Date;\n iconData: IconData;\n description: string;\n deviceDescription: string;\n eventType: string;\n deviceTypeFilter: number[];\n globalDeviceId: string;\n eventTypeName?: string;\n}\n\nexport type ActivityConfig = Record;\n\n/**\n * @classdesc\n *\n * Base message handler class for websockets\n * Base functionality for taking messages and updating device data stores, if applicable\n */\nexport default abstract class BaseCustomerEmberMessageHandler extends BaseWebsocketMessageHandler {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n deviceIcon = 'activity-event';\n\n /**\n * A history-event representing activity for a received message\n */\n @tracked\n activityEvent?: WebsocketActivityData;\n\n /**\n * Processes messages\n */\n process(message: BaseWebsocketMessage): boolean {\n const { store } = this;\n if (!super.process(message)) {\n return false;\n }\n\n if (!this.activityEvent || this.isFilterApplied) {\n return false;\n }\n\n const { timeZone = '' } = this.intl,\n dateKey = format(utcToZonedTime(new Date(), timeZone), 'yyyyMMdd', { timeZone }),\n day = store.peekRecord('activity/activity-day', dateKey),\n newEvent = store.createRecord('activity/history-event', this.activityEvent);\n\n if (day) {\n if (this.isEnterprise) {\n const id = message.unitId;\n set(\n newEvent,\n 'location',\n store.peekRecord('enterprise/locations/location', id) as unknown as AsyncBelongsTo\n );\n }\n\n // Add event record to the day record to render\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This should be replaced with `day.events.setObjects([newEvent, ...day.events.slice()])`.\n day.events = [newEvent, ...day.events.slice()];\n }\n\n set(this, 'activityEvent', undefined);\n\n return true;\n }\n\n /** @override */\n @computed('activityEvent')\n get hasAdditionalPayload(): boolean {\n return !isEmpty(this.activityEvent);\n }\n\n /**\n * Array of state, desc, and icon names for device\n */\n abstract get activityEventInfo():\n | Record\n | undefined;\n\n /**\n * Returns an object to act as a temporary history-event for real-time updates\n */\n getActivityData(\n model: BaseDevice,\n event: string,\n state?: number,\n value?: string,\n eventTypeName?: string\n ): WebsocketActivityData | undefined {\n if (state === undefined) {\n return;\n }\n\n const activityData = this.activityEventInfo?.[state];\n\n if (!activityData) {\n return;\n }\n\n const { desc, iconName = this.deviceIcon } = activityData;\n return {\n id: null,\n eventDate: new Date(),\n iconData: new IconData({\n icon: iconName\n }),\n description: this.intl.t(`generic.${desc}`, { value }),\n deviceDescription: model.description,\n eventType: String(event),\n deviceTypeFilter: [],\n globalDeviceId: model.id,\n eventTypeName: String(eventTypeName)\n };\n }\n\n /**\n * Return if any filters are applied\n */\n @alias('contextManager.isActivityFilterApplied')\n declare isFilterApplied: boolean;\n\n /**\n * Whether the account is enterprise\n */\n @alias('contextManager.isEnterprise')\n declare isEnterprise: boolean;\n}\n","import { SwitchLevelChanged, LightTurnedOn, LightTurnedOff } from 'customer-site/enums/EventType';\nimport { On, Off } from 'customer-site/enums/LightStatus';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type CameraLight from 'customer-site/models/devices/camera-light';\n\n/**\n * @classdesc\n *\n * Camera Light message handler class for websockets\n */\nexport default class CameraLightMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [SwitchLevelChanged, LightTurnedOff, LightTurnedOn];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/camera-light';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(model: CameraLight, message: BaseWebsocketMessage): Payload | undefined {\n const { value, subtype } = message;\n const mapping: Record = {\n [LightTurnedOn]: On,\n [LightTurnedOff]: Off\n };\n\n let state = mapping[Number(subtype)];\n\n if (Number(subtype) === SwitchLevelChanged) {\n // We want to verify the state when the level change\n state = Number(value) > 0 ? On : Off;\n }\n\n if (!state) {\n return;\n }\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { EmberConnectedFleetDashboard } from '../../enums/CustomerPageUrl';\nimport { Opened, Closed, CarTrackingUpdate } from '../../enums/EventType';\n\nexport default class FleetFilterCountsMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed, CarTrackingUpdate];\n }\n\n /** @override **/\n handleMessage() {\n this.store.query('fleet/fleet-filter-count', {\n pageUrlEnum: EmberConnectedFleetDashboard\n });\n }\n\n /** @override **/\n get modelName(): string {\n return 'fleet/fleet-filter-count';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(): undefined {\n return;\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Opened, Closed, CarTrackingUpdate } from '../../enums/EventType';\n\n/**\n * @classdesc\n *\n * Fleet Vehicle message handler class for websockets\n */\nexport default class FleetVehicleMessageHandler extends BaseWebsocketMessageHandler {\n shouldReloadModel = true;\n\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed, CarTrackingUpdate];\n }\n\n /** @override **/\n get modelName(): string {\n return 'fleet/fleet-vehicle';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(): undefined {\n return;\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Opened, Closed } from '../../enums/EventType';\nimport { Open as OpenDoor, Closed as CloseDoor } from '../../enums/GarageDoorStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type GarageDoor from 'customer-site/models/devices/garage-door';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Garage Door message handler class for websockets\n */\nexport default class GarageDoorMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/garage-door';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [CloseDoor]: { desc: 'closed', iconName: 'garage-closed-hd' },\n [OpenDoor]: { desc: 'opened', iconName: 'garage-open-hd' }\n };\n }\n\n /** @override **/\n getPayload(model: GarageDoor, message: BaseWebsocketMessage): Payload {\n const state = (\n {\n [Opened]: OpenDoor,\n [Closed]: CloseDoor\n } as Record\n )[Number(message.subtype)];\n\n this.activityEvent = this.getActivityData(model, message.subtype, state);\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import { Closed, Opened } from 'customer-site/enums/EventType';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Open, Closed as Close } from '../../enums/GateStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type Gate from 'customer-site/models/devices/gate';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Gate message handler class for websockets\n */\nexport default class GateMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/gate';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Close]: { desc: 'closed', iconName: 'gate-closed-hd' },\n [Open]: { desc: 'opened', iconName: 'gate-open-hd' }\n };\n }\n\n /** @override **/\n getPayload(model: Gate, message: BaseWebsocketMessage): Payload {\n const state = (\n {\n [Opened]: Open,\n [Closed]: Close\n } as Record\n )[Number(message.subtype)];\n\n this.activityEvent = this.getActivityData(model, message.subtype, state);\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport {\n NetworkDhcpSettingsUpdated,\n NetworkDhcpReservationsUpdated,\n NetworkPortForwardingUpdated,\n SpeedTestResultsUpdated\n} from '../../enums/EventType';\n\n/**\n * @classdesc\n *\n * Network message handler class for websockets\n */\nexport default class IqRoutersMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [\n NetworkDhcpSettingsUpdated,\n NetworkDhcpReservationsUpdated,\n NetworkPortForwardingUpdated,\n SpeedTestResultsUpdated\n ];\n }\n\n // Just reload the whole model store to get updated data.\n shouldReloadStore = true;\n\n /** @override **/\n get modelName(): string {\n return 'devices/iq-router';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(): undefined {\n return;\n }\n}\n","import { LightColorChange } from 'customer-site/enums/DeviceProperty';\nimport { SwitchLevelChanged, LightTurnedOn, LightTurnedOff } from 'customer-site/enums/EventType';\nimport EventTypeMap from 'customer-site/enums/EventTypeMap';\nimport { Light as LightIconEnum, SwitchOn, SwitchOff } from 'customer-site/enums/Icon';\nimport IconMap from 'customer-site/enums/IconMap';\nimport { On, Off, LevelChange } from 'customer-site/enums/LightStatus';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type Light from 'customer-site/models/devices/light';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Light message handler class for websockets\n */\nexport default class LightMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [SwitchLevelChanged, LightTurnedOff, LightTurnedOn];\n }\n\n /** @override **/\n handlesPropertyTypes = [LightColorChange];\n\n /** @override **/\n get modelName(): string {\n return 'devices/light';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [On]: { desc: 'lightOn', iconName: undefined },\n [Off]: { desc: 'lightOff', iconName: undefined },\n [LevelChange]: { desc: 'levelChanged', iconName: undefined }\n };\n }\n\n /** @override **/\n getPayload(model: Light, message: BaseWebsocketMessage): Payload | undefined {\n const { type, value, subtype } = message;\n let attributes, state;\n if (type === 'propertyChange') {\n if (Number(subtype) === LightColorChange) {\n return;\n }\n }\n\n if (type === 'event') {\n state = (\n {\n [LightTurnedOn]: On,\n [LightTurnedOff]: Off,\n [SwitchLevelChanged]: LevelChange\n } as Record\n )[Number(subtype)];\n }\n\n attributes = { state: state, desiredState: state };\n\n if (type === 'event' && Number(subtype) === SwitchLevelChanged) {\n // We want to verify the state when the level changes, but not generate an activity message\n attributes = { lightLevel: value, state: Number(value) > 0 ? On : Off };\n }\n\n if (!attributes || !state) {\n return;\n }\n\n const eventName = (\n EventTypeMap as {\n [key: number]: string;\n }\n )[Number(subtype)] as string;\n\n const lightIcon = IconMap[LightIconEnum];\n this.deviceIcon =\n !model.deviceIcon || model.deviceIcon.icon === lightIcon\n ? lightIcon\n : type === 'event' && Number(subtype) === LightTurnedOff\n ? IconMap[SwitchOff]\n : IconMap[SwitchOn];\n\n this.activityEvent = this.getActivityData(model, subtype, state, attributes.lightLevel, eventName);\n\n return {\n ...this.getIdType(model),\n attributes: attributes\n };\n }\n}\n","import { Locked, Unlocked } from 'customer-site/enums/LockStatus';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { DoorLocked, DoorUnlocked, Closed, Opened } from '../../enums/EventType';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type Lock from 'customer-site/models/devices/lock';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Lock message handler class for websockets\n */\nexport default class LockMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [DoorLocked, DoorUnlocked, Opened, Closed];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/lock';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Locked]: { desc: 'locked', iconName: 'lock-locked-hd' },\n [Unlocked]: { desc: 'unlocked', iconName: 'lock-unlocked-hd' }\n };\n }\n\n /** @override **/\n getPayload(model: Lock, message: BaseWebsocketMessage): Payload {\n const state = (\n {\n [DoorLocked]: Locked,\n [Closed]: Locked,\n [DoorUnlocked]: Unlocked,\n [Opened]: Unlocked\n } as Record\n )[Number(message.subtype)];\n\n this.activityEvent = this.getActivityData(model, message.subtype, state);\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import {\n Alarm,\n AuxiliaryPanic,\n AuxPanicPendingAlarm,\n PendingAlarm,\n AlarmCancelled,\n MpersFallDetected,\n MpersPanicDetected,\n MpersNoCommunication,\n MpersCharging,\n MpersStoppedCharging,\n MpersActive,\n MpersLowBattery,\n MpersCriticalBattery\n} from 'customer-site/enums/EventType';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type EventWebsocketMessage from '@adc/app-infrastructure/websockets/messages/event';\nimport type MpersDevice from 'customer-site/models/devices/mpers-device';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * Mpers device message handler class for websockets.\n */\nexport default class MpersDeviceMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [\n Alarm,\n AuxiliaryPanic,\n AuxPanicPendingAlarm,\n PendingAlarm,\n AlarmCancelled,\n MpersFallDetected,\n MpersPanicDetected,\n MpersNoCommunication,\n MpersCharging,\n MpersStoppedCharging,\n MpersActive,\n MpersLowBattery,\n MpersCriticalBattery\n ];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/mpers-device';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Alarm]: { desc: 'mpers.fallConfirmed', iconName: 'alarm' },\n [AuxiliaryPanic]: { desc: 'mpers.panicConfirmed', iconName: 'medical' },\n [PendingAlarm]: { desc: 'mpers.fallPending', iconName: 'warning' },\n [AuxPanicPendingAlarm]: { desc: 'mpers.panicPending', iconName: 'warning' },\n [AlarmCancelled]: { desc: 'mpers.eventCancelled', iconName: 'alarm-cancelled' },\n [MpersFallDetected]: { desc: 'mpers.fallDetected', iconName: 'mpers-device' },\n [MpersPanicDetected]: { desc: 'mpers.panic', iconName: 'mpers-device' },\n [MpersNoCommunication]: { desc: 'mpers.noCommunication', iconName: 'mpers-device' },\n [MpersCharging]: { desc: 'mpers.charging', iconName: 'mpers-device' },\n [MpersStoppedCharging]: { desc: 'mpers.active', iconName: 'mpers-device' },\n [MpersActive]: { desc: 'mpers.active', iconName: 'mpers-device' },\n [MpersLowBattery]: { desc: 'mpers.lowBattery', iconName: 'mpers-device' },\n [MpersCriticalBattery]: { desc: 'mpers.criticalBattery', iconName: 'mpers-device' }\n };\n }\n\n /** @override **/\n getPayload(model: MpersDevice, message: EventWebsocketMessage): Payload | undefined {\n const { subtype, eventDateUtc } = message,\n eventType = Number(subtype),\n attributes = [\n Alarm,\n AuxiliaryPanic,\n MpersFallDetected,\n MpersPanicDetected,\n MpersNoCommunication,\n MpersCharging,\n MpersStoppedCharging,\n MpersActive,\n MpersLowBattery,\n MpersCriticalBattery\n ].includes(eventType)\n ? {\n emergencyEvent: subtype,\n emergencyTimestampUtc: new Date(eventDateUtc)\n }\n : {};\n // Set activity event.\n this.activityEvent = this.getActivityData(model, subtype, eventType);\n\n return {\n ...this.getIdType(model),\n attributes\n };\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { NetworkMapUpdated } from '../../enums/EventType';\n\n/**\n * @classdesc\n *\n * Network message handler class for websockets\n */\nexport default class NetworksMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [NetworkMapUpdated];\n }\n\n // Just reload the whole model store to get updated data.\n shouldReloadStore = true;\n\n /** @override **/\n get modelName(): string {\n return 'wifi/network';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(): undefined {\n return;\n }\n}\n","import { inject as service } from '@ember/service';\nimport {\n ArmedAway as ArmedAwayState,\n ArmedStay as ArmedStayState,\n Disarmed as DisarmedState,\n ArmedNight as ArmedNightState\n} from 'customer-site/enums/ArmingState';\nimport { Alarm, PolicePanic, ArmedAway, ArmedStay, Disarmed, ArmedNight } from 'customer-site/enums/EventType';\nimport { ArmedState } from 'customer-site/utils/partitions';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type Partition from 'customer-site/models/devices/partition';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * State to assign Alarm events as we don't want to change the state, just create an event\n */\nconst AlarmState = -1;\n\n/**\n * State to assign Police panic events as we don't want to change the state, just create an event\n */\nconst PolicePanicState = -2;\n\n/**\n * QStringForExtraData key to represent rule IDs\n */\nconst ExtraDataRuleId = 'trid';\n\n/**\n * Map of Alarm states to translation values\n */\nconst AlarmStateMap: Record = {\n [AlarmState]: 'alarm',\n [PolicePanicState]: 'policePanic'\n};\n\n/**\n * @classdesc\n *\n * Partition message handler class for websockets\n */\nexport default class PartitionMessageHandler extends BaseWebsocketMessageHandler {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n @service declare troubleConditions: any;\n\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Alarm, PolicePanic, ArmedAway, ArmedStay, Disarmed, ArmedNight];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/partition';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [ArmedAwayState]: { desc: 'armedAway', iconName: 'system-armed-away-hd' },\n [ArmedStayState]: { desc: 'armedStay', iconName: 'system-armed-stay-hd' },\n [DisarmedState]: { desc: 'disarmed', iconName: 'system-disarmed-hd' },\n [ArmedNightState]: { desc: 'armedNight', iconName: 'system-armed-night-hd' },\n [AlarmState]: { desc: 'alarm', iconName: 'alarm' },\n [PolicePanicState]: { desc: 'policePanic', iconName: 'police' },\n [ArmedState]: { desc: 'armed', iconName: 'system-armed-away-hd' }\n };\n }\n\n /** @override **/\n getPayload(model: Partition, message: BaseWebsocketMessage): Payload | undefined {\n const messageSubtype = Number(message.subtype);\n let state: number;\n\n /*\n Some panel types use only 'Armed' and don't have a different state to differentiate by (i.e. between Armed Away and Armed Stay).\n We need to fake the state here to get the correct text.\n */\n if (model.hasOnlyArming && (messageSubtype === ArmedAway || messageSubtype === ArmedStay)) {\n state = ArmedState;\n } else {\n state = (\n {\n [ArmedAway]: ArmedAwayState,\n [ArmedStay]: ArmedStayState,\n [Disarmed]: DisarmedState,\n [ArmedNight]: ArmedNightState,\n [Alarm]: AlarmState,\n [PolicePanic]: PolicePanicState\n } as Record\n )[messageSubtype];\n }\n let automatedText = '';\n\n // If this event has an associated rule ID, we want to denote it as an automation rule\n if (message.subvalue?.includes(ExtraDataRuleId)) {\n automatedText = `(${this.intl.t('generic.activity.automatedRule')})`;\n }\n\n this.activityEvent = this.getActivityData(model, message.subtype, state, automatedText);\n\n if (AlarmStateMap[state] !== undefined) {\n this.notificationManager.addNotification(\n this.intl.t(`websockets.handlers.${AlarmStateMap[state]}`, { systemName: model.description }),\n 'alarm',\n [\n {\n text: this.intl.t('alerts-issues.index.stopAlarms', { count: 2 }),\n action: () => {\n this.troubleConditions.showStopAlarmsModal();\n }\n }\n ],\n 0,\n true,\n false,\n 'alarm-banner'\n );\n return;\n }\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import { inject as service } from '@ember/service';\nimport { SafetyButtonLocationUpdate } from 'customer-site/enums/EventType';\nimport { LocationType } from 'customer-site/models/personal-safety/location';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type EventWebsocketMessage from '@adc/app-infrastructure/websockets/messages/event';\nimport type PersonalSafetySession from 'customer-site/models/personal-safety/session';\nimport type PersonalSafetyService from 'customer-site/services/personal-safety';\n\nconst LOCATION_TYPE = 'personal-safety/location';\n\n/**\n * @classdesc\n *\n * Location message handler class for websockets\n */\nexport default class SafetyButtonLocationMessageHandler extends BaseWebsocketMessageHandler {\n @service declare personalSafety: PersonalSafetyService;\n\n /** @override **/\n get handlesEventTypes(): number[] {\n return [SafetyButtonLocationUpdate];\n }\n\n /** @override **/\n get modelName(): string {\n return 'personal-safety/location';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /**\n * The backend does not send correct ids for the model that needs to be updated,\n * therefore custom logic is needed to connect available information.\n * TODO: MSS-1322 remove this method when backend sends correct ids\n *\n * @override\n **/\n process(message: EventWebsocketMessage): boolean {\n if (!this.willHandle(message)) {\n return false;\n }\n\n if (!this.personalSafety.session) {\n return false;\n }\n\n const payload = this.getPayload(this.personalSafety.session, message);\n\n if (payload) {\n // Push partial update to store\n this.store.push({ data: payload });\n }\n\n return true;\n }\n\n /** @override **/\n getPayload(model: PersonalSafetySession, message: EventWebsocketMessage): Payload | undefined {\n const { value, subvalue, eventDateUtc } = message;\n\n if (!value || !subvalue || !eventDateUtc) {\n return;\n }\n\n let extraData = {\n SafetyButtonAlarmId: undefined,\n Latitude: undefined,\n Longitude: undefined\n };\n\n extraData = Object.assign(extraData, JSON.parse(message.subvalue ?? '{}'));\n\n if (!extraData.SafetyButtonAlarmId || !extraData.Latitude || !extraData.Longitude) {\n return;\n }\n\n // If the message is not for the current session, ignore it\n if (model.id !== String(extraData.SafetyButtonAlarmId)) {\n return;\n }\n\n const locations = this.personalSafety.locations ?? [];\n let currentLocation = (locations.length ?? 0) > 1 ? locations[locations.length - 1] : undefined;\n\n if (currentLocation === undefined) {\n const firstLocation = locations && locations[0];\n if (firstLocation) {\n firstLocation.locationType = LocationType.LOCATION_START;\n }\n\n currentLocation = this.store.createRecord(LOCATION_TYPE, {\n id: `${model.id}_${message.eventDateUtc}`,\n locationType: LocationType.LOCATION_CURRENT\n });\n\n this.personalSafety.locations?.push(currentLocation);\n }\n\n return {\n id: currentLocation.id,\n type: this.modelName,\n attributes: {\n latitude: Number(extraData.Latitude),\n longitude: Number(extraData.Longitude),\n eventTime: new Date(eventDateUtc)\n }\n };\n }\n}\n","import { Bypassed, EndOfBypass } from 'customer-site/enums/EventType';\nimport BaseSensorMessageHandler from 'customer-site/websockets/handlers/base-sensors';\nimport { Closed as Close, Open, Idle, Active, OpenedClosed } from '../../enums/SensorStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type Sensor from 'customer-site/models/devices/sensor';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n * Sensor message handler class for websockets\n */\nexport default class SensorMessageHandler extends BaseSensorMessageHandler {\n /** @override */\n get handlesEventTypes(): number[] {\n return [...super.handlesEventTypes, Bypassed, EndOfBypass];\n }\n\n getPayload(model: Sensor, message: BaseWebsocketMessage): Payload | undefined {\n const { subtype } = message,\n evtType = Number(subtype);\n\n if (evtType === Bypassed || evtType === EndOfBypass) {\n this.activityEvent = this.getActivityData(model, subtype, evtType);\n\n return {\n ...this.getIdType(model),\n attributes: {\n isBypassed: evtType === Bypassed\n }\n };\n }\n\n return super.getPayload(model, message);\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/sensor';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n const fnGetInfo = (desc: string, iconName: string) => ({ desc, iconName });\n\n return {\n [Close]: fnGetInfo('closed', 'sensor-closed-hd'),\n [Open]: fnGetInfo('opened', 'sensor-open-hd'),\n [Idle]: fnGetInfo('idle', 'motion-idle'),\n [Active]: fnGetInfo('activated', 'motion-action'),\n [OpenedClosed]: fnGetInfo('openedclosed', 'sensor-closed-hd'),\n [Bypassed]: fnGetInfo('bypassed', 'sensor-bypass'),\n [EndOfBypass]: fnGetInfo('endOfBypass', 'sensor-bypass')\n };\n }\n\n /** @override **/\n getSensorState(subtype: number, model: Sensor): number {\n return model.getStateFromType(subtype);\n }\n}\n","import { SwitchLevelChanged } from 'customer-site/enums/EventType';\nimport { Opened, Closed } from 'customer-site/enums/EventType';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Closed as ShadeClosed, Open as ShadeOpen, Changed } from '../../enums/ShadeStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type Shade from 'customer-site/models/devices/shade';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Shade message handler class for websockets\n */\nexport default class ShadesMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed, SwitchLevelChanged];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/shade';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [ShadeClosed]: { desc: 'closed', iconName: 'activity-event' },\n [ShadeOpen]: { desc: 'opened', iconName: 'activity-event' },\n [Changed]: { desc: 'shadeChanged', iconName: 'activity-event' }\n };\n }\n\n /** @override **/\n getPayload(model: Shade, message: BaseWebsocketMessage): Payload | undefined {\n const { value, subtype } = message,\n state = (\n {\n [Opened]: ShadeOpen,\n [Closed]: ShadeClosed,\n [SwitchLevelChanged]: Changed\n } as Record\n )[Number(subtype)];\n\n this.activityEvent = this.getActivityData(\n model,\n subtype,\n state,\n Number(subtype) === SwitchLevelChanged ? value : undefined\n );\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state,\n shadeLevel: value\n }\n };\n }\n}\n","import {\n SumpPumpAlertIdle,\n SumpPumpAlertPossibleIssue,\n SumpPumpAlertNormalOperation,\n SumpPumpAlertCriticalIssueOff,\n SumpPumpAlertCriticalIssueMalfunction\n} from 'customer-site/enums/EventType';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Idle, NormalOperation, PossibleIssue, PumpInMalfunction, PumpNotRunning } from '../../enums/SumpPumpStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type SumpPump from 'customer-site/models/devices/sump-pump';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Sump Pump message handler class for websockets\n */\nexport default class SumpPumpMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [\n SumpPumpAlertIdle,\n SumpPumpAlertCriticalIssueMalfunction,\n SumpPumpAlertCriticalIssueOff,\n SumpPumpAlertNormalOperation,\n SumpPumpAlertPossibleIssue\n ];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/sump-pump';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Idle]: { desc: 'sumpIdle', iconName: 'sump-pump-idle-hd' },\n [NormalOperation]: { desc: 'sumpNormal', iconName: 'sump-pump-running-hd' },\n [PossibleIssue]: { desc: 'sumpIssue', iconName: 'sump-pump-running-critical-hd' },\n [PumpInMalfunction]: { desc: 'sumpOff', iconName: 'issue' },\n [PumpNotRunning]: { desc: 'sumpOff', iconName: 'sump-pump-critical-hd' }\n };\n }\n\n /** @override **/\n getPayload(model: SumpPump, message: BaseWebsocketMessage): Payload {\n const state = (\n {\n [SumpPumpAlertIdle]: Idle,\n [SumpPumpAlertPossibleIssue]: PossibleIssue,\n [SumpPumpAlertNormalOperation]: NormalOperation,\n [SumpPumpAlertCriticalIssueMalfunction]: PumpInMalfunction,\n [SumpPumpAlertCriticalIssueOff]: PumpNotRunning\n } as Record\n )[Number(message.subtype)];\n\n this.activityEvent = this.getActivityData(model, message.subtype, state);\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import { CoolSetPoint100thsF, HeatSetPoint100thsF } from 'customer-site/enums/DeviceProperty';\nimport {\n ThermostatModeChanged,\n ThermostatOffset,\n ThermostatFanModeChanged,\n ThermostatSetPointChanged\n} from 'customer-site/enums/EventType';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Auto, Cool, Heat, Off, Unknown } from '../../enums/ThermostatStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type ThermostatModel from 'customer-site/models/devices/thermostat';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * Function to return object of model attributes to update based on an event message\n */\nfunction getEventUpdate({ subtype, value }: { subtype?: string; value?: string }): Record {\n const subtypeInt = Number(subtype);\n if (subtypeInt === ThermostatOffset) {\n return { attributes: { setpointOffset: value } };\n }\n\n if (subtypeInt === ThermostatModeChanged) {\n // Increment by one to match thermostat state enum value\n const adjustedValue = Number(value) + 1;\n return {\n stateInfo: { state: adjustedValue },\n attributes: { state: adjustedValue, desiredState: adjustedValue }\n };\n }\n\n if (subtypeInt === ThermostatFanModeChanged) {\n return { attributes: { fanMode: value } };\n }\n\n if (subtypeInt === ThermostatSetPointChanged) {\n return {\n stateInfo: { state: Unknown },\n value: value\n };\n }\n\n return {};\n}\n\n/**\n * Function to return object of model attributes to update based on a propertyChange message\n */\nfunction getPropertyChange(\n { subtype, value }: { subtype?: string; value?: string },\n reportsCelsius: boolean\n): Record {\n // Target temp needs to be divided by 100 (ex: 75 comes in as 7500)\n let adjustedValue = Number(value) / 100;\n const subtypeInt = Number(subtype);\n\n if (reportsCelsius) {\n // Convert to celsius if customer uses it, rounded to the nearest 0.5\n adjustedValue = Number((Math.round((((adjustedValue - 32) * 5) / 9) * 2) / 2).toFixed(1));\n }\n\n if (subtypeInt === HeatSetPoint100thsF) {\n return {\n attributes: { heatSetpoint: adjustedValue, desiredHeatSetpoint: adjustedValue }\n };\n }\n\n if (subtypeInt === CoolSetPoint100thsF) {\n return {\n attributes: { coolSetpoint: adjustedValue, desiredCoolSetpoint: adjustedValue }\n };\n }\n\n return {};\n}\n\n/**\n * @classdesc\n *\n * Thermostat message handler class for websockets\n */\nexport default class ThermostatMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [ThermostatOffset, ThermostatModeChanged, ThermostatFanModeChanged, ThermostatSetPointChanged];\n }\n\n /** @override **/\n handlesPropertyTypes = [CoolSetPoint100thsF, HeatSetPoint100thsF];\n\n /** @override **/\n get modelName(): string {\n return 'devices/thermostat';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Heat]: { desc: 'thermoHeat', iconName: 'thermostat' },\n [Cool]: { desc: 'thermoCool', iconName: 'thermostat' },\n [Auto]: { desc: 'thermoAuto', iconName: 'thermostat' },\n [Off]: { desc: 'thermoOff', iconName: 'thermostat' },\n [Unknown]: { desc: 'tempChange', iconName: 'thermostat' }\n };\n }\n\n /** @override **/\n getPayload(model: ThermostatModel, message: BaseWebsocketMessage): Payload | undefined {\n const messageInfo = (\n {\n event: getEventUpdate(message),\n propertyChange: getPropertyChange(message, this.contextManager.identityModel.localizeTempUnitsToCelsius)\n } as Record>\n )[message.type];\n\n if (messageInfo?.stateInfo) {\n this.activityEvent = this.getActivityData(\n model,\n message.subtype,\n messageInfo.stateInfo.state,\n messageInfo.value\n );\n }\n\n if (this.activityEvent && !messageInfo?.attributes) {\n // Return empty payload for activity only messages\n return;\n }\n\n return {\n ...this.getIdType(model),\n attributes: messageInfo?.attributes\n };\n }\n}\n","import { Activated, Inactive, Invalid } from 'customer-site/enums/CameraSirenStatus';\nimport BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { WarningSoundStarted, WarningSoundStopped, WarningSoundFailed } from '../../enums/EventType';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type CameraSiren from 'customer-site/models/video/camera-siren';\n\nexport default class WarningSoundMessageHandler extends BaseWebsocketMessageHandler {\n get handlesEventTypes(): number[] {\n return [WarningSoundStarted, WarningSoundStopped, WarningSoundFailed];\n }\n\n /** @override **/\n shouldCreateNewModel = true;\n\n /** @override **/\n get messageHandlerIdentifier(): string {\n return 'warning-sound';\n }\n\n /** @override **/\n get modelName(): string {\n return 'video/camera-siren';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(model: CameraSiren, message: BaseWebsocketMessage): Payload {\n const { subtype, subvalue } = message,\n state = (\n {\n [WarningSoundStarted]: Activated,\n [WarningSoundStopped]: Inactive,\n [WarningSoundFailed]: Invalid\n } as Record\n )[Number(subtype)];\n\n const additionalData: { timestampEndUtc?: Date | undefined } = {},\n params = new URLSearchParams(subvalue),\n endTimeUtc = params.get('etutc');\n\n if (endTimeUtc) {\n additionalData.timestampEndUtc = new Date(Number(endTimeUtc));\n }\n\n let idType = null;\n if (!model) {\n idType = {\n id: `${message.unitId}-${message.deviceId}`,\n type: 'video/camera-siren'\n };\n }\n\n return {\n ...(idType ?? this.getIdType(model)),\n attributes: {\n status: state,\n ...additionalData\n }\n };\n }\n}\n","import { Opened, Closed } from 'customer-site/enums/EventType';\nimport { Wet, Dry } from 'customer-site/enums/SensorStatus';\nimport BaseSensorMessageHandler from 'customer-site/websockets/handlers/base-sensors';\n\nimport type WaterValve from 'customer-site/models/devices/water-valve';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Water Sensor message handler class for websockets\n */\nexport default class WaterSensorMessageHandler extends BaseSensorMessageHandler {\n /** @override **/\n get modelName(): string {\n return 'devices/water-sensor';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [Wet]: { desc: 'wet', iconName: 'alarm' },\n [Dry]: { desc: 'dry', iconName: 'water-sensor-dry-hd' }\n };\n }\n\n /** @override **/\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getSensorState(subtype: number, _model: WaterValve): number | undefined {\n return (\n {\n [Opened]: Wet,\n [Closed]: Dry\n } as Record\n )[subtype];\n }\n\n /** @override **/\n getSensorStateKey(key: string): string | undefined {\n const word = (\n {\n ['activated']: 'wet',\n ['idle']: 'dry',\n ['wet']: 'wet',\n ['dry']: 'dry'\n } as Record\n )[key];\n\n if (!word) {\n return;\n }\n\n return this.intl.t(`generic.${word.toLowerCase()}`);\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { Opened, Closed } from '../../enums/EventType';\nimport { Open as ValveOpen, Closed as ValveClose } from '../../enums/WaterValveStatus';\n\nimport type { Payload } from '@adc/app-infrastructure/websockets/base-handler';\nimport type BaseWebsocketMessage from '@adc/app-infrastructure/websockets/messages/base';\nimport type WaterValve from 'customer-site/models/devices/water-valve';\nimport type { ActivityConfig } from 'customer-site/websockets/handlers/base';\n\n/**\n * @classdesc\n *\n * Water Valve message handler class for websockets\n */\nexport default class WaterValveMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [Opened, Closed];\n }\n\n /** @override **/\n get modelName(): string {\n return 'devices/water-valve';\n }\n\n /** @override **/\n get activityEventInfo(): ActivityConfig {\n return {\n [ValveOpen]: { desc: 'opened', iconName: 'sensor-open-hd' },\n [ValveClose]: { desc: 'closed', iconName: 'sensor-closed-hd' }\n };\n }\n\n /** @override **/\n getPayload(model: WaterValve, message: BaseWebsocketMessage): Payload {\n const state = (\n {\n [Opened]: ValveOpen,\n [Closed]: ValveClose\n } as Record\n )[Number(message.subtype)];\n\n this.activityEvent = this.getActivityData(model, message.subtype, state);\n\n return {\n ...this.getIdType(model),\n attributes: {\n state: state,\n desiredState: state\n }\n };\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { RouterHostsUpdated } from '../../enums/EventType';\n\n/**\n * @classdesc\n *\n * Network message handler class for websockets\n */\nexport default class WifiHostsMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [RouterHostsUpdated];\n }\n\n // Just reload the whole model store to get updated data.\n shouldReloadStore = true;\n\n /** @override **/\n get modelName(): string {\n return 'wifi/device';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(): undefined {\n return;\n }\n}\n","import BaseWebsocketMessageHandler from 'customer-site/websockets/handlers/base';\nimport { RouterProfilesUpdated } from '../../enums/EventType';\n\n/**\n * @classdesc\n *\n * Network message handler class for websockets\n */\nexport default class WifiProfilesMessageHandler extends BaseWebsocketMessageHandler {\n /** @override **/\n get handlesEventTypes(): number[] {\n return [RouterProfilesUpdated];\n }\n\n /** @override **/\n handleMessage() {\n this.store.findAll('wifi/device').then(() => {\n this.store.findAll('wifi/device-profile');\n });\n\n return;\n }\n\n /** @override **/\n get modelName(): string {\n return 'wifi/device-profile';\n }\n\n /** @override **/\n get activityEventInfo(): undefined {\n return;\n }\n\n /** @override **/\n getPayload(): undefined {\n return;\n }\n}\n","import Controller from '@ember/controller';\n\n/**\n * Controller for WizardLaunchRoute.\n */\nexport default class WizardLaunchController extends Controller {\n /**\n * The query parameters that will be passed to the wizard url controller.\n */\n queryParams = [\n 'instanceId',\n 'wizardEnum',\n 'returnEnumId',\n 'returnToUrl',\n 'cancelUrl',\n 'title',\n 'hideProgress',\n 'timeoutSecondsDefault',\n 'macAddress'\n ];\n\n /**\n * The Wizard URL that we should redirect to.\n */\n wizardUrl?: string;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'wizard-launch': WizardLaunchController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../classes/base-route';\nimport { EmberWizardLaunch } from '../enums/CustomerPageUrl';\n\nfunction separateParams(params) {\n const paramsForUrl = {\n returnEnumId: params.returnEnumId,\n instanceId: params.instanceId,\n wizardEnum: params.wizardEnum,\n isFromAddDevice: true\n };\n\n const paramsForBody = {};\n\n Object.keys(params).forEach((key) => {\n const value = params[key];\n\n if (!(key in paramsForUrl)) {\n paramsForBody[key] = value;\n }\n });\n\n return { paramsForUrl, paramsForBody };\n}\n\n/**\n * Route for loading Wizards by redirecting the wizard-loader Ember app.\n */\nexport default class WizardLaunchRoute extends AdcBaseRoute {\n @service contextManager;\n @service ajax;\n\n routeId = EmberWizardLaunch;\n\n async model(params) {\n const { paramsForUrl, paramsForBody } = separateParams(params);\n\n // The API and buildQueryString methods are smart enough to handle any params that were not provided or are falsey.\n return this.ajax.apiRequestForValue(\n `/wizards/url/createWizardRoute${buildQueryString(paramsForUrl)}`,\n undefined,\n paramsForBody,\n 'POST'\n );\n }\n\n afterModel(model) {\n const { contextManager } = this;\n\n // This shouldn't ever happen, but just being safe.\n if (!model || !model.url) {\n contextManager.transitionToPreviousRoute();\n return;\n }\n\n contextManager.transitionToUrl(decodeURIComponent(model.url));\n }\n}\n\n/**\n * Converts a dictionary of key value pairs to a query string. Excludes falsey values and includes a leading '?'. Returns an empty string if there are no params.\n */\nfunction buildQueryString(paramObj) {\n // Remove any keys w/ falsey values and then convert to a query string.\n const qs = Object.keys(paramObj)\n .filter((key) => !!paramObj[key])\n .map((key) => `${key}=${paramObj[key]}`)\n .join('&');\n return qs.length ? `?${qs}` : '';\n}\n","import EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEngineInCustomerEmber, getDealer } from '@adc/add-device-engine/utils/add-device-config-helper';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type { RouteItem } from '@adc/app-infrastructure/services/context-manager';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type EnginesRouterService from 'ember-engines-router-service/services/router';\n\n/**\n * @classdesc\n * Base Controller for category and device sub-pages.\n */\nexport default class BaseController extends EmberController {\n @service('engine-router-service') declare router: EnginesRouterService;\n @service declare ajax: ServiceRegistry['adc-ajax'];\n @service declare contextManager: ContextManager & {\n transitionToRouteId(routeId: number, ...params: any[]): void;\n clearVisitedRoutesStack(): void;\n transitionToWizard(...args: any[]): void;\n visitedRoutesStack: RouteItem[];\n isLoginAsLoginRep?: boolean;\n identityModel: {\n isMobileApp: boolean;\n };\n };\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n /**\n * Are we in system install?\n */\n get isInSystemInstall(): boolean {\n return !isEngineInCustomerEmber(this.envSettings);\n }\n\n /**\n * Are we internal dealer 1115?\n */\n get isInternalDealer(): boolean {\n // system-install and customer-site use different identity models.\n const { id } = getDealer(this.envSettings, this.contextManager);\n return Number(id) === 1115 || id === '1115';\n }\n\n @action\n goToChooseDevice(): void {\n this.router.transitionTo('choose-device');\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getDealer } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type AddDeviceCategoryModel from '@adc/add-device-addon/models/add-device-category';\nimport type AddDeviceResourceModel from '@adc/add-device-addon/models/add-device-resource';\nimport type { EngineConfigurationService } from '@adc/add-device-engine/utils/type-utils';\nimport type AjaxService from '@adc/ajax/services/adc-ajax';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type EnginesRouterService from 'ember-engines-router-service/services/router';\n\n/**\n * @classdesc\n * Route fetches a list of available device for the Add Device\n */\nexport default class BaseIndexRoute extends BaseRoute {\n @service declare ajax: AjaxService;\n @service declare engineConfig: EngineConfigurationService;\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare contextManager: ContextManager & { visitedRoutesStack: string[] };\n @service declare store: ServiceRegistry['store'];\n @service('engine-router-service') declare router: EnginesRouterService;\n\n isMediumWidthPage = true;\n\n /** @override */\n model({ viewAll }: { viewAll?: boolean }): {\n categories: ADCStoreQuery;\n hasDevicesInstalled: Promise<{\n value: {\n hasDevicesInstalled: boolean;\n };\n }>;\n dealer: ReturnType;\n hasGoogleNestAccountLinked: Promise;\n hasNestVideoIntegration: Promise;\n hasNestIntegration: Promise;\n hasNestAwareResale: Promise;\n devices?: ADCStoreQuery;\n } {\n const { ajax } = this,\n categoryId = (this.paramsFor('categories.devices') as { category: string }).category;\n\n return {\n categories: this.store.query('add-device-category', { viewAll }),\n hasDevicesInstalled: ajax.apiRequest<{ value: { hasDevicesInstalled: boolean } }>(\n 'engines/addDeviceResources/hasDevicesInstalled'\n ),\n dealer: getDealer(this.envSettings, this.contextManager),\n hasGoogleNestAccountLinked: this.ajax\n .apiRequest<{ value: string }>('engines/addDeviceResources/hasGoogleNestAccountLinked')\n .then((data) => {\n return data.value === 'True';\n }),\n hasNestVideoIntegration: ajax\n .apiRequest<{ value: string }>('engines/addDeviceResources/hasNestVideoIntegration')\n .then((data) => data.value === 'True'),\n hasNestIntegration: ajax\n .apiRequest<{ value: boolean }>('engines/addDeviceResources/hasNestIntegration')\n .then((data) => data.value),\n hasNestAwareResale: ajax.apiRequest('engines/addDeviceResources/nestAwareResale'),\n devices: categoryId\n ? this.store.query('add-device-resource', {\n categoryId: categoryId,\n viewAll\n })\n : undefined\n };\n }\n\n /**\n * Transitions to an external route to exit add device.\n */\n @action transitionToAddDeviceExit(): void {\n this.router.transitionToExternal('addDeviceExitRoute');\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../base-devices-controller';\nimport {\n isFeatureToggleActiveForCustomerOrDealer,\n ENABLE_NAMI_MOBILE_NATIVE_DIY_PROCESS_FEATURE_TOGGLE_ID,\n NAMI_MANUFACTURER\n} from '../start/controller';\n\nimport type { ModelFrom, ResolvedModelFrom, EngineConfigurationService } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Already Linked route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class AlreadyLinkedController extends BaseDevicesController {\n @service declare engineConfig: EngineConfigurationService;\n @service declare intl: ServiceRegistry['adc-intl'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n\n queryParams = ['viewAll'];\n viewAll = false;\n\n declare model: ModelFrom;\n resolvedModel?: Pick, 'device' | 'resourcePickerUrl'>;\n\n @tracked enableNamiMobileNativeDiyProcess = false;\n\n constructor(...args: any[]) {\n super(...args);\n\n (async () => {\n this.enableNamiMobileNativeDiyProcess = await isFeatureToggleActiveForCustomerOrDealer.call(\n this,\n ENABLE_NAMI_MOBILE_NATIVE_DIY_PROCESS_FEATURE_TOGGLE_ID\n );\n })();\n }\n\n /**\n * Shows the confirmation dialog for unlinking.\n */\n showConfirmationDialog(title: string, text: string): void {\n this.modals.showConfirmationDialog(title, text, {\n css: 'btn-color-danger',\n text: this.intl.tc(this, 'modalUnlink'),\n action: () => this.unlink()\n });\n }\n\n /**\n * Unlink the device.\n */\n async unlink(): Promise {\n const { intl, contextManager, ajax, notificationManager, resolvedModel } = this;\n if (!resolvedModel) {\n return;\n }\n\n contextManager.resetVisitedRoutesStack();\n\n const { manufacturerName, referenceValue } = resolvedModel.device,\n energyAccounts = await ajax.apiRequest<{ data: string[] }>('swa/AirFx/GetOAuth2EnergyAccounts'),\n energyAccount = Object.entries(energyAccounts.data)?.find(\n (energyAccount) => energyAccount[0] === referenceValue\n ),\n energyAccountId = energyAccount && energyAccount[1] ? energyAccount[1] : 0;\n\n ajax.apiRequest(\n `/swa/wizard/automation/third-party-add-device/account-unlink/${energyAccountId}`,\n undefined,\n null,\n 'POST'\n )\n .then(() => {\n notificationManager.addSuccess(intl.tc(this, 'unlinkSuccessful', { manufacturerName }));\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(this.engineConfig.routeIdEmberManageDevices);\n })\n .catch(() => {\n notificationManager.addError(intl.tc(this, 'unlinkError', { manufacturerName }));\n });\n }\n\n /**\n * Is the device and Oauth device?\n */\n @bool('resolvedModel.device.isOAuthDevice')\n declare isOAuth: boolean;\n\n /**\n * Is this page accessed via mobile?\n */\n @bool('contextManager.identityModel.isMobileApp')\n declare isMobile: boolean;\n\n /**\n * Does the integration supports deep linking?\n */\n @computed('resolvedModel.device.referenceValue')\n get supportsDeepLinkDeviceAddition(): Promise {\n const { ajax } = this;\n return (async () => {\n const energyAccountId = await ajax\n .apiRequest<{ data: string[] }>('swa/AirFx/GetOAuth2EnergyAccounts')\n .then((energyAccounts) =>\n Object.entries(energyAccounts.data)?.find(\n (energyAccount) => energyAccount[0] === this.resolvedModel?.device.referenceValue\n )\n )\n .then((energyAccount) => (energyAccount && energyAccount[1] ? energyAccount[1] : 0));\n\n return await ajax.apiRequest(\n 'engines/installerLedCapability/getDoesSupportsDeepLinkDeviceAddition',\n undefined,\n { energyAccountId },\n 'POST'\n );\n })();\n }\n\n /**\n * Checks to see if the device is manufactured by Google.\n */\n @computed('resolvedModel.device.manufacturerName')\n get isNest(): boolean {\n return this.resolvedModel?.device.manufacturerName?.toLowerCase() === 'google';\n }\n\n /**\n * Checks to see if the device is manufactured by Nami.\n */\n @computed('resolvedModel.device.manufacturerName')\n get isNami(): boolean {\n return this.resolvedModel?.device.manufacturerName?.toLowerCase() === NAMI_MANUFACTURER;\n }\n\n /**\n * Is it a dealer rep logged in as the customer?\n */\n @bool('contextManager.isLoginAsLoginRep')\n declare isLoginAs: boolean;\n\n /**\n * Checks whether to show the Configure devices section or not.\n */\n @computed('isLoginAs', 'isNami', 'enableNamiMobileNativeDiyProcess')\n get showConfigureDevices(): boolean {\n return this.isLoginAs || (this.isNami && this.enableNamiMobileNativeDiyProcess);\n }\n\n /**\n * Checks whether to show the Update WiFi section or not.\n */\n @computed('isLoginAs', 'isNami', 'enableNamiMobileNativeDiyProcess')\n get showUpdateWifi(): boolean {\n return !this.isLoginAs || (this.isNami && this.enableNamiMobileNativeDiyProcess);\n }\n\n /**\n * Gets the text for the OpenThirdParty button link\n */\n @computed('resolvedModel.device.manufacturerName')\n get openThirdPartyAppText(): string {\n return this.intl.tc(this, 'openThirdPartyApp', {\n integrationName: this.resolvedModel?.device.manufacturerName\n });\n }\n\n /**\n * Should the Unlink Account button be disabled?\n */\n @computed('resolvedModel.device.canBeUnlinkedByUser')\n get shouldUnlinkButtonBeDisabled(): boolean {\n return !this.resolvedModel?.device.canBeUnlinkedByUser;\n }\n\n /**\n * Should the already linked text be shown?\n */\n @computed('contextManager.visitedRoutesStack.length', 'engineConfig.routeIdEmberManageDevices', 'isNest')\n get showAlreadyLinkedText(): boolean {\n const visited = this.contextManager.visitedRoutesStack ?? [];\n const stackIndex = visited.length - 1;\n const previousRoute = visited[stackIndex - 1];\n // @ts-expect-error Not sure the route property actually exists.\n return this.isNest && previousRoute?.route?.routeItem?.routeId === this.engineConfig.routeIdEmberManageDevices;\n }\n\n /**\n * Handles the transition of the manage devices button link. For Nest customers, this link should point to the\n * Google Resource Picker url.\n */\n @action\n manageDevices(resourcePickerUrl: string): void {\n const { contextManager } = this;\n\n contextManager.resetVisitedRoutesStack();\n\n if (this.isNest) {\n contextManager.transitionToUrl(resourcePickerUrl);\n } else {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n contextManager.transitionToRouteId(this.engineConfig.routeIdEmberManageDevices);\n }\n }\n\n /**\n * Handles unlinking OAuth accounts.\n */\n @action\n async unlinkAccount(): Promise {\n const { intl } = this;\n\n if (this.isNest) {\n this.showConfirmationDialog(intl.tc(this, 'nestModalTitle'), intl.tc(this, 'nestModalText'));\n return;\n }\n\n if (this.isNami) {\n const { manufacturerName } = this.resolvedModel?.device ?? {};\n this.showConfirmationDialog(intl.tc(this, 'modalTitle'), intl.tc(this, 'modalText', { manufacturerName }));\n return;\n }\n\n await this.unlink();\n }\n\n /**\n * Handles getting the deep link for and redirecting to a third party app.\n * This function is currently only used by nami and only available on mobile but may be updated to support all third party apps\n */\n @action\n async openThirdPartyApp(): Promise {\n const { ajax, notificationManager, contextManager } = this,\n { referenceValue, manufacturerName } = this.resolvedModel?.device ?? {},\n energyAccounts = await ajax.apiRequest<{ data: string[] }>('swa/AirFx/GetOAuth2EnergyAccounts'),\n energyAccount = Object.entries(energyAccounts.data)?.find(\n (energyAccount) => energyAccount[0] === referenceValue\n ),\n energyAccountId = energyAccount && energyAccount[1] ? energyAccount[1] : 0,\n currentURL = this.router.currentURL;\n\n ajax.apiRequest(\n 'engines/installerLedCapability/getThirdPartyDeepLink',\n undefined,\n { currentURL, energyAccountId },\n 'POST'\n )\n .then((deeplink) => {\n contextManager.transitionToUrl(deeplink);\n })\n .catch(() => {\n notificationManager.addWarning(this.intl.tc(this, 'deeplinkError', { manufacturerName }));\n });\n }\n\n @action\n goToLinkDevicesPage(): void {\n const { resolvedModel } = this;\n if (resolvedModel) {\n this.router.transitionTo(resolvedModel.device.linkDevicesUrl!);\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/already-linked': AlreadyLinkedController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Transition from '@ember/routing/transition';\n\n/**\n * @classdesc\n * Route for devices that are already linked and cannot be added again.\n */\nexport default class AlreadyInstalledRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceAlreadyLinked')\n declare routeId: number;\n\n clearVisitedRouteStackMobile = true;\n\n model(\n params: Record,\n transition: Transition\n ): ModelFrom & { resourcePickerUrl: Promise } {\n return {\n ...super.model(params, transition),\n resourcePickerUrl: this.ajax\n .apiRequest<{ value: string }>('engines/addDeviceResources/resourcePickerUrl')\n .then((data) => data.value)\n };\n }\n}\n","import BaseController from '../base-controller';\n\n/**\n * @classdesc\n * Base Controller for name and start page.\n */\nexport default class BaseDevicesController extends BaseController {}\n","import { inject as service } from '@ember/service';\nimport { getDealer } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type AddDeviceResourceModel from '@adc/add-device-addon/models/add-device-resource';\nimport type { DealerModel } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport type { EngineConfigurationService } from '@adc/add-device-engine/utils/type-utils';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type EnginesRouterService from 'ember-engines-router-service/services/router';\n\n/**\n * @classdesc\n * The base route for the devices sub-routes.\n */\nexport default class BaseDevicesRoute extends BaseRoute {\n @service declare contextManager: ContextManager & {\n transitionToRouteId(routeId: number, ...params: any[]): void;\n clearVisitedRoutesStack(): void;\n };\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare engineConfig: EngineConfigurationService;\n @service declare ajax: ServiceRegistry['adc-ajax'];\n @service('engine-router-service') declare router: EnginesRouterService;\n @service declare store: ServiceRegistry['store'];\n\n isMediumWidthPage = true;\n\n /**\n * The Flow to a Google Nest Device for ADT depends on the permissions.\n * The two linking steps are:\n * 1. Link ADT to Google account\n * 2. Link ADC to Google account\n * NestVideoIntegration includes both steps 1 and 2\n * NestIntegrations includes only step 2 or the second half of the flow\n * NestAwareResale includes only step 1 or the first half of the flow\n */\n model(\n { viewAll }: { viewAll?: boolean },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: Transition\n ): {\n device: Promise;\n categoryId: string;\n dealer: DealerModel;\n hasNVI: Promise;\n hasNestIntegration: Promise;\n hasNestAwareResale: Promise;\n } {\n const categoryId = (this.paramsFor('categories.devices') as { category: string }).category,\n deviceId = (this.paramsFor(this.routeName) as { device: string }).device;\n\n // system-install and customer-site use different identity models.\n const dealerFromIdentity = getDealer(this.envSettings, this.contextManager);\n\n return {\n device: this.store\n .query('add-device-resource', {\n categoryId,\n deviceId,\n viewAll\n })\n .then((deviceList) => deviceList.slice()[0]),\n categoryId: categoryId,\n dealer: dealerFromIdentity,\n hasNVI: this.ajax\n .apiRequest<{ value: string }>('engines/addDeviceResources/hasNestVideoIntegration')\n .then((data) => data.value === 'True'),\n hasNestIntegration: this.ajax\n .apiRequest<{ value: boolean }>('engines/addDeviceResources/hasNestIntegration')\n .then((data) => data.value),\n hasNestAwareResale: this.ajax.apiRequest('engines/addDeviceResources/nestAwareResale')\n };\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEngineInCustomerEmber } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport { Home } from '@adc/app-infrastructure/enums/NativeView';\nimport BaseDevicesController from './base-devices-controller';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * Handles the mobile app transition when the engine is mounted in customer-site and is in the app.\n */\nfunction handleCustomerEmberMobileAppTransition(this: BaseExitProcessController): boolean {\n if (!isEngineInCustomerEmber(this.envSettings)) {\n return false;\n }\n\n const { nativeBridge } = this;\n\n if (!this.contextManager.get('identityModel.isMobileApp')) {\n return false;\n }\n\n // Close the webview if the mobile app supports it\n if (nativeBridge.doesSupportCloseWebViewV2) {\n nativeBridge.closeWebViewV2();\n nativeBridge.closeWebViewV2(); // close both webViews if this is in a child webView\n return true;\n }\n\n // Otherwise transition to native content\n if (nativeBridge.doesSupportTransitionToNativeView) {\n nativeBridge.transitionToNativeView(Home);\n return true;\n }\n\n // Transition to WebView route if native transition is not available.\n this.router.transitionTo('categories');\n return true;\n}\n\n/**\n * @classdesc\n * Controller for exit process route whether the add device install was successful or not.\n */\nexport default class BaseExitProcessController extends BaseDevicesController {\n @service declare ajax: ServiceRegistry['adc-ajax'];\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n\n /**\n * Transitions to the Select Category route, which is the beginning of the Add Device flow.\n */\n @action\n goToSelectCategory(): void {\n const { contextManager, nativeBridge } = this;\n\n contextManager.resetVisitedRoutesStack();\n\n if (\n contextManager.get('identityModel.isMobileApp') &&\n nativeBridge.doesSupportCloseWebViewV2 &&\n nativeBridge.doesSupportRefreshWebView\n ) {\n nativeBridge.closeWebViewV2(); // close child webView\n nativeBridge.refreshWebView(); // refresh the parent webView so that it returns to the start of the add-device workflow\n } else {\n this.router.transitionTo('categories');\n }\n }\n\n /**\n * Completes the installation process and then exits the installation flow.\n */\n @action\n completeInstall(): void {\n // Finish installation process by taking the panel out of learn mode.\n this.ajax.apiRequest('swa/AirFx/ExitPanelZWaveLearnMode', undefined, null, 'POST');\n\n this.contextManager.resetVisitedRoutesStack();\n\n if (!handleCustomerEmberMobileAppTransition.call(this)) {\n this.send('exitAddDevice');\n }\n }\n}\n","import { action } from '@ember/object';\nimport BaseDevicesRoute from './base-devices-route';\n\n/**\n * @classdesc\n *\n * Exit process route whether the add device install was successful or not.\n */\nexport default class BaseExitProcessRoute extends BaseDevicesRoute {\n /**\n * Transitions to the route where users should go when they choose to exit Add Device.\n */\n @action exitAddDevice(): void {\n this.router.transitionToExternal('addDeviceExitRoute');\n }\n\n /**\n * Handle events that need to happen when the route is transitioned to.\n *\n * Wrap up an installation by sending user codes and scheduling a network rediscovery.\n * NOTE: The wrap-up is triggered here after the device is added so that it is not dependent on any user interaction.\n */\n didTransition(): true {\n super.didTransition();\n\n this.ajax.apiRequest('swa/AirFx/AddDeviceWrapUp', undefined, null, 'POST');\n this.contextManager.resetVisitedRoutesStack();\n return true;\n }\n}\n","import { intlPath } from '@adc/i18n/path';\nimport BaseExitProcessController from '../base-exit-process-controller';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Add Device Install Complete route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class CompletePageController extends BaseExitProcessController {\n declare model: ModelFrom;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/complete': CompletePageController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseExitProcessRoute from '../base-exit-process-route';\n\n/**\n * @classdesc\n * The route that completes the Add Device process.\n */\nexport default class CategoriesDevicesCompleteRoute extends BaseExitProcessRoute {\n @alias('engineConfig.routeIdEmberAddDeviceComplete')\n declare routeId: number;\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../base-devices-controller';\n\nimport type { ModelFrom, ResolvedModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Default Notifications route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class DefaultNotificationsController extends BaseDevicesController {\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n\n declare model: ModelFrom;\n resolvedModel?: Pick, 'device' | 'defaultNotifications'>;\n\n /**\n * Saves notifications and transitions to complete page.\n */\n @action\n save(deviceId: string): void {\n this.ajax\n .apiRequest(\n 'engines/addDeviceResources/saveNotifications',\n undefined,\n this.resolvedModel?.defaultNotifications,\n 'POST'\n )\n .then(() => {\n this.router.transitionTo('categories.devices.complete', deviceId);\n })\n .catch(() => {\n this.notificationManager.addWarning(this.intl.tc(this, 'saveError'));\n this.router.transitionTo('categories.devices.complete', deviceId);\n });\n }\n /**\n * Saves notifications and transitions to complete page.\n */\n @action\n goToEdit(notifId: string): void {\n this.send('transitionToNotificationEdit', notifId, this.resolvedModel?.device.id);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/default-notifications': DefaultNotificationsController;\n }\n}\n","import { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Transition from '@ember/routing/transition';\n\ntype DefaultNotification = {\n notificationDesc: string;\n notificationId: string;\n enabled: boolean;\n};\n\n/**\n * @classdesc\n * Route for a device's default notifications.\n */\nexport default class DefaultNotificationsRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceDefaultNotifications')\n declare routeId: number;\n\n model(\n params: Record,\n transition: Transition\n ): ModelFrom & {\n defaultNotifications: Promise;\n } {\n return {\n ...super.model(params, transition),\n\n defaultNotifications: this.ajax\n .apiRequest<{\n data?: { attributes: DefaultNotification }[];\n }>('engines/addDeviceResources/getDefaultNotifications')\n .then((res) => (res.data ?? []).map((dn) => dn.attributes))\n };\n }\n\n @action\n transitionToNotificationEdit(notifId: string, deviceId: string): void {\n const categoryId = (this.paramsFor('categories.devices') as { category: string }).category;\n this.router.transitionToExternal('wizardNotificationEdit', {\n queryParams: {\n notificationId: notifId,\n categoryId,\n deviceId\n }\n });\n }\n}\n","import { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../base-devices-controller';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Page for notifying user that their Google Nest account is hooked up to a different email than what is on file.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class DifferentAccountsController extends BaseDevicesController {\n declare model: ModelFrom;\n\n /**\n * Transitions to the Google Home App.\n */\n @action\n goToGoogleHomeApp(): void {\n this.contextManager.transitionToUrl('http://madeby.google.com/home-app/?deeplink=&OpenExternally=true');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/different-accounts': DifferentAccountsController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * Page for notifying user that their Google Nest account is hooked up to a different email than what is on file.\n *\n * Created originally for Google Nest installations.\n */\nexport default class DifferentAccountsRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceDifferentAccounts')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n}\n","import { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEngineInCustomerEmber } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport { MatterInstall } from '@adc/app-infrastructure/enums/NativeView';\nimport BaseDevicesController from '../base-devices-controller';\n\nimport type AddDeviceResourceModel from '@adc/add-device-addon/models/add-device-resource';\nimport type { ModelFrom, ResolvedModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Add Device Select Category route.\n */\nexport default class SelectDeviceController extends BaseDevicesController {\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n queryParams = ['viewAll'];\n viewAll = false;\n\n /**\n * Should the link to leave add device be shown?\n */\n @computed('resolvedModel.{hasDevicesInstalled.value.hasDevicesInstalled,categories.[]}', 'showManufacturerName')\n get showExitAddDeviceLink(): boolean {\n const { resolvedModel } = this;\n\n return (\n !!resolvedModel &&\n resolvedModel.hasDevicesInstalled.value.hasDevicesInstalled &&\n resolvedModel.categories.length === 1 &&\n !this.showManufacturerName\n );\n }\n\n /**\n * Should the manufacturer name be shown?\n */\n get showManufacturerName(): boolean {\n return isEngineInCustomerEmber(this.envSettings);\n }\n\n /**\n * Handles the web and mobile app transitions for Matter commissioning.\n *\n * @returns - Returns true if the category needs to navigate away to native Matter commissioning.\n */\n shouldTransitionToMatterCommissioning(device: AddDeviceResourceModel): boolean {\n if (device.isMatterDevice && this.nativeBridge.doesSupportTransitionToNativeView) {\n this.nativeBridge.transitionToNativeView(MatterInstall);\n return true;\n }\n\n return false;\n }\n\n /**\n * Transitions to the start install wizard route.\n */\n @action goToStartInstall(device: AddDeviceResourceModel): void {\n if (!this.shouldTransitionToMatterCommissioning(device)) {\n this.router.transitionTo('categories.devices.start', device.id);\n }\n }\n\n /**\n * Transitions to the add device exit route.\n */\n @action exitAddDevice(): void {\n this.send('transitionToAddDeviceExit');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/index': SelectDeviceController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseIndexRoute from '../../base-index-route';\n\n/**\n * @classdesc\n * Route displays a list of available devices for the Add Device flow.\n */\nexport default class CategoriesDevicesIndexRoute extends BaseIndexRoute {\n @alias('engineConfig.routeIdEmberAddDeviceDevices')\n declare routeId: number;\n\n /**\n * When clicking the back button in the site header, should this page be skipped?\n *\n * @note This property is used for customer-site version of context-manager in popRoutesStackToPreviousNonSkippedRoute().\n */\n skipWhenTransitioningBack = false;\n\n /**\n * Returns true if the route should be skipped based on the number of devices.\n */\n skipDeviceSelection(availableDeviceCount: number): boolean {\n // We skip device selection if only one available device exists.\n return availableDeviceCount === 1;\n }\n\n /**\n * Redirects to the device start route if needed.\n */\n afterModel(model: ReturnType): void {\n Promise.resolve(model.devices).then((devices) => {\n if (devices && this.skipDeviceSelection(devices.length)) {\n // Setting skipWhenTransitioningBack to true so that we don't return to this page from devices page.\n this.skipWhenTransitioningBack = true;\n\n this.controllerFor('categories/devices/index').send('goToStartInstall', devices.slice()[0]);\n }\n });\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseExitProcessRoute from '../base-exit-process-route';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * @classdesc\n *\n * Completion route for a link installation flow.\n *\n * Created originally for Google Nest installations.\n */\nexport default class CategoriesDevicesLinkCompleteRoute extends BaseExitProcessRoute {\n @service declare ajax: ServiceRegistry['adc-ajax'];\n\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceLinkComplete')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n\n model(\n params: Record,\n transition: Transition\n ): ModelFrom & {\n totalNestDevices: Promise;\n } {\n return {\n ...super.model(params, transition),\n\n totalNestDevices: this.ajax\n .apiRequest<{ value: number }>('engines/addDeviceResources/totalNestDevicesInstalled')\n .then((data) => data.value)\n };\n }\n\n afterModel(model: ModelFrom): void {\n Promise.all([model.hasNVI, model.hasNestIntegration, model.totalNestDevices, model.device]).then(\n ([hasNestVideoIntegration, hasNestIntegration, totalNestDevices, device]) => {\n if (!hasNestVideoIntegration && hasNestIntegration && totalNestDevices > 0) {\n this.router.transitionTo('categories.devices.link-congratulations', model.categoryId, device.id);\n }\n }\n );\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * Congratulations route for Google Nest Installation\n */\nexport default class CongratulationsRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceCongratulations')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * Landing page for a multi-step link installation flow.\n *\n * Created originally for Google Nest installations.\n */\nexport default class LinkInProgressRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceLinkInProgress')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * Start page for a link installation flow.\n *\n * Created originally for Google Nest installations.\n */\nexport default class LinkStartRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceLinkStart')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n}\n","import { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../base-devices-controller';\n\n/**\n * @classdesc\n * Controller for the unsuccessfully linked devices.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class LinkUnsuccessfulController extends BaseDevicesController {\n @action\n back(): void {\n this.router.transitionTo('categories');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/link-unsuccessful': LinkUnsuccessfulController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * Route for unsuccessfully linked devices\n */\nexport default class LinkUnsuccessfulRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceLinkUnsuccessful')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n\n // Clear the routes stack when navigating away\n deactivate(): void {\n this.contextManager.clearVisitedRoutesStack();\n }\n}\n","import EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type EnginesRouterService from 'ember-engines-router-service/services/router';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for mount route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class Controller extends EmberController {\n @service('engine-router-service') declare router: EnginesRouterService;\n @service declare contextManager: ContextManager;\n\n declare model: ModelFrom;\n\n /**\n * Goes to the add device complete install route.\n */\n @action\n goToCompleteInstall(device: Awaited['device']>): void {\n this.router.transitionTo(`categories.devices.complete`, device.id);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/mount': Controller;\n }\n}\n","import { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * route for mounting step.\n */\nexport default class Route extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceMount')\n declare routeId: number;\n\n /**\n * Handle events that need to happen when the route is transitioned to.\n */\n @action\n didTransition(): void {\n // Triggers the default didTransition() within @adc/app-infrastructure's base-route\n super.didTransition;\n\n // Resets the routes stack so that there is no back button in the app-header.\n this.contextManager.resetVisitedRoutesStack();\n }\n}\n","import { action } from '@ember/object';\nimport { bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport {\n processValidationErrorsFromResponse,\n clearValidationErrors\n} from '@adc/ajax/utils/validation-error-processing';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../base-devices-controller';\n\nimport type { ModelFrom, ResolvedModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Name Device route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class NameController extends BaseDevicesController {\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n @bool('resolvedModel.device.isRFDevice')\n declare isRFDevice: boolean;\n\n /**\n * Transitions to mount page if current device is RF sensor.\n * Go to complete page other wise.\n */\n transitionToNextRoute(): void {\n const device = this.resolvedModel?.device;\n if (device) {\n this.router.transitionTo(`categories.devices.${device.isRFDevice ? 'mount' : 'complete'}`, device.id);\n }\n }\n\n /**\n * Saves the new name for the most recently installed device.\n */\n @action updateName(name: string, delayedHandler: Promise): Promise {\n clearValidationErrors.call(this);\n\n const promise = this.ajax.apiRequest(\n `engines/addDeviceResources/nameNewDevice?name=${name}`,\n undefined,\n null,\n 'PUT'\n );\n\n promise\n .then(() => {\n delayedHandler.then(() => {\n this.transitionToNextRoute();\n });\n })\n .catch((response) => {\n processValidationErrorsFromResponse.call(this, response);\n\n // If the error is not a validation error for the name, there was a problem while naming the device or finding the device to name.\n // @ts-expect-error I don't see how this property actually exists.\n if (!this.deviceNameError) {\n this.notificationManager.addError(this.intl.tc(this, 'couldNotRename'));\n }\n });\n\n return promise;\n }\n\n /**\n * Goes to the add device complete install route.\n * If Rfsensor, we go to the mount route.\n */\n @action goToNextStep(): void {\n this.transitionToNextRoute();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/name': NameController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseDevicesRoute from '../base-devices-route';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * @classdesc\n * Route that is used to name a new device after it has been added to the system.\n */\nexport default class DevicesNameRoute extends BaseDevicesRoute {\n @service declare ajax: ServiceRegistry['adc-ajax'];\n\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceName')\n declare routeId: number;\n\n /**\n * Handle events that need to happen when the route is transitioned to.\n */\n didTransition(): void {\n // Triggers the default didTransition() within @adc/app-infrastructure's base-route\n super.didTransition();\n\n // Resets the routes stack so that there is no back button in the app-header.\n this.contextManager.resetVisitedRoutesStack();\n }\n\n model(\n param: Record,\n transition: Transition\n ): ModelFrom & { deviceName: Promise } {\n return {\n ...super.model(param, transition),\n\n deviceName: this.ajax\n .apiRequest<{ value: string }>('engines/addDeviceResources/getNewDeviceName')\n .then((response) => response.value)\n };\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\n/**\n * @classdesc\n * Information page for starting a link installation flow.\n *\n * Created originally for Google Nest installations.\n */\nexport default class StartInfoRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceStartInfo')\n declare routeId: number;\n\n /**\n * Explicit setting to hide the back arrow in the app header\n * for the web\n */\n hideBackArrowWeb = true;\n clearVisitedRouteStackMobile = true;\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEngineInCustomerEmber } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport { getNavigationUrls } from '@adc/add-device-engine/utils/add-device-navigation-url-helper';\nimport { NamiInstall } from '@adc/app-infrastructure/enums/NativeView';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../base-devices-controller';\n\nimport type AddDeviceCategoryModel from '@adc/add-device-addon/models/add-device-category';\nimport type AddDeviceResourceModel from '@adc/add-device-addon/models/add-device-resource';\nimport type { ModelFrom, EngineConfigurationService } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\nexport const NAMI_MANUFACTURER = 'nami';\nexport const ENABLE_NAMI_MOBILE_NATIVE_DIY_PROCESS_FEATURE_TOGGLE_ID = 305;\n\ntype OAuthUrl = {\n data: {\n oAuthUrl: string;\n };\n};\n\n/**\n * Returns the state of the provided feature toggle input.\n * It will return whether the feature toggle is active for the customer or the customer's dealer.\n * If the feature toggle is not found, it will return false.\n */\nexport async function isFeatureToggleActiveForCustomerOrDealer(\n this: { ajax: ServiceRegistry['adc-ajax'] },\n featureToggleId: number\n): Promise {\n const apiEndpoint = `swa/Utilities/featureToggle/customerAndDealer?featureToggleId=${featureToggleId}`;\n try {\n const featureToggleResponse = await this.ajax.apiRequest<{ data: { isActive: boolean } }>(apiEndpoint);\n return featureToggleResponse.data.isActive;\n } catch {\n // if the endpoint does not (yet) exists or returns any error the feature toggle is considered inactive\n return false;\n }\n}\n\n/**\n * Returns the energy account id for oauth device.\n */\nasync function getEnergyAccountId(this: StartController, device: AddDeviceResourceModel): Promise {\n // Get the energyAccount list\n const energyAccounts = await this.ajax.apiRequest<{ data: Record }>(\n 'swa/AirFx/GetOAuth2EnergyAccounts'\n );\n\n // Find the id of the value we want\n let energyAccountId = 0;\n Object.keys(energyAccounts.data).forEach((energyAccountString) => {\n if (energyAccountString === device.referenceValue) {\n energyAccountId = energyAccounts.data[energyAccountString];\n }\n });\n\n return energyAccountId;\n}\n\n/**\n * Returns the energy account url that can be redirected to for oauth wizards.\n */\nexport async function getEnergyAccount(\n this: BaseDevicesController & { nativeBridge: ServiceRegistry['native-bridge'] },\n device: AddDeviceResourceModel\n): Promise {\n const energyAccountId = await getEnergyAccountId.call(this, device);\n\n // Get the url for that energy account id\n const energyAccountUrl = await this.ajax.apiRequest(\n `swa/AirFx/OAuth2AuthorizationUrl/${energyAccountId}`\n );\n\n return energyAccountUrl;\n}\n\n/**\n * Transitions into the OAuth flow given an energy account url.\n */\nexport function transitionToOAuthUrl(\n this: BaseDevicesController & { nativeBridge: ServiceRegistry['native-bridge'] },\n energyAccountUrl: OAuthUrl,\n device: AddDeviceResourceModel\n): void {\n const oAuthUrl = energyAccountUrl.data.oAuthUrl;\n\n // if the account is already linked we do not want to launch a browser\n if (oAuthUrl.includes('web/system/wizard/v1/automation/integrationexists')) {\n this.router.transitionTo('categories.devices.already-linked', device.id);\n } else if (this.nativeBridge.doesSupportLaunchBrowser) {\n this.nativeBridge.launchBrowser(oAuthUrl, true);\n } else {\n this.contextManager.transitionToUrl(oAuthUrl, true);\n }\n}\n\n/**\n * @classdesc\n * Controller for the Start Install Wizard route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class StartController extends BaseDevicesController {\n @service declare engineConfig: EngineConfigurationService;\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n\n queryParams = ['dlCode', 'deviceName', 'deviceType', 'viewAll'];\n\n declare model: ModelFrom;\n\n @tracked\n dlCode = '';\n\n @tracked\n deviceName = '';\n\n @tracked\n deviceType = '';\n\n viewAll = false;\n\n get isPrePairedDevice(): boolean {\n return this.dlCode !== '';\n }\n\n /**\n * Show the link to go back to device selection if not in customer-site.\n */\n get showBackLink(): boolean {\n return !isEngineInCustomerEmber(this.envSettings);\n }\n\n /**\n * Transitions to the installation wizard for the selected device.\n * @param device - device model for the json wizard OR oAuth wizard we will launch\n * @param categoryId - the category id of the device we are installing\n * @param deviceId - the device id.\n *\n */\n @action\n async goToInstallationWizard(device: AddDeviceResourceModel, categoryId: string, deviceId: string): Promise {\n if (this.willTransitionToLegacyInstallFlow(device) || (await this.willTransitionToMobileNativeFlow(device))) {\n return;\n }\n\n // goToInstallationWizard is called from the afterModel hook in the route.js file\n // because we don't want the start page to fully load for the user. this.router.currentURL\n // isn't set until after the route is loaded so when it is called from the routejs file\n // we either see the previous url or null. So we have to use this.router_router.url here\n // instead if this.router.currentURL is null.\n // @ts-expect-error We need to find a non-private way to do this, because someday this will change in an ember upgrade stop working.\n const currentURL = this.router?.currentURL ? this.router.currentURL : this.router?._router?.url;\n\n const { cancelUrl, returnUrl, troubleShootFinishUrl, categoryUrl, chooseDeviceUrl } = getNavigationUrls(\n currentURL,\n device.isNamingNeeded,\n categoryId,\n deviceId\n );\n\n const queryParamsForWizard: any = {\n returnToUrl: returnUrl,\n cancelUrl,\n troubleShootFinishUrl,\n categoryUrl,\n chooseDeviceUrl,\n title: this.intl.tc(this, 'wizardTitle', {\n deviceName: device.displayName\n }),\n timeoutSecondsDefault: 20000,\n isFromAddDevice: true,\n dlCode: this.dlCode,\n deviceName: this.deviceName,\n deviceType: this.deviceType,\n isPrePairedDevice: this.isPrePairedDevice\n };\n\n if (device.isUsingInstallerLedFlow) {\n const energyAccountId = await getEnergyAccountId.call(this, device);\n\n // Add energyAccount as a new query param.\n queryParamsForWizard.eaid = energyAccountId;\n }\n // We will redirect to an external URL if it's an OAuth device AND it's not an installer led flow.\n else if (device.referenceType === 'OAuth') {\n // Set the Add Device Context values.\n await this.ajax.apiRequest(\n `swa/AirFx/SetOAuthParams?returnToUrl=${queryParamsForWizard.returnToUrl}`,\n undefined,\n null,\n 'POST'\n );\n\n const energyAccountUrl = await getEnergyAccount.call(this, device);\n\n transitionToOAuthUrl.call(this, energyAccountUrl, device);\n return;\n }\n\n // Go to the device installation wizard, if this is in mobile then open it in a new fragment/modal\n if (this.contextManager.get('identityModel.isMobileApp') && this.nativeBridge.doesSupportLaunchNewContext) {\n queryParamsForWizard.cancelUrl = 'NativeBridgeCloseWebView';\n queryParamsForWizard.wizardEnum = device.installWizardEnum;\n this.nativeBridge.launchNewContext(\n 0,\n this.router.urlForExternal('wizardEngineLaunch', {\n queryParams: queryParamsForWizard\n })\n );\n } else {\n this.contextManager.transitionToWizard(device.installWizardEnum, returnUrl, queryParamsForWizard);\n }\n }\n\n /**\n * Transitions to the device selection page.\n */\n @action\n goBackToDeviceSelection(category: AddDeviceCategoryModel): void {\n if (this.isInSystemInstall) {\n this.router.transitionTo('choose-device');\n } else {\n this.router.transitionTo('categories.devices', category.id);\n }\n }\n\n /**\n * Handle the transition to a legacy route, specifically the garage gateway page.\n * @param {AddDeviceResource} device\n * @returns True if the page transitions.\n */\n willTransitionToLegacyInstallFlow(device: AddDeviceResourceModel): boolean {\n const shouldTransition =\n device.referenceType === 'Legacy' &&\n !this.contextManager.get('identityModel.isMobileApp') &&\n !this.isInSystemInstall;\n\n if (shouldTransition) {\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-context-manager-transition\n this.contextManager.transitionToRouteId(this.engineConfig.routeIdAddGarageGatewayV1);\n }\n\n return shouldTransition;\n }\n\n /**\n * Handle the transition to a mobile native views, for example for Nami devices.\n */\n async willTransitionToMobileNativeFlow(device: AddDeviceResourceModel): Promise {\n const shouldTransition = !!(\n device.manufacturerName?.toLowerCase() === NAMI_MANUFACTURER &&\n this.nativeBridge.doesSupportTransitionToNativeView &&\n this.contextManager.get('identityModel.isMobileApp') &&\n (await isFeatureToggleActiveForCustomerOrDealer.call(\n this,\n ENABLE_NAMI_MOBILE_NATIVE_DIY_PROCESS_FEATURE_TOGGLE_ID\n ))\n );\n\n if (shouldTransition) {\n this.nativeBridge.transitionToNativeView(NamiInstall);\n }\n\n return shouldTransition;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/start': StartController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseDevicesRoute from '../base-devices-route';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type StartController from './controller';\n\n/**\n * @classdesc\n * Route displays option to begin the add device process.\n */\nexport default class StartPageRoute extends BaseDevicesRoute {\n isMediumWidthPage = true;\n\n FrontPointSecuritySensorWizardId = '1003';\n\n @alias('engineConfig.routeIdEmberAddDeviceStart')\n declare routeId: number;\n\n /**\n * If the device is a Google Nest and the user already has an integration\n * then skip this page and transition to the already linked route.\n */\n async afterModel({ device }: ModelFrom): Promise {\n const resolvedDevice = await device;\n if (!resolvedDevice) {\n return;\n }\n\n const { id, isOAuthDevice, referenceValue } = resolvedDevice;\n\n if (id === this.FrontPointSecuritySensorWizardId) {\n // If the device is front point security sensor wizard, we want to skip the add-device's categories/devices/start page.\n // We need to provide the 2nd argument with '/1003/start' appended because that's the URL for the start page, and that's the base reference point for the logic to calculate returnRoute, cancelRoute, etc.\n const categoryId = (this.paramsFor('categories.devices') as { category: string }).category,\n { dlCode, deviceType } = this.paramsFor(this.routeName) as { dlCode: string; deviceType: string };\n\n const controller = this.controllerFor('categories/devices/start') as StartController;\n\n // Set both dlCode and deviceType if they are queryParams to be used.\n // They aren't set if you are navigating to the wizard using a\n // deep link\n if (dlCode && deviceType) {\n controller.setProperties({\n dlCode,\n deviceType\n });\n }\n\n await controller.goToInstallationWizard(resolvedDevice, categoryId, id);\n\n // Makes sure the query params are reset when the deep redirect links are used\n // since query params are sticky by default\n this.resetController(controller, true);\n }\n\n // check is specific to nest thermostats\n if (isOAuthDevice) {\n const energyAccounts = await this.ajax.apiRequest<{ data: Record }>(\n 'swa/AirFx/GetOAuth2EnergyAccounts'\n );\n\n // Find the id of the value we want\n const energyAccount = Object.entries(energyAccounts.data)?.find(\n (energyAccount) => energyAccount[0] === referenceValue\n );\n const energyAccountId = energyAccount && energyAccount[1] ? energyAccount[1] : 0;\n\n const hasExistingIntegration = await this.ajax.apiRequest(\n `swa/AirFx/GoogleNestIntegrationExists/${energyAccountId}`\n );\n if (hasExistingIntegration) {\n this.router.transitionTo('categories.devices.already-linked', id);\n }\n }\n }\n\n /**\n * A hook that resets the query parameters for start page when exiting out of the route.\n * source: https://api.emberjs.com/ember/3.22/classes/Route/methods/resetController?anchor=resetController\n *\n * @note\n * Query parameters are stick by default(ref: https://guides.emberjs.com/release/routing/query-params/#toc_sticky-query-param-values)\n * However, we do not want to have the same query params when we are revisiting the start page repeatedly.\n * Therefore, when we exit the start page, we reset the queryParams to be null.\n */\n resetController(controller: StartController, isExiting: boolean): void {\n if (isExiting) {\n const { queryParams } = controller;\n for (let i = 0; i < queryParams.length; i++) {\n controller.set(queryParams[i], '');\n }\n }\n }\n}\n","import { intlPath } from '@adc/i18n/path';\nimport BaseExitProcessController from '../base-exit-process-controller';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Add Device Install Troubleshoot route.\n */\n@intlPath({ module: '@adc/add-device-engine' })\nexport default class CategoriesDevicesTroubleshootController extends BaseExitProcessController {\n declare model: ModelFrom;\n\n queryParams = ['deviceAdded'];\n\n deviceAdded = false;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/devices/troubleshoot': CategoriesDevicesTroubleshootController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport BaseExitProcessRoute from '../base-exit-process-route';\n\n/**\n * @classdesc\n * The route that completes the Add Device process for troubleshoot flow.\n */\nexport default class CategoriesDevicesTroubleshootRoute extends BaseExitProcessRoute {\n @alias('engineConfig.routeIdEmberAddDeviceTroubleshoot')\n declare routeId: number;\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { empty } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEngineInCustomerEmber } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport { DoorbellCameraInstall, VideoCameraInstall, MatterInstall } from '@adc/app-infrastructure/enums/NativeView';\nimport BaseController from '../base-controller';\n\nimport type AddDeviceCategoryModel from '@adc/add-device-addon/models/add-device-category';\nimport type { ModelFrom, ResolvedModelFrom, EngineConfigurationService } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\n/**\n * Handles the web and mobile app transitions for video installations.\n *\n * @returns - Returns true if the category needs to navigate away to video.\n */\nfunction shouldTransitionToVideoInstalls(this: CategoriesController): boolean {\n if (!isEngineInCustomerEmber(this.envSettings)) {\n return false;\n }\n\n if (this.category?.isVideoCategory) {\n if (this.nativeBridge.doesSupportTransitionToNativeView) {\n this.nativeBridge.transitionToNativeView(VideoCameraInstall);\n } else {\n this.send('transitionToAddVideo');\n }\n\n return true;\n }\n\n if (this.category?.isDoorbellCameraCategory) {\n this.nativeBridge.transitionToNativeView(DoorbellCameraInstall);\n return true;\n }\n\n return false;\n}\n\n/**\n * Handles the transition into the Google / ADT specific flow.\n *\n * @private\n * @instance\n *\n * @returns True if the install flow should go into the Google Nest flow.\n */\nfunction shouldTransitionToGoogleNestFlow(this: CategoriesController): boolean {\n const { category, resolvedModel } = this;\n if (!category || !resolvedModel) {\n return false;\n }\n\n if (category.isGoogleNestCategory) {\n const key =\n resolvedModel.hasGoogleNestAccountLinked &&\n (resolvedModel.hasNestVideoIntegration ||\n resolvedModel.hasNestIntegration ||\n resolvedModel.hasNestAwareResale)\n ? 'already-linked'\n : 'start-info';\n\n this.router.transitionTo(\n `categories.devices.${key}`,\n category.id,\n this.engineConfig.addDeviceResource.GoogleNestDevice\n );\n return true;\n }\n\n return false;\n}\n\n/**\n * @classdesc\n *\n * Controller for the Add Device Categories route.\n */\nexport default class CategoriesController extends BaseController {\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n @service declare engineConfig: EngineConfigurationService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n queryParams = ['viewAll'];\n viewAll = false;\n\n @tracked category?: AddDeviceCategoryModel;\n\n /**\n * Returns true if there are no available categories.\n */\n @empty('model.categories')\n declare noCategories: boolean;\n\n /**\n * If the account has devices already installed and engine is not in customer-site, show the link to leave add device.\n */\n @computed('resolvedModel.hasDevicesInstalled.value.hasDevicesInstalled')\n get showExitAddDeviceLink(): boolean {\n const { resolvedModel } = this;\n return !!(\n resolvedModel &&\n resolvedModel.hasDevicesInstalled.value.hasDevicesInstalled &&\n !isEngineInCustomerEmber(this.envSettings)\n );\n }\n\n /**\n * Handles the web and mobile app transitions for Matter commissioning.\n *\n * @returns - Returns true if the category needs to navigate away to native Matter commissioning.\n */\n shouldTransitionToMatterCommissioning(category: AddDeviceCategoryModel): boolean {\n if (category.isMatterCategory && this.nativeBridge.doesSupportTransitionToNativeView) {\n this.nativeBridge.transitionToNativeView(MatterInstall);\n return true;\n }\n\n return false;\n }\n\n /**\n * Transitions to the next step in the Add Device flow after a category is selected.\n */\n @action\n goToSelectDevice(category: AddDeviceCategoryModel): void {\n this.category = category;\n\n if (\n shouldTransitionToVideoInstalls.call(this) ||\n shouldTransitionToGoogleNestFlow.call(this) ||\n this.shouldTransitionToMatterCommissioning(category)\n ) {\n return;\n }\n\n this.router.transitionTo('categories.devices', category.id);\n }\n\n /**\n * Transitions to the add device exit route.\n */\n @action\n exitAddDevice(): void {\n this.send('transitionToAddDeviceExit');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'categories/index': CategoriesController;\n }\n}\n","import { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEngineInCustomerEmber } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport BaseIndexRoute from '../base-index-route';\n\nimport type Transition from '@ember/routing/transition';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type EnginesRouterService from 'ember-engines-router-service/services/router';\nimport type Controller from './controller';\n\n/**\n * @classdesc\n * Route displays a list of available device categories for the Add Device flow.\n */\nexport default class Route extends BaseIndexRoute {\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service('engine-router-service') declare router: EnginesRouterService;\n\n @alias('engineConfig.routeIdEmberAddDeviceCategories')\n declare routeId: number;\n\n /**\n * Checks to see if the visitedRouteStackMobile should be cleared to show an\n * back button or hamburger menu\n */\n @computed('contextManager.visitedRoutesStack.[]')\n get clearVisitedRouteStackMobile(): boolean {\n return !this.contextManager?.visitedRoutesStack || this.contextManager.visitedRoutesStack.length < 1;\n }\n\n /**\n * When clicking the back button in the site header, should this page be skipped?\n *\n * @note This property is used for customer-site version of context-manager in popRoutesStackToPreviousNonSkippedRoute().\n */\n skipWhenTransitioningBack = false;\n\n /**\n * Returns true if the route should be skipped based on the number of categories and the parent application.\n */\n private skipCategoriesRoute(availableCategoryCount: number): boolean {\n return availableCategoryCount == 1 && !isEngineInCustomerEmber(this.envSettings);\n }\n\n /**\n * Redirects to the select device route if needed.\n */\n afterModel(model: ReturnType, transition: Transition): void {\n super.afterModel(model, transition);\n\n Promise.resolve(model.categories).then((categories) => {\n if (this.skipCategoriesRoute(categories.length)) {\n // Setting skipWhenTransitioningBack to true so that we don't return to this page from devices page.\n this.skipWhenTransitioningBack = true;\n\n // Need to go back and clean this up since we are manipulating the controller...\n (this.controllerFor('categories/index') as Controller).goToSelectDevice(categories.slice()[0]);\n }\n });\n }\n\n /**\n * Transitions to the external add video page.\n */\n @action\n transitionToAddVideo(): void {\n this.router.transitionToExternal('videoAddNewDevice');\n }\n}\n","import { action, computed } from '@ember/object';\nimport { filterBy, lt } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport BaseDevicesController from '../../categories/devices/base-devices-controller';\n\nimport type PairedDeviceModel from '@adc/add-device-addon/models/paired-device';\nimport type { ModelFrom, ResolvedModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for delete device route.\n */\n@intlPath({ module: '@adc/add-device-engine', path: 'choose-device.delete-device' })\nexport default class DeleteDeviceController extends BaseDevicesController {\n @service declare modals: ServiceRegistry['modals'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * Computed value that returns all the model prepaired devices if setUpCompleted is false.\n * but with an additional isSelected property mapped to it\n *\n * @note we don't want to show devices that's been completely set up to be deleted.\n */\n @computed('resolvedModel.prepairedDeviceList.[]')\n get prepairedDevices(): BinaryListItem[] {\n return (\n this.resolvedModel?.prepairedDeviceList\n .filter((d) => d.setUpCompleted === false)\n .map(\n (d) =>\n new BinaryListItem({\n label: d.deviceName,\n props: d\n })\n ) ?? []\n );\n }\n\n /**\n * The current selected devices.\n */\n @filterBy('prepairedDevices', 'state', true)\n declare selectedDevices: BinaryListItem[];\n\n /**\n * Disable button if not a single item is checked.\n */\n @lt('selectedDevices.length', 1)\n declare buttonDisabled: boolean;\n\n /**\n * Action that redirects to troubleshoot page\n */\n @action\n transitionToSetup(): void {\n this.router.transitionTo('choose-device.troubleshoot-missing');\n }\n\n /**\n * Action that occurs when the user clicks to delete one or more pre-paired devices\n * Opens a modal to confirm the delete and then calls the api to delete\n */\n @action\n deleteDevices(): void {\n const { intl } = this;\n\n this.modals.showDeleteModal({\n title: intl.tc(this, 'deleteModalTitle'),\n message: intl.tc(this, 'deleteModalMessage'),\n delete: () => {\n // submit deleteDeviceList\n this.selectedDevices.forEach((d) => d.props.destroyRecord());\n }\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n undefined: DeleteDeviceController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type PairedDeviceModel from '@adc/add-device-addon/models/paired-device';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * @classdesc\n * Route that is used to display the troubleshoot page when a device is missing from the box.\n */\nexport default class DeleteDeviceRoute extends BaseRoute {\n @service declare store: ServiceRegistry['store'];\n\n isMediumWidthPage = true;\n\n model(): { prepairedDeviceList: ADCStoreQuery } {\n return {\n prepairedDeviceList: this.store.query('paired-device', { getFake: false })\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseDevicesController from '../../categories/devices/base-devices-controller';\n\nimport type PairedDeviceModel from '@adc/add-device-addon/models/paired-device';\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for the Choose Device route.\n */\nexport default class ChooseDeviceController extends BaseDevicesController {\n @service declare engineConfig: { addDeviceCategoryTypes: Record };\n\n declare model: ModelFrom;\n\n /**\n * List of all the Prepaired Devices the customer should have received.\n */\n @tracked prepairedDeviceList?: Awaited['prepairedDeviceList']>;\n\n /**\n * Boolean representing if all the prepaired devices have been set up.\n */\n @computed('prepairedDeviceList.@each.setUpCompleted')\n get allSetUpsComplete(): boolean {\n return !!this.prepairedDeviceList?.every((element) => element.setUpCompleted);\n }\n\n getTranslation = (key: string): string => this.intl.t(`@adc/add-device-engine.choose-device.${key}`);\n\n /**\n * Action for when the user selects \"I'm missing one of these devices\"\n */\n @action\n goToTroubleshoot(): void {\n this.router.transitionTo('choose-device.troubleshoot-missing');\n }\n\n /**\n * Action for when the user selects \"add a device not listed here\"\n */\n @action\n goToDevicePage(): void {\n // Go straight to the Security category\n this.router.transitionTo('categories.devices', this.engineConfig.addDeviceCategoryTypes.Security);\n }\n\n /**\n * Action for when the user selects a prepaired device\n */\n @action\n goToDeviceStart(device: PairedDeviceModel): void {\n this.router.transitionTo('categories.devices.start', device.categoryEnum, device.resourceEnum, {\n queryParams: {\n dlCode: device.dlCode,\n deviceName: device.deviceName\n }\n });\n }\n\n @action\n goToNext(): void {\n this.send('goToNextStep');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'choose-device/index': ChooseDeviceController;\n }\n}\n","import { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type PairedDeviceModel from '@adc/add-device-addon/models/paired-device';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type EnginesRouterService from 'ember-engines-router-service/services/router';\n\n/**\n * @classdesc\n * Route that is used to display a list of prepaired devices for the user to set up.\n */\nexport default class ChooseDeviceRoute extends BaseRoute {\n @service declare ajax: ServiceRegistry['adc-ajax'];\n @service declare store: ServiceRegistry['store'];\n @service('engine-router-service') declare router: EnginesRouterService;\n\n isMediumWidthPage = true;\n\n @alias('engineConfig.routeIdEmberAddDeviceChooseDevice')\n declare routeId: number;\n\n /**\n * Action for when the user clicks \"I'm done adding devices\" button\n */\n @action\n goToNextStep(): void {\n this.router.transitionToExternal('addDeviceExitRoute');\n }\n\n model(): {\n prepairedDeviceList: ADCStoreQuery;\n } {\n return {\n prepairedDeviceList: this.store.query('paired-device', { getFake: false })\n };\n }\n}\n","import { action } from '@ember/object';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseDevicesController from '../../categories/devices/base-devices-controller';\n\nimport type { ModelFrom } from '@adc/add-device-engine/utils/type-utils';\nimport type Route from './route';\n\n/**\n * @classdesc\n * Controller for troubleshoot-missing route.\n */\n@intlPath({ module: '@adc/add-device-engine', path: 'choose-device.troubleshoot-missing' })\nexport default class TroubleshootMissingController extends BaseDevicesController {\n declare model: ModelFrom;\n\n /**\n * Transition to delete flow route.\n */\n @action\n goToDeletePage(): void {\n this.router.transitionTo('choose-device.delete-device');\n }\n\n /**\n * Transitioning to choose device route.\n */\n @action\n goToChooseDevice(): void {\n this.router.transitionTo('choose-device');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'choose-device/troubleshoot-missing': TroubleshootMissingController;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { getDealer } from '@adc/add-device-engine/utils/add-device-config-helper';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type { EngineConfigurationService } from '@adc/add-device-engine/utils/type-utils';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\n/**\n * @classdesc\n * Route that is used to display the troubleshoot page when a device is missing from the box.\n */\nexport default class TroubleshootMissingRoute extends BaseRoute {\n isMediumWidthPage = true;\n\n @service declare contextManager: ContextManager;\n @service declare envSettings: ServiceRegistry['env-settings'];\n @service declare engineConfig: EngineConfigurationService;\n\n @alias('engineConfig.routeIdEmberAddDeviceTroubleshootMissing')\n declare routeId: number;\n\n model(): { dealer: ReturnType } {\n return {\n dealer: getDealer(this.envSettings, this.contextManager)\n };\n }\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { equal } from '@ember/object/computed';\nimport { timeout, task } from 'ember-concurrency';\n\nimport type { Task } from 'ember-concurrency';\n\ninterface ButtonSignInGoogleSignature {\n Element: HTMLButtonElement;\n Args: {\n buttonAction: (buttonAnimation?: Promise, e?: MouseEvent) => Promise | any;\n noDelay?: boolean;\n };\n}\n\nexport default class ButtonSignInGoogle extends Component {\n @tracked asyncState = '';\n\n @equal('asyncState', 'pending')\n declare isPending: boolean;\n\n /**\n * Indicates the async promise has completed (success or failure).\n */\n get isFinished(): boolean {\n const { asyncState } = this;\n return asyncState === 'success' || asyncState === 'warning';\n }\n\n /**\n * This async task must be completed as a drop task so that\n * the user is only able to click the button once.\n */\n executeButtonAction: Task = task({ drop: true }, async (e: MouseEvent) => {\n const { buttonAction } = this.args;\n if (!buttonAction) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let buttonAnimation = (_isSuccess: boolean) => {};\n\n try {\n this.asyncState = 'pending';\n await buttonAction(\n new Promise((r) => (buttonAnimation = r as unknown as (_isSuccess: boolean) => void)),\n e\n );\n this.asyncState = 'success';\n } catch (error) {\n this.asyncState = 'warning';\n } finally {\n const isSuccess = this.asyncState === 'success';\n\n if (!this.args.noDelay) {\n await timeout(isSuccess ? 700 : 3000);\n }\n\n this.asyncState = '';\n\n // Pass success/fail state out with button animation. Considered using promise\n // reject/resolve instead, but unhandled rejects raise application errors.\n buttonAnimation(isSuccess);\n }\n });\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n ButtonSignInGoogle: typeof ButtonSignInGoogle;\n }\n}\n","import { modifier } from 'ember-modifier';\n\nconst OnViewPageModifier = modifier((element: HTMLElement, [callback]: [VoidFunction]): VoidFunction => {\n function handleViewPage(event: Event): void {\n if (!element.contains(event.target as Node) && document.visibilityState === 'visible') {\n callback();\n }\n }\n\n document.addEventListener('visibilitychange', handleViewPage);\n\n // unsubscribe when the element is destroyed\n return () => {\n document.removeEventListener('visibilitychange', handleViewPage);\n };\n});\n\nexport default OnViewPageModifier;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'on-view-page': typeof OnViewPageModifier;\n }\n}\n","import buildRoutes from 'ember-engines/routes';\n\nexport default buildRoutes(function () {\n this.route('categories', function () {\n this.route('devices', { path: '/:category/devices' }, function () {\n this.route('start', { path: '/:device/start' });\n this.route('complete', { path: '/:device/complete' });\n this.route('name', { path: '/:device/name' });\n this.route('troubleshoot', { path: '/:device/troubleshoot' });\n this.route('mount', { path: '/:device/mount' });\n this.route('already-linked', { path: '/:device/already-linked' });\n this.route('default-notifications', { path: '/:device/default-notifications' });\n this.route('start-info', { path: '/:device/start-info' });\n this.route('link-start', { path: '/:device/link-start' });\n this.route('link-in-progress', { path: '/:device/link-in-progress' });\n this.route('link-complete', { path: '/:device/link-complete' });\n this.route('link-congratulations', { path: '/:device/link-congratulations' });\n this.route('try-equipment', { path: '/:device/try-equipment' });\n this.route('install-equipment', { path: '/:device/install-equipment' });\n this.route('different-accounts', { path: '/:device/different-accounts' });\n this.route('link-unsuccessful', { path: '/:device/link-unsuccessful' });\n });\n });\n this.route('choose-device', function () {\n this.route('troubleshoot-missing');\n this.route('delete-device');\n });\n\n this.mount('@adc/customer-wizard-engine', { as: 'wizard', path: '/wizard' });\n});\n","/**\n * Utility file containing configuration helper functions for the engine.\n * @module\n */\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type { AppEnvironment } from '@adc/app-infrastructure/services/env-settings';\nimport type { Registry as ServiceRegistry } from '@ember/service';\n\ninterface Environment extends AppEnvironment {\n addDeviceEngine: {\n engineApiPrefix: string;\n parentApplication: string;\n };\n}\n\nexport interface DealerModel {\n id: string;\n logoUrl: string;\n mobileAppBrand: string;\n name: string;\n supportPhone: string;\n supportEmail: string;\n website: string;\n}\n\n/**\n * Returns the string name of the parent application.\n */\nexport function getParentApplication(envSettings: ServiceRegistry['env-settings']): string | undefined {\n return envSettings.getEnvironment()?.addDeviceEngine?.parentApplication;\n}\n\n/**\n * Returns true if the parentApplication is customer-site.\n */\nexport function isEngineInCustomerEmber(envSettings: ServiceRegistry['env-settings']): boolean {\n return getParentApplication(envSettings) === 'customer-site';\n}\n\nexport function getDealer(envSettings: ServiceRegistry['env-settings'], contextManager: ContextManager): DealerModel {\n return isEngineInCustomerEmber(envSettings)\n ? // @ts-expect-error - Need to clean up these types.\n contextManager.identityModel?.dealer\n : // @ts-expect-error - Need to clean up these types.\n contextManager.identity?.dealer;\n}\n","/**\n * Returns the cancel, return navigation, troubleshoot, and category urls that can be passed as query parameters to wizards.\n *\n * Note on currentUrl(queryParam optional):\n * In customer-site: /settings/add-device/categories/#/devices/#/start{?deviceName=stuff&dlCode=stuff}\n * In system-install: /add-device/categories/#/devices/#/start{?deviceName=stuff&dlCode=stuff}\n *\n * @param currentUrl current URL (usually start route)\n * @param isNamingNeed Does the device need to go to naming page after set-up is completed.\n */\nexport function getNavigationUrls(\n currentUrl: string,\n isNamingNeeded: boolean,\n categoryId: string,\n deviceId: string\n): {\n cancelUrl: string;\n returnUrl: string;\n troubleShootFinishUrl: string;\n categoryUrl: string;\n chooseDeviceUrl: string;\n} {\n const returnRoute = isNamingNeeded ? 'name' : 'complete',\n rootPageIndex = currentUrl ? currentUrl.indexOf('add-device') + 10 : 0, // Index for the engine root (/add-device/)\n rootPageUrl = currentUrl.slice(0, rootPageIndex);\n\n return {\n cancelUrl: currentUrl, // Includes query params if exists.\n returnUrl: rootPageUrl + `/categories/${categoryId}/devices/${deviceId}/${returnRoute}`, // Return either name page or complete page. Need to strip query param if exists.\n troubleShootFinishUrl: rootPageUrl + `/categories/${categoryId}/devices/${deviceId}/troubleshoot`, // Return to troubleshoot page. Need to strip query param if exists.\n categoryUrl: rootPageUrl + '/categories', // category page.\n chooseDeviceUrl: rootPageUrl + '/choose-device' // choose device page.\n };\n}\n","import buildRoutes from 'ember-engines/routes';\n\nexport default buildRoutes(function () {\n this.route('v1', { path: 'v1/*path' });\n this.route('wizard-launch');\n});\n","import EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\n/**\n * Handles rendering the Wizard. V1 is a versioning mechanism to help avoid issues w/ breaking changes.\n */\nexport default class V1Controller extends EmberController {\n @service ajax;\n @service contextManager;\n @service envSettings;\n @service router;\n @service wizardManager;\n @service nativeBridge;\n\n queryParams = ['returnToUrl', 'errorRecoveryUrl', 'cancelUrl', 'localStorageId'];\n\n queryParamsInitialState = {};\n\n /**\n * Flag to indicate if we're ready to render the wizard. We use this to ensure the entire adc-wizard component is destroyed if the route switches from one wizard to another.\n *\n * @type {boolean}\n */\n initialized = false;\n\n /**\n * The ID used for local storage in order to determine whether the saved query param values\n * should be used or if those values should be cleared.\n *\n * @type {Number}\n */\n localStorageId = null;\n\n /**\n * Event handler that we pass to adc-wizard.\n *\n * @param {string} action\n * @param {any} data\n */\n @action\n async messagingInterface(action, data) {\n switch (action) {\n case 'returnToUrl': {\n // We have to preserve the binding to the controller so that the context doesn't become the actions object.\n this.actions.messagingInterface.call(this, 'redirect', this.returnToUrl);\n break;\n }\n case 'redirect': {\n handleRedirect.call(this, data);\n break;\n }\n case 'sessionExpired': {\n this.contextManager.logout();\n break;\n }\n case 'nativeBridgeLaunchBrowser': {\n if (this.nativeBridge.doesSupportLaunchBrowser) {\n this.nativeBridge.launchBrowser(data.url, data.isForSso);\n } else {\n window.open(data.url);\n }\n\n break;\n }\n case 'enableBluetooth': {\n if (this.nativeBridge.doesSupportEnableBluetooth) {\n this.nativeBridge.enableBluetooth();\n }\n //do nothing\n return false;\n }\n\n case 'checkBluetoothPermissions': {\n if (this.nativeBridge.doesSupportCheckBluetoothPermissions) {\n this.nativeBridge.checkBluetoothPermissions(1);\n }\n //do nothing\n return false;\n }\n\n case 'startBleAdvertising': {\n if (this.nativeBridge.doesSupportStartBleAdvertising) {\n this.nativeBridge.startBleAdvertising();\n }\n //do nothing\n return false;\n }\n\n case 'stopBleAdvertising': {\n if (this.nativeBridge.doesSupportStopBleAdvertising) {\n this.nativeBridge.stopBleAdvertising();\n }\n //do nothing\n return false;\n }\n\n case 'exitTutorial': {\n if (this.nativeBridge.doesSupportCloseWebViewV2) {\n this.nativeBridge.closeWebViewV2();\n } else {\n this.actions.messagingInterface.call(this, 'redirect', this.returnToUrl);\n }\n\n break;\n }\n default: {\n console.error(`Action: ${action} is not handled in the messagingInterface.`);\n break;\n }\n }\n }\n\n /**\n * Callback that is executed on every step change by adc-wizard.\n *\n * @param {string} step\n */\n @action\n onStepChanged(step) {\n return this.wizardManager.onStepChanged(step);\n }\n\n /**\n * Callback that is executed on every the wizard title is set.\n *\n * @param {string} title\n */\n @action\n onTitleChanged(title) {\n return this.wizardManager.onTitleChanged(title);\n }\n}\n\n/**\n * Handles redirecting to a given URL - first by trying to treat it as an Ember route inside the Ember application and then falling back to having the browser navigate to it.\n *\n * @param {string} url\n */\nasync function handleRedirect(url) {\n if (!url) {\n console.error('Attempted to redirect to undefined url.');\n return;\n }\n\n if (url === 'NativeBridgeCloseWebView') {\n if (this.nativeBridge.doesSupportCloseWebViewV2) {\n this.nativeBridge.closeWebViewV2();\n return;\n } else {\n console.error('Web view could not be closed.');\n return;\n }\n }\n\n // Assume the URL exists as an ember route and try to transition to it. If that fails, we have the browser navigate directly to the URL.\n // NOTE: this approach is easier than actually testing if the route exists w/ router.recognize because router.recognize requires everything after the domain in the URL.\n // As an example, router.recognize would expect '/web/system/some/route'; however, router.transitionTo will not accept '/web/system/some/route` and will only accept `/some/route` or 'some.route'\n // Rather than dealing with parsing and string substitutions, this seems cleaner.\n try {\n // transitionTo throws two different ways for unrecognized URLs. By treating it as async/await, we can handle both with one code path.\n // - URLs that start w/ \"/\" throw from the promise that transitionTo returns so we have to use 'catch()'\n // - Any string that does not start w/ \"/\", throws immediately.\n await this.router.transitionTo(url);\n } catch (err) {\n // If the transition was aborted, then its likely we hit an additional redirect after the above 'transitionTo'\n // In that case, we want to let the next transition carry out and not redirect below.\n if (err.name === 'TransitionAborted') {\n return;\n }\n\n redirectTo.call(this, url);\n }\n}\n\n/**\n * Redirects to given absolute or relative URL.\n *\n * NOTE: we only allow redirects to whitelisted domains. This is to prevent a 3rd party from\n * directing a user to the wizard and then redirecting to a malicious site afterwards.\n *\n * @param {String} redirectUrl\n */\nfunction redirectTo(redirectUrl = '') {\n // We only want to redirect to relative paths or approved absolute paths.\n const { approvedHosts } = this.model;\n\n // Check if it is an absolute URL.\n if (\n redirectUrl.startsWith('http') ||\n redirectUrl.startsWith('www') ||\n redirectUrl.startsWith('localhost') ||\n redirectUrl.startsWith('android-app')\n ) {\n // Is it approved?\n if (approvedHosts.some((host) => redirectUrl.startsWith(host))) {\n this.contextManager.transitionToUrl(redirectUrl);\n return;\n }\n\n console.error(`Redirect was requested to a non-approved site. ${redirectUrl}`);\n return;\n }\n\n // Attempt to use the URL as a relative URL.\n // Handle URLs with and without leading '/'.\n redirectUrl = redirectUrl[0] === '/' ? redirectUrl : `/${redirectUrl}`;\n this.contextManager.transitionToUrl(window.location.origin + redirectUrl);\n}\n","import { action, set } from '@ember/object';\nimport EmberRoute from '@ember/routing/route';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\n\nconst WIZARD_QUERY_PARAMS_KEY = 'wizardQueryParams';\n\n/**\n * Handles rendering the Wizard. V1 is a versioning mechanism to help avoid issues w/ breaking changes.\n */\nexport default class V1Route extends EmberRoute {\n @service ajax;\n @service wizardManager;\n\n queryParams = {\n localStorageId: { replaceId: true }\n };\n\n beforeModel(transition = {}) {\n // Get all the combined query params from local storage (if applicable) and from the URL.\n const mergedQueryParams = getAllQueryParameters.call(this, (transition.to || {}).queryParams);\n\n // Save all the merged query params to local storage.\n updateQueryParametersInLocalStorage.call(this, mergedQueryParams);\n\n // We want the entire query params object so we can't use normal query parameter binding.\n set(this, 'queryParamsInitialState', mergedQueryParams);\n }\n\n async model(params) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-controller-access-in-routes\n const controller = this.controllerFor(this.routeName);\n controller.set('initialized', false);\n\n const { baseWizardPath, wizardName } = parseWizardPath.call(this, params);\n\n // Fetch resources in parallel. We await both of them below.\n const configPromise = this.ajax.request(`${baseWizardPath}/${wizardName}.json?v=${Date.now()}`),\n userPromise = this.ajax.apiRequest('/swa/Wizard/App/GetUser'),\n approvedHostsPromise = this.ajax.apiRequest('/engines/wizards/approvedHosts');\n\n const configJson = await configPromise,\n userData = (await userPromise).data.user,\n translations = await getTranslations.call(this, baseWizardPath, userData.localeCode),\n approvedHosts = (await approvedHostsPromise).value;\n\n // Load the other one if there is an extends property and then join the steps and translations then pass them along\n if (configJson && configJson.extends) {\n await mergeWizardTemplate.call(this, configJson, translations, userData);\n }\n\n // Do not copy this deprecated usage. If you see this, please convert to use ember-lifeline runTask.\n // eslint-disable-next-line ember/no-runloop\n later(this, () => controller.set('initialized', true));\n\n return {\n config: configJson,\n initialState: {\n ...userData,\n ...this.queryParamsInitialState\n },\n translationDictionary: translations,\n localeCode: userData.localeCode,\n approvedHosts\n };\n }\n\n setupController(controller, model) {\n super.setupController(controller, model);\n controller.set('localStorageId', controller.queryParamsInitialState.localStorageId);\n }\n\n @action\n error(error) {\n return this.wizardManager.onError(error, this.errorRecoveryUrl);\n }\n}\n\n/**\n * Returns a promise which resolves to the translation dictionary.\n *\n * @returns {Promise}\n */\nasync function getTranslations(baseWizardPath, locale = 'en-US') {\n return this.ajax.request(`${baseWizardPath}/translations/${locale}.json`).catch((err) => {\n console.error('Fetch translation by language code error: ' + err);\n\n return {};\n });\n}\n\n/**\n * Converts stringified bools and objects to their real types.\n *\n * @param {object} params\n * @returns {object}\n */\nfunction parseQueryParams(params) {\n const newParams = {};\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => (newParams[key] = getObjectFromJson(value)));\n }\n\n return newParams;\n}\n\n/**\n * Converts a JSON string to an object.\n * This will also convert string values to their primitive data type, if applicable\n * (e.g. \"true\"/\"false\" will convert to boolean values, \"1\" will convert to the number 1, etc.).\n *\n * @param {string} jsonString\n * @returns {object}\n */\nfunction getObjectFromJson(jsonString) {\n try {\n return JSON.parse(jsonString);\n } catch (e) {\n return jsonString;\n }\n}\n\n/**\n * Parses the routes queryParams and returns information on which wizard to fetch.\n *\n * @param {object} params\n *\n * @returns {{ wizardName: string, baseWizardPath: string}}\n */\nfunction parseWizardPath(params) {\n // we parse the URL. Eg. wizard/v1/video/v520IR will resolve to whats shown below\n const requestedWizardPath = params.path.split('&')[0], // video/v520IR\n wizardName = requestedWizardPath.split('/').pop(); // v520IR\n\n if (requestedWizardPath === '' || wizardName === '') {\n console.error(`Entered a known bad route. Path: ${params.path}`);\n throw new Error('Page not found');\n }\n\n const baseWizardPath = `${this.wizardManager.wizardAssetPath}/configs/${requestedWizardPath}`;\n\n return { wizardName, baseWizardPath };\n}\n\n/**\n * Gets all the query params, both passed in through the URL and saved in local storage.\n *\n * @param {object} urlQueryParams\n * @returns {object}\n */\nfunction getAllQueryParameters(urlQueryParams) {\n const { localStorage } = window;\n\n const queryParamsFromUrl = parseQueryParams(urlQueryParams);\n let queryParamsFromLocalStorage = {};\n\n // if the device supports local storage, load the current wizard state\n if (localStorage) {\n // Get all the saved values from local storage.\n queryParamsFromLocalStorage = parseQueryParams(\n getObjectFromJson(localStorage.getItem(WIZARD_QUERY_PARAMS_KEY))\n );\n\n // Get the ID from local storage.\n const localStorageId = queryParamsFromLocalStorage.localStorageId,\n // Get the ID from the URL.\n urlId = queryParamsFromUrl.localStorageId;\n\n // Clear the values in local storage if the ID saved in local storage does not match the ID in the URL.\n if (!localStorageId || !urlId || localStorageId !== urlId) {\n // Clear the values in local storage,\n // create a new unique ID (based on the timestamp),\n // and remove all the values saved in local storage.\n queryParamsFromLocalStorage = {};\n queryParamsFromUrl.localStorageId = Date.now();\n }\n }\n\n // The query params from the URL must be added to the object last\n // in order to overwrite any existing values in local storage.\n return { ...queryParamsFromLocalStorage, ...queryParamsFromUrl };\n}\n\n/**\n * Updates the query params saved in local storage.\n *\n * @param {object} mergedQueryParams\n */\nfunction updateQueryParametersInLocalStorage(mergedQueryParams) {\n const { localStorage } = window;\n\n try {\n // Save all the merged query params to local storage.\n localStorage.setItem(WIZARD_QUERY_PARAMS_KEY, JSON.stringify(mergedQueryParams));\n } catch (e) {\n // If an exception is thrown, it is probably because the device does not support local storage,\n // storage is full, or the user is in their browser's private mode (Mobile Safari).\n return;\n }\n}\n\n/**\n * Merges an extended wizard with its base template.\n *\n * @param {object} configJson\n * @param {object} translations\n * @param {object} userData\n */\nexport async function mergeWizardTemplate(configJson, translations, userData) {\n // NOTE: We want the adc-wizard component to only be concerned with rendering a JSON document.\n // However, we added the ability to combine/merge documents (ie. this function) and now must share it across apps so we include it in the addon.\n\n const templateWizardPath = `${this.wizardManager.wizardAssetPath}/configs/templates/${configJson.extends}`,\n templateJson = await this.ajax.request(`${templateWizardPath}/${configJson.extends}.json?v=${Date.now()}`),\n templateTranslations = await getTranslations.call(this, templateWizardPath, userData.localeCode);\n\n const childSteps = configJson.steps,\n parentSteps = templateJson.steps,\n extendStepIndex = templateJson.extendStepIndex;\n\n // Insert the steps in the proper index for templating\n configJson.steps = parentSteps.slice(0, extendStepIndex).concat(childSteps, parentSteps.slice(extendStepIndex));\n // Combine the translation dictionaries into a single Object with both keySeed\n Object.assign(translations, templateTranslations);\n\n // Combine the remaining non-generated properties where order doesn't matter, starting with array properties\n // Duplicate keys in arrays will cause race-conditions or unexpected behavior and should not be used\n configJson.initialActions = [...(configJson.initialActions || []), ...(templateJson.initialActions || [])];\n configJson.actions = [...(configJson.actions || []), ...(templateJson.actions || [])];\n\n // Continue combining properties with object properties\n configJson.initialState = Object.assign(templateJson.initialState || {}, configJson.initialState || {});\n configJson.css = Object.assign(templateJson.css || {}, configJson.css || {});\n configJson.shared = Object.assign(templateJson.shared || {}, configJson.shared || {});\n configJson.title = templateJson.title || configJson.title;\n}\n","import { tracked } from '@glimmer/tracking';\nimport { set } from '@ember/object';\nimport { action, computed, setProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport { reject } from 'rsvp';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type AccountInformation from '@adc/login-setup-addon/models/settings/account-management/account-information/account-information';\nimport type MarketingCommunication from '@adc/login-setup-addon/models/settings/account-management/account-information/marketing-communication/marketing-communication';\nimport type CountryAddressResource from '@adc/login-setup-addon/models/settings/account-management/country-address-resource';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type AccountInformationRoute from './route';\n\n/**\n * Account Information Controller.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class AccountInformationController extends BaseLoginSetupEngineController {\n @service declare intl: ADCIntlService;\n @service declare ajax: AdcAjaxService;\n @service declare router: RouterService;\n @service declare notificationManager: NotificationManager;\n @service declare store: Store;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * The account information model.\n */\n @alias('resolvedModel.accountInformation')\n declare accountInformation: AccountInformation;\n\n /**\n * The marketing communications / email preferences model.\n */\n @alias('resolvedModel.marketingCommunications')\n declare marketingCommunications: Array;\n\n /**\n * The countries.\n */\n @alias('resolvedModel.countries')\n declare countryList: Array>;\n\n /**\n * Is user in edit mode?\n */\n @tracked editMode = this.isSystemInstall;\n\n /**\n * Gets the newly selected address resources.\n */\n @computed('accountInformation.country', 'store')\n get addressResources(): Promise {\n return this.store.findRecord(\n 'settings/account-management/country-address-resource',\n this.accountInformation.country\n );\n }\n\n /**\n * Populates the countries dropdown.\n */\n @computed('countryList')\n get countries(): Array {\n return this.countryList.map((country) =>\n DropdownSelectItem.create({\n value: country.value.toString(),\n name: country.name.toString()\n })\n );\n }\n\n /**\n * The customer's state. We are making this a computed property since we need to reset the state value\n * when a new country is selected so that we don't throw an error finding the old value.\n */\n @computed('accountInformation.state', 'states')\n get state(): Promise {\n return (async () => {\n const states = (await this.states) as Array>;\n\n let valueToSet = '';\n states.forEach((state: { name: string; value: string }) => {\n if (state.value.includes(this.accountInformation.state)) {\n valueToSet = this.accountInformation.state;\n }\n });\n return valueToSet;\n })();\n }\n\n /**\n * Gets the states available to choose from.\n */\n @computed('accountInformation.country')\n get states(): Promise> {\n return (async () => {\n return await this.ajax.apiRequest>(\n 'settings/accountManagement/accountInformation/accountInformation/getStates?countryId=' +\n this.accountInformation.country,\n undefined,\n null,\n 'GET'\n );\n })();\n }\n\n /**\n * Determines if the user can edit anything in the account information form.\n */\n @computed('accountInformation.{canEditAddress,canEditEmailAddress}')\n get cannotEditAnything(): boolean {\n return !this.accountInformation.canEditAddress && !this.accountInformation.canEditEmailAddress;\n }\n\n /**\n * When we update the country, we also want to update the rest of the mailing address.\n */\n @action\n async updateCountry(newCountry: string): Promise {\n // Need to set the country value first before we pull its states.\n set(this.accountInformation, 'country', Number(newCountry));\n\n const states = await this.states;\n\n setProperties(this.accountInformation, {\n state: states[0].value,\n subState: '',\n city: '',\n subCity: '',\n postalCode: '',\n address1: '',\n address2: ''\n });\n }\n\n /**\n * Toggles whether the user is in edit mode.\n */\n @action\n toggleEditMode(): void {\n this.editMode = !this.editMode;\n }\n\n /**\n * Rollsback data on cancel.\n */\n @action\n rollbackData(): void {\n this.accountInformation.rollbackAttributes();\n if (this.accountInformation.canEditEmailPreferences && !isEmpty(this.marketingCommunications)) {\n this.marketingCommunications.forEach((communication: MarketingCommunication) => {\n communication.rollbackAttributes();\n });\n }\n\n this.editMode = false;\n }\n\n /**\n * Clears an input field when it is clicked into.\n */\n @action\n clearField(key: 'address1' | 'address2' | 'city' | 'subCity' | 'subState' | 'postalCode'): void {\n if (!this.editMode || isEmpty(key)) {\n return;\n }\n\n // Make sure the property isn't in changedAttributes. It shouldn't be if the property still has the initial masking\n // value with asterisks.\n if (Object.keys(this.accountInformation.changedAttributes()).includes(key)) {\n return;\n }\n\n set(this.accountInformation, key, '');\n }\n\n /**\n * Saves the customer's mailing address and email preferences.\n */\n @action\n async update(): Promise {\n const { notificationManager } = this;\n\n // Chaining promises so the \"update success\" message only apprears if the\n // account and email preferences were both updated successfully\n await this.updateAccountInformation()\n .then(() => Promise.all(this.updateEmailPreferences()))\n .then(() => {\n notificationManager.addSuccess(this.intl.tc(this, 'updateSuccess'));\n this.editMode = false;\n if (this.isSystemInstall) {\n this.installManager.goToNextStep();\n }\n })\n .catch((response: any) => {\n notificationManager.addError(this.intl.tc(this, 'updateFailedNotice'));\n response.errors = (response.error || []).filter(\n ({ source }: { source: { pointer: string } }) => source && source.pointer\n );\n return reject(response);\n });\n }\n\n /**\n * Creates a Promise that saves the account information.\n */\n private updateAccountInformation(): Promise {\n if (!this.accountInformation.canEditAccountInformation) {\n return Promise.resolve();\n }\n\n return this.accountInformation.save();\n }\n\n /**\n * Creates a Promise that saves the email preferences.\n */\n private updateEmailPreferences(): Array> {\n const promises: Array> = [];\n\n if (!this.accountInformation.canEditEmailPreferences) {\n promises.push(Promise.resolve());\n return promises;\n }\n\n // Store each promise that has to be fulfilled\n this.marketingCommunications.forEach((communication) => {\n promises.push(communication.save());\n });\n\n return promises;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'account-information': AccountInformationController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type AccountInformation from '@adc/login-setup-addon/models/settings/account-management/account-information/account-information';\nimport type MarketingCommunication from '@adc/login-setup-addon/models/settings/account-management/account-information/marketing-communication/marketing-communication';\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type AccountInformationController from './controller';\n\ninterface AccountInformationModel {\n accountInformation: ADCStoreFindRecord;\n marketingCommunications: ADCStoreFindAll;\n countries: Promise;\n}\n\n/**\n * Route for Account Information.\n */\nexport default class AccountInformationRoute extends BaseLoginSetupEngineRoute {\n @service declare contextManager: ContextManager & {\n identityModel: { id: string | number };\n getContextId: () => string;\n };\n @service declare ajax: AdcAjaxService;\n @service declare engineConfig: BaseEngineConfig;\n @service declare store: Store;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberAccountInformation');\n }\n\n /** @override */\n isMediumWidthPage = true;\n\n /** @override */\n deactivate(transition: Transition) {\n super.deactivate(transition);\n (this.controllerFor(this.routeName) as AccountInformationController).rollbackData();\n }\n\n /** @override */\n model(): AccountInformationModel {\n return {\n accountInformation: this.store.findRecord(\n 'settings/account-management/account-information/account-information',\n this.contextManager.getContextId()\n ),\n marketingCommunications: this.store.findAll(\n 'settings/account-management/account-information/marketing-communication/marketing-communication'\n ),\n countries: this.ajax.apiRequest(\n 'settings/accountManagement/accountInformation/accountInformation/getCountries',\n undefined,\n null,\n 'GET'\n )\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { set, computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport {\n clearValidationErrors,\n processValidationErrors,\n getValidationErrorsFromResponse\n} from '@adc/ajax/utils/validation-error-processing';\nimport { reject } from 'rsvp';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { SafeString } from 'handlebars';\n\nexport type ValidationErrorsType = {\n [key: string]: string;\n};\n\ninterface BaseEngineApiRequestData {\n isLockedOut: boolean;\n logoutUrl: string;\n}\n\n/**\n * Sets sensitive properties to null.\n */\nfunction resetSensitiveProperties(this: BaseLoginSetupEngineController) {\n this.getSensitiveProperties().forEach((property: any) => {\n this.set(property, undefined);\n });\n}\n\n/**\n * @classdesc\n *\n * Base controller for all Login Setup Engine Routes.\n */\nexport default class BaseLoginSetupEngineController extends EmberController {\n @service declare contextManager: ContextManager;\n @service declare nativeBridge: NativeBridgeService;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare envSettings: EnvSettingsService;\n @service declare router: RouterService;\n @service declare installManager: any;\n\n /**\n * Determines if the login is using dark mode.\n */\n @alias('contextManager.isDarkModeEnabled')\n declare isDarkModeEnabled: boolean;\n\n /**\n * Determines if the customer is viewing the page through System Install.\n */\n @computed('router.{currentURL,rootURL}')\n get isSystemInstall(): boolean {\n return this.envSettings.isTestEnvironment()\n ? !(\n this.router.currentURL.includes('login-information') ||\n this.router.currentURL.includes('account-management/login-setup')\n )\n : this.router.rootURL.includes('system-install');\n }\n\n /**\n * Should the page header text be shown within the Account Setup pages?\n */\n @computed('installManager.areDIYStepsPresent', 'isSystemInstall')\n get canShowAccountSetupHeaderText(): boolean {\n if (this.installManager.areDIYStepsPresent) {\n return false;\n }\n\n return this.isSystemInstall;\n }\n\n /**\n * The main image used in the 2FA index and overview pages.\n */\n @computed('isDarkModeEnabled')\n get twoFactorImageSource(): string {\n if (this.isDarkModeEnabled) {\n return '/NewPublicLibraryFiles/images/wizards/loginsetup/2fa-Graphic-dark.svg';\n }\n\n return '/NewPublicLibraryFiles/images/wizards/loginsetup/2fa-Graphic.svg';\n }\n\n /**\n * List of errors returned from api call.\n */\n @tracked declare errors: ValidationErrorsType;\n\n /**\n * Sensitive properties that should be reset when transitioning away from login information route.\n */\n getSensitiveProperties(): string[] {\n return ['currentPassword'];\n }\n\n /**\n * Helper method for making an asynchronous api request.\n *\n * @param fnRequest - The request function which needs to return a promise.\n * @param buttonAnimation - The button's promise that allows us to take action after the button finishes animating.\n * @param successMessage - The optional success message to display.\n * @param fnAfterButtonAnimation - The optional function to execute after the button finishes animating.\n */\n submitApiRequest(\n fnRequest: () => Promise | undefined,\n buttonAnimation: Promise,\n successMessage?: string | SafeString,\n fnAfterButtonAnimation?: () => unknown,\n persistNotification = false\n ): Promise {\n clearValidationErrors.call(this);\n\n const promise = fnRequest();\n\n // This code will execute once the button finishes animating.\n if (fnAfterButtonAnimation) {\n buttonAnimation.then((isSuccess) => {\n if (isSuccess !== false) {\n fnAfterButtonAnimation.call(this);\n }\n });\n }\n\n // Show success message after promise resolves if one was defined.\n if (successMessage) {\n promise?.then(() =>\n this.notificationManager.addNotification(\n successMessage,\n 'circle-o-check',\n [],\n persistNotification ? undefined : 5000,\n persistNotification\n )\n );\n }\n\n resetSensitiveProperties.call(this);\n\n // Process errors if they exist.\n promise?.catch((response: any) => {\n this.errors = getValidationErrorsFromResponse(response);\n processValidationErrors.call(this, this.errors);\n const contextManager = this.contextManager;\n\n let responseErrors = response.errors,\n responseData = {} as BaseEngineApiRequestData;\n\n // Responses that pass in dictionaries from the back-end have different structures.\n if (responseErrors.errors) {\n responseErrors = responseErrors.errors;\n }\n\n if (responseErrors[0].data) {\n responseData = responseErrors[0].data || {};\n }\n\n (responseErrors || [])\n .filter(\n (error: { source: { pointer: any }; status: string }) =>\n error.source && error.source.pointer && error.status !== '422'\n )\n .forEach((error: { detail: string }) => {\n if (this.notificationManager) {\n this.notificationManager.addError(error.detail);\n }\n });\n\n const isLockedOut = responseData.isLockedOut,\n logoutUrl = responseData.logoutUrl;\n\n if (isLockedOut) {\n // Redirect to the logoutUrl if it exists, or logout after a delay so user can see the message.\n // Do not copy this deprecated usage. If you see this, please convert it to use ember-lifeline.\n // eslint-disable-next-line ember/no-runloop\n later(() => {\n logoutUrl ? contextManager.transitionToUrl(logoutUrl, true) : contextManager.logout(false);\n }, 1000);\n }\n\n // Bubble the rejection up to the button.\n return reject(response);\n });\n\n return promise as Promise;\n }\n\n /**\n * List of properties that should be reset when controller exists.\n *\n * @note Format is Array of arrays where the inner array's first item is key(String) and second item is object(value to reset the key to).\n */\n getPropertiesToResetOnExit(): Array> {\n return [];\n }\n\n /**\n * Resets data on the controller.\n */\n resetData(): void {\n clearValidationErrors.call(this);\n resetSensitiveProperties.call(this);\n\n (this.getPropertiesToResetOnExit() || []).forEach(([key, value]) => set(this, key, value));\n }\n\n /**\n * Determines how to transition to the next page.\n */\n @action transitionToNextPage(): void {\n // Check to see if we are in account setup since there are shared\n // pages inside of customer-ember where the InstallManager service\n // isn't available / shouldn't be used.\n if (this.isSystemInstall) this.installManager.goToNextStep();\n else this.contextManager.transitionToPreviousRoute();\n }\n}\n","import BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\n/**\n * @classdesc Base route used for all Login-Setup-Engine routes.\n * @class BaseLoginSetupEngineRoute\n */\nexport default class BaseLoginSetupEngineRoute extends BaseRoute {\n /** @override */\n isMediumWidthPage = true;\n}\n","import { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport BaseLoginSetupEngineController from '@adc/login-setup-engine/base-controller';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type RouterService from '@ember/routing/router-service';\nimport type { SafeString } from 'handlebars';\nimport type { LocationBusinessHoursRouteModel } from './route';\n\nconst CommercialEnableConfigureBusinessHoursUrl =\n 'https://answers.alarm.com/Customer/Website_and_App/Commercial/Commercial_Management/Enable%2F%2Fconfigure_business_hours';\nconst LANGUAGE_PARAM = 'mt-language';\n\n/**\n * @classdesc\n * Controller for the single-system Business Hours page.\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'business-hours' })\nexport default class LocationBusinessHoursController extends BaseLoginSetupEngineController {\n @service declare contextManager: any;\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n\n declare model: LocationBusinessHoursRouteModel;\n\n /**\n * Saves the changes made to the Location Business Hour object.\n */\n @action\n async saveBusinessHours(): Promise {\n await this.model.locationBusinessHours.save();\n\n if (this.isSystemInstall) {\n this.transitionToNextPage();\n }\n }\n\n /**\n * Navigates to the OldBusinessHours page.\n */\n @action\n openOldBusinessHoursLink(): void {\n const options = {\n queryParams: {\n url: '%2Fweb%2FCommercial%2FBusinessHours.aspx'\n }\n };\n\n this.router.transitionTo('legacy-page', options);\n }\n\n /**\n * Format business hours editor description\n */\n @computed('isSystemInstall', 'contextManager.identityModel.{localeCode,profile.locale}')\n get businessHoursEditorDescText(): SafeString {\n // Logic grabbed from customer-site/app/helpers/knowledge-base-link/buildKnowledgeBaseURL\n const { language } = this.isSystemInstall\n ? this.contextManager.identityModel.localeCode\n : // Do not copy this deprecated usage. If you see this, please fix it.\n // eslint-disable-next-line no-unsafe-optional-chaining\n this.contextManager.identityModel?.profile?.locale;\n const url = new URL(CommercialEnableConfigureBusinessHoursUrl);\n\n // Default language is en which doesn't require the query param\n if (language && language !== 'en') {\n url.searchParams.append(LANGUAGE_PARAM, language);\n }\n\n const link = url.href;\n\n return htmlSafe(\n this.intl.tc(this, 'businessHoursEditorDesc', {\n link\n })\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'business-hours': LocationBusinessHoursController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '@adc/login-setup-engine/base-route';\n\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type LocationBusinessHours from '@adc/login-setup-addon/models/settings/business-hours/location-business-hour';\nimport type Store from '@ember-data/store';\n\nexport interface LocationBusinessHoursRouteModel {\n locationBusinessHours: LocationBusinessHours;\n}\n\nexport default class LocationBusinessHoursRoute extends BaseLoginSetupEngineRoute {\n @service declare contextManager: any;\n @service declare store: Store;\n @service declare engineConfig: BaseEngineConfig;\n\n routeId: number;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberBusinessHours');\n }\n\n /**\n * Selects the business hours for the currently selected customer\n */\n async model(): Promise {\n const unitId = this.contextManager.isSystemInstall()\n ? this.contextManager.identityModel.unitId\n : (await this.contextManager.identityModel.selectedSystem).unitId;\n\n const locationBusinessHours = await this.store.findRecord(\n 'settings/business-hours/location-business-hour',\n unitId\n );\n\n return {\n locationBusinessHours: locationBusinessHours\n };\n }\n}\n","import { A } from '@ember/array';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type CommunicationMethod from '@adc/login-setup-addon/models/communication-preferences/communication-method';\nimport type CommunicationPreference from '@adc/login-setup-addon/models/communication-preferences/communication-preference';\nimport type MarketingCategory from '@adc/login-setup-addon/models/communication-preferences/marketing-category';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type CommunicationPreferencesRoute from './route';\n\n/**\n * @classdesc Get communications preferences confirmation step.\n */\nasync function getConfirmationDialog(this: any): Promise {\n const { notificationManager, intl, contextManager } = this,\n { name } = await contextManager.identityModel.dealer,\n communicationPreference = await this.communicationPreference,\n categoryPreferences = await this.categoryPreferences,\n message = confirmationMessage.call(this, categoryPreferences);\n\n this.modals.showConfirmationDialog(\n intl.t('@adc/login-setup-engine.communication-preferences.confirmationTitle'),\n message\n ? intl.t('@adc/login-setup-engine.communication-preferences.confirmationMessage', {\n dealerName: name\n })\n : intl.t('@adc/login-setup-engine.communication-preferences.noOptionsMessage', {\n dealerName: name\n }),\n {\n text: intl.t('generic.confirm'),\n action: async () => {\n await communicationPreference.save();\n notificationManager.addSuccess(\n intl.t('@adc/login-setup-engine.communication-preferences.successMessage')\n );\n this.transitionToNextPage();\n }\n },\n {\n text: intl.t('generic.back'),\n action() {\n communicationPreference.rollback();\n }\n }\n );\n}\n\n/**\n * Generate the confirmation message for selected options.\n *\n * @param {object} communicationPreferences - Communication preferences.\n *\n * @returns {string}\n */\nfunction confirmationMessage(\n communicationPreferences: { communicationMethods: CommunicationMethod[]; categoryName: string }[] = []\n): boolean {\n let hasEnabledMethods = false;\n\n communicationPreferences.map(({ communicationMethods }) => {\n const enabledMethods = A(\n communicationMethods.map(({ isEnabled, isVisible, communicationMethodName }) =>\n isEnabled && isVisible ? communicationMethodName : undefined\n )\n )\n .compact()\n .join();\n\n if (enabledMethods) {\n hasEnabledMethods = true;\n }\n });\n\n return hasEnabledMethods;\n}\n\n/**\n * Controller used to handle changing communication preferences.\n *\n */\nexport default class CommunicationPreferencesController extends BaseLoginSetupEngineController {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare modals: ModalService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n @alias('resolvedModel.communicationPreference')\n declare communicationPreference: CommunicationPreference;\n\n @alias('communicationPreference.categoryPreferences')\n declare categoryPreferences: Array;\n\n /**\n * Display confirmation dialog to display communication preferences.\n */\n @action\n saveCommunicationPreferences(): Promise {\n return getConfirmationDialog.call(this);\n }\n\n /**\n * Canceling edits the communication preferences and rolls back edits.\n */\n @action\n cancelEdit(): void {\n this.contextManager.transitionToPreviousRoute();\n }\n\n /**\n * Resets filter and search values to their default values.\n */\n resetFilterValues(): void {\n if (this.communicationPreference) {\n this.communicationPreference.rollback();\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'communication-preferences': CommunicationPreferencesController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type CommunicationPreference from '@adc/login-setup-addon/models/communication-preferences/communication-preference';\nimport type Store from '@ember-data/store';\nimport type Transition from '@ember/routing/transition';\nimport type CommunicationPreferencesController from './controller';\n\ntype CommunicationPreferencesModel = {\n communicationPreference: Promise;\n};\n\n/**\n * Route for changing marketing preferences.\n */\nexport default class CommunicationPreferencesRoute extends BaseLoginSetupEngineRoute {\n @service declare engineConfig: BaseEngineConfig;\n @service declare store: Store;\n @service declare contextManager: ContextManager & {\n identityModel: { id: string | number };\n getContextId: () => string;\n };\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberCommunicationPreferences');\n }\n\n /** @override */\n deactivate(transition: Transition) {\n super.deactivate(transition);\n (this.controllerFor(this.routeName) as CommunicationPreferencesController).resetFilterValues();\n }\n\n /** @override */\n model(): CommunicationPreferencesModel {\n return {\n communicationPreference: this.store.findRecord(\n 'communication-preferences/communication-preference',\n this.contextManager.identityModel.id\n )\n };\n }\n}\n","import Component from '@glimmer/component';\nimport { A } from '@ember/array';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport EditDeviceModal from '@adc/login-setup-addon/components/modals/recognized-devices/edit-device';\nimport ForgetDeviceModal from '@adc/login-setup-addon/components/modals/recognized-devices/forget-device';\nimport TrustDeviceModal from '@adc/login-setup-addon/components/modals/recognized-devices/trust-device';\nimport ActionItem from '@adc/ui-components/utils/action-item';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type RecognizedDevice from '@adc/login-setup-addon/models/recognized-devices/recognized-device';\nimport type { ListRowItemSignature } from '@adc/ui-components/components/list-row-item';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type RouterService from '@ember/routing/router-service';\n\ninterface RecognizedDeviceListItemComponenSignature {\n Element: ListRowItemSignature['Element'];\n Args: {\n device: RecognizedDevice;\n isEnrollingIn2FA: boolean;\n is2FAEnabled: boolean;\n };\n}\n\n/**\n * @classdesc\n * Component used for a recognized device list item.\n */\nexport default class RecognizedDeviceListItemComponent extends Component {\n @service declare modals: ModalService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n\n /**\n * Alias to validate if the page is being displayed in a mobile app.\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Returns whether the current directory is within the system-install setup.\n */\n get isSystemInstall(): boolean {\n return !this.router.currentURL.includes('login-information');\n }\n\n private showModal(type: typeof Component): void {\n this.modals.showModal(type, {\n device: this.args.device,\n disableBackdropClose: true\n });\n }\n\n /**\n * Open a modal to trust a linked device.\n */\n @action trust(): void {\n this.showModal(TrustDeviceModal);\n }\n\n /**\n * Open a modal to forget a linked device.\n */\n @action forget(): void {\n this.showModal(ForgetDeviceModal);\n }\n\n /**\n * Open a modal to edit a linked device.\n */\n @action edit(): void {\n this.showModal(EditDeviceModal);\n }\n\n private getActionItem(icon: string, key: string, css: string, action: VoidFunction, visible: boolean): ActionItem {\n return ActionItem.create({\n icon,\n text: this.intl.t(`@adc/login-setup-engine.recognized-devices.index.${key}`),\n className: css,\n action,\n visible\n });\n }\n\n /**\n * Returns list of action items for the ellipses dropdown menu.\n */\n @action getActionItems(): Array {\n const {\n device: { isTrustedDevice },\n is2FAEnabled\n } = this.args;\n\n if (this.args.isEnrollingIn2FA || !isTrustedDevice) {\n return A([]);\n }\n\n return A([\n this.getActionItem(\n 'lock',\n 'trustButton',\n 'trust-device-button',\n this.trust,\n !isTrustedDevice && is2FAEnabled\n ),\n this.getActionItem('edit', 'edit', 'edit-device-button', this.edit, isTrustedDevice && is2FAEnabled),\n this.getActionItem('circle-x', 'forget', 'forget-device-button', this.forget, isTrustedDevice)\n ]);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n /**\n * Component used for a recognized device list item.\n */\n RecognizedDeviceListItem: typeof RecognizedDeviceListItemComponent;\n }\n}\n","import { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type NotificationManagerService from '@adc/ui-components/services/notification-manager';\nimport type { ResolvedModelFrom, ModelFrom } from 'type-utils';\nimport type EmailVerificationRoute from './route';\n\n/**\n * Controller used to handle account setup email verification.\n *\n */\nexport default class EmailVerificationController extends BaseLoginSetupEngineController {\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManagerService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * New primary email address specified by user.\n */\n @alias('resolvedModel.profile.primaryEmailAddress')\n declare primaryEmailAddress: string;\n\n @alias('resolvedModel.profile')\n declare profile: Profile;\n\n /**\n * Send verification email to specified address\n * @param buttonAnimation The button's promise object tied to the animation being displayed\n */\n @action\n async sendVerificationEmail(buttonAnimation: Promise): Promise {\n const profileModel = this.profile,\n fnSaveProfileModel = () => {\n return profileModel.save();\n },\n fnSendVerificationEmailIfDifferentEmail = async () => {\n if (profileModel.primaryEmailAddress !== this.primaryEmailAddress) {\n // If the initial and the changed primaryEmailAddress are different, then .save() already took care of sending a verification email\n // after updating the primary email address.\n this.transitionToNextPage();\n }\n\n // If the initial and the inputted primaryEmailAddress match up, we need to send a verification email.\n return profileModel\n .sendVerificationEmail(this.primaryEmailAddress)\n .then(() => this.transitionToNextPage());\n };\n\n await this.submitApiRequest(\n fnSaveProfileModel,\n buttonAnimation,\n this.intl.t('@adc/login-setup-engine.email-verification.emailVerificationSent')\n ).then(() => fnSendVerificationEmailIfDifferentEmail.call(this));\n }\n\n /**\n * fetch image from resources repo\n */\n @computed('isDarkModeEnabled')\n get imageSource(): string {\n if (this.isDarkModeEnabled) {\n return '/NewPublicLibraryFiles/images/wizards/loginsetup/email-verification-dark.png';\n }\n\n return '/NewPublicLibraryFiles/images/wizards/loginsetup/email-verification.png';\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'email-verification': EmailVerificationController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type Store from '@ember-data/store';\n\n/**\n * Route for account setup email verification.\n */\nexport default class EmailVerificationRoute extends BaseLoginSetupEngineRoute {\n @service declare contextManager: ContextManager & {\n identityModel: { id: string | number };\n };\n @service declare engineConfig: BaseEngineConfig;\n @service declare store: Store;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberEmailVerification');\n }\n\n /** @override */\n model(): { profile: ADCStoreFindRecord } {\n return {\n profile: this.store.findRecord('profile/profile', this.contextManager.identityModel.id)\n };\n }\n}\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const Other = 0;\n/**\n * @enum {number}\n */\nexport const DesktopWeb = 1;\n/**\n * @enum {number}\n */\nexport const MobileWeb = 2;\n/**\n * @enum {number}\n */\nexport const MobileApp = 3;\n/**\n * @enum {number}\n */\nexport const SmartTV = 4;\n/**\n * @enum {number}\n */\nexport const VoiceDevice = 5;\n/**\n * @enum {number}\n */\nexport const Tablet = 6;\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type NotificationManagerService from '@adc/ui-components/services/notification-manager';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type LoginNameConfirmationRoute from './route';\n\n/**\n * @classdesc\n *\n * Controller used to handle account setup login name configuration.\n *\n */\nexport default class LoginNameConfirmationController extends BaseLoginSetupEngineController {\n /**\n * The 'isQuickThermostatCreationPendingCustomerUpdate' property is only available within\n * the System Install identity model.\n */\n @service declare contextManager: ContextManager & {\n identityModel: { isQuickThermostatCreationPendingCustomerUpdate?: boolean };\n };\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManagerService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n loginNameError?: string;\n\n /**\n * New login name specified by user.\n */\n @alias('resolvedModel.profile.loginName')\n originalLoginName?: string;\n\n @alias('resolvedModel.profile')\n profile?: Profile;\n\n /**\n * The input that we receive from the user\n */\n @tracked\n newLoginName = this.originalLoginName ?? '';\n\n /**\n * Save username for the usr\n * @param buttonAnimation The button's promise object tied to the animation being displayed\n */\n @action\n async saveLoginName(buttonAnimation: Promise): Promise {\n // short-circuit if they are keeping the name the same\n if (this.newLoginName !== '' && this.originalLoginName === this.newLoginName) {\n this.notificationManager.addSuccess(\n this.intl.t('@adc/login-setup-engine.login-name-confirmation.loginNameUpdated')\n );\n this.transitionToNextPage();\n } else {\n // hook into existing logic for login name validation\n const fnSetLoginName = () => {\n const { isQuickThermostatCreationPendingCustomerUpdate = false } = this.contextManager.identityModel;\n\n return this.profile?.updateLoginName(\n this.newLoginName,\n undefined,\n !isQuickThermostatCreationPendingCustomerUpdate\n );\n };\n\n await this.submitApiRequest(\n fnSetLoginName,\n buttonAnimation,\n this.intl.t('@adc/login-setup-engine.login-name-confirmation.loginNameUpdated')\n ).then(() => this.transitionToNextPage());\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'login-name-confirmation': LoginNameConfirmationController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type Store from '@ember-data/store';\n\ntype LoginNameConfirmationModel = {\n profile: Promise;\n};\n/**\n * Route for account setup username\n */\nexport default class LoginNameConfirmationRoute extends BaseLoginSetupEngineRoute {\n @service declare contextManager: ContextManager & {\n identityModel: { id: string | number };\n };\n @service declare engineConfig: BaseEngineConfig;\n @service declare store: Store;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberLoginNameConfirmation');\n }\n\n /** @override */\n model(): LoginNameConfirmationModel {\n return {\n profile: this.store.findRecord('profile/profile', this.contextManager.identityModel.id)\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { timeout } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type { ModelFrom } from 'type-utils';\nimport type BaseOutsideWorkingHoursRoute from './route';\n\ninterface WeeklySchedule {\n beginDate?: Date;\n endDate?: Date;\n}\n\ninterface ResolvedModelRequest {\n value: {\n beginDate: string | null;\n endDate: string | null;\n };\n}\n\n/**\n * Route we direct the login to when they are outside of their login hours.\n * Should be hidden behind the 'Mobile App as Key' beta enrollment.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class OutsideWorkingHoursController extends BaseLoginSetupEngineController {\n @service declare envSettings: EnvSettingsService;\n @service declare contextManager: ContextManager;\n\n declare model: ModelFrom;\n\n /**\n * The resolved model that holds the Weekly Schedule information.\n */\n @tracked resolvedModel?: WeeklySchedule;\n\n /**\n * Gets the text to be displayed for the next active window.\n */\n @computed('resolvedModel.{beginTime,endTime}')\n get nextActiveWindowText(): string {\n const { resolvedModel, intl } = this;\n if (resolvedModel === undefined) {\n return '';\n }\n\n /**\n * Are they past the end date of their working schedule?\n */\n if (resolvedModel.beginDate === undefined || resolvedModel.endDate === undefined) {\n return intl.tc(this, 'expiredWorkingHours');\n }\n\n // Grab the dates from the resolved model.\n const { beginDate, endDate } = resolvedModel;\n\n // Generate the formatted dates for these strings.\n const [startDateString, endDateString] = [beginDate, endDate].map((n) =>\n intl.formatDateTz(n, {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n })\n );\n\n return intl.tc(this, 'timeToTime', {\n startDate: startDateString,\n endDate: endDateString\n });\n }\n\n /**\n * Computed property which becomes true when their schedule becomes active.\n */\n @computed('resolvedModel.beginDate')\n get displayDashboardButton(): Promise {\n return (async () => {\n const { resolvedModel } = this;\n if (\n resolvedModel == undefined ||\n resolvedModel.beginDate === undefined ||\n resolvedModel.endDate === undefined\n ) {\n return false;\n }\n\n await timeout(resolvedModel.beginDate.getTime() - new Date().getTime());\n return true;\n })();\n }\n\n /**\n * Holds the url for the office image.\n */\n get staticImageUrl(): string {\n return '/NewPublicLibraryFiles/images/office-interior.png';\n }\n\n /**\n * Action to handle resolving the model.\n */\n @action dataLoaded(resolvedModel: ResolvedModelRequest) {\n const beginDate = resolvedModel.value.beginDate === null ? undefined : new Date(resolvedModel.value.beginDate);\n const endDate = resolvedModel.value.endDate === null ? undefined : new Date(resolvedModel.value.endDate);\n this.resolvedModel = { beginDate, endDate };\n }\n\n /**\n * Log out the user.\n */\n @action logOutUser(): void {\n this.contextManager.logout(false);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n undefined: OutsideWorkingHoursController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\n\n/**\n * @classdesc Base route used for outside of working hours page.\n */\nexport default class BaseOutsideWorkingHoursRoute extends BaseLoginSetupEngineRoute {\n @service declare ajax: AdcAjaxService;\n @service declare engineConfig: BaseEngineConfig;\n\n /** @override */\n isMediumWidthPage = false;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('OutsideWorkingHours');\n }\n\n /** @override */\n model() {\n return {\n weeklySchedule: this.ajax.apiRequest('logins/systemGroupLogins/getLoginsSchedule')\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { A } from '@ember/array';\nimport { computed } from '@ember/object';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type RecognizedDevice from '@adc/login-setup-addon/models/recognized-devices/recognized-device';\nimport type Model from '@ember-data/model';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type PasswordRoute from './route';\n\n/**\n * The default value of the passwordStrengthData property. This is declared here\n * to be able to reset to the default value when leaving the password screen or\n * no value is available yet.\n */\nconst DEFAULT_PASSWORD_STRENGTH_DATA = { strength: NaN, suggestions: [] as string[], warningKey: '' };\n\n/**\n * AllAware Dealer IDs to use for detecting if redirect needed after reset password\n */\nconst allAwareDIDs = ['23409', '26084'];\n\n/**\n * @classdesc\n *\n * Controller used to handle changing a login's password.\n *\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class PasswordController extends BaseLoginSetupEngineController {\n @service declare ajax: AdcAjaxService;\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare engineConfig: BaseEngineConfig;\n @service declare nativeBridge: any;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n //#region Error messages\n // These error messages are automatically set if a validation error is returned by the updatePassword API call.\n\n newPasswordError?: string;\n\n currentPasswordError?: string;\n\n @tracked\n confirmationPasswordError?: string;\n\n //#endregion\n\n /**\n * Alias to resolved profile model.\n */\n @alias('resolvedModel.profile')\n declare profile: Profile;\n\n /**\n * Alias to resolved recognized device model.\n */\n @alias('resolvedModel.devices')\n declare devices: Array;\n\n /**\n * Alias to resolved mostCommonPasswordTips model.\n */\n @alias('resolvedModel.mostCommonPasswordTips.value.suggestions')\n declare mostCommonPasswordTips: Array;\n\n /**\n * New password requested by user.\n */\n newPassword = '';\n\n /**\n * Is this a WebView in the mobile app?\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Is this a WebView in the mobile app?\n */\n @alias('contextManager.identityModel.dealer')\n declare dealer: Model;\n\n /**\n * Confirmation entry for new password requested by user.\n */\n passwordConfirmation = '';\n\n /**\n * Password for the current login.\n */\n currentPassword = '';\n\n /**\n * Information about password strength for the new password.\n */\n @tracked passwordStrengthData = DEFAULT_PASSWORD_STRENGTH_DATA;\n\n /**\n * Should all logins that are currently logged in be logged out? Defaults to true.\n */\n shouldLogOutAllDevices = true;\n\n /**\n * Should all smart speakers and TV apps that are currently logged in be logged out?\n */\n shouldLogOutSmartDevices = false;\n\n /**\n * Returns devices w/ saved logins from the devices list.\n *\n * @returns {Array}\n */\n @computed('devices')\n get savedLoginDevices(): Array {\n return this.devices?.filter((device) => device.isSavedLogin) ?? [];\n }\n\n /**\n * Returns smart devices w/ saved logins from the\n * savedLoginDevices list.\n *\n * @returns {Array}\n */\n @computed('engineConfig.recognizedDeviceTypes.{SmartTV,VoiceDevice}', 'savedLoginDevices')\n get smartSavedLoginDevices(): Array {\n return (\n this.savedLoginDevices?.filter((device) =>\n [\n this.engineConfig.recognizedDeviceTypes.SmartTV,\n this.engineConfig.recognizedDeviceTypes.VoiceDevice\n ].includes(Number(device.deviceType))\n ) ?? []\n );\n }\n\n /**\n * Returns array of device ids that we want to delete\n * saved login tokens for on the backend.\n *\n * @returns {Array}\n */\n @computed(\n 'engineConfig.recognizedDeviceTypes.{SmartTV,VoiceDevice}',\n 'savedLoginDevices',\n 'shouldLogOutAllDevices',\n 'shouldLogOutSmartDevices'\n )\n get logoutDeviceIds(): string[] {\n if (!this.shouldLogOutAllDevices) {\n return [];\n }\n if (!this.shouldLogOutSmartDevices) {\n return A(\n this.savedLoginDevices.filter(\n (device) =>\n ![\n this.engineConfig.recognizedDeviceTypes.SmartTV,\n this.engineConfig.recognizedDeviceTypes.VoiceDevice\n ].includes(Number(device.deviceType))\n )\n ).mapBy('id');\n }\n\n return A(this.savedLoginDevices).mapBy('id');\n }\n\n /**\n * Should log out of all devices option be displayed?\n *\n * @returns {boolean}\n */\n @computed()\n get showLogOutOfAllDevices(): Promise {\n const showLogOut = this.ajax\n .apiRequest('loginInformation/showLogOutOfAllDevices')\n .then((request: { value: { showLogOutOfAllDevices: boolean } }) => {\n return request.value.showLogOutOfAllDevices;\n });\n return showLogOut;\n }\n\n /** @override */\n getSensitiveProperties(): Array {\n return ['currentPassword', 'newPassword', 'passwordConfirmation'];\n }\n\n @action\n showLinkedDevices(): void {\n transitionToHostedEngineRoute(this, this.router, 'recognized-devices');\n }\n\n @action\n onChangePasswordConfirmation(value: string): void {\n this.passwordConfirmation = value;\n /** Clear the error message returned from the backend so that the passwordConfirmationError can\n appear as you're typing.\n */\n this.confirmationPasswordError = undefined;\n }\n\n /**\n * Makes api call to save the new password.\n */\n @action\n async savePassword(buttonAnimation: Promise): Promise {\n const fnSetPassword = () => {\n return this.profile.updatePassword(\n this.newPassword,\n this.passwordConfirmation,\n this.shouldLogOutAllDevices,\n this.shouldLogOutSmartDevices,\n this.currentPassword,\n this.logoutDeviceIds\n );\n };\n\n await this.submitApiRequest(fnSetPassword, buttonAnimation, this.intl.tc(this, 'successMessage')).then(\n async () => {\n // all aware customers should not be logged into the web app\n const dealerId = (await this.dealer).id;\n if (allAwareDIDs.includes(dealerId) && !this.isMobileApp) {\n location.replace(\n `https://${location.hostname}/web/deep-redirect/GenericRedirect?TargetURL=https://www.allaware.com/pages/download-the-all-aware-app`\n );\n return;\n }\n this.persistAppSessionIfNecessary();\n this.profile.reload();\n this.transitionToNextPage();\n }\n );\n }\n\n /**\n * If supported, this will tell the mobile app to persist the current session while helping to log out\n * all other devices.\n */\n persistAppSessionIfNecessary(): void {\n if (!this.isMobileApp) {\n return;\n }\n\n if (!this.shouldLogOutAllDevices) {\n return;\n }\n\n if (!this.nativeBridge.doesSupportPersistAppSession) {\n return;\n }\n\n this.nativeBridge.persistAppSession();\n }\n\n /**\n * Makes api call to get password strength for strength checker.\n *\n * @param {String} newPassword\n */\n @action\n async getPasswordStrength(newPassword: string): Promise {\n if (newPassword !== '') {\n await this.ajax\n .apiRequest('passwordStrength/getPasswordStrength', undefined, { password: newPassword }, POST)\n .then((response: { value: { strength: number; suggestions: Array; warningKey: string } }) => {\n const value = response.value;\n if (value) {\n this.passwordStrengthData = {\n strength: value.strength,\n suggestions: value.suggestions.map(String),\n warningKey: value.warningKey\n };\n }\n })\n .catch((response: any) => {\n response.errors = (response.errors || []).filter(\n ({ source }: { source: { pointer: string } }) => source && source.pointer\n );\n return Promise.reject(response);\n });\n } else {\n this.passwordStrengthData = DEFAULT_PASSWORD_STRENGTH_DATA;\n }\n }\n\n /**\n * Logs the user out of the site.\n */\n @action\n logout(): void {\n this.contextManager.logout(false);\n }\n\n /**\n * Canceling edits the password and rolls back edits.\n */\n @action\n cancelEdit(): void {\n this.contextManager.transitionToPreviousRoute();\n }\n\n /** @override */\n getPropertiesToResetOnExit(): Array> {\n return [['passwordStrengthData', DEFAULT_PASSWORD_STRENGTH_DATA]];\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n password: PasswordController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseRoute from '@adc/app-infrastructure/routes/base-route';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type BaseModel from '@adc/app-infrastructure/models/base-model';\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type RecognizedDevice from '@adc/login-setup-addon/models/recognized-devices/recognized-device';\nimport type Store from '@ember-data/store';\nimport type PasswordController from './controller';\n\ntype PasswordModel = {\n profile: Promise;\n devices: ADCStoreFindAll;\n mostCommonPasswordTips: Promise<{ suggestions: string[] }>;\n};\n\n/**\n * Route for editing login password.\n */\nexport default class PasswordRoute extends BaseRoute {\n @service declare contextManager: ContextManager & {\n identityModel: { id: string | number };\n };\n @service declare ajax: AdcAjaxService;\n @service declare engineConfig: BaseEngineConfig;\n @service declare store: Store;\n @service declare media: ADCResponsiveMediaService;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberPassword');\n }\n\n /** @override */\n deactivate() {\n if (this.media.isMobile) {\n if (window.showChat) {\n window.showChat();\n }\n }\n }\n\n /** @override */\n activate() {\n if (this.media.isMobile) {\n if (window.hideChat) {\n window.hideChat();\n }\n }\n }\n\n /** @override */\n resetController(controller: PasswordController) {\n if (controller) {\n controller.resetData();\n }\n }\n\n /** @override */\n async rollbackModelOnTransition() {\n (this.modelFor(this.routeName) as BaseModel)?.rollback();\n }\n\n /** @override */\n model(): PasswordModel {\n return {\n profile: this.store.findRecord('profile/profile', this.contextManager.identityModel.id),\n devices: this.store.findAll('recognizedDevices/recognizedDevice'),\n mostCommonPasswordTips: this.ajax.apiRequest('passwordStrength/getCommonPasswordTips')\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed, set, setProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { Business } from '@adc/login-setup-engine/utils/PropertyType';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport { reject } from 'rsvp';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type PropertyInformation from '@adc/login-setup-addon/models/settings/account-management/property-information';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom } from 'type-utils';\nimport type PropertyInformationRoute from './route';\n\n/**\n * Translates values from dropdown to corresponding strings\n *\n * NOTE: Probably a better way to do this but this is a temporary solution\n *\n */\nfunction PropertyAreaTranslatedStrings(this: PropertyInformationController, area: number): string {\n const { intl } = this;\n if (area === -2) {\n return intl.tc(this, '-2');\n } else if (area <= 1000 && area >= 0) {\n return intl.tc(this, '1000');\n } else if (area <= 1500) {\n return intl.tc(this, '1500');\n } else if (area <= 2500) {\n return intl.tc(this, '2500');\n } else if (area <= 3000) {\n return intl.tc(this, '3000');\n } else if (area <= 4000) {\n return intl.tc(this, '4000');\n }\n\n return intl.tc(this, '4001');\n}\n\n/**\n * Variables for the BusinessType selection of 'Unselected' or 'Other'\n *\n * @static\n */\nconst BUSINESS_TYPE_UNSELECTED = 0,\n BUSINESS_TYPE_OTHER = 9;\n\n/**\n * @classdesc\n *\n * Property Information Controller.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class PropertyInformationController extends BaseLoginSetupEngineController {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n\n declare model: ModelFrom;\n\n /**\n * Resolved model from the route\n */\n @tracked declare resolvedModel: {\n propertyInformation: PropertyInformation;\n propertyTypes: Array>;\n businessTypes: Array>;\n businessSubtypes: Array>>;\n electricityProviders: Array>;\n };\n\n /**\n * Can the user edit the property information?\n */\n @alias('resolvedModel.propertyInformation.canEditPropertyInformation')\n declare canEditPropertyInformation: boolean;\n\n /**\n * Is this a business?\n */\n @computed('resolvedModel.propertyInformation.propertyType')\n get isBusiness(): boolean {\n return this.resolvedModel.propertyInformation.propertyType === Business;\n }\n\n /**\n * Gets the businessType name currently selected to display\n */\n @computed('resolvedModel.propertyInformation.businessType')\n get businessTypeName(): string {\n const businessTypeTranslationDictionary: Record = {\n 0: '',\n 1: 'businessSubtypeCommunity',\n 2: 'businessSubtypeEntertainment',\n 3: 'businessSubtypeFood',\n 4: 'businessSubtypeIndustrial',\n 5: 'businessSubtypeOffice',\n 6: 'businessSubtypePersonal',\n 7: 'businessSubtypeProperty',\n 8: 'businessSubtypeRetail'\n };\n\n const translationKey =\n businessTypeTranslationDictionary[this.resolvedModel.propertyInformation.businessType] || '0';\n return this.intl.tc(this, translationKey);\n }\n\n /**\n * Should we hide the subtypes for a business type? Only if we have no value selected for businessType\n * or if we have clicked the 'Other' type\n */\n @computed('resolvedModel.propertyInformation.businessType')\n get hideSubtypes(): boolean {\n return (\n this.resolvedModel.propertyInformation.businessType != BUSINESS_TYPE_UNSELECTED &&\n this.resolvedModel.propertyInformation.businessType != BUSINESS_TYPE_OTHER\n );\n }\n\n /**\n * Gets the values for the property types dropdown.\n */\n @computed('resolvedModel.propertyTypes')\n get propertyTypesValues(): Array {\n const dropDownArray = Object.entries(this.resolvedModel.propertyTypes).map(([key, value]) =>\n DropdownSelectItem.create({\n value: key,\n name: value.toString()\n })\n );\n dropDownArray.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '0',\n name: this.intl.tc(this, 'defaultUnselected')\n })\n );\n return dropDownArray;\n }\n\n /**\n * Gets the dropdown options for the business type field\n */\n @computed('resolvedModel.businessTypes')\n get businessTypeValues(): Array {\n const businessTypeList = Object.entries(this.resolvedModel.businessTypes).map(([key, value]) =>\n DropdownSelectItem.create({\n value: key,\n name: value.toString()\n })\n );\n // Note: For error incase dropdown has no pre-selected value\n businessTypeList.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '0',\n name: this.intl.tc(this, 'defaultUnselected')\n })\n );\n return businessTypeList;\n }\n\n /**\n * Gets the dropdown options for the business subtype field\n */\n @computed('resolvedModel.{propertyInformation.businessType,businessSubtypes}')\n get businessSubtypeValues(): Array {\n const businessSubtypesForType =\n this.resolvedModel.businessSubtypes[this.resolvedModel.propertyInformation.businessType] || {};\n const businessSubtypeList = Object.entries(businessSubtypesForType).map(([key, value]) =>\n DropdownSelectItem.create({\n value: key,\n name: value.toString()\n })\n );\n // Note: For error incase dropdown has no pre-selected value\n businessSubtypeList.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '0',\n name: this.intl.tc(this, 'defaultUnselected')\n })\n );\n return businessSubtypeList;\n }\n\n /**\n * Gets the values for the primary residence dropdown.\n */\n @computed()\n get primaryResidenceValues(): Array {\n const { intl } = this;\n const dropDownArray = [true, false].map((primaryRes) =>\n DropdownSelectItem.create({\n value: primaryRes.toString(),\n name: primaryRes ? intl.t('generic.yes') : intl.t('generic.no')\n })\n );\n dropDownArray.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: 'null',\n name: intl.tc(this, 'defaultUnselected')\n })\n );\n return dropDownArray;\n }\n\n /**\n * Gets the values for the adults dropdown.\n */\n @computed()\n get adultsValues(): Array {\n const { intl } = this;\n const dropDownArray = [...Array(6).keys()].map((numAdults) =>\n DropdownSelectItem.create({\n value: numAdults.toString(),\n name:\n numAdults.toString() +\n (numAdults >= 5 ? '+ ' : ' ') +\n intl.tc(this, 'adults', {\n numAdults\n })\n })\n );\n dropDownArray.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '-1',\n name: intl.tc(this, 'adultUnselected')\n })\n );\n return dropDownArray;\n }\n\n /**\n * Gets the values for the pets dropdown.\n */\n @computed()\n get petsValues(): Array {\n const { intl } = this;\n const dropDownArray = [...Array(6).keys()].map((numPets) =>\n DropdownSelectItem.create({\n value: numPets.toString(),\n name: numPets.toString() + (numPets >= 5 ? '+ ' : ' ') + intl.tc(this, 'pets', { numPets })\n })\n );\n dropDownArray.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '-1',\n name: intl.tc(this, 'petUnselected')\n })\n );\n return dropDownArray;\n }\n\n /**\n * Gets the values for the children dropdown.\n */\n @computed()\n get childrenValues(): Array {\n const { intl } = this;\n const dropDownArray = [...Array(6).keys()].map((numChildren) =>\n DropdownSelectItem.create({\n value: numChildren.toString(),\n name:\n numChildren.toString() +\n (numChildren >= 5 ? '+ ' : ' ') +\n intl.tc(this, 'children', {\n numChildren\n })\n })\n );\n dropDownArray.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '-1',\n name: intl.tc(this, 'childUnselected')\n })\n );\n return dropDownArray;\n }\n\n /**\n * Gets the values for the property area dropdown.\n */\n @computed('PropertyAreaTranslatedStrings')\n get propertyAreaValues(): Array {\n const { intl } = this;\n const dropDownArray = [-2, 1000, 1500, 2500, 3000, 4000, 5000].map((propertyArea) =>\n DropdownSelectItem.create({\n value: propertyArea.toString(),\n name: PropertyAreaTranslatedStrings.call(this, propertyArea)\n })\n );\n // Note: Added option for un-populated value for backwards compatibility with old account management page. Do Not Remove.\n dropDownArray.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '-1',\n name: intl.tc(this, 'defaultUnselected')\n })\n );\n return dropDownArray;\n }\n\n /**\n * Gets the values for the electricity provider dropdown.\n */\n @computed('resolvedModel.electricityProviders')\n get electricityProviders(): Array {\n const providerList = this.resolvedModel.electricityProviders.map((provider: { key: number; value: string }) => {\n return DropdownSelectItem.create({\n value: provider.key.toString(),\n name: provider.value\n });\n });\n\n // Note: Added option for un-populated value for backwards compatibility with old account management page. Do Not Remove.\n providerList.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '0',\n name: this.intl.tc(this, 'defaultUnselected')\n })\n );\n return providerList;\n }\n\n /**\n * Gets the dropdown information for the employee occupancy field.\n */\n @computed()\n get numberOfEmployeeValues(): Array {\n const companySizes = {\n companySize1: 10,\n companySize2: 50,\n companySize3: 200,\n companySize4: 500,\n companySize5: 1000,\n companySize6: 2500,\n companySize7: 5000,\n companySize8: 5001\n };\n const { intl } = this;\n const companySizeList = Object.entries(companySizes).map(([key, value]) =>\n DropdownSelectItem.create({\n value: value.toString(),\n name: this.intl.tc(this, key)\n })\n );\n\n // Note: Added option for un-populated value for backwards compatibility with old account management page. Do Not Remove.\n companySizeList.splice(\n 0,\n 0,\n DropdownSelectItem.create({\n value: '-1',\n name: intl.tc(this, 'defaultUnselected')\n })\n );\n return companySizeList;\n }\n\n /**\n * Updates the Property Type and resets adult occupants when toggling between business and residential.\n */\n @action\n updatePropertyType(newPropertyType: string): void {\n const oldSelection = this.resolvedModel.propertyInformation.propertyType,\n newSelection = parseInt(newPropertyType);\n\n // If the user is switching to Residential property type from Business property type.\n if (\n (newSelection === Business && oldSelection !== Business) ||\n (newSelection !== Business && oldSelection === Business)\n ) {\n setProperties(this.resolvedModel.propertyInformation, {\n isPrimaryResidence: null,\n occupancyChildren: -1,\n occupancyPets: -1,\n occupancyAdults: -1\n });\n }\n\n // Update the property type.\n set(this.resolvedModel.propertyInformation, 'propertyType', newSelection);\n }\n\n /**\n * Updates the business type from the new dropdown selection. Want to make sure to also\n * update the business subtype to unselected when selecting a new businessType\n */\n @action\n updateBusinessType(newBusinessType: string): void {\n set(this.resolvedModel.propertyInformation, 'businessType', parseInt(newBusinessType));\n set(this.resolvedModel.propertyInformation, 'businessSubtype', 0);\n }\n\n /**\n * Updates the business subtype from the new dropdown selection\n */\n @action\n updateBusinessSubtype(newBusinessSubtype: string): void {\n set(this.resolvedModel.propertyInformation, 'businessSubtype', parseInt(newBusinessSubtype));\n }\n /**\n * Converts the string value of the dropdown to a boolean and saves it on the model locally.\n */\n @action\n updatePrimaryResidence(newIsPrimaryResidence: string): void {\n this.resolvedModel.propertyInformation.isPrimaryResidence =\n newIsPrimaryResidence === 'null' ? null : newIsPrimaryResidence == 'true';\n }\n\n /**\n * Save the values in the dropdowns to the user's property information.\n */\n @action\n async savePropertyInformation(): Promise {\n // Clear out the Business name if we are saving a residential property type.\n if (this.resolvedModel.propertyInformation.propertyType !== Business) {\n this.resolvedModel.propertyInformation.companyName = '';\n }\n\n await this.resolvedModel.propertyInformation\n .save()\n .then(() => {\n this.notificationManager.addSuccess(this.intl.tc(this, 'successUpdateMessage'));\n\n // If we're on system install, we want to transition to the next page.\n // On customer site, we want to stay on the page after saving.\n if (this.isSystemInstall) {\n this.installManager.goToNextStep();\n }\n })\n .catch((response) => {\n response.errors = (response.error || []).filter(\n ({ source }: { source: { pointer: string } }) => source && source.pointer\n );\n return reject(response);\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'property-information': PropertyInformationController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '@adc/login-setup-engine/base-route';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type PropertyInformation from '@adc/login-setup-addon/models/settings/account-management/property-information';\nimport type Store from '@ember-data/store';\n\ninterface PropertyInformationRouteModel {\n propertyInformation: ADCStoreFindRecord | PropertyInformation;\n propertyTypes: Promise>;\n businessTypes: Promise>;\n businessSubtypes: Promise>>;\n electricityProviders: Promise>;\n}\n\n/**\n * @classdesc\n *\n * The route for the customer's property information.\n */\nexport default class PropertyInformationRoute extends BaseLoginSetupEngineRoute {\n // TODO: Change to ContextManager in CML-21139\n @service declare contextManager: any;\n @service declare ajax: AdcAjaxService;\n @service declare engineConfig: BaseEngineConfig;\n @service declare store: Store;\n\n routeId: number;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberPropertyInformation');\n }\n\n model(): PropertyInformationRouteModel {\n return {\n propertyInformation: this.store.findRecord(\n 'settings/account-management/property-information',\n this.contextManager.getContextId()\n ),\n propertyTypes: this.ajax.apiRequest(\n 'settings/accountManagement/propertyInformation/getPropertyTypes',\n undefined,\n null,\n 'GET'\n ),\n businessTypes: this.ajax.apiRequest(\n 'settings/accountManagement/propertyInformation/getBusinessTypes',\n undefined,\n null,\n 'GET'\n ),\n businessSubtypes: this.ajax.apiRequest(\n 'settings/accountManagement/propertyInformation/getBusinessSubtypes',\n undefined,\n null,\n 'GET'\n ),\n electricityProviders: this.ajax.apiRequest(\n 'settings/accountManagement/propertyInformation/getElectricityProviders',\n undefined,\n null,\n 'GET'\n )\n };\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport BaseLoginSetupEngineController from '@adc/login-setup-engine/base-controller';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type PushMigrationPrompt from '@adc/login-setup-addon/models/push-migration-tool/push-migration-prompt';\nimport type { SafeString } from 'handlebars';\nimport type { ModelFrom } from 'type-utils';\nimport type PushMigrationRoute from './route';\n\ninterface LearnMoreSectionGroup {\n title: string;\n bulletPoints: SafeString[];\n}\n\n@intlPath({ module: '@adc/login-setup-engine', path: 'push-migration' })\nexport default class PushMigrationController extends BaseLoginSetupEngineController {\n @service declare intl: ADCIntlService;\n\n declare prompt: PushMigrationPrompt;\n\n declare model: ModelFrom;\n\n @tracked buttonsDisabled = false;\n\n @tracked expandLearnMoreSection = false;\n\n /**\n * Returns the source path for the prompt image.\n */\n get pushMigrationImageSource(): string {\n return '/NewPublicLibraryFiles/images/wizards/loginsetup/push-migration.svg';\n }\n\n /**\n * Returns text for \"Learn more\" section.\n */\n get learnMoreSectionGroups(): LearnMoreSectionGroup[] {\n const { intl } = this;\n\n return [\n ['pushActionable', ['pushActionableText']],\n ['videoNotifications', ['videoNotificationsText1', 'videoNotificationsText2', 'videoNotificationsText3']],\n ['pushCriticalAlerts', ['pushCriticalAlertsText1', 'pushCriticalAlertsText2']],\n ['pushCustomizable', ['pushCustomizableText']],\n ['pushCarrier', ['pushCarrierText']],\n ['pushDevices', ['pushDevicesText']]\n ].map(([title, bulletPoints]: [string, string[]]) => ({\n title: intl.tc(this, title),\n bulletPoints: bulletPoints.map((text) => htmlSafe(intl.tc(this, text)))\n }));\n }\n\n /**\n * Makes api call to perform the push migration.\n */\n @action\n async migrate(buttonAnimation: Promise): Promise {\n await this.handleButtonClick(\n buttonAnimation,\n () => this.prompt.migrate(),\n htmlSafe(this.intl.tc(this, 'migrateConfirmation', { deviceName: this.prompt.pushDeviceName }))\n );\n }\n\n /**\n * Makes api call to set the migration status to remind later.\n */\n @action\n async remindLater(buttonAnimation: Promise): Promise {\n await this.handleButtonClick(\n buttonAnimation,\n () => this.prompt.remindLater(),\n this.intl.tc(this, 'remindMeLaterConfirmation')\n );\n }\n\n /**\n * Makes api call to set the migration status to do not remind again.\n */\n @action\n async doNotRemindAgain(buttonAnimation: Promise): Promise {\n await this.handleButtonClick(\n buttonAnimation,\n () => this.prompt.doNotRemindAgain(),\n htmlSafe(this.intl.tc(this, 'doNotShowConfirmation'))\n );\n }\n\n private async handleButtonClick(\n buttonAnimation: Promise,\n action: () => Promise,\n successMessage: string | SafeString\n ): Promise {\n this.buttonsDisabled = true;\n\n buttonAnimation.then((isSuccess) => {\n if (isSuccess) {\n // Set a 3-second delay before transitioning to next page to give user\n // time to read success toast message.\n setTimeout(() => this.transitionToNextPage(), 3000);\n }\n });\n\n await this.submitApiRequest(\n () =>\n action().catch((response) => {\n this.buttonsDisabled = false;\n return Promise.reject(response);\n }),\n buttonAnimation.then(),\n successMessage,\n undefined,\n true\n );\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'push-migration': PushMigrationController;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { POST } from '@adc/ajax/services/adc-ajax';\nimport { processValidationErrorsFromResponse } from '@adc/ajax/utils/validation-error-processing';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { ResolvedModelFrom } from 'type-utils';\nimport type EmberDeviceLinkRequestRoute from './route';\n\n/**\n * @classdesc\n * Controller used to handle linking a device to login\n */\nexport default class DeviceLinkRequestController extends EmberController {\n @service declare ajax: AdcAjaxService;\n @service declare notificationManager: NotificationManager;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n queryParams = ['verificationCode'];\n\n resolvedModel?: ResolvedModelFrom;\n\n verificationCodeError?: string;\n\n /**\n * Verification code the user has inputted\n */\n @tracked verificationCode?: string;\n\n /**\n * Verify the code inputted by user\n */\n @action\n verifyCode(): void {\n const { ajax, intl, notificationManager, verificationCode } = this;\n\n ajax.apiRequest('engines/deviceLinkRequest/verifyCode', undefined, { verificationCode: verificationCode }, POST)\n .then(() => {\n notificationManager.addSuccess(\n intl.t('@adc/login-setup-engine.recognized-devices.device-link-request.successfulLinkMessage')\n );\n })\n .catch((error) => {\n processValidationErrorsFromResponse.call(this, error);\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'recognized-devices/device-link-request': DeviceLinkRequestController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../../base-route';\n\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\n\n/**\n * Route for linking devices with logins.\n */\nexport default class EmberDeviceLinkRequestRoute extends BaseLoginSetupEngineRoute {\n @service declare engineConfig: BaseEngineConfig;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberDeviceLinkRequest');\n }\n}\n","import { action } from '@ember/object';\nimport { alias, filterBy } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { SmartTV } from '@adc/login-setup-engine/enums/RecognizedDeviceType';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport BaseLoginSetupEngineController from '../../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type RecognizedDevice from '@adc/login-setup-addon/models/recognized-devices/recognized-device';\nimport type TwoFactorAuthentication from '@adc/login-setup-addon/models/two-factor-authentication/two-factor-authentication';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type RecognizedDevicesRoute from './route';\n\n/**\n * @classdesc Controller for editing recognized devices.\n */\nexport default class RecognizedDevicesController extends BaseLoginSetupEngineController {\n @service declare router: RouterService;\n @service declare contextManager: ContextManager;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * Array of RecognizedDevice models.\n */\n @alias('resolvedModel.recognizedDevices')\n recognizedDevices?: Array;\n\n /**\n * The TwoFactorAuthentication model.\n */\n @alias('resolvedModel.twoFactorAuthentication')\n twoFactorAuthentication?: TwoFactorAuthentication;\n\n /**\n * Returns list of trusted devices.\n */\n @filterBy('filteredRecognizedDevices', 'isTrustedDevice')\n declare trustedDevices: RecognizedDevice[];\n\n /**\n * Filter out SmartTV devices so that they are not displayed as trusted or untrusted.\n */\n get filteredRecognizedDevices(): RecognizedDevice[] {\n return this.recognizedDevices?.filter((device) => device.deviceType !== SmartTV.toString()) ?? [];\n }\n\n /**\n * Returns list of untrusted devices.\n */\n get untrustedDevices(): RecognizedDevice[] {\n return this.filteredRecognizedDevices?.filter((device) => !device.isTrustedDevice) ?? [];\n }\n\n /**\n * Returns true if the user has 2FA enabled.\n */\n get is2FAEnabled(): boolean {\n return this.twoFactorAuthentication?.is2FAEnabled() ?? false;\n }\n\n /**\n * Transitions to the page for linking TV devices.\n */\n @action\n transitionToDeviceLink(): void {\n transitionToHostedEngineRoute(this, this.router, 'recognized-devices.device-link-request');\n }\n\n /**\n * Calls method that transitions to the consuming application's exit defined for 2FA setup.\n */\n @action\n exitRecognizedDevices(): void {\n this.send('exitTwoFactorSetup');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'recognized-devices/index': RecognizedDevicesController;\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport BaseLoginSetupEngineRoute from '../../base-route';\n\n/**\n * @classdesc Route for displaying devices that has access to a system.\n */\nexport default class RecognizedDevicesRoute extends BaseLoginSetupEngineRoute {\n @service contextManager;\n @service engineConfig;\n @service router;\n @service store;\n\n /** @override */\n routeId = this.engineConfig.getRouteIdFromRouteName('EmberRecognizedDevices');\n\n /** Used to decipher where a user has navigated from in order to send them to the proper location */\n transitionFrom = undefined;\n\n /** @override */\n model() {\n return {\n recognizedDevices: this.store.findAll('recognized-devices/recognized-device', { reload: true }),\n twoFactorAuthentication: this.store.findRecord(\n 'two-factor-authentication/two-factor-authentication',\n this.contextManager.identityModel.id,\n { reload: true }\n ),\n isEnrollingIn2FA: false\n };\n }\n\n /**\n * Transitions to the consuming application's exit step defined for 2FA setup.\n */\n @action\n exitTwoFactorSetup() {\n // If we're in customer ember, once we complete setup, we want to redirect back to the overview page instead of login-information.\n if (this.transitionFrom?.includes('settings.login-information.login-setup.two-factor-authentication')) {\n // \"Go back\" to the overview page in order to pop the setup from the previous route stack.\n return this.contextManager.transitionToPreviousRoute();\n }\n\n // If we're in system-install, go back to overview page so user can set up another 2FA method if desired\n if (this.transitionFrom?.includes('login-setup.two-factor-authentication')) {\n return transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n }\n\n return this.transitionToExternal('twoFactorSetupExitRoute');\n }\n\n /** @override */\n async redirect(model, transition) {\n let untrustedDevices = await model.recognizedDevices;\n untrustedDevices = untrustedDevices.filter((device) => !device.isTrustedDevice);\n this.transitionFrom = transition.from?.name;\n\n // After 2FA setup, don't show the route if no untrusted devices exist\n if (this.transitionFrom?.includes('two-factor-authentication.setup')) {\n model.isEnrollingIn2FA = true;\n\n if (isEmpty(untrustedDevices)) {\n this.exitTwoFactorSetup();\n return;\n }\n }\n }\n}\n","import buildRoutes from 'ember-engines/routes';\n\nexport default buildRoutes(function () {\n this.route('account-information');\n this.route('arming-reminder');\n this.route('business-hours');\n this.route('call-lists', function () {\n this.route('call-list', { path: '/call-list/:call_list_id' }, function () {\n this.route('contact-create', { path: '/contact/add' });\n this.route('contact-edit', { path: '/contact/:contact_id' });\n });\n });\n this.route('communication-preferences');\n this.route('email-verification');\n this.route('login-name-confirmation');\n this.route('outside-working-hours');\n this.route('password');\n this.route('premise', function () {\n this.route('edit');\n });\n this.route('property-information');\n this.route('push-migration');\n this.route('recognized-devices', function () {\n this.route('device-link-request');\n });\n this.route('security-question');\n this.route('system-information');\n this.route('two-factor-authentication', function () {\n this.route('overview');\n this.route('setup');\n this.route('two-factor-challenge-flow');\n });\n});\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { default as DropdownSelectItem, UNSELECTED, SELECTED } from '@adc/ui-components/utils/dropdown-select-item';\nimport BaseLoginSetupEngineController from '../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type Route from './route';\n\n/**\n * Controller used to handle changing a login's security question.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class SecurityQuestionController extends BaseLoginSetupEngineController {\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare router: RouterService;\n @service declare envSettings: EnvSettingsService;\n @service declare intl: ADCIntlService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n currentPasswordError?: string;\n\n /**\n * Id for selected security question. Is undefined if the security question\n * is being selected for the first time.\n */\n @tracked\n selectedSecurityQuestion?: number;\n\n /**\n * User provided answer for the selected security question.\n */\n @tracked\n securityQuestionAnswer = '';\n\n /**\n * Password for the current login.\n */\n @tracked\n currentPassword = '';\n\n /**\n * Requests the security questions from the server and returns them as dropdown items.\n *\n */\n @computed('resolvedModel.securityQuestions.value', 'selectedSecurityQuestion')\n get securityQuestionDropDownItems(): Array {\n const securityQuestions = this.resolvedModel?.securityQuestions?.value;\n if (!securityQuestions) {\n return [];\n }\n\n // Each security question should be of form { id: X, text: 'Y' }.\n return Object.keys(securityQuestions).map((id: string) =>\n DropdownSelectItem.create({\n name: securityQuestions[Number(id)],\n value: id,\n state: parseInt(id, 10) === this.selectedSecurityQuestion ? SELECTED : UNSELECTED\n })\n );\n }\n\n /**\n * The text for the currently selected security question.\n */\n @computed('resolvedModel.securityQuestions.value', 'selectedSecurityQuestion')\n get currentSecurityQuestionText(): string {\n const securityQuestions = this.resolvedModel?.securityQuestions?.value;\n\n if (!securityQuestions || !this.selectedSecurityQuestion) {\n return this.intl.tc(this, 'securityQuestionPlaceholder');\n }\n\n return securityQuestions[this.selectedSecurityQuestion];\n }\n\n /** @override */\n getSensitiveProperties(): Array {\n return ['securityQuestionAnswer', 'currentPassword'];\n }\n\n /** @override */\n getPropertiesToResetOnExit(): Array {\n return [...super.getPropertiesToResetOnExit(), ['selectedSecurityQuestion', undefined]];\n }\n\n /**\n * Sends api request to save security question and answer.\n */\n @action\n async saveSecurityQuestion(buttonAnimation: Promise): Promise {\n const profile = this.resolvedModel?.profile,\n fnSetSecurityQuestion = () => {\n return profile?.setSecurityQuestion(\n this.selectedSecurityQuestion ?? -1,\n this.securityQuestionAnswer,\n this.currentPassword\n );\n };\n\n await this.submitApiRequest(fnSetSecurityQuestion, buttonAnimation, this.intl.tc(this, 'successMessage')).then(\n () => {\n profile?.reload();\n this.transitionToNextPage();\n }\n );\n }\n\n /**\n * Canceling edits the security question and rolls back edits.\n */\n @action\n cancelEdit(): void {\n this.contextManager.transitionToPreviousRoute();\n }\n\n /**\n * Sets the initial value for the current security question once\n * the template is ready.\n */\n @action\n updateSecurityQuestionDataOnInsert(): void {\n if (!this.selectedSecurityQuestion) {\n this.selectedSecurityQuestion = this.resolvedModel?.profile?.securityQuestionId;\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'security-question': SecurityQuestionController;\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'security-question': SecurityQuestionController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type AjaxService from '@adc/ajax/services/adc-ajax';\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type Store from '@ember-data/store';\nimport type { ModelFrom } from 'type-utils';\nimport type SecurityQuestionController from './controller';\n\n/**\n * @classdesc\n *\n * Route for editing login security question.\n *\n */\nexport default class SecurityQuestionRoute extends BaseLoginSetupEngineRoute {\n @service declare ajax: AjaxService;\n @service declare engineConfig: BaseEngineConfig;\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager & { identityModel: { id: string } };\n @service declare store: Store;\n\n declare currentModel: ModelFrom;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberSecurityQuestion');\n }\n\n resetController(controller: SecurityQuestionController): void {\n if (controller) {\n controller.resetData();\n }\n }\n\n async rollbackModelOnTransition(): Promise {\n (await this.currentModel.profile).rollback();\n }\n\n model(): {\n profile: ADCStoreFindRecord;\n securityQuestions: Promise<{ value?: Record }>;\n } {\n const id = this.contextManager.identityModel.id;\n return {\n profile: this.store.findRecord('profile/profile', id),\n securityQuestions: this.ajax.apiRequest>(\n `profile/profiles/${id}/getSecurityQuestions`\n )\n };\n }\n}\n","import { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport BaseLoginSetupEngineController from '../base-controller';\n\n/**\n * @classdesc\n *\n * System Information Controller.\n *\n * @class settings.account-management.system-information.Controller\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class SystemInformationController extends BaseLoginSetupEngineController {\n @service intl;\n\n /**\n * Gets the values for the temperature dropdown.\n *\n * @type {Array}\n */\n @computed('resolvedModel.{systemInformation.temperature,temperatureTypes}')\n get temperatureTypesValues() {\n return Object.entries(this.resolvedModel.temperatureTypes).map(([key, value]) =>\n DropdownSelectItem.create({\n value: key,\n name: value,\n selected: key === this.resolvedModel.systemInformation.temperature\n })\n );\n }\n\n /**\n * Gets the values for the timezone dropdown.\n *\n * @type {Array}\n */\n @computed('resolvedModel.{systemInformation.timezone,timezones.value}')\n get timezoneList() {\n return this.resolvedModel.timezones.value.map(({ timezoneId, desc }) =>\n DropdownSelectItem.create({\n value: timezoneId,\n name: desc,\n selected: (timezoneId = this.resolvedModel.systemInformation.timezone)\n })\n );\n }\n\n /**\n * Gets the values for the volume dropdown.\n *\n * @type {Array}\n */\n @computed('resolvedModel.{systemInformation.volume,volumeTypes}')\n get volumeTypesValues() {\n return Object.entries(this.resolvedModel.volumeTypes).map(([key, value]) =>\n DropdownSelectItem.create({\n value: key,\n name: value,\n selected: this.resolvedModel.systemInformation.volume === key\n })\n );\n }\n\n /**\n * Save the values in the temperature and volume dropdowns to the user's system information.\n */\n @action\n async clickAction() {\n const fnSetSystemInformation = () => {\n return this.resolvedModel.systemInformation.save();\n };\n\n await this.submitApiRequest(fnSetSystemInformation, undefined, this.intl.tc(this, 'successUpdateMessage')).then(\n () => {\n // Using this rather than transitionToNextPage because we want to\n // keep the current customer-site functionality of staying on the page\n // rather than navigating to the previous route.\n if (this.isSystemInstall) {\n this.installManager.goToNextStep();\n }\n }\n );\n }\n}\n","import { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\n/**\n * @classdesc\n *\n * System Information route\n */\nexport default class SystemInformationRoute extends BaseLoginSetupEngineRoute {\n @service ajax;\n @service store;\n @service engineConfig;\n @service contextManager;\n\n /** @override */\n routeId = this.engineConfig.getRouteIdFromRouteName('EmberSystemInformation');\n\n /** @override */\n isMediumWidthPage = true;\n\n /** @override */\n willTransition() {\n if (this.resolvedModel.systemInformation.hasDirtyAttributes) {\n this.resolvedModel.systemInformation.rollbackAttributes();\n }\n }\n\n /** @override */\n model() {\n return {\n systemInformation: this.store.findRecord(\n 'settings/account-management/system-information/system-information',\n this.contextManager.getContextId()\n ),\n temperatureTypes: this.ajax.apiRequest(\n 'engines/settings/accountManagement/systemInformation/systemInformation/getTemperatureTypes'\n ),\n volumeTypes: this.ajax.apiRequest(\n 'engines/settings/accountManagement/systemInformation/systemInformation/getVolumeTypes'\n ),\n timezones: this.ajax.apiRequest('timezones/getList')\n };\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type Profile from '@adc/login-setup-addon/models/profile/profile';\nimport type CountryMobileCarrier from '@adc/login-setup-addon/models/sms/country-mobile-carrier';\nimport type TwoFactorAuthentication from '@adc/login-setup-addon/models/two-factor-authentication/two-factor-authentication';\nimport type BaseLoginSetupEngineController from '@adc/login-setup-engine/base-controller';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\n\ntype BaseTwoFactorModel = {\n twoFactorAuthentication: Promise;\n countryMobileCarriers: ADCStoreFindAll;\n};\n\n/**\n * @classdesc Base route used for all 2FA routes.\n */\nexport default class BaseTwoFactorRoute extends BaseLoginSetupEngineRoute {\n @service declare contextManager: ContextManager & {\n identityModel: { id: string | number };\n };\n @service declare store: Store;\n @service declare router: RouterService;\n\n /** @override */\n model(): BaseTwoFactorModel {\n return {\n twoFactorAuthentication: this.store.findRecord(\n 'two-factor-authentication/two-factor-authentication',\n this.contextManager.identityModel.id,\n { reload: true }\n ),\n countryMobileCarriers: this.store.findAll('sms/country-mobile-carrier')\n };\n }\n\n /** @override */\n resetController(controller: BaseLoginSetupEngineController): void {\n if (controller) {\n controller.resetData();\n }\n }\n\n /** @override */\n async rollbackModelOnTransition() {\n // eslint-disable-next-line ember/no-get\n const profile = (await get(this, 'controller.model.profile')) as Profile;\n\n if (profile) {\n profile.rollback();\n }\n }\n}\n","import { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseLoginSetupEngineController from '../../base-controller';\n\nimport type TwoFactorAuthentication from '@adc/login-setup-addon/models/two-factor-authentication/two-factor-authentication';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type IndexRoute from './route';\n\ndeclare type Dealer = {\n shouldShowSupportPhone: boolean;\n shouldShowSupportEmail: boolean;\n supportPhone: string;\n supportEmail: string;\n name: string;\n};\n\n/**\n * @classdesc Controller used to display 2FA introduction information.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class IndexController extends BaseLoginSetupEngineController {\n @service declare router: RouterService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * The TwoFactorAuthentication model.\n */\n @alias('resolvedModel.twoFactorAuthentication')\n declare twoFactorAuthentication: TwoFactorAuthentication;\n\n /**\n * Should we display the dealer contact info?\n */\n @alias('resolvedModel.twoFactorAuthentication.showDealerContactInfo')\n declare showDealerContactInfo: boolean;\n\n /**\n * Dealer for the current customer.\n */\n @alias('contextManager.identityModel.dealer')\n declare dealer: Dealer;\n\n /**\n * Support contact information for dealer.\n */\n @computed('dealer.{supportEmail,supportPhone}')\n get dealerContactString(): string {\n return this.dealer.supportPhone || this.dealer.supportEmail;\n }\n\n /**\n * Transitions to the overview route.\n */\n @action\n goToOverviewRoute(): void {\n transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n }\n\n /**\n * Skips the 2FA setup process.\n */\n @action\n skipTwoFactorSetup(buttonAnimation: Promise): Promise {\n buttonAnimation.then((isSuccess) => {\n if (isSuccess !== false) {\n this.send('exitTwoFactorSetup');\n }\n });\n\n return this.twoFactorAuthentication.skipTwoFactorSetup();\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'two-factor-authentication-index': IndexController;\n }\n}\n","import { action } from '@ember/object';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport BaseTwoFactorRoute from '../base-route';\n\n/**\n * @classdesc Route displays introductory content for a user regarding 2FA.\n */\nexport default class IndexRoute extends BaseTwoFactorRoute {\n /**\n * Transitions to the consuming application's exit route defined for 2FA setup.\n */\n @action\n exitTwoFactorSetup() {\n this.transitionToExternal('twoFactorSetupExitRoute');\n }\n\n /** @override */\n async afterModel(model, transition) {\n const twoFactorAuthentication = await model.twoFactorAuthentication;\n const transitionFrom = transition.from?.name;\n\n if (!twoFactorAuthentication.showSuggestedSetup || transitionFrom?.includes('login-information')) {\n // If setup was not suggested/required, skip this index/intro page and go straight to the overview.\n return transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, setProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseLoginSetupEngineController from '../../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type TwoFactorAuthentication from '@adc/login-setup-addon/models/two-factor-authentication/two-factor-authentication';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom, ResolvedModelFrom } from 'type-utils';\nimport type OverviewRoute from './route';\n\n/**\n * @classdesc Controller used for main 2FA page.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class OverviewController extends BaseLoginSetupEngineController {\n @service declare router: RouterService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n\n declare model: ModelFrom;\n resolvedModel?: ResolvedModelFrom;\n\n /**\n * Is the current login a LoginAs rep?\n */\n @alias('contextManager.isLoginAsLoginRep')\n declare isLoginAsLoginRep: boolean;\n\n /**\n * The TwoFactorAuthentication model.\n */\n @alias('resolvedModel.twoFactorAuthentication')\n @tracked\n twoFactorAuthentication?: TwoFactorAuthentication;\n\n /**\n * The enum value for \"authenticator\" two-factor type.\n */\n @alias('twoFactorAuthentication.AUTHENTICATOR')\n AUTHENTICATOR?: number;\n\n /**\n * The enum value for \"sms\" two-factor type.\n */\n @alias('twoFactorAuthentication.SMS')\n SMS?: number;\n\n /**\n * The enum value for \"email\" two-factor type.\n */\n @alias('twoFactorAuthentication.EMAIL')\n EMAIL?: number;\n\n /**\n * Information for displaying with authentication methods are available for use.\n */\n get authenticationMethods(): Array<{\n key: string;\n icon: string;\n title: string;\n description: string;\n class: string;\n drillIcon: string;\n descriptionRight: string;\n tfaType: number;\n }> {\n return (\n [\n [\n 'authenticator',\n 'QRcode-scanner',\n this.AUTHENTICATOR,\n this.twoFactorAuthentication?.hasAuthenticatorPermission()\n ],\n ['email', 'email', this.EMAIL, this.twoFactorAuthentication?.hasEmailPermission()],\n ['sms', 'notifications', this.SMS, this.twoFactorAuthentication?.hasSmsPermission()]\n ]\n // Get methods where the permission is truthy.\n .filter((method) => method[3])\n .map(([key, icon, tfaType]: [string, string, number, boolean]) => ({\n key,\n icon,\n tfaType,\n class: this.twoFactorAuthentication?.isTwoFactorTypeEnabled(tfaType)\n ? 'drill-through-item-green'\n : '',\n drillIcon: this.twoFactorAuthentication?.isTwoFactorTypeEnabled(tfaType)\n ? 'trash'\n : 'chevron-right',\n title: this.intl.tc(this, `${key}Title`),\n description: this.twoFactorAuthentication?.isTwoFactorTypeEnabled(tfaType)\n ? this.intl.tc(this, `${key}EnabledDescription`, {\n mobileNumber: this.twoFactorAuthentication.formattedMobileNumber(),\n emailAddress: this.twoFactorAuthentication.obfuscatedEmailAddress()\n })\n : this.intl.tc(this, `${key}Description`),\n descriptionRight: this.twoFactorAuthentication?.isTwoFactorTypeEnabled(tfaType)\n ? this.intl.tc(this, 'methodEnabled')\n : this.intl.tc(this, 'methodDisabled')\n }))\n );\n }\n\n /**\n * Returns true if we should show the manage trusted devices link.\n */\n get showManageTrustedDevicesLink(): boolean {\n return !this.isSystemInstall && !this.isLoginAsLoginRep;\n }\n\n /**\n * Returns true if we should show the done button.\n */\n get showDoneButton(): boolean {\n return this.isSystemInstall && (this.twoFactorAuthentication?.is2FAEnabled() ?? false);\n }\n\n /**\n * Transitions to the appropriate flow for enabling that type of 2FA.\n */\n @action\n initiateSetup(typeOf2FA: number): void {\n setProperties(this.twoFactorAuthentication, {\n selected2FAType: typeOf2FA,\n id: this.twoFactorAuthentication?.id\n });\n\n transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.setup');\n }\n\n /**\n * Calls the appropriate function to either setup a currently disabled 2FA method or to disable an enabled 2FA method.\n */\n @action\n selectDrillThroughAction(typeOf2FA: number): void {\n return this.twoFactorAuthentication?.isTwoFactorTypeEnabled(typeOf2FA)\n ? this.disable2FA(typeOf2FA)\n : this.initiateSetup(typeOf2FA);\n }\n\n /**\n * Open confirmation dialog to confirm disabling a 2FA method.\n */\n @action\n disable2FA(typeOf2FA: number): void {\n if (!(this.AUTHENTICATOR && this.EMAIL && this.SMS)) {\n return;\n }\n\n const typeOf2FAString = {\n [this.AUTHENTICATOR]: 'authenticator',\n [this.EMAIL]: 'email',\n [this.SMS]: 'sms'\n }[typeOf2FA];\n\n this.modals.showConfirmationDialog(\n this.intl.tc(this, `${typeOf2FAString}DisabledModalTitle`),\n this.intl.tc(this, `${typeOf2FAString}DisabledModalBody`),\n {\n text: this.intl.tc(this, 'disableMethodButton'),\n css: 'btn-color-danger',\n action: async () => {\n const tfaModel = await this.twoFactorAuthentication;\n await tfaModel?.disableTwoFactorAuthentication(typeOf2FA);\n this.notificationManager.addSuccess(this.intl.tc(this, `${typeOf2FAString}DeletionSuccessful`));\n this.twoFactorAuthentication?.reload();\n }\n }\n );\n }\n\n /**\n * Transitions to the linked devices route for the user. Currently used for the Manage Trusted Devices link.\n */\n @action\n transitionToLinkedDevices() {\n transitionToHostedEngineRoute(this, this.router, 'recognized-devices');\n }\n\n /**\n * Transitions to customer-ember once user is done setting up 1 or more 2FA methods.\n */\n @action\n exit2FASetupFlow(): void {\n this.send('exitTwoFactorSetup');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'two-factor-authentication-overview': OverviewController;\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseTwoFactorRoute from '../base-route';\n\n/**\n * @classdesc Route to show 2FA status and allow for enabling/disabling 2FA.\n */\nexport default class OverviewRoute extends BaseTwoFactorRoute {\n @service engineConfig;\n\n /** @override */\n routeId = this.engineConfig.getRouteIdFromRouteName('EmberTwoFactorAuthentication');\n\n /**\n * Transitions to the consuming application's exit step defined for 2FA setup.\n */\n @action\n exitTwoFactorSetup() {\n return this.transitionToExternal('twoFactorSetupExitRoute');\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n
    \\n {{#if this.qrCodeData}}\\n \\n {{/if}}\\n
    \\n\\n
    \\n

    {{tc this \\'key\\'}}

    \\n
    \\n

    {{await this.secretString}}

    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n {{tc this \\'stepTwoNumeral\\'}}\\n
    \\n \\n
    \\n

    {{tc this \\'sixDigit\\'}}

    \\n
    \\n\\n
    \\n \\n \\n \\n
    \\n
    \",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/components/two-factor-setup/authenticator/index.hbs\" })","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type BrowserService from '@adc/app-infrastructure/services/browser';\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { Task } from 'ember-concurrency';\nimport type { TwoFactorSetupComponentArgs } from '../../../two-factor-authentication/setup/controller';\n\ninterface AuthenticatorComponentSignature {\n Element: HTMLButtonElement;\n Args: TwoFactorSetupComponentArgs;\n}\n\n/**\n * @classdesc Component used to verify 2FA via an authenticator app code.\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'two-factor-setup/authenticator' })\nexport default class AuthenticatorComponent extends Component {\n @service declare browser: BrowserService;\n @service declare intl: ADCIntlService;\n @service declare nativeBridge: NativeBridgeService;\n @service declare notificationManager: NotificationManager;\n\n @tracked secretString?: string;\n @tracked qrCodeData?: string;\n\n /**\n * Set QR data to be displayed.\n */\n loadQrCodeSecretData: Task = task(async () => {\n const getAuthenticatorSecretData = this.args.twoFactorAuthentication.getAuthenticatorSecretData;\n if (getAuthenticatorSecretData && typeof getAuthenticatorSecretData === 'function') {\n const {\n value: { qrCodeData, secretString }\n } = await this.args.twoFactorAuthentication.getAuthenticatorSecretData();\n\n Object.assign(this, {\n qrCodeData,\n secretString\n });\n }\n });\n\n /**\n * Copy the code to the clipboard.\n */\n @action\n copyCodeToClipboard(anchorSelector: string): void {\n const subject = this.intl.tc(this, 'copiedClipboardSubject'),\n anchorElement = document.querySelector(anchorSelector);\n\n if (!anchorElement) {\n this.notificationManager.addError(this.intl.t('generic.failedToCopyToClipboard'));\n return;\n }\n\n if (this.secretString) {\n this.browser.universalCopyToClipboard(subject, anchorElement, this.secretString);\n if (!this.nativeBridge.doesSupportLaunchShareActionDialog) {\n this.notificationManager.addSuccess(this.intl.tc(this, 'secretCopySuccessful'));\n return;\n }\n }\n this.notificationManager.addError(this.intl.tc(this, 'secretCopyUnsuccessful'));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n /**\n * Component used to verify 2FA via an authenticator app code.\n */\n export default interface Registry {\n 'TwoFactorSetup::Authenticator': typeof AuthenticatorComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"

    {{this.email}}

    \\n

    {{tc this \\'emailHelpText\\'}}

    \",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/components/two-factor-setup/email/index.hbs\" })","import Component from '@glimmer/component';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { TwoFactorSetupComponentArgs } from '../../../two-factor-authentication/setup/controller';\n\ninterface EmailComponentSignature {\n Args: TwoFactorSetupComponentArgs;\n}\n\n/**\n * @classdesc Component that shows read only field for 2FA email.\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'two-factor-setup/email' })\nexport default class EmailComponent extends Component {\n get email(): string {\n return this.args.twoFactorAuthentication.obfuscatedEmailAddress();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n /**\n * Component that shows read only field for 2FA email.\n */\n export default interface Registry {\n 'TwoFactorSetup::Email': typeof EmailComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n
    \",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/components/two-factor-setup/mobile-number/index.hbs\" })","import Component from '@glimmer/component';\nimport { set } from '@ember/object';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type CountryMobileCarrier from '@adc/login-setup-addon/models/sms/country-mobile-carrier';\nimport type { TwoFactorSetupComponentArgs } from '@adc/login-setup-engine/two-factor-authentication/setup/controller';\n\ninterface MobileNumberComponentSignature {\n Element: HTMLDivElement;\n Args: TwoFactorSetupComponentArgs;\n}\n\n/**\n * @classdesc Mobile number step of the 2FA setup.\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'two-factor-setup/mobile-number' })\nexport default class MobileNumberComponent extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * Mobile number as entered by the user.\n */\n @alias('args.twoFactorAuthentication.smsMobileNumber.mobileNumber')\n declare mobileNumber: string;\n\n /**\n * Currently selected cell provider for mobile number.\n */\n @alias('args.twoFactorAuthentication.smsMobileNumber.cellProvider')\n declare cellProvider: string;\n\n /**\n * Currently selected country for mobile number.\n */\n @alias('args.twoFactorAuthentication.smsMobileNumber.country')\n declare country: string;\n\n /**\n * The currently selected country that should be read by screen readers.\n */\n @computed('args.countryMobileCarriers', 'country')\n get countryLabelText(): string {\n const selectedCountry = this.args.countryMobileCarriers.find((item) => item.id === this.country)?.countryName;\n return selectedCountry ?? this.intl.tc(this, 'countryPlaceholder');\n }\n\n /**\n * The currently selected cell provider that should be read by screen readers.\n */\n @computed('carriersForSelectedCountry', 'cellProvider')\n get cellProviderLabelText(): string {\n const selectedProviderName = this.carriersForSelectedCountry.find(\n (item) => item.value === this.cellProvider\n )?.name;\n return selectedProviderName ?? this.intl.tc(this, 'providerPlaceholder');\n }\n\n /**\n * Should the carrier dropdown select be disabled?\n */\n get disableCarrierSelect(): boolean {\n return !this.country || isEmpty(this.carriersForSelectedCountry);\n }\n\n /**\n * Populates the countru mobile carriers dropdown.\n */\n @computed('args.countryMobileCarriers')\n get countryMobileCarriers(): Array {\n const carriers = this.args.countryMobileCarriers;\n\n if (!carriers) {\n return [];\n }\n\n return this.args.countryMobileCarriers.map((carrier) =>\n DropdownSelectItem.create({\n value: carrier.id,\n name: carrier.countryName\n })\n );\n }\n\n /**\n * Returns available carriers for the selected country.\n */\n get carriersForSelectedCountry(): Array {\n const countries = this.args.countryMobileCarriers;\n\n if (!this.country || !countries) {\n return [];\n }\n\n const selectedCountry = countries.find((country: CountryMobileCarrier) => country.id === this.country),\n carriersForSelectedCountry = selectedCountry?.carriers ?? {},\n dropdownItems = Object.keys(carriersForSelectedCountry).map((carrierKey) =>\n DropdownSelectItem.create({ name: carriersForSelectedCountry[carrierKey], value: carrierKey })\n );\n\n return dropdownItems;\n }\n\n /**\n * Fired when country selection is changed.\n */\n @action\n updateCountrySelection(countryId: string): void {\n set(this, 'country', countryId);\n set(this, 'cellProvider', ''); //Clear the provider because the country changed\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n /**\n * Mobile number step of the 2FA setup.\n */\n export default interface Registry {\n 'TwoFactorSetup::MobileNumber': typeof MobileNumberComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n \\n \\n\\n {{#unless this.isMobileApp}}\\n \\n {{/unless}}\\n
    \",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/components/two-factor-setup/trust-device/index.hbs\" })","import Component from '@glimmer/component';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type { TwoFactorSetupComponentArgs } from '../../../two-factor-authentication/setup/controller';\n\ninterface TrustDeviceComponentSignature {\n Element: HTMLDivElement;\n Args: TwoFactorSetupComponentArgs;\n}\n\n/**\n * @classdesc Trust device step of the 2FA setup.\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'two-factor-setup/trust-device' })\nexport default class TrustDeviceComponent extends Component {\n @service declare contextManager: ContextManager;\n\n /**\n * Is this a WebView in the mobile app?\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n /**\n * Trust device step of the 2FA setup.\n */\n export default interface Registry {\n 'TwoFactorSetup::TrustDevice': typeof TrustDeviceComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
    \\n \\n \\n \\n
    \\n\\n{{#unless this.isTypeAuthenticator}}\\n \\n{{/unless}}\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@adc/login-setup-engine.a599034c/node_modules/@adc/login-setup-engine/components/two-factor-setup/verify-device/index.hbs\" })","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type { TwoFactorSetupComponentArgs } from '../../../two-factor-authentication/setup/controller';\n\ninterface VerifyDeviceSignature {\n Element: HTMLDivElement;\n Args: TwoFactorSetupComponentArgs;\n}\n\n/**\n * @classdesc Verify device step of the 2FA setup.\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'two-factor-setup/verify-device' })\nexport default class VerifyDevice extends Component {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n\n /**\n * The type of 2FA selected for setup.\n */\n @alias('args.twoFactorAuthentication.selected2FAType')\n declare typeOf2FA: number;\n\n get isTypeAuthenticator(): boolean {\n return this.typeOf2FA === this.args.twoFactorAuthentication.AUTHENTICATOR;\n }\n\n /**\n * Sends a new authentication code the the users mobile device.\n */\n @action\n sendNewAuthenticationCode(): void {\n this.args.twoFactorAuthentication.sendTwoFactorAuthenticationCode(this.typeOf2FA, true).then(() => {\n this.notificationManager.addSuccess(this.intl.tc(this, 'newCodeSent'));\n });\n }\n\n /**\n * Returns the user back to the overview page in order to choose a new method.\n *\n * @note We have to redirect to a slightly different URL depending on whether\n * we are in system-install or customer-ember\n */\n @action\n changeMethod(): Transition {\n return transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n /**\n * Verify device step of the 2FA setup.\n */\n export default interface Registry {\n 'TwoFactorSetup::VerifyDevice': typeof VerifyDevice;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport TwoFactorSetupAuthenticator from '@adc/login-setup-engine/components/two-factor-setup/authenticator/index';\nimport TwoFactorSetupEmail from '@adc/login-setup-engine/components/two-factor-setup/email/index';\nimport TwoFactorSetupMobileNumber from '@adc/login-setup-engine/components/two-factor-setup/mobile-number/index';\nimport TwoFactorSetupTrustDevice from '@adc/login-setup-engine/components/two-factor-setup/trust-device/index';\nimport TwoFactorSetupVerifyDevice from '@adc/login-setup-engine/components/two-factor-setup/verify-device/index';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseLoginSetupEngineController from '../../base-controller';\n\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type NativeBridgeService from '@adc/app-infrastructure/services/native-bridge';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type CountryMobileCarrier from '@adc/login-setup-addon/models/sms/country-mobile-carrier';\nimport type TwoFactorAuthentication from '@adc/login-setup-addon/models/two-factor-authentication/two-factor-authentication';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type Component from '@glimmer/component';\nimport type { ModelFrom } from 'type-utils';\nimport type { ValidationErrorsType } from '../../base-controller';\nimport type TwoFactorSetupRoute from './route';\n\n/**\n * Args we are sending down to the two-factor-setup components.\n */\nexport interface TwoFactorSetupComponentArgs {\n twoFactorAuthentication: TwoFactorAuthentication;\n countryMobileCarriers: Array;\n errors: ValidationErrorsType;\n updateVerificationCode: (verificationCode: string) => void;\n updateCurrentDeviceName: (deviceName: string) => void;\n updateShouldTrustDevice: (evt: Event & { target: HTMLInputElement }) => void;\n}\n\nconst STEP_AUTHENTICATOR = 'authenticator';\nconst STEP_MOBILE_NUMBER = 'mobile-number';\nconst STEP_EMAIL = 'email';\nconst STEP_VERIFY_DEVICE = 'verify-device';\nconst STEP_TRUST_DEVICE = 'trust-device';\n\nconst AUTHENTICATOR_STEPS = [STEP_AUTHENTICATOR, STEP_TRUST_DEVICE];\nconst SMS_STEPS = [STEP_MOBILE_NUMBER, STEP_VERIFY_DEVICE, STEP_TRUST_DEVICE];\nconst EMAIL_STEPS = [STEP_EMAIL, STEP_VERIFY_DEVICE, STEP_TRUST_DEVICE];\n\n/**\n * @classdesc Controller for 2FA setup route.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class TwoFactorSetupController extends BaseLoginSetupEngineController {\n @service declare router: RouterService;\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare nativeBridge: NativeBridgeService;\n\n declare model: ModelFrom;\n\n /**\n * The resolved model after the request is fulfilled.\n */\n @tracked resolvedModel:\n | { twoFactorAuthentication: TwoFactorAuthentication; countryMobileCarriers: Array }\n | undefined;\n\n /**\n * Is this a WebView in the mobile app?\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * The TwoFactorAuthentication model containing information pertinent to 2FA for the login's account.\n */\n @alias('resolvedModel.twoFactorAuthentication')\n @tracked\n twoFactorAuthentication?: TwoFactorAuthentication;\n\n /**\n * The type of 2FA selected for setup.\n */\n @alias('twoFactorAuthentication.selected2FAType')\n @tracked\n typeOf2FA?: number;\n\n /**\n * The number used for sending the verification code to. Stored for re-display on verification page.\n */\n @tracked\n mobileNumberUsed?: string;\n\n /**\n * The 2FA code inputted by the user that we need to verify.\n */\n @tracked\n verificationCode?: string;\n\n /**\n * Value of the trust device checkbox.\n */\n @tracked shouldTrustDevice = true;\n\n /**\n * Index of the current step.\n */\n @tracked currentStepIndex = 0;\n\n /**\n * The list of available steps.\n */\n get steps(): string[] {\n if (!(this.typeOf2FA && this.twoFactorAuthentication)) {\n return [];\n }\n\n return (\n {\n [this.twoFactorAuthentication.AUTHENTICATOR]: AUTHENTICATOR_STEPS,\n [this.twoFactorAuthentication.SMS]: SMS_STEPS,\n [this.twoFactorAuthentication.EMAIL]: EMAIL_STEPS\n }[this.typeOf2FA] || ''\n );\n }\n\n /**\n * Step that the setup is currently on.\n */\n get currentStep(): string {\n return this.steps[this.currentStepIndex];\n }\n\n /**\n * Header for the content.\n */\n get header(): string {\n return getTranslationStringForStep.call(this, 'header');\n }\n\n /**\n * Description for the content.\n */\n get description(): string {\n if (!(this.typeOf2FA && this.twoFactorAuthentication)) {\n return '';\n }\n\n if (this.currentStep === STEP_VERIFY_DEVICE && this.typeOf2FA === this.twoFactorAuthentication.SMS) {\n return this.intl.tc(this, 'verify-device.description', {\n mobileNumber: this.mobileNumberUsed\n });\n }\n\n return this.currentStep === STEP_VERIFY_DEVICE && this.typeOf2FA === this.twoFactorAuthentication.EMAIL\n ? getTranslationStringForStep.call(this, 'emailDescription')\n : getTranslationStringForStep.call(this, 'description');\n }\n\n /**\n * Path of the component that should be rendered.\n */\n get componentName(): typeof Component | undefined {\n switch (this.currentStepIndex) {\n case 0:\n switch (this.typeOf2FA) {\n case this.twoFactorAuthentication?.AUTHENTICATOR:\n return TwoFactorSetupAuthenticator;\n\n case this.twoFactorAuthentication?.SMS:\n return TwoFactorSetupMobileNumber;\n\n case this.twoFactorAuthentication?.EMAIL:\n return TwoFactorSetupEmail;\n\n default:\n return undefined;\n }\n\n case 1:\n return this.typeOf2FA === this.twoFactorAuthentication?.AUTHENTICATOR\n ? TwoFactorSetupTrustDevice\n : TwoFactorSetupVerifyDevice;\n\n case 2:\n return TwoFactorSetupTrustDevice;\n\n default:\n return undefined;\n }\n }\n\n /**\n * Gets text for cancel button based on current step.\n */\n get cancelButtonText(): string {\n switch (this.currentStep) {\n case STEP_AUTHENTICATOR:\n case STEP_VERIFY_DEVICE:\n case STEP_MOBILE_NUMBER:\n case STEP_EMAIL:\n return this.intl.t('generic.back');\n case STEP_TRUST_DEVICE:\n return this.intl.tc(this, 'trust-device.notNow');\n default:\n return '';\n }\n }\n\n /**\n * Gets text for confirm button based on current step.\n */\n get confirmButtonText(): string {\n switch (this.currentStep) {\n case STEP_AUTHENTICATOR:\n return this.intl.t('generic.next');\n case STEP_MOBILE_NUMBER:\n case STEP_EMAIL:\n return this.intl.t('generic.send');\n case STEP_VERIFY_DEVICE:\n return getTranslationStringForStep.call(this, 'verify');\n case STEP_TRUST_DEVICE:\n return this.intl.t('generic.next');\n default:\n return '';\n }\n }\n\n /**\n * Should the cancel button be shown for the current step?\n */\n get showCancelButtonForStep(): boolean {\n return this.currentStep !== STEP_TRUST_DEVICE;\n }\n\n /**\n * Shows the stepOneNumeral for the authenticator page based on the currentStep and typeOf2FA.\n */\n get showStepOneNumeral(): boolean {\n return this.typeOf2FA == this.twoFactorAuthentication?.AUTHENTICATOR && this.currentStep == STEP_AUTHENTICATOR;\n }\n\n /**\n * Callback function for components to update the verificationCode property.\n */\n @action\n updateVerificationCode(verificationCode: string): void {\n this.verificationCode = verificationCode;\n }\n\n /**\n * Callback function for components to update the currentDeviceName property on the 2FA model.\n */\n @action\n updateCurrentDeviceName(deviceName: string): void {\n if (!this.twoFactorAuthentication) {\n return;\n }\n\n this.twoFactorAuthentication.currentDeviceName = deviceName;\n }\n\n /**\n * Callback function for components to update the shouldTrustDevice property.\n */\n @action\n updateShouldTrustDevice(evt: Event & { target: HTMLInputElement }): void {\n this.shouldTrustDevice = evt.target.checked;\n }\n\n /**\n * Calls appropriate function for cancel button based on current step. This works within System-Install\n */\n @action\n handleTwoFactorSetupCancelAction(): void {\n switch (this.currentStep) {\n case STEP_EMAIL:\n case STEP_AUTHENTICATOR:\n case STEP_MOBILE_NUMBER: {\n transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n break;\n }\n case STEP_VERIFY_DEVICE:\n goToPreviousStep.call(this);\n break;\n case STEP_TRUST_DEVICE: {\n transitionToHostedEngineRoute(this, this.router, 'recognized-devices');\n break;\n }\n default:\n return;\n }\n }\n\n /**\n * Calls appropriate function for confirm button based on current step.\n */\n @action\n // Please clarify this return type\n handleTwoFactorSetupStepAction(buttonAnimation: Promise): Promise | undefined {\n switch (this.currentStep) {\n case STEP_AUTHENTICATOR:\n case STEP_VERIFY_DEVICE:\n return verifyTwoFactor.call(this, buttonAnimation);\n case STEP_MOBILE_NUMBER:\n return validateNumber.call(this, buttonAnimation);\n case STEP_EMAIL:\n return sendEmail.call(this, buttonAnimation);\n case STEP_TRUST_DEVICE:\n return trustTwoFactorDevice.call(this, buttonAnimation);\n default:\n return;\n }\n }\n\n /**\n * Callback after the model has been fully resolved.\n */\n @action\n dataLoaded(model: {\n twoFactorAuthentication: TwoFactorAuthentication;\n countryMobileCarriers: Array;\n }): void {\n this.resolvedModel = model;\n\n if (this.twoFactorAuthentication?.isTwoFactorTypeEnabled(this.typeOf2FA ?? 0)) {\n transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n }\n }\n\n /**\n * Clear errors on page load.\n */\n @action\n clearErrors(): void {\n this.errors = {};\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'two-factor-authentication-setup': TwoFactorSetupController;\n }\n}\n\n/**\n * Attempts to send authentication code to the specified device.\n */\nfunction validateNumber(this: TwoFactorSetupController, buttonAnimation: Promise): Promise {\n return this.submitApiRequest(\n () => this.twoFactorAuthentication?.validateSmsMobileNumber(),\n buttonAnimation,\n this.isMobileApp ? '' : getTranslationStringForStep.call(this, 'successMessage'),\n () => {\n this.twoFactorAuthentication?.sendTwoFactorAuthenticationCodeViaSms();\n\n this.mobileNumberUsed = this.twoFactorAuthentication?.smsMobileNumber.mobileNumber;\n\n goToNextStep.call(this);\n\n this.clearErrors();\n }\n );\n}\n\n/**\n * Request to send the email containing the verification code.\n */\nfunction sendEmail(this: TwoFactorSetupController, buttonAnimation: Promise): Promise {\n return this.submitApiRequest(\n () => this.twoFactorAuthentication?.sendTwoFactorAuthenticationCodeViaEmail(),\n buttonAnimation,\n this.isMobileApp ? '' : getTranslationStringForStep.call(this, 'successMessage'),\n () => goToNextStep.call(this)\n );\n}\n\n/**\n * Verifies the authentication code.\n */\nfunction verifyTwoFactor(this: TwoFactorSetupController, buttonAnimation: Promise): Promise {\n return this.submitApiRequest(\n () => this.twoFactorAuthentication?.verifyCodeAndEnable2FA(this.verificationCode ?? '', this.typeOf2FA ?? 0),\n buttonAnimation,\n this.isMobileApp ? '' : getTranslationStringForStep.call(this, 'successMessage'),\n () => {\n persistAppSessionIfNecessary.call(this, this.twoFactorAuthentication?.is2FAEnabled());\n goToNextStep.call(this);\n }\n );\n}\n\n/**\n * If supported, this will tell the mobile app to persist the current session while helping to log out\n * all other devices.\n */\nfunction persistAppSessionIfNecessary(this: TwoFactorSetupController, is2FAEnabled: boolean): void {\n if (!this.isMobileApp) {\n return;\n }\n\n if (!this.nativeBridge.doesSupportPersistAppSession) {\n return;\n }\n\n if (is2FAEnabled) {\n return;\n }\n\n this.nativeBridge.persistAppSession();\n}\n\n/**\n * Add the currently used device to the trusted devices.\n */\nasync function trustTwoFactorDevice(this: TwoFactorSetupController, buttonAnimation: Promise): Promise {\n let fnGoToNextStep = () => Promise.resolve(),\n successMessage = undefined;\n\n if (this.shouldTrustDevice) {\n fnGoToNextStep = () =>\n this.twoFactorAuthentication?.trustTwoFactorDevice(this.twoFactorAuthentication.currentDeviceName) ??\n Promise.resolve();\n successMessage = getTranslationStringForStep.call(this, 'successMessage');\n }\n\n await this.submitApiRequest(fnGoToNextStep, buttonAnimation, successMessage, async () => {\n const skip = await shouldSkipStep.call(this);\n this.shouldTrustDevice = true; // reset this to default value to encourage user to trust device\n transitionToHostedEngineRoute(\n this,\n this.router,\n skip ? 'two-factor-authentication.overview' : 'recognized-devices'\n );\n });\n}\n\n/**\n * Goes to the next step in setup.\n */\nasync function goToNextStep(this: TwoFactorSetupController): Promise {\n if (this.currentStepIndex + 1 === this.steps.length - 1 && (await shouldSkipStep.call(this))) {\n transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n return;\n }\n\n this.set('currentStepIndex', Math.min(this.currentStepIndex + 1, this.steps.length - 1));\n}\n\n/**\n * Goes to the previous step in setup.\n */\nfunction goToPreviousStep(this: TwoFactorSetupController): void {\n this.set('currentStepIndex', Math.max(this.currentStepIndex - 1, 0));\n}\n\n/**\n * Gets the correct translation based on the current step.\n */\nfunction getTranslationStringForStep(this: TwoFactorSetupController, key: string): string {\n return this.currentStep ? this.intl.tc(this, `${this.currentStep}.${key}`) : '';\n}\n\n/**\n * Skips trust device and/or linked devices step if 2FA has multiple methods configured\n * and the current device is already trusted.\n */\nasync function shouldSkipStep(this: TwoFactorSetupController): Promise {\n await this.twoFactorAuthentication?.reload();\n\n return (\n (this.twoFactorAuthentication?.isCurrentDeviceTrusted ?? false) &&\n (this.twoFactorAuthentication?.areMultiple2FAMethodsEnabled() ?? false)\n );\n}\n","import { inject as service } from '@ember/service';\nimport { transitionToHostedEngineRoute } from '@adc/login-setup-engine/utils/transition-utils';\nimport BaseTwoFactorRoute from '../base-route';\n\n/**\n * @classdesc 2FA setup steps route.\n */\nexport default class TwoFactorSetupRoute extends BaseTwoFactorRoute {\n @service engineConfig;\n\n /** @override */\n routeId = this.engineConfig.getRouteIdFromRouteName('Ember2FASetup');\n\n transitionFrom = undefined;\n\n /** @override */\n async afterModel(model, transition) {\n this.transitionFrom = transition.from?.name;\n\n // Due to the mounting location within System Install and Customer Ember,\n // the from route could have two potential names for the overview\n if (this.transitionFrom?.endsWith('two-factor-authentication.overview')) {\n // They are starting from the first enrollment step, which is what we want.\n return;\n }\n\n // They likely refreshed in the middle of setting up 2FA.\n // Redirect them back to the start of the process.\n return transitionToHostedEngineRoute(this, this.router, 'two-factor-authentication.overview');\n }\n\n /** @override */\n async resetController(controller, isExiting) {\n if (isExiting) {\n controller.set('currentStepIndex', 0);\n }\n\n return super.resetController(...arguments);\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport {\n processValidationErrorsFromResponse,\n clearValidationErrors\n} from '@adc/ajax/utils/validation-error-processing';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport BaseLoginSetupEngineController from '../../base-controller';\n\nimport type { ApiError } from '@adc/ajax/services/adc-ajax';\nimport type ContextManager from '@adc/app-infrastructure/services/context-manager';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type TwoFactorAuthentication from '@adc/login-setup-addon/models/two-factor-authentication/two-factor-authentication';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom } from 'type-utils';\nimport type ChallengeFlowRoute from './route';\n\n/**\n * Constants for different states.\n */\nexport const STATE_CHOOSE_METHOD = 1,\n STATE_VERIFY = 2,\n STATE_TRUST = 3;\n\n/**\n * Trust state properties\n */\nconst dataForTrustState = {\n confirmButtonText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'trustDeviceBtn');\n },\n cancelButtonText(this: ChallengeFlowController): string {\n return this.intl.t('generic.skip');\n },\n mainText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'trustMainText');\n },\n inputLabel(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'trustInputLabel');\n },\n inputClass: () => 'trust',\n placeholder(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'trustInputLabel');\n },\n title(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'trustDevice');\n }\n};\n\n/**\n * Object that defines the properties for the choose 2fa method screen.\n */\nconst dataForChooseMethodState = {\n confirmButtonText(this: ChallengeFlowController): string {\n return this.intl.t('generic.next');\n },\n mainText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyMethodSelectText');\n },\n title(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyDevice');\n },\n cancelButtonText(this: ChallengeFlowController): string {\n return this.linkedSystemsFlow ? this.intl.t('generic.back') : this.intl.tc(this, 'logoutBtn');\n },\n verificationMethodOptions(\n this: ChallengeFlowController\n ): Array<{ id: number; label: string; subtitle: string; value: boolean }> {\n const twoFactorAuthenticationTypes: Array<{ id: number; label: string; subtitle: string; value: boolean }> = [];\n\n if (this.twoFactorAuthentication.isTwoFactorTypeEnabled(this.AUTHENTICATOR)) {\n twoFactorAuthenticationTypes.push({\n id: this.AUTHENTICATOR,\n label: this.intl.tc(this, 'authenticationApp'),\n subtitle: this.intl.tc(this, 'authenticatorSubtext'),\n value: this.selectedTwoFactorType === this.AUTHENTICATOR\n });\n }\n\n if (this.twoFactorAuthentication.isTwoFactorTypeEnabled(this.EMAIL)) {\n twoFactorAuthenticationTypes.push({\n id: this.EMAIL,\n label: this.intl.tc(this, 'email'),\n subtitle: this.formattedEmailAddress,\n value: this.selectedTwoFactorType === this.EMAIL\n });\n }\n\n if (this.twoFactorAuthentication.isTwoFactorTypeEnabled(this.SMS)) {\n twoFactorAuthenticationTypes.push({\n id: this.SMS,\n label: this.intl.tc(this, 'textMessage'),\n subtitle: this.intl.tc(this, 'textMessageSubtext', {\n last4: this.twoFactorAuthentication.lastFourPhoneDigits()\n }),\n value: this.selectedTwoFactorType === this.SMS\n });\n }\n\n return twoFactorAuthenticationTypes;\n }\n};\n\n/**\n * Object that defines properties for authenticator 2FA verify screen.\n */\nconst dataForVerifyAuthenticatorState = {\n confirmButtonText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verify');\n },\n mainText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyMainTextAuth');\n },\n inputLabel(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'authVerifyInputLabel');\n },\n inputClass: 'verify',\n placeholder(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'authEnterTokenText');\n },\n title(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'enterVerificationCode');\n },\n cancelButtonText(this: ChallengeFlowController): string {\n return this.twoFactorAuthentication.areMultiple2FAMethodsEnabled() || this.linkedSystemsFlow\n ? this.intl.t('generic.back')\n : this.intl.tc(this, 'logoutBtn');\n }\n};\n\n/**\n * Object that defines properties for email 2FA verify screen.\n */\nconst dataForVerifyEmailState = {\n confirmButtonText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verify');\n },\n mainText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyMainTextEmail', {\n email: this.formattedEmailAddress\n });\n },\n inputLabel(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyInputLabel');\n },\n inputClass: 'verify',\n placeholder(this: ChallengeFlowController): string {\n return '------';\n },\n title(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'enterVerificationCode');\n },\n cancelButtonText(this: ChallengeFlowController): string {\n return this.twoFactorAuthentication.areMultiple2FAMethodsEnabled() || this.linkedSystemsFlow\n ? this.intl.t('generic.back')\n : this.intl.tc(this, 'logoutBtn');\n }\n};\n\n/**\n * Object that defines properties for sms 2FA verify screen.\n */\nconst dataForVerifySMSState = {\n confirmButtonText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verify');\n },\n mainText(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyMainTextSMS', {\n last4: this.twoFactorAuthentication.lastFourPhoneDigits()\n });\n },\n inputLabel(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'verifyInputLabel');\n },\n inputClass: 'verify',\n placeholder(this: ChallengeFlowController): string {\n return '------';\n },\n title(this: ChallengeFlowController): string {\n return this.intl.tc(this, 'enterVerificationCode');\n },\n cancelButtonText(this: ChallengeFlowController): string {\n return this.twoFactorAuthentication.areMultiple2FAMethodsEnabled() || this.linkedSystemsFlow\n ? this.intl.t('generic.back')\n : this.intl.tc(this, 'logoutBtn');\n }\n};\n\n/**\n * Returns data for the current state and the given key.\n */\n// The types for this method and the properties it calls need to be cleaned up. Likewise please remove the use of non-primitive constants outside of the class\nfunction getDataForState(this: ChallengeFlowController, key: string): string {\n switch (this.state) {\n case STATE_CHOOSE_METHOD:\n // This is broken usage, if you are working on this code, please fix this!\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (dataForChooseMethodState[key as keyof typeof dataForChooseMethodState] || (() => {})).call(this);\n case STATE_VERIFY:\n // This is broken usage, if you are working on this code, please fix this!\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (getDataForVerifyState.call(this)[key] || (() => {})).call(this);\n case STATE_TRUST:\n return (dataForTrustState[key as keyof typeof dataForTrustState] || (() => {})).call(this);\n default:\n return '';\n }\n}\n\n/**\n * Gets the data for the current two factor type.\n */\nfunction getDataForVerifyState(this: ChallengeFlowController) {\n switch (this.selectedTwoFactorType) {\n case this.AUTHENTICATOR:\n return dataForVerifyAuthenticatorState;\n case this.SMS:\n return dataForVerifySMSState;\n case this.EMAIL:\n return dataForVerifyEmailState;\n default:\n return null;\n }\n}\n\n/**\n * Request the 2FA code to be sent.\n */\nasync function sendTwoFactorCode(this: ChallengeFlowController, buttonAnimation: Promise, isResend = false) {\n this.inputValue = '';\n\n const successMessage =\n this.selectedTwoFactorType === this.SMS\n ? this.intl.tc(this, 'verifyMainTextSMS', { last4: this.twoFactorAuthentication.lastFourPhoneDigits() })\n : this.intl.tc(this, 'verifyMainTextEmail', {\n email: this.formattedEmailAddress\n });\n\n const fnSendTwoFactorCode = () => {\n return this.twoFactorAuthentication.sendTwoFactorAuthenticationCode(\n this.selectedTwoFactorType,\n isResend,\n this.pendingLinkedSystemId\n );\n };\n\n const fnMoveToVerificationStep = () => (this.state = STATE_VERIFY);\n\n return this.submitApiRequest(fnSendTwoFactorCode, buttonAnimation, successMessage, fnMoveToVerificationStep);\n}\n\n/**\n * Determines if we need to send a verification code before moving to verify screen.\n */\nasync function sendVerificationCodeClick(this: ChallengeFlowController): Promise {\n if (this.selectedTwoFactorType !== this.AUTHENTICATOR) {\n await sendTwoFactorCode.call(this, new Promise((resolve) => resolve()));\n }\n\n this.state = STATE_VERIFY;\n}\n\n/**\n * Verify that the provided 2FA code is correct.\n */\nfunction verifyTwoFactorCode(this: ChallengeFlowController) {\n const contextManager = this.contextManager;\n\n const fnVerifyCode = () => {\n return this.twoFactorAuthentication.verifyTwoFactorCode(\n this.inputValue,\n this.selectedTwoFactorType,\n this.pendingLinkedSystemId\n );\n },\n fnUpdateStateData = (value: { deviceName: string }) => {\n // Skip the \"trusting\" page if the user is going through the \"Link a System\" flow.\n if (this.linkedSystemsFlow) {\n this.set('inputValue', value.deviceName);\n return trustTwoFactorDevice.call(this);\n }\n\n // Switch state and set the device name suggestion into the input box.\n this.setProperties({\n inputValue: value.deviceName,\n state: STATE_TRUST\n });\n return;\n };\n\n const promise = this.submitApiRequest(fnVerifyCode, Promise.resolve(), undefined, undefined);\n\n // Please fix this types\n promise\n .then(({ value }: any) => fnUpdateStateData.call(this, value))\n .catch((response: any) => {\n // Check if they are locked out from trying too many 2FA codes.\n let responseData = response.errors || {};\n\n // Responses that pass in dictionaries from the back-end have different structures.\n if (responseData.errors) {\n responseData = responseData.errors[0].data || {};\n }\n\n const isLockedOut = responseData.isLockedOut,\n logoutUrl = responseData.logoutUrl;\n\n if (isLockedOut) {\n // Redirect to the logoutUrl if it exists, or logout after a delay so user can see the message.\n // Do not copy this deprecated usage. If you see this, please convert it to use ember-lifeline.\n // eslint-disable-next-line ember/no-runloop\n later(() => {\n logoutUrl ? contextManager.transitionToUrl(logoutUrl, true) : contextManager.logout(false);\n }, 1000);\n }\n });\n\n return promise;\n}\n\n/**\n * Add the currently used device to the trusted devices.\n */\nfunction trustTwoFactorDevice(this: ChallengeFlowController) {\n clearValidationErrors.call(this);\n\n const promise = this.twoFactorAuthentication.trustTwoFactorDevice(this.inputValue, this.pendingLinkedSystemId);\n\n promise\n .then(() => {\n return this.linkedSystemsFlow\n ? this.send('exitTwoFactorSetupToLinkedSystems', 1)\n : this.send('exitTwoFactorSetup');\n })\n .catch((response: { errors: ApiError[] | { errors: ApiError[] } }) =>\n processValidationErrorsFromResponse.call(this, response)\n );\n\n return promise;\n}\n\ntype ChallengeFlowControllerModel = {\n twoFactorAuthentication: TwoFactorAuthentication;\n pendingLinkedSystemId: number | undefined;\n};\n\n/**\n * @classdesc 2FA challenge flow page.\n */\n@intlPath({ module: '@adc/login-setup-engine' })\nexport default class ChallengeFlowController extends BaseLoginSetupEngineController {\n @service declare intl: ADCIntlService;\n @service declare envSettings: EnvSettingsService;\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare router: RouterService;\n\n queryParams = ['linkedSystemsFlow'];\n\n declare model: ModelFrom;\n\n @tracked resolvedModel?: ChallengeFlowControllerModel;\n\n twoFactorError?: string;\n\n /**\n * Query param used to track if the user came to the challenge flow to\n * fulfill a 2FA step within the Link a System flow.\n */\n @tracked\n declare linkedSystemsFlow?: boolean;\n\n @alias('resolvedModel.twoFactorAuthentication')\n declare twoFactorAuthentication: TwoFactorAuthentication;\n\n @alias('resolvedModel.pendingLinkedSystemId')\n declare pendingLinkedSystemId: number | undefined;\n\n @alias('contextManager.identityModel.dealer')\n declare dealer: {\n get(arg0: string): unknown;\n shouldShowSupportPhone: boolean;\n shouldShowSupportEmail: boolean;\n supportPhone: string;\n supportEmail: string;\n };\n\n /**\n * Is this a WebView in the mobile app?\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * The enum value for \"authenticator\" two-factor type.\n */\n @alias('twoFactorAuthentication.AUTHENTICATOR')\n declare AUTHENTICATOR: number;\n\n /**\n * The enum value for \"sms\" two-factor type.\n */\n @alias('twoFactorAuthentication.SMS')\n declare SMS: number;\n\n /**\n * The enum value for \"email\" two-factor type.\n */\n @alias('twoFactorAuthentication.EMAIL')\n declare EMAIL: number;\n\n /**\n * Initialize selected 2FA type. Changed based on user selection.\n */\n @alias('twoFactorAuthentication.selected2FAType')\n @tracked\n declare selectedTwoFactorType: number;\n\n /**\n * Bitmask denoting which 2FA types are enabled.\n */\n @alias('twoFactorAuthentication.enabledTwoFactorTypes')\n declare enabledTwoFactorTypes: number;\n\n /**\n * Should we show the reset 2FA option?\n */\n @alias('twoFactorAuthentication.canReset2FA')\n declare canReset2FA: boolean;\n\n /**\n * Value of 2FA code entered by user.\n */\n @tracked inputValue = '';\n\n /**\n * Initialize state to be the first one.\n */\n @tracked state = STATE_CHOOSE_METHOD;\n\n /**\n * Returns true if the sub-items are expanded (for showing dealer contact info and reset 2FA).\n */\n @tracked expandItems = false;\n\n /**\n * The dealer's phone number or email, as applicable.\n */\n @tracked dealerContactInfoString = '';\n\n /**\n * The login's obfuscated email address.\n */\n get formattedEmailAddress(): string {\n return this.twoFactorAuthentication.obfuscatedEmailAddress();\n }\n\n /**\n * Main header depending on state.\n */\n get title(): string {\n return getDataForState.call(this, 'title');\n }\n\n /**\n * Should we show the request a new code section?\n */\n get canRequestNewCode(): boolean {\n return this.state === STATE_VERIFY && this.selectedTwoFactorType !== this.AUTHENTICATOR;\n }\n\n /**\n * Text for the cancel button, depending on state.\n */\n get cancelButtonText(): string {\n return getDataForState.call(this, 'cancelButtonText');\n }\n\n /**\n * Should the confirm button be disabled.\n * If on the choose screen and no two factor type is selected then disable the button.\n */\n get confirmButtonDisabled(): boolean {\n return this.state !== STATE_CHOOSE_METHOD ? false : !this.selectedTwoFactorType;\n }\n\n /**\n * Should the cancel button be visible.\n * Force the user to trust their device when in the mobile app.\n */\n get cancelButtonVisible(): boolean {\n return this.state !== STATE_TRUST || !this.isMobileApp;\n }\n\n /**\n * Text for the confirm button, depending on state.\n */\n get confirmButtonText(): string {\n return getDataForState.call(this, 'confirmButtonText');\n }\n\n /**\n * Should the step show a pin-input component?\n */\n get stepUsesPinInput(): boolean {\n return this.state === STATE_VERIFY;\n }\n\n /**\n * The computed CSS class for the ExpandButton component.\n */\n get elementCss(): string {\n return this.expandItems ? '' : 'collapsed';\n }\n\n /**\n * Gets the text input placeholder based on the state.\n */\n get placeholder(): string {\n return getDataForState.call(this, 'placeholder');\n }\n\n /**\n * CSS class to add to the input.\n */\n get inputClass(): string {\n return getDataForState.call(this, 'inputClass');\n }\n\n /**\n * True if current state is the choose 2fa method state, else false.\n */\n get isChooseMethodState(): boolean {\n return this.state === STATE_CHOOSE_METHOD;\n }\n\n /**\n * Main text on the screen.\n */\n get mainText(): string {\n return getDataForState.call(this, 'mainText');\n }\n\n /**\n * Should we show the help text dropdown?\n */\n get showHelpText(): boolean {\n return (\n this.state !== STATE_TRUST &&\n (this.canReset2FA || this.dealerContactInfoString !== '') &&\n !this.linkedSystemsFlow\n );\n }\n\n /**\n * Two factor authentication options.\n */\n get verificationMethodOptions(): BinaryListItem<{ id: number; subtitle: string }>[] {\n const { twoFactorAuthentication, intl } = this,\n items: BinaryListItem<{ id: number; subtitle: string }>[] = [],\n fn = (id: number, label: string, subtitle: string) =>\n items.push(\n new BinaryListItem<{ id: number; subtitle: string }>({\n label: intl.tc(this, label),\n state: this.selectedTwoFactorType === id,\n props: {\n id,\n subtitle\n }\n })\n );\n\n if (twoFactorAuthentication.isTwoFactorTypeEnabled(this.AUTHENTICATOR)) {\n fn(this.AUTHENTICATOR, 'authenticationApp', this.intl.tc(this, 'authenticatorSubtext'));\n }\n\n if (twoFactorAuthentication.isTwoFactorTypeEnabled(this.EMAIL)) {\n fn(this.EMAIL, 'email', this.formattedEmailAddress);\n }\n\n if (twoFactorAuthentication.isTwoFactorTypeEnabled(this.SMS)) {\n fn(\n this.SMS,\n 'textMessage',\n this.intl.tc(this, 'textMessageSubtext', {\n last4: twoFactorAuthentication.lastFourPhoneDigits()\n })\n );\n }\n\n return items;\n }\n\n /**\n * Label for the input that is shown on the screen for the current state.\n *\n * @note This drives the visibility of the input, so if this is falsy, input is not shown.\n */\n get inputLabel(): string {\n return getDataForState.call(this, 'inputLabel');\n }\n\n /**\n * Footer text on the screen.\n */\n get footerText(): string {\n return getDataForState.call(this, 'footerText');\n }\n\n /**\n * Action to trigger whether to expand items or not.\n */\n @action\n toggleExpand(): void {\n this.expandItems = !this.expandItems;\n }\n\n /**\n * Handler for radio-buttons value change. Sets the selectedTwoFactorType.\n */\n @action\n changeVerificationMethod(items: ChallengeFlowController['verificationMethodOptions']): void {\n this.selectedTwoFactorType = items.find((item) => item.state)!.props.id;\n }\n\n /**\n * Action for cancel button, depending on state.\n */\n @action\n cancelButtonAction(): void {\n switch (this.state) {\n case STATE_TRUST:\n this.send('exitTwoFactorSetup');\n return;\n case STATE_VERIFY:\n this.twoFactorAuthentication.areMultiple2FAMethodsEnabled()\n ? (this.state = STATE_CHOOSE_METHOD)\n : this.logout();\n return;\n case STATE_CHOOSE_METHOD:\n this.logout();\n return;\n }\n }\n\n /**\n * Action for confirm button, depending on state.\n */\n @action\n confirmButtonAction(): Promise | void {\n switch (this.state) {\n case STATE_CHOOSE_METHOD:\n return sendVerificationCodeClick.call(this);\n case STATE_VERIFY:\n // This is broken usage, if you are working on this code, please fix this!\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return verifyTwoFactorCode.call(this);\n case STATE_TRUST:\n return trustTwoFactorDevice.call(this);\n default:\n return;\n }\n }\n\n /**\n * Logs out the user.\n */\n @action\n logout(): void {\n // If we came from the Linked Systems flow, \"logout\" by going back to it's main page\n if (this.linkedSystemsFlow) {\n this.send('exitTwoFactorSetupToLinkedSystems', 0);\n return;\n }\n\n this.contextManager.logout(false);\n }\n\n /**\n * Check enabled two factor types once the model has loaded.\n * Set state to verify if only one type is enabled.\n * Initialize selectedTwoFactorType based on the enabled two factor types.\n * Set dealerContactInfoString based on dealer preferences.\n */\n @action\n async initializeDataForTemplate(model: ChallengeFlowControllerModel): Promise {\n this.resolvedModel = model;\n const resolvedModel = this.resolvedModel.twoFactorAuthentication;\n\n if (resolvedModel.isTwoFactorTypeEnabled(resolvedModel.AUTHENTICATOR)) {\n resolvedModel.selected2FAType = resolvedModel.AUTHENTICATOR;\n } else if (resolvedModel.isTwoFactorTypeEnabled(resolvedModel.EMAIL)) {\n resolvedModel.selected2FAType = resolvedModel.EMAIL;\n } else if (resolvedModel.isTwoFactorTypeEnabled(resolvedModel.SMS)) {\n resolvedModel.selected2FAType = resolvedModel.SMS;\n }\n\n if (!resolvedModel.areMultiple2FAMethodsEnabled()) {\n sendVerificationCodeClick.call(this);\n }\n\n const dealer = this.dealer;\n if (dealer.shouldShowSupportPhone) {\n this.dealerContactInfoString = this.intl.tc(this, 'dealerContactInfo', {\n contactInfo: dealer.supportPhone\n });\n } else if (dealer.shouldShowSupportEmail) {\n this.dealerContactInfoString = this.intl.tc(this, 'dealerContactInfo', {\n contactInfo: dealer.supportEmail\n });\n }\n }\n\n @action\n handleRefresh(): void {\n // If user refreshes page on trust device step, act as if they chose \"Skip\"\n if (this.state == STATE_TRUST && !this.isMobileApp) {\n this.send('exitTwoFactorSetup');\n }\n }\n\n /**\n * Sends the reset 2FA email to the user.\n */\n @action\n reset2FA(buttonAnimation: Promise): void {\n const fnReset2FA = () => {\n return this.twoFactorAuthentication.reset2FA();\n },\n successMessage = this.intl.tc(this, 'reset2faSuccessMessage', {\n emailAddress: this.formattedEmailAddress\n }),\n promise = this.submitApiRequest(fnReset2FA, buttonAnimation, successMessage, undefined, true);\n\n promise.catch((response: { errors: ApiError[] | { errors: ApiError[] } }) =>\n processValidationErrorsFromResponse.call(this, response)\n );\n }\n\n /**\n * Sends a new two factor code.\n */\n @action\n requestNewCodeClick(): void {\n sendTwoFactorCode.call(this, new Promise((resolve) => resolve()), true);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'two-factor-authentication-challenge': ChallengeFlowController;\n }\n}\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseLoginSetupEngineRoute from '../base-route';\n\n/**\n * @classdesc Route for displaying devices that has access to a system.\n *\n * @class two-factor-challenge-flow.ChallengeFlowRoute\n */\n@intlPath({ module: '@adc/login-setup-engine', path: 'two-factor-authentication.two-factor-challenge-flow' })\nexport default class ChallengeFlowRoute extends BaseLoginSetupEngineRoute {\n @service ajax;\n @service contextManager;\n @service engineConfig;\n @service dom;\n @service router;\n @service store;\n\n /** @override */\n routeId = this.engineConfig.getRouteIdFromRouteName('EmberTwoFactorChallengeFlow');\n\n /** @override */\n async model(params) {\n const linkedSystemsFlow = params.linkedSystemsFlow || false;\n\n // Check for loginID from linked systems\n const pendingLinkedSystem = linkedSystemsFlow\n ? (\n await this.ajax.apiRequest(\n 'engines/twoFactorAuthentication/twoFactorAuthentications/checkForPendingLinkedSystem'\n )\n )?.value || {}\n : {};\n\n return {\n twoFactorAuthentication: this.store.findRecord(\n 'two-factor-authentication/two-factor-authentication',\n pendingLinkedSystem?.id ? pendingLinkedSystem.id : this.contextManager.identityModel.id,\n { reload: true }\n ),\n pendingLinkedSystemId: pendingLinkedSystem?.id\n };\n }\n\n /**\n * Transitions to the consuming application's exit step defined for 2FA setup.\n */\n @action\n exitTwoFactorSetup() {\n return this.transitionToExternal('twoFactorSetupExitRoute');\n }\n\n /**\n * Transitions back to the Link a System flow.\n */\n @action\n exitTwoFactorSetupToLinkedSystems(step) {\n this.contextManager.clearVisitedRoutesStack();\n return this.router.transitionTo('settings.login-information.multi-system-access.setup', {\n queryParams: { step }\n });\n }\n\n /** @override */\n activate() {\n this.listenerId = this.dom.addListener(this, window, 'beforeunload', () => {\n this.controller.handleRefresh();\n });\n }\n\n /** @override */\n deactivate() {\n this.dom.removeListener(this, this.listenerId);\n }\n}\n","/**\n * @module\n */\n/**\n * @enum {number}\n */\nexport const NotSet = 0;\n/**\n * @enum {number}\n */\nexport const SingleFamilyHouse = 1;\n/**\n * @enum {number}\n */\nexport const Townhouse = 2;\n/**\n * @enum {number}\n */\nexport const Condo = 3;\n/**\n * @enum {number}\n */\nexport const Business = 4;\n","import { getOwner } from '@ember/owner';\n\nimport type { InternalOwner } from '@ember/-internals/owner';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\n\ntype EngineOwner = InternalOwner & { mountPoint: string };\n\nexport function transitionToHostedEngineRoute(\n context: object,\n router: RouterService,\n routeName: string\n): Transition {\n return router.transitionTo(`${(getOwner(context) as EngineOwner).mountPoint}.${routeName}`);\n}\n","export const WifiSetupResourcePath = '@adc/network-config-engine.wifi-setup';\nexport const WifiSetupIndexResourcePath = `${WifiSetupResourcePath}.index`;\n","export const WifiSetup = 'wifi-setup';\nexport const WifiManualSetup = 'wifi-setup.manual-setup';\nexport const WifiPasswordEntry = 'wifi-setup.password-entry';\n\n// Mobile tech pages\nexport const MobileTechEquipmentVideoAddVideoDevice = 'customers.info.equipment.video.add-video-device';\n","/**\n * @module\n */\nenum WiFiEncryptionAlgorithmEnum {\n None = 0,\n Tkip = 1,\n Aes = 2,\n Open = 3,\n Shared = 4,\n AmbiguousOpenShared = 5,\n Ccmp = 6,\n TkipCcmp = 7,\n WepAlgorithm = 8,\n TkipAes = 9,\n Unknown = 10\n}\n\nexport default WiFiEncryptionAlgorithmEnum;\n","/**\n * @module\n */\nenum WiFiEncryptionTypeEnum {\n None = 0,\n Wep = 1,\n Wpa = 2,\n Wpa2 = 3,\n Wpa2Enterprise = 4,\n WpaWPa2 = 5,\n Wps = 6,\n Unknown = 7,\n Wpa2Wpa3 = 8,\n Eap = 9,\n Wpa3 = 11\n}\n\nexport default WiFiEncryptionTypeEnum;\n","import buildRoutes from 'ember-engines/routes';\n\nexport default buildRoutes(function () {\n this.route('wifi-setup', { path: 'wifi-setup/:selected_camera_mac' }, function () {\n this.route('manual-setup');\n this.route('password-entry');\n });\n});\n","import type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\n\nconst CUSTOMER_SITE = 'customer-site';\n\n// Checks if the current environment is the customer site environment\nexport function isCustomerSite(envSettings: EnvSettingsService): boolean {\n const { networkConfigEngine } = envSettings.getEnvironment() || {},\n { parentApplication } = networkConfigEngine;\n\n return parentApplication === CUSTOMER_SITE;\n}\n","import { getOwner } from '@ember/owner';\n\nimport type { InternalOwner } from '@ember/-internals/owner';\nimport type RouterService from '@ember/routing/router-service';\nimport type { RouteModel } from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\n\ntype EngineOwner = InternalOwner & { mountPoint: string };\n\n/**\n * Navigates to a route within the hosted engine.\n */\nexport function transitionToHostedEngineRoute(\n context: object,\n router: RouterService,\n routeName: string,\n model?: RouteModel,\n options?: { queryParams: object }\n): Transition {\n if (model && options) {\n return router.transitionTo(`${(getOwner(context) as EngineOwner).mountPoint}.${routeName}`, model, options);\n }\n\n if (model) {\n return router.transitionTo(`${(getOwner(context) as EngineOwner).mountPoint}.${routeName}`, model);\n }\n\n if (options) {\n return router.transitionTo(`${(getOwner(context) as EngineOwner).mountPoint}.${routeName}`, options);\n }\n\n return router.transitionTo(`${(getOwner(context) as EngineOwner).mountPoint}.${routeName}`);\n}\n","import { tracked } from '@glimmer/tracking';\nimport EmberController from '@ember/controller';\nimport { action } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { isAdapterErrorProcessingError } from '@adc/ajax/utils/status-codes';\nimport { getErrorText } from '@adc/app-infrastructure/utils/error';\nimport WirelessConnectionInstructionsTypeEnum from '@adc/network-config-addon/enums/WirelessConnectionInstructionsType';\nimport { WifiSetupResourcePath } from '../constants/resource-paths';\nimport { MobileTechEquipmentVideoAddVideoDevice } from '../constants/routes';\nimport { isCustomerSite } from '../utils/environment-utils';\n\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type IBleNetworkSetup from '@adc/network-config-addon/ble-network-setup-interface';\nimport type BleWifiConfigPermission from '@adc/network-config-addon/models/video/permissions/ble-wifi-config-permission';\nimport type WifiConfig from '@adc/network-config-addon/models/video/wifi-config';\nimport type WifiInfoItem from '@adc/network-config-addon/models/video/wifi-info-item';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom } from 'type-utils';\nimport type { WirelessConnectionInstructionsActionSheet } from '../components/action-sheets/wireless-connection-instructions/component';\nimport type WifiConfigRoute from './route';\n\nconst CUSTOMER_SITE = 'customer-site';\n\n/**\n * The base wifi setup controller.\n */\nexport default class BaseWifiSetupController extends EmberController {\n @service declare ajax: AdcAjaxService;\n @service declare envSettings: EnvSettingsService;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare bleNetworkSetup: IBleNetworkSetup;\n @service declare router: RouterService;\n\n declare model: ModelFrom;\n\n /**\n * The wifi config model.\n */\n @tracked wifiConfig?: WifiConfig;\n\n /**\n * The wifi config model.\n */\n @tracked bleWifiConfigPermission?: BleWifiConfigPermission;\n\n /**\n * Wifis scanned from the camera over NativeBridge\n */\n @tracked scannedNetworksFromBleCamera?: WifiInfoItem[];\n\n /**\n * Current camera mac\n */\n @reads('model.currentDeviceMac')\n declare currentDeviceMac: string;\n\n /**\n * The object representation of the wireless connection instructions action sheet.\n * This action sheet provides users with additional instructions to fully connect to the wifi network once the wifi network is successfully saved to the camera.\n * This action is also displayed when the camera fails to connect to a wireless network with troubeshooting steps.\n */\n @tracked wifiConnectionInstructionsActionSheet = {\n type: WirelessConnectionInstructionsTypeEnum.None,\n isOpen: false,\n overviewText: '',\n listOfSteps: [] as string[]\n } as WirelessConnectionInstructionsActionSheet;\n\n /**\n * Have we started checking the wireless network connection yet?\n */\n @tracked hasStartedCheckingWirelessNetworkConnection = false;\n\n /**\n * Is saving the wireless network currently in progress?\n */\n @tracked isSavingWirelessNetworkInProgress = false;\n\n /**\n * Are we on the customer site?\n */\n get isCustomerSite(): boolean {\n const { networkConfigEngine } = this.envSettings.getEnvironment() || {},\n { parentApplication } = networkConfigEngine;\n\n return parentApplication === CUSTOMER_SITE;\n }\n\n /**\n * The base part of a URL used to access the engine's api methods.\n */\n get engineApiPrefix(): string | undefined {\n const { networkConfigEngine } = this.envSettings.getEnvironment() || {};\n\n return networkConfigEngine.engineApiPrefix;\n }\n\n /**\n * The disallowed characters string for the SSID and password.\n */\n get disallowedCharactersString(): string | undefined {\n return this.wifiConfig?.disallowedSsidOrPasswordCharactersList.reduce(\n (string: string, currentCharacter: string) => {\n return string + currentCharacter;\n },\n ''\n );\n }\n\n /**\n * The base load route models action.\n */\n @action\n async loadRouteModels(): Promise {\n const { notificationManager, intl, router, envSettings, bleNetworkSetup } = this;\n try {\n this.wifiConfig = await this.model.wifiConfig;\n } catch (e) {\n // The findRecord call returned an error, this may happen if the mac is incorrect or the device does not exist\n notificationManager.addError(intl.t(`${WifiSetupResourcePath}.unexpectedErrorPleaseTryAgain`));\n\n if (isCustomerSite(envSettings)) {\n router.transitionTo('video.settings.camera.network-info');\n } else {\n // Disconnect from the device and return to Add Video Device page\n bleNetworkSetup.disconnectCamera;\n router.transitionTo(MobileTechEquipmentVideoAddVideoDevice);\n }\n return;\n }\n\n this.bleWifiConfigPermission = await this.model.bleWifiConfigPermission;\n\n if (this.bleWifiConfigPermission?.isUsingBleEnrollmentInstallation) {\n try {\n const result = await bleNetworkSetup.scanNetworksFromCamera();\n this.scannedNetworksFromBleCamera = this.filterWifiInfoItems(\n result,\n this.wifiConfig.myWifiNetworks.toArray()\n );\n\n // Assigning this to the wifi config for the password entry page to work\n Object.assign(this.wifiConfig, {\n otherWifiNetworks: result\n });\n } catch {\n console.error('Error scanning networks from camera.');\n }\n }\n }\n\n /**\n * Method to open a specific wireless network connection instruction action sheet.\n *\n * @param actionSheetType The type of the action sheet.\n */\n @action\n openWirelessConnectionInstructionsActionSheet(actionSheetType: WirelessConnectionInstructionsTypeEnum): void {\n const { intl } = this;\n\n this.wifiConnectionInstructionsActionSheet = {\n type: actionSheetType,\n isOpen: true,\n overviewText: intl.t(`${WifiSetupResourcePath}.wirelessSettingsSavedToCamera`),\n listOfSteps: []\n };\n\n let listOfSteps = [] as string[];\n\n switch (actionSheetType) {\n case WirelessConnectionInstructionsTypeEnum.PowerOffDoorbellCamera:\n listOfSteps = [\n 'powerOffDoorbellCameraRemoveDevice',\n 'powerOffDoorbellCameraSwitchOff',\n 'powerOffDoorbellCameraSwitchOn',\n 'powerOffDoorbellCameraReattachDevice'\n ];\n break;\n case WirelessConnectionInstructionsTypeEnum.PowerOff:\n listOfSteps = ['powerOffRemoveCord', 'powerOffReconnectCord'];\n break;\n case WirelessConnectionInstructionsTypeEnum.PowerOffEthernet:\n listOfSteps = ['powerOffEthernetRemoveCables', 'powerOffEthernetReconnectCord'];\n break;\n case WirelessConnectionInstructionsTypeEnum.NoPowerOff:\n listOfSteps = ['noPowerOffRemoveEthernetCable'];\n break;\n case WirelessConnectionInstructionsTypeEnum.WirelessConnectionFailed:\n this.wifiConnectionInstructionsActionSheet.overviewText = intl.t(\n `${WifiSetupResourcePath}.cameraNotReconnectedToWirelessNetwork`\n );\n listOfSteps = [\n 'wirelessConnectionFailedUnplugPower',\n 'wirelessConnectionFailedPlugPower',\n 'wirelessConnectionFailedVerifyRange',\n 'wirelessConnectionFailedCheckWirelessSetting'\n ];\n break;\n }\n\n this.wifiConnectionInstructionsActionSheet.listOfSteps = listOfSteps.map((step: string) =>\n intl.t(`${WifiSetupResourcePath}.${step}`)\n );\n }\n\n /**\n * Closes the wifi connection instructions action sheet, and conditionally starts checking the camera's wireless network connection.\n */\n @action\n closeWifiConnectionInstructionsActionSheet(): void {\n const checkWirelessNetworkConnectionUponCloseActionSheetTypes = [\n WirelessConnectionInstructionsTypeEnum.PowerOffDoorbellCamera,\n WirelessConnectionInstructionsTypeEnum.PowerOff,\n WirelessConnectionInstructionsTypeEnum.PowerOffEthernet,\n WirelessConnectionInstructionsTypeEnum.NoPowerOff\n ];\n\n // If we are closing any of these four types of action sheets, we want to start checking the wireless connection (behaves the same as the Above Steps Completed button).\n if (\n checkWirelessNetworkConnectionUponCloseActionSheetTypes.includes(\n this.wifiConnectionInstructionsActionSheet.type\n ) &&\n !this.hasStartedCheckingWirelessNetworkConnection\n ) {\n this.checkWirelessNetworkConnection();\n }\n\n this.wifiConnectionInstructionsActionSheet = {\n isOpen: false,\n type: WirelessConnectionInstructionsTypeEnum.None,\n overviewText: '',\n listOfSteps: []\n };\n }\n\n /**\n * Action to check the camera's wireless network connection.\n */\n @action\n async checkWirelessNetworkConnection(): Promise {\n const { wifiConfig, notificationManager } = this;\n\n if (\n !wifiConfig ||\n this.hasStartedCheckingWirelessNetworkConnection ||\n this.wifiConnectionInstructionsActionSheet.type ===\n WirelessConnectionInstructionsTypeEnum.WirelessConnectionFailed\n ) {\n return;\n }\n\n this.hasStartedCheckingWirelessNetworkConnection = true;\n\n if (this.wifiConnectionInstructionsActionSheet.isOpen) {\n this.closeWifiConnectionInstructionsActionSheet();\n }\n\n const newNetwork = wifiConfig.myWifiNetworks.find((network: WifiInfoItem) => network.isDeviceConnected);\n\n if (!newNetwork) {\n return;\n }\n\n try {\n await this.ajax.request(\n `${this.engineApiPrefix}/api/engines/video/wifiConfigs/checkWirelessNetworkConnection/${wifiConfig.id}`,\n undefined,\n undefined,\n 'PUT'\n );\n\n newNetwork.isDeviceConnected = true;\n newNetwork.isDeviceConnectionInProgress = false;\n this.isSavingWirelessNetworkInProgress = false;\n await wifiConfig.reload();\n this.hasStartedCheckingWirelessNetworkConnection = false;\n\n return notificationManager.addSuccess(this.intl.t(`${WifiSetupResourcePath}.connectionSuccessMessage`));\n } catch (ex) {\n if (!isAdapterErrorProcessingError(ex)) {\n notificationManager.addError(\n getErrorText(ex) ?? this.intl.t(`${WifiSetupResourcePath}.connectionFailureMessage`)\n );\n }\n\n this.openWirelessConnectionInstructionsActionSheet(\n WirelessConnectionInstructionsTypeEnum.WirelessConnectionFailed\n );\n\n this.isSavingWirelessNetworkInProgress = false;\n newNetwork.isDeviceConnected = false;\n newNetwork.isDeviceConnectionInProgress = false;\n this.hasStartedCheckingWirelessNetworkConnection = false;\n return Promise.reject();\n }\n }\n\n /**\n * Filter out networks with the same SSID and if the network already exists in the My Networks card\n * This is handled on the backend but for Bluetooth scanned networks, we need to do this on the front end\n */\n filterWifiInfoItems(scannedUniqueNetworks: WifiInfoItem[], mySavedNetworks?: WifiInfoItem[]): WifiInfoItem[] {\n const ssidsInMySavedNetworks = new Set(mySavedNetworks?.map((item) => item.networkSSID) ?? []);\n\n const seenSSIDs = new Set();\n return scannedUniqueNetworks.filter((item) => {\n // If mySavedNetworks is provided, exclude items in scannedUniqueNetworks that exist in mySavedNetworks\n if (mySavedNetworks && ssidsInMySavedNetworks.has(item.networkSSID)) {\n return false;\n }\n\n // Otherwise, filter duplicates within scannedUniqueNetworks itself\n if (seenSSIDs.has(item.networkSSID)) {\n return false;\n }\n\n seenSSIDs.add(item.networkSSID);\n return true;\n });\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/wifi-setup': BaseWifiSetupController;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { notEmpty } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { WifiSetupResourcePath, WifiSetupIndexResourcePath } from '@adc/network-config-engine/constants/resource-paths';\nimport { WifiManualSetup } from '@adc/network-config-engine/constants/routes';\nimport { transitionToHostedEngineRoute } from '@adc/network-config-engine/utils/transition-utils';\nimport { isAdapterErrorProcessingError } from '@adc/ajax/utils/status-codes';\nimport { getErrorText } from '@adc/app-infrastructure/utils/error';\nimport WirelessConnectionInstructionsTypeEnum from '@adc/network-config-addon/enums/WirelessConnectionInstructionsType';\nimport BaseWifiSetupController from '../base-wifi-setup-controller';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type IBleNetworkSetup from '@adc/network-config-addon/ble-network-setup-interface';\nimport type { SelectedNetwork } from '@adc/network-config-addon/ble-network-setup-interface';\nimport type WifiInfoItem from '@adc/network-config-addon/models/video/wifi-info-item';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\n\n/**\n * Consts for various numerical values in this file.\n */\nconst MyWifiNetworks = 1,\n OtherNetworks = 2,\n AvailableNetworks = 3;\n\n/**\n * The wifi setup page controller.\n */\nexport default class WifiConfigController extends BaseWifiSetupController {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare envSettings: EnvSettingsService;\n @service declare router: RouterService;\n @service declare bleNetworkSetup: IBleNetworkSetup;\n\n /**\n * Property to store MyWifiNetworks const.\n */\n MyWifiNetworks = MyWifiNetworks;\n\n /**\n * Property to store OtherNetworks const.\n */\n OtherNetworks = OtherNetworks;\n\n /**\n * Property to store AvailableNetworks const.\n */\n AvailableNetworks = AvailableNetworks;\n\n /**\n * All networks that were scanned from the camera\n */\n @tracked networks: WifiInfoItem[] = [];\n\n /**\n * Should we be displaying the wifi info action sheet?\n */\n @tracked shouldDisplayInfoActionSheet = false;\n\n /**\n * The wifi info action sheet title.\n */\n @tracked infoActionSheetTitle = '';\n\n /**\n * The wifi info action sheet description.\n */\n @tracked infoActionSheetDescription = '';\n\n /**\n * Are there any saved networks on the account?\n */\n @notEmpty('wifiConfig.myWifiNetworks')\n declare hasSavedNetworks: boolean;\n\n /**\n * Opens the wifi info action sheet with the corresponding title/description.\n *\n * @param actionSheetType The type of action sheet we are opening (My Wifi Networks, Other Networks, or Available Networks).\n */\n @action\n openInfoActionSheet(actionSheetType: number): void {\n const { intl } = this;\n\n this.shouldDisplayInfoActionSheet = true;\n\n switch (actionSheetType) {\n case MyWifiNetworks:\n this.infoActionSheetTitle = intl.t(`${WifiSetupIndexResourcePath}.myWifiNetworks`);\n this.infoActionSheetDescription = intl.t(`${WifiSetupIndexResourcePath}.myWifiNetworksDescription`);\n break;\n case OtherNetworks:\n this.infoActionSheetTitle = intl.t(`${WifiSetupIndexResourcePath}.otherNetworks`);\n this.infoActionSheetDescription = intl.t(`${WifiSetupIndexResourcePath}.otherNetworksDescription`);\n break;\n case AvailableNetworks:\n this.infoActionSheetTitle = intl.t(`${WifiSetupIndexResourcePath}.availableNetworks`);\n this.infoActionSheetDescription = intl.t(`${WifiSetupIndexResourcePath}.otherNetworksDescription`);\n break;\n }\n }\n\n /**\n * Closes the wifi info action sheet and resets action sheet properties.\n */\n @action\n closeInfoActionSheet(): void {\n this.shouldDisplayInfoActionSheet = false;\n this.infoActionSheetTitle = '';\n this.infoActionSheetDescription = '';\n }\n\n /**\n * Transition to the manual setup page.\n */\n @action\n transitionToManualSetupPage(): void {\n transitionToHostedEngineRoute(this, this.router, WifiManualSetup);\n }\n\n /**\n * Connect to the new wireless setting.\n *\n * @param network The selected network to connect to.\n */\n @action\n async saveWirelessSettings(network: WifiInfoItem): Promise {\n const { wifiConfig, notificationManager, model, bleNetworkSetup, isCustomerSite, currentDeviceMac } = this,\n videoSettingsPermission = await model.bleWifiConfigPermission,\n isUsingBleEnrollmentInstallation = videoSettingsPermission.isUsingBleEnrollmentInstallation;\n\n if (!wifiConfig || this.isSavingWirelessNetworkInProgress) {\n return;\n }\n\n Object.assign(wifiConfig, {\n selectedNetworkSSID: network.networkSSID,\n selectedPassword: '',\n selectedSecurityType: network.algorithm,\n selectedEncryptionType: network.encryptionType\n });\n\n network.isDeviceConnectionInProgress = true;\n this.isSavingWirelessNetworkInProgress = true;\n wifiConfig.isCopyingNetwork = true;\n\n // If the camera is using BLE Enrollment, we will let the ble network setup service handle the request\n if (isUsingBleEnrollmentInstallation && !isCustomerSite) {\n let selectedNetwork: SelectedNetwork | undefined;\n\n const savedNetwork = wifiConfig.myWifiNetworks.find(\n (network: WifiInfoItem) => network.networkSSID === network.networkSSID\n );\n\n // If the user selected a network from the 'My Networks' card, we must request the password from the backend\n if (savedNetwork) {\n try {\n const networkPassword: { value: string } = await this.ajax.request(\n `${this.engineApiPrefix}/api/engines/video/wifiConfigs/getSavedNetworkPassword/${currentDeviceMac}`,\n {\n method: 'PUT',\n body: JSON.stringify({\n networkSSID: wifiConfig.selectedNetworkSSID,\n networkEncryption: wifiConfig.selectedEncryptionType,\n networkSecurity: wifiConfig.selectedSecurityType\n }),\n headers: {\n 'content-type': 'application/json'\n }\n }\n );\n\n // Convert network to BleNetworkSetup type\n selectedNetwork = {\n networkSSID: network.networkSSID,\n encryptionType: network.encryptionType,\n password: networkPassword.value\n };\n } catch {\n notificationManager.addError(this.intl.t(`${WifiSetupResourcePath}.connectionFailureMessage`));\n\n network.isDeviceConnectionInProgress = false;\n this.isSavingWirelessNetworkInProgress = false;\n return;\n }\n } else {\n // Selected network was not in the My Networks and has no password\n // Convert network to BleNetworkSetup type\n selectedNetwork = {\n networkSSID: network.networkSSID,\n encryptionType: network.encryptionType\n };\n }\n\n if (selectedNetwork) {\n bleNetworkSetup.setSelectedNetworkInformation(selectedNetwork);\n }\n return;\n }\n\n try {\n await wifiConfig.save();\n\n if (wifiConfig.wirelessConnectionInstructionsToDisplay !== WirelessConnectionInstructionsTypeEnum.None) {\n this.openWirelessConnectionInstructionsActionSheet(wifiConfig.wirelessConnectionInstructionsToDisplay);\n return;\n }\n\n network.isDeviceConnectionInProgress = false;\n network.isDeviceConnected = true;\n this.isSavingWirelessNetworkInProgress = false;\n\n return notificationManager.addSuccess(this.intl.t(`${WifiSetupResourcePath}.connectionSuccessMessage`));\n } catch (ex) {\n network.isDeviceConnectionInProgress = false;\n this.isSavingWirelessNetworkInProgress = false;\n if (!isAdapterErrorProcessingError(ex)) {\n notificationManager.addError(\n getErrorText(ex) ?? this.intl.t(`${WifiSetupResourcePath}.connectionFailureMessage`)\n );\n }\n\n this.openWirelessConnectionInstructionsActionSheet(\n WirelessConnectionInstructionsTypeEnum.WirelessConnectionFailed\n );\n\n return Promise.reject();\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/wifi-setup/index': WifiConfigController;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { alias, equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { WifiSetupResourcePath } from '@adc/network-config-engine/constants/resource-paths';\nimport WiFiEncryptionAlgorithmEnum from '@adc/network-config-engine/enums/WiFiEncryptionAlgorithm';\nimport WiFiEncryptionTypeEnum from '@adc/network-config-engine/enums/WiFiEncryptionType';\nimport { isAdapterErrorProcessingError } from '@adc/ajax/utils/status-codes';\nimport { getErrorText } from '@adc/app-infrastructure/utils/error';\nimport { intlPath } from '@adc/i18n/path';\nimport WirelessConnectionInstructionsTypeEnum from '@adc/network-config-addon/enums/WirelessConnectionInstructionsType';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\nimport BaseWifiSetupController from '../base-wifi-setup-controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type IBleNetworkSetup from '@adc/network-config-addon/ble-network-setup-interface';\nimport type { SelectedNetwork } from '@adc/network-config-addon/ble-network-setup-interface';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AppNotification } from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { ModelFrom } from 'type-utils';\nimport type WifiConfigRoute from '../route';\n\n/**\n * Consts for various numerical values.\n */\nexport const SsidMinLength = 1,\n SsidMaxLength = 32,\n PasswordMinLength = 8,\n PasswordMaxLength = 63,\n UnselectedDropdownValue = -1,\n Wep64PasswordLength = 5,\n Wep64HexPasswordLength = 10,\n Wep128PasswordLength = 13,\n Wep128HexPasswordLength = 26;\n\n/**\n * Regex pattern for checking if a string only contains non-whitespace characters.\n */\nconst NonWhitespaceCharacterRegex = /\\S/;\n\n/**\n * Controller for the manual setup page.\n */\n@intlPath({ module: '@adc/network-config-engine' })\nexport default class ManualWifiSetupController extends BaseWifiSetupController {\n declare model: ModelFrom;\n\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n @service declare notificationManager: NotificationManager;\n @service declare bleNetworkSetup: IBleNetworkSetup;\n\n /**\n * The external query param (true if we are on MobileTech, false otherwise).\n */\n @tracked external = false;\n\n /**\n * The selected network name (SSID).\n */\n @tracked selectedNetworkName = '';\n\n /**\n * The selected password (none if copying network from another device).\n */\n @tracked selectedPassword = '';\n\n /**\n * The selected security type.\n */\n @tracked selectedSecurityType = UnselectedDropdownValue;\n\n /**\n * The selected encryption type.\n */\n @tracked selectedEncryptionType = UnselectedDropdownValue;\n\n /**\n * Is the selected security option open?\n */\n @equal('selectedSecurityType', WiFiEncryptionAlgorithmEnum.Open)\n declare isSelectedSecurityOptionOpen: boolean;\n\n /**\n * Is the selected encryption type Wep?\n */\n @equal('selectedEncryptionType', WiFiEncryptionTypeEnum.Wep)\n declare isSelectedEncryptionTypeWep: boolean;\n\n /**\n * Is this a WebView in the mobile app?\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * The encryption type warning message.\n */\n @computed('selectedSecurityType', 'selectedEncryptionType')\n get securityTypeWarningMessage(): string {\n const { selectedSecurityType, selectedEncryptionType, intl } = this;\n\n if (\n selectedEncryptionType === WiFiEncryptionTypeEnum.Wpa &&\n selectedSecurityType === WiFiEncryptionAlgorithmEnum.Aes\n ) {\n return intl.tc(this, 'securityTypeWarningMessage', {\n selectedSecurityType: 'AES',\n selectedEncryptionType: 'WPA',\n recommendedSecurityType: 'TKIP'\n });\n }\n\n if (\n selectedEncryptionType === WiFiEncryptionTypeEnum.Wpa2 &&\n selectedSecurityType === WiFiEncryptionAlgorithmEnum.Tkip\n ) {\n return intl.tc(this, 'securityTypeWarningMessage', {\n selectedSecurityType: 'TKIP',\n selectedEncryptionType: 'WPA2',\n recommendedSecurityType: 'AES'\n });\n }\n\n if (\n selectedEncryptionType === WiFiEncryptionTypeEnum.Wpa3 &&\n selectedSecurityType === WiFiEncryptionAlgorithmEnum.Tkip\n ) {\n return intl.tc(this, 'securityTypeWarningMessage', {\n selectedSecurityType: 'TKIP',\n selectedEncryptionType: 'WPA3',\n recommendedSecurityType: 'AES'\n });\n }\n\n return '';\n }\n\n /**\n * Should we disable the connect button? Disable if any of the fields are invalid.\n */\n @computed(\n 'isNetworkNameValid',\n 'isPasswordValid',\n 'selectedSecurityType',\n 'selectedEncryptionType',\n 'isSelectedSecurityOptionOpen'\n )\n get shouldDisableConnectButton(): Promise {\n return (async () => {\n const isNetworkNameValid = await this.isNetworkNameValid,\n isPasswordValid = await this.isPasswordValid;\n\n // If the selected security type is Open, the SSID is the only other field we need to enter.\n if (this.isSelectedSecurityOptionOpen) {\n return !isNetworkNameValid;\n }\n\n return (\n !isNetworkNameValid ||\n !isPasswordValid ||\n this.selectedSecurityType === UnselectedDropdownValue ||\n this.selectedEncryptionType === UnselectedDropdownValue\n );\n })();\n }\n\n /**\n * Return the min and max SSID length.\n */\n get ssidLength(): { min: number; max: number } {\n return { min: SsidMinLength, max: SsidMaxLength };\n }\n\n /**\n * Return min and max password length.\n */\n @computed('isSelectedSecurityOptionOpen')\n get passwordLength(): { min: number; max: number } {\n if (this.isSelectedSecurityOptionOpen) {\n return { min: 0, max: 0 };\n }\n\n return { min: PasswordMinLength, max: PasswordMaxLength };\n }\n\n /**\n * Is the network name valid? It is valid if it is between 1-32 characters.\n */\n @computed('selectedNetworkName', 'doesInputContainInvalidCharacters.networkName')\n get isNetworkNameValid(): Promise {\n const { selectedNetworkName } = this;\n\n return (async () => {\n const doesInputContainInvalidCharacters = await this.doesInputContainInvalidCharacters;\n\n return (\n NonWhitespaceCharacterRegex.test(selectedNetworkName) && !doesInputContainInvalidCharacters.networkName\n );\n })();\n }\n\n /**\n * Is the password valid? It is value if it is between the min/max password required length or one of the WEP password lengths.\n */\n @computed('selectedPassword', 'doesInputContainInvalidCharacters.password', 'isSelectedEncryptionTypeWep')\n get isPasswordValid(): Promise {\n const { selectedPassword, passwordLength } = this;\n return (async () => {\n const doesInputContainInvalidCharacters = await this.doesInputContainInvalidCharacters,\n wepValidPasswordLengthList = [\n Wep64PasswordLength,\n Wep64HexPasswordLength,\n Wep128PasswordLength,\n Wep128HexPasswordLength\n ];\n\n if (this.isSelectedEncryptionTypeWep) {\n return (\n wepValidPasswordLengthList.includes(selectedPassword.length) &&\n !doesInputContainInvalidCharacters.password\n );\n }\n\n return (\n selectedPassword.length >= passwordLength.min &&\n selectedPassword.length <= passwordLength.max &&\n !doesInputContainInvalidCharacters.password\n );\n })();\n }\n\n /**\n * Does either the network name or password contain invalid characters?\n */\n @computed('model.wifiConfig', 'selectedPassword', 'selectedNetworkName')\n get doesInputContainInvalidCharacters(): Promise<{ networkName: boolean; password: boolean }> {\n return (async () => {\n const wifiConfig = await this.model.wifiConfig,\n doesPasswordIncludeInvalidChars = wifiConfig.disallowedSsidOrPasswordCharactersList.some(\n (char: string) => this.selectedPassword.includes(char)\n ),\n doesSsidIncludeInvalidChars = wifiConfig.disallowedSsidOrPasswordCharactersList.some((char: string) =>\n this.selectedNetworkName.includes(char)\n );\n\n return {\n networkName: doesSsidIncludeInvalidChars,\n password: doesPasswordIncludeInvalidChars\n };\n })();\n }\n\n /**\n * The error message for the network name input field.\n */\n @computed('disallowedCharactersString', 'doesInputContainInvalidCharacters.networkName')\n get networkNameErrorMessage(): Promise {\n return (async () => {\n const disallowedCharactersString = await this.disallowedCharactersString,\n doesInputContainInvalidCharacters = await this.doesInputContainInvalidCharacters;\n\n if (doesInputContainInvalidCharacters.networkName) {\n return this.intl.tc(this, 'networkNameInvalidCharactersErrorMessage', {\n invalidCharacters: disallowedCharactersString\n });\n }\n\n return '';\n })();\n }\n\n /**\n * The error message for the password input field.\n */\n @computed('disallowedCharactersString', 'doesInputContainInvalidCharacters.{networkName,password}')\n get inputErrorMessage(): Promise<{ networkName: string; password: string }> {\n return (async () => {\n const disallowedCharactersString = await this.disallowedCharactersString,\n doesInputContainInvalidCharacters = await this.doesInputContainInvalidCharacters;\n let networkNameErrorMessage = '',\n passwordErrorMessage = '';\n\n if (doesInputContainInvalidCharacters.networkName) {\n networkNameErrorMessage = this.intl.tc(this, 'networkNameInvalidCharactersErrorMessage', {\n invalidCharacters: disallowedCharactersString\n });\n }\n\n if (doesInputContainInvalidCharacters.password) {\n passwordErrorMessage = this.intl.t(`${WifiSetupResourcePath}.passwordInvalidCharactersErrorMessage`, {\n invalidCharacters: disallowedCharactersString\n });\n }\n\n return {\n networkName: networkNameErrorMessage,\n password: passwordErrorMessage\n };\n })();\n }\n\n /**\n * The security type dropdown items.\n */\n @computed('model.wifiConfig', 'openEnumStringVersion')\n get securityDropdownItems(): Promise {\n const { intl } = this;\n\n return (async () => {\n const items: DropdownSelectItem[] = [],\n wifiConfig = await this.model.wifiConfig;\n\n wifiConfig.securityTypeOptions.forEach((option: WiFiEncryptionAlgorithmEnum) => {\n let name = '';\n\n switch (option) {\n case WiFiEncryptionAlgorithmEnum.AmbiguousOpenShared:\n name = intl.tc(this, 'openShared');\n break;\n case WiFiEncryptionAlgorithmEnum.Tkip:\n name = `TKIP (${intl.tc(this, 'defaultFor', { name: 'WPA' })})`;\n break;\n case WiFiEncryptionAlgorithmEnum.Aes:\n name = `AES ${intl.tc(this, 'defaultFor', { name: 'WPA2/WPA3' })})`;\n break;\n case WiFiEncryptionAlgorithmEnum.Open:\n name = intl.tc(this, 'open');\n break;\n case WiFiEncryptionAlgorithmEnum.Shared:\n name = intl.tc(this, 'shared');\n break;\n }\n\n items.push(\n DropdownSelectItem.create({\n value: option.toString(),\n name\n })\n );\n });\n\n return items;\n })();\n }\n\n /**\n * The encryption type dropdown items.\n */\n @computed('model.wifiConfig')\n get encryptionTypeDropdownItems(): Promise {\n const { intl } = this;\n return (async () => {\n const items: DropdownSelectItem[] = [],\n wifiConfig = await this.model.wifiConfig;\n\n wifiConfig.encryptionTypeOptions.forEach((option: WiFiEncryptionTypeEnum) => {\n let name = '';\n\n switch (option) {\n case WiFiEncryptionTypeEnum.None:\n name = intl.tc(this, 'noEncryption');\n break;\n case WiFiEncryptionTypeEnum.Wep:\n name = 'WEP';\n break;\n case WiFiEncryptionTypeEnum.Wpa:\n name = intl.tc(this, 'wpaPersonal', { wpaType: 'WPA' });\n break;\n case WiFiEncryptionTypeEnum.Wpa2:\n name = intl.tc(this, 'wpaPersonal', { wpaType: 'WPA2' });\n break;\n case WiFiEncryptionTypeEnum.Wpa3:\n name = intl.tc(this, 'wpaPersonal', { wpaType: 'WPA3' });\n break;\n }\n\n items.push(\n DropdownSelectItem.create({\n value: option.toString(),\n name\n })\n );\n });\n\n return items;\n })();\n }\n\n /**\n * Updates the selected security type with the selected option.\n */\n @action\n updateSelectedSecurityType(option: string): void {\n this.selectedSecurityType = Number(option);\n }\n\n /**\n * Updates the selected encryption type with the selected option.\n */\n @action\n updateSelectedEncryptionType(option: string): void {\n this.selectedEncryptionType = Number(option);\n }\n\n /**\n * Save wireless settings to the camera and DB.\n */\n @action\n async saveWirelessSettings(): Promise {\n const {\n notificationManager,\n bleNetworkSetup,\n model,\n selectedNetworkName,\n selectedPassword,\n selectedSecurityType,\n selectedEncryptionType,\n isCustomerSite\n } = this,\n wifiConfig = await model.wifiConfig,\n bleWifiConfigPermission = await model.bleWifiConfigPermission,\n isUsingBleEnrollmentInstallation = bleWifiConfigPermission.isUsingBleEnrollmentInstallation;\n\n // If the camera is using BLE Enrollment, we will set the network on the camera installation service\n if (isUsingBleEnrollmentInstallation && !isCustomerSite) {\n // Convert network to BleNetworkSetup type\n const selectedNetwork: SelectedNetwork = {\n networkSSID: selectedNetworkName,\n encryptionType: selectedEncryptionType,\n password: this.isSelectedSecurityOptionOpen ? '' : selectedPassword\n };\n\n bleNetworkSetup.setSelectedNetworkInformation(selectedNetwork);\n return;\n }\n\n Object.assign(wifiConfig, {\n selectedNetworkSSID: selectedNetworkName,\n selectedPassword: this.isSelectedSecurityOptionOpen ? '' : selectedPassword,\n selectedSecurityType,\n selectedEncryptionType\n });\n\n try {\n await wifiConfig.save();\n\n if (wifiConfig.wirelessConnectionInstructionsToDisplay !== WirelessConnectionInstructionsTypeEnum.None) {\n this.openWirelessConnectionInstructionsActionSheet(wifiConfig.wirelessConnectionInstructionsToDisplay);\n return;\n }\n\n return notificationManager.addSuccess(this.intl.t(`${WifiSetupResourcePath}.connectionSuccessMessage`));\n } catch (ex) {\n if (!isAdapterErrorProcessingError(ex)) {\n notificationManager.addError(\n getErrorText(ex) ?? this.intl.t(`${WifiSetupResourcePath}.connectionFailureMessage`)\n );\n }\n\n this.openWirelessConnectionInstructionsActionSheet(\n WirelessConnectionInstructionsTypeEnum.WirelessConnectionFailed\n );\n\n return Promise.reject();\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'video/wifi-setup/manual-setup': ManualWifiSetupController;\n }\n}\n","import EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { isCustomerSite } from '@adc/network-config-engine/utils/environment-utils';\n\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\n\nexport const CustomersEngineIndexRoute = 'video.settings.camera.network-info.network-setup.wifi-setup';\nexport const MobileTechEngineIndexRoute = 'customers.info.equipment.video.network-setup.wifi-setup';\n\n/**\n * @classdesc\n * Route for manual setup page.\n */\nexport default class ManualWifiSetupRoute extends EmberRoute {\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare envSettings: EnvSettingsService;\n @service declare router: RouterService;\n\n afterModel(_model: object, transition: Transition): void {\n const { envSettings, intl, router } = this;\n Object.assign(transition.data, {\n appHeader: {\n title: intl.t('@adc/network-config-engine.wifi-setup.enterNetworkInformation'),\n icon: 'back',\n text: intl.t('@adc/network-config-engine.wifi-setup.back'),\n action: () => {\n router.transitionTo(\n isCustomerSite(envSettings) ? CustomersEngineIndexRoute : MobileTechEngineIndexRoute\n );\n }\n }\n });\n }\n}\n","import EmberRoute from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { isCustomerSite } from '../utils/environment-utils';\n\nimport type BaseEngineConfig from '@adc/app-infrastructure/services/base-engine-config';\nimport type EnvSettingsService from '@adc/app-infrastructure/services/env-settings';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type IBleNetworkSetup from '@adc/network-config-addon/ble-network-setup-interface';\nimport type BleWifiConfigPermission from '@adc/network-config-addon/models/video/permissions/ble-wifi-config-permission';\nimport type WifiConfig from '@adc/network-config-addon/models/video/wifi-config';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\n\n// Interface for the route model\nexport interface WifiConfigRouteModel {\n wifiConfig: Promise;\n bleWifiConfigPermission: Promise;\n currentDeviceMac: string;\n}\n\n/**\n * Route for wifi configuration.\n */\n@intlPath({ module: '@adc/network-config-engine', path: 'wifi-setup' })\nexport default class WifiConfigRoute extends EmberRoute {\n @service declare engineConfig: BaseEngineConfig;\n @service declare envSettings: EnvSettingsService;\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n @service declare bleNetworkSetup: IBleNetworkSetup;\n\n routeId: number;\n\n constructor(...args: any[]) {\n super(...args);\n this.routeId = this.engineConfig.getRouteIdFromRouteName('EmberVideoSettingsNetworkConfigChangeNetwork');\n }\n\n /** @override */\n isMediumWidthPage = true;\n\n /** @override */\n model({ selected_camera_mac }: { selected_camera_mac: string }): WifiConfigRouteModel {\n return {\n wifiConfig: this.store.findRecord('video/wifi-config', selected_camera_mac),\n bleWifiConfigPermission: this.store.findRecord(\n 'video/permissions/ble-wifi-config-permission',\n selected_camera_mac\n ),\n currentDeviceMac: selected_camera_mac\n };\n }\n\n /** @override */\n async afterModel(model: WifiConfigRouteModel, transition: Transition): Promise {\n const { envSettings, intl, router, bleNetworkSetup } = this;\n const permission: BleWifiConfigPermission = await model.bleWifiConfigPermission;\n\n // Transition back to network-info page if the user does not have permission to configure wifi on customer site\n // Transition to customer info page if the user does not have permission to configure wifi on mobile-tech\n if (!permission.hasWifiConfigPermission) {\n if (isCustomerSite(envSettings)) {\n router.transitionTo('video.settings.camera.network-info');\n } else {\n bleNetworkSetup.disconnectCamera();\n router.transitionTo('customers.info');\n }\n }\n\n if (!isCustomerSite(envSettings)) {\n Object.assign(transition.data, {\n appHeader: {\n title: intl.tc(this, 'selectNetwork'),\n icon: 'back',\n text: intl.tc(this, 'back')\n }\n });\n }\n }\n}\n","const newline = /\\r?\\n/;\nexport default function parseResponseHeaders(headersString) {\n const headers = Object.create(null);\n if (!headersString) {\n return headers;\n }\n const headerPairs = headersString.split(newline);\n for (let i = 0; i < headerPairs.length; i++) {\n let header = headerPairs[i];\n let j = 0;\n let foundSep = false;\n for (; j < header.length; j++) {\n if (header.charCodeAt(j) === 58 /* ':' */) {\n foundSep = true;\n break;\n }\n }\n if (foundSep === false) {\n continue;\n }\n let field = header.substring(0, j).trim();\n let value = header.substring(j + 1, header.length).trim();\n if (value) {\n let lowerCasedField = field.toLowerCase();\n headers[lowerCasedField] = value;\n headers[field] = value;\n }\n }\n return headers;\n}","import { warn } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport continueOnReject from './continue-on-reject';\n/*\n * Function that always attempts to parse the response as json, and if an error is thrown,\n * returns `undefined` if the response is successful and has a status code of 204 (No Content),\n * or 205 (Reset Content) or if the request method was 'HEAD', and the plain payload otherwise.\n */\nfunction _determineContent(response, requestData, payload) {\n let ret = payload;\n let error = null;\n if (!response.ok) {\n return payload;\n }\n let status = response.status;\n let payloadIsEmpty = payload === '' || payload === null;\n let statusIndicatesEmptyResponse = status === 204 || status === 205 || requestData.method === 'HEAD';\n if (DEBUG) {\n if (payloadIsEmpty && !statusIndicatesEmptyResponse) {\n let message = `The server returned an empty string for ${requestData.method} ${requestData.url}, which cannot be parsed into a valid JSON. Return either null or {}.`;\n if (payload === '') {\n warn(message, {\n id: 'ds.adapter.returned-empty-string-as-JSON'\n });\n }\n }\n }\n if (response.ok && (statusIndicatesEmptyResponse || payloadIsEmpty)) {\n return;\n }\n try {\n ret = JSON.parse(payload);\n } catch (e) {\n if (!(e instanceof SyntaxError)) {\n return e;\n }\n e.payload = payload;\n error = e;\n }\n if (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('This response was unable to be parsed as json.', payload);\n }\n return error;\n }\n return ret;\n}\nexport function determineBodyPromise(response, requestData) {\n // response.text() may resolve or reject\n // it is a native promise, may not have finally\n return continueOnReject(response.text()).then(payload => _determineContent(response, requestData, payload));\n}","import { resolve } from 'rsvp';\nexport default function continueOnReject(promise) {\n return resolve(promise).catch(e => e);\n}","const RBRACKET = /\\[\\]$/;\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\n/*\n * Helper function that turns the data/body of a request into a query param string.\n * This is directly copied from jQuery.param.\n */\nexport function serializeQueryParams(queryParamsObject) {\n let s = [];\n function buildParams(prefix, obj) {\n let i, len, key;\n if (prefix) {\n if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (RBRACKET.test(prefix)) {\n add(s, prefix, obj[i]);\n } else {\n buildParams(prefix + '[' + (typeof obj[i] === 'object' && obj[i] !== null ? i : '') + ']', obj[i]);\n }\n }\n } else if (isPlainObject(obj)) {\n for (key in obj) {\n buildParams(prefix + '[' + key + ']', obj[key]);\n }\n } else {\n add(s, prefix, obj);\n }\n } else if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(s, obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n }\n return buildParams('', queryParamsObject).join('&');\n}\n\n/*\n * Part of the `serializeQueryParams` helper function.\n */\nfunction add(s, k, v) {\n // Strip out keys with undefined value and replace null values with\n // empty strings (mimics jQuery.ajax)\n if (v === undefined) {\n return;\n } else if (v === null) {\n v = '';\n }\n v = typeof v === 'function' ? v() : v;\n s[s.length] = `${encodeURIComponent(k)}=${encodeURIComponent(v)}`;\n}","import require, { has } from 'require';\nlet _fetch = null;\nexport default function getFetchFunction() {\n if (_fetch !== null) {\n return _fetch();\n }\n if (has('fetch')) {\n // use `fetch` module by default, this is commonly provided by ember-fetch\n let fetchFn = require('fetch').default;\n _fetch = () => fetchFn;\n } else if (typeof fetch === 'function') {\n // fallback to using global fetch\n _fetch = () => fetch;\n } else {\n throw new Error('cannot find the `fetch` module or the `fetch` global. Did you mean to install the `ember-fetch` addon?');\n }\n return _fetch();\n}","import Mixin from '@ember/object/mixin';\nimport { camelize } from '@ember/string';\nimport { pluralize } from 'ember-inflector';\n\n/**\n @module @ember-data/adapter\n*/\n\n/*\n The structure of this file is such because typing Mixins is hard. Here we've structured it in\n such a way as to maximize the type information that a consumer can utilize. There are simpler\n ways to type a mixin but we would not be able to provide the nice overload signature for buildURL\n*/\n// the interface must fully declare the function signatures that the individual functions\n// will also declare. If instead we try to keep them in sync by doing something like\n// `interface BuildURLMixin { buildURL: typeof buildURL }`\n// then an extending class overwriting one of the methods will break because typescript\n// thinks it is a switch from an instance prop (that is a method) to an instance method.\n\n// prevents the final constructed object from needing to add\n// host and namespace which are provided by the final consuming\n// class to the prototype which can result in overwrite errors\n\n/**\n ## Using BuildURLMixin\n\n To use URL building, include the mixin when extending an adapter, and call `buildURL` where needed.\n The default behaviour is designed for RESTAdapter.\n\n ### Example\n\n ```javascript\n import Adapter, { BuildURLMixin } from '@ember-data/adapter';\n\n export default class ApplicationAdapter extends Adapter.extend(BuildURLMixin) {\n findRecord(store, type, id, snapshot) {\n var url = this.buildURL(type.modelName, id, snapshot, 'findRecord');\n return this.ajax(url, 'GET');\n }\n }\n ```\n\n ### Attributes\n\n The `host` and `namespace` attributes will be used if defined, and are optional.\n\n @class BuildURLMixin\n @public\n*/\n/**\n Builds a URL for a given type and optional ID.\n\n By default, it pluralizes the type's name (for example, 'post'\n becomes 'posts' and 'person' becomes 'people'). To override the\n pluralization see [pathForType](./pathForType?anchor=pathForType).\n\n If an ID is specified, it adds the ID to the path generated\n for the type, separated by a `/`.\n\n When called by `RESTAdapter.findMany()` the `id` and `snapshot` parameters\n will be arrays of ids and snapshots.\n\n @method buildURL\n @public\n @param {String} modelName\n @param {(String|Array|Object)} id single id or array of ids or query\n @param {(Snapshot|SnapshotRecordArray)} snapshot single snapshot or array of snapshots\n @param {String} requestType\n @param {Object} query object of query parameters to send for query requests.\n @return {String} url\n */\n\nfunction buildURL(modelName, id, snapshot, requestType, query) {\n /*\n Switch statements in typescript don't currently narrow even when the function is implemented\n with overloads.\n We still extract this to stand alone so that we can provide nice overloads for calling signatures,\n but we will still require all of this casting (or a ridiculous number of assertsthat narrow it down\n for us).\n */\n switch (requestType) {\n case 'findRecord':\n return this.urlForFindRecord(id, modelName, snapshot);\n case 'findAll':\n return this.urlForFindAll(modelName, snapshot);\n case 'query':\n return this.urlForQuery(query || {}, modelName);\n case 'queryRecord':\n return this.urlForQueryRecord(query || {}, modelName);\n case 'findMany':\n return this.urlForFindMany(id, modelName, snapshot);\n case 'findHasMany':\n return this.urlForFindHasMany(id, modelName, snapshot);\n case 'findBelongsTo':\n return this.urlForFindBelongsTo(id, modelName, snapshot);\n case 'createRecord':\n return this.urlForCreateRecord(modelName, snapshot);\n case 'updateRecord':\n return this.urlForUpdateRecord(id, modelName, snapshot);\n case 'deleteRecord':\n return this.urlForDeleteRecord(id, modelName, snapshot);\n default:\n // this is the 'never' case but someone may call `buildURL` manually so\n // we try to do something for them.\n return this._buildURL(modelName, id);\n }\n}\n\n/**\n @method _buildURL\n @private\n @param {String} modelName\n @param {String} id\n @return {String} url\n */\nfunction _buildURL(modelName, id) {\n let path;\n let url = [];\n let {\n host\n } = this;\n let prefix = this.urlPrefix();\n if (modelName) {\n path = this.pathForType(modelName);\n if (path) {\n url.push(path);\n }\n }\n if (id) {\n url.push(encodeURIComponent(id));\n }\n if (prefix) {\n url.unshift(prefix);\n }\n let urlString = url.join('/');\n if (!host && urlString && urlString.charAt(0) !== '/') {\n urlString = '/' + urlString;\n }\n return urlString;\n}\n\n/**\n Builds a URL for a `store.findRecord(type, id)` call.\n\n Example:\n\n ```app/adapters/user.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n urlForFindRecord(id, modelName, snapshot) {\n let baseUrl = this.buildURL(modelName, id, snapshot);\n return `${baseUrl}/users/${snapshot.adapterOptions.user_id}/playlists/${id}`;\n }\n }\n ```\n\n @method urlForFindRecord\n @public\n @param {String} id\n @param {String} modelName\n @param {Snapshot} snapshot\n @return {String} url\n\n */\nfunction urlForFindRecord(id, modelName, snapshot) {\n return this._buildURL(modelName, id);\n}\n\n/**\n Builds a URL for a `store.findAll(type)` call.\n\n Example:\n\n ```app/adapters/comment.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n urlForFindAll(modelName, snapshot) {\n let baseUrl = this.buildURL(modelName);\n return `${baseUrl}/data/comments.json`;\n }\n }\n ```\n\n @method urlForFindAll\n @public\n @param {String} modelName\n @param {SnapshotRecordArray} snapshot\n @return {String} url\n */\nfunction urlForFindAll(modelName, snapshots) {\n return this._buildURL(modelName);\n}\n\n/**\n Builds a URL for a `store.query(type, query)` call.\n\n Example:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n host = 'https://api.github.com';\n urlForQuery (query, modelName) {\n switch(modelName) {\n case 'repo':\n return `https://api.github.com/orgs/${query.orgId}/repos`;\n default:\n return super.urlForQuery(...arguments);\n }\n }\n }\n ```\n\n @method urlForQuery\n @public\n @param {Object} query\n @param {String} modelName\n @return {String} url\n */\nfunction urlForQuery(query, modelName) {\n return this._buildURL(modelName);\n}\n\n/**\n Builds a URL for a `store.queryRecord(type, query)` call.\n\n Example:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n urlForQueryRecord({ slug }, modelName) {\n let baseUrl = this.buildURL();\n return `${baseUrl}/${encodeURIComponent(slug)}`;\n }\n }\n ```\n\n @method urlForQueryRecord\n @public\n @param {Object} query\n @param {String} modelName\n @return {String} url\n */\nfunction urlForQueryRecord(query, modelName) {\n return this._buildURL(modelName);\n}\n\n/**\n Builds a URL for coalescing multiple `store.findRecord(type, id)`\n records into 1 request when the adapter's `coalesceFindRequests`\n property is `true`.\n\n Example:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n urlForFindMany(ids, modelName) {\n let baseUrl = this.buildURL();\n return `${baseUrl}/coalesce`;\n }\n }\n ```\n\n @method urlForFindMany\n @public\n @param {Array} ids\n @param {String} modelName\n @param {Array} snapshots\n @return {String} url\n */\nfunction urlForFindMany(ids, modelName, snapshots) {\n return this._buildURL(modelName);\n}\n\n/**\n Builds a URL for fetching an async `hasMany` relationship when a URL\n is not provided by the server.\n\n Example:\n\n ```app/adapters/application.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n urlForFindHasMany(id, modelName, snapshot) {\n let baseUrl = this.buildURL(modelName, id);\n return `${baseUrl}/relationships`;\n }\n }\n ```\n\n @method urlForFindHasMany\n @public\n @param {String} id\n @param {String} modelName\n @param {Snapshot} snapshot\n @return {String} url\n */\nfunction urlForFindHasMany(id, modelName, snapshot) {\n return this._buildURL(modelName, id);\n}\n\n/**\n Builds a URL for fetching an async `belongsTo` relationship when a url\n is not provided by the server.\n\n Example:\n\n ```app/adapters/application.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n urlForFindBelongsTo(id, modelName, snapshot) {\n let baseUrl = this.buildURL(modelName, id);\n return `${baseUrl}/relationships`;\n }\n }\n ```\n\n @method urlForFindBelongsTo\n @public\n @param {String} id\n @param {String} modelName\n @param {Snapshot} snapshot\n @return {String} url\n */\nfunction urlForFindBelongsTo(id, modelName, snapshot) {\n return this._buildURL(modelName, id);\n}\n\n/**\n Builds a URL for a `record.save()` call when the record was created\n locally using `store.createRecord()`.\n\n Example:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n urlForCreateRecord(modelName, snapshot) {\n return super.urlForCreateRecord(...arguments) + '/new';\n }\n }\n ```\n\n @method urlForCreateRecord\n @public\n @param {String} modelName\n @param {Snapshot} snapshot\n @return {String} url\n */\nfunction urlForCreateRecord(modelName, snapshot) {\n return this._buildURL(modelName);\n}\n\n/**\n Builds a URL for a `record.save()` call when the record has been updated locally.\n\n Example:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n urlForUpdateRecord(id, modelName, snapshot) {\n return `/${id}/feed?access_token=${snapshot.adapterOptions.token}`;\n }\n }\n ```\n\n @method urlForUpdateRecord\n @public\n @param {String} id\n @param {String} modelName\n @param {Snapshot} snapshot\n @return {String} url\n */\nfunction urlForUpdateRecord(id, modelName, snapshot) {\n return this._buildURL(modelName, id);\n}\n\n/**\n Builds a URL for a `record.save()` call when the record has been deleted locally.\n\n Example:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n urlForDeleteRecord(id, modelName, snapshot) {\n return super.urlForDeleteRecord(...arguments) + '/destroy';\n }\n }\n ```\n\n @method urlForDeleteRecord\n @public\n @param {String} id\n @param {String} modelName\n @param {Snapshot} snapshot\n @return {String} url\n */\nfunction urlForDeleteRecord(id, modelName, snapshot) {\n return this._buildURL(modelName, id);\n}\n\n/**\n @method urlPrefix\n @private\n @param {String} path\n @param {String} parentURL\n @return {String} urlPrefix\n */\nfunction urlPrefix(path, parentURL) {\n let {\n host,\n namespace\n } = this;\n if (!host || host === '/') {\n host = '';\n }\n if (path) {\n // Protocol relative url\n if (/^\\/\\//.test(path) || /http(s)?:\\/\\//.test(path)) {\n // Do nothing, the full host is already included.\n return path;\n\n // Absolute path\n } else if (path.charAt(0) === '/') {\n return `${host}${path}`;\n // Relative path\n } else {\n return `${parentURL}/${path}`;\n }\n }\n\n // No path provided\n let url = [];\n if (host) {\n url.push(host);\n }\n if (namespace) {\n url.push(namespace);\n }\n return url.join('/');\n}\n\n/**\n Determines the pathname for a given type.\n\n By default, it pluralizes the type's name (for example,\n 'post' becomes 'posts' and 'person' becomes 'people').\n\n ### Pathname customization\n\n For example, if you have an object `LineItem` with an\n endpoint of `/line_items/`.\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n import { decamelize } from '@ember/string';\n import { pluralize } from 'ember-inflector';\n\n export default class ApplicationAdapter extends RESTAdapter {\n pathForType(modelName) {\n var decamelized = decamelize(modelName);\n return pluralize(decamelized);\n }\n }\n ```\n\n @method pathForType\n @public\n @param {String} modelName\n @return {String} path\n **/\nfunction pathForType(modelName) {\n let camelized = camelize(modelName);\n return pluralize(camelized);\n}\n\n// we build it this way vs casting to BuildURLMixin so that any\n// changes to the interface surface as errors here.\nconst mixinProps = {\n buildURL,\n _buildURL,\n urlForFindRecord,\n urlForFindAll,\n urlForQueryRecord,\n urlForQuery,\n urlForFindMany,\n urlForFindHasMany,\n urlForFindBelongsTo,\n urlForCreateRecord,\n urlForDeleteRecord,\n urlForUpdateRecord,\n urlPrefix,\n pathForType\n};\nexport default Mixin.create(mixinProps);","import { assert } from '@ember/debug';\nexport default function serializeIntoHash(store, modelClass, snapshot, options = {\n includeId: true\n}) {\n const serializer = store.serializerFor(modelClass.modelName);\n assert(`Cannot serialize record, no serializer defined`, serializer);\n if (typeof serializer.serializeIntoHash === 'function') {\n const data = {};\n serializer.serializeIntoHash(data, modelClass, snapshot, options);\n return data;\n }\n return serializer.serialize(snapshot, options);\n}","/**\n @module @ember-data/adapter/error\n */\nimport { assert } from '@ember/debug';\nimport EmberError from '@ember/error';\n\n/**\n A `AdapterError` is used by an adapter to signal that an error occurred\n during a request to an external API. It indicates a generic error, and\n subclasses are used to indicate specific error states. The following\n subclasses are provided:\n\n - `InvalidError`\n - `TimeoutError`\n - `AbortError`\n - `UnauthorizedError`\n - `ForbiddenError`\n - `NotFoundError`\n - `ConflictError`\n - `ServerError`\n\n To create a custom error to signal a specific error state in communicating\n with an external API, extend the `AdapterError`. For example, if the\n external API exclusively used HTTP `503 Service Unavailable` to indicate\n it was closed for maintenance:\n\n ```app/adapters/maintenance-error.js\n import AdapterError from '@ember-data/adapter/error';\n\n export default AdapterError.extend({ message: \"Down for maintenance.\" });\n ```\n\n This error would then be returned by an adapter's `handleResponse` method:\n\n ```app/adapters/application.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n import MaintenanceError from './maintenance-error';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n handleResponse(status) {\n if (503 === status) {\n return new MaintenanceError();\n }\n\n return super.handleResponse(...arguments);\n }\n }\n ```\n\n And can then be detected in an application and used to send the user to an\n `under-maintenance` route:\n\n ```app/routes/application.js\n import Route from '@ember/routing/route';\n import MaintenanceError from '../adapters/maintenance-error';\n\n export default class ApplicationRoute extends Route {\n actions: {\n error(error, transition) {\n if (error instanceof MaintenanceError) {\n this.transitionTo('under-maintenance');\n return;\n }\n\n // ...other error handling logic\n }\n }\n }\n ```\n\n @main @ember-data/adapter/error\n @class AdapterError\n @public\n*/\nfunction AdapterError(errors, message = 'Adapter operation failed') {\n this.isAdapterError = true;\n let error = EmberError.call(this, message);\n\n // in ember 3.8+ Error is a Native Error and we don't\n // gain these automatically from the EmberError.call\n if (error) {\n this.stack = error.stack;\n this.description = error.description;\n this.fileName = error.fileName;\n this.lineNumber = error.lineNumber;\n this.message = error.message;\n this.name = error.name;\n this.number = error.number;\n }\n this.errors = errors || [{\n title: 'Adapter Error',\n detail: message\n }];\n}\nexport default AdapterError;\nfunction extendFn(ErrorClass) {\n return function ({\n message: defaultMessage\n } = {}) {\n return extend(ErrorClass, defaultMessage);\n };\n}\nfunction extend(ParentErrorClass, defaultMessage) {\n let ErrorClass = function (errors, message) {\n assert('`AdapterError` expects json-api formatted errors array.', Array.isArray(errors || []));\n ParentErrorClass.call(this, errors, message || defaultMessage);\n };\n ErrorClass.prototype = Object.create(ParentErrorClass.prototype);\n ErrorClass.extend = extendFn(ErrorClass);\n return ErrorClass;\n}\nAdapterError.prototype = Object.create(EmberError.prototype);\nAdapterError.prototype.code = 'AdapterError';\nAdapterError.extend = extendFn(AdapterError);\n\n/**\n A `InvalidError` is used by an adapter to signal the external API\n was unable to process a request because the content was not\n semantically correct or meaningful per the API. Usually, this means a\n record failed some form of server-side validation. When a promise\n from an adapter is rejected with a `InvalidError` the record will\n transition to the `invalid` state and the errors will be set to the\n `errors` property on the record.\n\n For Ember Data to correctly map errors to their corresponding\n properties on the model, Ember Data expects each error to be\n a valid JSON-API error object with a `source/pointer` that matches\n the property name. For example, if you had a Post model that\n looked like this.\n\n ```app/models/post.js\n import Model, { attr } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @attr('string') title;\n @attr('string') content;\n }\n ```\n\n To show an error from the server related to the `title` and\n `content` properties your adapter could return a promise that\n rejects with a `InvalidError` object that looks like this:\n\n ```app/adapters/post.js\n import RSVP from 'RSVP';\n import RESTAdapter from '@ember-data/adapter/rest';\n import { InvalidError } from '@ember-data/adapter/error';\n\n export default class ApplicationAdapter extends RESTAdapter {\n updateRecord() {\n // Fictional adapter that always rejects\n return RSVP.reject(new InvalidError([\n {\n detail: 'Must be unique',\n source: { pointer: '/data/attributes/title' }\n },\n {\n detail: 'Must not be blank',\n source: { pointer: '/data/attributes/content'}\n }\n ]));\n }\n }\n ```\n\n Your backend may use different property names for your records the\n store will attempt to extract and normalize the errors using the\n serializer's `extractErrors` method before the errors get added to\n the model. As a result, it is safe for the `InvalidError` to\n wrap the error payload unaltered.\n\n @class InvalidError\n @public\n @extends AdapterError\n*/\nexport const InvalidError = extend(AdapterError, 'The adapter rejected the commit because it was invalid');\nInvalidError.prototype.code = 'InvalidError';\n\n/**\n A `TimeoutError` is used by an adapter to signal that a request\n to the external API has timed out. I.e. no response was received from\n the external API within an allowed time period.\n\n An example use case would be to warn the user to check their internet\n connection if an adapter operation has timed out:\n\n ```app/routes/application.js\n import Route from '@ember/routing/route';\n import { TimeoutError } from '@ember-data/adapter/error';\n import { action } from '@ember/object';\n\n export default class ApplicationRoute extends Route {\n @action\n error(error, transition) {\n if (error instanceof TimeoutError) {\n // alert the user\n alert('Are you still connected to the Internet?');\n return;\n }\n\n // ...other error handling logic\n }\n }\n ```\n\n @class TimeoutError\n @public\n @extends AdapterError\n*/\nexport const TimeoutError = extend(AdapterError, 'The adapter operation timed out');\nTimeoutError.prototype.code = 'TimeoutError';\n\n/**\n A `AbortError` is used by an adapter to signal that a request to\n the external API was aborted. For example, this can occur if the user\n navigates away from the current page after a request to the external API\n has been initiated but before a response has been received.\n\n @class AbortError\n @public\n @extends AdapterError\n*/\nexport const AbortError = extend(AdapterError, 'The adapter operation was aborted');\nAbortError.prototype.code = 'AbortError';\n\n/**\n A `UnauthorizedError` equates to a HTTP `401 Unauthorized` response\n status. It is used by an adapter to signal that a request to the external\n API was rejected because authorization is required and has failed or has not\n yet been provided.\n\n An example use case would be to redirect the user to a login route if a\n request is unauthorized:\n\n ```app/routes/application.js\n import Route from '@ember/routing/route';\n import { UnauthorizedError } from '@ember-data/adapter/error';\n import { action } from '@ember/object';\n\n export default class ApplicationRoute extends Route {\n @action\n error(error, transition) {\n if (error instanceof UnauthorizedError) {\n // go to the login route\n this.transitionTo('login');\n return;\n }\n\n // ...other error handling logic\n }\n }\n ```\n\n @class UnauthorizedError\n @public\n @extends AdapterError\n*/\nexport const UnauthorizedError = extend(AdapterError, 'The adapter operation is unauthorized');\nUnauthorizedError.prototype.code = 'UnauthorizedError';\n\n/**\n A `ForbiddenError` equates to a HTTP `403 Forbidden` response status.\n It is used by an adapter to signal that a request to the external API was\n valid but the server is refusing to respond to it. If authorization was\n provided and is valid, then the authenticated user does not have the\n necessary permissions for the request.\n\n @class ForbiddenError\n @public\n @extends AdapterError\n*/\nexport const ForbiddenError = extend(AdapterError, 'The adapter operation is forbidden');\nForbiddenError.prototype.code = 'ForbiddenError';\n\n/**\n A `NotFoundError` equates to a HTTP `404 Not Found` response status.\n It is used by an adapter to signal that a request to the external API\n was rejected because the resource could not be found on the API.\n\n An example use case would be to detect if the user has entered a route\n for a specific model that does not exist. For example:\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n import { NotFoundError } from '@ember-data/adapter/error';\n import { inject as service } from '@ember/service';\n import { action } from '@ember/object';\n\n export default class PostRoute extends Route {\n @service store;\n model(params) {\n return this.get('store').findRecord('post', params.post_id);\n }\n @action\n error(error, transition) {\n if (error instanceof NotFoundError) {\n // redirect to a list of all posts instead\n this.transitionTo('posts');\n } else {\n // otherwise let the error bubble\n return true;\n }\n }\n }\n ```\n\n @class NotFoundError\n @public\n @extends AdapterError\n*/\nexport const NotFoundError = extend(AdapterError, 'The adapter could not find the resource');\nNotFoundError.prototype.code = 'NotFoundError';\n\n/**\n A `ConflictError` equates to a HTTP `409 Conflict` response status.\n It is used by an adapter to indicate that the request could not be processed\n because of a conflict in the request. An example scenario would be when\n creating a record with a client-generated ID but that ID is already known\n to the external API.\n\n @class ConflictError\n @public\n @extends AdapterError\n*/\nexport const ConflictError = extend(AdapterError, 'The adapter operation failed due to a conflict');\nConflictError.prototype.code = 'ConflictError';\n\n/**\n A `ServerError` equates to a HTTP `500 Internal Server Error` response\n status. It is used by the adapter to indicate that a request has failed\n because of an error in the external API.\n\n @class ServerError\n @public\n @extends AdapterError\n*/\nexport const ServerError = extend(AdapterError, 'The adapter operation failed due to a server error');\nServerError.prototype.code = 'ServerError';\nexport { errorsHashToArray, errorsArrayToHash } from '@ember-data/store/-private';","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n/**\n ## Overview\n\n In order to properly fetch and update data, EmberData\n needs to understand how to connect to your API.\n\n `Adapters` accept various kinds of requests from the store\n and manage fulfillment of the request from your API.\n\n ### Request Flow\n\n When the store decides it needs to issue a request it uses the\n following flow to manage the request and process the data.\n\n - find the appropriate adapter\n - issue the request to the adapter\n - await the adapter's response\n - if an error occurs reject with the error\n - if no error\n - if there is response data\n - pass the response data to the appropriate serializer\n - update the cache using the JSON:API formatted data from the serializer's response\n - return the primary record(s) associated with the request\n\n ### Request Errors\n\n When a request errors and your adapter does not have the ability to recover from the error,\n you may either reject the promise returned by your adapter method with the error or simply\n throw the error.\n\n If the request was for a `createRecord` `updateRecord` or `deleteRecord` special rules\n apply to how this error will affect the state of the store and additional properties on\n the `Error` class may be used. See the documentation for these methods in the\n `MinimumAdapterInterface` for more information.\n\n ### Implementing an Adapter\n\n There are seven required adapter methods, one for each of\n the primary request types that EmberData issues.\n\n They are:\n\n - findRecord\n - findAll\n - queryRecord\n - query\n - createRecord\n - updateRecord\n - deleteRecord\n\n Each of these request types has a matching store method that triggers it\n and matching `requestType` that is passed to the serializer's\n `normalizeResponse` method.\n\n If your app only reads data but never writes data, it is not necessary\n to implement the methods for create, update, and delete. This extends to\n all of the store's find methods with the exception of `findRecord` (`findAll`,\n `query`, `queryRecord`): if you do not use the store method in your app then\n your Adapter does not need the method.\n\n ```ts\n import EmberObject from '@ember/object';\n\n async function fetchData(url, options = {}) {\n let response = await fetch(url, options);\n return response.toJSON();\n }\n\n export default class ApplicationAdapter extends EmberObject {\n findRecord(_, { modelName }, id) {\n return fetchData(`./${modelName}s/${id}`);\n }\n }\n ```\n\n ### Adapter Resolution\n\n `store.adapterFor(name)` will lookup adapters defined in `app/adapters/` and\n return an instance.\n\n `adapterFor` first attempts to find an adapter with an exact match on `name`,\n then falls back to checking for the presence of an adapter named `application`.\n\n If no adapter is found, an error will be thrown.\n\n ```ts\n store.adapterFor('author');\n\n // lookup paths (in order) =>\n // app/adapters/author.js\n // app/adapters/application.js\n ```\n\n Most requests in EmberData are made with respect to a particular `type` (or `modelName`)\n (e.g., \"get me the full collection of **books**\" or \"get me the **employee** whose id is 37\"). We\n refer to this as the **primary** resource `type`.\n\n `adapterFor` is used by the store to find an adapter with a name matching that of the primary\n resource `type` for the request, which then falls back to the `application` adapter.\n\n It is recommended that applications define only a single `application` adapter and serializer\n where possible, only implementing an adapter specific to the `type` when absolutely necessary.\n\n If you need to support multiple API versions for the same type, the per-type strategy for\n defining adapters might not be adequate.\n\n If you have multiple APIs or multiple API versions and the single application adapter and per-type\n strategy does not suite your needs, one strategy is to write an `application` adapter and serializer\n that make use of `options` to specify the desired format when making a request, then forwards to the\n request to the desired adapter or serializer as needed.\n\n ```app/adapters/application.js\n export default class Adapter extends EmberObject {\n findRecord(store, schema, id, snapshot) {\n let { apiVersion } = snapshot.adapterOptions;\n return this.adapterFor(`-api-${apiVersion}`).findRecord(store, schema, id, snapshot);\n }\n }\n ```\n\n ### Using an Adapter\n\n Any adapter in `app/adapters/` can be looked up by `name` using `store.adapterFor(name)`.\n\n ### Default Adapters\n\n Applications whose API's structure endpoint URLs *very close to* or *exactly* the **REST**\n or **JSON:API** convention, the `@ember-data/adapter` package contains implementations\n these applications can extend.\n\n Many applications will find writing their own adapter to be allow greater flexibility,\n customization, and maintenance than attempting to override methods in these adapters.\n\n @module @ember-data/adapter\n @main @ember-data/adapter\n*/\n\nimport EmberObject from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { DEBUG } from '@glimmer/env';\nimport { Promise as RSVPPromise } from 'rsvp';\n/**\n An adapter is an object that receives requests from a store and\n translates them into the appropriate action to take against your\n persistence layer. The persistence layer is usually an HTTP API but\n may be anything, such as the browser's local storage. Typically the\n adapter is not invoked directly instead its functionality is accessed\n through the `store`.\n\n ### Creating an Adapter\n\n Create a new subclass of `Adapter` in the `app/adapters` folder:\n\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n\n export default Adapter.extend({\n // ...your code here\n });\n ```\n\n Model-specific adapters can be created by putting your adapter\n class in an `app/adapters/` + `model-name` + `.js` file of the application.\n\n ```app/adapters/post.js\n import Adapter from '@ember-data/adapter';\n\n export default Adapter.extend({\n // ...Post-specific adapter code goes here\n });\n ```\n\n `Adapter` is an abstract base class that you should override in your\n application to customize it for your backend. The minimum set of methods\n that you should implement is:\n\n * `findRecord()`\n * `createRecord()`\n * `updateRecord()`\n * `deleteRecord()`\n * `findAll()`\n * `query()`\n\n To improve the network performance of your application, you can optimize\n your adapter by overriding these lower-level methods:\n\n * `findMany()`\n\n\n For an example of the implementation, see `RESTAdapter`, the\n included REST adapter.\n\n @class Adapter\n @public\n @extends Ember.EmberObject\n*/\nlet Adapter = (_class = class Adapter extends EmberObject {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n }\n /**\n The `findRecord()` method is invoked when the store is asked for a record that\n has not previously been loaded. In response to `findRecord()` being called, you\n should query your persistence layer for a record with the given ID. The `findRecord`\n method should return a promise that will resolve to a JavaScript object that will be\n normalized by the serializer.\n Here is an example of the `findRecord` implementation:\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n findRecord(store, type, id, snapshot) {\n return new RSVP.Promise(function(resolve, reject) {\n $.getJSON(`/${type.modelName}/${id}`).then(function(data) {\n resolve(data);\n }, function(jqXHR) {\n reject(jqXHR);\n });\n });\n }\n }\n ```\n @method findRecord\n @param {Store} store\n @param {Model} type\n @param {String} id\n @param {Snapshot} snapshot\n @return {Promise} promise\n @public\n */\n findRecord(store, type, id, snapshot) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a findRecord override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n The `findAll()` method is used to retrieve all records for a given type.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n findAll(store, type) {\n return new RSVP.Promise(function(resolve, reject) {\n $.getJSON(`/${type.modelName}`).then(function(data) {\n resolve(data);\n }, function(jqXHR) {\n reject(jqXHR);\n });\n });\n }\n }\n ```\n @method findAll\n @param {Store} store\n @param {Model} type\n @param {undefined} neverSet a value is never provided to this argument\n @param {SnapshotRecordArray} snapshotRecordArray\n @return {Promise} promise\n @public\n */\n findAll(store, type, neverSet, snapshotRecordArray) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a findAll override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n This method is called when you call `query` on the store.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n query(store, type, query) {\n return new RSVP.Promise(function(resolve, reject) {\n $.getJSON(`/${type.modelName}`, query).then(function(data) {\n resolve(data);\n }, function(jqXHR) {\n reject(jqXHR);\n });\n });\n }\n }\n ```\n @method query\n @param {Store} store\n @param {Model} type\n @param {Object} query\n @param {AdapterPopulatedRecordArray} recordArray\n @param {Object} adapterOptions\n @return {Promise} promise\n @public\n */\n query(store, type, query) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a query override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n The `queryRecord()` method is invoked when the store is asked for a single\n record through a query object.\n In response to `queryRecord()` being called, you should always fetch fresh\n data. Once found, you can asynchronously call the store's `push()` method\n to push the record into the store.\n Here is an example `queryRecord` implementation:\n Example\n ```app/adapters/application.js\n import Adapter, { BuildURLMixin } from '@ember-data/adapter';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter.extend(BuildURLMixin) {\n queryRecord(store, type, query) {\n return new RSVP.Promise(function(resolve, reject) {\n $.getJSON(`/${type.modelName}`, query).then(function(data) {\n resolve(data);\n }, function(jqXHR) {\n reject(jqXHR);\n });\n });\n }\n }\n ```\n @method queryRecord\n @param {Store} store\n @param {subclass of Model} type\n @param {Object} query\n @param {Object} adapterOptions\n @return {Promise} promise\n @public\n */\n queryRecord(store, type, query, adapterOptions) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a queryRecord override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n If the globally unique IDs for your records should be generated on the client,\n implement the `generateIdForRecord()` method. This method will be invoked\n each time you create a new record, and the value returned from it will be\n assigned to the record's `primaryKey`.\n Most traditional REST-like HTTP APIs will not use this method. Instead, the ID\n of the record will be set by the server, and your adapter will update the store\n with the new ID when it calls `didCreateRecord()`. Only implement this method if\n you intend to generate record IDs on the client-side.\n The `generateIdForRecord()` method will be invoked with the requesting store as\n the first parameter and the newly created record as the second parameter:\n ```javascript\n import Adapter from '@ember-data/adapter';\n import { v4 } from 'uuid';\n export default class ApplicationAdapter extends Adapter {\n generateIdForRecord(store, type, inputProperties) {\n return v4();\n }\n }\n ```\n @method generateIdForRecord\n @param {Store} store\n @param {Model} type the Model class of the record\n @param {Object} inputProperties a hash of properties to set on the\n newly created record.\n @return {(String|Number)} id\n @public\n */\n\n /**\n Proxies to the serializer's `serialize` method.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default class ApplicationAdapter extends Adapter {\n createRecord(store, type, snapshot) {\n let data = this.serialize(snapshot, { includeId: true });\n let url = `/${type.modelName}`;\n // ...\n }\n }\n ```\n @method serialize\n @param {Snapshot} snapshot\n @param {Object} options\n @return {Object} serialized snapshot\n @public\n */\n serialize(snapshot, options) {\n return snapshot.serialize(options);\n }\n\n /**\n Implement this method in a subclass to handle the creation of\n new records.\n Serializes the record and sends it to the server.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import { run } from '@ember/runloop';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n createRecord(store, type, snapshot) {\n let data = this.serialize(snapshot, { includeId: true });\n return new RSVP.Promise(function (resolve, reject) {\n $.ajax({\n type: 'POST',\n url: `/${type.modelName}`,\n dataType: 'json',\n data: data\n }).then(function (data) {\n run(null, resolve, data);\n }, function (jqXHR) {\n jqXHR.then = null; // tame jQuery's ill mannered promises\n run(null, reject, jqXHR);\n });\n });\n }\n }\n ```\n @method createRecord\n @param {Store} store\n @param {Model} type the Model class of the record\n @param {Snapshot} snapshot\n @return {Promise} promise\n @public\n */\n createRecord(store, type, snapshot) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a createRecord override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n Implement this method in a subclass to handle the updating of\n a record.\n Serializes the record update and sends it to the server.\n The updateRecord method is expected to return a promise that will\n resolve with the serialized record. This allows the backend to\n inform the Ember Data store the current state of this record after\n the update. If it is not possible to return a serialized record\n the updateRecord promise can also resolve with `undefined` and the\n Ember Data store will assume all of the updates were successfully\n applied on the backend.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import { run } from '@ember/runloop';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n updateRecord(store, type, snapshot) {\n let data = this.serialize(snapshot, { includeId: true });\n let id = snapshot.id;\n return new RSVP.Promise(function(resolve, reject) {\n $.ajax({\n type: 'PUT',\n url: `/${type.modelName}/${id}`,\n dataType: 'json',\n data: data\n }).then(function(data) {\n run(null, resolve, data);\n }, function(jqXHR) {\n jqXHR.then = null; // tame jQuery's ill mannered promises\n run(null, reject, jqXHR);\n });\n });\n }\n }\n ```\n @method updateRecord\n @param {Store} store\n @param {Model} type the Model class of the record\n @param {Snapshot} snapshot\n @return {Promise} promise\n @public\n */\n updateRecord(store, type, snapshot) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a updateRecord override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n Implement this method in a subclass to handle the deletion of\n a record.\n Sends a delete request for the record to the server.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import { run } from '@ember/runloop';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n deleteRecord(store, type, snapshot) {\n let data = this.serialize(snapshot, { includeId: true });\n let id = snapshot.id;\n return new RSVP.Promise(function(resolve, reject) {\n $.ajax({\n type: 'DELETE',\n url: `/${type.modelName}/${id}`,\n dataType: 'json',\n data: data\n }).then(function(data) {\n run(null, resolve, data);\n }, function(jqXHR) {\n jqXHR.then = null; // tame jQuery's ill mannered promises\n run(null, reject, jqXHR);\n });\n });\n }\n }\n ```\n @method deleteRecord\n @param {Store} store\n @param {Model} type the Model class of the record\n @param {Snapshot} snapshot\n @return {Promise} promise\n @public\n */\n deleteRecord(store, type, snapshot) {\n if (DEBUG) {\n throw new Error('You subclassed the Adapter class but missing a deleteRecord override');\n }\n return RSVPPromise.resolve();\n }\n\n /**\n By default the store will try to coalesce all `findRecord` calls within the same runloop\n into as few requests as possible by calling groupRecordsForFindMany and passing it into a findMany call.\n You can opt out of this behaviour by either not implementing the findMany hook or by setting\n coalesceFindRequests to false.\n @property coalesceFindRequests\n @public\n @type {boolean}\n */\n get coalesceFindRequests() {\n let coalesceFindRequests = this._coalesceFindRequests;\n if (typeof coalesceFindRequests === 'boolean') {\n return coalesceFindRequests;\n }\n return this._coalesceFindRequests = true;\n }\n set coalesceFindRequests(value) {\n this._coalesceFindRequests = value;\n }\n\n /**\n The store will call `findMany` instead of multiple `findRecord`\n requests to find multiple records at once if coalesceFindRequests\n is true.\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n import { run } from '@ember/runloop';\n import RSVP from 'RSVP';\n import $ from 'jquery';\n export default class ApplicationAdapter extends Adapter {\n findMany(store, type, ids, snapshots) {\n return new RSVP.Promise(function(resolve, reject) {\n $.ajax({\n type: 'GET',\n url: `/${type.modelName}/`,\n dataType: 'json',\n data: { filter: { id: ids.join(',') } }\n }).then(function(data) {\n run(null, resolve, data);\n }, function(jqXHR) {\n jqXHR.then = null; // tame jQuery's ill mannered promises\n run(null, reject, jqXHR);\n });\n });\n }\n }\n ```\n @method findMany\n @param {Store} store\n @param {Model} type the Model class of the records\n @param {Array} ids\n @param {Array} snapshots\n @return {Promise} promise\n @public\n */\n\n /**\n Organize records into groups, each of which is to be passed to separate\n calls to `findMany`.\n For example, if your API has nested URLs that depend on the parent, you will\n want to group records by their parent.\n The default implementation returns the records as a single group.\n @method groupRecordsForFindMany\n @public\n @param {Store} store\n @param {Array} snapshots\n @return {Array} an array of arrays of records, each of which is to be\n loaded separately by `findMany`.\n */\n groupRecordsForFindMany(store, snapshots) {\n return [snapshots];\n }\n\n /**\n This method is used by the store to determine if the store should\n reload a record from the adapter when a record is requested by\n `store.findRecord`.\n If this method returns `true`, the store will re-fetch a record from\n the adapter. If this method returns `false`, the store will resolve\n immediately using the cached record.\n For example, if you are building an events ticketing system, in which users\n can only reserve tickets for 20 minutes at a time, and want to ensure that\n in each route you have data that is no more than 20 minutes old you could\n write:\n ```javascript\n shouldReloadRecord(store, ticketSnapshot) {\n let lastAccessedAt = ticketSnapshot.attr('lastAccessedAt');\n let timeDiff = moment().diff(lastAccessedAt, 'minutes');\n if (timeDiff > 20) {\n return true;\n } else {\n return false;\n }\n }\n ```\n This method would ensure that whenever you do `store.findRecord('ticket',\n id)` you will always get a ticket that is no more than 20 minutes old. In\n case the cached version is more than 20 minutes old, `findRecord` will not\n resolve until you fetched the latest version.\n By default this hook returns `false`, as most UIs should not block user\n interactions while waiting on data update.\n Note that, with default settings, `shouldBackgroundReloadRecord` will always\n re-fetch the records in the background even if `shouldReloadRecord` returns\n `false`. You can override `shouldBackgroundReloadRecord` if this does not\n suit your use case.\n @since 1.13.0\n @method shouldReloadRecord\n @param {Store} store\n @param {Snapshot} snapshot\n @return {Boolean}\n @public\n */\n shouldReloadRecord(store, snapshot) {\n return false;\n }\n\n /**\n This method is used by the store to determine if the store should\n reload all records from the adapter when records are requested by\n `store.findAll`.\n If this method returns `true`, the store will re-fetch all records from\n the adapter. If this method returns `false`, the store will resolve\n immediately using the cached records.\n For example, if you are building an events ticketing system, in which users\n can only reserve tickets for 20 minutes at a time, and want to ensure that\n in each route you have data that is no more than 20 minutes old you could\n write:\n ```javascript\n shouldReloadAll(store, snapshotArray) {\n let snapshots = snapshotArray.snapshots();\n return snapshots.any((ticketSnapshot) => {\n let lastAccessedAt = ticketSnapshot.attr('lastAccessedAt');\n let timeDiff = moment().diff(lastAccessedAt, 'minutes');\n if (timeDiff > 20) {\n return true;\n } else {\n return false;\n }\n });\n }\n ```\n This method would ensure that whenever you do `store.findAll('ticket')` you\n will always get a list of tickets that are no more than 20 minutes old. In\n case a cached version is more than 20 minutes old, `findAll` will not\n resolve until you fetched the latest versions.\n By default, this method returns `true` if the passed `snapshotRecordArray`\n is empty (meaning that there are no records locally available yet),\n otherwise, it returns `false`.\n Note that, with default settings, `shouldBackgroundReloadAll` will always\n re-fetch all the records in the background even if `shouldReloadAll` returns\n `false`. You can override `shouldBackgroundReloadAll` if this does not suit\n your use case.\n @since 1.13.0\n @method shouldReloadAll\n @param {Store} store\n @param {SnapshotRecordArray} snapshotRecordArray\n @return {Boolean}\n @public\n */\n shouldReloadAll(store, snapshotRecordArray) {\n return !snapshotRecordArray.length;\n }\n\n /**\n This method is used by the store to determine if the store should\n reload a record after the `store.findRecord` method resolves a\n cached record.\n This method is *only* checked by the store when the store is\n returning a cached record.\n If this method returns `true` the store will re-fetch a record from\n the adapter.\n For example, if you do not want to fetch complex data over a mobile\n connection, or if the network is down, you can implement\n `shouldBackgroundReloadRecord` as follows:\n ```javascript\n shouldBackgroundReloadRecord(store, snapshot) {\n let { downlink, effectiveType } = navigator.connection;\n return downlink > 0 && effectiveType === '4g';\n }\n ```\n By default, this hook returns `true` so the data for the record is updated\n in the background.\n @since 1.13.0\n @method shouldBackgroundReloadRecord\n @param {Store} store\n @param {Snapshot} snapshot\n @return {Boolean}\n @public\n */\n shouldBackgroundReloadRecord(store, Snapshot) {\n return true;\n }\n\n /**\n This method is used by the store to determine if the store should\n reload a record array after the `store.findAll` method resolves\n with a cached record array.\n This method is *only* checked by the store when the store is\n returning a cached record array.\n If this method returns `true` the store will re-fetch all records\n from the adapter.\n For example, if you do not want to fetch complex data over a mobile\n connection, or if the network is down, you can implement\n `shouldBackgroundReloadAll` as follows:\n ```javascript\n shouldBackgroundReloadAll(store, snapshotArray) {\n let { downlink, effectiveType } = navigator.connection;\n return downlink > 0 && effectiveType === '4g';\n }\n ```\n By default this method returns `true`, indicating that a background reload\n should always be triggered.\n @since 1.13.0\n @method shouldBackgroundReloadAll\n @param {Store} store\n @param {SnapshotRecordArray} snapshotRecordArray\n @return {Boolean}\n @public\n */\n shouldBackgroundReloadAll(store, snapshotRecordArray) {\n return true;\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { Adapter as default };\nexport { BuildURLMixin } from './-private';","/**\n @module @ember-data/adapter/json-api\n */\nimport { assert } from '@ember/debug';\nimport { dasherize } from '@ember/string';\nimport { pluralize } from 'ember-inflector';\nimport { serializeIntoHash } from './-private';\nimport RESTAdapter from './rest';\n\n/**\n The `JSONAPIAdapter` is the default adapter used by Ember Data. It\n is responsible for transforming the store's requests into HTTP\n requests that follow the [JSON API](http://jsonapi.org/format/)\n format.\n\n ## JSON API Conventions\n\n The JSONAPIAdapter uses JSON API conventions for building the URL\n for a record and selecting the HTTP verb to use with a request. The\n actions you can take on a record map onto the following URLs in the\n JSON API adapter:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n Action\n \n HTTP Verb\n \n URL\n
    \n `store.findRecord('post', 123)`\n \n GET\n \n /posts/123\n
    \n `store.findAll('post')`\n \n GET\n \n /posts\n
    \n Update `postRecord.save()`\n \n PATCH\n \n /posts/123\n
    \n Create `store.createRecord('post').save()`\n \n POST\n \n /posts\n
    \n Delete `postRecord.destroyRecord()`\n \n DELETE\n \n /posts/123\n
    \n\n ## Success and failure\n\n The JSONAPIAdapter will consider a success any response with a\n status code of the 2xx family (\"Success\"), as well as 304 (\"Not\n Modified\"). Any other status code will be considered a failure.\n\n On success, the request promise will be resolved with the full\n response payload.\n\n Failed responses with status code 422 (\"Unprocessable Entity\") will\n be considered \"invalid\". The response will be discarded, except for\n the `errors` key. The request promise will be rejected with a\n `InvalidError`. This error object will encapsulate the saved\n `errors` value.\n\n Any other status codes will be treated as an adapter error. The\n request promise will be rejected, similarly to the invalid case,\n but with an instance of `AdapterError` instead.\n\n ### Endpoint path customization\n\n Endpoint paths can be prefixed with a `namespace` by setting the\n namespace property on the adapter:\n\n ```app/adapters/application.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n namespace = 'api/1';\n }\n ```\n Requests for the `person` model would now target `/api/1/people/1`.\n\n ### Host customization\n\n An adapter can target other hosts by setting the `host` property.\n\n ```app/adapters/application.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n\n export default class ApplicationAdapter extends JSONAPIAdapter {\n host = 'https://api.example.com';\n }\n ```\n\n Requests for the `person` model would now target\n `https://api.example.com/people/1`.\n\n @since 1.13.0\n @class JSONAPIAdapter\n @main @ember-data/adapter/json-api\n @public\n @constructor\n @extends RESTAdapter\n*/\nclass JSONAPIAdapter extends RESTAdapter {\n constructor(...args) {\n super(...args);\n this._defaultContentType = 'application/vnd.api+json';\n }\n /**\n @method ajaxOptions\n @private\n @param {String} url\n @param {String} type The request type GET, POST, PUT, DELETE etc.\n @param {Object} options\n @return {Object}\n */\n ajaxOptions(url, type, options = {}) {\n let hash = super.ajaxOptions(url, type, options);\n hash.headers['Accept'] = hash.headers['Accept'] || 'application/vnd.api+json';\n return hash;\n }\n\n /**\n By default the JSONAPIAdapter will send each find request coming from a `store.find`\n or from accessing a relationship separately to the server. If your server supports passing\n ids as a query string, you can set coalesceFindRequests to true to coalesce all find requests\n within a single runloop.\n For example, if you have an initial payload of:\n ```javascript\n {\n data: {\n id: 1,\n type: 'post',\n relationship: {\n comments: {\n data: [\n { id: 1, type: 'comment' },\n { id: 2, type: 'comment' }\n ]\n }\n }\n }\n }\n ```\n By default calling `post.get('comments')` will trigger the following requests(assuming the\n comments haven't been loaded before):\n ```\n GET /comments/1\n GET /comments/2\n ```\n If you set coalesceFindRequests to `true` it will instead trigger the following request:\n ```\n GET /comments?filter[id]=1,2\n ```\n Setting coalesceFindRequests to `true` also works for `store.find` requests and `belongsTo`\n relationships accessed within the same runloop. If you set `coalesceFindRequests: true`\n ```javascript\n store.findRecord('comment', 1);\n store.findRecord('comment', 2);\n ```\n will also send a request to: `GET /comments?filter[id]=1,2`\n Note: Requests coalescing rely on URL building strategy. So if you override `buildURL` in your app\n `groupRecordsForFindMany` more likely should be overridden as well in order for coalescing to work.\n @property coalesceFindRequests\n @public\n @type {boolean}\n */\n get coalesceFindRequests() {\n let coalesceFindRequests = this._coalesceFindRequests;\n if (typeof coalesceFindRequests === 'boolean') {\n return coalesceFindRequests;\n }\n return this._coalesceFindRequests = false;\n }\n set coalesceFindRequests(value) {\n this._coalesceFindRequests = value;\n }\n findMany(store, type, ids, snapshots) {\n let url = this.buildURL(type.modelName, ids, snapshots, 'findMany');\n return this.ajax(url, 'GET', {\n data: {\n filter: {\n id: ids.join(',')\n }\n }\n });\n }\n pathForType(modelName) {\n let dasherized = dasherize(modelName);\n return pluralize(dasherized);\n }\n updateRecord(store, schema, snapshot) {\n const data = serializeIntoHash(store, schema, snapshot);\n const type = snapshot.modelName;\n const id = snapshot.id;\n assert(`Attempted to update the ${type} record, but the record has no id`, typeof id === 'string' && id.length > 0);\n let url = this.buildURL(type, id, snapshot, 'updateRecord');\n return this.ajax(url, 'PATCH', {\n data: data\n });\n }\n}\nexport default JSONAPIAdapter;","var _dec, _class;\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n/**\n @module @ember-data/adapter/rest\n*/\nimport { getOwner } from '@ember/application';\nimport { assert, warn } from '@ember/debug';\nimport { computed } from '@ember/object';\nimport { join } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\nimport { Promise as RSVPPromise } from 'rsvp';\nimport { determineBodyPromise, fetch, parseResponseHeaders, serializeIntoHash, serializeQueryParams } from './-private';\nimport AdapterError, { AbortError, ConflictError, ForbiddenError, InvalidError, NotFoundError, ServerError, TimeoutError, UnauthorizedError } from './error';\nimport Adapter, { BuildURLMixin } from './index';\n/**\n The REST adapter allows your store to communicate with an HTTP server by\n transmitting JSON via XHR. Most Ember.js apps that consume a JSON API\n should use the REST adapter.\n\n This adapter is designed around the idea that the JSON exchanged with\n the server should be conventional.\n\n ## Success and failure\n\n The REST adapter will consider a success any response with a status code\n of the 2xx family (\"Success\"), as well as 304 (\"Not Modified\"). Any other\n status code will be considered a failure.\n\n On success, the request promise will be resolved with the full response\n payload.\n\n Failed responses with status code 422 (\"Unprocessable Entity\") will be\n considered \"invalid\". The response will be discarded, except for the\n `errors` key. The request promise will be rejected with a `InvalidError`.\n This error object will encapsulate the saved `errors` value.\n\n Any other status codes will be treated as an \"adapter error\". The request\n promise will be rejected, similarly to the \"invalid\" case, but with\n an instance of `AdapterError` instead.\n\n ## JSON Structure\n\n The REST adapter expects the JSON returned from your server to follow\n these conventions.\n\n ### Object Root\n\n The JSON payload should be an object that contains the record inside a\n root property. For example, in response to a `GET` request for\n `/posts/1`, the JSON should look like this:\n\n ```js\n {\n \"posts\": {\n \"id\": 1,\n \"title\": \"I'm Running to Reform the W3C's Tag\",\n \"author\": \"Yehuda Katz\"\n }\n }\n ```\n\n Similarly, in response to a `GET` request for `/posts`, the JSON should\n look like this:\n\n ```js\n {\n \"posts\": [\n {\n \"id\": 1,\n \"title\": \"I'm Running to Reform the W3C's Tag\",\n \"author\": \"Yehuda Katz\"\n },\n {\n \"id\": 2,\n \"title\": \"Rails is omakase\",\n \"author\": \"D2H\"\n }\n ]\n }\n ```\n\n Note that the object root can be pluralized for both a single-object response\n and an array response: the REST adapter is not strict on this. Further, if the\n HTTP server responds to a `GET` request to `/posts/1` (e.g. the response to a\n `findRecord` query) with more than one object in the array, Ember Data will\n only display the object with the matching ID.\n\n ### Conventional Names\n\n Attribute names in your JSON payload should be the camelCased versions of\n the attributes in your Ember.js models.\n\n For example, if you have a `Person` model:\n\n ```app/models/person.js\n import Model, { attr } from '@ember-data/model';\n\n export default Model.extend({\n firstName: attr('string'),\n lastName: attr('string'),\n occupation: attr('string')\n });\n ```\n\n The JSON returned should look like this:\n\n ```js\n {\n \"people\": {\n \"id\": 5,\n \"firstName\": \"Zaphod\",\n \"lastName\": \"Beeblebrox\",\n \"occupation\": \"President\"\n }\n }\n ```\n\n #### Relationships\n\n Relationships are usually represented by ids to the record in the\n relationship. The related records can then be sideloaded in the\n response under a key for the type.\n\n ```js\n {\n \"posts\": {\n \"id\": 5,\n \"title\": \"I'm Running to Reform the W3C's Tag\",\n \"author\": \"Yehuda Katz\",\n \"comments\": [1, 2]\n },\n \"comments\": [{\n \"id\": 1,\n \"author\": \"User 1\",\n \"message\": \"First!\",\n }, {\n \"id\": 2,\n \"author\": \"User 2\",\n \"message\": \"Good Luck!\",\n }]\n }\n ```\n\n If the records in the relationship are not known when the response\n is serialized it's also possible to represent the relationship as a\n URL using the `links` key in the response. Ember Data will fetch\n this URL to resolve the relationship when it is accessed for the\n first time.\n\n ```js\n {\n \"posts\": {\n \"id\": 5,\n \"title\": \"I'm Running to Reform the W3C's Tag\",\n \"author\": \"Yehuda Katz\",\n \"links\": {\n \"comments\": \"/posts/5/comments\"\n }\n }\n }\n ```\n\n ### Errors\n\n If a response is considered a failure, the JSON payload is expected to include\n a top-level key `errors`, detailing any specific issues. For example:\n\n ```js\n {\n \"errors\": {\n \"msg\": \"Something went wrong\"\n }\n }\n ```\n\n This adapter does not make any assumptions as to the format of the `errors`\n object. It will simply be passed along as is, wrapped in an instance\n of `InvalidError` or `AdapterError`. The serializer can interpret it\n afterwards.\n\n ## Customization\n\n ### Endpoint path customization\n\n Endpoint paths can be prefixed with a `namespace` by setting the namespace\n property on the adapter:\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n namespace = 'api/1';\n }\n ```\n Requests for the `Person` model would now target `/api/1/people/1`.\n\n ### Host customization\n\n An adapter can target other hosts by setting the `host` property.\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n\n export default class ApplicationAdapter extends RESTAdapter {\n host = 'https://api.example.com';\n }\n ```\n\n ### Headers customization\n\n Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary\n headers can be set as key/value pairs on the `RESTAdapter`'s `headers`\n object and Ember Data will send them along with each ajax request.\n\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n import { computed } from '@ember/object';\n\n export default class ApplicationAdapter extends RESTAdapter {\n headers: computed(function() {\n return {\n 'API_KEY': 'secret key',\n 'ANOTHER_HEADER': 'Some header value'\n };\n }\n }\n ```\n\n `headers` can also be used as a computed property to support dynamic\n headers. In the example below, the `session` object has been\n injected into an adapter by Ember's container.\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n import { computed } from '@ember/object';\n\n export default class ApplicationAdapter extends RESTAdapter {\n headers: computed('session.authToken', function() {\n return {\n 'API_KEY': this.get('session.authToken'),\n 'ANOTHER_HEADER': 'Some header value'\n };\n })\n }\n ```\n\n In some cases, your dynamic headers may require data from some\n object outside of Ember's observer system (for example\n `document.cookie`). You can use the\n [volatile](/api/classes/Ember.ComputedProperty.html?anchor=volatile)\n function to set the property into a non-cached mode causing the headers to\n be recomputed with every request.\n\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n import { get } from '@ember/object';\n import { computed } from '@ember/object';\n\n export default class ApplicationAdapter extends RESTAdapter {\n headers: computed(function() {\n return {\n 'API_KEY': get(document.cookie.match(/apiKey\\=([^;]*)/), '1'),\n 'ANOTHER_HEADER': 'Some header value'\n };\n }).volatile()\n }\n ```\n\n @class RESTAdapter\n @main @ember-data/adapter/rest\n @public\n @constructor\n @extends Adapter\n @uses BuildURLMixin\n*/\nlet RESTAdapter = (_dec = computed(), _class = class RESTAdapter extends Adapter.extend(BuildURLMixin) {\n constructor(...args) {\n super(...args);\n /**\n This property allows ajax to still be used instead when `false`.\n @property useFetch\n @type {Boolean}\n @default true\n @public\n */\n this.useFetch = true;\n this._defaultContentType = 'application/json; charset=utf-8';\n // http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers\n this.maxURLLength = 2048;\n }\n get fastboot() {\n // Avoid computed property override deprecation in fastboot as suggested by:\n // https://deprecations.emberjs.com/v3.x/#toc_computed-property-override\n let fastboot = this._fastboot;\n if (fastboot) {\n return fastboot;\n }\n return this._fastboot = getOwner(this).lookup('service:fastboot');\n }\n set fastboot(value) {\n this._fastboot = value;\n }\n\n /**\n By default, the RESTAdapter will send the query params sorted alphabetically to the\n server.\n For example:\n ```js\n store.query('posts', { sort: 'price', category: 'pets' });\n ```\n will generate a requests like this `/posts?category=pets&sort=price`, even if the\n parameters were specified in a different order.\n That way the generated URL will be deterministic and that simplifies caching mechanisms\n in the backend.\n Setting `sortQueryParams` to a falsey value will respect the original order.\n In case you want to sort the query parameters with a different criteria, set\n `sortQueryParams` to your custom sort function.\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n export default class ApplicationAdapter extends RESTAdapter {\n sortQueryParams(params) {\n let sortedKeys = Object.keys(params).sort().reverse();\n let len = sortedKeys.length, newParams = {};\n for (let i = 0; i < len; i++) {\n newParams[sortedKeys[i]] = params[sortedKeys[i]];\n }\n return newParams;\n }\n }\n ```\n @method sortQueryParams\n @param {Object} obj\n @return {Object}\n @public\n */\n sortQueryParams(obj) {\n let keys = Object.keys(obj);\n let len = keys.length;\n if (len < 2) {\n return obj;\n }\n let newQueryParams = {};\n let sortedKeys = keys.sort();\n for (let i = 0; i < len; i++) {\n newQueryParams[sortedKeys[i]] = obj[sortedKeys[i]];\n }\n return newQueryParams;\n }\n\n /**\n By default the RESTAdapter will send each find request coming from a `store.find`\n or from accessing a relationship separately to the server. If your server supports passing\n ids as a query string, you can set coalesceFindRequests to true to coalesce all find requests\n within a single runloop.\n For example, if you have an initial payload of:\n ```javascript\n {\n post: {\n id: 1,\n comments: [1, 2]\n }\n }\n ```\n By default calling `post.get('comments')` will trigger the following requests(assuming the\n comments haven't been loaded before):\n ```\n GET /comments/1\n GET /comments/2\n ```\n If you set coalesceFindRequests to `true` it will instead trigger the following request:\n ```\n GET /comments?ids[]=1&ids[]=2\n ```\n Setting coalesceFindRequests to `true` also works for `store.find` requests and `belongsTo`\n relationships accessed within the same runloop. If you set `coalesceFindRequests: true`\n ```javascript\n store.findRecord('comment', 1);\n store.findRecord('comment', 2);\n ```\n will also send a request to: `GET /comments?ids[]=1&ids[]=2`\n Note: Requests coalescing rely on URL building strategy. So if you override `buildURL` in your app\n `groupRecordsForFindMany` more likely should be overridden as well in order for coalescing to work.\n @property coalesceFindRequests\n @public\n @type {boolean}\n */\n get coalesceFindRequests() {\n let coalesceFindRequests = this._coalesceFindRequests;\n if (typeof coalesceFindRequests === 'boolean') {\n return coalesceFindRequests;\n }\n return this._coalesceFindRequests = false;\n }\n set coalesceFindRequests(value) {\n this._coalesceFindRequests = value;\n }\n\n /**\n Endpoint paths can be prefixed with a `namespace` by setting the namespace\n property on the adapter:\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n export default class ApplicationAdapter extends RESTAdapter {\n namespace = 'api/1';\n }\n ```\n Requests for the `Post` model would now target `/api/1/post/`.\n @property namespace\n @public\n @type {String}\n */\n\n /**\n An adapter can target other hosts by setting the `host` property.\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n export default class ApplicationAdapter extends RESTAdapter {\n host = 'https://api.example.com';\n }\n ```\n Requests for the `Post` model would now target `https://api.example.com/post/`.\n @property host\n @public\n @type {String}\n */\n\n /**\n Some APIs require HTTP headers, e.g. to provide an API\n key. Arbitrary headers can be set as key/value pairs on the\n `RESTAdapter`'s `headers` object and Ember Data will send them\n along with each ajax request. For dynamic headers see [headers\n customization](/ember-data/release/classes/RESTAdapter).\n ```app/adapters/application.js\n import RESTAdapter from '@ember-data/adapter/rest';\n import { computed } from '@ember/object';\n export default class ApplicationAdapter extends RESTAdapter {\n headers: computed(function() {\n return {\n 'API_KEY': 'secret key',\n 'ANOTHER_HEADER': 'Some header value'\n };\n })\n }\n ```\n @property headers\n @public\n @type {Object}\n */\n\n /**\n Called by the store in order to fetch the JSON for a given\n type and ID.\n The `findRecord` method makes an Ajax request to a URL computed by\n `buildURL`, and returns a promise for the resulting payload.\n This method performs an HTTP `GET` request with the id provided as part of the query string.\n @since 1.13.0\n @method findRecord\n @public\n @param {Store} store\n @param {Model} type\n @param {String} id\n @param {Snapshot} snapshot\n @return {Promise} promise\n */\n findRecord(store, type, id, snapshot) {\n let url = this.buildURL(type.modelName, id, snapshot, 'findRecord');\n let query = this.buildQuery(snapshot);\n return this.ajax(url, 'GET', {\n data: query\n });\n }\n\n /**\n Called by the store in order to fetch a JSON array for all\n of the records for a given type.\n The `findAll` method makes an Ajax (HTTP GET) request to a URL computed by `buildURL`, and returns a\n promise for the resulting payload.\n @method findAll\n @public\n @param {Store} store\n @param {Model} type\n @param {undefined} neverSet a value is never provided to this argument\n @param {SnapshotRecordArray} snapshotRecordArray\n @return {Promise} promise\n */\n findAll(store, type, sinceToken, snapshotRecordArray) {\n let query = this.buildQuery(snapshotRecordArray);\n let url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll');\n if (sinceToken) {\n query.since = sinceToken;\n }\n return this.ajax(url, 'GET', {\n data: query\n });\n }\n\n /**\n Called by the store in order to fetch a JSON array for\n the records that match a particular query.\n The `query` method makes an Ajax (HTTP GET) request to a URL\n computed by `buildURL`, and returns a promise for the resulting\n payload.\n The `query` argument is a simple JavaScript object that will be passed directly\n to the server as parameters.\n @method query\n @public\n @param {Store} store\n @param {Model} type\n @param {Object} query\n @param {AdapterPopulatedRecordArray} recordArray\n @param {Object} adapterOptions\n @return {Promise} promise\n */\n query(store, type, query) {\n let url = this.buildURL(type.modelName, null, null, 'query', query);\n if (this.sortQueryParams) {\n query = this.sortQueryParams(query);\n }\n return this.ajax(url, 'GET', {\n data: query\n });\n }\n\n /**\n Called by the store in order to fetch a JSON object for\n the record that matches a particular query.\n The `queryRecord` method makes an Ajax (HTTP GET) request to a URL\n computed by `buildURL`, and returns a promise for the resulting\n payload.\n The `query` argument is a simple JavaScript object that will be passed directly\n to the server as parameters.\n @since 1.13.0\n @method queryRecord\n @public\n @param {Store} store\n @param {Model} type\n @param {Object} query\n @param {Object} adapterOptions\n @return {Promise} promise\n */\n queryRecord(store, type, query, adapterOptions) {\n let url = this.buildURL(type.modelName, null, null, 'queryRecord', query);\n if (this.sortQueryParams) {\n query = this.sortQueryParams(query);\n }\n return this.ajax(url, 'GET', {\n data: query\n });\n }\n\n /**\n Called by the store in order to fetch several records together if `coalesceFindRequests` is true\n For example, if the original payload looks like:\n ```js\n {\n \"id\": 1,\n \"title\": \"Rails is omakase\",\n \"comments\": [ 1, 2, 3 ]\n }\n ```\n The IDs will be passed as a URL-encoded Array of IDs, in this form:\n ```\n ids[]=1&ids[]=2&ids[]=3\n ```\n Many servers, such as Rails and PHP, will automatically convert this URL-encoded array\n into an Array for you on the server-side. If you want to encode the\n IDs, differently, just override this (one-line) method.\n The `findMany` method makes an Ajax (HTTP GET) request to a URL computed by `buildURL`, and returns a\n promise for the resulting payload.\n @method findMany\n @public\n @param {Store} store\n @param {Model} type\n @param {Array} ids\n @param {Array} snapshots\n @return {Promise} promise\n */\n findMany(store, type, ids, snapshots) {\n let url = this.buildURL(type.modelName, ids, snapshots, 'findMany');\n return this.ajax(url, 'GET', {\n data: {\n ids: ids\n }\n });\n }\n\n /**\n Called by the store in order to fetch a JSON array for\n the unloaded records in a has-many relationship that were originally\n specified as a URL (inside of `links`).\n For example, if your original payload looks like this:\n ```js\n {\n \"post\": {\n \"id\": 1,\n \"title\": \"Rails is omakase\",\n \"links\": { \"comments\": \"/posts/1/comments\" }\n }\n }\n ```\n This method will be called with the parent record and `/posts/1/comments`.\n The `findHasMany` method will make an Ajax (HTTP GET) request to the originally specified URL.\n The format of your `links` value will influence the final request URL via the `urlPrefix` method:\n * Links beginning with `//`, `http://`, `https://`, will be used as is, with no further manipulation.\n * Links beginning with a single `/` will have the current adapter's `host` value prepended to it.\n * Links with no beginning `/` will have a parentURL prepended to it, via the current adapter's `buildURL`.\n @method findHasMany\n @public\n @param {Store} store\n @param {Snapshot} snapshot\n @param {String} url\n @param {Object} relationship meta object describing the relationship\n @return {Promise} promise\n */\n findHasMany(store, snapshot, url, relationship) {\n let id = snapshot.id;\n let type = snapshot.modelName;\n assert(`Attempted to fetch the hasMany relationship for ${type}, but the record has no id`, typeof id === 'string' && id.length > 0);\n url = this.urlPrefix(url, this.buildURL(type, id, snapshot, 'findHasMany'));\n return this.ajax(url, 'GET');\n }\n\n /**\n Called by the store in order to fetch the JSON for the unloaded record in a\n belongs-to relationship that was originally specified as a URL (inside of\n `links`).\n For example, if your original payload looks like this:\n ```js\n {\n \"person\": {\n \"id\": 1,\n \"name\": \"Tom Dale\",\n \"links\": { \"group\": \"/people/1/group\" }\n }\n }\n ```\n This method will be called with the parent record and `/people/1/group`.\n The `findBelongsTo` method will make an Ajax (HTTP GET) request to the originally specified URL.\n The format of your `links` value will influence the final request URL via the `urlPrefix` method:\n * Links beginning with `//`, `http://`, `https://`, will be used as is, with no further manipulation.\n * Links beginning with a single `/` will have the current adapter's `host` value prepended to it.\n * Links with no beginning `/` will have a parentURL prepended to it, via the current adapter's `buildURL`.\n @method findBelongsTo\n @public\n @param {Store} store\n @param {Snapshot} snapshot\n @param {String} url\n @param {Object} relationship meta object describing the relationship\n @return {Promise} promise\n */\n findBelongsTo(store, snapshot, url, relationship) {\n let id = snapshot.id;\n let type = snapshot.modelName;\n assert(`Attempted to fetch the belongsTo relationship for ${type}, but the record has no id`, typeof id === 'string' && id.length > 0);\n url = this.urlPrefix(url, this.buildURL(type, id, snapshot, 'findBelongsTo'));\n return this.ajax(url, 'GET');\n }\n\n /**\n Called by the store when a newly created record is\n saved via the `save` method on a model record instance.\n The `createRecord` method serializes the record and makes an Ajax (HTTP POST) request\n to a URL computed by `buildURL`.\n See `serialize` for information on how to customize the serialized form\n of a record.\n @method createRecord\n @public\n @param {Store} store\n @param {Model} type\n @param {Snapshot} snapshot\n @return {Promise} promise\n */\n createRecord(store, type, snapshot) {\n let url = this.buildURL(type.modelName, null, snapshot, 'createRecord');\n const data = serializeIntoHash(store, type, snapshot);\n return this.ajax(url, 'POST', {\n data\n });\n }\n\n /**\n Called by the store when an existing record is saved\n via the `save` method on a model record instance.\n The `updateRecord` method serializes the record and makes an Ajax (HTTP PUT) request\n to a URL computed by `buildURL`.\n See `serialize` for information on how to customize the serialized form\n of a record.\n @method updateRecord\n @public\n @param {Store} store\n @param {Model} schema\n @param {Snapshot} snapshot\n @return {Promise} promise\n */\n updateRecord(store, schema, snapshot) {\n const data = serializeIntoHash(store, schema, snapshot, {});\n const type = snapshot.modelName;\n const id = snapshot.id;\n assert(`Attempted to update the ${type} record, but the record has no id`, typeof id === 'string' && id.length > 0);\n let url = this.buildURL(type, id, snapshot, 'updateRecord');\n return this.ajax(url, 'PUT', {\n data\n });\n }\n\n /**\n Called by the store when a record is deleted.\n The `deleteRecord` method makes an Ajax (HTTP DELETE) request to a URL computed by `buildURL`.\n @method deleteRecord\n @public\n @param {Store} store\n @param {Model} type\n @param {Snapshot} snapshot\n @return {Promise} promise\n */\n deleteRecord(store, schema, snapshot) {\n const type = snapshot.modelName;\n const id = snapshot.id;\n assert(`Attempted to delete the ${type} record, but the record has no id`, typeof id === 'string' && id.length > 0);\n return this.ajax(this.buildURL(type, id, snapshot, 'deleteRecord'), 'DELETE');\n }\n _stripIDFromURL(store, snapshot) {\n const type = snapshot.modelName;\n const id = snapshot.id;\n assert(`Attempted to strip the url from the ${type} record for coalescing, but the record has no id`, typeof id === 'string' && id.length > 0);\n let url = this.buildURL(type, id, snapshot);\n let expandedURL = url.split('/');\n // Case when the url is of the format ...something/:id\n // We are decodeURIComponent-ing the lastSegment because if it represents\n // the id, it has been encodeURIComponent-ified within `buildURL`. If we\n // don't do this, then records with id having special characters are not\n // coalesced correctly (see GH #4190 for the reported bug)\n let lastSegment = expandedURL[expandedURL.length - 1];\n if (decodeURIComponent(lastSegment) === id) {\n expandedURL[expandedURL.length - 1] = '';\n } else if (id && endsWith(lastSegment, '?id=' + id)) {\n //Case when the url is of the format ...something?id=:id\n expandedURL[expandedURL.length - 1] = lastSegment.substring(0, lastSegment.length - id.length - 1);\n }\n return expandedURL.join('/');\n }\n /**\n Organize records into groups, each of which is to be passed to separate\n calls to `findMany`.\n This implementation groups together records that have the same base URL but\n differing ids. For example `/comments/1` and `/comments/2` will be grouped together\n because we know findMany can coalesce them together as `/comments?ids[]=1&ids[]=2`\n It also supports urls where ids are passed as a query param, such as `/comments?id=1`\n but not those where there is more than 1 query param such as `/comments?id=2&name=David`\n Currently only the query param of `id` is supported. If you need to support others, please\n override this or the `_stripIDFromURL` method.\n It does not group records that have differing base urls, such as for example: `/posts/1/comments/2`\n and `/posts/2/comments/3`\n @method groupRecordsForFindMany\n @public\n @param {Store} store\n @param {Array} snapshots\n @return {Array} an array of arrays of records, each of which is to be\n loaded separately by `findMany`.\n */\n groupRecordsForFindMany(store, snapshots) {\n let groups = new Map();\n let adapter = this;\n let maxURLLength = this.maxURLLength;\n snapshots.forEach(snapshot => {\n let baseUrl = adapter._stripIDFromURL(store, snapshot);\n if (!groups.has(baseUrl)) {\n groups.set(baseUrl, []);\n }\n groups.get(baseUrl).push(snapshot);\n });\n function splitGroupToFitInUrl(group, maxURLLength, paramNameLength) {\n let idsSize = 0;\n let baseUrl = adapter._stripIDFromURL(store, group[0]);\n let splitGroups = [[]];\n group.forEach(snapshot => {\n let additionalLength = encodeURIComponent(snapshot.id).length + paramNameLength;\n if (baseUrl.length + idsSize + additionalLength >= maxURLLength) {\n idsSize = 0;\n splitGroups.push([]);\n }\n idsSize += additionalLength;\n let lastGroupIndex = splitGroups.length - 1;\n splitGroups[lastGroupIndex].push(snapshot);\n });\n return splitGroups;\n }\n let groupsArray = [];\n groups.forEach((group, key) => {\n let paramNameLength = '&ids%5B%5D='.length;\n let splitGroups = splitGroupToFitInUrl(group, maxURLLength, paramNameLength);\n splitGroups.forEach(splitGroup => groupsArray.push(splitGroup));\n });\n return groupsArray;\n }\n\n /**\n Takes an ajax response, and returns the json payload or an error.\n By default this hook just returns the json payload passed to it.\n You might want to override it in two cases:\n 1. Your API might return useful results in the response headers.\n Response headers are passed in as the second argument.\n 2. Your API might return errors as successful responses with status code\n 200 and an Errors text or object. You can return a `InvalidError` or a\n `AdapterError` (or a sub class) from this hook and it will automatically\n reject the promise and put your record into the invalid or error state.\n Returning a `InvalidError` from this method will cause the\n record to transition into the `invalid` state and make the\n `errors` object available on the record. When returning an\n `InvalidError` the store will attempt to normalize the error data\n returned from the server using the serializer's `extractErrors`\n method.\n @since 1.13.0\n @method handleResponse\n @public\n @param {Number} status\n @param {Object} headers\n @param {Object} payload\n @param {Object} requestData - the original request information\n @return {Object | AdapterError} response\n */\n handleResponse(status, headers, payload, requestData) {\n if (this.isSuccess(status, headers, payload)) {\n return payload;\n } else if (this.isInvalid(status, headers, payload)) {\n return new InvalidError(typeof payload === 'object' && 'errors' in payload ? payload.errors : undefined);\n }\n let errors = this.normalizeErrorResponse(status, headers, payload);\n let detailedMessage = this.generatedDetailedMessage(status, headers, payload, requestData);\n switch (status) {\n case 401:\n return new UnauthorizedError(errors, detailedMessage);\n case 403:\n return new ForbiddenError(errors, detailedMessage);\n case 404:\n return new NotFoundError(errors, detailedMessage);\n case 409:\n return new ConflictError(errors, detailedMessage);\n default:\n if (status >= 500) {\n return new ServerError(errors, detailedMessage);\n }\n }\n return new AdapterError(errors, detailedMessage);\n }\n\n /**\n Default `handleResponse` implementation uses this hook to decide if the\n response is a success.\n @since 1.13.0\n @method isSuccess\n @public\n @param {Number} status\n @param {Object} headers\n @param {Object} payload\n @return {Boolean}\n */\n isSuccess(status, _headers, _payload) {\n return status >= 200 && status < 300 || status === 304;\n }\n\n /**\n Default `handleResponse` implementation uses this hook to decide if the\n response is an invalid error.\n @since 1.13.0\n @method isInvalid\n @public\n @param {Number} status\n @param {Object} headers\n @param {Object} payload\n @return {Boolean}\n */\n isInvalid(status, _headers, _payload) {\n return status === 422;\n }\n\n /**\n Takes a URL, an HTTP method and a hash of data, and makes an\n HTTP request.\n When the server responds with a payload, Ember Data will call into `extractSingle`\n or `extractArray` (depending on whether the original query was for one record or\n many records).\n By default, `ajax` method has the following behavior:\n * It sets the response `dataType` to `\"json\"`\n * If the HTTP method is not `\"GET\"`, it sets the `Content-Type` to be\n `application/json; charset=utf-8`\n * If the HTTP method is not `\"GET\"`, it stringifies the data passed in. The\n data is the serialized record in the case of a save.\n * Registers success and failure handlers.\n @method ajax\n @private\n @param {String} url\n @param {String} type The request type GET, POST, PUT, DELETE etc.\n @param {Object} options\n @return {Promise} promise\n */\n async ajax(url, type, options = {}) {\n let adapter = this;\n let requestData = {\n url: url,\n method: type\n };\n if (this.useFetch) {\n let hash = adapter.ajaxOptions(url, type, options);\n let response = await this._fetchRequest(hash);\n let payload = await determineBodyPromise(response, requestData);\n if (response.ok && !(payload instanceof Error)) {\n return fetchSuccessHandler(adapter, payload, response, requestData);\n } else {\n throw fetchErrorHandler(adapter, payload, response, null, requestData);\n }\n } else {\n let hash = adapter.ajaxOptions(url, type, options);\n return new RSVPPromise(function (resolve, reject) {\n hash.success = function (payload, textStatus, jqXHR) {\n let response = ajaxSuccessHandler(adapter, payload, jqXHR, requestData);\n join(null, resolve, response);\n };\n hash.error = function (jqXHR, textStatus, errorThrown) {\n let error = ajaxErrorHandler(adapter, jqXHR, errorThrown, requestData);\n join(null, reject, error);\n };\n adapter._ajax(hash);\n }, 'DS: RESTAdapter#ajax ' + type + ' to ' + url);\n }\n }\n\n /**\n @method _ajaxRequest\n @private\n @param {Object} options jQuery ajax options to be used for the ajax request\n */\n _ajaxRequest(options) {\n // TODO add assertion that jquery is there rather then equality check\n typeof jQuery !== 'undefined' && jQuery.ajax(options);\n }\n _fetchRequest(options) {\n let fetchFunction = fetch();\n if (fetchFunction) {\n return fetchFunction(options.url, options);\n } else {\n throw new Error('cannot find the `fetch` module or the `fetch` global. Did you mean to install the `ember-fetch` addon?');\n }\n }\n _ajax(options) {\n if (this.useFetch) {\n this._fetchRequest(options);\n } else {\n this._ajaxRequest(options);\n }\n }\n\n /**\n @method ajaxOptions\n @private\n @param {String} url\n @param {String} type The request type GET, POST, PUT, DELETE etc.\n @param {Object} options\n @return {Object}\n */\n ajaxOptions(url, method, options) {\n let reqOptions = Object.assign({\n url,\n method,\n type: method\n }, options);\n if (this.headers !== undefined) {\n reqOptions.headers = {\n ...this.headers,\n ...reqOptions.headers\n };\n } else if (!options.headers) {\n reqOptions.headers = {};\n }\n let contentType = reqOptions.contentType || this._defaultContentType;\n if (this.useFetch) {\n if (reqOptions.data && reqOptions.type !== 'GET' && reqOptions.headers) {\n if (!reqOptions.headers['Content-Type'] && !reqOptions.headers['content-type']) {\n reqOptions.headers['content-type'] = contentType;\n }\n }\n reqOptions = fetchOptions(reqOptions, this);\n } else {\n // GET requests without a body should not have a content-type header\n // and may be unexpected by a server\n if (reqOptions.data && reqOptions.type !== 'GET') {\n reqOptions = {\n ...reqOptions,\n contentType\n };\n }\n reqOptions = ajaxOptions(reqOptions, this);\n }\n reqOptions.url = this._ajaxURL(reqOptions.url);\n return reqOptions;\n }\n _ajaxURL(url) {\n if (this.fastboot?.isFastBoot) {\n let httpRegex = /^https?:\\/\\//;\n let protocolRelativeRegex = /^\\/\\//;\n let protocol = this.fastboot.request.protocol;\n let host = this.fastboot.request.host;\n if (protocolRelativeRegex.test(url)) {\n return `${protocol}${url}`;\n } else if (!httpRegex.test(url)) {\n try {\n return `${protocol}//${host}${url}`;\n } catch (fbError) {\n throw new Error('You are using Ember Data with no host defined in your adapter. This will attempt to use the host of the FastBoot request, which is not configured for the current host of this request. Please set the hostWhitelist property for in your environment.js. FastBoot Error: ' + fbError.message);\n }\n }\n }\n return url;\n }\n\n /**\n @method parseErrorResponse\n @private\n @param {String} responseText\n @return {Object}\n */\n parseErrorResponse(responseText) {\n let json = responseText;\n try {\n json = JSON.parse(responseText);\n } catch (e) {\n // ignored\n }\n return json;\n }\n\n /**\n @method normalizeErrorResponse\n @private\n @param {Number} status\n @param {Object} headers\n @param {Object} payload\n @return {Array} errors payload\n */\n normalizeErrorResponse(status, _headers, payload) {\n if (payload && typeof payload === 'object' && 'errors' in payload && Array.isArray(payload.errors)) {\n return payload.errors;\n } else {\n return [{\n status: `${status}`,\n // Set to a string per the JSON API spec: https://jsonapi.org/format/#errors\n title: 'The backend responded with an error',\n detail: `${payload}`\n }];\n }\n }\n\n /**\n Generates a detailed (\"friendly\") error message, with plenty\n of information for debugging (good luck!)\n @method generatedDetailedMessage\n @private\n @param {Number} status\n @param {Object} headers\n @param {Object} payload\n @param {Object} requestData\n @return {String} detailed error message\n */\n generatedDetailedMessage(status, headers, payload, requestData) {\n let shortenedPayload;\n let payloadContentType = headers['content-type'] || 'Empty Content-Type';\n if (payloadContentType === 'text/html' && typeof payload === 'string' && payload.length > 250) {\n shortenedPayload = '[Omitted Lengthy HTML]';\n } else {\n shortenedPayload = payload;\n }\n let requestDescription = requestData.method + ' ' + requestData.url;\n let payloadDescription = 'Payload (' + payloadContentType + ')';\n return ['Ember Data Request ' + requestDescription + ' returned a ' + status, payloadDescription, shortenedPayload].join('\\n');\n }\n\n /**\n Used by `findAll` and `findRecord` to build the query's `data` hash\n supplied to the ajax method.\n @method buildQuery\n @since 2.5.0\n @public\n @param {Snapshot} snapshot\n @return {Object}\n */\n buildQuery(snapshot) {\n let query = {};\n if (snapshot) {\n let {\n include\n } = snapshot;\n if (include) {\n query.include = include;\n }\n }\n return query;\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"fastboot\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"fastboot\"), _class.prototype), _class);\nfunction ajaxSuccess(adapter, payload, requestData, responseData) {\n let response;\n try {\n response = adapter.handleResponse(responseData.status, responseData.headers, payload, requestData);\n } catch (error) {\n return RSVPPromise.reject(error);\n }\n if (response && response.isAdapterError) {\n return RSVPPromise.reject(response);\n } else {\n return response;\n }\n}\nfunction ajaxError(adapter, payload, requestData, responseData) {\n let error;\n if (responseData.errorThrown instanceof Error && payload !== '') {\n error = responseData.errorThrown;\n } else if (responseData.textStatus === 'timeout') {\n error = new TimeoutError();\n } else if (responseData.textStatus === 'abort' || responseData.status === 0) {\n error = handleAbort(requestData, responseData);\n } else {\n try {\n error = adapter.handleResponse(responseData.status, responseData.headers, payload || responseData.errorThrown, requestData);\n } catch (e) {\n error = e;\n }\n }\n return error;\n}\n\n// Adapter abort error to include any relevent info, e.g. request/response:\nfunction handleAbort(requestData, responseData) {\n let {\n method,\n url,\n errorThrown\n } = requestData;\n let {\n status\n } = responseData;\n let msg = `Request failed: ${method} ${url} ${errorThrown || ''}`;\n let errors = [{\n title: 'Adapter Error',\n detail: msg.trim(),\n status\n }];\n return new AbortError(errors);\n}\n\n//From http://stackoverflow.com/questions/280634/endswith-in-javascript\nfunction endsWith(string, suffix) {\n if (typeof String.prototype.endsWith !== 'function') {\n return string.indexOf(suffix, string.length - suffix.length) !== -1;\n } else {\n return string.endsWith(suffix);\n }\n}\nfunction fetchSuccessHandler(adapter, payload, response, requestData) {\n let responseData = fetchResponseData(response);\n return ajaxSuccess(adapter, payload, requestData, responseData);\n}\nfunction fetchErrorHandler(adapter, payload, response, errorThrown, requestData) {\n let responseData = fetchResponseData(response);\n if (responseData.status === 200 && payload instanceof Error) {\n responseData.errorThrown = payload;\n payload = responseData.errorThrown.payload;\n } else {\n responseData.errorThrown = errorThrown;\n if (typeof payload === 'string') {\n payload = adapter.parseErrorResponse(payload);\n }\n }\n return ajaxError(adapter, payload, requestData, responseData);\n}\nfunction ajaxSuccessHandler(adapter, payload, jqXHR, requestData) {\n let responseData = ajaxResponseData(jqXHR);\n return ajaxSuccess(adapter, payload, requestData, responseData);\n}\nfunction ajaxErrorHandler(adapter, jqXHR, errorThrown, requestData) {\n let responseData = ajaxResponseData(jqXHR);\n responseData.errorThrown = errorThrown;\n let payload = adapter.parseErrorResponse(jqXHR.responseText);\n if (DEBUG) {\n let message = `The server returned an empty string for ${requestData.method} ${requestData.url}, which cannot be parsed into a valid JSON. Return either null or {}.`;\n let validJSONString = !(responseData.textStatus === 'parsererror' && payload === '');\n warn(message, validJSONString, {\n id: 'ds.adapter.returned-empty-string-as-JSON'\n });\n }\n return ajaxError(adapter, payload, requestData, responseData);\n}\nfunction fetchResponseData(response) {\n return {\n status: response.status,\n textStatus: response.statusText,\n headers: headersToObject(response.headers)\n };\n}\nfunction ajaxResponseData(jqXHR) {\n return {\n status: jqXHR.status,\n textStatus: jqXHR.statusText,\n headers: parseResponseHeaders(jqXHR.getAllResponseHeaders())\n };\n}\nfunction headersToObject(headers) {\n let headersObject = {};\n if (headers) {\n headers.forEach((value, key) => headersObject[key] = value);\n }\n return headersObject;\n}\n\n/**\n * Helper function that translates the options passed to `jQuery.ajax` into a format that `fetch` expects.\n *\n * @method fetchOptions\n * @for @ember-data/adapter/rest\n * @param {Object} _options\n * @param {Adapter} adapter\n * @private\n * @returns {Object}\n */\nexport function fetchOptions(options, adapter) {\n options.credentials = options.credentials || 'same-origin';\n if (options.data) {\n // GET and HEAD requests can't have a `body`\n if (options.method === 'GET' || options.method === 'HEAD') {\n // If no options are passed, Ember Data sets `data` to an empty object, which we test for.\n if (Object.keys(options.data).length && options.url) {\n // Test if there are already query params in the url (mimics jQuey.ajax).\n const queryParamDelimiter = options.url.indexOf('?') > -1 ? '&' : '?';\n options.url += `${queryParamDelimiter}${serializeQueryParams(options.data)}`;\n }\n } else {\n // NOTE: a request's body cannot be an object, so we stringify it if it is.\n // JSON.stringify removes keys with values of `undefined` (mimics jQuery.ajax).\n // If the data is not a POJO (it's a String, FormData, etc), we just set it.\n // If the data is a string, we assume it's a stringified object.\n\n /* We check for Objects this way because we want the logic inside the consequent to run\n * if `options.data` is a POJO, not if it is a data structure whose `typeof` returns \"object\"\n * when it's not (Array, FormData, etc). The reason we don't use `options.data.constructor`\n * to check is in case `data` is an object with no prototype (e.g. created with null).\n */\n if (Object.prototype.toString.call(options.data) === '[object Object]') {\n options.body = JSON.stringify(options.data);\n } else {\n options.body = options.data;\n }\n }\n }\n return options;\n}\nfunction ajaxOptions(options, adapter) {\n options.dataType = 'json';\n options.context = adapter;\n if (options.data && options.type !== 'GET') {\n options.data = JSON.stringify(options.data);\n }\n options.beforeSend = function (xhr) {\n if (options.headers) {\n Object.keys(options.headers).forEach(key => {\n let headerValue = options.headers && options.headers[key];\n const isString = value => typeof value === 'string';\n if (isString(headerValue)) {\n xhr.setRequestHeader(key, headerValue);\n }\n });\n }\n };\n return options;\n}\nexport default RESTAdapter;","/**\n # Overview\n\n This package provides the `DataAdapter` which the [Ember Inspector](https://github.com/emberjs/ember-inspector)\n uses to subscribe and retrieve information for the `data` tab in the inspector.\n\n This package adds roughly .6 KB when minified and compressed to your application in production; however,\n you can opt out of shipping this addon in production via options in `ember-cli-build.js`\n\n ```js\n let app = new EmberApp(defaults, {\n emberData: {\n includeDataAdapterInProduction: false\n }\n });\n ```\n\n When using `ember-data` as a dependency of your app, the default is to ship the inspector support to production.\n\n When not using `ember-data` as a dependency but instead using EmberData via declaring specific `@ember-data/`\n dependencies the default is to not ship to production.\n\n @module @ember-data/debug\n @main @ember-data/debug\n*/\nimport { A } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport DataAdapter from '@ember/debug/data-adapter';\nimport { get } from '@ember/object';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { inject as service } from '@ember/service';\nimport { capitalize, underscore } from '@ember/string';\nimport { next } from '@ember/runloop';\nimport { typesMapFor } from './setup';\n\n/**\n Implements `@ember/debug/data-adapter` with for EmberData\n integration with the ember-inspector.\n\n @class InspectorDataAdapter\n @extends DataAdapter\n @private\n*/\nexport default DataAdapter.extend({\n store: service('store'),\n /**\n Specifies how records can be filtered based on the state of the record\n Records returned will need to have a `filterValues`\n property with a key for every name in the returned array\n @method getFilters\n @private\n @return {Array} List of objects defining filters\n The object should have a `name` and `desc` property\n */\n getFilters() {\n return [{\n name: 'isNew',\n desc: 'New'\n }, {\n name: 'isModified',\n desc: 'Modified'\n }, {\n name: 'isClean',\n desc: 'Clean'\n }];\n },\n _nameToClass(type) {\n return get(this, 'store').modelFor(type);\n },\n /**\n Fetch the model types and observe them for changes.\n Maintains the list of model types without needing the Model package for detection.\n @method watchModelTypes\n @private\n @param {Function} typesAdded Callback to call to add types.\n Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n @param {Function} typesUpdated Callback to call when a type has changed.\n Takes an array of objects containing wrapped types.\n @return {Function} Method to call to remove all observers\n */\n watchModelTypes(typesAdded, typesUpdated) {\n const store = get(this, 'store');\n const __createRecordData = store._instanceCache._createRecordData;\n const _releaseMethods = [];\n const discoveredTypes = typesMapFor(store);\n\n // Add any models that were added during initialization of the app, before the inspector was opened\n discoveredTypes.forEach((_, type) => {\n this.watchTypeIfUnseen(store, discoveredTypes, type, typesAdded, typesUpdated, _releaseMethods);\n });\n\n // Overwrite _createRecordData so newly added models will get added to the list\n store._instanceCache._createRecordData = identifier => {\n // defer to ensure first-create does not result in an infinite loop, see https://github.com/emberjs/data/issues/8006\n next(() => this.watchTypeIfUnseen(store, discoveredTypes, identifier.type, typesAdded, typesUpdated, _releaseMethods));\n return __createRecordData.call(store._instanceCache, identifier);\n };\n let release = () => {\n _releaseMethods.forEach(fn => fn());\n store._instanceCache._createRecordData = __createRecordData;\n // reset the list so the models can be added if the inspector is re-opened\n // the entries are set to false instead of removed, since the models still exist in the app\n // we just need the inspector to become aware of them\n discoveredTypes.forEach((value, key) => {\n discoveredTypes.set(key, false);\n });\n this.releaseMethods.removeObject(release);\n };\n this.releaseMethods.pushObject(release);\n return release;\n },\n /**\n * Loop over the discovered types and use the callbacks from watchModelTypes to notify\n * the consumer of this adapter about the mdoels.\n *\n * @method watchTypeIfUnseen\n * @param {store} store\n * @param {Map} discoveredTypes\n * @param {String} type\n * @param {Function} typesAdded\n * @param {Function} typesUpdated\n * @param {Array} releaseMethods\n * @private\n */\n watchTypeIfUnseen(store, discoveredTypes, type, typesAdded, typesUpdated, releaseMethods) {\n if (discoveredTypes.get(type) !== true) {\n let klass = store.modelFor(type);\n let wrapped = this.wrapModelType(klass, type);\n releaseMethods.push(this.observeModelType(type, typesUpdated));\n typesAdded([wrapped]);\n discoveredTypes.set(type, true);\n }\n },\n /**\n Creates a human readable string used for column headers\n @method columnNameToDesc\n @private\n @param {String} name The attribute name\n @return {String} Human readable string based on the attribute name\n */\n columnNameToDesc(name) {\n return capitalize(underscore(name).replace(/_/g, ' ').trim());\n },\n /**\n Get the columns for a given model type\n @method columnsForType\n @private\n @param {Model} typeClass\n @return {Array} An array of columns of the following format:\n name: {String} The name of the column\n desc: {String} Humanized description (what would show in a table column name)\n */\n columnsForType(typeClass) {\n let columns = [{\n name: 'id',\n desc: 'Id'\n }];\n let count = 0;\n let self = this;\n get(typeClass, 'attributes').forEach((meta, name) => {\n if (count++ > self.attributeLimit) {\n return false;\n }\n let desc = this.columnNameToDesc(name);\n columns.push({\n name: name,\n desc: desc\n });\n });\n return columns;\n },\n /**\n Fetches all loaded records for a given type\n @method getRecords\n @private\n @param {Model} modelClass of the record\n @param {String} modelName of the record\n @return {Array} An array of Model records\n This array will be observed for changes,\n so it should update when new records are added/removed\n */\n getRecords(modelClass, modelName) {\n if (arguments.length < 2) {\n // Legacy Ember.js < 1.13 support\n let containerKey = modelClass._debugContainerKey;\n if (containerKey) {\n let match = containerKey.match(/model:(.*)/);\n if (match !== null) {\n modelName = match[1];\n }\n }\n }\n assert('Cannot find model name. Please upgrade to Ember.js >= 1.13 for Ember Inspector support', !!modelName);\n return this.get('store').peekAll(modelName);\n },\n /**\n Gets the values for each column\n This is the attribute values for a given record\n @method getRecordColumnValues\n @private\n @param {Model} record to get values from\n @return {Object} Keys should match column names defined by the model type\n */\n getRecordColumnValues(record) {\n let count = 0;\n let columnValues = {\n id: get(record, 'id')\n };\n record.eachAttribute(key => {\n if (count++ > this.attributeLimit) {\n return false;\n }\n columnValues[key] = get(record, key);\n });\n return columnValues;\n },\n /**\n Returns keywords to match when searching records\n @method getRecordKeywords\n @private\n @param {Model} record\n @return {Array} Relevant keywords for search based on the record's attribute values\n */\n getRecordKeywords(record) {\n let keywords = [];\n let keys = A(['id']);\n record.eachAttribute(key => keys.push(key));\n keys.forEach(key => keywords.push(get(record, key)));\n return keywords;\n },\n /**\n Returns the values of filters defined by `getFilters`\n These reflect the state of the record\n @method getRecordFilterValues\n @private\n @param {Model} record\n @return {Object} The record state filter values\n */\n getRecordFilterValues(record) {\n return {\n isNew: record.get('isNew'),\n isModified: record.get('hasDirtyAttributes') && !record.get('isNew'),\n isClean: !record.get('hasDirtyAttributes')\n };\n },\n /**\n Returns a color that represents the record's state\n Possible colors: black, blue, green\n @method getRecordColor\n @private\n @param {Model} record\n @return {String} The record color\n */\n getRecordColor(record) {\n let color = 'black';\n if (record.get('isNew')) {\n color = 'green';\n } else if (record.get('hasDirtyAttributes')) {\n color = 'blue';\n }\n return color;\n },\n /**\n Observes all relevant properties and re-sends the wrapped record\n when a change occurs\n @method observeRecord\n @private\n @param {Model} record\n @param {Function} recordUpdated Callback used to notify changes\n @return {Function} The function to call to remove all observers\n */\n observeRecord(record, recordUpdated) {\n let releaseMethods = A();\n let keysToObserve = A(['id', 'isNew', 'hasDirtyAttributes']);\n record.eachAttribute(key => keysToObserve.push(key));\n let adapter = this;\n keysToObserve.forEach(function (key) {\n let handler = function () {\n recordUpdated(adapter.wrapRecord(record));\n };\n addObserver(record, key, handler);\n releaseMethods.push(function () {\n removeObserver(record, key, handler);\n });\n });\n let release = function () {\n releaseMethods.forEach(fn => fn());\n };\n return release;\n }\n});","import Store from '@ember-data/store';\nconst StoreTypesMap = new WeakMap();\nexport function typesMapFor(store) {\n let typesMap = StoreTypesMap.get(store);\n if (typesMap === undefined) {\n typesMap = new Map();\n StoreTypesMap.set(store, typesMap);\n }\n return typesMap;\n}\n\n// override _createRecordData to add the known models to the typesMap\nconst __createRecordData = Store.prototype._createRecordData;\nStore.prototype._createRecordData = function (identifier) {\n const typesMap = typesMapFor(this);\n if (!typesMap.has(identifier.type)) {\n typesMap.set(identifier.type, false);\n }\n return __createRecordData.call(this, identifier);\n};\nexport default {\n name: '@ember-data/data-adapter',\n initialize() {}\n};","export function isElementDescriptor(args) {\n let [maybeTarget, maybeKey, maybeDesc] = args;\n return (\n // Ensure we have the right number of args\n args.length === 3 && (\n // Make sure the target is a class or object (prototype)\n typeof maybeTarget === 'function' || typeof maybeTarget === 'object' && maybeTarget !== null) &&\n // Make sure the key is a string\n typeof maybeKey === 'string' && (\n // Make sure the descriptor is the right shape\n typeof maybeDesc === 'object' && maybeDesc !== null && 'enumerable' in maybeDesc && 'configurable' in maybeDesc ||\n // TS compatibility\n maybeDesc === undefined)\n );\n}\nexport function computedMacroWithOptionalParams(fn) {\n if (true) {\n return (...maybeDesc) => isElementDescriptor(maybeDesc) ? fn()(...maybeDesc) : fn(...maybeDesc);\n } else {\n return fn;\n }\n}","import { assert } from '@ember/debug';\nimport { computed } from '@ember/object';\nimport { DEBUG } from '@glimmer/env';\nimport { recordIdentifierFor, storeFor } from '@ember-data/store';\nimport { recordDataFor } from '@ember-data/store/-private';\nimport { computedMacroWithOptionalParams } from './util';\n\n/**\n @module @ember-data/model\n*/\n\nfunction getDefaultValue(record, options, key) {\n if (typeof options.defaultValue === 'function') {\n return options.defaultValue.apply(null, arguments);\n } else {\n let defaultValue = options.defaultValue;\n assert(`Non primitive defaultValues are not supported because they are shared between all instances. If you would like to use a complex object as a default value please provide a function that returns the complex object.`, typeof defaultValue !== 'object' || defaultValue === null);\n return defaultValue;\n }\n}\n\n/**\n `attr` defines an attribute on a [Model](/ember-data/release/classes/Model).\n By default, attributes are passed through as-is, however you can specify an\n optional type to have the value automatically transformed.\n Ember Data ships with four basic transform types: `string`, `number`,\n `boolean` and `date`. You can define your own transforms by subclassing\n [Transform](/ember-data/release/classes/Transform).\n\n Note that you cannot use `attr` to define an attribute of `id`.\n\n `attr` takes an optional hash as a second parameter, currently\n supported options are:\n\n - `defaultValue`: Pass a string or a function to be called to set the attribute\n to a default value if and only if the key is absent from the payload response.\n\n Example\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') username;\n @attr('string') email;\n @attr('boolean', { defaultValue: false }) verified;\n }\n ```\n\n Default value can also be a function. This is useful it you want to return\n a new object for each attribute.\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') username;\n @attr('string') email;\n\n @attr({\n defaultValue() {\n return {};\n }\n })\n settings;\n }\n ```\n\n The `options` hash is passed as second argument to a transforms'\n `serialize` and `deserialize` method. This allows to configure a\n transformation and adapt the corresponding value, based on the config:\n\n ```app/models/post.js\n import Model, { attr } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @attr('text', {\n uppercase: true\n })\n text;\n }\n ```\n\n ```app/transforms/text.js\n import Transform from '@ember-data/serializer/transform';\n\n export default class TextTransform extends Transform {\n serialize(value, options) {\n if (options.uppercase) {\n return value.toUpperCase();\n }\n\n return value;\n }\n\n deserialize(value) {\n return value;\n }\n }\n ```\n\n @method attr\n @public\n @static\n @for @ember-data/model\n @param {String|Object} type the attribute type\n @param {Object} options a hash of options\n @return {Attribute}\n*/\nfunction attr(type, options) {\n if (typeof type === 'object') {\n options = type;\n type = undefined;\n } else {\n options = options || {};\n }\n let meta = {\n type: type,\n isAttribute: true,\n kind: 'attribute',\n options: options\n };\n return computed({\n get(key) {\n if (DEBUG) {\n if (['_internalModel', 'currentState'].indexOf(key) !== -1) {\n throw new Error(`'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your attr on ${this.constructor.toString()}`);\n }\n }\n let recordData = recordDataFor(this);\n if (recordData.hasAttr(key)) {\n return recordData.getAttr(key);\n } else {\n return getDefaultValue(this, options, key);\n }\n },\n set(key, value) {\n if (DEBUG) {\n if (['_internalModel', 'currentState'].indexOf(key) !== -1) {\n throw new Error(`'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your attr on ${this.constructor.toString()}`);\n }\n }\n assert(`Attempted to set '${key}' on the deleted record ${recordIdentifierFor(this)}`, !this.currentState.isDeleted);\n const recordData = storeFor(this)._instanceCache.getRecordData(recordIdentifierFor(this));\n let currentValue = recordData.getAttr(key);\n if (currentValue !== value) {\n recordData.setDirtyAttribute(key, value);\n if (!this.isValid) {\n const {\n errors\n } = this;\n if (errors.get(key)) {\n errors.remove(key);\n this.currentState.cleanErrorRequests();\n }\n }\n }\n return value;\n }\n }).meta(meta);\n}\nexport default computedMacroWithOptionalParams(attr);","var _dec, _dec2, _dec3, _dec4, _class, _descriptor, _descriptor2;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { A } from '@ember/array';\nimport ArrayProxy from '@ember/array/proxy';\nimport { computed, get } from '@ember/object';\nimport { mapBy, not } from '@ember/object/computed';\n\n/**\n @module @ember-data/model\n*/\n\n// we force the type here to our own construct because mixin and extend patterns\n// lose generic signatures. We also do this because we need to Omit `clear` from\n// the type of ArrayProxy as we override it's signature.\nconst ArrayProxyWithCustomOverrides = ArrayProxy;\n\n/**\n Holds validation errors for a given record, organized by attribute names.\n\n This class is not directly instantiable.\n\n Every `Model` has an `errors` property that is an instance of\n `Errors`. This can be used to display validation error\n messages returned from the server when a `record.save()` rejects.\n\n For Example, if you had a `User` model that looked like this:\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') username;\n @attr('string') email;\n }\n ```\n And you attempted to save a record that did not validate on the backend:\n\n ```javascript\n let user = store.createRecord('user', {\n username: 'tomster',\n email: 'invalidEmail'\n });\n user.save();\n ```\n\n Your backend would be expected to return an error response that described\n the problem, so that error messages can be generated on the app.\n\n API responses will be translated into instances of `Errors` differently,\n depending on the specific combination of adapter and serializer used. You\n may want to check the documentation or the source code of the libraries\n that you are using, to know how they expect errors to be communicated.\n\n Errors can be displayed to the user by accessing their property name\n to get an array of all the error objects for that property. Each\n error object is a JavaScript object with two keys:\n\n - `message` A string containing the error message from the backend\n - `attribute` The name of the property associated with this error message\n\n ```handlebars\n \n {{#each @model.errors.username as |error|}}\n
    \n {{error.message}}\n
    \n {{/each}}\n\n \n {{#each @model.errors.email as |error|}}\n
    \n {{error.message}}\n
    \n {{/each}}\n ```\n\n You can also access the special `messages` property on the error\n object to get an array of all the error strings.\n\n ```handlebars\n {{#each @model.errors.messages as |message|}}\n
    \n {{message}}\n
    \n {{/each}}\n ```\n\n @class Errors\n @public\n @extends Ember.ArrayProxy\n */\nlet Errors = (_dec = computed(), _dec2 = mapBy('content', 'message'), _dec3 = computed(), _dec4 = not('length'), _class = class Errors extends ArrayProxyWithCustomOverrides {\n constructor(...args) {\n super(...args);\n /**\n An array containing all of the error messages for this\n record. This is useful for displaying all errors to the user.\n ```handlebars\n {{#each @model.errors.messages as |message|}}\n
    \n {{message}}\n
    \n {{/each}}\n ```\n @property messages\n @public\n @type {Array}\n */\n _initializerDefineProperty(this, \"messages\", _descriptor, this);\n /**\n Total number of errors.\n @property length\n @type {Number}\n @public\n @readOnly\n */\n /**\n `true` if we have no errors.\n @property isEmpty\n @type {Boolean}\n @public\n @readOnly\n */\n _initializerDefineProperty(this, \"isEmpty\", _descriptor2, this);\n }\n /**\n @property errorsByAttributeName\n @type {MapWithDefault}\n @private\n */\n get errorsByAttributeName() {\n return new Map();\n }\n\n /**\n Returns errors for a given attribute\n ```javascript\n let user = store.createRecord('user', {\n username: 'tomster',\n email: 'invalidEmail'\n });\n user.save().catch(function(){\n user.get('errors').errorsFor('email'); // returns:\n // [{attribute: \"email\", message: \"Doesn't look like a valid email.\"}]\n });\n ```\n @method errorsFor\n @public\n @param {String} attribute\n @return {Array}\n */\n errorsFor(attribute) {\n let map = this.errorsByAttributeName;\n let errors = map.get(attribute);\n if (errors === undefined) {\n errors = A();\n map.set(attribute, errors);\n }\n\n // Errors may be a native array with extensions turned on. Since we access\n // the array via a method, and not a computed or using `Ember.get`, it does\n // not entangle properly with autotracking, so we entangle manually by\n // getting the `[]` property.\n get(errors, '[]');\n return errors;\n }\n /**\n @property content\n @type {Array}\n @private\n */\n get content() {\n return A();\n }\n\n /**\n @method unknownProperty\n @private\n */\n unknownProperty(attribute) {\n let errors = this.errorsFor(attribute);\n if (errors.length === 0) {\n return undefined;\n }\n return errors;\n }\n /**\n Manually adds errors to the record. This will trigger the `becameInvalid` event/ lifecycle method on\n the record and transition the record into an `invalid` state.\n Example\n ```javascript\n let errors = get(user, 'errors');\n // add multiple errors\n errors.add('password', [\n 'Must be at least 12 characters',\n 'Must contain at least one symbol',\n 'Cannot contain your name'\n ]);\n errors.errorsFor('password');\n // =>\n // [\n // { attribute: 'password', message: 'Must be at least 12 characters' },\n // { attribute: 'password', message: 'Must contain at least one symbol' },\n // { attribute: 'password', message: 'Cannot contain your name' },\n // ]\n // add a single error\n errors.add('username', 'This field is required');\n errors.errorsFor('username');\n // =>\n // [\n // { attribute: 'username', message: 'This field is required' },\n // ]\n ```\n @method add\n @public\n @param {string} attribute - the property name of an attribute or relationship\n @param {string[]|string} messages - an error message or array of error messages for the attribute\n */\n add(attribute, messages) {\n const errors = this._findOrCreateMessages(attribute, messages);\n this.addObjects(errors);\n this.errorsFor(attribute).addObjects(errors);\n this.__record.currentState.notify('isValid');\n this.notifyPropertyChange(attribute);\n }\n\n /**\n @method _findOrCreateMessages\n @private\n */\n _findOrCreateMessages(attribute, messages) {\n let errors = this.errorsFor(attribute);\n let messagesArray = Array.isArray(messages) ? messages : [messages];\n let _messages = new Array(messagesArray.length);\n for (let i = 0; i < messagesArray.length; i++) {\n let message = messagesArray[i];\n let err = errors.findBy('message', message);\n if (err) {\n _messages[i] = err;\n } else {\n _messages[i] = {\n attribute: attribute,\n message\n };\n }\n }\n return _messages;\n }\n\n /**\n Manually removes all errors for a given member from the record.\n This will transition the record into a `valid` state, and\n triggers the `becameValid` event and lifecycle method.\n Example:\n ```javascript\n let errors = get('user', errors);\n errors.add('phone', ['error-1', 'error-2']);\n errors.errorsFor('phone');\n // =>\n // [\n // { attribute: 'phone', message: 'error-1' },\n // { attribute: 'phone', message: 'error-2' },\n // ]\n errors.remove('phone');\n errors.errorsFor('phone');\n // => undefined\n ```\n @method remove\n @public\n @param {string} member - the property name of an attribute or relationship\n */\n remove(attribute) {\n if (this.isEmpty) {\n return;\n }\n let content = this.rejectBy('attribute', attribute);\n this.content.setObjects(content);\n\n // Although errorsByAttributeName.delete is technically enough to sync errors state, we also\n // must mutate the array as well for autotracking\n let errors = this.errorsFor(attribute);\n for (let i = 0; i < errors.length; i++) {\n if (errors[i].attribute === attribute) {\n // .replace from Ember.NativeArray is necessary. JS splice will not work.\n errors.replace(i, 1);\n }\n }\n this.errorsByAttributeName.delete(attribute);\n this.__record.currentState.notify('isValid');\n this.notifyPropertyChange(attribute);\n this.notifyPropertyChange('length');\n }\n\n /**\n Manually clears all errors for the record.\n This will transition the record into a `valid` state, and\n will trigger the `becameValid` event and lifecycle method.\n Example:\n ```javascript\n let errors = get('user', errors);\n errors.add('username', ['error-a']);\n errors.add('phone', ['error-1', 'error-2']);\n errors.errorsFor('username');\n // =>\n // [\n // { attribute: 'username', message: 'error-a' },\n // ]\n errors.errorsFor('phone');\n // =>\n // [\n // { attribute: 'phone', message: 'error-1' },\n // { attribute: 'phone', message: 'error-2' },\n // ]\n errors.clear();\n errors.errorsFor('username');\n // => undefined\n errors.errorsFor('phone');\n // => undefined\n errors.get('messages')\n // => []\n ```\n @method clear\n @public\n */\n clear() {\n if (this.isEmpty) {\n return;\n }\n let errorsByAttributeName = this.errorsByAttributeName;\n let attributes = [];\n errorsByAttributeName.forEach(function (_, attribute) {\n attributes.push(attribute);\n });\n errorsByAttributeName.clear();\n attributes.forEach(attribute => {\n this.notifyPropertyChange(attribute);\n });\n this.__record.currentState.notify('isValid');\n super.clear();\n }\n\n /**\n Checks if there are error messages for the given attribute.\n ```app/controllers/user/edit.js\n import Controller from '@ember/controller';\n import { action } from '@ember/object';\n export default class UserEditController extends Controller {\n @action\n save(user) {\n if (user.get('errors').has('email')) {\n return alert('Please update your email before attempting to save.');\n }\n user.save();\n }\n }\n ```\n @method has\n @public\n @param {String} attribute\n @return {Boolean} true if there some errors on given attribute\n */\n has(attribute) {\n return this.errorsFor(attribute).length > 0;\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"errorsByAttributeName\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"errorsByAttributeName\"), _class.prototype), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"messages\", [_dec2], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class.prototype, \"content\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"content\"), _class.prototype), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isEmpty\", [_dec4], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { Errors as default };","import { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nexport function iterateData(data, fn) {\n if (Array.isArray(data)) {\n return data.map(fn);\n } else {\n return fn(data);\n }\n}\nexport function assertIdentifierHasId(identifier) {\n assert(`Attempted to schedule a fetch for a record without an id.`, identifier.id !== null);\n}\nexport function normalizeResponseHelper(serializer, store, modelClass, payload, id, requestType) {\n let normalizedResponse = serializer ? serializer.normalizeResponse(store, modelClass, payload, id, requestType) : payload;\n validateDocumentStructure(normalizedResponse);\n return normalizedResponse;\n}\nexport function validateDocumentStructure(doc) {\n if (DEBUG) {\n let errors = [];\n if (!doc || typeof doc !== 'object') {\n errors.push('Top level of a JSON API document must be an object');\n } else {\n if (!('data' in doc) && !('errors' in doc) && !('meta' in doc)) {\n errors.push('One or more of the following keys must be present: \"data\", \"errors\", \"meta\".');\n } else {\n if ('data' in doc && 'errors' in doc) {\n errors.push('Top level keys \"errors\" and \"data\" cannot both be present in a JSON API document');\n }\n }\n if ('data' in doc) {\n if (!(doc.data === null || Array.isArray(doc.data) || typeof doc.data === 'object')) {\n errors.push('data must be null, an object, or an array');\n }\n }\n if ('meta' in doc) {\n if (typeof doc.meta !== 'object') {\n errors.push('meta must be an object');\n }\n }\n if ('errors' in doc) {\n if (!Array.isArray(doc.errors)) {\n errors.push('errors must be an array');\n }\n }\n if ('links' in doc) {\n if (typeof doc.links !== 'object') {\n errors.push('links must be an object');\n }\n }\n if ('jsonapi' in doc) {\n if (typeof doc.jsonapi !== 'object') {\n errors.push('jsonapi must be an object');\n }\n }\n if ('included' in doc) {\n if (typeof doc.included !== 'object') {\n errors.push('included must be an array');\n }\n }\n }\n assert(`Response must be normalized to a valid JSON API document:\\n\\t* ${errors.join('\\n\\t* ')}`, errors.length === 0);\n }\n}","import { assert, deprecate } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { resolve } from 'rsvp';\nimport { iterateData, normalizeResponseHelper } from './legacy-data-utils';\nexport function _findHasMany(adapter, store, identifier, link, relationship, options) {\n const snapshot = store._instanceCache.createSnapshot(identifier, options);\n let modelClass = store.modelFor(relationship.type);\n let useLink = !link || typeof link === 'string';\n let relatedLink = useLink ? link : link.href;\n let promise = adapter.findHasMany(store, snapshot, relatedLink, relationship);\n let label = `DS: Handle Adapter#findHasMany of '${identifier.type}' : '${relationship.type}'`;\n promise = guardDestroyedStore(promise, store, label);\n promise = promise.then(adapterPayload => {\n if (!_objectIsAlive(store._instanceCache.getInternalModel(identifier))) {\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n deprecate(`A Promise for fetching ${relationship.type} did not resolve by the time your model was destroyed. This will error in a future release.`, false, {\n id: 'ember-data:rsvp-unresolved-async',\n until: '5.0',\n for: '@ember-data/store',\n since: {\n available: '4.5',\n enabled: '4.5'\n }\n });\n }\n }\n assert(`You made a 'findHasMany' request for a ${identifier.type}'s '${relationship.key}' relationship, using link '${link}' , but the adapter's response did not have any data`, payloadIsNotBlank(adapterPayload));\n let serializer = store.serializerFor(relationship.type);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findHasMany');\n assert(`fetched the hasMany relationship '${relationship.name}' for ${identifier.type}:${identifier.id} with link '${link}', but no data member is present in the response. If no data exists, the response should set { data: [] }`, 'data' in payload && Array.isArray(payload.data));\n payload = syncRelationshipDataFromLink(store, payload, identifier, relationship);\n return store._push(payload);\n }, null, `DS: Extract payload of '${identifier.type}' : hasMany '${relationship.type}'`);\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n promise = _guard(promise, _bind(_objectIsAlive, store._instanceCache.getInternalModel(identifier)));\n }\n return promise;\n}\nexport function _findBelongsTo(store, identifier, link, relationship, options) {\n let adapter = store.adapterFor(identifier.type);\n assert(`You tried to load a belongsTo relationship but you have no adapter (for ${identifier.type})`, adapter);\n assert(`You tried to load a belongsTo relationship from a specified 'link' in the original payload but your adapter does not implement 'findBelongsTo'`, typeof adapter.findBelongsTo === 'function');\n let snapshot = store._instanceCache.createSnapshot(identifier, options);\n let modelClass = store.modelFor(relationship.type);\n let useLink = !link || typeof link === 'string';\n let relatedLink = useLink ? link : link.href;\n let promise = adapter.findBelongsTo(store, snapshot, relatedLink, relationship);\n let label = `DS: Handle Adapter#findBelongsTo of ${identifier.type} : ${relationship.type}`;\n promise = guardDestroyedStore(promise, store, label);\n promise = _guard(promise, _bind(_objectIsAlive, store._instanceCache.getInternalModel(identifier)));\n promise = promise.then(adapterPayload => {\n if (!_objectIsAlive(store._instanceCache.getInternalModel(identifier))) {\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n deprecate(`A Promise for fetching ${relationship.type} did not resolve by the time your model was destroyed. This will error in a future release.`, false, {\n id: 'ember-data:rsvp-unresolved-async',\n until: '5.0',\n for: '@ember-data/store',\n since: {\n available: '4.5',\n enabled: '4.5'\n }\n });\n }\n }\n let serializer = store.serializerFor(relationship.type);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findBelongsTo');\n assert(`fetched the belongsTo relationship '${relationship.name}' for ${identifier.type}:${identifier.id} with link '${link}', but no data member is present in the response. If no data exists, the response should set { data: null }`, 'data' in payload && (payload.data === null || typeof payload.data === 'object' && !Array.isArray(payload.data)));\n if (!payload.data && !payload.links && !payload.meta) {\n return null;\n }\n payload = syncRelationshipDataFromLink(store, payload, identifier, relationship);\n return store._push(payload);\n }, null, `DS: Extract payload of ${identifier.type} : ${relationship.type}`);\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n promise = _guard(promise, _bind(_objectIsAlive, store._instanceCache.getInternalModel(identifier)));\n }\n return promise;\n}\n\n// sync\n// iterate over records in payload.data\n// for each record\n// assert that record.relationships[inverse] is either undefined (so we can fix it)\n// or provide a data: {id, type} that matches the record that requested it\n// return the relationship data for the parent\nfunction syncRelationshipDataFromLink(store, payload, parentIdentifier, relationship) {\n // ensure the right hand side (incoming payload) points to the parent record that\n // requested this relationship\n let relationshipData = payload.data ? iterateData(payload.data, (data, index) => {\n const {\n id,\n type\n } = data;\n ensureRelationshipIsSetToParent(data, parentIdentifier, store, relationship, index);\n return {\n id,\n type\n };\n }) : null;\n const relatedDataHash = {};\n if ('meta' in payload) {\n relatedDataHash.meta = payload.meta;\n }\n if ('links' in payload) {\n relatedDataHash.links = payload.links;\n }\n if ('data' in payload) {\n relatedDataHash.data = relationshipData;\n }\n\n // now, push the left hand side (the parent record) to ensure things are in sync, since\n // the payload will be pushed with store._push\n const parentPayload = {\n id: parentIdentifier.id,\n type: parentIdentifier.type,\n relationships: {\n [relationship.key]: relatedDataHash\n }\n };\n if (!Array.isArray(payload.included)) {\n payload.included = [];\n }\n payload.included.push(parentPayload);\n return payload;\n}\nfunction ensureRelationshipIsSetToParent(payload, parentIdentifier, store, parentRelationship, index) {\n let {\n id,\n type\n } = payload;\n if (!payload.relationships) {\n payload.relationships = {};\n }\n let {\n relationships\n } = payload;\n let inverse = getInverse(store, parentIdentifier, parentRelationship, type);\n if (inverse) {\n let {\n inverseKey,\n kind\n } = inverse;\n let relationshipData = relationships[inverseKey] && relationships[inverseKey].data;\n if (DEBUG && typeof relationshipData !== 'undefined' && !relationshipDataPointsToParent(relationshipData, parentIdentifier)) {\n let inspect = function inspect(thing) {\n return `'${JSON.stringify(thing)}'`;\n };\n let quotedType = inspect(type);\n let quotedInverse = inspect(inverseKey);\n let expected = inspect({\n id: parentIdentifier.id,\n type: parentIdentifier.type\n });\n let expectedModel = `${parentIdentifier.type}:${parentIdentifier.id}`;\n let got = inspect(relationshipData);\n let prefix = typeof index === 'number' ? `data[${index}]` : `data`;\n let path = `${prefix}.relationships.${inverseKey}.data`;\n let other = relationshipData ? `<${relationshipData.type}:${relationshipData.id}>` : null;\n let relationshipFetched = `${expectedModel}.${parentRelationship.kind}(\"${parentRelationship.name}\")`;\n let includedRecord = `<${type}:${id}>`;\n let message = [`Encountered mismatched relationship: Ember Data expected ${path} in the payload from ${relationshipFetched} to include ${expected} but got ${got} instead.\\n`, `The ${includedRecord} record loaded at ${prefix} in the payload specified ${other} as its ${quotedInverse}, but should have specified ${expectedModel} (the record the relationship is being loaded from) as its ${quotedInverse} instead.`, `This could mean that the response for ${relationshipFetched} may have accidentally returned ${quotedType} records that aren't related to ${expectedModel} and could be related to a different ${parentIdentifier.type} record instead.`, `Ember Data has corrected the ${includedRecord} record's ${quotedInverse} relationship to ${expectedModel} so that ${relationshipFetched} will include ${includedRecord}.`, `Please update the response from the server or change your serializer to either ensure that the response for only includes ${quotedType} records that specify ${expectedModel} as their ${quotedInverse}, or omit the ${quotedInverse} relationship from the response.`].join('\\n');\n assert(message);\n }\n if (kind !== 'hasMany' || typeof relationshipData !== 'undefined') {\n relationships[inverseKey] = relationships[inverseKey] || {};\n relationships[inverseKey].data = fixRelationshipData(relationshipData, kind, parentIdentifier);\n }\n }\n}\nfunction getInverse(store, parentInternalModel, parentRelationship, type) {\n return recordDataFindInverseRelationshipInfo(store, parentInternalModel, parentRelationship, type);\n}\nfunction recordDataFindInverseRelationshipInfo(store, parentIdentifier, parentRelationship, type) {\n let {\n name: lhs_relationshipName\n } = parentRelationship;\n let {\n type: parentType\n } = parentIdentifier;\n let inverseKey = store._instanceCache._storeWrapper.inverseForRelationship(parentType, lhs_relationshipName);\n if (inverseKey) {\n let {\n meta: {\n kind\n }\n } = store._instanceCache._storeWrapper.relationshipsDefinitionFor(type)[inverseKey];\n return {\n inverseKey,\n kind\n };\n }\n}\nfunction relationshipDataPointsToParent(relationshipData, identifier) {\n if (relationshipData === null) {\n return false;\n }\n if (Array.isArray(relationshipData)) {\n if (relationshipData.length === 0) {\n return false;\n }\n for (let i = 0; i < relationshipData.length; i++) {\n let entry = relationshipData[i];\n if (validateRelationshipEntry(entry, identifier)) {\n return true;\n }\n }\n } else {\n return validateRelationshipEntry(relationshipData, identifier);\n }\n return false;\n}\nfunction fixRelationshipData(relationshipData, relationshipKind, {\n id,\n type\n}) {\n let parentRelationshipData = {\n id,\n type\n };\n let payload;\n if (relationshipKind === 'hasMany') {\n payload = relationshipData || [];\n if (relationshipData) {\n // these arrays could be massive so this is better than filter\n // Note: this is potentially problematic if type/id are not in the\n // same state of normalization.\n let found = relationshipData.find(v => {\n return v.type === parentRelationshipData.type && v.id === parentRelationshipData.id;\n });\n if (!found) {\n payload.push(parentRelationshipData);\n }\n } else {\n payload.push(parentRelationshipData);\n }\n } else {\n payload = relationshipData || {};\n Object.assign(payload, parentRelationshipData);\n }\n return payload;\n}\nfunction validateRelationshipEntry({\n id\n}, {\n id: parentModelID\n}) {\n return id && id.toString() === parentModelID;\n}\nfunction _bind(fn, ...args) {\n return function () {\n return fn.apply(undefined, args);\n };\n}\nfunction _guard(promise, test) {\n let guarded = promise.finally(() => {\n if (!test()) {\n guarded._subscribers.length = 0;\n }\n });\n return guarded;\n}\nfunction _objectIsAlive(object) {\n return !(object.isDestroyed || object.isDestroying);\n}\nfunction payloadIsNotBlank(adapterPayload) {\n if (Array.isArray(adapterPayload)) {\n return true;\n } else {\n return Object.keys(adapterPayload || {}).length;\n }\n}\nfunction guardDestroyedStore(promise, store, label) {\n let token;\n if (DEBUG) {\n token = store._trackAsyncRequestStart(label);\n }\n let wrapperPromise = resolve(promise, label).then(_v => {\n if (!_objectIsAlive(store)) {\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n deprecate(`A Promise did not resolve by the time the store was destroyed. This will error in a future release.`, false, {\n id: 'ember-data:rsvp-unresolved-async',\n until: '5.0',\n for: '@ember-data/store',\n since: {\n available: '4.5',\n enabled: '4.5'\n }\n });\n }\n }\n return promise;\n });\n return _guard(wrapperPromise, () => {\n if (DEBUG) {\n store._trackAsyncRequestEnd(token);\n }\n return _objectIsAlive(store);\n });\n}","/**\n @module @ember-data/model\n*/\n\n/**\n @method diffArray\n @internal\n @param {Array} oldArray the old array\n @param {Array} newArray the new array\n @return {hash} {\n firstChangeIndex: , // null if no change\n addedCount: , // 0 if no change\n removedCount: // 0 if no change\n }\n*/\nexport default function diffArray(oldArray, newArray) {\n const oldLength = oldArray.length;\n const newLength = newArray.length;\n const shortestLength = Math.min(oldLength, newLength);\n let firstChangeIndex = null; // null signifies no changes\n\n // find the first change\n for (let i = 0; i < shortestLength; i++) {\n // compare each item in the array\n if (oldArray[i] !== newArray[i]) {\n firstChangeIndex = i;\n break;\n }\n }\n if (firstChangeIndex === null && newLength !== oldLength) {\n // no change found in the overlapping block\n // and array lengths differ,\n // so change starts at end of overlap\n firstChangeIndex = shortestLength;\n }\n let addedCount = 0;\n let removedCount = 0;\n if (firstChangeIndex !== null) {\n // we found a change, find the end of the change\n let unchangedEndBlockLength = shortestLength - firstChangeIndex;\n // walk back from the end of both arrays until we find a change\n for (let i = 1; i <= shortestLength; i++) {\n // compare each item in the array\n if (oldArray[oldLength - i] !== newArray[newLength - i]) {\n unchangedEndBlockLength = i - 1;\n break;\n }\n }\n addedCount = newLength - unchangedEndBlockLength - firstChangeIndex;\n removedCount = oldLength - unchangedEndBlockLength - firstChangeIndex;\n }\n return {\n firstChangeIndex,\n addedCount,\n removedCount\n };\n}","/**\n @module @ember-data/store\n*/\nimport EmberArray from '@ember/array';\nimport MutableArray from '@ember/array/mutable';\nimport { assert } from '@ember/debug';\nimport EmberObject, { get } from '@ember/object';\nimport { all } from 'rsvp';\nimport { PromiseArray, recordDataFor } from '@ember-data/store/-private';\nimport diffArray from './diff-array';\nconst MutableArrayWithObject = EmberObject.extend(MutableArray);\n/**\n A `ManyArray` is a `MutableArray` that represents the contents of a has-many\n relationship.\n\n The `ManyArray` is instantiated lazily the first time the relationship is\n requested.\n\n This class is not intended to be directly instantiated by consuming applications.\n\n ### Inverses\n\n Often, the relationships in Ember Data applications will have\n an inverse. For example, imagine the following models are\n defined:\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('comment') comments;\n }\n ```\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo('post') post;\n }\n ```\n\n If you created a new instance of `Post` and added\n a `Comment` record to its `comments` has-many\n relationship, you would expect the comment's `post`\n property to be set to the post that contained\n the has-many.\n\n We call the record to which a relationship belongs-to the\n relationship's _owner_.\n\n @class ManyArray\n @public\n @extends Ember.EmberObject\n @uses Ember.MutableArray\n*/\nexport default class ManyArray extends MutableArrayWithObject {\n // override the base declaration\n\n init() {\n super.init();\n\n /**\n The loading state of this array\n @property {Boolean} isLoaded\n @public\n */\n this.isLoaded = this.isLoaded || false;\n this.isAsync = this.isAsync || false;\n this._length = 0;\n\n /**\n Metadata associated with the request for async hasMany relationships.\n Example\n Given that the server returns the following JSON payload when fetching a\n hasMany relationship:\n ```js\n {\n \"comments\": [{\n \"id\": 1,\n \"comment\": \"This is the first comment\",\n }, {\n // ...\n }],\n \"meta\": {\n \"page\": 1,\n \"total\": 5\n }\n }\n ```\n You can then access the meta data via the `meta` property:\n ```js\n let comments = await post.comments;\n let meta = comments.meta;\n // meta.page => 1\n // meta.total => 5\n ```\n @property {Object | null} meta\n @public\n */\n this._meta = this._meta || null;\n\n /**\n * Retrieve the links for this relationship\n *\n @property {Object | null} links\n @public\n */\n this._links = this._links || null;\n\n /**\n `true` if the relationship is polymorphic, `false` otherwise.\n @property {Boolean} isPolymorphic\n @private\n */\n this.isPolymorphic = this.isPolymorphic || false;\n\n /**\n The relationship which manages this array.\n @property {ManyRelationship} relationship\n @private\n */\n this.currentState = [];\n this._isUpdating = false;\n this._isDirty = false;\n /*\n * Unfortunately ArrayProxy adds it's observers lazily,\n * so in a first-render situation we may sometimes notify\n * prior to the ArrayProxy having installed it's observers\n * (which occurs during _revalidate()).\n *\n * This leads to the flush occuring on access, the flush takes\n * the hasObservers codepath which in code out of our control\n * notifies again leading to a glimmer rendering invalidation error.\n *\n * We use this flag to detect the case where we notified without\n * array observers but observers were installed prior to flush.\n *\n * We do not need to fire array observers at all in this case\n * since it will be the first-access for those observers.\n */\n this._hasNotified = false;\n // make sure we initialize to the correct state\n // since the user has already accessed\n this.retrieveLatest();\n }\n\n // TODO refactor away _hasArrayObservers for tests\n get _hasArrayObservers() {\n // cast necessary because hasArrayObservers is typed as a ComputedProperty vs a boolean;\n return this.hasArrayObservers || this.__hasArrayObservers;\n }\n notify() {\n this._isDirty = true;\n if (this._hasArrayObservers && !this._hasNotified) {\n this.retrieveLatest();\n } else {\n this._hasNotified = true;\n this.notifyPropertyChange('[]');\n this.notifyPropertyChange('length');\n this.notifyPropertyChange('firstObject');\n this.notifyPropertyChange('lastObject');\n }\n }\n get length() {\n if (this._isDirty) {\n this.retrieveLatest();\n }\n // By using `get()`, the tracking system knows to pay attention to changes that occur.\n get(this, '[]');\n return this._length;\n }\n set length(value) {\n this._length = value;\n }\n get links() {\n get(this, '[]');\n if (this._isDirty) {\n this.retrieveLatest();\n }\n return this._links;\n }\n set links(v) {\n this._links = v;\n }\n get meta() {\n get(this, '[]');\n if (this._isDirty) {\n this.retrieveLatest();\n }\n return this._meta;\n }\n set meta(v) {\n this._meta = v;\n }\n objectAt(index) {\n if (this._isDirty) {\n this.retrieveLatest();\n }\n let identifier = this.currentState[index];\n if (identifier === undefined) {\n return;\n }\n return this.store._instanceCache.getRecord(identifier);\n }\n replace(idx, amt, objects) {\n assert(`Cannot push mutations to the cache while updating the relationship from cache`, !this._isUpdating);\n const {\n store\n } = this;\n store._backburner.join(() => {\n let identifiers;\n if (amt > 0) {\n identifiers = this.currentState.slice(idx, idx + amt);\n this.recordData.removeFromHasMany(this.key,\n // TODO RecordData V2: recordData should take identifiers not RecordDatas\n identifiers.map(identifier => store._instanceCache.getRecordData(identifier)));\n }\n if (objects) {\n assert('The third argument to replace needs to be an array.', Array.isArray(objects) || EmberArray.detect(objects));\n this.recordData.addToHasMany(this.key, objects.map(obj => recordDataFor(obj)), idx);\n }\n this.notify();\n });\n }\n retrieveLatest() {\n // It’s possible the parent side of the relationship may have been destroyed by this point\n if (this.isDestroyed || this.isDestroying || this._isUpdating) {\n return;\n }\n this._isDirty = false;\n this._isUpdating = true;\n let jsonApi = this.recordData.getHasMany(this.key);\n let identifiers = [];\n if (jsonApi.data) {\n for (let i = 0; i < jsonApi.data.length; i++) {\n // TODO figure out where this state comes from\n let im = this.store._instanceCache._internalModelForResource(jsonApi.data[i]);\n let shouldRemove = im._isDematerializing || im.isEmpty || !im.isLoaded;\n if (!shouldRemove) {\n identifiers.push(im.identifier);\n }\n }\n }\n if (jsonApi.meta) {\n this._meta = jsonApi.meta;\n }\n if (jsonApi.links) {\n this._links = jsonApi.links;\n }\n if (this._hasArrayObservers && !this._hasNotified) {\n // diff to find changes\n let diff = diffArray(this.currentState, identifiers);\n // it's null if no change found\n if (diff.firstChangeIndex !== null) {\n // we found a change\n this.arrayContentWillChange(diff.firstChangeIndex, diff.removedCount, diff.addedCount);\n this._length = identifiers.length;\n this.currentState = identifiers;\n this.arrayContentDidChange(diff.firstChangeIndex, diff.removedCount, diff.addedCount);\n }\n } else {\n this._hasNotified = false;\n this._length = identifiers.length;\n this.currentState = identifiers;\n }\n this._isUpdating = false;\n }\n\n /**\n Reloads all of the records in the manyArray. If the manyArray\n holds a relationship that was originally fetched using a links url\n Ember Data will revisit the original links url to repopulate the\n relationship.\n If the manyArray holds the result of a `store.query()` reload will\n re-run the original query.\n Example\n ```javascript\n let user = store.peekRecord('user', '1')\n await login(user);\n let permissions = await user.permissions;\n await permissions.reload();\n ```\n @method reload\n @public\n */\n reload(options) {\n // TODO this is odd, we don't ask the store for anything else like this?\n return this.legacySupport.reloadHasMany(this.key, options);\n }\n\n /**\n Saves all of the records in the `ManyArray`.\n Example\n ```javascript\n let inbox = await store.findRecord('inbox', '1');\n let messages = await inbox.messages;\n messages.forEach((message) => {\n message.isRead = true;\n });\n messages.save();\n ```\n @method save\n @public\n @return {PromiseArray} promise\n */\n save() {\n let manyArray = this;\n let promiseLabel = 'DS: ManyArray#save ' + this.type.modelName;\n let promise = all(this.invoke('save'), promiseLabel).then(() => manyArray, null, 'DS: ManyArray#save return ManyArray');\n\n // TODO deprecate returning a promiseArray here\n return PromiseArray.create({\n promise\n });\n }\n\n /**\n Create a child record within the owner\n @method createRecord\n @public\n @param {Object} hash\n @return {Model} record\n */\n createRecord(hash) {\n const {\n store,\n type\n } = this;\n const record = store.createRecord(type.modelName, hash);\n this.pushObject(record);\n return record;\n }\n}","var _dec, _class;\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { assert } from '@ember/debug';\nimport { computed } from '@ember/object';\nimport { PromiseObject } from '@ember-data/store/-private';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nconst Extended = PromiseObject;\n\n/**\n @module @ember-data/model\n */\n\n/**\n A PromiseBelongsTo is a PromiseObject that also proxies certain method calls\n to the underlying belongsTo model.\n Right now we proxy:\n * `reload()`\n @class PromiseBelongsTo\n @extends PromiseObject\n @private\n*/\nlet PromiseBelongsTo = (_dec = computed(), _class = class PromiseBelongsTo extends Extended {\n // we don't proxy meta because we would need to proxy it to the relationship state container\n // however, meta on relationships does not trigger change notifications.\n // if you need relationship meta, you should do `record.belongsTo(relationshipName).meta()`\n get meta() {\n // eslint-disable-next-line no-constant-condition\n if (1) {\n assert('You attempted to access meta on the promise for the async belongsTo relationship ' + `${this.get('_belongsToState').modelName}:${this.get('_belongsToState').key}'.` + '\\nUse `record.belongsTo(relationshipName).meta()` instead.', false);\n }\n return;\n }\n async reload(options) {\n assert('You are trying to reload an async belongsTo before it has been created', this.content !== undefined);\n let {\n key,\n legacySupport\n } = this._belongsToState;\n await legacySupport.reloadBelongsTo(key, options);\n return this;\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"meta\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"meta\"), _class.prototype), _class);\nexport default PromiseBelongsTo;","var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport ArrayMixin, { NativeArray } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { tracked } from '@glimmer/tracking';\nimport Ember from 'ember';\nimport { resolve } from 'rsvp';\n\n/**\n @module @ember-data/model\n */\n/**\n This class is returned as the result of accessing an async hasMany relationship\n on an instance of a Model extending from `@ember-data/model`.\n\n A PromiseManyArray is an array-like proxy that also proxies certain method calls\n to the underlying ManyArray in addition to being \"promisified\".\n\n Right now we proxy:\n\n * `reload()`\n * `createRecord()`\n\n This promise-proxy behavior is primarily to ensure that async relationship interact\n nicely with templates. In your JS code you should resolve the promise first.\n\n ```js\n const comments = await post.comments;\n ```\n\n @class PromiseManyArray\n @public\n*/\nlet PromiseManyArray = (_class = class PromiseManyArray {\n constructor(promise, content) {\n //---- Methods/Properties on ArrayProxy that we will keep as our API\n _initializerDefineProperty(this, \"content\", _descriptor, this);\n //---- Properties/Methods from the PromiseProxyMixin that we will keep as our API\n /**\n * Whether the loading promise is still pending\n *\n * @property {boolean} isPending\n * @public\n */\n _initializerDefineProperty(this, \"isPending\", _descriptor2, this);\n /**\n * Whether the loading promise rejected\n *\n * @property {boolean} isRejected\n * @public\n */\n _initializerDefineProperty(this, \"isRejected\", _descriptor3, this);\n /**\n * Whether the loading promise succeeded\n *\n * @property {boolean} isFulfilled\n * @public\n */\n _initializerDefineProperty(this, \"isFulfilled\", _descriptor4, this);\n /**\n * Whether the loading promise completed (resolved or rejected)\n *\n * @property {boolean} isSettled\n * @public\n */\n _initializerDefineProperty(this, \"isSettled\", _descriptor5, this);\n this._update(promise, content);\n this.isDestroyed = false;\n this.isDestroying = false;\n const meta = Ember.meta(this);\n meta.hasMixin = mixin => {\n if (mixin === NativeArray || mixin === ArrayMixin) {\n return true;\n }\n return false;\n };\n }\n /**\n * Retrieve the length of the content\n * @property length\n * @public\n */\n get length() {\n // shouldn't be needed, but ends up being needed\n // for computed chains even in 4.x\n this['[]'];\n return this.content ? this.content.length : 0;\n }\n\n // ember-source < 3.23 (e.g. 3.20 lts)\n // requires that the tag `'[]'` be notified\n // on the ArrayProxy in order for `{{#each}}`\n // to recompute. We entangle the '[]' tag from\n get '[]'() {\n return this.content ? this.content['[]'] : this.content;\n }\n\n /**\n * Iterate the proxied content. Called by the glimmer iterator in #each\n *\n * @method forEach\n * @param cb\n * @returns\n * @private\n */\n forEach(cb) {\n this['[]']; // needed for < 3.23 support e.g. 3.20 lts\n if (this.content && this.length) {\n this.content.forEach(cb);\n }\n }\n /**\n * chain this promise\n *\n * @method then\n * @public\n * @param success\n * @param fail\n * @returns Promise\n */\n then(s, f) {\n return this.promise.then(s, f);\n }\n\n /**\n * catch errors thrown by this promise\n * @method catch\n * @public\n * @param callback\n * @returns Promise\n */\n catch(cb) {\n return this.promise.catch(cb);\n }\n\n /**\n * run cleanup after this promise completes\n *\n * @method finally\n * @public\n * @param callback\n * @returns Promise\n */\n finally(cb) {\n return this.promise.finally(cb);\n }\n\n //---- Methods on EmberObject that we should keep\n\n destroy() {\n this.isDestroying = true;\n this.isDestroyed = true;\n this.content = null;\n this.promise = null;\n }\n\n //---- Methods/Properties on ManyArray that we own and proxy to\n\n /**\n * Retrieve the links for this relationship\n * @property links\n * @public\n */\n get links() {\n return this.content ? this.content.links : undefined;\n }\n\n /**\n * Retrieve the meta for this relationship\n * @property meta\n * @public\n */\n get meta() {\n return this.content ? this.content.meta : undefined;\n }\n\n /**\n * Reload the relationship\n * @method reload\n * @public\n * @param options\n * @returns\n */\n reload(options) {\n assert('You are trying to reload an async manyArray before it has been created', this.content);\n this.content.reload(options);\n return this;\n }\n\n //---- Our own stuff\n\n _update(promise, content) {\n if (content !== undefined) {\n this.content = content;\n }\n this.promise = tapPromise(this, promise);\n }\n static create({\n promise,\n content\n }) {\n return new this(promise, content);\n }\n\n // Methods on ManyArray which people should resolve the relationship first before calling\n createRecord(...args) {\n assert('You are trying to createRecord on an async manyArray before it has been created', this.content);\n return this.content.createRecord(...args);\n }\n\n // Properties/Methods on ArrayProxy we should deprecate\n\n get firstObject() {\n return this.content ? this.content.firstObject : undefined;\n }\n get lastObject() {\n return this.content ? this.content.lastObject : undefined;\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"content\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _applyDecoratedDescriptor(_class.prototype, \"length\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"length\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '[]', [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, '[]'), _class.prototype), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isPending\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isRejected\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isFulfilled\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isSettled\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _applyDecoratedDescriptor(_class.prototype, \"links\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"links\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"meta\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"meta\"), _class.prototype), _class);\nexport { PromiseManyArray as default };\nfunction tapPromise(proxy, promise) {\n proxy.isPending = true;\n proxy.isSettled = false;\n proxy.isFulfilled = false;\n proxy.isRejected = false;\n return resolve(promise).then(content => {\n proxy.isPending = false;\n proxy.isFulfilled = true;\n proxy.isSettled = true;\n proxy.content = content;\n return content;\n }, error => {\n proxy.isPending = false;\n proxy.isFulfilled = false;\n proxy.isRejected = true;\n proxy.isSettled = true;\n throw error;\n });\n}\nconst EmberObjectMethods = ['addObserver', 'cacheFor', 'decrementProperty', 'get', 'getProperties', 'incrementProperty', 'notifyPropertyChange', 'removeObserver', 'set', 'setProperties', 'toggleProperty'];\nEmberObjectMethods.forEach(method => {\n PromiseManyArray.prototype[method] = function delegatedMethod(...args) {\n return Ember[method](this, ...args);\n };\n});\nconst InheritedProxyMethods = ['addArrayObserver', 'addObject', 'addObjects', 'any', 'arrayContentDidChange', 'arrayContentWillChange', 'clear', 'compact', 'every', 'filter', 'filterBy', 'find', 'findBy', 'getEach', 'includes', 'indexOf', 'insertAt', 'invoke', 'isAny', 'isEvery', 'lastIndexOf', 'map', 'mapBy', 'objectAt', 'objectsAt', 'popObject', 'pushObject', 'pushObjects', 'reduce', 'reject', 'rejectBy', 'removeArrayObserver', 'removeAt', 'removeObject', 'removeObjects', 'replace', 'reverseObjects', 'setEach', 'setObjects', 'shiftObject', 'slice', 'sortBy', 'toArray', 'uniq', 'uniqBy', 'unshiftObject', 'unshiftObjects', 'without'];\nInheritedProxyMethods.forEach(method => {\n PromiseManyArray.prototype[method] = function proxiedMethod(...args) {\n assert(`Cannot call ${method} before content is assigned.`, this.content);\n return this.content[method](...args);\n };\n});","var _class, _descriptor, _identifier, _token, _relatedToken;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { tracked } from '@glimmer/tracking';\nimport { cached } from \"ember-cached-decorator-polyfill\";\nimport { resolve } from 'rsvp';\nimport { recordIdentifierFor } from '@ember-data/store/-private';\nimport { LEGACY_SUPPORT } from '../model';\n\n/**\n @module @ember-data/model\n*/\n\nfunction isResourceIdentiferWithRelatedLinks(value) {\n return Boolean(value && value.links && value.links.related);\n}\n\n/**\n A `BelongsToReference` is a low-level API that allows users and\n addon authors to perform meta-operations on a belongs-to\n relationship.\n\n @class BelongsToReference\n @public\n */\nlet BelongsToReference = (_class = (_identifier = /*#__PURE__*/_classPrivateFieldLooseKey(\"identifier\"), _token = /*#__PURE__*/_classPrivateFieldLooseKey(\"token\"), _relatedToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"relatedToken\"), class BelongsToReference {\n constructor(store, parentIdentifier, belongsToRelationship, key) {\n Object.defineProperty(this, _identifier, {\n writable: true,\n value: void 0\n });\n // unsubscribe tokens given to us by the notification manager\n Object.defineProperty(this, _token, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _relatedToken, {\n writable: true,\n value: null\n });\n _initializerDefineProperty(this, \"_ref\", _descriptor, this);\n this.key = key;\n this.belongsToRelationship = belongsToRelationship;\n this.type = belongsToRelationship.definition.type;\n this.store = store;\n _classPrivateFieldLooseBase(this, _identifier)[_identifier] = parentIdentifier;\n _classPrivateFieldLooseBase(this, _token)[_token] = store._notificationManager.subscribe(parentIdentifier, (_, bucket, notifiedKey) => {\n if ((bucket === 'relationships' || bucket === 'property') && notifiedKey === key) {\n this._ref++;\n }\n });\n\n // TODO inverse\n }\n destroy() {\n // TODO @feature we need the notification manager often enough\n // we should potentially just expose it fully public\n this.store._notificationManager.unsubscribe(_classPrivateFieldLooseBase(this, _token)[_token]);\n _classPrivateFieldLooseBase(this, _token)[_token] = null;\n if (_classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken]) {\n this.store._notificationManager.unsubscribe(_classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken]);\n _classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken] = null;\n }\n }\n get _relatedIdentifier() {\n this._ref; // consume the tracked prop\n if (_classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken]) {\n this.store._notificationManager.unsubscribe(_classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken]);\n _classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken] = null;\n }\n let resource = this._resource();\n if (resource && resource.data) {\n const identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resource.data);\n _classPrivateFieldLooseBase(this, _relatedToken)[_relatedToken] = this.store._notificationManager.subscribe(identifier, (_, bucket, notifiedKey) => {\n if (bucket === 'identity' || (bucket === 'attributes' || bucket === 'property') && notifiedKey === 'id') {\n this._ref++;\n }\n });\n return identifier;\n }\n return null;\n }\n\n /**\n The `id` of the record that this reference refers to. Together, the\n `type()` and `id()` methods form a composite key for the identity\n map. This can be used to access the id of an async relationship\n without triggering a fetch that would normally happen if you\n attempted to use `record.get('relationship.id')`.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo({ async: true }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // get the identifier of the reference\n if (userRef.remoteType() === \"id\") {\n let id = userRef.id();\n }\n ```\n @method id\n @public\n @return {String} The id of the record in this belongsTo relationship.\n */\n id() {\n return this._relatedIdentifier?.id || null;\n }\n\n /**\n The link Ember Data will use to fetch or reload this belongs-to\n relationship. By default it uses only the \"related\" resource linkage.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default Model.extend({\n user: belongsTo({ async: true })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n links: {\n related: '/articles/1/author'\n }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // get the identifier of the reference\n if (userRef.remoteType() === \"link\") {\n let link = userRef.link();\n }\n ```\n @method link\n @public\n @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship.\n */\n link() {\n let resource = this._resource();\n if (isResourceIdentiferWithRelatedLinks(resource)) {\n if (resource.links) {\n let related = resource.links.related;\n return !related || typeof related === 'string' ? related : related.href;\n }\n }\n return null;\n }\n\n /**\n * any links that have been received for this relationship\n *\n * @method links\n * @public\n * @returns\n */\n links() {\n let resource = this._resource();\n return resource && resource.links ? resource.links : null;\n }\n\n /**\n The meta data for the belongs-to relationship.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default Model.extend({\n user: belongsTo({ async: true })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n links: {\n related: {\n href: '/articles/1/author'\n },\n },\n meta: {\n lastUpdated: 1458014400000\n }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.meta() // { lastUpdated: 1458014400000 }\n ```\n @method meta\n @public\n @return {Object} The meta information for the belongs-to relationship.\n */\n meta() {\n let meta = null;\n let resource = this._resource();\n if (resource && resource.meta && typeof resource.meta === 'object') {\n meta = resource.meta;\n }\n return meta;\n }\n _resource() {\n return this.store._instanceCache.recordDataFor(_classPrivateFieldLooseBase(this, _identifier)[_identifier], false).getBelongsTo(this.key);\n }\n\n /**\n This returns a string that represents how the reference will be\n looked up when it is loaded. If the relationship has a link it will\n use the \"link\" otherwise it defaults to \"id\".\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n // get the identifier of the reference\n if (commentsRef.remoteType() === \"ids\") {\n let ids = commentsRef.ids();\n } else if (commentsRef.remoteType() === \"link\") {\n let link = commentsRef.link();\n }\n ```\n @method remoteType\n @public\n @return {String} The name of the remote type. This should either be `link` or `id`\n */\n remoteType() {\n let value = this._resource();\n if (isResourceIdentiferWithRelatedLinks(value)) {\n return 'link';\n }\n return 'id';\n }\n\n /**\n `push` can be used to update the data in the relationship and Ember\n Data will treat the new data as the canonical value of this\n relationship on the backend.\n Example\n ```app/models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo({ async: true }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // provide data for reference\n userRef.push({\n data: {\n type: 'user',\n id: 1,\n attributes: {\n username: \"@user\"\n }\n }\n }).then(function(user) {\n userRef.value() === user;\n });\n ```\n @method push\n @public\n @param {Object|Promise} objectOrPromise a promise that resolves to a JSONAPI document object describing the new value of this relationship.\n @return {Promise} A promise that resolves with the new value in this belongs-to relationship.\n */\n async push(data) {\n // TODO @deprecate pushing unresolved payloads\n const jsonApiDoc = await resolve(data);\n let record = this.store.push(jsonApiDoc);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\n const {\n graph,\n identifier\n } = this.belongsToRelationship;\n this.store._backburner.join(() => {\n graph.push({\n op: 'replaceRelatedRecord',\n record: identifier,\n field: this.key,\n value: recordIdentifierFor(record)\n });\n });\n return record;\n }\n\n /**\n `value()` synchronously returns the current value of the belongs-to\n relationship. Unlike `record.get('relationshipName')`, calling\n `value()` on a reference does not trigger a fetch if the async\n relationship is not yet loaded. If the relationship is not loaded\n it will always return `null`.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo({ async: true }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.value(); // null\n // provide data for reference\n userRef.push({\n data: {\n type: 'user',\n id: 1,\n attributes: {\n username: \"@user\"\n }\n }\n }).then(function(user) {\n userRef.value(); // user\n });\n ```\n @method value\n @public\n @return {Model} the record in this relationship\n */\n value() {\n let resource = this._resource();\n return resource && resource.data ? this.store.peekRecord(resource.data) : null;\n }\n\n /**\n Loads a record in a belongs-to relationship if it is not already\n loaded. If the relationship is already loaded this method does not\n trigger a new load.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo({ async: true }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.value(); // null\n userRef.load().then(function(user) {\n userRef.value() === user\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference.\n Example\n ```javascript\n userRef.load({ adapterOptions: { isPrivate: true } }).then(function(user) {\n userRef.value() === user;\n });\n ```\n ```app/adapters/user.js\n import Adapter from '@ember-data/adapter';\n export default class UserAdapter extends Adapter {\n findRecord(store, type, id, snapshot) {\n // In the adapter you will have access to adapterOptions.\n let adapterOptions = snapshot.adapterOptions;\n }\n });\n ```\n @method load\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the record in this belongs-to relationship.\n */\n load(options) {\n const support = LEGACY_SUPPORT.getWithError(_classPrivateFieldLooseBase(this, _identifier)[_identifier]);\n return support.getBelongsTo(this.key, options);\n }\n\n /**\n Triggers a reload of the value in this relationship. If the\n remoteType is `\"link\"` Ember Data will use the relationship link to\n reload the relationship. Otherwise it will reload the record by its\n id.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo({ async: true }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.reload().then(function(user) {\n userRef.value() === user\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference. A full example\n can be found in the `load` method.\n Example\n ```javascript\n userRef.reload({ adapterOptions: { isPrivate: true } })\n ```\n @method reload\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the record in this belongs-to relationship after the reload has completed.\n */\n reload(options) {\n const support = LEGACY_SUPPORT.getWithError(_classPrivateFieldLooseBase(this, _identifier)[_identifier]);\n return support.reloadBelongsTo(this.key, options).then(() => this.value());\n }\n}), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_ref\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 0;\n }\n}), _applyDecoratedDescriptor(_class.prototype, \"_relatedIdentifier\", [cached, dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"_relatedIdentifier\"), _class.prototype), _class);\nexport { BelongsToReference as default };","import { createCache, getValue } from '@glimmer/tracking/primitives/cache';\nimport { assert } from '@ember/debug';\n\nexport function cached(...args) {\n const [target, key, descriptor] = args;\n\n // Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`\n assert(\n 'You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!',\n target !== undefined\n );\n assert(\n `You attempted to use @cached on with ${\n args.length > 1 ? 'arguments' : 'an argument'\n } ( @cached(${args\n .map(d => `'${d}'`)\n .join(\n ', '\n )}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`,\n typeof target === 'object' &&\n typeof key === 'string' &&\n typeof descriptor === 'object' &&\n args.length === 3\n );\n assert(\n `The @cached decorator must be applied to getters. '${key}' is not a getter.`,\n typeof descriptor.get == 'function'\n );\n\n const caches = new WeakMap();\n const getter = descriptor.get;\n descriptor.get = function () {\n if (!caches.has(this)) caches.set(this, createCache(getter.bind(this)));\n return getValue(caches.get(this));\n };\n}\n","var _class, _descriptor, _token, _identifier, _relatedTokenMap;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { DEBUG } from '@glimmer/env';\nimport { tracked } from '@glimmer/tracking';\nimport { cached } from \"ember-cached-decorator-polyfill\";\nimport { resolve } from 'rsvp';\nimport { recordIdentifierFor } from '@ember-data/store';\nimport { LEGACY_SUPPORT } from '../model';\n\n/**\n @module @ember-data/model\n*/\n\nfunction isResourceIdentiferWithRelatedLinks(value) {\n return Boolean(value && value.links && value.links.related);\n}\n/**\n A `HasManyReference` is a low-level API that allows users and addon\n authors to perform meta-operations on a has-many relationship.\n\n @class HasManyReference\n @public\n @extends Reference\n */\nlet HasManyReference = (_class = (_token = /*#__PURE__*/_classPrivateFieldLooseKey(\"token\"), _identifier = /*#__PURE__*/_classPrivateFieldLooseKey(\"identifier\"), _relatedTokenMap = /*#__PURE__*/_classPrivateFieldLooseKey(\"relatedTokenMap\"), class HasManyReference {\n constructor(store, parentIdentifier, hasManyRelationship, key) {\n // unsubscribe tokens given to us by the notification manager\n Object.defineProperty(this, _token, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _identifier, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _relatedTokenMap, {\n writable: true,\n value: void 0\n });\n _initializerDefineProperty(this, \"_ref\", _descriptor, this);\n this.key = key;\n this.hasManyRelationship = hasManyRelationship;\n this.type = hasManyRelationship.definition.type;\n this.store = store;\n _classPrivateFieldLooseBase(this, _identifier)[_identifier] = parentIdentifier;\n _classPrivateFieldLooseBase(this, _token)[_token] = store._notificationManager.subscribe(parentIdentifier, (_, bucket, notifiedKey) => {\n if ((bucket === 'relationships' || bucket === 'property') && notifiedKey === key) {\n this._ref++;\n }\n });\n _classPrivateFieldLooseBase(this, _relatedTokenMap)[_relatedTokenMap] = new Map();\n // TODO inverse\n }\n destroy() {\n this.store._notificationManager.unsubscribe(_classPrivateFieldLooseBase(this, _token)[_token]);\n _classPrivateFieldLooseBase(this, _relatedTokenMap)[_relatedTokenMap].forEach(token => {\n this.store._notificationManager.unsubscribe(token);\n });\n _classPrivateFieldLooseBase(this, _relatedTokenMap)[_relatedTokenMap].clear();\n }\n get _relatedIdentifiers() {\n this._ref; // consume the tracked prop\n\n let resource = this._resource();\n let map = _classPrivateFieldLooseBase(this, _relatedTokenMap)[_relatedTokenMap];\n _classPrivateFieldLooseBase(this, _relatedTokenMap)[_relatedTokenMap] = new Map();\n if (resource && resource.data) {\n return resource.data.map(resourceIdentifier => {\n const identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier);\n let token = map.get(identifier);\n if (token) {\n map.delete(identifier);\n } else {\n token = this.store._notificationManager.subscribe(identifier, (_, bucket, notifiedKey) => {\n if (bucket === 'identity' || bucket === 'attributes' && notifiedKey === 'id') {\n this._ref++;\n }\n });\n }\n _classPrivateFieldLooseBase(this, _relatedTokenMap)[_relatedTokenMap].set(identifier, token);\n return identifier;\n });\n }\n map.forEach(token => {\n this.store._notificationManager.unsubscribe(token);\n });\n map.clear();\n return [];\n }\n _resource() {\n return this.store._instanceCache.recordDataFor(_classPrivateFieldLooseBase(this, _identifier)[_identifier], false).getHasMany(this.key);\n }\n\n /**\n This returns a string that represents how the reference will be\n looked up when it is loaded. If the relationship has a link it will\n use the \"link\" otherwise it defaults to \"id\".\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n // get the identifier of the reference\n if (commentsRef.remoteType() === \"ids\") {\n let ids = commentsRef.ids();\n } else if (commentsRef.remoteType() === \"link\") {\n let link = commentsRef.link();\n }\n ```\n @method remoteType\n @public\n @return {String} The name of the remote type. This should either be `link` or `ids`\n */\n remoteType() {\n let value = this._resource();\n if (value && value.links && value.links.related) {\n return 'link';\n }\n return 'ids';\n }\n\n /**\n `ids()` returns an array of the record IDs in this relationship.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.ids(); // ['1']\n ```\n @method ids\n @public\n @return {Array} The ids in this has-many relationship\n */\n ids() {\n return this._relatedIdentifiers.map(identifier => identifier.id);\n }\n\n /**\n The link Ember Data will use to fetch or reload this belongs-to\n relationship. By default it uses only the \"related\" resource linkage.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default Model.extend({\n user: belongsTo({ async: true })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n links: {\n related: '/articles/1/author'\n }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // get the identifier of the reference\n if (userRef.remoteType() === \"link\") {\n let link = userRef.link();\n }\n ```\n @method link\n @public\n @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship.\n */\n link() {\n let resource = this._resource();\n if (isResourceIdentiferWithRelatedLinks(resource)) {\n if (resource.links) {\n let related = resource.links.related;\n return !related || typeof related === 'string' ? related : related.href;\n }\n }\n return null;\n }\n\n /**\n * any links that have been received for this relationship\n *\n * @method links\n * @public\n * @returns\n */\n links() {\n let resource = this._resource();\n return resource && resource.links ? resource.links : null;\n }\n\n /**\n The meta data for the has-many relationship.\n Example\n ```javascript\n // models/blog.js\n import Model, { hasMany } from '@ember-data/model';\n export default Model.extend({\n users: hasMany({ async: true })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n users: {\n links: {\n related: {\n href: '/articles/1/authors'\n },\n },\n meta: {\n lastUpdated: 1458014400000\n }\n }\n }\n }\n });\n let usersRef = blog.hasMany('user');\n usersRef.meta() // { lastUpdated: 1458014400000 }\n ```\n @method meta\n @public\n @return {Object} The meta information for the belongs-to relationship.\n */\n meta() {\n let meta = null;\n let resource = this._resource();\n if (resource && resource.meta && typeof resource.meta === 'object') {\n meta = resource.meta;\n }\n return meta;\n }\n\n /**\n `push` can be used to update the data in the relationship and Ember\n Data will treat the new data as the canonical value of this\n relationship on the backend.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.ids(); // ['1']\n commentsRef.push([\n [{ type: 'comment', id: 2 }],\n [{ type: 'comment', id: 3 }],\n ])\n commentsRef.ids(); // ['2', '3']\n ```\n @method push\n @public\n @param {Array|Promise} objectOrPromise a promise that resolves to a JSONAPI document object describing the new value of this relationship.\n @return {ManyArray}\n */\n async push(objectOrPromise) {\n const payload = await resolve(objectOrPromise);\n let array;\n if (!Array.isArray(payload) && typeof payload === 'object' && Array.isArray(payload.data)) {\n array = payload.data;\n } else {\n array = payload;\n }\n const {\n store\n } = this;\n let identifiers = array.map(obj => {\n let record;\n if ('data' in obj) {\n // TODO deprecate pushing non-valid JSON:API here\n record = store.push(obj);\n } else {\n record = store.push({\n data: obj\n });\n }\n if (DEBUG) {\n let relationshipMeta = this.hasManyRelationship.definition;\n let identifier = this.hasManyRelationship.identifier;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n }\n return recordIdentifierFor(record);\n });\n const {\n graph,\n identifier\n } = this.hasManyRelationship;\n store._backburner.join(() => {\n graph.push({\n op: 'replaceRelatedRecords',\n record: identifier,\n field: this.key,\n value: identifiers\n });\n });\n return this.load();\n }\n _isLoaded() {\n let hasRelationshipDataProperty = this.hasManyRelationship.state.hasReceivedData;\n if (!hasRelationshipDataProperty) {\n return false;\n }\n let members = this.hasManyRelationship.currentState;\n\n //TODO @runspired determine isLoaded via a better means\n return members.every(identifier => {\n let internalModel = this.store._instanceCache._internalModelForResource(identifier);\n return internalModel.isLoaded === true;\n });\n }\n\n /**\n `value()` synchronously returns the current value of the has-many\n relationship. Unlike `record.get('relationshipName')`, calling\n `value()` on a reference does not trigger a fetch if the async\n relationship is not yet loaded. If the relationship is not loaded\n it will always return `null`.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n post.get('comments').then(function(comments) {\n commentsRef.value() === comments\n })\n ```\n @method value\n @public\n @return {ManyArray}\n */\n value() {\n const support = LEGACY_SUPPORT.getWithError(_classPrivateFieldLooseBase(this, _identifier)[_identifier]);\n return this._isLoaded() ? support.getManyArray(this.key) : null;\n }\n\n /**\n Loads the relationship if it is not already loaded. If the\n relationship is already loaded this method does not trigger a new\n load. This causes a request to the specified\n relationship link or reloads all items currently in the relationship.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.load().then(function(comments) {\n //...\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference.\n Example\n ```javascript\n commentsRef.load({ adapterOptions: { isPrivate: true } })\n .then(function(comments) {\n //...\n });\n ```\n ```app/adapters/comment.js\n export default ApplicationAdapter.extend({\n findMany(store, type, id, snapshots) {\n // In the adapter you will have access to adapterOptions.\n let adapterOptions = snapshots[0].adapterOptions;\n }\n });\n ```\n @method load\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the ManyArray in\n this has-many relationship.\n */\n async load(options) {\n const support = LEGACY_SUPPORT.getWithError(_classPrivateFieldLooseBase(this, _identifier)[_identifier]);\n return support.getHasMany(this.key, options); // this cast is necessary because typescript does not work properly with custom thenables;\n }\n\n /**\n Reloads this has-many relationship. This causes a request to the specified\n relationship link or reloads all items currently in the relationship.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany({ async: true }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.reload().then(function(comments) {\n //...\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference. A full example\n can be found in the `load` method.\n Example\n ```javascript\n commentsRef.reload({ adapterOptions: { isPrivate: true } })\n ```\n @method reload\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the ManyArray in this has-many relationship.\n */\n reload(options) {\n const support = LEGACY_SUPPORT.getWithError(_classPrivateFieldLooseBase(this, _identifier)[_identifier]);\n return support.reloadHasMany(this.key, options);\n }\n}), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_ref\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 0;\n }\n}), _applyDecoratedDescriptor(_class.prototype, \"_relatedIdentifiers\", [cached, dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"_relatedIdentifiers\"), _class.prototype), _class);\nexport { HasManyReference as default };","import { A, default as EmberArray } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { importSync } from '@embroider/macros';\nimport { all, resolve } from 'rsvp';\nimport { recordDataFor, recordIdentifierFor, storeFor } from '@ember-data/store/-private';\nimport { _findBelongsTo, _findHasMany } from './legacy-data-fetch';\nimport { assertIdentifierHasId } from './legacy-data-utils';\nimport ManyArray from './many-array';\nimport PromiseBelongsTo from './promise-belongs-to';\nimport PromiseManyArray from './promise-many-array';\nimport BelongsToReference from './references/belongs-to';\nimport HasManyReference from './references/has-many';\nexport class LegacySupport {\n constructor(record) {\n this.record = record;\n this.store = storeFor(record);\n this.identifier = recordIdentifierFor(record);\n this.recordData = this.store._instanceCache.getRecordData(this.identifier);\n this._manyArrayCache = Object.create(null);\n this._relationshipPromisesCache = Object.create(null);\n this._relationshipProxyCache = Object.create(null);\n this.references = Object.create(null);\n }\n _findBelongsTo(key, resource, relationshipMeta, options) {\n // TODO @runspired follow up if parent isNew then we should not be attempting load here\n // TODO @runspired follow up on whether this should be in the relationship requests cache\n return this._findBelongsToByJsonApiResource(resource, this.identifier, relationshipMeta, options).then(identifier => handleCompletedRelationshipRequest(this, key, resource._relationship, identifier), e => handleCompletedRelationshipRequest(this, key, resource._relationship, null, e));\n }\n reloadBelongsTo(key, options) {\n let loadingPromise = this._relationshipPromisesCache[key];\n if (loadingPromise) {\n return loadingPromise;\n }\n let resource = this.recordData.getBelongsTo(key);\n // TODO move this to a public api\n if (resource._relationship) {\n resource._relationship.state.hasFailedLoadAttempt = false;\n resource._relationship.state.shouldForceReload = true;\n }\n let relationshipMeta = this.store.getSchemaDefinitionService().relationshipsDefinitionFor(this.identifier)[key];\n assert(`Attempted to reload a belongsTo relationship but no definition exists for it`, relationshipMeta);\n let promise = this._findBelongsTo(key, resource, relationshipMeta, options);\n if (this._relationshipProxyCache[key]) {\n return this._updatePromiseProxyFor('belongsTo', key, {\n promise\n });\n }\n return promise;\n }\n getBelongsTo(key, options) {\n const {\n identifier,\n recordData\n } = this;\n let resource = recordData.getBelongsTo(key);\n let relatedIdentifier = resource && resource.data ? this.store.identifierCache.getOrCreateRecordIdentifier(resource.data) : null;\n let relationshipMeta = this.store.getSchemaDefinitionService().relationshipsDefinitionFor(identifier)[key];\n assert(`Attempted to access a belongsTo relationship but no definition exists for it`, relationshipMeta);\n let store = this.store;\n let async = relationshipMeta.options.async;\n let isAsync = typeof async === 'undefined' ? true : async;\n let _belongsToState = {\n key,\n store,\n legacySupport: this,\n modelName: relationshipMeta.type\n };\n if (isAsync) {\n if (resource._relationship.state.hasFailedLoadAttempt) {\n return this._relationshipProxyCache[key];\n }\n let promise = this._findBelongsTo(key, resource, relationshipMeta, options);\n return this._updatePromiseProxyFor('belongsTo', key, {\n promise,\n content: relatedIdentifier ? store._instanceCache.getRecord(relatedIdentifier) : null,\n _belongsToState\n });\n } else {\n if (relatedIdentifier === null) {\n return null;\n } else {\n let toReturn = store._instanceCache.getRecord(relatedIdentifier);\n assert(`You looked up the '${key}' relationship on a '${identifier.type}' with id ${identifier.id || 'null'} but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (\\`belongsTo({ async: true })\\`)`, toReturn === null || !store._instanceCache.getInternalModel(relatedIdentifier).isEmpty);\n return toReturn;\n }\n }\n }\n setDirtyBelongsTo(key, value) {\n return this.recordData.setDirtyBelongsTo(key, extractRecordDataFromRecord(value));\n }\n getManyArray(key, definition) {\n assert('hasMany only works with the @ember-data/record-data package', true /* HAS_RECORD_DATA_PACKAGE */);\n let manyArray = this._manyArrayCache[key];\n if (!definition) {\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n definition = graphFor(this.store).get(this.identifier, key).definition;\n }\n if (!manyArray) {\n manyArray = ManyArray.create({\n store: this.store,\n type: this.store.modelFor(definition.type),\n recordData: this.recordData,\n key,\n isPolymorphic: definition.isPolymorphic,\n isAsync: definition.isAsync,\n _inverseIsAsync: definition.inverseIsAsync,\n legacySupport: this,\n isLoaded: !definition.isAsync\n });\n this._manyArrayCache[key] = manyArray;\n }\n return manyArray;\n }\n fetchAsyncHasMany(key, relationship, manyArray, options) {\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n let loadingPromise = this._relationshipPromisesCache[key];\n if (loadingPromise) {\n return loadingPromise;\n }\n const jsonApi = this.recordData.getHasMany(key);\n loadingPromise = this._findHasManyByJsonApiResource(jsonApi, this.identifier, relationship, options).then(() => handleCompletedRelationshipRequest(this, key, relationship, manyArray), e => handleCompletedRelationshipRequest(this, key, relationship, manyArray, e));\n this._relationshipPromisesCache[key] = loadingPromise;\n return loadingPromise;\n }\n assert('hasMany only works with the @ember-data/record-data package');\n }\n reloadHasMany(key, options) {\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n let loadingPromise = this._relationshipPromisesCache[key];\n if (loadingPromise) {\n return loadingPromise;\n }\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n const relationship = graphFor(this.store).get(this.identifier, key);\n const {\n definition,\n state\n } = relationship;\n state.hasFailedLoadAttempt = false;\n state.shouldForceReload = true;\n let manyArray = this.getManyArray(key, definition);\n let promise = this.fetchAsyncHasMany(key, relationship, manyArray, options);\n if (this._relationshipProxyCache[key]) {\n return this._updatePromiseProxyFor('hasMany', key, {\n promise\n });\n }\n return promise;\n }\n assert(`hasMany only works with the @ember-data/record-data package`);\n }\n getHasMany(key, options) {\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n const relationship = graphFor(this.store).get(this.identifier, key);\n const {\n definition,\n state\n } = relationship;\n let manyArray = this.getManyArray(key, definition);\n if (definition.isAsync) {\n if (state.hasFailedLoadAttempt) {\n return this._relationshipProxyCache[key];\n }\n let promise = this.fetchAsyncHasMany(key, relationship, manyArray, options);\n return this._updatePromiseProxyFor('hasMany', key, {\n promise,\n content: manyArray\n });\n } else {\n assert(`You looked up the '${key}' relationship on a '${this.identifier.type}' with id ${this.identifier.id || 'null'} but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async ('hasMany({ async: true })')`, !anyUnloaded(this.store, relationship));\n return manyArray;\n }\n }\n assert(`hasMany only works with the @ember-data/record-data package`);\n }\n setDirtyHasMany(key, records) {\n assertRecordsPassedToHasMany(records);\n return this.recordData.setDirtyHasMany(key, extractRecordDatasFromRecords(records));\n }\n _updatePromiseProxyFor(kind, key, args) {\n let promiseProxy = this._relationshipProxyCache[key];\n if (kind === 'hasMany') {\n const {\n promise,\n content\n } = args;\n if (promiseProxy) {\n assert(`Expected a PromiseManyArray`, '_update' in promiseProxy);\n promiseProxy._update(promise, content);\n } else {\n promiseProxy = this._relationshipProxyCache[key] = new PromiseManyArray(promise, content);\n }\n return promiseProxy;\n }\n if (promiseProxy) {\n const {\n promise,\n content\n } = args;\n assert(`Expected a PromiseBelongsTo`, '_belongsToState' in promiseProxy);\n if (content !== undefined) {\n promiseProxy.set('content', content);\n }\n void promiseProxy.set('promise', promise);\n } else {\n promiseProxy = PromiseBelongsTo.create(args);\n this._relationshipProxyCache[key] = promiseProxy;\n }\n return promiseProxy;\n }\n referenceFor(kind, name) {\n let reference = this.references[name];\n if (!reference) {\n if (!true /* HAS_RECORD_DATA_PACKAGE */) {\n // TODO @runspired while this feels odd, it is not a regression in capability because we do\n // not today support references pulling from RecordDatas other than our own\n // because of the intimate API access involved. This is something we will need to redesign.\n assert(`snapshot.belongsTo only supported for @ember-data/record-data`);\n }\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n const relationship = graphFor(this.store).get(this.identifier, name);\n if (DEBUG && kind) {\n let modelName = this.identifier.type;\n let actualRelationshipKind = relationship.definition.kind;\n assert(`You tried to get the '${name}' relationship on a '${modelName}' via record.${kind}('${name}'), but the relationship is of kind '${actualRelationshipKind}'. Use record.${actualRelationshipKind}('${name}') instead.`, actualRelationshipKind === kind);\n }\n let relationshipKind = relationship.definition.kind;\n if (relationshipKind === 'belongsTo') {\n reference = new BelongsToReference(this.store, this.identifier, relationship, name);\n } else if (relationshipKind === 'hasMany') {\n reference = new HasManyReference(this.store, this.identifier, relationship, name);\n }\n this.references[name] = reference;\n }\n return reference;\n }\n _findHasManyByJsonApiResource(resource, parentIdentifier, relationship, options = {}) {\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n if (!resource) {\n return resolve();\n }\n const {\n definition,\n state\n } = relationship;\n let adapter = this.store.adapterFor(definition.type);\n let {\n isStale,\n hasDematerializedInverse,\n hasReceivedData,\n isEmpty,\n shouldForceReload\n } = state;\n const allInverseRecordsAreLoaded = areAllInverseRecordsLoaded(this.store, resource);\n let shouldFindViaLink = resource.links && resource.links.related && (typeof adapter.findHasMany === 'function' || typeof resource.data === 'undefined') && (shouldForceReload || hasDematerializedInverse || isStale || !allInverseRecordsAreLoaded && !isEmpty);\n\n // fetch via link\n if (shouldFindViaLink) {\n // findHasMany, although not public, does not need to care about our upgrade relationship definitions\n // and can stick with the public definition API for now.\n const relationshipMeta = this.store._instanceCache._storeWrapper.relationshipsDefinitionFor(definition.inverseType)[definition.key];\n let adapter = this.store.adapterFor(parentIdentifier.type);\n\n /*\n If a relationship was originally populated by the adapter as a link\n (as opposed to a list of IDs), this method is called when the\n relationship is fetched.\n The link (which is usually a URL) is passed through unchanged, so the\n adapter can make whatever request it wants.\n The usual use-case is for the server to register a URL as a link, and\n then use that URL in the future to make a request for the relationship.\n */\n assert(`You tried to load a hasMany relationship but you have no adapter (for ${parentIdentifier.type})`, adapter);\n assert(`You tried to load a hasMany relationship from a specified 'link' in the original payload but your adapter does not implement 'findHasMany'`, typeof adapter.findHasMany === 'function');\n return _findHasMany(adapter, this.store, parentIdentifier, resource.links.related, relationshipMeta, options);\n }\n let preferLocalCache = hasReceivedData && !isEmpty;\n let hasLocalPartialData = hasDematerializedInverse || isEmpty && Array.isArray(resource.data) && resource.data.length > 0;\n\n // fetch using data, pulling from local cache if possible\n if (!shouldForceReload && !isStale && (preferLocalCache || hasLocalPartialData)) {\n let finds = new Array(resource.data.length);\n for (let i = 0; i < resource.data.length; i++) {\n let identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resource.data[i]);\n finds[i] = this.store._instanceCache._fetchDataIfNeededForIdentifier(identifier, options);\n }\n return all(finds);\n }\n let hasData = hasReceivedData && !isEmpty;\n\n // fetch by data\n if (hasData || hasLocalPartialData) {\n let identifiers = resource.data.map(json => this.store.identifierCache.getOrCreateRecordIdentifier(json));\n let fetches = new Array(identifiers.length);\n const manager = this.store._fetchManager;\n for (let i = 0; i < identifiers.length; i++) {\n let identifier = identifiers[i];\n assertIdentifierHasId(identifier);\n fetches[i] = manager.scheduleFetch(identifier, options);\n }\n return all(fetches);\n }\n\n // we were explicitly told we have no data and no links.\n // TODO if the relationshipIsStale, should we hit the adapter anyway?\n return resolve();\n }\n assert(`hasMany only works with the @ember-data/record-data package`);\n }\n _findBelongsToByJsonApiResource(resource, parentIdentifier, relationshipMeta, options = {}) {\n if (!resource) {\n return resolve(null);\n }\n const internalModel = resource.data ? this.store._instanceCache._internalModelForResource(resource.data) : null;\n let {\n isStale,\n hasDematerializedInverse,\n hasReceivedData,\n isEmpty,\n shouldForceReload\n } = resource._relationship.state;\n const allInverseRecordsAreLoaded = areAllInverseRecordsLoaded(this.store, resource);\n let shouldFindViaLink = resource.links && resource.links.related && (shouldForceReload || hasDematerializedInverse || isStale || !allInverseRecordsAreLoaded && !isEmpty);\n if (internalModel) {\n // short circuit if we are already loading\n let pendingRequest = this.store._fetchManager.getPendingFetch(internalModel.identifier, options);\n if (pendingRequest) {\n return pendingRequest;\n }\n }\n\n // fetch via link\n if (shouldFindViaLink) {\n return _findBelongsTo(this.store, parentIdentifier, resource.links.related, relationshipMeta, options);\n }\n let preferLocalCache = hasReceivedData && allInverseRecordsAreLoaded && !isEmpty;\n let hasLocalPartialData = hasDematerializedInverse || isEmpty && resource.data;\n // null is explicit empty, undefined is \"we don't know anything\"\n let localDataIsEmpty = resource.data === undefined || resource.data === null;\n\n // fetch using data, pulling from local cache if possible\n if (!shouldForceReload && !isStale && (preferLocalCache || hasLocalPartialData)) {\n /*\n We have canonical data, but our local state is empty\n */\n if (localDataIsEmpty) {\n return resolve(null);\n }\n if (!internalModel) {\n assert(`No InternalModel found for ${resource.lid}`, internalModel);\n }\n return this.store._instanceCache._fetchDataIfNeededForIdentifier(internalModel.identifier, options);\n }\n let resourceIsLocal = !localDataIsEmpty && resource.data.id === null;\n if (internalModel && resourceIsLocal) {\n return resolve(internalModel.identifier);\n }\n\n // fetch by data\n if (internalModel && !localDataIsEmpty) {\n let identifier = internalModel.identifier;\n assertIdentifierHasId(identifier);\n return this.store._fetchManager.scheduleFetch(identifier, options);\n }\n\n // we were explicitly told we have no data and no links.\n // TODO if the relationshipIsStale, should we hit the adapter anyway?\n return resolve(null);\n }\n destroy() {\n assert('Cannot destroy an internalModel while its record is materialized', !this.record || this.record.isDestroyed || this.record.isDestroying);\n this.isDestroying = true;\n const cache = this._manyArrayCache;\n Object.keys(cache).forEach(key => {\n cache[key].destroy();\n delete cache[key];\n });\n const keys = Object.keys(this._relationshipProxyCache);\n keys.forEach(key => {\n const proxy = this._relationshipProxyCache[key];\n if (proxy.destroy) {\n proxy.destroy();\n }\n delete this._relationshipProxyCache[key];\n });\n if (this.references) {\n const refs = this.references;\n Object.keys(refs).forEach(key => {\n refs[key].destroy();\n delete refs[key];\n });\n }\n this.isDestroyed = true;\n }\n}\nfunction handleCompletedRelationshipRequest(recordExt, key, relationship, value, error) {\n delete recordExt._relationshipPromisesCache[key];\n relationship.state.shouldForceReload = false;\n const isHasMany = relationship.definition.kind === 'hasMany';\n if (isHasMany) {\n // we don't notify the record property here to avoid refetch\n // only the many array\n value.notify();\n }\n if (error) {\n relationship.state.hasFailedLoadAttempt = true;\n let proxy = recordExt._relationshipProxyCache[key];\n // belongsTo relationships are sometimes unloaded\n // when a load fails, in this case we need\n // to make sure that we aren't proxying\n // to destroyed content\n // for the sync belongsTo reload case there will be no proxy\n // for the async reload case there will be no proxy if the ui\n // has never been accessed\n if (proxy && !isHasMany) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (proxy.content && proxy.content.isDestroying) {\n proxy.set('content', null);\n }\n }\n throw error;\n }\n if (isHasMany) {\n value.set('isLoaded', true);\n }\n relationship.state.hasFailedLoadAttempt = false;\n // only set to not stale if no error is thrown\n relationship.state.isStale = false;\n return isHasMany || !value ? value : recordExt.store.peekRecord(value);\n}\nfunction assertRecordsPassedToHasMany(records) {\n assert(`You must pass an array of records to set a hasMany relationship`, Array.isArray(records) || EmberArray.detect(records));\n assert(`All elements of a hasMany relationship must be instances of Model, you passed ${records.map(r => `${typeof r}`).join(', ')}`, function () {\n return A(records).every(record => Object.prototype.hasOwnProperty.call(record, '_internalModel') === true);\n }());\n}\nfunction extractRecordDatasFromRecords(records) {\n return records.map(extractRecordDataFromRecord);\n}\nfunction extractRecordDataFromRecord(recordOrPromiseRecord) {\n if (!recordOrPromiseRecord) {\n return null;\n }\n if (isPromiseRecord(recordOrPromiseRecord)) {\n let content = recordOrPromiseRecord.get && recordOrPromiseRecord.get('content');\n assert('You passed in a promise that did not originate from an EmberData relationship. You can only pass promises that come from a belongsTo or hasMany relationship to the get call.', content !== undefined);\n return content ? recordDataFor(content) : null;\n }\n return recordDataFor(recordOrPromiseRecord);\n}\nfunction isPromiseRecord(record) {\n return !!record.then;\n}\nfunction anyUnloaded(store, relationship) {\n let state = relationship.currentState;\n const unloaded = state.find(s => {\n let im = store._instanceCache.getInternalModel(s);\n return im._isDematerializing || !im.isLoaded;\n });\n return unloaded || false;\n}\n\n/**\n * Flag indicating whether all inverse records are available\n *\n * true if the inverse exists and is loaded (not empty)\n * true if there is no inverse\n * false if the inverse exists and is not loaded (empty)\n *\n * @internal\n * @return {boolean}\n */\nfunction areAllInverseRecordsLoaded(store, resource) {\n const cache = store.identifierCache;\n if (Array.isArray(resource.data)) {\n // treat as collection\n // check for unloaded records\n let hasEmptyRecords = resource.data.reduce((hasEmptyModel, resourceIdentifier) => {\n return hasEmptyModel || internalModelForRelatedResource(store, cache, resourceIdentifier).isEmpty;\n }, false);\n return !hasEmptyRecords;\n } else {\n // treat as single resource\n if (!resource.data) {\n return true;\n } else {\n const internalModel = internalModelForRelatedResource(store, cache, resource.data);\n return !internalModel.isEmpty;\n }\n }\n}\nfunction internalModelForRelatedResource(store, cache, resource) {\n const identifier = cache.getOrCreateRecordIdentifier(resource);\n return store._instanceCache._internalModelForResource(identifier);\n}","var _class, _descriptor, _class2, _descriptor2;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { assert } from '@ember/debug';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { DEBUG } from '@glimmer/env';\nimport { tracked } from '@glimmer/tracking';\nimport { cached } from \"ember-cached-decorator-polyfill\";\nimport { storeFor } from '@ember-data/store';\nimport { errorsArrayToHash, recordIdentifierFor } from '@ember-data/store/-private';\nfunction isInvalidError(error) {\n return error && error.isAdapterError === true && error.code === 'InvalidError';\n}\n\n/**\n * Tag provides a cache for a getter\n * that recomputes only when a specific\n * tracked property that it manages is dirtied.\n *\n * This allows us to bust the cache for a value\n * that otherwise doesn't access anything tracked\n * as well as control the timing of that notification.\n *\n * @internal\n */\nlet Tag = (_class = class Tag {\n constructor() {\n _initializerDefineProperty(this, \"_tracking\", _descriptor, this);\n this.rev = 1;\n this.isDirty = true;\n this.value = undefined;\n }\n subscribe() {\n this._tracking;\n }\n notify() {\n this.isDirty = true;\n this._tracking = this.rev;\n this.rev++;\n }\n consume(v) {\n this.isDirty = false;\n this.value = v; // set cached value\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_tracking\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 0;\n }\n}), _class);\nconst Tags = new WeakMap();\nfunction getTag(record, key) {\n let tags = Tags.get(record);\n if (!tags) {\n tags = Object.create(null);\n Tags.set(record, tags);\n }\n return tags[key] = tags[key] || new Tag();\n}\nexport function peekTag(record, key) {\n let tags = Tags.get(record);\n return tags && tags[key];\n}\n\n/**\n * A decorattor that caches a getter while\n * providing the ability to bust that cache\n * when we so choose in a way that notifies\n * glimmer's tracking system.\n *\n * @internal\n */\nexport function tagged(_target, key, desc) {\n const getter = desc.get;\n const setter = desc.set;\n desc.get = function () {\n let tag = getTag(this, key);\n tag.subscribe();\n if (tag.isDirty) {\n tag.consume(getter.call(this));\n }\n return tag.value;\n };\n desc.set = function (v) {\n getTag(this, key); // ensure tag is setup in case we want to use it.\n // probably notify here but not yet.\n setter.call(this, v);\n };\n dependentKeyCompat(desc);\n return desc;\n}\n\n/**\nHistorically InternalModel managed a state machine\nthe currentState for which was reflected onto Model.\n\nThis implements the flags and stateName for backwards compat\nwith the state tree that used to be possible (listed below).\n\nstateName and dirtyType are candidates for deprecation.\n\nroot\n empty\n deleted // hidden from stateName\n preloaded // hidden from stateName\n\n loading\n empty // hidden from stateName\n preloaded // hidden from stateName\n\n loaded\n saved\n updated\n uncommitted\n invalid\n inFlight\n created\n uncommitted\n invalid\n inFlight\n\n deleted\n saved\n new // hidden from stateName\n uncommitted\n invalid\n inFlight\n\n @internal\n*/\nlet RecordState = (_class2 = class RecordState {\n constructor(record) {\n _initializerDefineProperty(this, \"isSaving\", _descriptor2, this);\n const store = storeFor(record);\n const identity = recordIdentifierFor(record);\n this.identifier = identity;\n this.record = record;\n this.recordData = store._instanceCache.getRecordData(identity);\n this.pendingCount = 0;\n this.fulfilledCount = 0;\n this.rejectedCount = 0;\n this._errorRequests = [];\n this._lastError = null;\n let requests = store.getRequestStateService();\n let notifications = store._notificationManager;\n const handleRequest = req => {\n if (req.type === 'mutation') {\n switch (req.state) {\n case 'pending':\n this.isSaving = true;\n break;\n case 'rejected':\n this.isSaving = false;\n this._lastError = req;\n if (!(req.response && isInvalidError(req.response.data))) {\n this._errorRequests.push(req);\n }\n notifyErrorsStateChanged(this);\n break;\n case 'fulfilled':\n this._errorRequests = [];\n this._lastError = null;\n this.isSaving = false;\n notifyErrorsStateChanged(this);\n break;\n }\n } else {\n switch (req.state) {\n case 'pending':\n this.pendingCount++;\n this.notify('isLoading');\n break;\n case 'rejected':\n this.pendingCount--;\n this._lastError = req;\n if (!(req.response && isInvalidError(req.response.data))) {\n this._errorRequests.push(req);\n }\n this.notify('isLoading');\n notifyErrorsStateChanged(this);\n break;\n case 'fulfilled':\n this.pendingCount--;\n this.fulfilledCount++;\n this.notify('isLoading');\n this.notify('isDirty');\n notifyErrorsStateChanged(this);\n this._errorRequests = [];\n this._lastError = null;\n break;\n }\n }\n };\n requests.subscribeForRecord(identity, handleRequest);\n\n // we instantiate lazily\n // so we grab anything we don't have yet\n if (!DEBUG) {\n const lastRequest = requests.getLastRequestForRecord(identity);\n if (lastRequest) {\n handleRequest(lastRequest);\n }\n }\n notifications.subscribe(identity, (identifier, type, key) => {\n switch (type) {\n case 'state':\n this.notify('isNew');\n this.notify('isDeleted');\n this.notify('isDirty');\n break;\n case 'attributes':\n this.notify('isEmpty');\n this.notify('isDirty');\n break;\n case 'unload':\n this.notify('isNew');\n this.notify('isDeleted');\n break;\n case 'errors':\n // we only hit this if a foreign RecordData notifies\n // errors changed. Our own implementation does not\n // take this path currently, but we should probably\n // fix that.\n this.updateInvalidErrors();\n this.notify('isValid');\n break;\n }\n });\n }\n notify(key) {\n getTag(this, key).notify();\n }\n updateInvalidErrors() {\n let jsonApiErrors = this.recordData.getErrors(this.identifier);\n const {\n errors\n } = this.record;\n errors.clear();\n let newErrors = errorsArrayToHash(jsonApiErrors);\n let errorKeys = Object.keys(newErrors);\n for (let i = 0; i < errorKeys.length; i++) {\n errors.add(errorKeys[i], newErrors[errorKeys[i]]);\n }\n }\n cleanErrorRequests() {\n this.notify('isValid');\n this.notify('isError');\n this.notify('adapterError');\n this._errorRequests = [];\n this._lastError = null;\n }\n get isLoading() {\n return !this.isLoaded && this.pendingCount > 0 && this.fulfilledCount === 0;\n }\n\n // TODO @runspired handle \"unloadRecord\" see note in InternalModel\n get isLoaded() {\n if (this.isNew) {\n return true;\n }\n return this.fulfilledCount > 0 || !this.isEmpty;\n }\n get isSaved() {\n let rd = this.recordData;\n if (this.isDeleted) {\n assert(`Expected RecordData to implement isDeletionCommitted()`, rd.isDeletionCommitted);\n return rd.isDeletionCommitted();\n }\n if (this.isNew || this.isEmpty || !this.isValid || this.isDirty || this.isLoading) {\n return false;\n }\n return true;\n }\n get isEmpty() {\n let rd = this.recordData;\n // TODO this is not actually an RFC'd concept. Determine the\n // correct heuristic to replace this with.\n assert(`Expected RecordData to implement isEmpty()`, rd.isEmpty);\n return !this.isNew && rd.isEmpty();\n }\n get isNew() {\n let rd = this.recordData;\n assert(`Expected RecordData to implement isNew()`, rd.isNew);\n return rd.isNew();\n }\n get isDeleted() {\n let rd = this.recordData;\n assert(`Expected RecordData to implement isDeleted()`, rd.isDeleted);\n return rd.isDeleted();\n }\n get isValid() {\n return this.record.errors.length === 0;\n }\n get isDirty() {\n let rd = this.recordData;\n assert(`Expected RecordData to implement hasChangedAttributes()`, rd.hasChangedAttributes);\n assert(`Expected RecordData to implement isDeletionCommitted()`, rd.isDeletionCommitted);\n if (rd.isDeletionCommitted() || this.isDeleted && this.isNew) {\n return false;\n }\n return this.isNew || rd.hasChangedAttributes();\n }\n get isError() {\n let errorReq = this._errorRequests[this._errorRequests.length - 1];\n if (!errorReq) {\n return false;\n } else {\n return true;\n }\n }\n get adapterError() {\n let request = this._lastError;\n if (!request) {\n return null;\n }\n return request.state === 'rejected' && request.response.data;\n }\n get isPreloaded() {\n return !this.isEmpty && this.isLoading;\n }\n get stateName() {\n // we might be empty while loading so check this first\n if (this.isLoading) {\n return 'root.loading';\n\n // got nothing yet or were unloaded\n } else if (this.isEmpty) {\n return 'root.empty';\n\n // deleted substates\n } else if (this.isDeleted) {\n if (this.isSaving) {\n return 'root.deleted.inFlight';\n } else if (this.isSaved) {\n // TODO ensure isSaved isn't true from previous requests\n return 'root.deleted.saved';\n } else if (!this.isValid) {\n return 'root.deleted.invalid';\n } else {\n return 'root.deleted.uncommitted';\n }\n\n // loaded.created substates\n } else if (this.isNew) {\n if (this.isSaving) {\n return 'root.loaded.created.inFlight';\n } else if (!this.isValid) {\n return 'root.loaded.created.invalid';\n }\n return 'root.loaded.created.uncommitted';\n\n // loaded.updated substates\n } else if (this.isSaving) {\n return 'root.loaded.updated.inFlight';\n } else if (!this.isValid) {\n return 'root.loaded.updated.invalid';\n } else if (this.isDirty) {\n return 'root.loaded.updated.uncommitted';\n\n // if nothing remains, we are loaded saved!\n } else {\n return 'root.loaded.saved';\n }\n }\n get dirtyType() {\n // we might be empty while loading so check this first\n if (this.isLoading || this.isEmpty) {\n return '';\n\n // deleted substates\n } else if (this.isDeleted) {\n return 'deleted';\n\n // loaded.created substates\n } else if (this.isNew) {\n return 'created';\n\n // loaded.updated substates\n } else if (this.isSaving || !this.isValid || this.isDirty) {\n return 'updated';\n\n // if nothing remains, we are loaded saved!\n } else {\n return '';\n }\n }\n}, _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"isSaving\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _applyDecoratedDescriptor(_class2.prototype, \"isLoading\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isLoading\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isLoaded\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isLoaded\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isSaved\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isSaved\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isEmpty\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isEmpty\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isNew\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isNew\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isDeleted\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isDeleted\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isValid\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isValid\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isDirty\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isDirty\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isError\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"isError\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"adapterError\", [tagged], Object.getOwnPropertyDescriptor(_class2.prototype, \"adapterError\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isPreloaded\", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, \"isPreloaded\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"stateName\", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, \"stateName\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"dirtyType\", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, \"dirtyType\"), _class2.prototype), _class2);\nexport { RecordState as default };\nfunction notifyErrorsStateChanged(state) {\n state.notify('isValid');\n state.notify('isError');\n state.notify('adapterError');\n}","import { cacheFor } from '@ember/object/internals';\nimport { LEGACY_SUPPORT } from './model';\nexport default function notifyChanges(identifier, value, key, record, store) {\n if (value === 'attributes') {\n if (key) {\n notifyAttribute(store, identifier, key, record);\n } else {\n record.eachAttribute(key => {\n notifyAttribute(store, identifier, key, record);\n });\n }\n } else if (value === 'relationships') {\n if (key) {\n let meta = record.constructor.relationshipsByName.get(key);\n notifyRelationship(identifier, key, record, meta);\n } else {\n record.eachRelationship((key, meta) => {\n notifyRelationship(identifier, key, record, meta);\n });\n }\n } else if (value === 'identity') {\n record.notifyPropertyChange('id');\n }\n}\nfunction notifyRelationship(identifier, key, record, meta) {\n if (meta.kind === 'belongsTo') {\n record.notifyPropertyChange(key);\n } else if (meta.kind === 'hasMany') {\n let support = LEGACY_SUPPORT.get(identifier);\n let manyArray = support && support._manyArrayCache[key];\n let hasPromise = support && support._relationshipPromisesCache[key];\n if (manyArray && hasPromise) {\n // do nothing, we will notify the ManyArray directly\n // once the fetch has completed.\n return;\n }\n if (manyArray) {\n manyArray.notify();\n\n //We need to notifyPropertyChange in the adding case because we need to make sure\n //we fetch the newly added record in case it is unloaded\n //TODO(Igor): Consider whether we could do this only if the record state is unloaded\n if (!meta.options || meta.options.async || meta.options.async === undefined) {\n record.notifyPropertyChange(key);\n }\n }\n }\n}\nfunction notifyAttribute(store, identifier, key, record) {\n let currentValue = cacheFor(record, key);\n if (currentValue !== store._instanceCache.getRecordData(identifier).getAttr(key)) {\n record.notifyPropertyChange(key);\n }\n}","var _class, _descriptor, _descriptor2, _Model;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n/**\n @module @ember-data/model\n */\n\nimport { assert, warn } from '@ember/debug';\nimport EmberError from '@ember/error';\nimport EmberObject, { get } from '@ember/object';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { run } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { isNone } from '@ember/utils';\nimport { DEBUG } from '@glimmer/env';\nimport { tracked } from '@glimmer/tracking';\nimport Ember from 'ember';\nimport { resolve } from 'rsvp';\nimport { recordIdentifierFor, storeFor } from '@ember-data/store';\nimport { coerceId, deprecatedPromiseObject, errorsArrayToHash, InternalModel, recordDataFor, WeakCache } from '@ember-data/store/-private';\nimport Errors from './errors';\nimport { LegacySupport } from './legacy-relationships-support';\nimport notifyChanges from './notify-changes';\nimport RecordState, { peekTag, tagged } from './record-state';\nimport { relationshipFromMeta } from './relationship-meta';\nconst {\n changeProperties\n} = Ember;\nexport const LEGACY_SUPPORT = new WeakCache(DEBUG ? 'legacy-relationships' : '');\nLEGACY_SUPPORT._generator = record => {\n const identifier = recordIdentifierFor(record);\n let support = LEGACY_SUPPORT.get(identifier);\n if (!support) {\n support = new LegacySupport(record);\n LEGACY_SUPPORT.set(identifier, support);\n }\n return support;\n};\nfunction findPossibleInverses(type, inverseType, name, relationshipsSoFar) {\n let possibleRelationships = relationshipsSoFar || [];\n let relationshipMap = inverseType.relationships;\n if (!relationshipMap) {\n return possibleRelationships;\n }\n let relationshipsForType = relationshipMap.get(type.modelName);\n let relationships = Array.isArray(relationshipsForType) ? relationshipsForType.filter(relationship => {\n let optionsForRelationship = inverseType.metaForProperty(relationship.name).options;\n if (!optionsForRelationship.inverse && optionsForRelationship.inverse !== null) {\n return true;\n }\n return name === optionsForRelationship.inverse;\n }) : null;\n if (relationships) {\n possibleRelationships.push.apply(possibleRelationships, relationships);\n }\n\n //Recurse to support polymorphism\n if (type.superclass) {\n findPossibleInverses(type.superclass, inverseType, name, possibleRelationships);\n }\n return possibleRelationships;\n}\n\n/*\n * This decorator allows us to lazily compute\n * an expensive getter on first-access and thereafter\n * never recompute it.\n */\nfunction computeOnce(target, key, desc) {\n const cache = new WeakMap();\n let getter = desc.get;\n desc.get = function () {\n let meta = cache.get(this);\n if (!meta) {\n meta = {\n hasComputed: false,\n value: undefined\n };\n cache.set(this, meta);\n }\n if (!meta.hasComputed) {\n meta.value = getter.call(this);\n meta.hasComputed = true;\n }\n return meta.value;\n };\n return desc;\n}\n\n/**\n Base class from which Models can be define.\n\n ```js\n import Model, { attr } from '@ember-data/model';\n\n export default class User extends Model {\n @attr name;\n }\n ```\n\n @class Model\n @public\n @extends Ember.EmberObject\n*/\nlet Model = (_class = (_Model = class Model extends EmberObject {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n /**\n If `true` the store is attempting to reload the record from the adapter.\n Example\n ```javascript\n record.isReloading; // false\n record.reload();\n record.isReloading; // true\n ```\n @property isReloading\n @public\n @type {Boolean}\n @readOnly\n */\n _initializerDefineProperty(this, \"isReloading\", _descriptor2, this);\n }\n init(options = {}) {\n if (DEBUG && !options._secretInit && !options._internalModel && !options._createProps) {\n throw new EmberError('You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.');\n }\n const createProps = options._createProps;\n const _secretInit = options._secretInit;\n delete options._createProps;\n delete options._secretInit;\n super.init(options);\n _secretInit(this);\n this.___recordState = DEBUG ? new RecordState(this) : null;\n this.setProperties(createProps);\n\n // TODO pass something in such that we don't need internalModel\n // to get this info\n let store = storeFor(this);\n let notifications = store._notificationManager;\n let identity = recordIdentifierFor(this);\n notifications.subscribe(identity, (identifier, type, key) => {\n notifyChanges(identifier, type, key, this, store);\n });\n }\n willDestroy() {\n LEGACY_SUPPORT.get(this)?.destroy();\n }\n\n /**\n If this property is `true` the record is in the `empty`\n state. Empty is the first state all records enter after they have\n been created. Most records created by the store will quickly\n transition to the `loading` state if data needs to be fetched from\n the server or the `created` state if the record is created on the\n client. A record can also enter the empty state if the adapter is\n unable to locate the record.\n @property isEmpty\n @public\n @type {Boolean}\n @readOnly\n */\n get isEmpty() {\n return this.currentState.isEmpty;\n }\n\n /**\n If this property is `true` the record is in the `loading` state. A\n record enters this state when the store asks the adapter for its\n data. It remains in this state until the adapter provides the\n requested data.\n @property isLoading\n @public\n @type {Boolean}\n @readOnly\n */\n get isLoading() {\n return this.currentState.isLoading;\n }\n\n /**\n If this property is `true` the record is in the `loaded` state. A\n record enters this state when its data is populated. Most of a\n record's lifecycle is spent inside substates of the `loaded`\n state.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.get('isLoaded'); // true\n store.findRecord('model', 1).then(function(model) {\n model.get('isLoaded'); // true\n });\n ```\n @property isLoaded\n @public\n @type {Boolean}\n @readOnly\n */\n get isLoaded() {\n return this.currentState.isLoaded;\n }\n\n /**\n If this property is `true` the record is in the `dirty` state. The\n record has local changes that have not yet been saved by the\n adapter. This includes records that have been created (but not yet\n saved) or deleted.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.get('hasDirtyAttributes'); // true\n store.findRecord('model', 1).then(function(model) {\n model.get('hasDirtyAttributes'); // false\n model.set('foo', 'some value');\n model.get('hasDirtyAttributes'); // true\n });\n ```\n @since 1.13.0\n @property hasDirtyAttributes\n @public\n @type {Boolean}\n @readOnly\n */\n get hasDirtyAttributes() {\n return this.currentState.isDirty;\n }\n\n /**\n If this property is `true` the record is in the `saving` state. A\n record enters the saving state when `save` is called, but the\n adapter has not yet acknowledged that the changes have been\n persisted to the backend.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.get('isSaving'); // false\n let promise = record.save();\n record.get('isSaving'); // true\n promise.then(function() {\n record.get('isSaving'); // false\n });\n ```\n @property isSaving\n @public\n @type {Boolean}\n @readOnly\n */\n get isSaving() {\n return this.currentState.isSaving;\n }\n\n /**\n If this property is `true` the record is in the `deleted` state\n and has been marked for deletion. When `isDeleted` is true and\n `hasDirtyAttributes` is true, the record is deleted locally but the deletion\n was not yet persisted. When `isSaving` is true, the change is\n in-flight. When both `hasDirtyAttributes` and `isSaving` are false, the\n change has persisted.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.get('isDeleted'); // false\n record.deleteRecord();\n // Locally deleted\n record.get('isDeleted'); // true\n record.get('hasDirtyAttributes'); // true\n record.get('isSaving'); // false\n // Persisting the deletion\n let promise = record.save();\n record.get('isDeleted'); // true\n record.get('isSaving'); // true\n // Deletion Persisted\n promise.then(function() {\n record.get('isDeleted'); // true\n record.get('isSaving'); // false\n record.get('hasDirtyAttributes'); // false\n });\n ```\n @property isDeleted\n @public\n @type {Boolean}\n @readOnly\n */\n get isDeleted() {\n return this.currentState.isDeleted;\n }\n\n /**\n If this property is `true` the record is in the `new` state. A\n record will be in the `new` state when it has been created on the\n client and the adapter has not yet report that it was successfully\n saved.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.get('isNew'); // true\n record.save().then(function(model) {\n model.get('isNew'); // false\n });\n ```\n @property isNew\n @public\n @type {Boolean}\n @readOnly\n */\n get isNew() {\n return this.currentState.isNew;\n }\n\n /**\n If this property is `true` the record is in the `valid` state.\n A record will be in the `valid` state when the adapter did not report any\n server-side validation failures.\n @property isValid\n @public\n @type {Boolean}\n @readOnly\n */\n get isValid() {\n return this.currentState.isValid;\n }\n\n /**\n If the record is in the dirty state this property will report what\n kind of change has caused it to move into the dirty\n state. Possible values are:\n - `created` The record has been created by the client and not yet saved to the adapter.\n - `updated` The record has been updated by the client and not yet saved to the adapter.\n - `deleted` The record has been deleted by the client and not yet saved to the adapter.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.get('dirtyType'); // 'created'\n ```\n @property dirtyType\n @public\n @type {String}\n @readOnly\n */\n get dirtyType() {\n return this.currentState.dirtyType;\n }\n\n /**\n If `true` the adapter reported that it was unable to save local\n changes to the backend for any reason other than a server-side\n validation error.\n Example\n ```javascript\n record.get('isError'); // false\n record.set('foo', 'valid value');\n record.save().then(null, function() {\n record.get('isError'); // true\n });\n ```\n @property isError\n @public\n @type {Boolean}\n @readOnly\n */\n get isError() {\n return this.currentState.isError;\n }\n set isError(v) {\n if (DEBUG) {\n throw new Error(`isError is not directly settable`);\n }\n }\n /**\n All ember models have an id property. This is an identifier\n managed by an external source. These are always coerced to be\n strings before being used internally. Note when declaring the\n attributes for a model it is an error to declare an id\n attribute.\n ```javascript\n let record = store.createRecord('model');\n record.get('id'); // null\n store.findRecord('model', 1).then(function(model) {\n model.get('id'); // '1'\n });\n ```\n @property id\n @public\n @type {String}\n */\n get id() {\n // the _internalModel guard exists, because some dev-only deprecation code\n // (addListener via validatePropertyInjections) invokes toString before the\n // object is real.\n if (DEBUG) {\n if (!this._internalModel) {\n return void 0;\n }\n }\n return this._internalModel.id;\n }\n set id(id) {\n const normalizedId = coerceId(id);\n if (normalizedId !== null) {\n this._internalModel.setId(normalizedId);\n }\n }\n\n /**\n @property currentState\n @private\n @type {Object}\n */\n // TODO we can probably make this a computeOnce\n // we likely do not need to notify the currentState root anymore\n get currentState() {\n // descriptors are called with the wrong `this` context during mergeMixins\n // when using legacy/classic ember classes. Basically: lazy in prod and eager in dev.\n // so we do this to try to steer folks to the nicer \"dont user currentState\"\n // error.\n if (!DEBUG && !this.___recordState) {\n this.___recordState = new RecordState(this);\n }\n return this.___recordState;\n }\n set currentState(_v) {\n throw new Error('cannot set currentState');\n }\n\n /**\n @property _internalModel\n @private\n @type {Object}\n */\n\n /**\n The store service instance which created this record instance\n @property store\n @public\n */\n\n /**\n When the record is in the `invalid` state this object will contain\n any errors returned by the adapter. When present the errors hash\n contains keys corresponding to the invalid property names\n and values which are arrays of Javascript objects with two keys:\n - `message` A string containing the error message from the backend\n - `attribute` The name of the property associated with this error message\n ```javascript\n record.get('errors.length'); // 0\n record.set('foo', 'invalid value');\n record.save().catch(function() {\n record.get('errors').get('foo');\n // [{message: 'foo should be a number.', attribute: 'foo'}]\n });\n ```\n The `errors` property is useful for displaying error messages to\n the user.\n ```handlebars\n \n {{#each @model.errors.username as |error|}}\n
    \n {{error.message}}\n
    \n {{/each}}\n \n {{#each @model.errors.email as |error|}}\n
    \n {{error.message}}\n
    \n {{/each}}\n ```\n You can also access the special `messages` property on the error\n object to get an array of all the error strings.\n ```handlebars\n {{#each @model.errors.messages as |message|}}\n
    \n {{message}}\n
    \n {{/each}}\n ```\n @property errors\n @public\n @type {Errors}\n */\n get errors() {\n let errors = Errors.create({\n __record: this\n });\n // TODO we should unify how errors gets populated\n // with the code managing the update. Probably a\n // lazy flush similar to retrieveLatest in ManyArray\n let recordData = recordDataFor(this);\n let jsonApiErrors;\n if (recordData.getErrors) {\n jsonApiErrors = recordData.getErrors();\n if (jsonApiErrors) {\n let errorsHash = errorsArrayToHash(jsonApiErrors);\n let errorKeys = Object.keys(errorsHash);\n for (let i = 0; i < errorKeys.length; i++) {\n errors.add(errorKeys[i], errorsHash[errorKeys[i]]);\n }\n }\n }\n return errors;\n }\n\n /**\n This property holds the `AdapterError` object with which\n last adapter operation was rejected.\n @property adapterError\n @public\n @type {AdapterError}\n */\n get adapterError() {\n return this.currentState.adapterError;\n }\n set adapterError(v) {\n throw new Error(`adapterError is not directly settable`);\n }\n\n /**\n Create a JSON representation of the record, using the serialization\n strategy of the store's adapter.\n `serialize` takes an optional hash as a parameter, currently\n supported options are:\n - `includeId`: `true` if the record's ID should be included in the\n JSON representation.\n @method serialize\n @public\n @param {Object} options\n @return {Object} an object whose values are primitive JSON values only\n */\n serialize(options) {\n return storeFor(this)._instanceCache.createSnapshot(recordIdentifierFor(this)).serialize(options);\n }\n\n /*\n We hook the default implementation to ensure\n our tagged properties are properly notified\n as well. We still super for everything because\n sync observers require a direct call occuring\n to trigger their flush. We wouldn't need to\n super in 4.0+ where sync observers are removed.\n */\n notifyPropertyChange(key) {\n let tag = peekTag(this, key);\n if (tag) {\n tag.notify();\n }\n super.notifyPropertyChange(key);\n }\n\n /**\n Marks the record as deleted but does not save it. You must call\n `save` afterwards if you want to persist it. You might use this\n method if you want to allow the user to still `rollbackAttributes()`\n after a delete was made.\n Example\n ```app/controllers/model/delete.js\n import Controller from '@ember/controller';\n import { action } from '@ember/object';\n export default class ModelDeleteController extends Controller {\n @action\n softDelete() {\n this.model.deleteRecord();\n }\n @action\n confirm() {\n this.model.save();\n }\n @action\n undo() {\n this.model.rollbackAttributes();\n }\n }\n ```\n @method deleteRecord\n @public\n */\n deleteRecord() {\n // ensure we've populated currentState prior to deleting a new record\n if (this.currentState) {\n storeFor(this).deleteRecord(this);\n }\n }\n\n /**\n Same as `deleteRecord`, but saves the record immediately.\n Example\n ```app/controllers/model/delete.js\n import Controller from '@ember/controller';\n import { action } from '@ember/object';\n export default class ModelDeleteController extends Controller {\n @action\n delete() {\n this.model.destroyRecord().then(function() {\n this.transitionToRoute('model.index');\n });\n }\n }\n ```\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot\n ```js\n record.destroyRecord({ adapterOptions: { subscribe: false } });\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n deleteRecord(store, type, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n @method destroyRecord\n @public\n @param {Object} options\n @return {Promise} a promise that will be resolved when the adapter returns\n successfully or rejected if the adapter returns with an error.\n */\n destroyRecord(options) {\n const {\n isNew\n } = this.currentState;\n this.deleteRecord();\n if (isNew) {\n return resolve(this);\n }\n return this.save(options).then(_ => {\n run(() => {\n this.unloadRecord();\n });\n return this;\n });\n }\n\n /**\n Unloads the record from the store. This will not send a delete request\n to your server, it just unloads the record from memory.\n @method unloadRecord\n @public\n */\n unloadRecord() {\n if (this.currentState.isNew && (this.isDestroyed || this.isDestroying)) {\n return;\n }\n storeFor(this).unloadRecord(this);\n }\n\n /**\n @method _notifyProperties\n @private\n */\n _notifyProperties(keys) {\n // changeProperties defers notifications until after the delegate\n // and protects with a try...finally block\n // previously used begin...endPropertyChanges but this is private API\n changeProperties(() => {\n let key;\n for (let i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n this.notifyPropertyChange(key);\n }\n });\n }\n\n /**\n Returns an object, whose keys are changed properties, and value is\n an [oldProp, newProp] array.\n The array represents the diff of the canonical state with the local state\n of the model. Note: if the model is created locally, the canonical state is\n empty since the adapter hasn't acknowledged the attributes yet:\n Example\n ```app/models/mascot.js\n import Model, { attr } from '@ember-data/model';\n export default class MascotModel extends Model {\n @attr('string') name;\n @attr('boolean', {\n defaultValue: false\n })\n isAdmin;\n }\n ```\n ```javascript\n let mascot = store.createRecord('mascot');\n mascot.changedAttributes(); // {}\n mascot.set('name', 'Tomster');\n mascot.changedAttributes(); // { name: [undefined, 'Tomster'] }\n mascot.set('isAdmin', true);\n mascot.changedAttributes(); // { isAdmin: [undefined, true], name: [undefined, 'Tomster'] }\n mascot.save().then(function() {\n mascot.changedAttributes(); // {}\n mascot.set('isAdmin', false);\n mascot.changedAttributes(); // { isAdmin: [true, false] }\n });\n ```\n @method changedAttributes\n @public\n @return {Object} an object, whose keys are changed properties,\n and value is an [oldProp, newProp] array.\n */\n changedAttributes() {\n return this._internalModel.changedAttributes();\n }\n\n /**\n If the model `hasDirtyAttributes` this function will discard any unsaved\n changes. If the model `isNew` it will be removed from the store.\n Example\n ```javascript\n record.get('name'); // 'Untitled Document'\n record.set('name', 'Doc 1');\n record.get('name'); // 'Doc 1'\n record.rollbackAttributes();\n record.get('name'); // 'Untitled Document'\n ```\n @since 1.13.0\n @method rollbackAttributes\n @public\n */\n rollbackAttributes() {\n const {\n currentState\n } = this;\n this._internalModel.rollbackAttributes();\n currentState.cleanErrorRequests();\n }\n\n /**\n @method _createSnapshot\n @private\n */\n // TODO @deprecate in favor of a public API or examples of how to test successfully\n _createSnapshot() {\n return storeFor(this)._instanceCache.createSnapshot(recordIdentifierFor(this));\n }\n toStringExtension() {\n // the _internalModel guard exists, because some dev-only deprecation code\n // (addListener via validatePropertyInjections) invokes toString before the\n // object is real.\n return this._internalModel && this._internalModel.id;\n }\n\n /**\n Save the record and persist any changes to the record to an\n external source via the adapter.\n Example\n ```javascript\n record.set('name', 'Tomster');\n record.save().then(function() {\n // Success callback\n }, function() {\n // Error callback\n });\n ```\n If you pass an object using the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot.\n ```js\n record.save({ adapterOptions: { subscribe: false } });\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n updateRecord(store, type, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n @method save\n @public\n @param {Object} options\n @return {Promise} a promise that will be resolved when the adapter returns\n successfully or rejected if the adapter returns with an error.\n */\n save(options) {\n let promise;\n if (this.currentState.isNew && this.currentState.isDeleted) {\n promise = resolve(this);\n } else {\n promise = storeFor(this).saveRecord(this, options);\n }\n if (true /* DEPRECATE_SAVE_PROMISE_ACCESS */) {\n return deprecatedPromiseObject(promise);\n }\n return promise;\n }\n\n /**\n Reload the record from the adapter.\n This will only work if the record has already finished loading.\n Example\n ```app/controllers/model/view.js\n import Controller from '@ember/controller';\n import { action } from '@ember/object';\n export default class ViewController extends Controller {\n @action\n reload() {\n this.model.reload().then(function(model) {\n // do something with the reloaded model\n });\n }\n }\n ```\n @method reload\n @public\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter request\n @return {Promise} a promise that will be resolved with the record when the\n adapter returns successfully or rejected if the adapter returns\n with an error.\n */\n reload(_options) {\n let options = {};\n if (typeof _options === 'object' && _options !== null && _options.adapterOptions) {\n options.adapterOptions = _options.adapterOptions;\n }\n options.isReloading = true;\n let identifier = recordIdentifierFor(this);\n assert(`You cannot reload a record without an ID`, identifier.id);\n this.isReloading = true;\n const promise = storeFor(this)._fetchManager.scheduleFetch(identifier, options).then(() => this).finally(() => {\n this.isReloading = false;\n });\n if (true /* DEPRECATE_SAVE_PROMISE_ACCESS */) {\n return deprecatedPromiseObject(promise);\n }\n return promise;\n }\n attr() {\n assert('The `attr` method is not available on Model, a Snapshot was probably expected. Are you passing a Model instead of a Snapshot to your serializer?', false);\n }\n\n /**\n Get the reference for the specified belongsTo relationship.\n Example\n ```app/models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo({ async: true }) user;\n }\n ```\n ```javascript\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // check if the user relationship is loaded\n let isLoaded = userRef.value() !== null;\n // get the record of the reference (null if not yet available)\n let user = userRef.value();\n // get the identifier of the reference\n if (userRef.remoteType() === \"id\") {\n let id = userRef.id();\n } else if (userRef.remoteType() === \"link\") {\n let link = userRef.link();\n }\n // load user (via store.findRecord or store.findBelongsTo)\n userRef.load().then(...)\n // or trigger a reload\n userRef.reload().then(...)\n // provide data for reference\n userRef.push({\n type: 'user',\n id: 1,\n attributes: {\n username: \"@user\"\n }\n }).then(function(user) {\n userRef.value() === user;\n });\n ```\n @method belongsTo\n @public\n @param {String} name of the relationship\n @since 2.5.0\n @return {BelongsToReference} reference for this relationship\n */\n belongsTo(name) {\n return LEGACY_SUPPORT.lookup(this).referenceFor('belongsTo', name);\n }\n\n /**\n Get the reference for the specified hasMany relationship.\n Example\n ```app/models/blog.js\n import Model, { hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany({ async: true }) comments;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n comments: {\n data: [\n { type: 'comment', id: 1 },\n { type: 'comment', id: 2 }\n ]\n }\n }\n }\n });\n let commentsRef = blog.hasMany('comments');\n // check if the comments are loaded already\n let isLoaded = commentsRef.value() !== null;\n // get the records of the reference (null if not yet available)\n let comments = commentsRef.value();\n // get the identifier of the reference\n if (commentsRef.remoteType() === \"ids\") {\n let ids = commentsRef.ids();\n } else if (commentsRef.remoteType() === \"link\") {\n let link = commentsRef.link();\n }\n // load comments (via store.findMany or store.findHasMany)\n commentsRef.load().then(...)\n // or trigger a reload\n commentsRef.reload().then(...)\n // provide data for reference\n commentsRef.push([{ type: 'comment', id: 1 }, { type: 'comment', id: 2 }]).then(function(comments) {\n commentsRef.value() === comments;\n });\n ```\n @method hasMany\n @public\n @param {String} name of the relationship\n @since 2.5.0\n @return {HasManyReference} reference for this relationship\n */\n hasMany(name) {\n return LEGACY_SUPPORT.lookup(this).referenceFor('hasMany', name);\n }\n\n /**\n Given a callback, iterates over each of the relationships in the model,\n invoking the callback with the name of each relationship and its relationship\n descriptor.\n The callback method you provide should have the following signature (all\n parameters are optional):\n ```javascript\n function(name, descriptor);\n ```\n - `name` the name of the current property in the iteration\n - `descriptor` the meta object that describes this relationship\n The relationship descriptor argument is an object with the following properties.\n - **key** String the name of this relationship on the Model\n - **kind** String \"hasMany\" or \"belongsTo\"\n - **options** Object the original options hash passed when the relationship was declared\n - **parentType** Model the type of the Model that owns this relationship\n - **type** String the type name of the related Model\n Note that in addition to a callback, you can also pass an optional target\n object that will be set as `this` on the context.\n Example\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class ApplicationSerializer extends JSONSerializer {\n serialize(record, options) {\n let json = {};\n record.eachRelationship(function(name, descriptor) {\n if (descriptor.kind === 'hasMany') {\n let serializedHasManyName = name.toUpperCase() + '_IDS';\n json[serializedHasManyName] = record.get(name).mapBy('id');\n }\n });\n return json;\n }\n }\n ```\n @method eachRelationship\n @public\n @param {Function} callback the callback to invoke\n @param {any} binding the value to which the callback's `this` should be bound\n */\n eachRelationship(callback, binding) {\n this.constructor.eachRelationship(callback, binding);\n }\n relationshipFor(name) {\n return this.constructor.relationshipsByName.get(name);\n }\n inverseFor(key) {\n return this.constructor.inverseFor(key, storeFor(this));\n }\n eachAttribute(callback, binding) {\n this.constructor.eachAttribute(callback, binding);\n }\n /*\n These class methods below provide relationship\n introspection abilities about relationships.\n A note about the computed properties contained here:\n **These properties are effectively sealed once called for the first time.**\n To avoid repeatedly doing expensive iteration over a model's fields, these\n values are computed once and then cached for the remainder of the runtime of\n your application.\n If your application needs to modify a class after its initial definition\n (for example, using `reopen()` to add additional attributes), make sure you\n do it before using your model with the store, which uses these properties\n extensively.\n */\n\n /**\n For a given relationship name, returns the model type of the relationship.\n For example, if you define a model like this:\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment') comments;\n }\n ```\n Calling `store.modelFor('post').typeForRelationship('comments', store)` will return `Comment`.\n @method typeForRelationship\n @public\n @static\n @param {String} name the name of the relationship\n @param {store} store an instance of Store\n @return {Model} the type of the relationship, or undefined\n */\n static typeForRelationship(name, store) {\n let relationship = this.relationshipsByName.get(name);\n return relationship && store.modelFor(relationship.type);\n }\n static get inverseMap() {\n return Object.create(null);\n }\n\n /**\n Find the relationship which is the inverse of the one asked for.\n For example, if you define models like this:\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('message') comments;\n }\n ```\n ```app/models/message.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class MessageModel extends Model {\n @belongsTo('post') owner;\n }\n ```\n ``` js\n store.modelFor('post').inverseFor('comments', store) // { type: App.Message, name: 'owner', kind: 'belongsTo' }\n store.modelFor('message').inverseFor('owner', store) // { type: App.Post, name: 'comments', kind: 'hasMany' }\n ```\n @method inverseFor\n @public\n @static\n @param {String} name the name of the relationship\n @param {Store} store\n @return {Object} the inverse relationship, or null\n */\n static inverseFor(name, store) {\n let inverseMap = this.inverseMap;\n if (inverseMap[name]) {\n return inverseMap[name];\n } else {\n let inverse = this._findInverseFor(name, store);\n inverseMap[name] = inverse;\n return inverse;\n }\n }\n\n //Calculate the inverse, ignoring the cache\n static _findInverseFor(name, store) {\n let inverseType = this.typeForRelationship(name, store);\n if (!inverseType) {\n return null;\n }\n let propertyMeta = this.metaForProperty(name);\n //If inverse is manually specified to be null, like `comments: hasMany('message', { inverse: null })`\n let options = propertyMeta.options;\n if (options.inverse === null) {\n return null;\n }\n let inverseName, inverseKind, inverse, inverseOptions;\n\n //If inverse is specified manually, return the inverse\n if (options.inverse) {\n inverseName = options.inverse;\n inverse = inverseType.relationshipsByName.get(inverseName);\n assert(\"We found no inverse relationships by the name of '\" + inverseName + \"' on the '\" + inverseType.modelName + \"' model. This is most likely due to a missing attribute on your model definition.\", !isNone(inverse));\n\n // TODO probably just return the whole inverse here\n inverseKind = inverse.kind;\n inverseOptions = inverse.options;\n } else {\n //No inverse was specified manually, we need to use a heuristic to guess one\n if (propertyMeta.type === propertyMeta.parentModelName) {\n warn(`Detected a reflexive relationship by the name of '${name}' without an inverse option. Look at https://guides.emberjs.com/current/models/relationships/#toc_reflexive-relations for how to explicitly specify inverses.`, false, {\n id: 'ds.model.reflexive-relationship-without-inverse'\n });\n }\n let possibleRelationships = findPossibleInverses(this, inverseType, name);\n if (possibleRelationships.length === 0) {\n return null;\n }\n let filteredRelationships = possibleRelationships.filter(possibleRelationship => {\n let optionsForRelationship = inverseType.metaForProperty(possibleRelationship.name).options;\n return name === optionsForRelationship.inverse;\n });\n assert(\"You defined the '\" + name + \"' relationship on \" + this + ', but you defined the inverse relationships of type ' + inverseType.toString() + ' multiple times. Look at https://guides.emberjs.com/current/models/relationships/#toc_explicit-inverses for how to explicitly specify inverses', filteredRelationships.length < 2);\n if (filteredRelationships.length === 1) {\n possibleRelationships = filteredRelationships;\n }\n assert(\"You defined the '\" + name + \"' relationship on \" + this + ', but multiple possible inverse relationships of type ' + this + ' were found on ' + inverseType + '. Look at https://guides.emberjs.com/current/models/relationships/#toc_explicit-inverses for how to explicitly specify inverses', possibleRelationships.length === 1);\n inverseName = possibleRelationships[0].name;\n inverseKind = possibleRelationships[0].kind;\n inverseOptions = possibleRelationships[0].options;\n }\n assert(`The ${inverseType.modelName}:${inverseName} relationship declares 'inverse: null', but it was resolved as the inverse for ${this.modelName}:${name}.`, !inverseOptions || inverseOptions.inverse !== null);\n return {\n type: inverseType,\n name: inverseName,\n kind: inverseKind,\n options: inverseOptions\n };\n }\n\n /**\n The model's relationships as a map, keyed on the type of the\n relationship. The value of each entry is an array containing a descriptor\n for each relationship with that type, describing the name of the relationship\n as well as the type.\n For example, given the following model definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This computed property would return a map describing these\n relationships, like this:\n ```javascript\n import { get } from '@ember/object';\n import Blog from 'app/models/blog';\n import User from 'app/models/user';\n import Post from 'app/models/post';\n let relationships = Blog.relationships;\n relationships.get('user');\n //=> [ { name: 'users', kind: 'hasMany' },\n // { name: 'owner', kind: 'belongsTo' } ]\n relationships.get('post');\n //=> [ { name: 'posts', kind: 'hasMany' } ]\n ```\n @property relationships\n @public\n @static\n @type Map\n @readOnly\n */\n\n static get relationships() {\n let map = new Map();\n let relationshipsByName = this.relationshipsByName;\n\n // Loop through each computed property on the class\n relationshipsByName.forEach(desc => {\n let {\n type\n } = desc;\n if (!map.has(type)) {\n map.set(type, []);\n }\n map.get(type).push(desc);\n });\n return map;\n }\n\n /**\n A hash containing lists of the model's relationships, grouped\n by the relationship kind. For example, given a model with this\n definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This property would contain the following:\n ```javascript\n import { get } from '@ember/object';\n import Blog from 'app/models/blog';\n let relationshipNames = Blog.relationshipNames;\n relationshipNames.hasMany;\n //=> ['users', 'posts']\n relationshipNames.belongsTo;\n //=> ['owner']\n ```\n @property relationshipNames\n @public\n @static\n @type Object\n @readOnly\n */\n static get relationshipNames() {\n let names = {\n hasMany: [],\n belongsTo: []\n };\n this.eachComputedProperty((name, meta) => {\n if (meta.isRelationship) {\n names[meta.kind].push(name);\n }\n });\n return names;\n }\n\n /**\n An array of types directly related to a model. Each type will be\n included once, regardless of the number of relationships it has with\n the model.\n For example, given a model with this definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This property would contain the following:\n ```javascript\n import { get } from '@ember/object';\n import Blog from 'app/models/blog';\n let relatedTypes = Blog.relatedTypes');\n //=> [ User, Post ]\n ```\n @property relatedTypes\n @public\n @static\n @type Ember.Array\n @readOnly\n */\n static get relatedTypes() {\n let types = [];\n let rels = this.relationshipsObject;\n let relationships = Object.keys(rels);\n\n // create an array of the unique types involved\n // in relationships\n for (let i = 0; i < relationships.length; i++) {\n let name = relationships[i];\n let meta = rels[name];\n let modelName = meta.type;\n if (types.indexOf(modelName) === -1) {\n types.push(modelName);\n }\n }\n return types;\n }\n\n /**\n A map whose keys are the relationships of a model and whose values are\n relationship descriptors.\n For example, given a model with this\n definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This property would contain the following:\n ```javascript\n import { get } from '@ember/object';\n import Blog from 'app/models/blog';\n let relationshipsByName = Blog.relationshipsByName;\n relationshipsByName.get('users');\n //=> { key: 'users', kind: 'hasMany', type: 'user', options: Object, isRelationship: true }\n relationshipsByName.get('owner');\n //=> { key: 'owner', kind: 'belongsTo', type: 'user', options: Object, isRelationship: true }\n ```\n @property relationshipsByName\n @public\n @static\n @type Map\n @readOnly\n */\n static get relationshipsByName() {\n let map = new Map();\n let rels = this.relationshipsObject;\n let relationships = Object.keys(rels);\n for (let i = 0; i < relationships.length; i++) {\n let key = relationships[i];\n let value = rels[key];\n map.set(value.key, value);\n }\n return map;\n }\n static get relationshipsObject() {\n let relationships = Object.create(null);\n let modelName = this.modelName;\n this.eachComputedProperty((name, meta) => {\n if (meta.isRelationship) {\n meta.key = name;\n meta.name = name;\n meta.parentModelName = modelName;\n relationships[name] = relationshipFromMeta(meta);\n }\n });\n return relationships;\n }\n\n /**\n A map whose keys are the fields of the model and whose values are strings\n describing the kind of the field. A model's fields are the union of all of its\n attributes and relationships.\n For example:\n ```app/models/blog.js\n import Model, { attr, belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n @attr('string') title;\n }\n ```\n ```js\n import { get } from '@ember/object';\n import Blog from 'app/models/blog'\n let fields = Blog.fields;\n fields.forEach(function(kind, field) {\n console.log(field, kind);\n });\n // prints:\n // users, hasMany\n // owner, belongsTo\n // posts, hasMany\n // title, attribute\n ```\n @property fields\n @public\n @static\n @type Map\n @readOnly\n */\n static get fields() {\n let map = new Map();\n this.eachComputedProperty((name, meta) => {\n if (meta.isRelationship) {\n map.set(name, meta.kind);\n } else if (meta.isAttribute) {\n map.set(name, 'attribute');\n }\n });\n return map;\n }\n\n /**\n Given a callback, iterates over each of the relationships in the model,\n invoking the callback with the name of each relationship and its relationship\n descriptor.\n @method eachRelationship\n @public\n @static\n @param {Function} callback the callback to invoke\n @param {any} binding the value to which the callback's `this` should be bound\n */\n static eachRelationship(callback, binding) {\n this.relationshipsByName.forEach((relationship, name) => {\n callback.call(binding, name, relationship);\n });\n }\n\n /**\n Given a callback, iterates over each of the types related to a model,\n invoking the callback with the related type's class. Each type will be\n returned just once, regardless of how many different relationships it has\n with a model.\n @method eachRelatedType\n @public\n @static\n @param {Function} callback the callback to invoke\n @param {any} binding the value to which the callback's `this` should be bound\n */\n static eachRelatedType(callback, binding) {\n let relationshipTypes = this.relatedTypes;\n for (let i = 0; i < relationshipTypes.length; i++) {\n let type = relationshipTypes[i];\n callback.call(binding, type);\n }\n }\n static determineRelationshipType(knownSide, store) {\n let knownKey = knownSide.key;\n let knownKind = knownSide.kind;\n let inverse = this.inverseFor(knownKey, store);\n // let key;\n let otherKind;\n if (!inverse) {\n return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';\n }\n\n // key = inverse.name;\n otherKind = inverse.kind;\n if (otherKind === 'belongsTo') {\n return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';\n } else {\n return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';\n }\n }\n\n /**\n A map whose keys are the attributes of the model (properties\n described by attr) and whose values are the meta object for the\n property.\n Example\n ```app/models/person.js\n import Model, { attr } from '@ember-data/model';\n export default class PersonModel extends Model {\n @attr('string') firstName;\n @attr('string') lastName;\n @attr('date') birthday;\n }\n ```\n ```javascript\n import { get } from '@ember/object';\n import Person from 'app/models/person'\n let attributes = Person.attributes\n attributes.forEach(function(meta, name) {\n console.log(name, meta);\n });\n // prints:\n // firstName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"firstName\"}\n // lastName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"lastName\"}\n // birthday {type: \"date\", isAttribute: true, options: Object, parentType: function, name: \"birthday\"}\n ```\n @property attributes\n @public\n @static\n @type {Map}\n @readOnly\n */\n static get attributes() {\n let map = new Map();\n this.eachComputedProperty((name, meta) => {\n if (meta.isAttribute) {\n assert(\"You may not set `id` as an attribute on your model. Please remove any lines that look like: `id: attr('')` from \" + this.toString(), name !== 'id');\n meta.name = name;\n map.set(name, meta);\n }\n });\n return map;\n }\n\n /**\n A map whose keys are the attributes of the model (properties\n described by attr) and whose values are type of transformation\n applied to each attribute. This map does not include any\n attributes that do not have an transformation type.\n Example\n ```app/models/person.js\n import Model, { attr } from '@ember-data/model';\n export default class PersonModel extends Model {\n @attr firstName;\n @attr('string') lastName;\n @attr('date') birthday;\n }\n ```\n ```javascript\n import { get } from '@ember/object';\n import Person from 'app/models/person';\n let transformedAttributes = Person.transformedAttributes\n transformedAttributes.forEach(function(field, type) {\n console.log(field, type);\n });\n // prints:\n // lastName string\n // birthday date\n ```\n @property transformedAttributes\n @public\n @static\n @type {Map}\n @readOnly\n */\n static get transformedAttributes() {\n let map = new Map();\n this.eachAttribute((key, meta) => {\n if (meta.type) {\n map.set(key, meta.type);\n }\n });\n return map;\n }\n\n /**\n Iterates through the attributes of the model, calling the passed function on each\n attribute.\n The callback method you provide should have the following signature (all\n parameters are optional):\n ```javascript\n function(name, meta);\n ```\n - `name` the name of the current property in the iteration\n - `meta` the meta object for the attribute property in the iteration\n Note that in addition to a callback, you can also pass an optional target\n object that will be set as `this` on the context.\n Example\n ```javascript\n import Model, { attr } from '@ember-data/model';\n class PersonModel extends Model {\n @attr('string') firstName;\n @attr('string') lastName;\n @attr('date') birthday;\n }\n PersonModel.eachAttribute(function(name, meta) {\n console.log(name, meta);\n });\n // prints:\n // firstName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"firstName\"}\n // lastName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"lastName\"}\n // birthday {type: \"date\", isAttribute: true, options: Object, parentType: function, name: \"birthday\"}\n ```\n @method eachAttribute\n @public\n @param {Function} callback The callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @static\n */\n static eachAttribute(callback, binding) {\n this.attributes.forEach((meta, name) => {\n callback.call(binding, name, meta);\n });\n }\n\n /**\n Iterates through the transformedAttributes of the model, calling\n the passed function on each attribute. Note the callback will not be\n called for any attributes that do not have an transformation type.\n The callback method you provide should have the following signature (all\n parameters are optional):\n ```javascript\n function(name, type);\n ```\n - `name` the name of the current property in the iteration\n - `type` a string containing the name of the type of transformed\n applied to the attribute\n Note that in addition to a callback, you can also pass an optional target\n object that will be set as `this` on the context.\n Example\n ```javascript\n import Model, { attr } from '@ember-data/model';\n let Person = Model.extend({\n firstName: attr(),\n lastName: attr('string'),\n birthday: attr('date')\n });\n Person.eachTransformedAttribute(function(name, type) {\n console.log(name, type);\n });\n // prints:\n // lastName string\n // birthday date\n ```\n @method eachTransformedAttribute\n @public\n @param {Function} callback The callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @static\n */\n static eachTransformedAttribute(callback, binding) {\n this.transformedAttributes.forEach((type, name) => {\n callback.call(binding, name, type);\n });\n }\n\n /**\n Returns the name of the model class.\n @method toString\n @public\n @static\n */\n static toString() {\n return `model:${get(this, 'modelName')}`;\n }\n}, _Model.isModel = true, _Model.modelName = null, _Model), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class.prototype, \"isEmpty\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isEmpty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isLoading\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasDirtyAttributes\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"hasDirtyAttributes\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isSaving\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isDeleted\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isDeleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isNew\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isNew\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isValid\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isValid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dirtyType\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"dirtyType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isError\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isError\"), _class.prototype), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isReloading\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _applyDecoratedDescriptor(_class.prototype, \"id\", [tagged], Object.getOwnPropertyDescriptor(_class.prototype, \"id\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"currentState\", [tagged], Object.getOwnPropertyDescriptor(_class.prototype, \"currentState\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"errors\", [computeOnce], Object.getOwnPropertyDescriptor(_class.prototype, \"errors\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"adapterError\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"adapterError\"), _class.prototype), _applyDecoratedDescriptor(_class, \"inverseMap\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"inverseMap\"), _class), _applyDecoratedDescriptor(_class, \"relationships\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationships\"), _class), _applyDecoratedDescriptor(_class, \"relationshipNames\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationshipNames\"), _class), _applyDecoratedDescriptor(_class, \"relatedTypes\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relatedTypes\"), _class), _applyDecoratedDescriptor(_class, \"relationshipsByName\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationshipsByName\"), _class), _applyDecoratedDescriptor(_class, \"relationshipsObject\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationshipsObject\"), _class), _applyDecoratedDescriptor(_class, \"fields\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"fields\"), _class), _applyDecoratedDescriptor(_class, \"attributes\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"attributes\"), _class), _applyDecoratedDescriptor(_class, \"transformedAttributes\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"transformedAttributes\"), _class), _class); // this is required to prevent `init` from passing\n// the values initialized during create to `setUnknownProperty`\nModel.prototype._internalModel = null;\nModel.prototype._createProps = null;\nModel.prototype._secretInit = null;\nif (true /* HAS_DEBUG_PACKAGE */) {\n /**\n Provides info about the model for debugging purposes\n by grouping the properties into more semantic groups.\n Meant to be used by debugging tools such as the Chrome Ember Extension.\n - Groups all attributes in \"Attributes\" group.\n - Groups all belongsTo relationships in \"Belongs To\" group.\n - Groups all hasMany relationships in \"Has Many\" group.\n - Groups all flags in \"Flags\" group.\n - Flags relationship CPs as expensive properties.\n @method _debugInfo\n @for Model\n @private\n */\n Model.prototype._debugInfo = function () {\n let attributes = ['id'];\n let relationships = {};\n let expensiveProperties = [];\n this.eachAttribute((name, meta) => attributes.push(name));\n let groups = [{\n name: 'Attributes',\n properties: attributes,\n expand: true\n }];\n this.eachRelationship((name, relationship) => {\n let properties = relationships[relationship.kind];\n if (properties === undefined) {\n properties = relationships[relationship.kind] = [];\n groups.push({\n name: relationship.kind,\n properties,\n expand: true\n });\n }\n properties.push(name);\n expensiveProperties.push(name);\n });\n groups.push({\n name: 'Flags',\n properties: ['isLoaded', 'hasDirtyAttributes', 'isSaving', 'isDeleted', 'isError', 'isNew', 'isValid']\n });\n return {\n propertyInfo: {\n // include all other mixins / properties (not just the grouped ones)\n includeOtherProperties: true,\n groups: groups,\n // don't pre-calculate unless cached\n expensiveProperties: expensiveProperties\n }\n };\n };\n}\nif (DEBUG) {\n let lookupDescriptor = function lookupDescriptor(obj, keyName) {\n let current = obj;\n do {\n let descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n if (descriptor !== undefined) {\n return descriptor;\n }\n current = Object.getPrototypeOf(current);\n } while (current !== null);\n return null;\n };\n let isBasicDesc = function isBasicDesc(desc) {\n return !desc || !desc.get && !desc.set && desc.enumerable === true && desc.writable === true && desc.configurable === true;\n };\n let isDefaultEmptyDescriptor = function isDefaultEmptyDescriptor(obj, keyName) {\n let instanceDesc = lookupDescriptor(obj, keyName);\n return isBasicDesc(instanceDesc) && lookupDescriptor(obj.constructor, keyName) === null;\n };\n Model.reopen({\n init() {\n this._super(...arguments);\n if (!isDefaultEmptyDescriptor(this, '_internalModel') || !(this._internalModel instanceof InternalModel)) {\n throw new Error(`'_internalModel' is a reserved property name on instances of classes extending Model. Please choose a different property name for ${this.constructor.toString()}`);\n }\n let ourDescriptor = lookupDescriptor(Model.prototype, 'currentState');\n let theirDescriptor = lookupDescriptor(this, 'currentState');\n let realState = this.___recordState;\n if (ourDescriptor.get !== theirDescriptor.get || realState !== this.currentState) {\n throw new Error(`'currentState' is a reserved property name on instances of classes extending Model. Please choose a different property name for ${this.constructor.toString()}`);\n }\n const ID_DESCRIPTOR = lookupDescriptor(Model.prototype, 'id');\n let idDesc = lookupDescriptor(this, 'id');\n if (idDesc.get !== ID_DESCRIPTOR.get) {\n throw new EmberError(`You may not set 'id' as an attribute on your model. Please remove any lines that look like: \\`id: attr('')\\` from ${this.constructor.toString()}`);\n }\n }\n });\n}\nexport default Model;","import { DEBUG } from '@glimmer/env';\nimport { singularize } from 'ember-inflector';\nimport { normalizeModelName } from '@ember-data/store/-private';\n/**\n @module @ember-data/store\n*/\n\nfunction typeForRelationshipMeta(meta) {\n let modelName = normalizeModelName(meta.type || meta.key);\n if (meta.kind === 'hasMany') {\n modelName = singularize(modelName);\n }\n return modelName;\n}\nfunction shouldFindInverse(relationshipMeta) {\n let options = relationshipMeta.options;\n return !(options && options.inverse === null);\n}\nexport class RelationshipDefinition {\n constructor(meta) {\n this._type = '';\n this.__inverseKey = '';\n this.__inverseIsAsync = true;\n this.__hasCalculatedInverse = false;\n this.parentModelName = meta.parentModelName;\n this.meta = meta;\n }\n\n /**\n * @internal\n * @deprecated\n */\n get key() {\n return this.meta.key;\n }\n get kind() {\n return this.meta.kind;\n }\n get type() {\n if (this._type) {\n return this._type;\n }\n this._type = typeForRelationshipMeta(this.meta);\n return this._type;\n }\n get options() {\n return this.meta.options;\n }\n get name() {\n return this.meta.name;\n }\n _inverseKey(store, modelClass) {\n if (this.__hasCalculatedInverse === false) {\n this._calculateInverse(store, modelClass);\n }\n return this.__inverseKey;\n }\n _inverseIsAsync(store, modelClass) {\n if (this.__hasCalculatedInverse === false) {\n this._calculateInverse(store, modelClass);\n }\n return this.__inverseIsAsync;\n }\n _calculateInverse(store, modelClass) {\n this.__hasCalculatedInverse = true;\n let inverseKey, inverseIsAsync;\n let inverse = null;\n if (shouldFindInverse(this.meta)) {\n inverse = modelClass.inverseFor(this.key, store);\n } else if (DEBUG) {\n modelClass.typeForRelationship(this.key, store);\n }\n if (inverse) {\n inverseKey = inverse.name;\n inverseIsAsync = isRelationshipAsync(inverse);\n } else {\n inverseKey = null;\n inverseIsAsync = false;\n }\n this.__inverseKey = inverseKey;\n this.__inverseIsAsync = inverseIsAsync;\n }\n}\nfunction isRelationshipAsync(meta) {\n let inverseAsync = meta.options && meta.options.async;\n return typeof inverseAsync === 'undefined' ? true : inverseAsync;\n}\nexport function relationshipFromMeta(meta) {\n return new RelationshipDefinition(meta);\n}","import { assert, inspect, warn } from '@ember/debug';\nimport { computed } from '@ember/object';\nimport { DEBUG } from '@glimmer/env';\nimport { LEGACY_SUPPORT } from './model';\nimport { computedMacroWithOptionalParams } from './util';\n\n/**\n @module @ember-data/model\n*/\n\n/**\n `belongsTo` is used to define One-To-One and One-To-Many\n relationships on a [Model](/ember-data/release/classes/Model).\n\n\n `belongsTo` takes an optional hash as a second parameter, currently\n supported options are:\n\n - `async`: A boolean value used to explicitly declare this to be an async relationship. The default is true.\n - `inverse`: A string used to identify the inverse property on a\n related model in a One-To-Many relationship. See [Explicit Inverses](#explicit-inverses)\n - `polymorphic` A boolean value to mark the relationship as polymorphic\n\n #### One-To-One\n To declare a one-to-one relationship between two models, use\n `belongsTo`:\n\n ```app/models/user.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @belongsTo('profile') profile;\n }\n ```\n\n ```app/models/profile.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class ProfileModel extends Model {\n @belongsTo('user') user;\n }\n ```\n\n #### One-To-Many\n To declare a one-to-many relationship between two models, use\n `belongsTo` in combination with `hasMany`, like this:\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('comment') comments;\n }\n ```\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo('post') post;\n }\n ```\n\n You can avoid passing a string as the first parameter. In that case Ember Data\n will infer the type from the key name.\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo post;\n }\n ```\n\n will lookup for a Post type.\n\n #### Sync relationships\n\n Ember Data resolves sync relationships with the related resources\n available in its local store, hence it is expected these resources\n to be loaded before or along-side the primary resource.\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo('post', {\n async: false\n })\n post;\n }\n ```\n\n In contrast to async relationship, accessing a sync relationship\n will always return the record (Model instance) for the existing\n local resource, or null. But it will error on access when\n a related resource is known to exist and it has not been loaded.\n\n ```\n let post = comment.get('post');\n\n ```\n\n @method belongsTo\n @public\n @static\n @for @ember-data/model\n @param {String} modelName (optional) type of the relationship\n @param {Object} options (optional) a hash of options\n @return {Ember.computed} relationship\n*/\nfunction belongsTo(modelName, options) {\n let opts, userEnteredModelName;\n if (typeof modelName === 'object') {\n opts = modelName;\n userEnteredModelName = undefined;\n } else {\n opts = options;\n userEnteredModelName = modelName;\n }\n assert('The first argument to belongsTo must be a string representing a model type key, not an instance of ' + inspect(userEnteredModelName) + \". E.g., to define a relation to the Person model, use belongsTo('person')\", typeof userEnteredModelName === 'string' || typeof userEnteredModelName === 'undefined');\n opts = opts || {};\n if (!('async' in opts)) {\n opts.async = true;\n }\n let meta = {\n type: userEnteredModelName,\n isRelationship: true,\n options: opts,\n kind: 'belongsTo',\n name: 'Belongs To',\n key: null\n };\n return computed({\n get(key) {\n const support = LEGACY_SUPPORT.lookup(this);\n if (DEBUG) {\n if (['_internalModel', 'recordData', 'currentState'].indexOf(key) !== -1) {\n throw new Error(`'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your belongsTo on ${this.constructor.toString()}`);\n }\n if (Object.prototype.hasOwnProperty.call(opts, 'serialize')) {\n warn(`You provided a serialize option on the \"${key}\" property in the \"${support.identifier.type}\" class, this belongs in the serializer. See Serializer and it's implementations https://api.emberjs.com/ember-data/release/classes/Serializer`, false, {\n id: 'ds.model.serialize-option-in-belongs-to'\n });\n }\n if (Object.prototype.hasOwnProperty.call(opts, 'embedded')) {\n warn(`You provided an embedded option on the \"${key}\" property in the \"${support.identifier.type}\" class, this belongs in the serializer. See EmbeddedRecordsMixin https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin`, false, {\n id: 'ds.model.embedded-option-in-belongs-to'\n });\n }\n }\n return support.getBelongsTo(key);\n },\n set(key, value) {\n const support = LEGACY_SUPPORT.lookup(this);\n if (DEBUG) {\n if (['_internalModel', 'recordData', 'currentState'].indexOf(key) !== -1) {\n throw new Error(`'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your belongsTo on ${this.constructor.toString()}`);\n }\n }\n this.store._backburner.join(() => {\n support.setDirtyBelongsTo(key, value);\n });\n return support.getBelongsTo(key);\n }\n }).meta(meta);\n}\nexport default computedMacroWithOptionalParams(belongsTo);","/**\n @module @ember-data/model\n*/\nimport { assert, inspect } from '@ember/debug';\nimport { computed } from '@ember/object';\nimport { DEBUG } from '@glimmer/env';\nimport { LEGACY_SUPPORT } from './model';\nimport { computedMacroWithOptionalParams } from './util';\n\n/**\n `hasMany` is used to define One-To-Many and Many-To-Many\n relationships on a [Model](/ember-data/release/classes/Model).\n\n `hasMany` takes an optional hash as a second parameter, currently\n supported options are:\n\n - `async`: A boolean value used to explicitly declare this to be an async relationship. The default is true.\n - `inverse`: A string used to identify the inverse property on a related model.\n - `polymorphic` A boolean value to mark the relationship as polymorphic\n\n #### One-To-Many\n To declare a one-to-many relationship between two models, use\n `belongsTo` in combination with `hasMany`, like this:\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('comment') comments;\n }\n ```\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo('post') post;\n }\n ```\n\n #### Many-To-Many\n To declare a many-to-many relationship between two models, use\n `hasMany`:\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('tag') tags;\n }\n ```\n\n ```app/models/tag.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class TagModel extends Model {\n @hasMany('post') posts;\n }\n ```\n\n You can avoid passing a string as the first parameter. In that case Ember Data\n will infer the type from the singularized key name.\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany tags;\n }\n ```\n\n will lookup for a Tag type.\n\n #### Explicit Inverses\n\n Ember Data will do its best to discover which relationships map to\n one another. In the one-to-many code above, for example, Ember Data\n can figure out that changing the `comments` relationship should update\n the `post` relationship on the inverse because post is the only\n relationship to that model.\n\n However, sometimes you may have multiple `belongsTo`/`hasMany` for the\n same type. You can specify which property on the related model is\n the inverse using `hasMany`'s `inverse` option:\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo('post') onePost;\n @belongsTo('post') twoPost\n @belongsTo('post') redPost;\n @belongsTo('post') bluePost;\n }\n ```\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('comment', {\n inverse: 'redPost'\n })\n comments;\n }\n ```\n\n You can also specify an inverse on a `belongsTo`, which works how\n you'd expect.\n\n #### Sync relationships\n\n Ember Data resolves sync relationships with the related resources\n available in its local store, hence it is expected these resources\n to be loaded before or along-side the primary resource.\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('comment', {\n async: false\n })\n comments;\n }\n ```\n\n In contrast to async relationship, accessing a sync relationship\n will always return a [ManyArray](/ember-data/release/classes/ManyArray) instance\n containing the existing local resources. But it will error on access\n when any of the known related resources have not been loaded.\n\n ```\n post.get('comments').forEach((comment) => {\n\n });\n\n ```\n\n If you are using `links` with sync relationships, you have to use\n `ref.reload` to fetch the resources.\n\n @method hasMany\n @public\n @static\n @for @ember-data/model\n @param {String} type (optional) type of the relationship\n @param {Object} options (optional) a hash of options\n @return {Ember.computed} relationship\n*/\nfunction hasMany(type, options) {\n if (typeof type === 'object') {\n options = type;\n type = undefined;\n }\n assert(`The first argument to hasMany must be a string representing a model type key, not an instance of ${inspect(type)}. E.g., to define a relation to the Comment model, use hasMany('comment')`, typeof type === 'string' || typeof type === 'undefined');\n options = options || {};\n if (!('async' in options)) {\n options.async = true;\n }\n\n // Metadata about relationships is stored on the meta of\n // the relationship. This is used for introspection and\n // serialization. Note that `key` is populated lazily\n // the first time the CP is called.\n let meta = {\n type,\n options,\n isRelationship: true,\n kind: 'hasMany',\n name: 'Has Many',\n key: null\n };\n return computed({\n get(key) {\n if (DEBUG) {\n if (['_internalModel', 'currentState'].indexOf(key) !== -1) {\n throw new Error(`'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your hasMany on ${this.constructor.toString()}`);\n }\n }\n return LEGACY_SUPPORT.lookup(this).getHasMany(key);\n },\n set(key, records) {\n if (DEBUG) {\n if (['_internalModel', 'currentState'].indexOf(key) !== -1) {\n throw new Error(`'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your hasMany on ${this.constructor.toString()}`);\n }\n }\n const support = LEGACY_SUPPORT.lookup(this);\n this.store._backburner.join(() => {\n support.setDirtyHasMany(key, records);\n });\n return support.getHasMany(key);\n }\n }).meta(meta);\n}\nexport default computedMacroWithOptionalParams(hasMany);","import { getOwner } from '@ember/application';\nimport Model from './model';\n\n/*\n In case someone defined a relationship to a mixin, for example:\n ```\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n import Mixin from '@ember/object/mixin';\n\n class CommentModel extends Model {\n @belongsTo('commentable', { polymorphic: true }) owner;\n }\n\n let Commentable = Mixin.create({\n @hasMany('comment') comments;\n });\n ```\n we want to look up a Commentable class which has all the necessary\n relationship meta data. Thus, we look up the mixin and create a mock\n Model, so we can access the relationship CPs of the mixin (`comments`)\n in this case\n */\nexport default function modelForMixin(store, normalizedModelName) {\n let owner = getOwner(store);\n let MaybeMixin = owner.factoryFor(`mixin:${normalizedModelName}`);\n let mixin = MaybeMixin && MaybeMixin.class;\n if (mixin) {\n let ModelForMixin = Model.extend(mixin);\n ModelForMixin.reopenClass({\n __isMixin: true,\n __mixin: mixin\n });\n //Cache the class as a model\n owner.register('model:' + normalizedModelName, ModelForMixin);\n }\n return owner.factoryFor(`model:${normalizedModelName}`);\n}","import { DEBUG } from '@glimmer/env';\n\n// Used by the store to normalize IDs entering the store. Despite the fact\n// that developers may provide IDs as numbers (e.g., `store.findRecord('person', 1)`),\n// it is important that internally we use strings, since IDs may be serialized\n// and lose type information. For example, Ember's router may put a record's\n// ID into the URL, and if we later try to deserialize that URL and find the\n// corresponding record, we will not know if it is a string or a number.\n\nfunction coerceId(id) {\n if (id === null || id === undefined || id === '') {\n return null;\n }\n if (typeof id === 'string') {\n return id;\n }\n if (typeof id === 'symbol') {\n return id.toString();\n }\n return '' + id;\n}\nexport function ensureStringId(id) {\n let normalized = null;\n if (typeof id === 'string') {\n normalized = id.length > 0 ? id : null;\n } else if (typeof id === 'number' && !isNaN(id)) {\n normalized = '' + id;\n }\n if (DEBUG && normalized === null) {\n throw new Error(`Expected id to be a string or number, received ${String(id)}`);\n }\n return normalized;\n}\nexport default coerceId;","import { assert, inspect, warn } from '@ember/debug';\nimport { coerceId, recordDataFor as peekRecordData } from '@ember-data/store/-private';\nexport function expandingGet(cache, key1, key2) {\n let mainCache = cache[key1] = cache[key1] || Object.create(null);\n return mainCache[key2];\n}\nexport function expandingSet(cache, key1, key2, value) {\n let mainCache = cache[key1] = cache[key1] || Object.create(null);\n mainCache[key2] = value;\n}\nexport function assertValidRelationshipPayload(graph, op) {\n const relationship = graph.get(op.record, op.field);\n assert(`Cannot update an implicit relationship`, isHasMany(relationship) || isBelongsTo(relationship));\n const payload = op.value;\n const {\n definition,\n identifier,\n state\n } = relationship;\n const {\n type\n } = identifier;\n const {\n field\n } = op;\n const {\n isAsync,\n kind\n } = definition;\n if (payload.links) {\n warn(`You pushed a record of type '${type}' with a relationship '${field}' configured as 'async: false'. You've included a link but no primary data, this may be an error in your payload. EmberData will treat this relationship as known-to-be-empty.`, isAsync || !!payload.data || state.hasReceivedData, {\n id: 'ds.store.push-link-for-sync-relationship'\n });\n } else if (payload.data) {\n if (kind === 'belongsTo') {\n assert(`A ${type} record was pushed into the store with the value of ${field} being ${inspect(payload.data)}, but ${field} is a belongsTo relationship so the value must not be an array. You should probably check your data payload or serializer.`, !Array.isArray(payload.data));\n assertRelationshipData(graph.store._store, identifier, payload.data, definition);\n } else if (kind === 'hasMany') {\n assert(`A ${type} record was pushed into the store with the value of ${field} being '${inspect(payload.data)}', but ${field} is a hasMany relationship so the value must be an array. You should probably check your data payload or serializer.`, Array.isArray(payload.data));\n if (Array.isArray(payload.data)) {\n for (let i = 0; i < payload.data.length; i++) {\n assertRelationshipData(graph.store._store, identifier, payload.data[i], definition);\n }\n }\n }\n }\n}\nexport function isNew(identifier) {\n if (!identifier.id) {\n return true;\n }\n const recordData = peekRecordData(identifier);\n return recordData ? isRelationshipRecordData(recordData) && recordData.isNew() : false;\n}\nfunction isRelationshipRecordData(recordData) {\n return typeof recordData.isNew === 'function';\n}\nexport function isBelongsTo(relationship) {\n return relationship.definition.kind === 'belongsTo';\n}\nexport function isImplicit(relationship) {\n return relationship.definition.isImplicit;\n}\nexport function isHasMany(relationship) {\n return relationship.definition.kind === 'hasMany';\n}\nexport function assertRelationshipData(store, identifier, data, meta) {\n assert(`A ${identifier.type} record was pushed into the store with the value of ${meta.key} being '${JSON.stringify(data)}', but ${meta.key} is a belongsTo relationship so the value must not be an array. You should probably check your data payload or serializer.`, !Array.isArray(data));\n assert(`Encountered a relationship identifier without a type for the ${meta.kind} relationship '${meta.key}' on <${identifier.type}:${identifier.id}>, expected a json-api identifier with type '${meta.type}' but found '${JSON.stringify(data)}'. Please check your serializer and make sure it is serializing the relationship payload into a JSON API format.`, data === null || typeof data.type === 'string' && data.type.length);\n assert(`Encountered a relationship identifier without an id for the ${meta.kind} relationship '${meta.key}' on <${identifier.type}:${identifier.id}>, expected a json-api identifier but found '${JSON.stringify(data)}'. Please check your serializer and make sure it is serializing the relationship payload into a JSON API format.`, data === null || !!coerceId(data.id));\n assert(`Encountered a relationship identifier with type '${data.type}' for the ${meta.kind} relationship '${meta.key}' on <${identifier.type}:${identifier.id}>, Expected a json-api identifier with type '${meta.type}'. No model was found for '${data.type}'.`, data === null || !data.type || store.getSchemaDefinitionService().doesTypeExist(data.type));\n}","import { createState } from '../../graph/-state';\nimport { isNew } from '../../graph/-utils';\nexport default class BelongsToRelationship {\n constructor(graph, definition, identifier) {\n this.graph = graph;\n this.store = graph.store;\n this.definition = definition;\n this.identifier = identifier;\n this._state = null;\n this.transactionRef = 0;\n this.meta = null;\n this.links = null;\n this.localState = null;\n this.remoteState = null;\n }\n get state() {\n let {\n _state\n } = this;\n if (!_state) {\n _state = this._state = createState();\n }\n return _state;\n }\n recordDataDidDematerialize() {\n if (this.definition.inverseIsImplicit) {\n return;\n }\n const inverseKey = this.definition.inverseKey;\n const callback = inverseIdentifier => {\n if (!inverseIdentifier || !this.graph.has(inverseIdentifier, inverseKey)) {\n return;\n }\n let relationship = this.graph.get(inverseIdentifier, inverseKey);\n\n // For canonical members, it is possible that inverseRecordData has already been associated to\n // to another record. For such cases, do not dematerialize the inverseRecordData\n if (relationship.definition.kind !== 'belongsTo' || !relationship.localState || this.identifier === relationship.localState) {\n relationship.inverseDidDematerialize(this.identifier);\n }\n };\n if (this.remoteState) {\n callback(this.remoteState);\n }\n if (this.localState && this.localState !== this.remoteState) {\n callback(this.localState);\n }\n }\n inverseDidDematerialize() {\n const inverseRecordData = this.localState;\n if (!this.definition.isAsync || inverseRecordData && isNew(inverseRecordData)) {\n // unloading inverse of a sync relationship is treated as a client-side\n // delete, so actually remove the models don't merely invalidate the cp\n // cache.\n // if the record being unloaded only exists on the client, we similarly\n // treat it as a client side delete\n if (this.localState === inverseRecordData && inverseRecordData !== null) {\n this.localState = null;\n }\n if (this.remoteState === inverseRecordData && inverseRecordData !== null) {\n this.remoteState = null;\n this.state.hasReceivedData = true;\n this.state.isEmpty = true;\n if (this.localState && !isNew(this.localState)) {\n this.localState = null;\n }\n }\n } else {\n this.state.hasDematerializedInverse = true;\n }\n this.notifyBelongsToChange();\n }\n getData() {\n let data;\n let payload = {};\n if (this.localState) {\n data = this.localState;\n }\n if (this.localState === null && this.state.hasReceivedData) {\n data = null;\n }\n if (this.links) {\n payload.links = this.links;\n }\n if (data !== undefined) {\n payload.data = data;\n }\n if (this.meta) {\n payload.meta = this.meta;\n }\n payload._relationship = this;\n return payload;\n }\n\n /*\n Removes the given RecordData from BOTH canonical AND current state.\n This method is useful when either a deletion or a rollback on a new record\n needs to entirely purge itself from an inverse relationship.\n */\n removeCompletelyFromOwn(recordData) {\n if (this.remoteState === recordData) {\n this.remoteState = null;\n }\n if (this.localState === recordData) {\n this.localState = null;\n // This allows dematerialized inverses to be rematerialized\n // we shouldn't be notifying here though, figure out where\n // a notification was missed elsewhere.\n this.notifyBelongsToChange();\n }\n }\n notifyBelongsToChange() {\n let recordData = this.identifier;\n this.store.notifyBelongsToChange(recordData.type, recordData.id, recordData.lid, this.definition.key);\n }\n clear() {\n this.localState = null;\n this.remoteState = null;\n this.state.hasReceivedData = false;\n this.state.isEmpty = true;\n }\n}","export function createState() {\n return {\n hasReceivedData: false,\n isEmpty: true,\n isStale: false,\n hasFailedLoadAttempt: false,\n shouldForceReload: false,\n hasDematerializedInverse: false\n };\n}","import { assert } from '@ember/debug';\nimport { createState } from '../../graph/-state';\nimport { isImplicit, isNew } from '../../graph/-utils';\nexport default class ManyRelationship {\n constructor(graph, definition, identifier) {\n this.graph = graph;\n this.store = graph.store;\n this.definition = definition;\n this.identifier = identifier;\n this._state = null;\n this.transactionRef = 0;\n this.members = new Set();\n this.canonicalMembers = new Set();\n this.meta = null;\n this.links = null;\n\n // persisted state\n this.canonicalState = [];\n // local client state\n this.currentState = [];\n this._willUpdateManyArray = false;\n this._pendingManyArrayUpdates = null;\n }\n get state() {\n let {\n _state\n } = this;\n if (!_state) {\n _state = this._state = createState();\n }\n return _state;\n }\n recordDataDidDematerialize() {\n if (this.definition.inverseIsImplicit) {\n return;\n }\n const inverseKey = this.definition.inverseKey;\n this.forAllMembers(inverseIdentifier => {\n inverseIdentifier;\n if (!inverseIdentifier || !this.graph.has(inverseIdentifier, inverseKey)) {\n return;\n }\n let relationship = this.graph.get(inverseIdentifier, inverseKey);\n assert(`expected no implicit`, !isImplicit(relationship));\n\n // For canonical members, it is possible that inverseRecordData has already been associated to\n // to another record. For such cases, do not dematerialize the inverseRecordData\n if (relationship.definition.kind !== 'belongsTo' || !relationship.localState || this.identifier === relationship.localState) {\n relationship.inverseDidDematerialize(this.identifier);\n }\n });\n }\n forAllMembers(callback) {\n // ensure we don't walk anything twice if an entry is\n // in both members and canonicalMembers\n let seen = Object.create(null);\n for (let i = 0; i < this.currentState.length; i++) {\n const inverseInternalModel = this.currentState[i];\n const id = inverseInternalModel.lid;\n if (!seen[id]) {\n seen[id] = true;\n callback(inverseInternalModel);\n }\n }\n for (let i = 0; i < this.canonicalState.length; i++) {\n const inverseInternalModel = this.canonicalState[i];\n const id = inverseInternalModel.lid;\n if (!seen[id]) {\n seen[id] = true;\n callback(inverseInternalModel);\n }\n }\n }\n clear() {\n this.members.clear();\n this.canonicalMembers.clear();\n this.currentState = [];\n this.canonicalState = [];\n }\n inverseDidDematerialize(inverseRecordData) {\n if (!this.definition.isAsync || inverseRecordData && isNew(inverseRecordData)) {\n // unloading inverse of a sync relationship is treated as a client-side\n // delete, so actually remove the models don't merely invalidate the cp\n // cache.\n // if the record being unloaded only exists on the client, we similarly\n // treat it as a client side delete\n this.removeCompletelyFromOwn(inverseRecordData);\n } else {\n this.state.hasDematerializedInverse = true;\n }\n this.notifyHasManyChange();\n }\n\n /*\n Removes the given RecordData from BOTH canonical AND current state.\n This method is useful when either a deletion or a rollback on a new record\n needs to entirely purge itself from an inverse relationship.\n */\n removeCompletelyFromOwn(recordData) {\n this.canonicalMembers.delete(recordData);\n this.members.delete(recordData);\n const canonicalIndex = this.canonicalState.indexOf(recordData);\n if (canonicalIndex !== -1) {\n this.canonicalState.splice(canonicalIndex, 1);\n }\n const currentIndex = this.currentState.indexOf(recordData);\n if (currentIndex !== -1) {\n this.currentState.splice(currentIndex, 1);\n // This allows dematerialized inverses to be rematerialized\n // we shouldn't be notifying here though, figure out where\n // a notification was missed elsewhere.\n this.notifyHasManyChange();\n }\n }\n notifyHasManyChange() {\n const {\n store,\n identifier: recordData\n } = this;\n store.notifyHasManyChange(recordData.type, recordData.id, recordData.lid, this.definition.key);\n }\n getData() {\n let payload = {};\n if (this.state.hasReceivedData) {\n payload.data = this.currentState.slice();\n }\n if (this.links) {\n payload.links = this.links;\n }\n if (this.meta) {\n payload.meta = this.meta;\n }\n return payload;\n }\n}","/**\n @module @ember-data/store\n*/\nexport default class ImplicitRelationship {\n constructor(graph, definition, identifier) {\n this.graph = graph;\n this.definition = definition;\n this.identifier = identifier;\n this.members = new Set();\n this.canonicalMembers = new Set();\n }\n addCanonicalRecordData(recordData, idx) {\n if (!this.canonicalMembers.has(recordData)) {\n this.canonicalMembers.add(recordData);\n this.members.add(recordData);\n }\n }\n addRecordData(recordData, idx) {\n if (!this.members.has(recordData)) {\n this.members.add(recordData);\n }\n }\n removeRecordData(recordData) {\n if (recordData && this.members.has(recordData)) {\n this.members.delete(recordData);\n }\n }\n removeCompletelyFromOwn(recordData) {\n this.canonicalMembers.delete(recordData);\n this.members.delete(recordData);\n }\n clear() {\n this.canonicalMembers.clear();\n this.members.clear();\n }\n}","import { assert } from '@ember/debug';\nimport { expandingGet, expandingSet } from './-utils';\nconst BOOL_LATER = null;\nconst STR_LATER = '';\nconst IMPLICIT_KEY_RAND = Date.now();\nfunction implicitKeyFor(type, key) {\n return `implicit-${type}:${key}${IMPLICIT_KEY_RAND}`;\n}\nfunction syncMeta(definition, inverseDefinition) {\n definition.inverseKind = inverseDefinition.kind;\n definition.inverseKey = inverseDefinition.key;\n definition.inverseType = inverseDefinition.type;\n definition.inverseIsAsync = inverseDefinition.isAsync;\n definition.inverseIsCollection = inverseDefinition.isCollection;\n definition.inverseIsPolymorphic = inverseDefinition.isPolymorphic;\n definition.inverseIsImplicit = inverseDefinition.isImplicit;\n}\nfunction upgradeMeta(meta) {\n let niceMeta = {};\n let options = meta.options;\n niceMeta.kind = meta.kind;\n niceMeta.key = meta.name;\n niceMeta.type = meta.type;\n niceMeta.isAsync = options && options.async !== undefined ? !!options.async : true;\n niceMeta.isImplicit = false;\n niceMeta.isCollection = meta.kind === 'hasMany';\n niceMeta.isPolymorphic = options && !!options.polymorphic;\n niceMeta.inverseKey = options && options.inverse || STR_LATER;\n niceMeta.inverseType = STR_LATER;\n niceMeta.inverseIsAsync = BOOL_LATER;\n niceMeta.inverseIsImplicit = options && options.inverse === null || BOOL_LATER;\n niceMeta.inverseIsCollection = BOOL_LATER;\n return niceMeta;\n}\nexport function isLHS(info, type, key) {\n let isSelfReferential = info.isSelfReferential;\n let isRelationship = key === info.lhs_relationshipName;\n if (isRelationship === true) {\n return isSelfReferential === true ||\n // itself\n type === info.lhs_baseModelName ||\n // base or non-polymorphic\n // if the other side is polymorphic then we need to scan our modelNames\n info.rhs_isPolymorphic && info.lhs_modelNames.indexOf(type) !== -1 // polymorphic\n ;\n }\n return false;\n}\nexport function isRHS(info, type, key) {\n let isSelfReferential = info.isSelfReferential;\n let isRelationship = key === info.rhs_relationshipName;\n if (isRelationship === true) {\n return isSelfReferential === true ||\n // itself\n type === info.rhs_baseModelName ||\n // base or non-polymorphic\n // if the other side is polymorphic then we need to scan our modelNames\n info.lhs_isPolymorphic && info.rhs_modelNames.indexOf(type) !== -1 // polymorphic\n ;\n }\n return false;\n}\nexport function upgradeDefinition(graph, identifier, propertyName, isImplicit = false) {\n const cache = graph._definitionCache;\n const storeWrapper = graph.store;\n const polymorphicLookup = graph._potentialPolymorphicTypes;\n const {\n type\n } = identifier;\n let cached = expandingGet(cache, type, propertyName);\n\n // CASE: We have a cached resolution (null if no relationship exists)\n if (cached !== undefined) {\n return cached;\n }\n assert(`Expected to find relationship definition in the cache for the implicit relationship ${propertyName}`, !isImplicit);\n let relationships = storeWrapper.relationshipsDefinitionFor(type);\n assert(`Expected to have a relationship definition for ${type} but none was found.`, relationships);\n let meta = relationships[propertyName];\n if (!meta) {\n if (polymorphicLookup[type]) {\n const altTypes = Object.keys(polymorphicLookup[type]);\n for (let i = 0; i < altTypes.length; i++) {\n let cached = expandingGet(cache, altTypes[i], propertyName);\n if (cached) {\n expandingSet(cache, type, propertyName, cached);\n return cached;\n }\n }\n }\n\n // CASE: We don't have a relationship at all\n // we should only hit this in prod\n assert(`Expected to find a relationship definition for ${type}.${propertyName} but none was found.`, meta);\n cache[type][propertyName] = null;\n return null;\n }\n const definition = upgradeMeta(meta);\n let inverseDefinition;\n let inverseKey;\n const inverseType = definition.type;\n\n // CASE: Inverse is explicitly null\n if (definition.inverseKey === null) {\n assert(`Expected the inverse model to exist`, storeWrapper._store.modelFor(inverseType));\n inverseDefinition = null;\n } else {\n inverseKey = storeWrapper.inverseForRelationship(type, propertyName);\n\n // CASE: Inverse resolves to null\n if (!inverseKey) {\n inverseDefinition = null;\n } else {\n // CASE: We have an explicit inverse or were able to resolve one\n let inverseDefinitions = storeWrapper.relationshipsDefinitionFor(inverseType);\n assert(`Expected to have a relationship definition for ${inverseType} but none was found.`, inverseDefinitions);\n let meta = inverseDefinitions[inverseKey];\n assert(`Expected to find a relationship definition for ${inverseType}.${inverseKey} but none was found.`, meta);\n inverseDefinition = upgradeMeta(meta);\n }\n }\n\n // CASE: We have no inverse\n if (!inverseDefinition) {\n // polish off meta\n inverseKey = implicitKeyFor(type, propertyName);\n inverseDefinition = {\n kind: 'implicit',\n key: inverseKey,\n type: type,\n isAsync: false,\n isImplicit: true,\n isCollection: true,\n // with implicits any number of records could point at us\n isPolymorphic: false\n };\n syncMeta(definition, inverseDefinition);\n syncMeta(inverseDefinition, definition);\n const info = {\n lhs_key: `${type}:${propertyName}`,\n lhs_modelNames: [type],\n lhs_baseModelName: type,\n lhs_relationshipName: propertyName,\n lhs_definition: definition,\n lhs_isPolymorphic: definition.isPolymorphic,\n rhs_key: '',\n rhs_modelNames: [],\n rhs_baseModelName: inverseType,\n rhs_relationshipName: '',\n rhs_definition: inverseDefinition,\n rhs_isPolymorphic: false,\n hasInverse: false,\n isSelfReferential: type === inverseType,\n // this could be wrong if we are self-referential but also polymorphic\n isReflexive: false // we can't be reflexive if we don't define an inverse\n };\n expandingSet(cache, inverseType, inverseKey, info);\n expandingSet(cache, type, propertyName, info);\n return info;\n }\n\n // CASE: We do have an inverse\n const baseType = inverseDefinition.type;\n\n // TODO we want to assert this but this breaks all of our shoddily written tests\n /*\n if (DEBUG) {\n let inverseDoubleCheck = inverseMeta.type.inverseFor(inverseRelationshipName, store);\n assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck);\n }\n */\n // CASE: We may have already discovered the inverse for the baseModelName\n // CASE: We have already discovered the inverse\n cached = expandingGet(cache, baseType, propertyName) || expandingGet(cache, inverseType, inverseKey);\n if (cached) {\n // TODO this assert can be removed if the above assert is enabled\n assert(`The ${inverseType}:${inverseKey} relationship declares 'inverse: null', but it was resolved as the inverse for ${type}:${propertyName}.`, cached.hasInverse !== false);\n let isLHS = cached.lhs_baseModelName === baseType;\n let modelNames = isLHS ? cached.lhs_modelNames : cached.rhs_modelNames;\n // make this lookup easier in the future by caching the key\n modelNames.push(type);\n expandingSet(cache, type, propertyName, cached);\n return cached;\n }\n\n // this is our first time so polish off the metas\n syncMeta(definition, inverseDefinition);\n syncMeta(inverseDefinition, definition);\n const lhs_modelNames = [type];\n if (type !== baseType) {\n lhs_modelNames.push(baseType);\n }\n const isSelfReferential = type === inverseType;\n const info = {\n lhs_key: `${baseType}:${propertyName}`,\n lhs_modelNames,\n lhs_baseModelName: baseType,\n lhs_relationshipName: propertyName,\n lhs_definition: definition,\n lhs_isPolymorphic: definition.isPolymorphic,\n rhs_key: `${inverseType}:${inverseKey}`,\n rhs_modelNames: [inverseType],\n rhs_baseModelName: inverseType,\n rhs_relationshipName: inverseKey,\n rhs_definition: inverseDefinition,\n rhs_isPolymorphic: inverseDefinition.isPolymorphic,\n hasInverse: true,\n isSelfReferential,\n isReflexive: isSelfReferential && propertyName === inverseKey\n };\n\n // Create entries for the baseModelName as well as modelName to speed up\n // inverse lookups\n expandingSet(cache, baseType, propertyName, info);\n expandingSet(cache, type, propertyName, info);\n\n // Greedily populate the inverse\n expandingSet(cache, inverseType, inverseKey, info);\n return info;\n}","import { assert } from '@ember/debug';\nimport { isBelongsTo, isHasMany, isNew } from '../-utils';\n/*\n case many:1\n ========\n In a bi-directional graph with Many:1 edges, adding a value\n results in up-to 3 discrete value transitions, while removing\n a value is only 2 transitions.\n\n For adding C to A\n If: A <<-> B, C <->> D is the initial state,\n and: B <->> A <<-> C, D is the final state\n\n then we would undergo the following transitions.\n\n add C to A\n remove C from D\n add A to C\n\n For removing B from A\n If: A <<-> B, C <->> D is the initial state,\n and: A, B, C <->> D is the final state\n\n then we would undergo the following transitions.\n\n remove B from A\n remove A from B\n\n case many:many\n ===========\n In a bi-directional graph with Many:Many edges, adding or\n removing a value requires only 2 value transitions.\n\n For Adding\n If: A<<->>B, C<<->>D is the initial state (double arrows representing the many side)\n And: D<<->>C<<->>A<<->>B is the final state\n\n Then we would undergo two transitions.\n\n add C to A.\n add A to C\n\n For Removing\n If: A<<->>B, C<<->>D is the initial state (double arrows representing the many side)\n And: A, B, C<<->>D is the final state\n\n Then we would undergo two transitions.\n\n remove B from A\n remove A from B\n\n case many:?\n ========\n In a uni-directional graph with Many:? edges (modeled in EmberData with `inverse:null`) with\n artificial (implicit) inverses, replacing a value results in 2 discrete value transitions.\n This is because a Many:? relationship is effectively Many:Many.\n */\nexport default function replaceRelatedRecords(graph, op, isRemote) {\n if (isRemote) {\n replaceRelatedRecordsRemote(graph, op, isRemote);\n } else {\n replaceRelatedRecordsLocal(graph, op, isRemote);\n }\n}\nfunction replaceRelatedRecordsLocal(graph, op, isRemote) {\n const identifiers = op.value;\n const relationship = graph.get(op.record, op.field);\n assert(`expected hasMany relationship`, isHasMany(relationship));\n relationship.state.hasReceivedData = true;\n\n // cache existing state\n const {\n currentState,\n members,\n definition\n } = relationship;\n const newValues = new Set(identifiers);\n const identifiersLength = identifiers.length;\n const newState = new Array(newValues.size);\n const newMembership = new Set();\n\n // wipe existing state\n relationship.members = newMembership;\n relationship.currentState = newState;\n const {\n type\n } = relationship.definition;\n let changed = false;\n const currentLength = currentState.length;\n const iterationLength = currentLength > identifiersLength ? currentLength : identifiersLength;\n const equalLength = currentLength === identifiersLength;\n for (let i = 0, j = 0; i < iterationLength; i++) {\n let adv = false;\n if (i < identifiersLength) {\n const identifier = identifiers[i];\n // skip processing if we encounter a duplicate identifier in the array\n if (!newMembership.has(identifier)) {\n if (type !== identifier.type) {\n graph.registerPolymorphicType(type, identifier.type);\n }\n newState[j] = identifier;\n adv = true;\n newMembership.add(identifier);\n if (!members.has(identifier)) {\n changed = true;\n addToInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n }\n }\n }\n if (i < currentLength) {\n const identifier = currentState[i];\n\n // detect reordering\n if (!newMembership.has(identifier)) {\n if (equalLength && newState[i] !== identifier) {\n changed = true;\n }\n if (!newValues.has(identifier)) {\n changed = true;\n removeFromInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n }\n }\n }\n if (adv) {\n j++;\n }\n }\n if (changed) {\n relationship.notifyHasManyChange();\n }\n}\nfunction replaceRelatedRecordsRemote(graph, op, isRemote) {\n const identifiers = op.value;\n const relationship = graph.get(op.record, op.field);\n assert(`You can only '${op.op}' on a hasMany relationship. ${op.record.type}.${op.field} is a ${relationship.definition.kind}`, isHasMany(relationship));\n if (isRemote) {\n graph._addToTransaction(relationship);\n }\n relationship.state.hasReceivedData = true;\n\n // cache existing state\n const {\n canonicalState,\n canonicalMembers,\n definition\n } = relationship;\n const newValues = new Set(identifiers);\n const identifiersLength = identifiers.length;\n const newState = new Array(newValues.size);\n const newMembership = new Set();\n\n // wipe existing state\n relationship.canonicalMembers = newMembership;\n relationship.canonicalState = newState;\n const {\n type\n } = relationship.definition;\n let changed = false;\n const canonicalLength = canonicalState.length;\n const iterationLength = canonicalLength > identifiersLength ? canonicalLength : identifiersLength;\n const equalLength = canonicalLength === identifiersLength;\n for (let i = 0, j = 0; i < iterationLength; i++) {\n let adv = false;\n if (i < identifiersLength) {\n const identifier = identifiers[i];\n if (!newMembership.has(identifier)) {\n if (type !== identifier.type) {\n graph.registerPolymorphicType(type, identifier.type);\n }\n newState[j] = identifier;\n newMembership.add(identifier);\n adv = true;\n if (!canonicalMembers.has(identifier)) {\n changed = true;\n addToInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n }\n }\n }\n if (i < canonicalLength) {\n const identifier = canonicalState[i];\n if (!newMembership.has(identifier)) {\n // detect reordering\n if (equalLength && newState[j] !== identifier) {\n changed = true;\n }\n if (!newValues.has(identifier)) {\n changed = true;\n removeFromInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n }\n }\n }\n if (adv) {\n j++;\n }\n }\n if (changed) {\n flushCanonical(graph, relationship);\n /*\n replaceRelatedRecordsLocal(\n graph,\n {\n op: op.op,\n record: op.record,\n field: op.field,\n value: canonicalState,\n },\n false\n );*/\n } else {\n // preserve legacy behavior we want to change but requires some sort\n // of deprecation.\n flushCanonical(graph, relationship);\n }\n}\nexport function addToInverse(graph, identifier, key, value, isRemote) {\n const relationship = graph.get(identifier, key);\n const {\n type\n } = relationship.definition;\n if (type !== value.type) {\n graph.registerPolymorphicType(type, value.type);\n }\n if (isBelongsTo(relationship)) {\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = false;\n if (isRemote) {\n graph._addToTransaction(relationship);\n if (relationship.remoteState !== null) {\n removeFromInverse(graph, relationship.remoteState, relationship.definition.inverseKey, identifier, isRemote);\n }\n relationship.remoteState = value;\n }\n if (relationship.localState !== value) {\n if (!isRemote && relationship.localState) {\n removeFromInverse(graph, relationship.localState, relationship.definition.inverseKey, identifier, isRemote);\n }\n relationship.localState = value;\n relationship.notifyBelongsToChange();\n }\n } else if (isHasMany(relationship)) {\n if (isRemote) {\n if (!relationship.canonicalMembers.has(value)) {\n graph._addToTransaction(relationship);\n relationship.canonicalState.push(value);\n relationship.canonicalMembers.add(value);\n relationship.state.hasReceivedData = true;\n flushCanonical(graph, relationship);\n }\n } else {\n if (!relationship.members.has(value)) {\n relationship.currentState.push(value);\n relationship.members.add(value);\n relationship.state.hasReceivedData = true;\n relationship.notifyHasManyChange();\n }\n }\n } else {\n if (isRemote) {\n relationship.addCanonicalRecordData(value);\n } else {\n relationship.addRecordData(value);\n }\n }\n}\nexport function notifyInverseOfPotentialMaterialization(graph, identifier, key, value, isRemote) {\n const relationship = graph.get(identifier, key);\n if (isHasMany(relationship) && isRemote && relationship.canonicalMembers.has(value)) {\n relationship.notifyHasManyChange();\n }\n}\nexport function removeFromInverse(graph, identifier, key, value, isRemote) {\n const relationship = graph.get(identifier, key);\n if (isBelongsTo(relationship)) {\n relationship.state.isEmpty = true;\n if (isRemote) {\n graph._addToTransaction(relationship);\n relationship.remoteState = null;\n }\n if (relationship.localState === value) {\n relationship.localState = null;\n relationship.notifyBelongsToChange();\n }\n } else if (isHasMany(relationship)) {\n if (isRemote) {\n graph._addToTransaction(relationship);\n let index = relationship.canonicalState.indexOf(value);\n if (index !== -1) {\n relationship.canonicalMembers.delete(value);\n relationship.canonicalState.splice(index, 1);\n }\n }\n let index = relationship.currentState.indexOf(value);\n if (index !== -1) {\n relationship.members.delete(value);\n relationship.currentState.splice(index, 1);\n }\n relationship.notifyHasManyChange();\n } else {\n if (isRemote) {\n relationship.removeCompletelyFromOwn(value);\n } else {\n relationship.removeRecordData(value);\n }\n }\n}\nexport function syncRemoteToLocal(rel) {\n let toSet = rel.canonicalState;\n let newRecordDatas = rel.currentState.filter(recordData => isNew(recordData) && toSet.indexOf(recordData) === -1);\n let existingState = rel.currentState;\n rel.currentState = toSet.concat(newRecordDatas);\n let members = rel.members = new Set();\n rel.canonicalMembers.forEach(v => members.add(v));\n for (let i = 0; i < newRecordDatas.length; i++) {\n members.add(newRecordDatas[i]);\n }\n\n // TODO always notifying fails only one test and we should probably do away with it\n if (existingState.length !== rel.currentState.length) {\n rel.notifyHasManyChange();\n } else {\n for (let i = 0; i < existingState.length; i++) {\n if (existingState[i] !== rel.currentState[i]) {\n rel.notifyHasManyChange();\n break;\n }\n }\n }\n}\nfunction flushCanonical(graph, rel) {\n graph._scheduleLocalSync(rel);\n}","import { assert } from '@ember/debug';\nimport { isHasMany } from '../-utils';\nimport { addToInverse } from './replace-related-records';\nexport default function addToRelatedRecords(graph, op, isRemote) {\n const {\n record,\n value,\n index\n } = op;\n const relationship = graph.get(record, op.field);\n assert(`You can only '${op.op}' on a hasMany relationship. ${record.type}.${op.field} is a ${relationship.definition.kind}`, isHasMany(relationship));\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n addRelatedRecord(graph, relationship, record, value[i], index !== undefined ? index + i : index, isRemote);\n }\n } else {\n addRelatedRecord(graph, relationship, record, value, index, isRemote);\n }\n relationship.notifyHasManyChange();\n}\nfunction addRelatedRecord(graph, relationship, record, value, index, isRemote) {\n assert(`expected an identifier to add to the relationship`, value);\n const {\n members,\n currentState\n } = relationship;\n if (members.has(value)) {\n return;\n }\n const {\n type\n } = relationship.definition;\n if (type !== value.type) {\n graph.registerPolymorphicType(value.type, type);\n }\n relationship.state.hasReceivedData = true;\n members.add(value);\n if (index === undefined) {\n currentState.push(value);\n } else {\n currentState.splice(index, 0, value);\n }\n addToInverse(graph, value, relationship.definition.inverseKey, record, isRemote);\n}","import { assert } from '@ember/debug';\nimport { isHasMany } from '../-utils';\nimport { removeFromInverse } from './replace-related-records';\nexport default function removeFromRelatedRecords(graph, op, isRemote) {\n const {\n record,\n value\n } = op;\n const relationship = graph.get(record, op.field);\n assert(`You can only '${op.op}' on a hasMany relationship. ${record.type}.${op.field} is a ${relationship.definition.kind}`, isHasMany(relationship));\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n removeRelatedRecord(graph, relationship, record, value[i], isRemote);\n }\n } else {\n removeRelatedRecord(graph, relationship, record, value, isRemote);\n }\n relationship.notifyHasManyChange();\n}\nfunction removeRelatedRecord(graph, relationship, record, value, isRemote) {\n assert(`expected an identifier to add to the relationship`, value);\n const {\n members,\n currentState\n } = relationship;\n if (!members.has(value)) {\n return;\n }\n members.delete(value);\n let index = currentState.indexOf(value);\n assert(`expected members and currentState to be in sync`, index !== -1);\n currentState.splice(index, 1);\n removeFromInverse(graph, value, relationship.definition.inverseKey, record, isRemote);\n}","/*\n This method normalizes a link to an \"links object\". If the passed link is\n already an object it's returned without any modifications.\n\n See http://jsonapi.org/format/#document-links for more information.\n*/\nexport default function _normalizeLink(link) {\n switch (typeof link) {\n case 'object':\n return link;\n case 'string':\n return {\n href: link\n };\n }\n}","import { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { WeakCache } from '@ember-data/store/-private';\nimport BelongsToRelationship from '../relationships/state/belongs-to';\nimport ManyRelationship from '../relationships/state/has-many';\nimport ImplicitRelationship from '../relationships/state/implicit';\nimport { isLHS, upgradeDefinition } from './-edge-definition';\nimport { assertValidRelationshipPayload, isBelongsTo, isHasMany, isImplicit } from './-utils';\nimport addToRelatedRecords from './operations/add-to-related-records';\nimport removeFromRelatedRecords from './operations/remove-from-related-records';\nimport replaceRelatedRecord from './operations/replace-related-record';\nimport replaceRelatedRecords, { syncRemoteToLocal } from './operations/replace-related-records';\nimport updateRelationshipOperation from './operations/update-relationship';\nconst Graphs = new WeakCache(DEBUG ? 'graph' : '');\nGraphs._generator = wrapper => {\n const graph = new Graph(wrapper);\n\n // in DEBUG we attach the graph to the main store for improved debuggability\n if (DEBUG) {\n Graphs.set(wrapper._store, graph);\n }\n return graph;\n};\nfunction isStore(maybeStore) {\n return maybeStore._instanceCache !== undefined;\n}\nfunction getWrapper(store) {\n return isStore(store) ? store._instanceCache._storeWrapper : store;\n}\nexport function peekGraph(store) {\n return Graphs.get(getWrapper(store));\n}\nexport function graphFor(store) {\n return Graphs.lookup(getWrapper(store));\n}\n\n/*\n * Graph acts as the cache for relationship data. It allows for\n * us to ask about and update relationships for a given Identifier\n * without requiring other objects for that Identifier to be\n * instantiated (such as `InternalModel`, `RecordData` or a `Record`)\n *\n * This also allows for us to make more substantive changes to relationships\n * with increasingly minor alterations to other portions of the internals\n * over time.\n *\n * The graph is made up of nodes and edges. Each unique identifier gets\n * its own node, which is a dictionary with a list of that node's edges\n * (or connections) to other nodes. In `Model` terms, a node represents a\n * record instance, with each key (an edge) in the dictionary correlating\n * to either a `hasMany` or `belongsTo` field on that record instance.\n *\n * The value for each key, or `edge` is the identifier(s) the node relates\n * to in the graph from that key.\n */\nexport class Graph {\n constructor(store) {\n this._definitionCache = Object.create(null);\n this._potentialPolymorphicTypes = Object.create(null);\n this.identifiers = new Map();\n this.store = store;\n this._willSyncRemote = false;\n this._willSyncLocal = false;\n this._pushedUpdates = {\n belongsTo: [],\n hasMany: [],\n deletions: []\n };\n this._updatedRelationships = new Set();\n this._transaction = null;\n }\n has(identifier, propertyName) {\n let relationships = this.identifiers.get(identifier);\n if (!relationships) {\n return false;\n }\n return relationships[propertyName] !== undefined;\n }\n get(identifier, propertyName) {\n assert(`expected propertyName`, propertyName);\n let relationships = this.identifiers.get(identifier);\n if (!relationships) {\n relationships = Object.create(null);\n this.identifiers.set(identifier, relationships);\n }\n let relationship = relationships[propertyName];\n if (!relationship) {\n const info = upgradeDefinition(this, identifier, propertyName);\n assert(`Could not determine relationship information for ${identifier.type}.${propertyName}`, info !== null);\n const meta = isLHS(info, identifier.type, propertyName) ? info.lhs_definition : info.rhs_definition;\n const Klass = meta.kind === 'hasMany' ? ManyRelationship : meta.kind === 'belongsTo' ? BelongsToRelationship : ImplicitRelationship;\n relationship = relationships[propertyName] = new Klass(this, meta, identifier);\n }\n return relationship;\n }\n\n /*\n * Allows for the graph to dynamically discover polymorphic connections\n * without needing to walk prototype chains.\n *\n * Used by edges when an added `type` does not match the expected `type`\n * for that edge.\n *\n * Currently we assert before calling this. For a public API we will want\n * to call out to the schema manager to ask if we should consider these\n * types as equivalent for a given relationship.\n */\n registerPolymorphicType(type1, type2) {\n const typeCache = this._potentialPolymorphicTypes;\n let t1 = typeCache[type1];\n if (!t1) {\n t1 = typeCache[type1] = Object.create(null);\n }\n t1[type2] = true;\n let t2 = typeCache[type2];\n if (!t2) {\n t2 = typeCache[type2] = Object.create(null);\n }\n t2[type1] = true;\n }\n\n /*\n TODO move this comment somewhere else\n implicit relationships are relationships which have not been declared but the inverse side exists on\n another record somewhere\n For example if there was:\n ```app/models/comment.js\n import Model, { attr } from '@ember-data/model';\n export default class Comment extends Model {\n @attr text;\n }\n ```\n and there is also:\n ```app/models/post.js\n import Model, { attr, hasMany } from '@ember-data/model';\n export default class Post extends Model {\n @attr title;\n @hasMany('comment') comments;\n }\n ```\n Then we would have a implicit 'post' relationship for the comment record in order\n to be do things like remove the comment from the post if the comment were to be deleted.\n */\n\n isReleasable(identifier) {\n const relationships = this.identifiers.get(identifier);\n if (!relationships) {\n return true;\n }\n const keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n const relationship = relationships[keys[i]];\n assert(`Expected a relationship`, relationship);\n if (relationship.definition.inverseIsAsync) {\n return false;\n }\n }\n return true;\n }\n unload(identifier) {\n const relationships = this.identifiers.get(identifier);\n if (relationships) {\n // cleans up the graph but retains some nodes\n // to allow for rematerialization\n Object.keys(relationships).forEach(key => {\n let rel = relationships[key];\n destroyRelationship(rel);\n if (isImplicit(rel)) {\n delete relationships[key];\n }\n });\n }\n }\n remove(identifier) {\n this.unload(identifier);\n this.identifiers.delete(identifier);\n }\n\n /*\n * Remote state changes\n */\n push(op) {\n if (op.op === 'deleteRecord') {\n this._pushedUpdates.deletions.push(op);\n } else if (op.op === 'replaceRelatedRecord') {\n this._pushedUpdates.belongsTo.push(op);\n } else {\n const relationship = this.get(op.record, op.field);\n assert(`Cannot push a remote update for an implicit relationship`, !relationship.definition.isImplicit);\n this._pushedUpdates[relationship.definition.kind].push(op);\n }\n if (!this._willSyncRemote) {\n this._willSyncRemote = true;\n const backburner = this.store._store._backburner;\n backburner.schedule('coalesce', this, this._flushRemoteQueue);\n }\n }\n\n /*\n * Local state changes\n */\n\n update(op, isRemote = false) {\n assert(`Cannot update an implicit relationship`, op.op === 'deleteRecord' || !isImplicit(this.get(op.record, op.field)));\n switch (op.op) {\n case 'updateRelationship':\n assert(`Can only perform the operation updateRelationship on remote state`, isRemote);\n if (DEBUG) {\n // in debug, assert payload validity eagerly\n // TODO add deprecations/assertion here for duplicates\n assertValidRelationshipPayload(this, op);\n }\n updateRelationshipOperation(this, op);\n break;\n case 'deleteRecord':\n {\n assert(`Can only perform the operation deleteRelationship on remote state`, isRemote);\n const identifier = op.record;\n const relationships = this.identifiers.get(identifier);\n if (relationships) {\n Object.keys(relationships).forEach(key => {\n const rel = relationships[key];\n // works together with the has check\n delete relationships[key];\n removeCompletelyFromInverse(rel);\n });\n this.identifiers.delete(identifier);\n }\n break;\n }\n case 'replaceRelatedRecord':\n replaceRelatedRecord(this, op, isRemote);\n break;\n case 'addToRelatedRecords':\n addToRelatedRecords(this, op, isRemote);\n break;\n case 'removeFromRelatedRecords':\n removeFromRelatedRecords(this, op, isRemote);\n break;\n case 'replaceRelatedRecords':\n replaceRelatedRecords(this, op, isRemote);\n break;\n default:\n assert(`No local relationship update operation exists for '${op.op}'`);\n }\n }\n _scheduleLocalSync(relationship) {\n this._updatedRelationships.add(relationship);\n if (!this._willSyncLocal) {\n this._willSyncLocal = true;\n const backburner = this.store._store._backburner;\n backburner.schedule('sync', this, this._flushLocalQueue);\n }\n }\n _flushRemoteQueue() {\n if (!this._willSyncRemote) {\n return;\n }\n this._transaction = new Set();\n this._willSyncRemote = false;\n const {\n deletions,\n hasMany,\n belongsTo\n } = this._pushedUpdates;\n this._pushedUpdates.deletions = [];\n this._pushedUpdates.hasMany = [];\n this._pushedUpdates.belongsTo = [];\n for (let i = 0; i < deletions.length; i++) {\n this.update(deletions[i], true);\n }\n for (let i = 0; i < hasMany.length; i++) {\n this.update(hasMany[i], true);\n }\n for (let i = 0; i < belongsTo.length; i++) {\n this.update(belongsTo[i], true);\n }\n this._finalize();\n }\n _addToTransaction(relationship) {\n assert(`expected a transaction`, this._transaction !== null);\n relationship.transactionRef++;\n this._transaction.add(relationship);\n }\n _finalize() {\n if (this._transaction) {\n this._transaction.forEach(v => v.transactionRef = 0);\n this._transaction = null;\n }\n }\n _flushLocalQueue() {\n if (!this._willSyncLocal) {\n return;\n }\n this._willSyncLocal = false;\n let updated = this._updatedRelationships;\n this._updatedRelationships = new Set();\n updated.forEach(syncRemoteToLocal);\n }\n willDestroy() {\n this.identifiers.clear();\n this.store = null;\n }\n destroy() {\n Graphs.delete(this.store);\n if (DEBUG) {\n Graphs.delete(this.store._store);\n }\n }\n}\n\n// Handle dematerialization for relationship `rel`. In all cases, notify the\n// relationship of the dematerialization: this is done so the relationship can\n// notify its inverse which needs to update state\n//\n// If the inverse is sync, unloading this record is treated as a client-side\n// delete, so we remove the inverse records from this relationship to\n// disconnect the graph. Because it's not async, we don't need to keep around\n// the internalModel as an id-wrapper for references and because the graph is\n// disconnected we can actually destroy the internalModel when checking for\n// orphaned models.\nfunction destroyRelationship(rel) {\n if (isImplicit(rel)) {\n if (rel.graph.isReleasable(rel.identifier)) {\n removeCompletelyFromInverse(rel);\n }\n return;\n }\n rel.recordDataDidDematerialize();\n if (!rel.definition.inverseIsImplicit && !rel.definition.inverseIsAsync) {\n rel.state.isStale = true;\n rel.clear();\n\n // necessary to clear relationships in the ui from dematerialized records\n // hasMany is managed by InternalModel which calls `retreiveLatest` after\n // dematerializing the recordData instance.\n // but sync belongsTo require this since they don't have a proxy to update.\n // so we have to notify so it will \"update\" to null.\n // we should discuss whether we still care about this, probably fine to just\n // leave the ui relationship populated since the record is destroyed and\n // internally we've fully cleaned up.\n if (!rel.definition.isAsync) {\n if (isBelongsTo(rel)) {\n rel.notifyBelongsToChange();\n } else {\n rel.notifyHasManyChange();\n }\n }\n }\n}\nfunction removeCompletelyFromInverse(relationship) {\n // we actually want a union of members and canonicalMembers\n // they should be disjoint but currently are not due to a bug\n const seen = Object.create(null);\n const {\n identifier\n } = relationship;\n const {\n inverseKey\n } = relationship.definition;\n const unload = inverseIdentifier => {\n const id = inverseIdentifier.lid;\n if (seen[id] === undefined) {\n if (relationship.graph.has(inverseIdentifier, inverseKey)) {\n relationship.graph.get(inverseIdentifier, inverseKey).removeCompletelyFromOwn(identifier);\n }\n seen[id] = true;\n }\n };\n if (isBelongsTo(relationship)) {\n if (relationship.localState) {\n unload(relationship.localState);\n }\n if (relationship.remoteState) {\n unload(relationship.remoteState);\n }\n if (!relationship.definition.isAsync) {\n relationship.clear();\n }\n relationship.localState = null;\n } else if (isHasMany(relationship)) {\n relationship.members.forEach(unload);\n relationship.canonicalMembers.forEach(unload);\n if (!relationship.definition.isAsync) {\n relationship.clear();\n relationship.notifyHasManyChange();\n }\n } else {\n relationship.members.forEach(unload);\n relationship.canonicalMembers.forEach(unload);\n relationship.clear();\n }\n}","import { assert, warn } from '@ember/debug';\nimport _normalizeLink from '../../normalize-link';\nimport { isBelongsTo, isHasMany } from '../-utils';\n/*\n Updates the \"canonical\" or \"remote\" state of a relationship, replacing any existing\n state and blowing away any local changes (excepting new records).\n*/\nexport default function updateRelationshipOperation(graph, op) {\n const relationship = graph.get(op.record, op.field);\n assert(`Cannot update an implicit relationship`, isHasMany(relationship) || isBelongsTo(relationship));\n const {\n definition,\n state,\n identifier\n } = relationship;\n const {\n isCollection\n } = definition;\n const payload = op.value;\n let hasRelationshipDataProperty = false;\n let hasUpdatedLink = false;\n if (payload.meta) {\n relationship.meta = payload.meta;\n }\n if (payload.data !== undefined) {\n hasRelationshipDataProperty = true;\n if (isCollection) {\n // TODO deprecate this case. We\n // have tests saying we support it.\n if (payload.data === null) {\n payload.data = [];\n }\n assert(`Expected an array`, Array.isArray(payload.data));\n graph.update({\n op: 'replaceRelatedRecords',\n record: identifier,\n field: op.field,\n value: payload.data.map(i => graph.store.identifierCache.getOrCreateRecordIdentifier(i))\n }, true);\n } else {\n graph.update({\n op: 'replaceRelatedRecord',\n record: identifier,\n field: op.field,\n value: payload.data ? graph.store.identifierCache.getOrCreateRecordIdentifier(payload.data) : null\n }, true);\n }\n } else if (definition.isAsync === false && !state.hasReceivedData) {\n hasRelationshipDataProperty = true;\n if (isCollection) {\n graph.update({\n op: 'replaceRelatedRecords',\n record: identifier,\n field: op.field,\n value: []\n }, true);\n } else {\n graph.update({\n op: 'replaceRelatedRecord',\n record: identifier,\n field: op.field,\n value: null\n }, true);\n }\n }\n if (payload.links) {\n let originalLinks = relationship.links;\n relationship.links = payload.links;\n if (payload.links.related) {\n let relatedLink = _normalizeLink(payload.links.related);\n let currentLink = originalLinks && originalLinks.related ? _normalizeLink(originalLinks.related) : null;\n let currentLinkHref = currentLink ? currentLink.href : null;\n if (relatedLink && relatedLink.href && relatedLink.href !== currentLinkHref) {\n warn(`You pushed a record of type '${identifier.type}' with a relationship '${definition.key}' configured as 'async: false'. You've included a link but no primary data, this may be an error in your payload. EmberData will treat this relationship as known-to-be-empty.`, definition.isAsync || state.hasReceivedData, {\n id: 'ds.store.push-link-for-sync-relationship'\n });\n assert(`You have pushed a record of type '${identifier.type}' with '${definition.key}' as a link, but the value of that link is not a string.`, typeof relatedLink.href === 'string' || relatedLink.href === null);\n hasUpdatedLink = true;\n }\n }\n }\n\n /*\n Data being pushed into the relationship might contain only data or links,\n or a combination of both.\n IF contains only data\n IF contains both links and data\n state.isEmpty -> true if is empty array (has-many) or is null (belongs-to)\n state.hasReceivedData -> true\n hasDematerializedInverse -> false\n state.isStale -> false\n allInverseRecordsAreLoaded -> run-check-to-determine\n IF contains only links\n state.isStale -> true\n */\n relationship.state.hasFailedLoadAttempt = false;\n if (hasRelationshipDataProperty) {\n let relationshipIsEmpty = payload.data === null || Array.isArray(payload.data) && payload.data.length === 0;\n\n // we don't need to notify here as the update op we pushed in above will notify once\n // membership is in the correct state.\n relationship.state.hasReceivedData = true;\n relationship.state.isStale = false;\n relationship.state.hasDematerializedInverse = false;\n relationship.state.isEmpty = relationshipIsEmpty;\n } else if (hasUpdatedLink) {\n // only notify stale if we have not previously received membership data.\n // within this same transaction\n // this prevents refetching when only one side of the relationship in the\n // payload contains the info while the other side contains just a link\n // this only works when the side with just a link is a belongsTo, as we\n // don't know if a hasMany has full information or not.\n // see #7049 for context.\n if (isCollection || !relationship.state.hasReceivedData || relationship.transactionRef === 0) {\n relationship.state.isStale = true;\n if (isHasMany(relationship)) {\n relationship.notifyHasManyChange();\n } else {\n relationship.notifyBelongsToChange();\n }\n } else {\n relationship.state.isStale = false;\n }\n }\n}","import { assert } from '@ember/debug';\nimport { isBelongsTo, isNew } from '../-utils';\nimport { addToInverse, notifyInverseOfPotentialMaterialization, removeFromInverse } from './replace-related-records';\nexport default function replaceRelatedRecord(graph, op, isRemote = false) {\n const relationship = graph.get(op.record, op.field);\n assert(`You can only '${op.op}' on a belongsTo relationship. ${op.record.type}.${op.field} is a ${relationship.definition.kind}`, isBelongsTo(relationship));\n if (isRemote) {\n graph._addToTransaction(relationship);\n }\n const {\n definition,\n state\n } = relationship;\n const prop = isRemote ? 'remoteState' : 'localState';\n const existingState = relationship[prop];\n\n /*\n case 1:1\n ========\n In a bi-directional graph with 1:1 edges, replacing a value\n results in up-to 4 discrete value transitions.\n If: A <-> B, C <-> D is the initial state,\n and: A <-> C, B, D is the final state\n then we would undergo the following 4 transitions.\n remove A from B\n add C to A\n remove C from D\n add A to C\n case 1:many\n ===========\n In a bi-directional graph with 1:Many edges, replacing a value\n results in up-to 3 discrete value transitions.\n If: A<->>B<<->D, C<<->D is the initial state (double arrows representing the many side)\n And: A<->>C<<->D, B<<->D is the final state\n Then we would undergo three transitions.\n remove A from B\n add C to A.\n add A to C\n case 1:?\n ========\n In a uni-directional graph with 1:? edges (modeled in EmberData with `inverse:null`) with\n artificial (implicit) inverses, replacing a value results in up-to 3 discrete value transitions.\n This is because a 1:? relationship is effectively 1:many.\n If: A->B, C->B is the initial state\n And: A->C, C->B is the final state\n Then we would undergo three transitions.\n Remove A from B\n Add C to A\n Add A to C\n */\n\n // nothing for us to do\n if (op.value === existingState) {\n // if we were empty before but now know we are empty this needs to be true\n state.hasReceivedData = true;\n // if this is a remote update we still sync\n if (isRemote) {\n const {\n localState\n } = relationship;\n // don't sync if localState is a new record and our canonicalState is null\n if (localState && isNew(localState) && !existingState) {\n return;\n }\n if (existingState && localState === existingState) {\n notifyInverseOfPotentialMaterialization(graph, existingState, definition.inverseKey, op.record, isRemote);\n } else {\n relationship.localState = existingState;\n relationship.notifyBelongsToChange();\n }\n }\n return;\n }\n\n // remove this value from the inverse if required\n if (existingState) {\n removeFromInverse(graph, existingState, definition.inverseKey, op.record, isRemote);\n }\n\n // update value to the new value\n relationship[prop] = op.value;\n state.hasReceivedData = true;\n state.isEmpty = op.value === null;\n state.isStale = false;\n state.hasFailedLoadAttempt = false;\n if (op.value) {\n if (definition.type !== op.value.type) {\n graph.registerPolymorphicType(definition.type, op.value.type);\n }\n addToInverse(graph, op.value, definition.inverseKey, op.record, isRemote);\n }\n if (isRemote) {\n const {\n localState,\n remoteState\n } = relationship;\n if (localState && isNew(localState) && !remoteState) {\n return;\n }\n if (localState !== remoteState) {\n relationship.localState = remoteState;\n relationship.notifyBelongsToChange();\n }\n } else {\n relationship.notifyBelongsToChange();\n }\n}","/**\n * @module @ember-data/record-data\n */\nimport { assert } from '@ember/debug';\nimport { _backburner as emberBackburner } from '@ember/runloop';\nimport { isEqual } from '@ember/utils';\nimport { recordDataFor, recordIdentifierFor, removeRecordDataFor } from '@ember-data/store/-private';\nimport coerceId from './coerce-id';\nimport { isImplicit } from './graph/-utils';\nimport { graphFor } from './graph/index';\nlet nextBfsId = 1;\nconst EMPTY_ITERATOR = {\n iterator() {\n return {\n next() {\n return {\n done: true,\n value: undefined\n };\n }\n };\n }\n};\n\n/**\n The default cache implementation used by ember-data. The cache\n is configurable and using a different implementation can be\n achieved by implementing the store's createRecordDataFor hook.\n\n @class RecordDataDefault\n @public\n */\nexport default class RecordDataDefault {\n constructor(identifier, storeWrapper) {\n /*\n Iterates over the set of internal models reachable from `this` across exactly one\n relationship.\n */\n this._directlyRelatedRecordDatasIterable = () => {\n const graph = graphFor(this.storeWrapper);\n const initializedRelationships = graph.identifiers.get(this.identifier);\n if (!initializedRelationships) {\n return EMPTY_ITERATOR;\n }\n const initializedRelationshipsArr = Object.keys(initializedRelationships).map(key => initializedRelationships[key]).filter(rel => {\n return !isImplicit(rel);\n });\n let i = 0;\n let j = 0;\n let k = 0;\n const findNext = () => {\n while (i < initializedRelationshipsArr.length) {\n while (j < 2) {\n let members = j === 0 ? getLocalState(initializedRelationshipsArr[i]) : getRemoteState(initializedRelationshipsArr[i]);\n while (k < members.length) {\n let member = members[k++];\n if (member !== null) {\n return recordDataFor(member);\n }\n }\n k = 0;\n j++;\n }\n j = 0;\n i++;\n }\n return undefined;\n };\n return {\n iterator() {\n return {\n next: () => {\n const value = findNext();\n return {\n value,\n done: value === undefined\n };\n }\n };\n }\n };\n };\n this.modelName = identifier.type;\n this.clientId = identifier.lid;\n this.id = identifier.id;\n this.identifier = identifier;\n this.storeWrapper = storeWrapper;\n this.isDestroyed = false;\n this._isNew = false;\n this._isDeleted = false;\n // Used during the mark phase of unloading to avoid checking the same internal\n // model twice in the same scan\n this._bfsId = 0;\n this.reset();\n }\n\n // PUBLIC API\n getResourceIdentifier() {\n return this.identifier;\n }\n pushData(data, calculateChange) {\n let changedKeys;\n if (this._isNew) {\n this._isNew = false;\n this.notifyStateChange();\n }\n if (calculateChange) {\n changedKeys = this._changedKeys(data.attributes);\n }\n Object.assign(this._data, data.attributes);\n if (this.__attributes) {\n // only do if we have attribute changes\n this._updateChangedAttributes();\n }\n if (data.relationships) {\n this._setupRelationships(data);\n }\n if (data.id) {\n if (!this.id) {\n this.id = coerceId(data.id);\n }\n }\n if (changedKeys && changedKeys.length) {\n this._notifyAttributes(changedKeys);\n }\n return changedKeys;\n }\n willCommit() {\n this._inFlightAttributes = this._attributes;\n this._attributes = null;\n }\n hasChangedAttributes() {\n return this.__attributes !== null && Object.keys(this.__attributes).length > 0;\n }\n _clearErrors() {\n if (this._errors) {\n this._errors = undefined;\n this.storeWrapper.notifyErrorsChange(this.modelName, this.id, this.clientId);\n }\n }\n getErrors() {\n let errors = this._errors || [];\n return errors;\n }\n\n // this is a hack bc we don't have access to the state machine\n // and relationships need this info and @runspired didn't see\n // how to get it just yet from storeWrapper.\n isEmpty() {\n return this.__attributes === null && this.__inFlightAttributes === null && this.__data === null;\n }\n isDeleted() {\n return this._isDeleted;\n }\n setIsDeleted(isDeleted) {\n this._isDeleted = isDeleted;\n if (this._isNew) {\n this._deletionConfirmed();\n }\n this.notifyStateChange();\n }\n isDeletionCommitted() {\n return this._isDeletionCommited;\n }\n reset() {\n this.__attributes = null;\n this.__inFlightAttributes = null;\n this.__data = null;\n this._errors = undefined;\n }\n _setupRelationships(data) {\n // TODO @runspired iterating by definitions instead of by payload keys\n // allows relationship payloads to be ignored silently if no relationship\n // definition exists. Ensure there's a test for this and then consider\n // moving this to an assertion. This check should possibly live in the graph.\n let relationships = this.storeWrapper.relationshipsDefinitionFor(this.modelName);\n let keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n let relationshipName = keys[i];\n if (!data.relationships[relationshipName]) {\n continue;\n }\n let relationshipData = data.relationships[relationshipName];\n graphFor(this.storeWrapper).push({\n op: 'updateRelationship',\n record: this.identifier,\n field: relationshipName,\n value: relationshipData\n });\n }\n }\n\n /**\n Checks if the attributes which are considered as changed are still\n different to the state which is acknowledged by the server.\n This method is needed when data for the internal model is pushed and the\n pushed data might acknowledge dirty attributes as confirmed.\n @method updateChangedAttributes\n @private\n */\n _updateChangedAttributes() {\n let changedAttributes = this.changedAttributes();\n let changedAttributeNames = Object.keys(changedAttributes);\n let attrs = this._attributes;\n for (let i = 0, length = changedAttributeNames.length; i < length; i++) {\n let attribute = changedAttributeNames[i];\n let data = changedAttributes[attribute];\n let oldData = data[0];\n let newData = data[1];\n if (oldData === newData) {\n delete attrs[attribute];\n }\n }\n this._notifyAttributes(changedAttributeNames);\n }\n _notifyAttributes(keys) {\n const {\n type,\n id,\n lid\n } = this.identifier;\n const manager = this.storeWrapper;\n if (!keys) {\n manager.notifyPropertyChange(type, id, lid);\n return;\n }\n for (let i = 0; i < keys.length; i++) {\n manager.notifyPropertyChange(type, id, lid, keys[i]);\n }\n }\n\n /**\n Returns an object, whose keys are changed properties, and value is an\n [oldProp, newProp] array.\n @method changedAttributes\n @private\n */\n changedAttributes() {\n let oldData = this._data;\n let currentData = this._attributes;\n let inFlightData = this._inFlightAttributes;\n let newData = {\n ...inFlightData,\n ...currentData\n };\n let diffData = Object.create(null);\n let newDataKeys = Object.keys(newData);\n for (let i = 0, length = newDataKeys.length; i < length; i++) {\n let key = newDataKeys[i];\n diffData[key] = [oldData[key], newData[key]];\n }\n return diffData;\n }\n isNew() {\n return this._isNew;\n }\n rollbackAttributes() {\n let dirtyKeys;\n this._isDeleted = false;\n if (this.hasChangedAttributes()) {\n dirtyKeys = Object.keys(this._attributes);\n this._attributes = null;\n }\n if (this.isNew()) {\n this.removeFromInverseRelationships();\n this._isDeleted = true;\n this._isNew = false;\n }\n this._inFlightAttributes = null;\n this._clearErrors();\n this.notifyStateChange();\n return dirtyKeys;\n }\n _deletionConfirmed() {\n this.removeFromInverseRelationships();\n }\n didCommit(data) {\n if (this._isDeleted) {\n this._deletionConfirmed();\n this._isDeletionCommited = true;\n }\n this._isNew = false;\n let newCanonicalAttributes;\n if (data) {\n if (data.id) {\n // didCommit provided an ID, notify the store of it\n this.storeWrapper.setRecordId(this.modelName, data.id, this.clientId);\n this.id = coerceId(data.id);\n }\n if (data.relationships) {\n this._setupRelationships(data);\n }\n newCanonicalAttributes = data.attributes;\n }\n let changedKeys = this._changedKeys(newCanonicalAttributes);\n Object.assign(this._data, this.__inFlightAttributes, newCanonicalAttributes);\n this._inFlightAttributes = null;\n this._updateChangedAttributes();\n this._notifyAttributes(changedKeys);\n this._clearErrors();\n this.notifyStateChange();\n return changedKeys;\n }\n notifyStateChange() {\n this.storeWrapper.notifyStateChange(this.modelName, this.id, this.clientId);\n }\n\n // get ResourceIdentifiers for \"current state\"\n getHasMany(key) {\n return graphFor(this.storeWrapper).get(this.identifier, key).getData();\n }\n\n // set a new \"current state\" via ResourceIdentifiers\n setDirtyHasMany(key, recordDatas) {\n graphFor(this.storeWrapper).update({\n op: 'replaceRelatedRecords',\n record: this.identifier,\n field: key,\n value: recordDatas.map(recordIdentifierFor)\n });\n }\n\n // append to \"current state\" via RecordDatas\n addToHasMany(key, recordDatas, idx) {\n graphFor(this.storeWrapper).update({\n op: 'addToRelatedRecords',\n record: this.identifier,\n field: key,\n value: recordDatas.map(recordIdentifierFor),\n index: idx\n });\n }\n\n // remove from \"current state\" via RecordDatas\n removeFromHasMany(key, recordDatas) {\n graphFor(this.storeWrapper).update({\n op: 'removeFromRelatedRecords',\n record: this.identifier,\n field: key,\n value: recordDatas.map(recordIdentifierFor)\n });\n }\n commitWasRejected(identifier, errors) {\n let keys = Object.keys(this._inFlightAttributes);\n if (keys.length > 0) {\n let attrs = this._attributes;\n for (let i = 0; i < keys.length; i++) {\n if (attrs[keys[i]] === undefined) {\n attrs[keys[i]] = this._inFlightAttributes[keys[i]];\n }\n }\n }\n this._inFlightAttributes = null;\n if (errors) {\n this._errors = errors;\n }\n this.storeWrapper.notifyErrorsChange(this.modelName, this.id, this.clientId);\n }\n getBelongsTo(key) {\n return graphFor(this.storeWrapper).get(this.identifier, key).getData();\n }\n setDirtyBelongsTo(key, recordData) {\n graphFor(this.storeWrapper).update({\n op: 'replaceRelatedRecord',\n record: this.identifier,\n field: key,\n value: recordData ? recordIdentifierFor(recordData) : null\n });\n }\n setDirtyAttribute(key, value) {\n const {\n type,\n id,\n lid\n } = this.identifier;\n this.storeWrapper.notifyPropertyChange(type, id, lid, key);\n let originalValue;\n // Add the new value to the changed attributes hash\n this._attributes[key] = value;\n if (key in this._inFlightAttributes) {\n originalValue = this._inFlightAttributes[key];\n } else {\n originalValue = this._data[key];\n }\n // If we went back to our original value, we shouldn't keep the attribute around anymore\n if (value === originalValue) {\n delete this._attributes[key];\n }\n }\n\n // internal set coming from the model\n __setId(id) {\n if (this.id !== id) {\n this.id = id;\n }\n }\n getAttr(key) {\n if (key in this._attributes) {\n return this._attributes[key];\n } else if (key in this._inFlightAttributes) {\n return this._inFlightAttributes[key];\n } else {\n return this._data[key];\n }\n }\n hasAttr(key) {\n return key in this._attributes || key in this._inFlightAttributes || key in this._data;\n }\n unloadRecord() {\n if (this.isDestroyed) {\n return;\n }\n graphFor(this.storeWrapper).unload(this.identifier);\n this.reset();\n if (!this._scheduledDestroy) {\n this._scheduledDestroy = emberBackburner.schedule('destroy', this, '_cleanupOrphanedRecordDatas');\n }\n }\n _cleanupOrphanedRecordDatas() {\n let relatedRecordDatas = this._allRelatedRecordDatas();\n if (areAllModelsUnloaded(relatedRecordDatas)) {\n // we don't have a backburner queue yet since\n // we scheduled this into ember's destroy\n // disconnectRecord called from destroy will teardown\n // relationships. We do this to queue that.\n this.storeWrapper._store._backburner.join(() => {\n for (let i = 0; i < relatedRecordDatas.length; ++i) {\n let recordData = relatedRecordDatas[i];\n if (!recordData.isDestroyed) {\n // TODO @runspired we do not currently destroy RecordData instances *except* via this relationship\n // traversal. This seems like an oversight since the store should be able to notify destroy.\n removeRecordDataFor(recordData.identifier);\n recordData.destroy();\n }\n }\n });\n }\n this._scheduledDestroy = null;\n }\n destroy() {\n this.isDestroyed = true;\n this.storeWrapper.disconnectRecord(this.modelName, this.id, this.clientId);\n }\n isRecordInUse() {\n return this.storeWrapper.isRecordInUse(this.modelName, this.id, this.clientId);\n }\n /*\n Computes the set of internal models reachable from this internal model.\n Reachability is determined over the relationship graph (ie a graph where\n nodes are internal models and edges are belongs to or has many\n relationships).\n Returns an array including `this` and all internal models reachable\n from `this`.\n */\n _allRelatedRecordDatas() {\n let array = [];\n let queue = [];\n let bfsId = nextBfsId++;\n queue.push(this);\n this._bfsId = bfsId;\n while (queue.length > 0) {\n let node = queue.shift();\n array.push(node);\n const iterator = this._directlyRelatedRecordDatasIterable().iterator();\n for (let obj = iterator.next(); !obj.done; obj = iterator.next()) {\n const recordData = obj.value;\n if (recordData && recordData instanceof RecordDataDefault) {\n assert('Internal Error: seen a future bfs iteration', recordData._bfsId <= bfsId);\n if (recordData._bfsId < bfsId) {\n queue.push(recordData);\n recordData._bfsId = bfsId;\n }\n }\n }\n }\n return array;\n }\n isAttrDirty(key) {\n if (this._attributes[key] === undefined) {\n return false;\n }\n let originalValue;\n if (this._inFlightAttributes[key] !== undefined) {\n originalValue = this._inFlightAttributes[key];\n } else {\n originalValue = this._data[key];\n }\n return originalValue !== this._attributes[key];\n }\n get _attributes() {\n if (this.__attributes === null) {\n this.__attributes = Object.create(null);\n }\n return this.__attributes;\n }\n set _attributes(v) {\n this.__attributes = v;\n }\n get _data() {\n if (this.__data === null) {\n this.__data = Object.create(null);\n }\n return this.__data;\n }\n set _data(v) {\n this.__data = v;\n }\n get _inFlightAttributes() {\n if (this.__inFlightAttributes === null) {\n this.__inFlightAttributes = Object.create(null);\n }\n return this.__inFlightAttributes;\n }\n set _inFlightAttributes(v) {\n this.__inFlightAttributes = v;\n }\n\n /**\n * Receives options passed to `store.createRecord` and is given the opportunity\n * to handle them.\n *\n * The return value is an object of options to pass to `Record.create()`\n *\n * @name _initRecordCreateOptions\n * @param options\n * @private\n */\n _initRecordCreateOptions(options) {\n let createOptions = {};\n if (options !== undefined) {\n const {\n storeWrapper,\n identifier\n } = this;\n let attributeDefs = storeWrapper.attributesDefinitionFor(identifier.type);\n let relationshipDefs = storeWrapper.relationshipsDefinitionFor(identifier.type);\n const graph = graphFor(storeWrapper);\n let propertyNames = Object.keys(options);\n for (let i = 0; i < propertyNames.length; i++) {\n let name = propertyNames[i];\n let propertyValue = options[name];\n if (name === 'id') {\n this.id = propertyValue;\n continue;\n }\n let fieldType = relationshipDefs[name] || attributeDefs[name];\n let kind = fieldType !== undefined ? fieldType.kind : null;\n let relationship;\n switch (kind) {\n case 'attribute':\n this.setDirtyAttribute(name, propertyValue);\n break;\n case 'belongsTo':\n this.setDirtyBelongsTo(name, propertyValue);\n relationship = graph.get(identifier, name);\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = false;\n break;\n case 'hasMany':\n this.setDirtyHasMany(name, propertyValue);\n relationship = graph.get(identifier, name);\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = false;\n break;\n default:\n // reflect back (pass-thru) unknown properties\n createOptions[name] = propertyValue;\n }\n }\n }\n return createOptions;\n }\n\n /*\n TODO IGOR AND DAVID this shouldn't be public\n This method should only be called by records in the `isNew()` state OR once the record\n has been deleted and that deletion has been persisted.\n It will remove this record from any associated relationships.\n If `isNew` is true (default false), it will also completely reset all\n relationships to an empty state as well.\n @method removeFromInverseRelationships\n @param {Boolean} isNew whether to unload from the `isNew` perspective\n @private\n */\n removeFromInverseRelationships() {\n graphFor(this.storeWrapper).push({\n op: 'deleteRecord',\n record: this.identifier,\n isNew: this.isNew()\n });\n }\n clientDidCreate() {\n this._isNew = true;\n }\n\n /*\n Ember Data has 3 buckets for storing the value of an attribute on an internalModel.\n `_data` holds all of the attributes that have been acknowledged by\n a backend via the adapter. When rollbackAttributes is called on a model all\n attributes will revert to the record's state in `_data`.\n `_attributes` holds any change the user has made to an attribute\n that has not been acknowledged by the adapter. Any values in\n `_attributes` are have priority over values in `_data`.\n `_inFlightAttributes`. When a record is being synced with the\n backend the values in `_attributes` are copied to\n `_inFlightAttributes`. This way if the backend acknowledges the\n save but does not return the new state Ember Data can copy the\n values from `_inFlightAttributes` to `_data`. Without having to\n worry about changes made to `_attributes` while the save was\n happenign.\n Changed keys builds a list of all of the values that may have been\n changed by the backend after a successful save.\n It does this by iterating over each key, value pair in the payload\n returned from the server after a save. If the `key` is found in\n `_attributes` then the user has a local changed to the attribute\n that has not been synced with the server and the key is not\n included in the list of changed keys.\n \n If the value, for a key differs from the value in what Ember Data\n believes to be the truth about the backend state (A merger of the\n `_data` and `_inFlightAttributes` objects where\n `_inFlightAttributes` has priority) then that means the backend\n has updated the value and the key is added to the list of changed\n keys.\n @method _changedKeys\n @private\n */\n /*\n TODO IGOR DAVID\n There seems to be a potential bug here, where we will return keys that are not\n in the schema\n */\n _changedKeys(updates) {\n let changedKeys = [];\n if (updates) {\n let original, i, value, key;\n let keys = Object.keys(updates);\n let length = keys.length;\n let hasAttrs = this.hasChangedAttributes();\n let attrs;\n if (hasAttrs) {\n attrs = this._attributes;\n }\n original = Object.assign(Object.create(null), this._data, this.__inFlightAttributes);\n for (i = 0; i < length; i++) {\n key = keys[i];\n value = updates[key];\n\n // A value in _attributes means the user has a local change to\n // this attributes. We never override this value when merging\n // updates from the backend so we should not sent a change\n // notification if the server value differs from the original.\n if (hasAttrs === true && attrs[key] !== undefined) {\n continue;\n }\n if (!isEqual(original[key], value)) {\n changedKeys.push(key);\n }\n }\n }\n return changedKeys;\n }\n toString() {\n return `<${this.modelName}:${this.id}>`;\n }\n}\nfunction areAllModelsUnloaded(recordDatas) {\n for (let i = 0; i < recordDatas.length; ++i) {\n if (recordDatas[i].isRecordInUse()) {\n return false;\n }\n }\n return true;\n}\nfunction getLocalState(rel) {\n if (rel.definition.kind === 'belongsTo') {\n return rel.localState ? [rel.localState] : [];\n }\n return rel.currentState;\n}\nfunction getRemoteState(rel) {\n if (rel.definition.kind === 'belongsTo') {\n return rel.remoteState ? [rel.remoteState] : [];\n }\n return rel.canonicalState;\n}","import { A } from '@ember/array';\nimport { warn } from '@ember/debug';\nimport { get, set } from '@ember/object';\nimport Mixin from '@ember/object/mixin';\nimport { camelize } from '@ember/string';\nimport { typeOf } from '@ember/utils';\n\n/**\n @module @ember-data/serializer/rest\n*/\n\n/**\n ## Using Embedded Records\n\n `EmbeddedRecordsMixin` supports serializing embedded records.\n\n To set up embedded records, include the mixin when extending a serializer,\n then define and configure embedded (model) relationships.\n\n Note that embedded records will serialize with the serializer for their model instead of the serializer in which they are defined.\n\n Note also that this mixin does not work with JSONAPISerializer because the JSON:API specification does not describe how to format embedded resources.\n\n Below is an example of a per-type serializer (`post` type).\n\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n author: { embedded: 'always' },\n comments: { serialize: 'ids' }\n }\n }\n ```\n Note that this use of `{ embedded: 'always' }` is unrelated to\n the `{ embedded: 'always' }` that is defined as an option on `attr` as part of\n defining a model while working with the `ActiveModelSerializer`. Nevertheless,\n using `{ embedded: 'always' }` as an option to `attr` is not a valid way to set up\n embedded records.\n\n The `attrs` option for a resource `{ embedded: 'always' }` is shorthand for:\n\n ```js\n {\n serialize: 'records',\n deserialize: 'records'\n }\n ```\n\n ### Configuring Attrs\n\n A resource's `attrs` option may be set to use `ids`, `records` or false for the\n `serialize` and `deserialize` settings.\n\n The `attrs` property can be set on the `ApplicationSerializer` or a per-type\n serializer.\n\n In the case where embedded JSON is expected while extracting a payload (reading)\n the setting is `deserialize: 'records'`, there is no need to use `ids` when\n extracting as that is the default behaviour without this mixin if you are using\n the vanilla `EmbeddedRecordsMixin`. Likewise, to embed JSON in the payload while\n serializing `serialize: 'records'` is the setting to use. There is an option of\n not embedding JSON in the serialized payload by using `serialize: 'ids'`. If you\n do not want the relationship sent at all, you can use `serialize: false`.\n\n\n ### EmbeddedRecordsMixin defaults\n If you do not overwrite `attrs` for a specific relationship, the `EmbeddedRecordsMixin`\n will behave in the following way:\n\n BelongsTo: `{ serialize: 'id', deserialize: 'id' }`\n HasMany: `{ serialize: false, deserialize: 'ids' }`\n\n ### Model Relationships\n\n Embedded records must have a model defined to be extracted and serialized. Note that\n when defining any relationships on your model such as `belongsTo` and `hasMany`, you\n should not both specify `async: true` and also indicate through the serializer's\n `attrs` attribute that the related model should be embedded for deserialization.\n If a model is declared embedded for deserialization (`embedded: 'always'` or `deserialize: 'records'`),\n then do not use `async: true`.\n\n To successfully extract and serialize embedded records the model relationships\n must be set up correctly. See the\n [defining relationships](https://guides.emberjs.com/current/models/relationships)\n section of the **Defining Models** guide page.\n\n Records without an `id` property are not considered embedded records, model\n instances must have an `id` property to be used with Ember Data.\n\n ### Example JSON payloads, Models and Serializers\n\n **When customizing a serializer it is important to grok what the customizations\n are. Please read the docs for the methods this mixin provides, in case you need\n to modify it to fit your specific needs.**\n\n For example, review the docs for each method of this mixin:\n * [normalize](/ember-data/release/classes/EmbeddedRecordsMixin/methods/normalize?anchor=normalize)\n * [serializeBelongsTo](/ember-data/release/classes/EmbeddedRecordsMixin/methods/serializeBelongsTo?anchor=serializeBelongsTo)\n * [serializeHasMany](/ember-data/release/classes/EmbeddedRecordsMixin/methods/serializeHasMany?anchor=serializeHasMany)\n\n @class EmbeddedRecordsMixin\n @public\n*/\nexport default Mixin.create({\n /**\n Normalize the record and recursively normalize/extract all the embedded records\n while pushing them into the store as they are encountered\n A payload with an attr configured for embedded records needs to be extracted:\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"comments\": [{\n \"id\": \"1\",\n \"body\": \"Rails is unagi\"\n }, {\n \"id\": \"2\",\n \"body\": \"Omakase O_o\"\n }]\n }\n }\n ```\n @method normalize\n @public\n @param {Model} typeClass\n @param {Object} hash to be normalized\n @param {String} prop the hash has been referenced by\n @return {Object} the normalized hash\n **/\n normalize(typeClass, hash, prop) {\n let normalizedHash = this._super(typeClass, hash, prop);\n return this._extractEmbeddedRecords(this, this.store, typeClass, normalizedHash);\n },\n keyForRelationship(key, typeClass, method) {\n if (method === 'serialize' && this.hasSerializeRecordsOption(key) || method === 'deserialize' && this.hasDeserializeRecordsOption(key)) {\n return this.keyForAttribute(key, method);\n } else {\n return this._super(key, typeClass, method) || key;\n }\n },\n /**\n Serialize `belongsTo` relationship when it is configured as an embedded object.\n This example of an author model belongs to a post model:\n ```js\n import Model, { attr, belongsTo } from '@ember-data/model';\n Post = Model.extend({\n title: attr('string'),\n body: attr('string'),\n author: belongsTo('author')\n });\n Author = Model.extend({\n name: attr('string'),\n post: belongsTo('post')\n });\n ```\n Use a custom (type) serializer for the post model to configure embedded author\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n author: { embedded: 'always' }\n }\n }\n ```\n A payload with an attribute configured for embedded records can serialize\n the records together under the root attribute's payload:\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"author\": {\n \"id\": \"2\"\n \"name\": \"dhh\"\n }\n }\n }\n ```\n @method serializeBelongsTo\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializeBelongsTo(snapshot, json, relationship) {\n let attr = relationship.key;\n if (this.noSerializeOptionSpecified(attr)) {\n this._super(snapshot, json, relationship);\n return;\n }\n let includeIds = this.hasSerializeIdsOption(attr);\n let includeRecords = this.hasSerializeRecordsOption(attr);\n let embeddedSnapshot = snapshot.belongsTo(attr);\n if (includeIds) {\n let schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.key, schema);\n if (serializedKey === relationship.key && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.key, relationship.kind, 'serialize');\n }\n if (!embeddedSnapshot) {\n json[serializedKey] = null;\n } else {\n json[serializedKey] = embeddedSnapshot.id;\n if (relationship.options.polymorphic) {\n this.serializePolymorphicType(snapshot, json, relationship);\n }\n }\n } else if (includeRecords) {\n this._serializeEmbeddedBelongsTo(snapshot, json, relationship);\n }\n },\n _serializeEmbeddedBelongsTo(snapshot, json, relationship) {\n let embeddedSnapshot = snapshot.belongsTo(relationship.key);\n let schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.key, schema);\n if (serializedKey === relationship.key && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.key, relationship.kind, 'serialize');\n }\n if (!embeddedSnapshot) {\n json[serializedKey] = null;\n } else {\n json[serializedKey] = embeddedSnapshot.serialize({\n includeId: true\n });\n this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json[serializedKey]);\n if (relationship.options.polymorphic) {\n this.serializePolymorphicType(snapshot, json, relationship);\n }\n }\n },\n /**\n Serializes `hasMany` relationships when it is configured as embedded objects.\n This example of a post model has many comments:\n ```js\n import Model, { attr, belongsTo, hasMany } from '@ember-data/model';\n Post = Model.extend({\n title: attr('string'),\n body: attr('string'),\n comments: hasMany('comment')\n });\n Comment = Model.extend({\n body: attr('string'),\n post: belongsTo('post')\n });\n ```\n Use a custom (type) serializer for the post model to configure embedded comments\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n comments: { embedded: 'always' }\n }\n }\n ```\n A payload with an attribute configured for embedded records can serialize\n the records together under the root attribute's payload:\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"body\": \"I want this for my ORM, I want that for my template language...\"\n \"comments\": [{\n \"id\": \"1\",\n \"body\": \"Rails is unagi\"\n }, {\n \"id\": \"2\",\n \"body\": \"Omakase O_o\"\n }]\n }\n }\n ```\n The attrs options object can use more specific instruction for extracting and\n serializing. When serializing, an option to embed `ids`, `ids-and-types` or `records` can be set.\n When extracting the only option is `records`.\n So `{ embedded: 'always' }` is shorthand for:\n `{ serialize: 'records', deserialize: 'records' }`\n To embed the `ids` for a related object (using a hasMany relationship):\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n comments: { serialize: 'ids', deserialize: 'records' }\n }\n }\n ```\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"body\": \"I want this for my ORM, I want that for my template language...\"\n \"comments\": [\"1\", \"2\"]\n }\n }\n ```\n To embed the relationship as a collection of objects with `id` and `type` keys, set\n `ids-and-types` for the related object.\n This is particularly useful for polymorphic relationships where records don't share\n the same table and the `id` is not enough information.\n For example having a user that has many pets:\n ```js\n User = Model.extend({\n name: attr('string'),\n pets: hasMany('pet', { polymorphic: true })\n });\n Pet = Model.extend({\n name: attr('string'),\n });\n Cat = Pet.extend({\n // ...\n });\n Parrot = Pet.extend({\n // ...\n });\n ```\n ```app/serializers/user.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class UserSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n pets: { serialize: 'ids-and-types', deserialize: 'records' }\n }\n }\n ```\n ```js\n {\n \"user\": {\n \"id\": \"1\"\n \"name\": \"Bertin Osborne\",\n \"pets\": [\n { \"id\": \"1\", \"type\": \"Cat\" },\n { \"id\": \"1\", \"type\": \"Parrot\"}\n ]\n }\n }\n ```\n @method serializeHasMany\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializeHasMany(snapshot, json, relationship) {\n let attr = relationship.key;\n if (this.noSerializeOptionSpecified(attr)) {\n this._super(snapshot, json, relationship);\n return;\n }\n if (this.hasSerializeIdsOption(attr)) {\n let schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.key, schema);\n if (serializedKey === relationship.key && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.key, relationship.kind, 'serialize');\n }\n json[serializedKey] = snapshot.hasMany(attr, {\n ids: true\n });\n } else if (this.hasSerializeRecordsOption(attr)) {\n this._serializeEmbeddedHasMany(snapshot, json, relationship);\n } else {\n if (this.hasSerializeIdsAndTypesOption(attr)) {\n this._serializeHasManyAsIdsAndTypes(snapshot, json, relationship);\n }\n }\n },\n /*\n Serializes a hasMany relationship as an array of objects containing only `id` and `type`\n keys.\n This has its use case on polymorphic hasMany relationships where the server is not storing\n all records in the same table using STI, and therefore the `id` is not enough information\n TODO: Make the default in Ember-data 3.0??\n */\n _serializeHasManyAsIdsAndTypes(snapshot, json, relationship) {\n let serializedKey = this.keyForAttribute(relationship.key, 'serialize');\n let hasMany = snapshot.hasMany(relationship.key);\n json[serializedKey] = A(hasMany).map(function (recordSnapshot) {\n //\n // I'm sure I'm being utterly naive here. Probably id is a configurable property and\n // type too, and the modelName has to be normalized somehow.\n //\n return {\n id: recordSnapshot.id,\n type: recordSnapshot.modelName\n };\n });\n },\n _serializeEmbeddedHasMany(snapshot, json, relationship) {\n let schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.key, schema);\n if (serializedKey === relationship.key && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.key, relationship.kind, 'serialize');\n }\n warn(`The embedded relationship '${serializedKey}' is undefined for '${snapshot.modelName}' with id '${snapshot.id}'. Please include it in your original payload.`, typeOf(snapshot.hasMany(relationship.key)) !== 'undefined', {\n id: 'ds.serializer.embedded-relationship-undefined'\n });\n json[serializedKey] = this._generateSerializedHasMany(snapshot, relationship);\n },\n /*\n Returns an array of embedded records serialized to JSON\n */\n _generateSerializedHasMany(snapshot, relationship) {\n let hasMany = snapshot.hasMany(relationship.key);\n let manyArray = A(hasMany);\n let ret = new Array(manyArray.length);\n for (let i = 0; i < manyArray.length; i++) {\n let embeddedSnapshot = manyArray[i];\n let embeddedJson = embeddedSnapshot.serialize({\n includeId: true\n });\n this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, embeddedJson);\n ret[i] = embeddedJson;\n }\n return ret;\n },\n /**\n When serializing an embedded record, modify the property (in the `JSON` payload)\n that refers to the parent record (foreign key for the relationship).\n Serializing a `belongsTo` relationship removes the property that refers to the\n parent record\n Serializing a `hasMany` relationship does not remove the property that refers to\n the parent record.\n @method removeEmbeddedForeignKey\n @public\n @param {Snapshot} snapshot\n @param {Snapshot} embeddedSnapshot\n @param {Object} relationship\n @param {Object} json\n */\n removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json) {\n if (relationship.kind === 'belongsTo') {\n let schema = this.store.modelFor(snapshot.modelName);\n let parentRecord = schema.inverseFor(relationship.key, this.store);\n if (parentRecord) {\n let name = parentRecord.name;\n let embeddedSerializer = this.store.serializerFor(embeddedSnapshot.modelName);\n let parentKey = embeddedSerializer.keyForRelationship(name, parentRecord.kind, 'deserialize');\n if (parentKey) {\n delete json[parentKey];\n }\n }\n } /*else if (relationship.kind === 'hasMany') {\n return;\n }*/\n },\n // checks config for attrs option to embedded (always) - serialize and deserialize\n hasEmbeddedAlwaysOption(attr) {\n let option = this.attrsOption(attr);\n return option && option.embedded === 'always';\n },\n // checks config for attrs option to serialize ids\n hasSerializeRecordsOption(attr) {\n let alwaysEmbed = this.hasEmbeddedAlwaysOption(attr);\n let option = this.attrsOption(attr);\n return alwaysEmbed || option && option.serialize === 'records';\n },\n // checks config for attrs option to serialize records\n hasSerializeIdsOption(attr) {\n let option = this.attrsOption(attr);\n return option && (option.serialize === 'ids' || option.serialize === 'id');\n },\n // checks config for attrs option to serialize records as objects containing id and types\n hasSerializeIdsAndTypesOption(attr) {\n let option = this.attrsOption(attr);\n return option && (option.serialize === 'ids-and-types' || option.serialize === 'id-and-type');\n },\n // checks config for attrs option to serialize records\n noSerializeOptionSpecified(attr) {\n let option = this.attrsOption(attr);\n return !(option && (option.serialize || option.embedded));\n },\n // checks config for attrs option to deserialize records\n // a defined option object for a resource is treated the same as\n // `deserialize: 'records'`\n hasDeserializeRecordsOption(attr) {\n let alwaysEmbed = this.hasEmbeddedAlwaysOption(attr);\n let option = this.attrsOption(attr);\n return alwaysEmbed || option && option.deserialize === 'records';\n },\n attrsOption(attr) {\n let attrs = this.get('attrs');\n return attrs && (attrs[camelize(attr)] || attrs[attr]);\n },\n /**\n @method _extractEmbeddedRecords\n @private\n */\n _extractEmbeddedRecords(serializer, store, typeClass, partial) {\n typeClass.eachRelationship((key, relationship) => {\n if (serializer.hasDeserializeRecordsOption(key)) {\n if (relationship.kind === 'hasMany') {\n this._extractEmbeddedHasMany(store, key, partial, relationship);\n }\n if (relationship.kind === 'belongsTo') {\n this._extractEmbeddedBelongsTo(store, key, partial, relationship);\n }\n }\n });\n return partial;\n },\n /**\n @method _extractEmbeddedHasMany\n @private\n */\n _extractEmbeddedHasMany(store, key, hash, relationshipMeta) {\n let relationshipHash = get(hash, `data.relationships.${key}.data`);\n if (!relationshipHash) {\n return;\n }\n let hasMany = new Array(relationshipHash.length);\n for (let i = 0; i < relationshipHash.length; i++) {\n let item = relationshipHash[i];\n let {\n data,\n included\n } = this._normalizeEmbeddedRelationship(store, relationshipMeta, item);\n hash.included = hash.included || [];\n hash.included.push(data);\n if (included) {\n hash.included = hash.included.concat(included);\n }\n hasMany[i] = {\n id: data.id,\n type: data.type\n };\n }\n let relationship = {\n data: hasMany\n };\n set(hash, `data.relationships.${key}`, relationship);\n },\n /**\n @method _extractEmbeddedBelongsTo\n @private\n */\n _extractEmbeddedBelongsTo(store, key, hash, relationshipMeta) {\n let relationshipHash = get(hash, `data.relationships.${key}.data`);\n if (!relationshipHash) {\n return;\n }\n let {\n data,\n included\n } = this._normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash);\n hash.included = hash.included || [];\n hash.included.push(data);\n if (included) {\n hash.included = hash.included.concat(included);\n }\n let belongsTo = {\n id: data.id,\n type: data.type\n };\n let relationship = {\n data: belongsTo\n };\n set(hash, `data.relationships.${key}`, relationship);\n },\n /**\n @method _normalizeEmbeddedRelationship\n @private\n */\n _normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash) {\n let modelName = relationshipMeta.type;\n if (relationshipMeta.options.polymorphic) {\n modelName = relationshipHash.type;\n }\n let modelClass = store.modelFor(modelName);\n let serializer = store.serializerFor(modelName);\n return serializer.normalize(modelClass, relationshipHash, null);\n },\n isEmbeddedRecordsMixin: true\n});","import { get } from '@ember/object';\n\n/*\n Check if the passed model has a `type` attribute or a relationship named `type`.\n */\nfunction modelHasAttributeOrRelationshipNamedType(modelClass) {\n return get(modelClass, 'attributes').has('type') || get(modelClass, 'relationshipsByName').has('type');\n}\nexport { modelHasAttributeOrRelationshipNamedType };","import EmberObject from '@ember/object';\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `Transform` class is used to serialize and deserialize model\n attributes when they are saved or loaded from an\n adapter. Subclassing `Transform` is useful for creating custom\n attributes. All subclasses of `Transform` must implement a\n `serialize` and a `deserialize` method.\n\n Example\n\n ```app/transforms/temperature.js\n import Transform from '@ember-data/serializer/transform';\n\n // Converts centigrade in the JSON to fahrenheit in the app\n export default class TemperatureTransform extends Transform {\n deserialize(serialized, options) {\n return (serialized * 1.8) + 32;\n }\n\n serialize(deserialized, options) {\n return (deserialized - 32) / 1.8;\n }\n }\n ```\n\n Usage\n\n ```app/models/requirement.js\n import Model, { attr } from '@ember-data/model';\n\n export default class RequirementModel extends Model {\n @attr('string') name;\n @attr('temperature') temperature;\n }\n ```\n\n The options passed into the `attr` function when the attribute is\n declared on the model is also available in the transform.\n\n ```app/models/post.js\n import Model, { attr } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @attr('string') title;\n @attr('markdown', {\n markdown: {\n gfm: false,\n sanitize: true\n }\n })\n markdown;\n }\n ```\n\n ```app/transforms/markdown.js\n import Transform from '@ember-data/serializer/transform';\n\n export default class MarkdownTransform extends Transform {\n serialize(deserialized, options) {\n return deserialized.raw;\n }\n\n deserialize(serialized, options) {\n let markdownOptions = options.markdown || {};\n\n return marked(serialized, markdownOptions);\n }\n }\n ```\n\n @class Transform\n @public\n */\nexport default class Transform extends EmberObject {\n /**\n When given a deserialized value from a record attribute this\n method must return the serialized value.\n Example\n ```javascript\n import { isEmpty } from '@ember/utils';\n serialize(deserialized, options) {\n return isEmpty(deserialized) ? null : Number(deserialized);\n }\n ```\n @method serialize\n @public\n @param deserialized The deserialized value\n @param options hash of options passed to `attr`\n @return The serialized value\n */\n /**\n When given a serialized value from a JSON object this method must\n return the deserialized value for the record attribute.\n Example\n ```javascript\n deserialize(serialized, options) {\n return empty(serialized) ? null : Number(serialized);\n }\n ```\n @method deserialize\n @public\n @param serialized The serialized value\n @param options hash of options passed to `attr`\n @return The deserialized value\n */\n}","import { isNone } from '@ember/utils';\nimport Transform from './transform';\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `BooleanTransform` class is used to serialize and deserialize\n boolean attributes on Ember Data record objects. This transform is\n used when `boolean` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.\n\n Usage\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('boolean') isAdmin;\n @attr('string') name;\n @attr('string') email;\n }\n ```\n\n By default, the boolean transform only allows for values of `true` or\n `false`. You can opt into allowing `null` values for\n boolean attributes via `attr('boolean', { allowNull: true })`\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') email;\n @attr('string') username;\n @attr('boolean', { allowNull: true }) wantsWeeklyEmail;\n }\n ```\n\n @class BooleanTransform\n @public\n @extends Transform\n */\nexport default class BooleanTransform extends Transform {\n deserialize(serialized, options) {\n if (isNone(serialized) && options.allowNull === true) {\n return null;\n }\n let type = typeof serialized;\n if (type === 'boolean') {\n return serialized;\n } else if (type === 'string') {\n return /^(true|t|1)$/i.test(serialized);\n } else if (type === 'number') {\n return serialized === 1;\n } else {\n return false;\n }\n }\n serialize(deserialized, options) {\n if (isNone(deserialized) && options.allowNull === true) {\n return null;\n }\n return Boolean(deserialized);\n }\n}","import Transform from './transform';\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `DateTransform` class is used to serialize and deserialize\n date attributes on Ember Data record objects. This transform is used\n when `date` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function. It uses the [`ISO 8601`](https://en.wikipedia.org/wiki/ISO_8601)\n standard.\n\n ```app/models/score.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class ScoreModel extends Model {\n @attr('number') value;\n @belongsTo('player') player;\n @attr('date') date;\n }\n ```\n\n @class DateTransform\n @public\n @extends Transform\n */\n\nexport default class DateTransform extends Transform {\n deserialize(serialized) {\n let type = typeof serialized;\n if (type === 'string') {\n let offset = serialized.indexOf('+');\n if (offset !== -1 && serialized.length - 5 === offset) {\n offset += 3;\n return new Date(serialized.slice(0, offset) + ':' + serialized.slice(offset));\n }\n return new Date(serialized);\n } else if (type === 'number') {\n return new Date(serialized);\n } else if (serialized === null || serialized === undefined) {\n // if the value is null return null\n // if the value is not present in the data return undefined\n return serialized;\n } else {\n return null;\n }\n }\n serialize(date) {\n if (date instanceof Date && !isNaN(date)) {\n return date.toISOString();\n } else {\n return null;\n }\n }\n}","import Transform from './transform';\n\n/**\n @module @ember-data/serializer\n*/\n\nfunction isNumber(value) {\n return value === value && value !== Infinity && value !== -Infinity;\n}\n\n/**\n The `NumberTransform` class is used to serialize and deserialize\n numeric attributes on Ember Data record objects. This transform is\n used when `number` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.\n\n Usage\n\n ```app/models/score.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class ScoreModel extends Model {\n @attr('number') value;\n @belongsTo('player') player;\n @attr('date') date;\n }\n ```\n\n @class NumberTransform\n @public\n @extends Transform\n */\nexport default class NumberTransform extends Transform {\n deserialize(serialized) {\n let transformed;\n if (serialized === '' || serialized === null || serialized === undefined) {\n return null;\n } else {\n transformed = Number(serialized);\n return isNumber(transformed) ? transformed : null;\n }\n }\n serialize(deserialized) {\n let transformed;\n if (deserialized === '' || deserialized === null || deserialized === undefined) {\n return null;\n } else {\n transformed = Number(deserialized);\n return isNumber(transformed) ? transformed : null;\n }\n }\n}","import { isNone as none } from '@ember/utils';\nimport Transform from './transform';\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `StringTransform` class is used to serialize and deserialize\n string attributes on Ember Data record objects. This transform is\n used when `string` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.\n\n Usage\n\n ```app/models/user.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('boolean') isAdmin;\n @attr('string') name;\n @attr('string') email;\n }\n ```\n\n @class StringTransform\n @public\n @extends Transform\n */\nexport default class StringTransform extends Transform {\n deserialize(serialized) {\n return none(serialized) ? null : String(serialized);\n }\n serialize(deserialized) {\n return none(deserialized) ? null : String(deserialized);\n }\n}","var _class2, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n/**\n ## Overview\n\n In order to properly manage and present your data, EmberData\n needs to understand the structure of data it receives.\n\n `Serializers` convert data between the server's API format and\n the format EmberData understands.\n\n Data received from an API response is **normalized** into\n [JSON:API](https://jsonapi.org/) (the format used internally\n by EmberData), while data sent to an API is **serialized**\n into the format the API expects.\n\n ### Implementing a Serializer\n\n There are only two required serializer methods, one for\n normalizing data from the server API format into JSON:API, and\n another for serializing records via `Snapshots` into the expected\n server API format.\n\n To implement a serializer, export a class that conforms to the structure\n described by the [MinimumSerializerInterface](/ember-data/release/classes/MinimumSerializerInterface)\n from the `app/serializers/` directory. An example is below.\n\n ```ts\n import EmberObject from '@ember/object';\n\n export default class ApplicationSerializer extends EmberObject {\n normalizeResponse(store, schema, rawPayload) {\n return rawPayload;\n }\n\n serialize(snapshot, options) {\n const serializedResource = {\n id: snapshot.id,\n type: snapshot.modelName,\n attributes: snapshot.attributes()\n };\n\n return serializedResource;\n }\n }\n ```\n\n\n ### Serializer Resolution\n\n `store.serializerFor(name)` will lookup serializers defined in\n `app/serializers/` and return an instance. If no serializer is found, an\n error will be thrown.\n\n `serializerFor` first attempts to find a serializer with an exact match on `name`,\n then falls back to checking for the presence of a serializer named `application`.\n\n ```ts\n store.serializerFor('author');\n\n // lookup paths (in order) =>\n // app/serializers/author.js\n // app/serializers/application.js\n ```\n\n Most requests in EmberData are made with respect to a particular `type` (or `modelName`)\n (e.g., \"get me the full collection of **books**\" or \"get me the **employee** whose id is 37\"). We\n refer to this as the **primary** resource `type`.\n\n Typically `serializerFor` will be used to find a serializer with a name matching that of the primary\n resource `type` for the request, falling back to the `application` serializer for those types that\n do not have a defined serializer. This is often described as a `per-model` or `per-type` strategy\n for defining serializers. However, because APIs rarely format payloads per-type but rather\n per-API-version, this may not be a desired strategy.\n\n It is recommended that applications define only a single `application` adapter and serializer\n where possible.\n\n If you have multiple API formats and the per-type strategy is not viable, one strategy is to\n write an `application` adapter and serializer that make use of `options` to specify the desired\n format when making a request.\n\n ### Using a Serializer\n\n Any serializer in `app/serializers/` can be looked up by `name` using `store.serializerFor(name)`.\n\n ### Default Serializers\n\n For applications whose APIs are *very close to* or *exactly* the **REST** format or **JSON:API**\n format the `@ember-data/serializer` package contains implementations these applications can\n extend. It also contains a simple `JSONSerializer` for serializing to/from very basic JSON objects.\n\n Many applications will find writing their own serializer to be more performant and less\n complex than extending these classes even when their API format is very close to that expected\n by these serializers.\n\n It is recommended that apps write their own serializer to best suit the needs of their API and\n application.\n\n @module @ember-data/serializer\n @main @ember-data/serializer\n*/\n\nimport EmberObject from '@ember/object';\nimport { inject as service } from '@ember/service';\n/**\n `Serializer` is an abstract base class that you should override in your\n application to customize it for your backend. The minimum set of methods\n that you should implement is:\n\n * `normalizeResponse()`\n * `serialize()`\n\n And you can optionally override the following methods:\n\n * `normalize()`\n\n For an example implementation, see\n [JSONSerializer](JSONSerializer), the included JSON serializer.\n\n @class Serializer\n @public\n @extends Ember.EmberObject\n*/\nlet _class = (_class2 = class _class2 extends EmberObject {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n }\n /**\n The `store` property is the application's `store` that contains\n all records. It can be used to look up serializers for other model\n types that may be nested inside the payload response.\n Example:\n ```js\n Serializer.extend({\n extractRelationship(relationshipModelName, relationshipHash) {\n let modelClass = this.store.modelFor(relationshipModelName);\n let relationshipSerializer = this.store.serializerFor(relationshipModelName);\n return relationshipSerializer.normalize(modelClass, relationshipHash);\n }\n });\n ```\n @property store\n @type {Store}\n @public\n */\n\n /**\n The `normalizeResponse` method is used to normalize a payload from the\n server to a JSON-API Document.\n http://jsonapi.org/format/#document-structure\n Example:\n ```js\n Serializer.extend({\n normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n if (requestType === 'findRecord') {\n return this.normalize(primaryModelClass, payload);\n } else {\n return payload.reduce(function(documentHash, item) {\n let { data, included } = this.normalize(primaryModelClass, item);\n documentHash.included.push(...included);\n documentHash.data.push(data);\n return documentHash;\n }, { data: [], included: [] })\n }\n }\n });\n ```\n @since 1.13.0\n @method normalizeResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n\n /**\n The `serialize` method is used when a record is saved in order to convert\n the record into the form that your external data source expects.\n `serialize` takes an optional `options` hash with a single option:\n - `includeId`: If this is `true`, `serialize` should include the ID\n in the serialized object it builds.\n Example:\n ```js\n Serializer.extend({\n serialize(snapshot, options) {\n let json = {\n id: snapshot.id\n };\n snapshot.eachAttribute((key, attribute) => {\n json[key] = snapshot.attr(key);\n });\n snapshot.eachRelationship((key, relationship) => {\n if (relationship.kind === 'belongsTo') {\n json[key] = snapshot.belongsTo(key, { id: true });\n } else if (relationship.kind === 'hasMany') {\n json[key] = snapshot.hasMany(key, { ids: true });\n }\n });\n return json;\n },\n });\n ```\n @method serialize\n @public\n @param {Snapshot} snapshot\n @param {Object} [options]\n @return {Object}\n */\n\n /**\n The `normalize` method is used to convert a payload received from your\n external data source into the normalized form `store.push()` expects. You\n should override this method, munge the hash and return the normalized\n payload.\n Example:\n ```js\n Serializer.extend({\n normalize(modelClass, resourceHash) {\n let data = {\n id: resourceHash.id,\n type: modelClass.modelName,\n attributes: resourceHash\n };\n return { data: data };\n }\n })\n ```\n @method normalize\n @public\n @param {Model} typeClass\n @param {Object} hash\n @return {Object}\n */\n normalize(typeClass, hash) {\n return hash;\n }\n}, _descriptor = _applyDecoratedDescriptor(_class2.prototype, \"store\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class2);\nexport { _class as default };","/**\n * @module @ember-data/serializer/json-api\n */\nimport { assert, warn } from '@ember/debug';\nimport { dasherize } from '@ember/string';\nimport { isNone, typeOf } from '@ember/utils';\nimport { DEBUG } from '@glimmer/env';\nimport { pluralize, singularize } from 'ember-inflector';\nimport JSONSerializer from '@ember-data/serializer/json';\nimport { normalizeModelName } from '@ember-data/store';\n\n/**\n Ember Data 2.0 Serializer:\n\n In Ember Data a Serializer is used to serialize and deserialize\n records when they are transferred in and out of an external source.\n This process involves normalizing property names, transforming\n attribute values and serializing relationships.\n\n `JSONAPISerializer` supports the http://jsonapi.org/ spec and is the\n serializer recommended by Ember Data.\n\n This serializer normalizes a JSON API payload that looks like:\n\n ```app/models/player.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class Player extends Model {\n @attr('string') name;\n @attr('string') skill;\n @attr('number') gamesPlayed;\n @belongsTo('club') club;\n }\n ```\n\n ```app/models/club.js\n import Model, { attr, hasMany } from '@ember-data/model';\n\n export default class Club extends Model {\n @attr('string') name;\n @attr('string') location;\n @hasMany('player') players;\n }\n ```\n\n ```js\n {\n \"data\": [\n {\n \"attributes\": {\n \"name\": \"Benfica\",\n \"location\": \"Portugal\"\n },\n \"id\": \"1\",\n \"relationships\": {\n \"players\": {\n \"data\": [\n {\n \"id\": \"3\",\n \"type\": \"players\"\n }\n ]\n }\n },\n \"type\": \"clubs\"\n }\n ],\n \"included\": [\n {\n \"attributes\": {\n \"name\": \"Eusebio Silva Ferreira\",\n \"skill\": \"Rocket shot\",\n \"games-played\": 431\n },\n \"id\": \"3\",\n \"relationships\": {\n \"club\": {\n \"data\": {\n \"id\": \"1\",\n \"type\": \"clubs\"\n }\n }\n },\n \"type\": \"players\"\n }\n ]\n }\n ```\n\n to the format that the Ember Data store expects.\n\n ### Customizing meta\n\n Since a JSON API Document can have meta defined in multiple locations you can\n use the specific serializer hooks if you need to customize the meta.\n\n One scenario would be to camelCase the meta keys of your payload. The example\n below shows how this could be done using `normalizeArrayResponse` and\n `extractRelationship`.\n\n ```app/serializers/application.js\n import JSONAPISerializer from '@ember-data/serializer/json-api';\n\n export default class ApplicationSerializer extends JSONAPISerializer {\n normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n let normalizedDocument = super.normalizeArrayResponse(...arguments);\n\n // Customize document meta\n normalizedDocument.meta = camelCaseKeys(normalizedDocument.meta);\n\n return normalizedDocument;\n }\n\n extractRelationship(relationshipHash) {\n let normalizedRelationship = super.extractRelationship(...arguments);\n\n // Customize relationship meta\n normalizedRelationship.meta = camelCaseKeys(normalizedRelationship.meta);\n\n return normalizedRelationship;\n }\n }\n ```\n\n @main @ember-data/serializer/json-api\n @since 1.13.0\n @class JSONAPISerializer\n @public\n @extends JSONSerializer\n*/\nconst JSONAPISerializer = JSONSerializer.extend({\n /**\n @method _normalizeDocumentHelper\n @param {Object} documentHash\n @return {Object}\n @private\n */\n _normalizeDocumentHelper(documentHash) {\n if (typeOf(documentHash.data) === 'object') {\n documentHash.data = this._normalizeResourceHelper(documentHash.data);\n } else if (Array.isArray(documentHash.data)) {\n let ret = new Array(documentHash.data.length);\n for (let i = 0; i < documentHash.data.length; i++) {\n let data = documentHash.data[i];\n ret[i] = this._normalizeResourceHelper(data);\n }\n documentHash.data = ret;\n }\n if (Array.isArray(documentHash.included)) {\n let ret = new Array();\n for (let i = 0; i < documentHash.included.length; i++) {\n let included = documentHash.included[i];\n let normalized = this._normalizeResourceHelper(included);\n if (normalized !== null) {\n // can be null when unknown type is encountered\n ret.push(normalized);\n }\n }\n documentHash.included = ret;\n }\n return documentHash;\n },\n /**\n @method _normalizeRelationshipDataHelper\n @param {Object} relationshipDataHash\n @return {Object}\n @private\n */\n _normalizeRelationshipDataHelper(relationshipDataHash) {\n relationshipDataHash.type = this.modelNameFromPayloadKey(relationshipDataHash.type);\n return relationshipDataHash;\n },\n /**\n @method _normalizeResourceHelper\n @param {Object} resourceHash\n @return {Object}\n @private\n */\n _normalizeResourceHelper(resourceHash) {\n assert(this.warnMessageForUndefinedType(), !isNone(resourceHash.type));\n let modelName, usedLookup;\n modelName = this.modelNameFromPayloadKey(resourceHash.type);\n usedLookup = 'modelNameFromPayloadKey';\n if (!this.store.getSchemaDefinitionService().doesTypeExist(modelName)) {\n warn(this.warnMessageNoModelForType(modelName, resourceHash.type, usedLookup), false, {\n id: 'ds.serializer.model-for-type-missing'\n });\n return null;\n }\n let modelClass = this.store.modelFor(modelName);\n let serializer = this.store.serializerFor(modelName);\n let {\n data\n } = serializer.normalize(modelClass, resourceHash);\n return data;\n },\n /**\n Normalize some data and push it into the store.\n @method pushPayload\n @public\n @param {Store} store\n @param {Object} payload\n */\n pushPayload(store, payload) {\n let normalizedPayload = this._normalizeDocumentHelper(payload);\n store.push(normalizedPayload);\n },\n /**\n @method _normalizeResponse\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @param {Boolean} isSingle\n @return {Object} JSON-API Document\n @private\n */\n _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {\n let normalizedPayload = this._normalizeDocumentHelper(payload);\n return normalizedPayload;\n },\n normalizeQueryRecordResponse() {\n let normalized = this._super(...arguments);\n assert('Expected the primary data returned by the serializer for a `queryRecord` response to be a single object but instead it was an array.', !Array.isArray(normalized.data));\n return normalized;\n },\n extractAttributes(modelClass, resourceHash) {\n let attributes = {};\n if (resourceHash.attributes) {\n modelClass.eachAttribute(key => {\n let attributeKey = this.keyForAttribute(key, 'deserialize');\n if (resourceHash.attributes[attributeKey] !== undefined) {\n attributes[key] = resourceHash.attributes[attributeKey];\n }\n if (DEBUG) {\n if (resourceHash.attributes[attributeKey] === undefined && resourceHash.attributes[key] !== undefined) {\n assert(`Your payload for '${modelClass.modelName}' contains '${key}', but your serializer is setup to look for '${attributeKey}'. This is most likely because Ember Data's JSON API serializer dasherizes attribute keys by default. You should subclass JSONAPISerializer and implement 'keyForAttribute(key) { return key; }' to prevent Ember Data from customizing your attribute keys.`, false);\n }\n }\n });\n }\n return attributes;\n },\n /**\n Returns a relationship formatted as a JSON-API \"relationship object\".\n http://jsonapi.org/format/#document-resource-object-relationships\n @method extractRelationship\n @public\n @param {Object} relationshipHash\n @return {Object}\n */\n extractRelationship(relationshipHash) {\n if (typeOf(relationshipHash.data) === 'object') {\n relationshipHash.data = this._normalizeRelationshipDataHelper(relationshipHash.data);\n }\n if (Array.isArray(relationshipHash.data)) {\n let ret = new Array(relationshipHash.data.length);\n for (let i = 0; i < relationshipHash.data.length; i++) {\n let data = relationshipHash.data[i];\n ret[i] = this._normalizeRelationshipDataHelper(data);\n }\n relationshipHash.data = ret;\n }\n return relationshipHash;\n },\n /**\n Returns the resource's relationships formatted as a JSON-API \"relationships object\".\n http://jsonapi.org/format/#document-resource-object-relationships\n @method extractRelationships\n @public\n @param {Object} modelClass\n @param {Object} resourceHash\n @return {Object}\n */\n extractRelationships(modelClass, resourceHash) {\n let relationships = {};\n if (resourceHash.relationships) {\n modelClass.eachRelationship((key, relationshipMeta) => {\n let relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize');\n if (resourceHash.relationships[relationshipKey] !== undefined) {\n let relationshipHash = resourceHash.relationships[relationshipKey];\n relationships[key] = this.extractRelationship(relationshipHash);\n }\n if (DEBUG) {\n if (resourceHash.relationships[relationshipKey] === undefined && resourceHash.relationships[key] !== undefined) {\n assert(`Your payload for '${modelClass.modelName}' contains '${key}', but your serializer is setup to look for '${relationshipKey}'. This is most likely because Ember Data's JSON API serializer dasherizes relationship keys by default. You should subclass JSONAPISerializer and implement 'keyForRelationship(key) { return key; }' to prevent Ember Data from customizing your relationship keys.`, false);\n }\n }\n });\n }\n return relationships;\n },\n /**\n @method _extractType\n @param {Model} modelClass\n @param {Object} resourceHash\n @return {String}\n @private\n */\n _extractType(modelClass, resourceHash) {\n return this.modelNameFromPayloadKey(resourceHash.type);\n },\n /**\n Dasherizes and singularizes the model name in the payload to match\n the format Ember Data uses internally for the model name.\n For example the key `posts` would be converted to `post` and the\n key `studentAssesments` would be converted to `student-assesment`.\n @method modelNameFromPayloadKey\n @public\n @param {String} key\n @return {String} the model's modelName\n */\n modelNameFromPayloadKey(key) {\n return singularize(normalizeModelName(key));\n },\n /**\n Converts the model name to a pluralized version of the model name.\n For example `post` would be converted to `posts` and\n `student-assesment` would be converted to `student-assesments`.\n @method payloadKeyFromModelName\n @public\n @param {String} modelName\n @return {String}\n */\n // TODO @deprecated Use payloadTypeFromModelName instead\n payloadKeyFromModelName(modelName) {\n return pluralize(modelName);\n },\n normalize(modelClass, resourceHash) {\n if (resourceHash.attributes) {\n this.normalizeUsingDeclaredMapping(modelClass, resourceHash.attributes);\n }\n if (resourceHash.relationships) {\n this.normalizeUsingDeclaredMapping(modelClass, resourceHash.relationships);\n }\n let data = {\n id: this.extractId(modelClass, resourceHash),\n type: this._extractType(modelClass, resourceHash),\n attributes: this.extractAttributes(modelClass, resourceHash),\n relationships: this.extractRelationships(modelClass, resourceHash)\n };\n this.applyTransforms(modelClass, data.attributes);\n return {\n data\n };\n },\n /**\n `keyForAttribute` can be used to define rules for how to convert an\n attribute name in your model to a key in your JSON.\n By default `JSONAPISerializer` follows the format used on the examples of\n http://jsonapi.org/format and uses dashes as the word separator in the JSON\n attribute keys.\n This behaviour can be easily customized by extending this method.\n Example\n ```app/serializers/application.js\n import JSONAPISerializer from '@ember-data/serializer/json-api';\n import { dasherize } from '@ember/string';\n export default class ApplicationSerializer extends JSONAPISerializer {\n keyForAttribute(attr, method) {\n return dasherize(attr).toUpperCase();\n }\n }\n ```\n @method keyForAttribute\n @public\n @param {String} key\n @param {String} method\n @return {String} normalized key\n */\n keyForAttribute(key, method) {\n return dasherize(key);\n },\n /**\n `keyForRelationship` can be used to define a custom key when\n serializing and deserializing relationship properties.\n By default `JSONAPISerializer` follows the format used on the examples of\n http://jsonapi.org/format and uses dashes as word separators in\n relationship properties.\n This behaviour can be easily customized by extending this method.\n Example\n ```app/serializers/post.js\n import JSONAPISerializer from '@ember-data/serializer/json-api';\n import { underscore } from '@ember/string';\n export default class ApplicationSerializer extends JSONAPISerializer {\n keyForRelationship(key, relationship, method) {\n return underscore(key);\n }\n }\n ```\n @method keyForRelationship\n @public\n @param {String} key\n @param {String} typeClass\n @param {String} method\n @return {String} normalized key\n */\n keyForRelationship(key, typeClass, method) {\n return dasherize(key);\n },\n /**\n Called when a record is saved in order to convert the\n record into JSON.\n For example, consider this model:\n ```app/models/comment.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n export default class CommentModel extends Model {\n @attr title;\n @attr body;\n @belongsTo('user', { async: false, inverse: null })\n author;\n }\n ```\n The default serialization would create a JSON-API resource object like:\n ```javascript\n {\n \"data\": {\n \"type\": \"comments\",\n \"attributes\": {\n \"title\": \"Rails is unagi\",\n \"body\": \"Rails? Omakase? O_O\",\n },\n \"relationships\": {\n \"author\": {\n \"data\": {\n \"id\": \"12\",\n \"type\": \"users\"\n }\n }\n }\n }\n }\n ```\n By default, attributes are passed through as-is, unless\n you specified an attribute type (`attr('date')`). If\n you specify a transform, the JavaScript value will be\n serialized when inserted into the attributes hash.\n Belongs-to relationships are converted into JSON-API\n resource identifier objects.\n ## IDs\n `serialize` takes an options hash with a single option:\n `includeId`. If this option is `true`, `serialize` will,\n by default include the ID in the JSON object it builds.\n The JSONAPIAdapter passes in `includeId: true` when serializing a record\n for `createRecord` or `updateRecord`.\n ## Customization\n Your server may expect data in a different format than the\n built-in serialization format.\n In that case, you can implement `serialize` yourself and\n return data formatted to match your API's expectations, or override\n the invoked adapter method and do the serialization in the adapter directly\n by using the provided snapshot.\n If your API's format differs greatly from the JSON:API spec, you should\n consider authoring your own adapter and serializer instead of extending\n this class.\n ```app/serializers/post.js\n import JSONAPISerializer from '@ember-data/serializer/json-api';\n export default class PostSerializer extends JSONAPISerializer {\n serialize(snapshot, options) {\n let json = {\n POST_TTL: snapshot.attr('title'),\n POST_BDY: snapshot.attr('body'),\n POST_CMS: snapshot.hasMany('comments', { ids: true })\n };\n if (options.includeId) {\n json.POST_ID_ = snapshot.id;\n }\n return json;\n }\n }\n ```\n ## Customizing an App-Wide Serializer\n If you want to define a serializer for your entire\n application, you'll probably want to use `eachAttribute`\n and `eachRelationship` on the record.\n ```app/serializers/application.js\n import JSONAPISerializer from '@ember-data/serializer/json-api';\n import { singularize } from 'ember-inflector';\n import { underscore } from '@ember/string';\n export default class ApplicationSerializer extends JSONAPISerializer {\n serialize(snapshot, options) {\n let json = {};\n snapshot.eachAttribute((name) => {\n json[serverAttributeName(name)] = snapshot.attr(name);\n });\n snapshot.eachRelationship((name, relationship) => {\n if (relationship.kind === 'hasMany') {\n json[serverHasManyName(name)] = snapshot.hasMany(name, { ids: true });\n }\n });\n if (options.includeId) {\n json.ID_ = snapshot.id;\n }\n return json;\n }\n }\n function serverAttributeName(attribute) {\n return underscore(attribute).toUpperCase();\n }\n function serverHasManyName(name) {\n return serverAttributeName(singularize(name)) + '_IDS';\n }\n ```\n This serializer will generate JSON that looks like this:\n ```javascript\n {\n \"TITLE\": \"Rails is omakase\",\n \"BODY\": \"Yep. Omakase.\",\n \"COMMENT_IDS\": [ \"1\", \"2\", \"3\" ]\n }\n ```\n ## Tweaking the Default Formatting\n If you just want to do some small tweaks on the default JSON:API formatted response,\n you can call `super.serialize` first and make the tweaks\n on the returned object.\n ```app/serializers/post.js\n import JSONAPISerializer from '@ember-data/serializer/json-api';\n export default class PostSerializer extends JSONAPISerializer {\n serialize(snapshot, options) {\n let json = super.serialize(...arguments);\n json.data.attributes.subject = json.data.attributes.title;\n delete json.data.attributes.title;\n return json;\n }\n }\n ```\n @method serialize\n @public\n @param {Snapshot} snapshot\n @param {Object} options\n @return {Object} json\n */\n serialize(snapshot, options) {\n let data = this._super(...arguments);\n data.type = this.payloadKeyFromModelName(snapshot.modelName);\n return {\n data\n };\n },\n serializeAttribute(snapshot, json, key, attribute) {\n let type = attribute.type;\n if (this._canSerialize(key)) {\n json.attributes = json.attributes || {};\n let value = snapshot.attr(key);\n if (type) {\n let transform = this.transformFor(type);\n value = transform.serialize(value, attribute.options);\n }\n let schema = this.store.modelFor(snapshot.modelName);\n let payloadKey = this._getMappedKey(key, schema);\n if (payloadKey === key) {\n payloadKey = this.keyForAttribute(key, 'serialize');\n }\n json.attributes[payloadKey] = value;\n }\n },\n serializeBelongsTo(snapshot, json, relationship) {\n let key = relationship.key;\n if (this._canSerialize(key)) {\n let belongsTo = snapshot.belongsTo(key);\n let belongsToIsNotNew = belongsTo && !belongsTo.isNew;\n if (belongsTo === null || belongsToIsNotNew) {\n json.relationships = json.relationships || {};\n let schema = this.store.modelFor(snapshot.modelName);\n let payloadKey = this._getMappedKey(key, schema);\n if (payloadKey === key) {\n payloadKey = this.keyForRelationship(key, 'belongsTo', 'serialize');\n }\n let data = null;\n if (belongsTo) {\n let payloadType = this.payloadKeyFromModelName(belongsTo.modelName);\n data = {\n type: payloadType,\n id: belongsTo.id\n };\n }\n json.relationships[payloadKey] = {\n data\n };\n }\n }\n },\n serializeHasMany(snapshot, json, relationship) {\n let key = relationship.key;\n if (this.shouldSerializeHasMany(snapshot, key, relationship)) {\n let hasMany = snapshot.hasMany(key);\n if (hasMany !== undefined) {\n json.relationships = json.relationships || {};\n let schema = this.store.modelFor(snapshot.modelName);\n let payloadKey = this._getMappedKey(key, schema);\n if (payloadKey === key && this.keyForRelationship) {\n payloadKey = this.keyForRelationship(key, 'hasMany', 'serialize');\n }\n\n // only serialize has many relationships that are not new\n let nonNewHasMany = hasMany.filter(item => item.record && !item.record.get('isNew'));\n let data = new Array(nonNewHasMany.length);\n for (let i = 0; i < nonNewHasMany.length; i++) {\n let item = hasMany[i];\n let payloadType = this.payloadKeyFromModelName(item.modelName);\n data[i] = {\n type: payloadType,\n id: item.id\n };\n }\n json.relationships[payloadKey] = {\n data\n };\n }\n }\n }\n});\nif (DEBUG) {\n JSONAPISerializer.reopen({\n init(...args) {\n this._super(...args);\n assert(`You've used the EmbeddedRecordsMixin in ${this.toString()} which is not fully compatible with the JSON:API specification. Please confirm that this works for your specific API and add \\`this.isEmbeddedRecordsMixinCompatible = true\\` to your serializer.`, !this.isEmbeddedRecordsMixin || this.isEmbeddedRecordsMixinCompatible === true);\n let constructor = this.constructor;\n warn(`You've defined 'extractMeta' in ${constructor.toString()} which is not used for serializers extending JSONAPISerializer. Read more at https://api.emberjs.com/ember-data/release/classes/JSONAPISerializer on how to customize meta when using JSON API.`, this.extractMeta === JSONSerializer.prototype.extractMeta, {\n id: 'ds.serializer.json-api.extractMeta'\n });\n },\n warnMessageForUndefinedType() {\n return 'Encountered a resource object with an undefined type (resolved resource using ' + this.constructor.toString() + ')';\n },\n warnMessageNoModelForType(modelName, originalType, usedLookup) {\n return `Encountered a resource object with type \"${originalType}\", but no model was found for model name \"${modelName}\" (resolved model name using '${this.constructor.toString()}.${usedLookup}(\"${originalType}\")').`;\n }\n });\n}\nexport default JSONAPISerializer;","/**\n * @module @ember-data/serializer/json\n */\nimport { getOwner } from '@ember/application';\nimport { assert, warn } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { isNone, typeOf } from '@ember/utils';\nimport Serializer from '@ember-data/serializer';\nimport { normalizeModelName } from '@ember-data/store';\nimport { coerceId, errorsArrayToHash } from '@ember-data/store/-private';\nimport { modelHasAttributeOrRelationshipNamedType } from './-private';\n\n/**\n Ember Data 2.0 Serializer:\n\n In Ember Data a Serializer is used to serialize and deserialize\n records when they are transferred in and out of an external source.\n This process involves normalizing property names, transforming\n attribute values and serializing relationships.\n\n By default, Ember Data uses and recommends the `JSONAPISerializer`.\n\n `JSONSerializer` is useful for simpler or legacy backends that may\n not support the http://jsonapi.org/ spec.\n\n For example, given the following `User` model and JSON payload:\n\n ```app/models/user.js\n import Model, { attr, belongsTo, hasMany } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @hasMany('user') friends;\n @belongsTo('location') house;\n\n @attr('string') name;\n }\n ```\n\n ```js\n {\n id: 1,\n name: 'Sebastian',\n friends: [3, 4],\n links: {\n house: '/houses/lefkada'\n }\n }\n ```\n\n `JSONSerializer` will normalize the JSON payload to the JSON API format that the\n Ember Data store expects.\n\n You can customize how JSONSerializer processes its payload by passing options in\n the `attrs` hash or by subclassing the `JSONSerializer` and overriding hooks:\n\n - To customize how a single record is normalized, use the `normalize` hook.\n - To customize how `JSONSerializer` normalizes the whole server response, use the\n `normalizeResponse` hook.\n - To customize how `JSONSerializer` normalizes a specific response from the server,\n use one of the many specific `normalizeResponse` hooks.\n - To customize how `JSONSerializer` normalizes your id, attributes or relationships,\n use the `extractId`, `extractAttributes` and `extractRelationships` hooks.\n\n The `JSONSerializer` normalization process follows these steps:\n\n 1. `normalizeResponse`\n - entry method to the serializer.\n 2. `normalizeCreateRecordResponse`\n - a `normalizeResponse` for a specific operation is called.\n 3. `normalizeSingleResponse`|`normalizeArrayResponse`\n - for methods like `createRecord` we expect a single record back, while for methods like `findAll` we expect multiple records back.\n 4. `normalize`\n - `normalizeArrayResponse` iterates and calls `normalize` for each of its records while `normalizeSingle`\n calls it once. This is the method you most likely want to subclass.\n 5. `extractId` | `extractAttributes` | `extractRelationships`\n - `normalize` delegates to these methods to\n turn the record payload into the JSON API format.\n\n @main @ember-data/serializer/json\n @class JSONSerializer\n @public\n @extends Serializer\n*/\nconst JSONSerializer = Serializer.extend({\n /**\n The `primaryKey` is used when serializing and deserializing\n data. Ember Data always uses the `id` property to store the id of\n the record. The external source may not always follow this\n convention. In these cases it is useful to override the\n `primaryKey` property to match the `primaryKey` of your external\n store.\n Example\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class ApplicationSerializer extends JSONSerializer {\n primaryKey = '_id'\n }\n ```\n @property primaryKey\n @type {String}\n @public\n @default 'id'\n */\n primaryKey: 'id',\n /**\n The `attrs` object can be used to declare a simple mapping between\n property names on `Model` records and payload keys in the\n serialized JSON object representing the record. An object with the\n property `key` can also be used to designate the attribute's key on\n the response payload.\n Example\n ```app/models/person.js\n import Model, { attr } from '@ember-data/model';\n export default class PersonModel extends Model {\n @attr('string') firstName;\n @attr('string') lastName;\n @attr('string') occupation;\n @attr('boolean') admin;\n }\n ```\n ```app/serializers/person.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PersonSerializer extends JSONSerializer {\n attrs = {\n admin: 'is_admin',\n occupation: { key: 'career' }\n }\n }\n ```\n You can also remove attributes and relationships by setting the `serialize`\n key to `false` in your mapping object.\n Example\n ```app/serializers/person.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PostSerializer extends JSONSerializer {\n attrs = {\n admin: { serialize: false },\n occupation: { key: 'career' }\n }\n }\n ```\n When serialized:\n ```javascript\n {\n \"firstName\": \"Harry\",\n \"lastName\": \"Houdini\",\n \"career\": \"magician\"\n }\n ```\n Note that the `admin` is now not included in the payload.\n Setting `serialize` to `true` enforces serialization for hasMany\n relationships even if it's neither a many-to-many nor many-to-none\n relationship.\n @property attrs\n @public\n @type {Object}\n */\n mergedProperties: ['attrs'],\n /**\n Given a subclass of `Model` and a JSON object this method will\n iterate through each attribute of the `Model` and invoke the\n `Transform#deserialize` method on the matching property of the\n JSON object. This method is typically called after the\n serializer's `normalize` method.\n @method applyTransforms\n @private\n @param {Model} typeClass\n @param {Object} data The data to transform\n @return {Object} data The transformed data object\n */\n applyTransforms(typeClass, data) {\n let attributes = get(typeClass, 'attributes');\n typeClass.eachTransformedAttribute((key, typeClass) => {\n if (data[key] === undefined) {\n return;\n }\n let transform = this.transformFor(typeClass);\n let transformMeta = attributes.get(key);\n data[key] = transform.deserialize(data[key], transformMeta.options);\n });\n return data;\n },\n /**\n The `normalizeResponse` method is used to normalize a payload from the\n server to a JSON-API Document.\n http://jsonapi.org/format/#document-structure\n This method delegates to a more specific normalize method based on\n the `requestType`.\n To override this method with a custom one, make sure to call\n `return super.normalizeResponse(store, primaryModelClass, payload, id, requestType)` with your\n pre-processed data.\n Here's an example of using `normalizeResponse` manually:\n ```javascript\n socket.on('message', function(message) {\n let data = message.data;\n let modelClass = store.modelFor(data.modelName);\n let serializer = store.serializerFor(data.modelName);\n let normalized = serializer.normalizeSingleResponse(store, modelClass, data, data.id);\n store.push(normalized);\n });\n ```\n @since 1.13.0\n @method normalizeResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n switch (requestType) {\n case 'findRecord':\n return this.normalizeFindRecordResponse(...arguments);\n case 'queryRecord':\n return this.normalizeQueryRecordResponse(...arguments);\n case 'findAll':\n return this.normalizeFindAllResponse(...arguments);\n case 'findBelongsTo':\n return this.normalizeFindBelongsToResponse(...arguments);\n case 'findHasMany':\n return this.normalizeFindHasManyResponse(...arguments);\n case 'findMany':\n return this.normalizeFindManyResponse(...arguments);\n case 'query':\n return this.normalizeQueryResponse(...arguments);\n case 'createRecord':\n return this.normalizeCreateRecordResponse(...arguments);\n case 'deleteRecord':\n return this.normalizeDeleteRecordResponse(...arguments);\n case 'updateRecord':\n return this.normalizeUpdateRecordResponse(...arguments);\n }\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `findRecord`\n @since 1.13.0\n @method normalizeFindRecordResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeFindRecordResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSingleResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `queryRecord`\n @since 1.13.0\n @method normalizeQueryRecordResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeQueryRecordResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSingleResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `findAll`\n @since 1.13.0\n @method normalizeFindAllResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeArrayResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `findBelongsTo`\n @since 1.13.0\n @method normalizeFindBelongsToResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeFindBelongsToResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSingleResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `findHasMany`\n @since 1.13.0\n @method normalizeFindHasManyResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeFindHasManyResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeArrayResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `findMany`\n @since 1.13.0\n @method normalizeFindManyResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeFindManyResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeArrayResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `query`\n @since 1.13.0\n @method normalizeQueryResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeQueryResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeArrayResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `createRecord`\n @since 1.13.0\n @method normalizeCreateRecordResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeCreateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSaveResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `deleteRecord`\n @since 1.13.0\n @method normalizeDeleteRecordResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeDeleteRecordResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSaveResponse(...arguments);\n },\n /**\n Called by the default normalizeResponse implementation when the\n type of request is `updateRecord`\n @since 1.13.0\n @method normalizeUpdateRecordResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeUpdateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSaveResponse(...arguments);\n },\n /**\n normalizeUpdateRecordResponse, normalizeCreateRecordResponse and\n normalizeDeleteRecordResponse delegate to this method by default.\n @since 1.13.0\n @method normalizeSaveResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeSaveResponse(store, primaryModelClass, payload, id, requestType) {\n return this.normalizeSingleResponse(...arguments);\n },\n /**\n normalizeQueryResponse and normalizeFindRecordResponse delegate to this\n method by default.\n @since 1.13.0\n @method normalizeSingleResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) {\n return this._normalizeResponse(store, primaryModelClass, payload, id, requestType, true);\n },\n /**\n normalizeQueryResponse, normalizeFindManyResponse, and normalizeFindHasManyResponse delegate\n to this method by default.\n @since 1.13.0\n @method normalizeArrayResponse\n @public\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @return {Object} JSON-API Document\n */\n normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n return this._normalizeResponse(store, primaryModelClass, payload, id, requestType, false);\n },\n /**\n @method _normalizeResponse\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @param {Boolean} isSingle\n @return {Object} JSON-API Document\n @private\n */\n _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {\n let documentHash = {\n data: null,\n included: []\n };\n let meta = this.extractMeta(store, primaryModelClass, payload);\n if (meta) {\n assert('The `meta` returned from `extractMeta` has to be an object, not \"' + typeOf(meta) + '\".', typeOf(meta) === 'object');\n documentHash.meta = meta;\n }\n if (isSingle) {\n let {\n data,\n included\n } = this.normalize(primaryModelClass, payload);\n documentHash.data = data;\n if (included) {\n documentHash.included = included;\n }\n } else {\n let ret = new Array(payload.length);\n for (let i = 0, l = payload.length; i < l; i++) {\n let item = payload[i];\n let {\n data,\n included\n } = this.normalize(primaryModelClass, item);\n if (included) {\n documentHash.included = documentHash.included.concat(included);\n }\n ret[i] = data;\n }\n documentHash.data = ret;\n }\n return documentHash;\n },\n /**\n Normalizes a part of the JSON payload returned by\n the server. You should override this method, munge the hash\n and call super if you have generic normalization to do.\n It takes the type of the record that is being normalized\n (as a Model class), the property where the hash was\n originally found, and the hash to normalize.\n You can use this method, for example, to normalize underscored keys to camelized\n or other general-purpose normalizations.\n Example\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n import { underscore } from '@ember/string';\n import { get } from '@ember/object';\n export default class ApplicationSerializer extends JSONSerializer {\n normalize(typeClass, hash) {\n let fields = get(typeClass, 'fields');\n fields.forEach(function(type, field) {\n let payloadField = underscore(field);\n if (field === payloadField) { return; }\n hash[field] = hash[payloadField];\n delete hash[payloadField];\n });\n return super.normalize(...arguments);\n }\n }\n ```\n @method normalize\n @public\n @param {Model} typeClass\n @param {Object} hash\n @return {Object}\n */\n normalize(modelClass, resourceHash) {\n let data = null;\n if (resourceHash) {\n this.normalizeUsingDeclaredMapping(modelClass, resourceHash);\n if (typeOf(resourceHash.links) === 'object') {\n this.normalizeUsingDeclaredMapping(modelClass, resourceHash.links);\n }\n data = {\n id: this.extractId(modelClass, resourceHash),\n type: modelClass.modelName,\n attributes: this.extractAttributes(modelClass, resourceHash),\n relationships: this.extractRelationships(modelClass, resourceHash)\n };\n this.applyTransforms(modelClass, data.attributes);\n }\n return {\n data\n };\n },\n /**\n Returns the resource's ID.\n @method extractId\n @public\n @param {Object} modelClass\n @param {Object} resourceHash\n @return {String}\n */\n extractId(modelClass, resourceHash) {\n let primaryKey = get(this, 'primaryKey');\n let id = resourceHash[primaryKey];\n return coerceId(id);\n },\n /**\n Returns the resource's attributes formatted as a JSON-API \"attributes object\".\n http://jsonapi.org/format/#document-resource-object-attributes\n @method extractAttributes\n @public\n @param {Object} modelClass\n @param {Object} resourceHash\n @return {Object}\n */\n extractAttributes(modelClass, resourceHash) {\n let attributeKey;\n let attributes = {};\n modelClass.eachAttribute(key => {\n attributeKey = this.keyForAttribute(key, 'deserialize');\n if (resourceHash[attributeKey] !== undefined) {\n attributes[key] = resourceHash[attributeKey];\n }\n });\n return attributes;\n },\n /**\n Returns a relationship formatted as a JSON-API \"relationship object\".\n http://jsonapi.org/format/#document-resource-object-relationships\n @method extractRelationship\n @public\n @param {Object} relationshipModelName\n @param {Object} relationshipHash\n @return {Object}\n */\n extractRelationship(relationshipModelName, relationshipHash) {\n if (isNone(relationshipHash)) {\n return null;\n }\n /*\n When `relationshipHash` is an object it usually means that the relationship\n is polymorphic. It could however also be embedded resources that the\n EmbeddedRecordsMixin has be able to process.\n */\n if (typeOf(relationshipHash) === 'object') {\n if (relationshipHash.id) {\n relationshipHash.id = coerceId(relationshipHash.id);\n }\n let modelClass = this.store.modelFor(relationshipModelName);\n if (relationshipHash.type && !modelHasAttributeOrRelationshipNamedType(modelClass)) {\n relationshipHash.type = this.modelNameFromPayloadKey(relationshipHash.type);\n }\n return relationshipHash;\n }\n return {\n id: coerceId(relationshipHash),\n type: relationshipModelName\n };\n },\n /**\n Returns a polymorphic relationship formatted as a JSON-API \"relationship object\".\n http://jsonapi.org/format/#document-resource-object-relationships\n `relationshipOptions` is a hash which contains more information about the\n polymorphic relationship which should be extracted:\n - `resourceHash` complete hash of the resource the relationship should be\n extracted from\n - `relationshipKey` key under which the value for the relationship is\n extracted from the resourceHash\n - `relationshipMeta` meta information about the relationship\n @method extractPolymorphicRelationship\n @public\n @param {Object} relationshipModelName\n @param {Object} relationshipHash\n @param {Object} relationshipOptions\n @return {Object}\n */\n extractPolymorphicRelationship(relationshipModelName, relationshipHash, relationshipOptions) {\n return this.extractRelationship(relationshipModelName, relationshipHash);\n },\n /**\n Returns the resource's relationships formatted as a JSON-API \"relationships object\".\n http://jsonapi.org/format/#document-resource-object-relationships\n @method extractRelationships\n @public\n @param {Object} modelClass\n @param {Object} resourceHash\n @return {Object}\n */\n extractRelationships(modelClass, resourceHash) {\n let relationships = {};\n modelClass.eachRelationship((key, relationshipMeta) => {\n let relationship = null;\n let relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize');\n if (resourceHash[relationshipKey] !== undefined) {\n let data = null;\n let relationshipHash = resourceHash[relationshipKey];\n if (relationshipMeta.kind === 'belongsTo') {\n if (relationshipMeta.options.polymorphic) {\n // extracting a polymorphic belongsTo may need more information\n // than the type and the hash (which might only be an id) for the\n // relationship, hence we pass the key, resource and\n // relationshipMeta too\n data = this.extractPolymorphicRelationship(relationshipMeta.type, relationshipHash, {\n key,\n resourceHash,\n relationshipMeta\n });\n } else {\n data = this.extractRelationship(relationshipMeta.type, relationshipHash);\n }\n } else if (relationshipMeta.kind === 'hasMany') {\n if (!isNone(relationshipHash)) {\n data = new Array(relationshipHash.length);\n if (relationshipMeta.options.polymorphic) {\n for (let i = 0, l = relationshipHash.length; i < l; i++) {\n let item = relationshipHash[i];\n data[i] = this.extractPolymorphicRelationship(relationshipMeta.type, item, {\n key,\n resourceHash,\n relationshipMeta\n });\n }\n } else {\n for (let i = 0, l = relationshipHash.length; i < l; i++) {\n let item = relationshipHash[i];\n data[i] = this.extractRelationship(relationshipMeta.type, item);\n }\n }\n }\n }\n relationship = {\n data\n };\n }\n let linkKey = this.keyForLink(key, relationshipMeta.kind);\n if (resourceHash.links && resourceHash.links[linkKey] !== undefined) {\n let related = resourceHash.links[linkKey];\n relationship = relationship || {};\n relationship.links = {\n related\n };\n }\n if (relationship) {\n relationships[key] = relationship;\n }\n });\n return relationships;\n },\n /**\n Dasherizes the model name in the payload\n @method modelNameFromPayloadKey\n @public\n @param {String} key\n @return {String} the model's modelName\n */\n modelNameFromPayloadKey(key) {\n return normalizeModelName(key);\n },\n /**\n @method normalizeRelationships\n @private\n */\n normalizeRelationships(typeClass, hash) {\n let payloadKey;\n if (this.keyForRelationship) {\n typeClass.eachRelationship((key, relationship) => {\n payloadKey = this.keyForRelationship(key, relationship.kind, 'deserialize');\n if (key === payloadKey) {\n return;\n }\n if (hash[payloadKey] === undefined) {\n return;\n }\n hash[key] = hash[payloadKey];\n delete hash[payloadKey];\n });\n }\n },\n /**\n @method normalizeUsingDeclaredMapping\n @private\n */\n normalizeUsingDeclaredMapping(modelClass, hash) {\n let attrs = get(this, 'attrs');\n let normalizedKey;\n let payloadKey;\n if (attrs) {\n for (let key in attrs) {\n normalizedKey = payloadKey = this._getMappedKey(key, modelClass);\n if (hash[payloadKey] === undefined) {\n continue;\n }\n if (get(modelClass, 'attributes').has(key)) {\n normalizedKey = this.keyForAttribute(key, 'deserialize');\n }\n if (get(modelClass, 'relationshipsByName').has(key)) {\n normalizedKey = this.keyForRelationship(key, modelClass, 'deserialize');\n }\n if (payloadKey !== normalizedKey) {\n hash[normalizedKey] = hash[payloadKey];\n delete hash[payloadKey];\n }\n }\n }\n },\n /**\n Looks up the property key that was set by the custom `attr` mapping\n passed to the serializer.\n @method _getMappedKey\n @private\n @param {String} key\n @return {String} key\n */\n _getMappedKey(key, modelClass) {\n warn('There is no attribute or relationship with the name `' + key + '` on `' + modelClass.modelName + '`. Check your serializers attrs hash.', get(modelClass, 'attributes').has(key) || get(modelClass, 'relationshipsByName').has(key), {\n id: 'ds.serializer.no-mapped-attrs-key'\n });\n let attrs = get(this, 'attrs');\n let mappedKey;\n if (attrs && attrs[key]) {\n mappedKey = attrs[key];\n //We need to account for both the { title: 'post_title' } and\n //{ title: { key: 'post_title' }} forms\n if (mappedKey.key) {\n mappedKey = mappedKey.key;\n }\n if (typeof mappedKey === 'string') {\n key = mappedKey;\n }\n }\n return key;\n },\n /**\n Check attrs.key.serialize property to inform if the `key`\n can be serialized\n @method _canSerialize\n @private\n @param {String} key\n @return {boolean} true if the key can be serialized\n */\n _canSerialize(key) {\n let attrs = get(this, 'attrs');\n return !attrs || !attrs[key] || attrs[key].serialize !== false;\n },\n /**\n When attrs.key.serialize is set to true then\n it takes priority over the other checks and the related\n attribute/relationship will be serialized\n @method _mustSerialize\n @private\n @param {String} key\n @return {boolean} true if the key must be serialized\n */\n _mustSerialize(key) {\n let attrs = get(this, 'attrs');\n return attrs && attrs[key] && attrs[key].serialize === true;\n },\n /**\n Check if the given hasMany relationship should be serialized\n By default only many-to-many and many-to-none relationships are serialized.\n This could be configured per relationship by Serializer's `attrs` object.\n @method shouldSerializeHasMany\n @public\n @param {Snapshot} snapshot\n @param {String} key\n @param {String} relationshipType\n @return {boolean} true if the hasMany relationship should be serialized\n */\n shouldSerializeHasMany(snapshot, key, relationship) {\n const schema = this.store.modelFor(snapshot.modelName);\n let relationshipType = schema.determineRelationshipType(relationship, this.store);\n if (this._mustSerialize(key)) {\n return true;\n }\n return this._canSerialize(key) && (relationshipType === 'manyToNone' || relationshipType === 'manyToMany');\n },\n // SERIALIZE\n /**\n Called when a record is saved in order to convert the\n record into JSON.\n By default, it creates a JSON object with a key for\n each attribute and belongsTo relationship.\n For example, consider this model:\n ```app/models/comment.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n export default class CommentModel extends Model {\n @attr title;\n @attr body;\n @belongsTo('user') author;\n }\n ```\n The default serialization would create a JSON object like:\n ```javascript\n {\n \"title\": \"Rails is unagi\",\n \"body\": \"Rails? Omakase? O_O\",\n \"author\": 12\n }\n ```\n By default, attributes are passed through as-is, unless\n you specified an attribute type (`attr('date')`). If\n you specify a transform, the JavaScript value will be\n serialized when inserted into the JSON hash.\n By default, belongs-to relationships are converted into\n IDs when inserted into the JSON hash.\n ## IDs\n `serialize` takes an options hash with a single option:\n `includeId`. If this option is `true`, `serialize` will,\n by default include the ID in the JSON object it builds.\n The adapter passes in `includeId: true` when serializing\n a record for `createRecord`, but not for `updateRecord`.\n ## Customization\n Your server may expect a different JSON format than the\n built-in serialization format.\n In that case, you can implement `serialize` yourself and\n return a JSON hash of your choosing.\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PostSerializer extends JSONSerializer {\n serialize(snapshot, options) {\n let json = {\n POST_TTL: snapshot.attr('title'),\n POST_BDY: snapshot.attr('body'),\n POST_CMS: snapshot.hasMany('comments', { ids: true })\n };\n if (options.includeId) {\n json.POST_ID_ = snapshot.id;\n }\n return json;\n }\n }\n ```\n ## Customizing an App-Wide Serializer\n If you want to define a serializer for your entire\n application, you'll probably want to use `eachAttribute`\n and `eachRelationship` on the record.\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n import { singularize } from 'ember-inflector';\n export default class ApplicationSerializer extends JSONSerializer {\n serialize(snapshot, options) {\n let json = {};\n snapshot.eachAttribute((name) => {\n json[serverAttributeName(name)] = snapshot.attr(name);\n });\n snapshot.eachRelationship((name, relationship) => {\n if (relationship.kind === 'hasMany') {\n json[serverHasManyName(name)] = snapshot.hasMany(name, { ids: true });\n }\n });\n if (options.includeId) {\n json.ID_ = snapshot.id;\n }\n return json;\n }\n }\n function serverAttributeName(attribute) {\n return attribute.underscore().toUpperCase();\n }\n function serverHasManyName(name) {\n return serverAttributeName(singularize(name)) + \"_IDS\";\n }\n ```\n This serializer will generate JSON that looks like this:\n ```javascript\n {\n \"TITLE\": \"Rails is omakase\",\n \"BODY\": \"Yep. Omakase.\",\n \"COMMENT_IDS\": [ \"1\", \"2\", \"3\" ]\n }\n ```\n ## Tweaking the Default JSON\n If you just want to do some small tweaks on the default JSON,\n you can call `super.serialize` first and make the tweaks on\n the returned JSON.\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PostSerializer extends JSONSerializer {\n serialize(snapshot, options) {\n let json = super.serialize(...arguments);\n json.subject = json.title;\n delete json.title;\n return json;\n }\n }\n ```\n @method serialize\n @public\n @param {Snapshot} snapshot\n @param {Object} options\n @return {Object} json\n */\n serialize(snapshot, options) {\n let json = {};\n if (options && options.includeId) {\n const id = snapshot.id;\n if (id) {\n json[get(this, 'primaryKey')] = id;\n }\n }\n snapshot.eachAttribute((key, attribute) => {\n this.serializeAttribute(snapshot, json, key, attribute);\n });\n snapshot.eachRelationship((key, relationship) => {\n if (relationship.kind === 'belongsTo') {\n this.serializeBelongsTo(snapshot, json, relationship);\n } else if (relationship.kind === 'hasMany') {\n this.serializeHasMany(snapshot, json, relationship);\n }\n });\n return json;\n },\n /**\n You can use this method to customize how a serialized record is added to the complete\n JSON hash to be sent to the server. By default the JSON Serializer does not namespace\n the payload and just sends the raw serialized JSON object.\n If your server expects namespaced keys, you should consider using the RESTSerializer.\n Otherwise you can override this method to customize how the record is added to the hash.\n The hash property should be modified by reference.\n For example, your server may expect underscored root objects.\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n import { decamelize } from '@ember/string';\n export default class ApplicationSerializer extends RESTSerializer {\n serializeIntoHash(data, type, snapshot, options) {\n let root = decamelize(type.modelName);\n data[root] = this.serialize(snapshot, options);\n }\n }\n ```\n @method serializeIntoHash\n @public\n @param {Object} hash\n @param {Model} typeClass\n @param {Snapshot} snapshot\n @param {Object} options\n */\n serializeIntoHash(hash, typeClass, snapshot, options) {\n Object.assign(hash, this.serialize(snapshot, options));\n },\n /**\n `serializeAttribute` can be used to customize how `attr`\n properties are serialized\n For example if you wanted to ensure all your attributes were always\n serialized as properties on an `attributes` object you could\n write:\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class ApplicationSerializer extends JSONSerializer {\n serializeAttribute(snapshot, json, key, attributes) {\n json.attributes = json.attributes || {};\n super.serializeAttribute(snapshot, json.attributes, key, attributes);\n }\n }\n ```\n @method serializeAttribute\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {String} key\n @param {Object} attribute\n */\n serializeAttribute(snapshot, json, key, attribute) {\n if (this._canSerialize(key)) {\n let type = attribute.type;\n let value = snapshot.attr(key);\n if (type) {\n let transform = this.transformFor(type);\n value = transform.serialize(value, attribute.options);\n }\n\n // if provided, use the mapping provided by `attrs` in\n // the serializer\n let schema = this.store.modelFor(snapshot.modelName);\n let payloadKey = this._getMappedKey(key, schema);\n if (payloadKey === key && this.keyForAttribute) {\n payloadKey = this.keyForAttribute(key, 'serialize');\n }\n json[payloadKey] = value;\n }\n },\n /**\n `serializeBelongsTo` can be used to customize how `belongsTo`\n properties are serialized.\n Example\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n import { isNone } from '@ember/utils';\n export default class PostSerializer extends JSONSerializer {\n serializeBelongsTo(snapshot, json, relationship) {\n let key = relationship.key;\n let belongsTo = snapshot.belongsTo(key);\n key = this.keyForRelationship ? this.keyForRelationship(key, \"belongsTo\", \"serialize\") : key;\n json[key] = isNone(belongsTo) ? belongsTo : belongsTo.record.toJSON();\n }\n }\n ```\n @method serializeBelongsTo\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializeBelongsTo(snapshot, json, relationship) {\n let key = relationship.key;\n if (this._canSerialize(key)) {\n let belongsToId = snapshot.belongsTo(key, {\n id: true\n });\n\n // if provided, use the mapping provided by `attrs` in\n // the serializer\n let schema = this.store.modelFor(snapshot.modelName);\n let payloadKey = this._getMappedKey(key, schema);\n if (payloadKey === key && this.keyForRelationship) {\n payloadKey = this.keyForRelationship(key, 'belongsTo', 'serialize');\n }\n\n //Need to check whether the id is there for new&async records\n if (isNone(belongsToId)) {\n json[payloadKey] = null;\n } else {\n json[payloadKey] = belongsToId;\n }\n if (relationship.options.polymorphic) {\n this.serializePolymorphicType(snapshot, json, relationship);\n }\n }\n },\n /**\n `serializeHasMany` can be used to customize how `hasMany`\n properties are serialized.\n Example\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PostSerializer extends JSONSerializer {\n serializeHasMany(snapshot, json, relationship) {\n let key = relationship.key;\n if (key === 'comments') {\n return;\n } else {\n super.serializeHasMany(...arguments);\n }\n }\n }\n ```\n @method serializeHasMany\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializeHasMany(snapshot, json, relationship) {\n let key = relationship.key;\n if (this.shouldSerializeHasMany(snapshot, key, relationship)) {\n let hasMany = snapshot.hasMany(key, {\n ids: true\n });\n if (hasMany !== undefined) {\n // if provided, use the mapping provided by `attrs` in\n // the serializer\n let schema = this.store.modelFor(snapshot.modelName);\n let payloadKey = this._getMappedKey(key, schema);\n if (payloadKey === key && this.keyForRelationship) {\n payloadKey = this.keyForRelationship(key, 'hasMany', 'serialize');\n }\n json[payloadKey] = hasMany;\n // TODO support for polymorphic manyToNone and manyToMany relationships\n }\n }\n },\n /**\n You can use this method to customize how polymorphic objects are\n serialized. Objects are considered to be polymorphic if\n `{ polymorphic: true }` is pass as the second argument to the\n `belongsTo` function.\n Example\n ```app/serializers/comment.js\n import JSONSerializer from '@ember-data/serializer/json';\n import { isNone } from '@ember/utils';\n export default class CommentSerializer extends JSONSerializer {\n serializePolymorphicType(snapshot, json, relationship) {\n let key = relationship.key;\n let belongsTo = snapshot.belongsTo(key);\n key = this.keyForAttribute ? this.keyForAttribute(key, 'serialize') : key;\n if (isNone(belongsTo)) {\n json[key + '_type'] = null;\n } else {\n json[key + '_type'] = belongsTo.modelName;\n }\n }\n }\n ```\n @method serializePolymorphicType\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializePolymorphicType() {},\n /**\n `extractMeta` is used to deserialize any meta information in the\n adapter payload. By default Ember Data expects meta information to\n be located on the `meta` property of the payload object.\n Example\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PostSerializer extends JSONSerializer {\n extractMeta(store, typeClass, payload) {\n if (payload && payload.hasOwnProperty('_pagination')) {\n let meta = payload._pagination;\n delete payload._pagination;\n return meta;\n }\n }\n }\n ```\n @method extractMeta\n @public\n @param {Store} store\n @param {Model} modelClass\n @param {Object} payload\n */\n extractMeta(store, modelClass, payload) {\n if (payload && payload['meta'] !== undefined) {\n let meta = payload.meta;\n delete payload.meta;\n return meta;\n }\n },\n /**\n `extractErrors` is used to extract model errors when a call\n to `Model#save` fails with an `InvalidError`. By default\n Ember Data expects error information to be located on the `errors`\n property of the payload object.\n This serializer expects this `errors` object to be an Array similar\n to the following, compliant with the https://jsonapi.org/format/#errors specification:\n ```js\n {\n \"errors\": [\n {\n \"detail\": \"This username is already taken!\",\n \"source\": {\n \"pointer\": \"data/attributes/username\"\n }\n }, {\n \"detail\": \"Doesn't look like a valid email.\",\n \"source\": {\n \"pointer\": \"data/attributes/email\"\n }\n }\n ]\n }\n ```\n The key `detail` provides a textual description of the problem.\n Alternatively, the key `title` can be used for the same purpose.\n The nested keys `source.pointer` detail which specific element\n of the request data was invalid.\n Note that JSON-API also allows for object-level errors to be placed\n in an object with pointer `data`, signifying that the problem\n cannot be traced to a specific attribute:\n ```javascript\n {\n \"errors\": [\n {\n \"detail\": \"Some generic non property error message\",\n \"source\": {\n \"pointer\": \"data\"\n }\n }\n ]\n }\n ```\n When turn into a `Errors` object, you can read these errors\n through the property `base`:\n ```handlebars\n {{#each @model.errors.base as |error|}}\n
    \n {{error.message}}\n
    \n {{/each}}\n ```\n Example of alternative implementation, overriding the default\n behavior to deal with a different format of errors:\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class PostSerializer extends JSONSerializer {\n extractErrors(store, typeClass, payload, id) {\n if (payload && typeof payload === 'object' && payload._problems) {\n payload = payload._problems;\n this.normalizeErrors(typeClass, payload);\n }\n return payload;\n }\n }\n ```\n @method extractErrors\n @public\n @param {Store} store\n @param {Model} typeClass\n @param {Object} payload\n @param {(String|Number)} id\n @return {Object} json The deserialized errors\n */\n extractErrors(store, typeClass, payload, id) {\n if (payload && typeof payload === 'object' && payload.errors) {\n payload = errorsArrayToHash(payload.errors);\n this.normalizeUsingDeclaredMapping(typeClass, payload);\n typeClass.eachAttribute(name => {\n let key = this.keyForAttribute(name, 'deserialize');\n if (key !== name && payload[key] !== undefined) {\n payload[name] = payload[key];\n delete payload[key];\n }\n });\n typeClass.eachRelationship(name => {\n let key = this.keyForRelationship(name, 'deserialize');\n if (key !== name && payload[key] !== undefined) {\n payload[name] = payload[key];\n delete payload[key];\n }\n });\n }\n return payload;\n },\n /**\n `keyForAttribute` can be used to define rules for how to convert an\n attribute name in your model to a key in your JSON.\n Example\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n import { underscore } from '@ember/string';\n export default class ApplicationSerializer extends JSONSerializer {\n keyForAttribute(attr, method) {\n return underscore(attr).toUpperCase();\n }\n }\n ```\n @method keyForAttribute\n @public\n @param {String} key\n @param {String} method\n @return {String} normalized key\n */\n keyForAttribute(key, method) {\n return key;\n },\n /**\n `keyForRelationship` can be used to define a custom key when\n serializing and deserializing relationship properties. By default\n `JSONSerializer` does not provide an implementation of this method.\n Example\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n import { underscore } from '@ember/string';\n export default class PostSerializer extends JSONSerializer {\n keyForRelationship(key, relationship, method) {\n return `rel_${underscore(key)}`;\n }\n }\n ```\n @method keyForRelationship\n @public\n @param {String} key\n @param {String} typeClass\n @param {String} method\n @return {String} normalized key\n */\n keyForRelationship(key, typeClass, method) {\n return key;\n },\n /**\n `keyForLink` can be used to define a custom key when deserializing link\n properties.\n @method keyForLink\n @public\n @param {String} key\n @param {String} kind `belongsTo` or `hasMany`\n @return {String} normalized key\n */\n keyForLink(key, kind) {\n return key;\n },\n // HELPERS\n\n /**\n @method transformFor\n @private\n @param {String} attributeType\n @param {Boolean} skipAssertion\n @return {Transform} transform\n */\n transformFor(attributeType, skipAssertion) {\n let transform = getOwner(this).lookup('transform:' + attributeType);\n assert(`Unable to find the transform for \\`attr('${attributeType}')\\``, skipAssertion || !!transform);\n return transform;\n }\n});\nexport default JSONSerializer;","/**\n * @module @ember-data/serializer/rest\n */\nimport { makeArray } from '@ember/array';\nimport { assert, warn } from '@ember/debug';\nimport { camelize } from '@ember/string';\nimport { isNone, typeOf } from '@ember/utils';\nimport { DEBUG } from '@glimmer/env';\nimport { singularize } from 'ember-inflector';\nimport JSONSerializer from '@ember-data/serializer/json';\nimport { normalizeModelName } from '@ember-data/store';\nimport { coerceId } from '@ember-data/store/-private';\nimport { modelHasAttributeOrRelationshipNamedType } from './-private';\n\n/**\n Normally, applications will use the `RESTSerializer` by implementing\n the `normalize` method.\n\n This allows you to do whatever kind of munging you need and is\n especially useful if your server is inconsistent and you need to\n do munging differently for many different kinds of responses.\n\n See the `normalize` documentation for more information.\n\n ## Across the Board Normalization\n\n There are also a number of hooks that you might find useful to define\n across-the-board rules for your payload. These rules will be useful\n if your server is consistent, or if you're building an adapter for\n an infrastructure service, like Firebase, and want to encode service\n conventions.\n\n For example, if all of your keys are underscored and all-caps, but\n otherwise consistent with the names you use in your models, you\n can implement across-the-board rules for how to convert an attribute\n name in your model to a key in your JSON.\n\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n import { underscore } from '@ember/string';\n\n export default class ApplicationSerializer extends RESTSerializer {\n keyForAttribute(attr, method) {\n return underscore(attr).toUpperCase();\n }\n }\n ```\n\n You can also implement `keyForRelationship`, which takes the name\n of the relationship as the first parameter, the kind of\n relationship (`hasMany` or `belongsTo`) as the second parameter, and\n the method (`serialize` or `deserialize`) as the third parameter.\n\n @class RESTSerializer\n @main @ember-data/serializer/rest\n @public\n @extends JSONSerializer\n*/\nconst RESTSerializer = JSONSerializer.extend({\n /**\n `keyForPolymorphicType` can be used to define a custom key when\n serializing and deserializing a polymorphic type. By default, the\n returned key is `${key}Type`.\n Example\n ```app/serializers/post.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer {\n keyForPolymorphicType(key, relationship) {\n let relationshipKey = this.keyForRelationship(key);\n return 'type-' + relationshipKey;\n }\n }\n ```\n @method keyForPolymorphicType\n @public\n @param {String} key\n @param {String} typeClass\n @param {String} method\n @return {String} normalized key\n */\n keyForPolymorphicType(key, typeClass, method) {\n let relationshipKey = this.keyForRelationship(key);\n return `${relationshipKey}Type`;\n },\n /**\n Normalizes a part of the JSON payload returned by\n the server. You should override this method, munge the hash\n and call super if you have generic normalization to do.\n It takes the type of the record that is being normalized\n (as a Model class), the property where the hash was\n originally found, and the hash to normalize.\n For example, if you have a payload that looks like this:\n ```js\n {\n \"post\": {\n \"id\": 1,\n \"title\": \"Rails is omakase\",\n \"comments\": [ 1, 2 ]\n },\n \"comments\": [{\n \"id\": 1,\n \"body\": \"FIRST\"\n }, {\n \"id\": 2,\n \"body\": \"Rails is unagi\"\n }]\n }\n ```\n The `normalize` method will be called three times:\n * With `App.Post`, `\"posts\"` and `{ id: 1, title: \"Rails is omakase\", ... }`\n * With `App.Comment`, `\"comments\"` and `{ id: 1, body: \"FIRST\" }`\n * With `App.Comment`, `\"comments\"` and `{ id: 2, body: \"Rails is unagi\" }`\n You can use this method, for example, to normalize underscored keys to camelized\n or other general-purpose normalizations. You will only need to implement\n `normalize` and manipulate the payload as desired.\n For example, if the `IDs` under `\"comments\"` are provided as `_id` instead of\n `id`, you can specify how to normalize just the comments:\n ```app/serializers/post.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer {\n normalize(model, hash, prop) {\n if (prop === 'comments') {\n hash.id = hash._id;\n delete hash._id;\n }\n return super.normalize(...arguments);\n }\n }\n ```\n On each call to the `normalize` method, the third parameter (`prop`) is always\n one of the keys that were in the original payload or in the result of another\n normalization as `normalizeResponse`.\n @method normalize\n @public\n @param {Model} modelClass\n @param {Object} resourceHash\n @param {String} prop\n @return {Object}\n */\n\n /**\n Normalizes an array of resource payloads and returns a JSON-API Document\n with primary data and, if any, included data as `{ data, included }`.\n @method _normalizeArray\n @param {Store} store\n @param {String} modelName\n @param {Object} arrayHash\n @param {String} prop\n @return {Object}\n @private\n */\n _normalizeArray(store, modelName, arrayHash, prop) {\n let documentHash = {\n data: [],\n included: []\n };\n let modelClass = store.modelFor(modelName);\n let serializer = store.serializerFor(modelName);\n makeArray(arrayHash).forEach(hash => {\n let {\n data,\n included\n } = this._normalizePolymorphicRecord(store, hash, prop, modelClass, serializer);\n documentHash.data.push(data);\n if (included) {\n documentHash.included = documentHash.included.concat(included);\n }\n });\n return documentHash;\n },\n _normalizePolymorphicRecord(store, hash, prop, primaryModelClass, primarySerializer) {\n let serializer = primarySerializer;\n let modelClass = primaryModelClass;\n let primaryHasTypeAttribute = modelHasAttributeOrRelationshipNamedType(primaryModelClass);\n if (!primaryHasTypeAttribute && hash.type) {\n // Support polymorphic records in async relationships\n let modelName = this.modelNameFromPayloadKey(hash.type);\n if (store.getSchemaDefinitionService().doesTypeExist(modelName)) {\n serializer = store.serializerFor(modelName);\n modelClass = store.modelFor(modelName);\n }\n }\n return serializer.normalize(modelClass, hash, prop);\n },\n /**\n @method _normalizeResponse\n @param {Store} store\n @param {Model} primaryModelClass\n @param {Object} payload\n @param {String|Number} id\n @param {String} requestType\n @param {Boolean} isSingle\n @return {Object} JSON-API Document\n @private\n */\n _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {\n let documentHash = {\n data: null,\n included: []\n };\n let meta = this.extractMeta(store, primaryModelClass, payload);\n if (meta) {\n assert('The `meta` returned from `extractMeta` has to be an object, not \"' + typeOf(meta) + '\".', typeOf(meta) === 'object');\n documentHash.meta = meta;\n }\n let keys = Object.keys(payload);\n for (var i = 0, length = keys.length; i < length; i++) {\n var prop = keys[i];\n var modelName = prop;\n var forcedSecondary = false;\n\n /*\n If you want to provide sideloaded records of the same type that the\n primary data you can do that by prefixing the key with `_`.\n Example\n ```\n {\n users: [\n { id: 1, title: 'Tom', manager: 3 },\n { id: 2, title: 'Yehuda', manager: 3 }\n ],\n _users: [\n { id: 3, title: 'Tomster' }\n ]\n }\n ```\n This forces `_users` to be added to `included` instead of `data`.\n */\n if (prop.charAt(0) === '_') {\n forcedSecondary = true;\n modelName = prop.substr(1);\n }\n var typeName = this.modelNameFromPayloadKey(modelName);\n if (!store.getSchemaDefinitionService().doesTypeExist(typeName)) {\n warn(this.warnMessageNoModelForKey(modelName, typeName), false, {\n id: 'ds.serializer.model-for-key-missing'\n });\n continue;\n }\n var isPrimary = !forcedSecondary && this.isPrimaryType(store, typeName, primaryModelClass);\n var value = payload[prop];\n if (value === null) {\n continue;\n }\n assert('The adapter returned an array for the primary data of a `queryRecord` response. `queryRecord` should return a single record.', !(requestType === 'queryRecord' && isPrimary && Array.isArray(value)));\n\n /*\n Support primary data as an object instead of an array.\n Example\n ```\n {\n user: { id: 1, title: 'Tom', manager: 3 }\n }\n ```\n */\n if (isPrimary && !Array.isArray(value)) {\n let {\n data,\n included\n } = this._normalizePolymorphicRecord(store, value, prop, primaryModelClass, this);\n documentHash.data = data;\n if (included) {\n documentHash.included = documentHash.included.concat(included);\n }\n continue;\n }\n let {\n data,\n included\n } = this._normalizeArray(store, typeName, value, prop);\n if (included) {\n documentHash.included = documentHash.included.concat(included);\n }\n if (isSingle) {\n data.forEach(resource => {\n /*\n Figures out if this is the primary record or not.\n It's either:\n 1. The record with the same ID as the original request\n 2. If it's a newly created record without an ID, the first record\n in the array\n */\n let isUpdatedRecord = isPrimary && coerceId(resource.id) === id;\n let isFirstCreatedRecord = isPrimary && !id && !documentHash.data;\n if (isFirstCreatedRecord || isUpdatedRecord) {\n documentHash.data = resource;\n } else {\n documentHash.included.push(resource);\n }\n });\n } else {\n if (isPrimary) {\n documentHash.data = data;\n } else {\n if (data) {\n documentHash.included = documentHash.included.concat(data);\n }\n }\n }\n }\n return documentHash;\n },\n isPrimaryType(store, modelName, primaryModelClass) {\n return normalizeModelName(modelName) === primaryModelClass.modelName;\n },\n /**\n This method allows you to push a payload containing top-level\n collections of records organized per type.\n ```js\n {\n \"posts\": [{\n \"id\": \"1\",\n \"title\": \"Rails is omakase\",\n \"author\", \"1\",\n \"comments\": [ \"1\" ]\n }],\n \"comments\": [{\n \"id\": \"1\",\n \"body\": \"FIRST\"\n }],\n \"users\": [{\n \"id\": \"1\",\n \"name\": \"@d2h\"\n }]\n }\n ```\n It will first normalize the payload, so you can use this to push\n in data streaming in from your server structured the same way\n that fetches and saves are structured.\n @method pushPayload\n @public\n @param {Store} store\n @param {Object} payload\n */\n pushPayload(store, payload) {\n let documentHash = {\n data: [],\n included: []\n };\n for (var prop in payload) {\n var modelName = this.modelNameFromPayloadKey(prop);\n if (!store.getSchemaDefinitionService().doesTypeExist(modelName)) {\n warn(this.warnMessageNoModelForKey(prop, modelName), false, {\n id: 'ds.serializer.model-for-key-missing'\n });\n continue;\n }\n var type = store.modelFor(modelName);\n var typeSerializer = store.serializerFor(type.modelName);\n makeArray(payload[prop]).forEach(hash => {\n let {\n data,\n included\n } = typeSerializer.normalize(type, hash, prop);\n documentHash.data.push(data);\n if (included) {\n documentHash.included = documentHash.included.concat(included);\n }\n });\n }\n store.push(documentHash);\n },\n /**\n This method is used to convert each JSON root key in the payload\n into a modelName that it can use to look up the appropriate model for\n that part of the payload.\n For example, your server may send a model name that does not correspond with\n the name of the model in your app. Let's take a look at an example model,\n and an example payload:\n ```app/models/post.js\n import Model from '@ember-data/model';\n export default class Post extends Model {}\n ```\n ```javascript\n {\n \"blog/post\": {\n \"id\": \"1\n }\n }\n ```\n Ember Data is going to normalize the payload's root key for the modelName. As a result,\n it will try to look up the \"blog/post\" model. Since we don't have a model called \"blog/post\"\n (or a file called app/models/blog/post.js in ember-cli), Ember Data will throw an error\n because it cannot find the \"blog/post\" model.\n Since we want to remove this namespace, we can define a serializer for the application that will\n remove \"blog/\" from the payload key whenver it's encountered by Ember Data:\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer {\n modelNameFromPayloadKey(payloadKey) {\n if (payloadKey === 'blog/post') {\n return super.modelNameFromPayloadKey(payloadKey.replace('blog/', ''));\n } else {\n return super.modelNameFromPayloadKey(payloadKey);\n }\n }\n }\n ```\n After refreshing, Ember Data will appropriately look up the \"post\" model.\n By default the modelName for a model is its\n name in dasherized form. This means that a payload key like \"blogPost\" would be\n normalized to \"blog-post\" when Ember Data looks up the model. Usually, Ember Data\n can use the correct inflection to do this for you. Most of the time, you won't\n need to override `modelNameFromPayloadKey` for this purpose.\n @method modelNameFromPayloadKey\n @public\n @param {String} key\n @return {String} the model's modelName\n */\n modelNameFromPayloadKey(key) {\n return singularize(normalizeModelName(key));\n },\n // SERIALIZE\n\n /**\n Called when a record is saved in order to convert the\n record into JSON.\n By default, it creates a JSON object with a key for\n each attribute and belongsTo relationship.\n For example, consider this model:\n ```app/models/comment.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n export default class Comment extends Model {\n @attr title\n @attr body\n @belongsTo('user') author\n }\n ```\n The default serialization would create a JSON object like:\n ```js\n {\n \"title\": \"Rails is unagi\",\n \"body\": \"Rails? Omakase? O_O\",\n \"author\": 12\n }\n ```\n By default, attributes are passed through as-is, unless\n you specified an attribute type (`attr('date')`). If\n you specify a transform, the JavaScript value will be\n serialized when inserted into the JSON hash.\n By default, belongs-to relationships are converted into\n IDs when inserted into the JSON hash.\n ## IDs\n `serialize` takes an options hash with a single option:\n `includeId`. If this option is `true`, `serialize` will,\n by default include the ID in the JSON object it builds.\n The adapter passes in `includeId: true` when serializing\n a record for `createRecord`, but not for `updateRecord`.\n ## Customization\n Your server may expect a different JSON format than the\n built-in serialization format.\n In that case, you can implement `serialize` yourself and\n return a JSON hash of your choosing.\n ```app/serializers/post.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer {\n serialize(snapshot, options) {\n let json = {\n POST_TTL: snapshot.attr('title'),\n POST_BDY: snapshot.attr('body'),\n POST_CMS: snapshot.hasMany('comments', { ids: true })\n };\n if (options.includeId) {\n json.POST_ID_ = snapshot.id;\n }\n return json;\n }\n }\n ```\n ## Customizing an App-Wide Serializer\n If you want to define a serializer for your entire\n application, you'll probably want to use `eachAttribute`\n and `eachRelationship` on the record.\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n import { pluralize } from 'ember-inflector';\n export default class ApplicationSerializer extends RESTSerializer {\n serialize(snapshot, options) {\n let json = {};\n snapshot.eachAttribute(function(name) {\n json[serverAttributeName(name)] = snapshot.attr(name);\n });\n snapshot.eachRelationship(function(name, relationship) {\n if (relationship.kind === 'hasMany') {\n json[serverHasManyName(name)] = snapshot.hasMany(name, { ids: true });\n }\n });\n if (options.includeId) {\n json.ID_ = snapshot.id;\n }\n return json;\n }\n }\n function serverAttributeName(attribute) {\n return attribute.underscore().toUpperCase();\n }\n function serverHasManyName(name) {\n return serverAttributeName(singularize(name)) + \"_IDS\";\n }\n ```\n This serializer will generate JSON that looks like this:\n ```js\n {\n \"TITLE\": \"Rails is omakase\",\n \"BODY\": \"Yep. Omakase.\",\n \"COMMENT_IDS\": [ 1, 2, 3 ]\n }\n ```\n ## Tweaking the Default JSON\n If you just want to do some small tweaks on the default JSON,\n you can call super first and make the tweaks on the returned\n JSON.\n ```app/serializers/post.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer {\n serialize(snapshot, options) {\n let json = super.serialize(snapshot, options);\n json.subject = json.title;\n delete json.title;\n return json;\n }\n }\n ```\n @method serialize\n @public\n @param {Snapshot} snapshot\n @param {Object} options\n @return {Object} json\n */\n serialize(snapshot, options) {\n return this._super(...arguments);\n },\n /**\n You can use this method to customize the root keys serialized into the JSON.\n The hash property should be modified by reference (possibly using something like _.extend)\n By default the REST Serializer sends the modelName of a model, which is a camelized\n version of the name.\n For example, your server may expect underscored root objects.\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n import { decamelize } from '@ember/string';\n export default class ApplicationSerializer extends RESTSerializer {\n serializeIntoHash(data, type, record, options) {\n let root = decamelize(type.modelName);\n data[root] = this.serialize(record, options);\n }\n }\n ```\n @method serializeIntoHash\n @public\n @param {Object} hash\n @param {Model} typeClass\n @param {Snapshot} snapshot\n @param {Object} options\n */\n serializeIntoHash(hash, typeClass, snapshot, options) {\n let normalizedRootKey = this.payloadKeyFromModelName(typeClass.modelName);\n hash[normalizedRootKey] = this.serialize(snapshot, options);\n },\n /**\n You can use `payloadKeyFromModelName` to override the root key for an outgoing\n request. By default, the RESTSerializer returns a camelized version of the\n model's name.\n For a model called TacoParty, its `modelName` would be the string `taco-party`. The RESTSerializer\n will send it to the server with `tacoParty` as the root key in the JSON payload:\n ```js\n {\n \"tacoParty\": {\n \"id\": \"1\",\n \"location\": \"Matthew Beale's House\"\n }\n }\n ```\n For example, your server may expect dasherized root objects:\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n import { dasherize } from '@ember/string';\n export default class ApplicationSerializer extends RESTSerializer {\n payloadKeyFromModelName(modelName) {\n return dasherize(modelName);\n }\n }\n ```\n Given a `TacoParty` model, calling `save` on it would produce an outgoing\n request like:\n ```js\n {\n \"taco-party\": {\n \"id\": \"1\",\n \"location\": \"Matthew Beale's House\"\n }\n }\n ```\n @method payloadKeyFromModelName\n @public\n @param {String} modelName\n @return {String}\n */\n payloadKeyFromModelName(modelName) {\n return camelize(modelName);\n },\n /**\n You can use this method to customize how polymorphic objects are serialized.\n By default the REST Serializer creates the key by appending `Type` to\n the attribute and value from the model's camelcased model name.\n @method serializePolymorphicType\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializePolymorphicType(snapshot, json, relationship) {\n let key = relationship.key;\n let typeKey = this.keyForPolymorphicType(key, relationship.type, 'serialize');\n let belongsTo = snapshot.belongsTo(key);\n if (isNone(belongsTo)) {\n json[typeKey] = null;\n } else {\n json[typeKey] = camelize(belongsTo.modelName);\n }\n },\n /**\n You can use this method to customize how a polymorphic relationship should\n be extracted.\n @method extractPolymorphicRelationship\n @public\n @param {Object} relationshipType\n @param {Object} relationshipHash\n @param {Object} relationshipOptions\n @return {Object}\n */\n extractPolymorphicRelationship(relationshipType, relationshipHash, relationshipOptions) {\n let {\n key,\n resourceHash,\n relationshipMeta\n } = relationshipOptions;\n\n // A polymorphic belongsTo relationship can be present in the payload\n // either in the form where the `id` and the `type` are given:\n //\n // {\n // message: { id: 1, type: 'post' }\n // }\n //\n // or by the `id` and a `Type` attribute:\n //\n // {\n // message: 1,\n // messageType: 'post'\n // }\n //\n // The next code checks if the latter case is present and returns the\n // corresponding JSON-API representation. The former case is handled within\n // the base class JSONSerializer.\n let isPolymorphic = relationshipMeta.options.polymorphic;\n let typeProperty = this.keyForPolymorphicType(key, relationshipType, 'deserialize');\n if (isPolymorphic && resourceHash[typeProperty] !== undefined && typeof relationshipHash !== 'object') {\n let type = this.modelNameFromPayloadKey(resourceHash[typeProperty]);\n return {\n id: relationshipHash,\n type: type\n };\n }\n return this._super(...arguments);\n }\n});\nif (DEBUG) {\n RESTSerializer.reopen({\n warnMessageNoModelForKey(prop, typeKey) {\n return 'Encountered \"' + prop + '\" in payload, but no model was found for model name \"' + typeKey + '\" (resolved model name using ' + this.constructor.toString() + '.modelNameFromPayloadKey(\"' + prop + '\"))';\n }\n });\n}\nexport { EmbeddedRecordsMixin } from './-private';\nexport default RESTSerializer;","/**\n @module @ember-data/serializer\n*/\nimport { Transform } from './-private';\nexport default Transform;","/**\n @module @ember-data/store\n*/\n\nimport { registerWaiter } from '@ember/test';\nimport { DEBUG } from '@glimmer/env';\nimport Ember from 'ember';\n\n// TODO: expose Ember._Backburner as `import { _Backburner } from '@ember/runloop'` in ember-rfc176-data + emberjs/ember.js\n/*\n syncRelationships is used by the UI to grab updates from the graph\n and update the ManyArrays.\n\n We may be able to remove this once the new relationship layer is\n complete.\n*/\nconst backburner = new Ember._Backburner(['coalesce', 'sync', 'notify']);\nif (DEBUG) {\n registerWaiter(() => {\n return !backburner.currentInstance && !backburner.hasTimers();\n });\n}\nexport default backburner;","/**\n @module @ember-data/store\n*/\n\n// Used by the store to normalize IDs entering the store. Despite the fact\n// that developers may provide IDs as numbers (e.g., `store.findRecord('person', 1)`),\n// it is important that internally we use strings, since IDs may be serialized\n// and lose type information. For example, Ember's router may put a record's\n// ID into the URL, and if we later try to deserialize that URL and find the\n// corresponding record, we will not know if it is a string or a number.\n\nfunction coerceId(id) {\n if (id === null || id === undefined || id === '') {\n return null;\n }\n if (typeof id === 'string') {\n return id;\n }\n if (typeof id === 'symbol') {\n return id.toString();\n }\n return '' + id;\n}\nexport function ensureStringId(id) {\n let normalized = null;\n if (typeof id === 'string') {\n normalized = id.length > 0 ? id : null;\n } else if (typeof id === 'number' && !isNaN(id)) {\n normalized = '' + id;\n }\n if (normalized === null) {\n throw new Error(`Expected id to be a string or number, received ${String(id)}`);\n }\n return normalized;\n}\nexport default coerceId;","import { deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { DEBUG } from '@glimmer/env';\nimport { resolve } from 'rsvp';\n/**\n @module @ember-data/store\n*/\n\nexport function _bind(fn, ...args) {\n return function () {\n return fn.apply(undefined, args);\n };\n}\nexport function _guard(promise, test) {\n let guarded = promise.finally(() => {\n if (!test()) {\n guarded._subscribers.length = 0;\n }\n });\n return guarded;\n}\nexport function _objectIsAlive(object) {\n return !(get(object, 'isDestroyed') || get(object, 'isDestroying'));\n}\nexport function guardDestroyedStore(promise, store, label) {\n let token;\n if (DEBUG) {\n token = store._trackAsyncRequestStart(label);\n }\n let wrapperPromise = resolve(promise, label).then(_v => {\n if (!_objectIsAlive(store)) {\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n deprecate(`A Promise did not resolve by the time the store was destroyed. This will error in a future release.`, false, {\n id: 'ember-data:rsvp-unresolved-async',\n until: '5.0',\n for: '@ember-data/store',\n since: {\n available: '4.5',\n enabled: '4.5'\n }\n });\n }\n }\n return promise;\n });\n return _guard(wrapperPromise, () => {\n if (DEBUG) {\n store._trackAsyncRequestEnd(token);\n }\n return _objectIsAlive(store);\n });\n}","/**\n @module @ember-data/adapter/error\n*/\n\nconst SOURCE_POINTER_REGEXP = /^\\/?data\\/(attributes|relationships)\\/(.*)/;\nconst SOURCE_POINTER_PRIMARY_REGEXP = /^\\/?data/;\nconst PRIMARY_ATTRIBUTE_KEY = 'base';\nfunction makeArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\n/**\n Convert an hash of errors into an array with errors in JSON-API format.\n ```javascript\n import DS from 'ember-data';\n\n const { errorsHashToArray } = DS;\n\n let errors = {\n base: 'Invalid attributes on saving this record',\n name: 'Must be present',\n age: ['Must be present', 'Must be a number']\n };\n let errorsArray = errorsHashToArray(errors);\n // [\n // {\n // title: \"Invalid Document\",\n // detail: \"Invalid attributes on saving this record\",\n // source: { pointer: \"/data\" }\n // },\n // {\n // title: \"Invalid Attribute\",\n // detail: \"Must be present\",\n // source: { pointer: \"/data/attributes/name\" }\n // },\n // {\n // title: \"Invalid Attribute\",\n // detail: \"Must be present\",\n // source: { pointer: \"/data/attributes/age\" }\n // },\n // {\n // title: \"Invalid Attribute\",\n // detail: \"Must be a number\",\n // source: { pointer: \"/data/attributes/age\" }\n // }\n // ]\n ```\n @method errorsHashToArray\n @for @ember-data/adapter/error\n @static\n @public\n @param {Object} errors hash with errors as properties\n @return {Array} array of errors in JSON-API format\n*/\nexport function errorsHashToArray(errors) {\n let out = [];\n if (errors) {\n Object.keys(errors).forEach(key => {\n let messages = makeArray(errors[key]);\n for (let i = 0; i < messages.length; i++) {\n let title = 'Invalid Attribute';\n let pointer = `/data/attributes/${key}`;\n if (key === PRIMARY_ATTRIBUTE_KEY) {\n title = 'Invalid Document';\n pointer = `/data`;\n }\n out.push({\n title: title,\n detail: messages[i],\n source: {\n pointer: pointer\n }\n });\n }\n });\n }\n return out;\n}\n\n/**\n Convert an array of errors in JSON-API format into an object.\n\n ```javascript\n import DS from 'ember-data';\n\n const { errorsArrayToHash } = DS;\n\n let errorsArray = [\n {\n title: 'Invalid Attribute',\n detail: 'Must be present',\n source: { pointer: '/data/attributes/name' }\n },\n {\n title: 'Invalid Attribute',\n detail: 'Must be present',\n source: { pointer: '/data/attributes/age' }\n },\n {\n title: 'Invalid Attribute',\n detail: 'Must be a number',\n source: { pointer: '/data/attributes/age' }\n }\n ];\n\n let errors = errorsArrayToHash(errorsArray);\n // {\n // \"name\": [\"Must be present\"],\n // \"age\": [\"Must be present\", \"must be a number\"]\n // }\n ```\n\n @method errorsArrayToHash\n @static\n @for @ember-data/adapter/error\n @public\n @param {Array} errors array of errors in JSON-API format\n @return {Object}\n*/\nexport function errorsArrayToHash(errors) {\n let out = {};\n if (errors) {\n errors.forEach(error => {\n if (error.source && error.source.pointer) {\n let key = error.source.pointer.match(SOURCE_POINTER_REGEXP);\n if (key) {\n key = key[2];\n } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {\n key = PRIMARY_ATTRIBUTE_KEY;\n }\n if (key) {\n out[key] = out[key] || [];\n out[key].push(error.detail || error.title);\n }\n }\n });\n }\n return out;\n}","const Touching = Symbol('touching');\nexport const RequestPromise = Symbol('promise');\nfunction hasRecordIdentifier(op) {\n return 'recordIdentifier' in op;\n}\nexport default class RequestCache {\n constructor() {\n this._pending = Object.create(null);\n this._done = Object.create(null);\n this._subscriptions = Object.create(null);\n }\n enqueue(promise, queryRequest) {\n let query = queryRequest.data[0];\n if (hasRecordIdentifier(query)) {\n let lid = query.recordIdentifier.lid;\n let type = query.op === 'saveRecord' ? 'mutation' : 'query';\n if (!this._pending[lid]) {\n this._pending[lid] = [];\n }\n let request = {\n state: 'pending',\n request: queryRequest,\n type\n };\n request[Touching] = [query.recordIdentifier];\n request[RequestPromise] = promise;\n this._pending[lid].push(request);\n this._triggerSubscriptions(request);\n promise.then(result => {\n this._dequeue(lid, request);\n let finalizedRequest = {\n state: 'fulfilled',\n request: queryRequest,\n type,\n response: {\n data: result\n }\n };\n finalizedRequest[Touching] = request[Touching];\n this._addDone(finalizedRequest);\n this._triggerSubscriptions(finalizedRequest);\n }, error => {\n this._dequeue(lid, request);\n let finalizedRequest = {\n state: 'rejected',\n request: queryRequest,\n type,\n response: {\n data: error && error.error\n }\n };\n finalizedRequest[Touching] = request[Touching];\n this._addDone(finalizedRequest);\n this._triggerSubscriptions(finalizedRequest);\n });\n }\n }\n _triggerSubscriptions(req) {\n req[Touching].forEach(identifier => {\n if (this._subscriptions[identifier.lid]) {\n this._subscriptions[identifier.lid].forEach(callback => callback(req));\n }\n });\n }\n _dequeue(lid, request) {\n this._pending[lid] = this._pending[lid].filter(req => req !== request);\n }\n _addDone(request) {\n request[Touching].forEach(identifier => {\n if (!this._done[identifier.lid]) {\n this._done[identifier.lid] = [];\n }\n // TODO add support for multiple\n let requestDataOp = request.request.data[0].op;\n this._done[identifier.lid] = this._done[identifier.lid].filter(req => {\n // TODO add support for multiple\n let data;\n if (req.request.data instanceof Array) {\n data = req.request.data[0];\n } else {\n data = req.request.data;\n }\n return data.op !== requestDataOp;\n });\n this._done[identifier.lid].push(request);\n });\n }\n subscribeForRecord(identifier, callback) {\n if (!this._subscriptions[identifier.lid]) {\n this._subscriptions[identifier.lid] = [];\n }\n this._subscriptions[identifier.lid].push(callback);\n }\n getPendingRequestsForRecord(identifier) {\n if (this._pending[identifier.lid]) {\n return this._pending[identifier.lid];\n }\n return [];\n }\n getLastRequestForRecord(identifier) {\n let requests = this._done[identifier.lid];\n if (requests) {\n return requests[requests.length - 1];\n }\n return null;\n }\n}","import { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n/**\n This is a helper method that validates a JSON API top-level document\n\n The format of a document is described here:\n http://jsonapi.org/format/#document-top-level\n\n @internal\n*/\nfunction validateDocumentStructure(doc) {\n if (DEBUG) {\n let errors = [];\n if (!doc || typeof doc !== 'object') {\n errors.push('Top level of a JSON API document must be an object');\n } else {\n if (!('data' in doc) && !('errors' in doc) && !('meta' in doc)) {\n errors.push('One or more of the following keys must be present: \"data\", \"errors\", \"meta\".');\n } else {\n if ('data' in doc && 'errors' in doc) {\n errors.push('Top level keys \"errors\" and \"data\" cannot both be present in a JSON API document');\n }\n }\n if ('data' in doc) {\n if (!(doc.data === null || Array.isArray(doc.data) || typeof doc.data === 'object')) {\n errors.push('data must be null, an object, or an array');\n }\n }\n if ('meta' in doc) {\n if (typeof doc.meta !== 'object') {\n errors.push('meta must be an object');\n }\n }\n if ('errors' in doc) {\n if (!Array.isArray(doc.errors)) {\n errors.push('errors must be an array');\n }\n }\n if ('links' in doc) {\n if (typeof doc.links !== 'object') {\n errors.push('links must be an object');\n }\n }\n if ('jsonapi' in doc) {\n if (typeof doc.jsonapi !== 'object') {\n errors.push('jsonapi must be an object');\n }\n }\n if ('included' in doc) {\n if (typeof doc.included !== 'object') {\n errors.push('included must be an array');\n }\n }\n }\n assert(`Response must be normalized to a valid JSON API document:\\n\\t* ${errors.join('\\n\\t* ')}`, errors.length === 0);\n }\n}\nexport function normalizeResponseHelper(serializer, store, modelClass, payload, id, requestType) {\n let normalizedResponse = serializer ? serializer.normalizeResponse(store, modelClass, payload, id, requestType) : payload;\n validateDocumentStructure(normalizedResponse);\n return normalizedResponse;\n}","/**\n @module @ember-data/store\n*/\nimport { assert, deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { importSync } from '@embroider/macros';\nfunction schemaIsDSModel(schema) {\n return schema.isModel === true;\n}\n\n/**\n Snapshot is not directly instantiable.\n Instances are provided to a consuming application's\n adapters and serializers for certain requests.\n\n @class Snapshot\n @public\n*/\nexport default class Snapshot {\n /**\n * @method constructor\n * @constructor\n * @private\n * @param options\n * @param identifier\n * @param _store\n */\n constructor(options, identifier, _store) {\n this.__attributes = null;\n this._belongsToRelationships = Object.create(null);\n this._belongsToIds = Object.create(null);\n this._hasManyRelationships = Object.create(null);\n this._hasManyIds = Object.create(null);\n this._store = _store;\n let internalModel = this._internalModel = _store._instanceCache._internalModelForResource(identifier);\n this.modelName = identifier.type;\n\n /**\n The unique RecordIdentifier associated with this Snapshot.\n @property identifier\n @public\n @type {StableRecordIdentifier}\n */\n this.identifier = identifier;\n\n /*\n If the we do not yet have a record, then we are\n likely a snapshot being provided to a find request, so we\n populate __attributes lazily. Else, to preserve the \"moment\n in time\" in which a snapshot is created, we greedily grab\n the values.\n */\n if (internalModel.hasRecord) {\n this._attributes;\n }\n\n /**\n The id of the snapshot's underlying record\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postSnapshot.id; // => '1'\n ```\n @property id\n @type {String}\n @public\n */\n this.id = identifier.id;\n\n /**\n A hash of adapter options\n @property adapterOptions\n @type {Object}\n @public\n */\n this.adapterOptions = options.adapterOptions;\n\n /**\n If `include` was passed to the options hash for the request, the value\n would be available here.\n @property include\n @type {String|Array}\n @public\n */\n this.include = options.include;\n\n /**\n The name of the type of the underlying record for this snapshot, as a string.\n @property modelName\n @type {String}\n @public\n */\n this.modelName = identifier.type;\n if (internalModel.hasRecord) {\n this._changedAttributes = this._store._instanceCache.getRecordData(identifier).changedAttributes();\n }\n }\n\n /**\n The underlying record for this snapshot. Can be used to access methods and\n properties defined on the record.\n Example\n ```javascript\n let json = snapshot.record.toJSON();\n ```\n @property record\n @type {Model}\n @public\n */\n get record() {\n return this._store._instanceCache.getRecord(this.identifier);\n }\n get _attributes() {\n if (this.__attributes !== null) {\n return this.__attributes;\n }\n let record = this.record;\n let attributes = this.__attributes = Object.create(null);\n let attrs = Object.keys(this._store.getSchemaDefinitionService().attributesDefinitionFor(this.identifier));\n let recordData = this._store._instanceCache.getRecordData(this.identifier);\n attrs.forEach(keyName => {\n if (schemaIsDSModel(this._internalModel.modelClass)) {\n // if the schema is for a DSModel then the instance is too\n attributes[keyName] = get(record, keyName);\n } else {\n attributes[keyName] = recordData.getAttr(keyName);\n }\n });\n return attributes;\n }\n\n /**\n The type of the underlying record for this snapshot, as a Model.\n @property type\n @public\n @deprecated\n @type {Model}\n */\n\n get isNew() {\n return this._internalModel.isNew();\n }\n\n /**\n Returns the value of an attribute.\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postSnapshot.attr('author'); // => 'Tomster'\n postSnapshot.attr('title'); // => 'Ember.js rocks'\n ```\n Note: Values are loaded eagerly and cached when the snapshot is created.\n @method attr\n @param {String} keyName\n @return {Object} The attribute value or undefined\n @public\n */\n attr(keyName) {\n if (keyName in this._attributes) {\n return this._attributes[keyName];\n }\n assert(`Model '${this.identifier}' has no attribute named '${keyName}' defined.`, false);\n }\n\n /**\n Returns all attributes and their corresponding values.\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postSnapshot.attributes(); // => { author: 'Tomster', title: 'Ember.js rocks' }\n ```\n @method attributes\n @return {Object} All attributes of the current snapshot\n @public\n */\n attributes() {\n return {\n ...this._attributes\n };\n }\n\n /**\n Returns all changed attributes and their old and new values.\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postModel.set('title', 'Ember.js rocks!');\n postSnapshot.changedAttributes(); // => { title: ['Ember.js rocks', 'Ember.js rocks!'] }\n ```\n @method changedAttributes\n @return {Object} All changed attributes of the current snapshot\n @public\n */\n changedAttributes() {\n let changedAttributes = Object.create(null);\n if (!this._changedAttributes) {\n return changedAttributes;\n }\n let changedAttributeKeys = Object.keys(this._changedAttributes);\n for (let i = 0, length = changedAttributeKeys.length; i < length; i++) {\n let key = changedAttributeKeys[i];\n changedAttributes[key] = this._changedAttributes[key].slice();\n }\n return changedAttributes;\n }\n\n /**\n Returns the current value of a belongsTo relationship.\n `belongsTo` takes an optional hash of options as a second parameter,\n currently supported options are:\n - `id`: set to `true` if you only want the ID of the related record to be\n returned.\n Example\n ```javascript\n // store.push('post', { id: 1, title: 'Hello World' });\n // store.createRecord('comment', { body: 'Lorem ipsum', post: post });\n commentSnapshot.belongsTo('post'); // => Snapshot\n commentSnapshot.belongsTo('post', { id: true }); // => '1'\n // store.push('comment', { id: 1, body: 'Lorem ipsum' });\n commentSnapshot.belongsTo('post'); // => undefined\n ```\n Calling `belongsTo` will return a new Snapshot as long as there's any known\n data for the relationship available, such as an ID. If the relationship is\n known but unset, `belongsTo` will return `null`. If the contents of the\n relationship is unknown `belongsTo` will return `undefined`.\n Note: Relationships are loaded lazily and cached upon first access.\n @method belongsTo\n @param {String} keyName\n @param {Object} [options]\n @public\n @return {(Snapshot|String|null|undefined)} A snapshot or ID of a known\n relationship or null if the relationship is known but unset. undefined\n will be returned if the contents of the relationship is unknown.\n */\n belongsTo(keyName, options) {\n let returnModeIsId = !!(options && options.id);\n let inverseInternalModel;\n let result;\n let store = this._internalModel.store;\n if (returnModeIsId === true && keyName in this._belongsToIds) {\n return this._belongsToIds[keyName];\n }\n if (returnModeIsId === false && keyName in this._belongsToRelationships) {\n return this._belongsToRelationships[keyName];\n }\n let relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n })[keyName];\n assert(`Model '${this.identifier}' has no belongsTo relationship named '${keyName}' defined.`, relationshipMeta && relationshipMeta.kind === 'belongsTo');\n\n // TODO @runspired it seems this code branch would not work with CUSTOM_MODEL_CLASSes\n // this check is not a regression in behavior because relationships don't currently\n // function without access to intimate API contracts between RecordData and InternalModel.\n // This is a requirement we should fix as soon as the relationship layer does not require\n // this intimate API usage.\n if (!true /* HAS_RECORD_DATA_PACKAGE */) {\n assert(`snapshot.belongsTo only supported when using the package @ember-data/record-data`);\n }\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n const {\n identifier\n } = this;\n const relationship = graphFor(this._store).get(identifier, keyName);\n assert(`You looked up the ${keyName} belongsTo relationship for { type: ${identifier.type}, id: ${identifier.id}, lid: ${identifier.lid} but no such relationship was found.`, relationship);\n assert(`You looked up the ${keyName} belongsTo relationship for { type: ${identifier.type}, id: ${identifier.id}, lid: ${identifier.lid} but that relationship is a hasMany.`, relationship.definition.kind === 'belongsTo');\n let value = relationship.getData();\n let data = value && value.data;\n inverseInternalModel = data ? store._instanceCache._internalModelForResource(data) : null;\n if (value && value.data !== undefined) {\n if (inverseInternalModel && !inverseInternalModel.isDeleted()) {\n if (returnModeIsId) {\n result = inverseInternalModel.id;\n } else {\n result = store._instanceCache.createSnapshot(inverseInternalModel.identifier);\n }\n } else {\n result = null;\n }\n }\n if (returnModeIsId) {\n this._belongsToIds[keyName] = result;\n } else {\n this._belongsToRelationships[keyName] = result;\n }\n return result;\n }\n\n /**\n Returns the current value of a hasMany relationship.\n `hasMany` takes an optional hash of options as a second parameter,\n currently supported options are:\n - `ids`: set to `true` if you only want the IDs of the related records to be\n returned.\n Example\n ```javascript\n // store.push('post', { id: 1, title: 'Hello World', comments: [2, 3] });\n postSnapshot.hasMany('comments'); // => [Snapshot, Snapshot]\n postSnapshot.hasMany('comments', { ids: true }); // => ['2', '3']\n // store.push('post', { id: 1, title: 'Hello World' });\n postSnapshot.hasMany('comments'); // => undefined\n ```\n Note: Relationships are loaded lazily and cached upon first access.\n @method hasMany\n @param {String} keyName\n @param {Object} [options]\n @public\n @return {(Array|undefined)} An array of snapshots or IDs of a known\n relationship or an empty array if the relationship is known but unset.\n undefined will be returned if the contents of the relationship is unknown.\n */\n hasMany(keyName, options) {\n let returnModeIsIds = !!(options && options.ids);\n let results;\n let cachedIds = this._hasManyIds[keyName];\n let cachedSnapshots = this._hasManyRelationships[keyName];\n if (returnModeIsIds === true && keyName in this._hasManyIds) {\n return cachedIds;\n }\n if (returnModeIsIds === false && keyName in this._hasManyRelationships) {\n return cachedSnapshots;\n }\n let store = this._internalModel.store;\n let relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n })[keyName];\n assert(`Model '${this.identifier}' has no hasMany relationship named '${keyName}' defined.`, relationshipMeta && relationshipMeta.kind === 'hasMany');\n\n // TODO @runspired it seems this code branch would not work with CUSTOM_MODEL_CLASSes\n // this check is not a regression in behavior because relationships don't currently\n // function without access to intimate API contracts between RecordData and InternalModel.\n // This is a requirement we should fix as soon as the relationship layer does not require\n // this intimate API usage.\n if (!true /* HAS_RECORD_DATA_PACKAGE */) {\n assert(`snapshot.hasMany only supported when using the package @ember-data/record-data`);\n }\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n const {\n identifier\n } = this;\n const relationship = graphFor(this._store).get(identifier, keyName);\n assert(`You looked up the ${keyName} hasMany relationship for { type: ${identifier.type}, id: ${identifier.id}, lid: ${identifier.lid} but no such relationship was found.`, relationship);\n assert(`You looked up the ${keyName} hasMany relationship for { type: ${identifier.type}, id: ${identifier.id}, lid: ${identifier.lid} but that relationship is a belongsTo.`, relationship.definition.kind === 'hasMany');\n let value = relationship.getData();\n if (value.data) {\n results = [];\n value.data.forEach(member => {\n let internalModel = store._instanceCache._internalModelForResource(member);\n if (!internalModel.isDeleted()) {\n if (returnModeIsIds) {\n results.push(member.id || null);\n } else {\n results.push(store._instanceCache.createSnapshot(internalModel.identifier));\n }\n }\n });\n }\n\n // we assign even if `undefined` so that we don't reprocess the relationship\n // on next access. This works with the `keyName in` checks above.\n if (returnModeIsIds) {\n this._hasManyIds[keyName] = results;\n } else {\n this._hasManyRelationships[keyName] = results;\n }\n return results;\n }\n\n /**\n Iterates through all the attributes of the model, calling the passed\n function on each attribute.\n Example\n ```javascript\n snapshot.eachAttribute(function(name, meta) {\n // ...\n });\n ```\n @method eachAttribute\n @param {Function} callback the callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @public\n */\n eachAttribute(callback, binding) {\n let attrDefs = this._store.getSchemaDefinitionService().attributesDefinitionFor(this.identifier);\n Object.keys(attrDefs).forEach(key => {\n callback.call(binding, key, attrDefs[key]);\n });\n }\n\n /**\n Iterates through all the relationships of the model, calling the passed\n function on each relationship.\n Example\n ```javascript\n snapshot.eachRelationship(function(name, relationship) {\n // ...\n });\n ```\n @method eachRelationship\n @param {Function} callback the callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @public\n */\n eachRelationship(callback, binding) {\n let relationshipDefs = this._store.getSchemaDefinitionService().relationshipsDefinitionFor(this.identifier);\n Object.keys(relationshipDefs).forEach(key => {\n callback.call(binding, key, relationshipDefs[key]);\n });\n }\n\n /**\n Serializes the snapshot using the serializer for the model.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default Adapter.extend({\n createRecord(store, type, snapshot) {\n let data = snapshot.serialize({ includeId: true });\n let url = `/${type.modelName}`;\n return fetch(url, {\n method: 'POST',\n body: data,\n }).then((response) => response.json())\n }\n });\n ```\n @method serialize\n @param {Object} options\n @return {Object} an object whose values are primitive JSON values only\n @public\n */\n serialize(options) {\n const serializer = this._store.serializerFor(this.modelName);\n assert(`Cannot serialize record, no serializer found`, serializer);\n return serializer.serialize(this, options);\n }\n}\nif (true /* DEPRECATE_SNAPSHOT_MODEL_CLASS_ACCESS */) {\n Object.defineProperty(Snapshot.prototype, 'type', {\n get() {\n deprecate(`Using Snapshot.type to access the ModelClass for a record is deprecated. Use store.modelFor() instead.`, false, {\n id: 'ember-data:deprecate-snapshot-model-class-access',\n until: '5.0',\n for: 'ember-data',\n since: {\n available: '4.5.0',\n enabled: '4.5.0'\n }\n });\n return this._internalModel.modelClass;\n }\n });\n}","// provided for additional debuggability\nexport const DEBUG_CLIENT_ORIGINATED = Symbol('record-originated-on-client');\nexport const DEBUG_IDENTIFIER_BUCKET = Symbol('identifier-bucket');","import { DEBUG } from '@glimmer/env';\nimport { DEBUG_IDENTIFIER_BUCKET } from './identifer-debug-consts';\n\n/*\n DEBUG only fields. Keeping this in a separate interface\n which Typescript then merges with the class definition allow us to\n have a DEBUG only property without paying the cost of that field being\n present and initialized (usually to void 0) in production.\n*/\n\n/**\n * @class WeakCache\n * @extends WeakMap\n * @internal\n */\nclass WeakCache extends WeakMap {\n constructor(_fieldName) {\n super();\n if (DEBUG) {\n this._fieldName = _fieldName;\n this._symbol = Symbol.for(_fieldName);\n }\n }\n\n /**\n * Retrieve the value for a key from the WeakCache with the expectation\n * that the key exists. Throws the error generated by _expectMsg in DEBUG if\n * that key does not exist.\n *\n * @method getWithError\n * @param obj\n * @internal\n */\n getWithError(obj) {\n let v = this.get(obj);\n if (DEBUG && v === undefined) {\n throw new Error(this._expectMsg(obj));\n }\n return v;\n }\n\n /**\n * Retrieve the value for a key from the WeakCache, or generate one\n * using the configured _generator method if no value is yet present.\n *\n * @method lookup\n * @param obj\n * @internal\n */\n lookup(obj) {\n let v = super.get(obj);\n if (v === undefined) {\n v = this._generator(obj);\n super.set(obj, v);\n if (DEBUG) {\n if (obj[DEBUG_IDENTIFIER_BUCKET] && this._fieldName !== 'identifier-proxy-target') {\n const target = obj[Symbol.for('identifier-proxy-target')];\n target[this._symbol] = v;\n } else {\n obj[this._symbol] = v;\n }\n }\n }\n return v;\n }\n}\nclass DebugWeakCache extends WeakCache {\n set(obj, value) {\n if (DEBUG && super.has(obj) && this.get(obj) !== value) {\n throw new Error(`${Object.prototype.toString.call(obj)} was already assigned a value for ${this._fieldName}`);\n }\n if (DEBUG) {\n if (obj[DEBUG_IDENTIFIER_BUCKET] && this._fieldName !== 'identifier-proxy-target') {\n const target = obj[Symbol.for('identifier-proxy-target')];\n target[this._symbol] = value;\n // TODO the Proxy check here is entirely for ember-m3\n // as it's attribute access tests fail since the symbol\n // is an unexpected key received by it's proxies.\n // we should address this upstream.\n } else if (obj.constructor?.toString?.() !== 'MegamorphicModel') {\n try {\n obj[this._symbol] = value;\n } catch {\n // some keys are proxies that can't accept symbol values\n // for instance records from ember-m3\n }\n }\n }\n return super.set(obj, value);\n }\n}\nexport default DEBUG ? DebugWeakCache : WeakCache;","/**\n * @module @ember-data/store\n */\nimport { assert, deprecate, warn } from '@ember/debug';\nimport { _backburner as emberBackburner } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\nimport { default as RSVP, resolve } from 'rsvp';\nimport coerceId from './coerce-id';\nimport { _bind, _guard, _objectIsAlive, guardDestroyedStore } from './common';\nimport { errorsArrayToHash } from './errors-utils';\nimport RequestCache from './request-cache';\nimport { normalizeResponseHelper } from './serializer-response';\nimport Snapshot from './snapshot';\nimport WeakCache from './weak-cache';\nfunction payloadIsNotBlank(adapterPayload) {\n if (Array.isArray(adapterPayload)) {\n return true;\n } else {\n return Object.keys(adapterPayload || {}).length !== 0;\n }\n}\nexport const SaveOp = Symbol('SaveOp');\n/**\n * Manages the state of network requests initiated by the store\n *\n * @class FetchManager\n * @private\n */\nexport default class FetchManager {\n // saves which are pending in the runloop\n\n // fetches pending in the runloop, waiting to be coalesced\n\n constructor(_store) {\n this._store = _store;\n // used to keep track of all the find requests that need to be coalesced\n this._pendingFetch = new Map();\n this._pendingSave = [];\n this.requestCache = new RequestCache();\n this.isDestroyed = false;\n }\n\n /**\n This method is called by `record.save`, and gets passed a\n resolver for the promise that `record.save` returns.\n It schedules saving to happen at the end of the run loop.\n @internal\n */\n scheduleSave(identifier, options) {\n let promiseLabel = 'DS: Model#save ' + this;\n let resolver = RSVP.defer(promiseLabel);\n let query = {\n op: 'saveRecord',\n recordIdentifier: identifier,\n options\n };\n let queryRequest = {\n data: [query]\n };\n let snapshot = new Snapshot(options, identifier, this._store);\n let pendingSaveItem = {\n snapshot: snapshot,\n resolver: resolver,\n identifier,\n options,\n queryRequest\n };\n this._pendingSave.push(pendingSaveItem);\n emberBackburner.scheduleOnce('actions', this, this._flushPendingSaves);\n this.requestCache.enqueue(resolver.promise, pendingSaveItem.queryRequest);\n return resolver.promise;\n }\n _flushPendingSave(pending) {\n let {\n snapshot,\n resolver,\n identifier,\n options\n } = pending;\n let adapter = this._store.adapterFor(identifier.type);\n let operation = options[SaveOp];\n let internalModel = snapshot._internalModel;\n let modelName = snapshot.modelName;\n let store = this._store;\n let modelClass = store.modelFor(modelName);\n assert(`You tried to update a record but you have no adapter (for ${modelName})`, adapter);\n assert(`You tried to update a record but your adapter (for ${modelName}) does not implement '${operation}'`, typeof adapter[operation] === 'function');\n let promise = resolve().then(() => adapter[operation](store, modelClass, snapshot));\n let serializer = store.serializerFor(modelName);\n let label = `DS: Extract and notify about ${operation} completion of ${internalModel}`;\n assert(`Your adapter's '${operation}' method must return a value, but it returned 'undefined'`, promise !== undefined);\n promise = _guard(guardDestroyedStore(promise, store, label), _bind(_objectIsAlive, internalModel)).then(adapterPayload => {\n if (!_objectIsAlive(internalModel)) {\n if (true /* DEPRECATE_RSVP_PROMISE */) {\n deprecate(`A Promise while saving ${modelName} did not resolve by the time your model was destroyed. This will error in a future release.`, false, {\n id: 'ember-data:rsvp-unresolved-async',\n until: '5.0',\n for: '@ember-data/store',\n since: {\n available: '4.5',\n enabled: '4.5'\n }\n });\n }\n }\n if (adapterPayload) {\n return normalizeResponseHelper(serializer, store, modelClass, adapterPayload, snapshot.id, operation);\n }\n }, function (error) {\n if (error && error.isAdapterError === true && error.code === 'InvalidError') {\n let parsedErrors = error.errors;\n\n // TODO deprecate extractErrors being called and/or make it part of the public interface\n if (serializer && typeof serializer.extractErrors === 'function') {\n parsedErrors = serializer.extractErrors(store, modelClass, error, snapshot.id);\n } else {\n parsedErrors = errorsArrayToHash(error.errors);\n }\n throw {\n error,\n parsedErrors\n };\n } else {\n throw {\n error\n };\n }\n }, label);\n resolver.resolve(promise);\n }\n\n /**\n This method is called at the end of the run loop, and\n flushes any records passed into `scheduleSave`\n @method flushPendingSave\n @internal\n */\n _flushPendingSaves() {\n let pending = this._pendingSave.slice();\n this._pendingSave = [];\n for (let i = 0, j = pending.length; i < j; i++) {\n let pendingItem = pending[i];\n this._flushPendingSave(pendingItem);\n }\n }\n scheduleFetch(identifier, options) {\n // TODO Probably the store should pass in the query object\n let shouldTrace = DEBUG && this._store.generateStackTracesForTrackedRequests;\n let query = {\n op: 'findRecord',\n recordIdentifier: identifier,\n options\n };\n let queryRequest = {\n data: [query]\n };\n let pendingFetch = this.getPendingFetch(identifier, options);\n if (pendingFetch) {\n return pendingFetch;\n }\n let id = identifier.id;\n let modelName = identifier.type;\n let resolver = RSVP.defer(`Fetching ${modelName}' with id: ${id}`);\n let pendingFetchItem = {\n identifier,\n resolver,\n options,\n queryRequest\n };\n if (DEBUG) {\n if (shouldTrace) {\n let trace;\n try {\n throw new Error(`Trace Origin for scheduled fetch for ${modelName}:${id}.`);\n } catch (e) {\n trace = e;\n }\n\n // enable folks to discover the origin of this findRecord call when\n // debugging. Ideally we would have a tracked queue for requests with\n // labels or local IDs that could be used to merge this trace with\n // the trace made available when we detect an async leak\n pendingFetchItem.trace = trace;\n }\n }\n let resolverPromise = resolver.promise;\n\n // TODO replace with some form of record state cache\n const store = this._store;\n const internalModel = store._instanceCache.getInternalModel(identifier);\n const isLoading = !internalModel.isLoaded; // we don't use isLoading directly because we are the request\n\n const promise = resolverPromise.then(payload => {\n // ensure that regardless of id returned we assign to the correct record\n if (payload.data && !Array.isArray(payload.data)) {\n payload.data.lid = identifier.lid;\n }\n\n // additional data received in the payload\n // may result in the merging of identifiers (and thus records)\n let potentiallyNewIm = store._push(payload);\n if (potentiallyNewIm && !Array.isArray(potentiallyNewIm)) {\n return potentiallyNewIm;\n }\n return identifier;\n }, error => {\n if (internalModel.isEmpty || isLoading) {\n internalModel.unloadRecord();\n }\n throw error;\n });\n if (this._pendingFetch.size === 0) {\n emberBackburner.schedule('actions', this, this.flushAllPendingFetches);\n }\n let fetches = this._pendingFetch;\n if (!fetches.has(modelName)) {\n fetches.set(modelName, []);\n }\n fetches.get(modelName).push(pendingFetchItem);\n pendingFetchItem.promise = promise;\n this.requestCache.enqueue(resolverPromise, pendingFetchItem.queryRequest);\n return promise;\n }\n _fetchRecord(fetchItem) {\n let identifier = fetchItem.identifier;\n let modelName = identifier.type;\n let adapter = this._store.adapterFor(modelName);\n assert(`You tried to find a record but you have no adapter (for ${modelName})`, adapter);\n assert(`You tried to find a record but your adapter (for ${modelName}) does not implement 'findRecord'`, typeof adapter.findRecord === 'function');\n let snapshot = new Snapshot(fetchItem.options, identifier, this._store);\n let klass = this._store.modelFor(identifier.type);\n let id = identifier.id;\n let label = `DS: Handle Adapter#findRecord of '${modelName}' with id: '${id}'`;\n let promise = guardDestroyedStore(resolve().then(() => {\n return adapter.findRecord(this._store, klass, identifier.id, snapshot);\n }), this._store, label).then(adapterPayload => {\n assert(`You made a 'findRecord' request for a '${modelName}' with id '${id}', but the adapter's response did not have any data`, !!payloadIsNotBlank(adapterPayload));\n let serializer = this._store.serializerFor(modelName);\n let payload = normalizeResponseHelper(serializer, this._store, klass, adapterPayload, id, 'findRecord');\n assert(`Ember Data expected the primary data returned from a 'findRecord' response to be an object but instead it found an array.`, !Array.isArray(payload.data));\n assert(`The 'findRecord' request for ${modelName}:${id} resolved indicating success but contained no primary data. To indicate a 404 not found you should either reject the promise returned by the adapter's findRecord method or throw a NotFoundError.`, 'data' in payload && payload.data !== null && typeof payload.data === 'object');\n warn(`You requested a record of type '${modelName}' with id '${id}' but the adapter returned a payload with primary data having an id of '${payload.data.id}'. Use 'store.findRecord()' when the requested id is the same as the one returned by the adapter. In other cases use 'store.queryRecord()' instead.`, coerceId(payload.data.id) === coerceId(id), {\n id: 'ds.store.findRecord.id-mismatch'\n });\n return payload;\n }, error => {\n throw error;\n }, `DS: Extract payload of '${modelName}'`);\n fetchItem.resolver.resolve(promise);\n }\n\n // TODO should probably refactor expectedSnapshots to be identifiers\n handleFoundRecords(seeking, coalescedPayload, expectedSnapshots) {\n // resolve found records\n let found = Object.create(null);\n let payloads = coalescedPayload.data;\n let coalescedIncluded = coalescedPayload.included || [];\n for (let i = 0, l = payloads.length; i < l; i++) {\n let payload = payloads[i];\n let pair = seeking[payload.id];\n found[payload.id] = payload;\n let included = coalescedIncluded.concat(payloads);\n\n // TODO remove original data from included\n if (pair) {\n let resolver = pair.resolver;\n resolver.resolve({\n data: payload,\n included\n });\n }\n }\n\n // reject missing records\n\n // TODO NOW clean this up to refer to payloads\n let missingSnapshots = [];\n for (let i = 0, l = expectedSnapshots.length; i < l; i++) {\n let snapshot = expectedSnapshots[i];\n assertIsString(snapshot.id);\n\n // We know id is a string because you can't fetch\n // without one.\n if (!found[snapshot.id]) {\n missingSnapshots.push(snapshot);\n }\n }\n if (missingSnapshots.length) {\n warn('Ember Data expected to find records with the following ids in the adapter response but they were missing: [ \"' + missingSnapshots.map(r => r.id).join('\", \"') + '\" ]', false, {\n id: 'ds.store.missing-records-from-adapter'\n });\n this.rejectFetchedItems(seeking, missingSnapshots);\n }\n }\n rejectFetchedItems(seeking, snapshots, error) {\n for (let i = 0, l = snapshots.length; i < l; i++) {\n let snapshot = snapshots[i];\n assertIsString(snapshot.id);\n // TODO refactor to identifier.lid to avoid this cast to string\n // we can do this case because you can only fetch an identifier\n // that has an ID\n let pair = seeking[snapshot.id];\n if (pair) {\n pair.resolver.reject(error || new Error(`Expected: '<${snapshot.modelName}:${snapshot.id}>' to be present in the adapter provided payload, but it was not found.`));\n }\n }\n }\n _findMany(adapter, store, modelName, snapshots, identifiers, optionsMap) {\n let modelClass = store.modelFor(modelName); // `adapter.findMany` gets the modelClass still\n let ids = snapshots.map(s => s.id);\n let promise = adapter.findMany(store, modelClass, ids, snapshots);\n let label = `DS: Handle Adapter#findMany of '${modelName}'`;\n if (promise === undefined) {\n throw new Error('adapter.findMany returned undefined, this was very likely a mistake');\n }\n promise = guardDestroyedStore(promise, store, label);\n return promise.then(adapterPayload => {\n assert(`You made a 'findMany' request for '${modelName}' records with ids '[${ids}]', but the adapter's response did not have any data`, !!payloadIsNotBlank(adapterPayload));\n let serializer = store.serializerFor(modelName);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findMany');\n return payload;\n }, null, `DS: Extract payload of ${modelName}`);\n }\n _processCoalescedGroup(seeking, group, adapter, optionsMap, modelName) {\n //TODO check what happened with identifiers here\n let totalInGroup = group.length;\n let ids = new Array(totalInGroup);\n let groupedSnapshots = new Array(totalInGroup);\n for (let j = 0; j < totalInGroup; j++) {\n groupedSnapshots[j] = group[j];\n ids[j] = groupedSnapshots[j].id;\n }\n let store = this._store;\n if (totalInGroup > 1) {\n this._findMany(adapter, store, modelName, group, groupedSnapshots, optionsMap).then(payloads => {\n this.handleFoundRecords(seeking, payloads, groupedSnapshots);\n }).catch(error => {\n this.rejectFetchedItems(seeking, groupedSnapshots, error);\n });\n } else if (ids.length === 1) {\n let pair = seeking[groupedSnapshots[0].id];\n this._fetchRecord(pair);\n } else {\n assert(\"You cannot return an empty array from adapter's method groupRecordsForFindMany\", false);\n }\n }\n _flushPendingFetchForType(pendingFetchItems, modelName) {\n let adapter = this._store.adapterFor(modelName);\n let shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;\n let totalItems = pendingFetchItems.length;\n let identifiers = new Array(totalItems);\n let seeking = Object.create(null);\n let optionsMap = new WeakCache(DEBUG ? 'fetch-options' : '');\n for (let i = 0; i < totalItems; i++) {\n let pendingItem = pendingFetchItems[i];\n let identifier = pendingItem.identifier;\n identifiers[i] = identifier;\n optionsMap.set(identifier, pendingItem.options);\n seeking[identifier.id] = pendingItem;\n }\n if (shouldCoalesce) {\n // TODO: Improve records => snapshots => records => snapshots\n //\n // We want to provide records to all store methods and snapshots to all\n // adapter methods. To make sure we're doing that we're providing an array\n // of snapshots to adapter.groupRecordsForFindMany(), which in turn will\n // return grouped snapshots instead of grouped records.\n //\n // But since the _findMany() finder is a store method we need to get the\n // records from the grouped snapshots even though the _findMany() finder\n // will once again convert the records to snapshots for adapter.findMany()\n let snapshots = new Array(totalItems);\n for (let i = 0; i < totalItems; i++) {\n // we know options is in the map due to having just set it above\n // but TS doesn't know so we cast it\n let options = optionsMap.get(identifiers[i]);\n snapshots[i] = new Snapshot(options, identifiers[i], this._store);\n }\n let groups;\n if (adapter.groupRecordsForFindMany) {\n groups = adapter.groupRecordsForFindMany(this._store, snapshots);\n } else {\n groups = [snapshots];\n }\n for (let i = 0, l = groups.length; i < l; i++) {\n this._processCoalescedGroup(seeking, groups[i], adapter, optionsMap, modelName);\n }\n } else {\n for (let i = 0; i < totalItems; i++) {\n this._fetchRecord(pendingFetchItems[i]);\n }\n }\n }\n getPendingFetch(identifier, options) {\n let pendingFetches = this._pendingFetch.get(identifier.type);\n\n // We already have a pending fetch for this\n if (pendingFetches) {\n let matchingPendingFetch = pendingFetches.find(fetch => fetch.identifier === identifier);\n if (matchingPendingFetch && isSameRequest(options, matchingPendingFetch.options)) {\n return matchingPendingFetch.promise;\n }\n }\n }\n flushAllPendingFetches() {\n if (this.isDestroyed) {\n return;\n }\n this._pendingFetch.forEach(this._flushPendingFetchForType, this);\n this._pendingFetch.clear();\n }\n destroy() {\n this.isDestroyed = true;\n }\n}\nfunction assertIsString(id) {\n if (DEBUG) {\n if (typeof id !== 'string') {\n throw new Error(`Cannot fetch record without an id`);\n }\n }\n}\n\n// this function helps resolve whether we have a pending request that we should use instead\n// TODO @runspired @needsTest removing this did not cause any test failures\nfunction isSameRequest(options = {}, reqOptions = {}) {\n return options.include === reqOptions.include;\n}","import { assert } from '@ember/debug';\nimport { Promise } from 'rsvp';\nimport { guardDestroyedStore } from './common';\nimport { normalizeResponseHelper } from './serializer-response';\n\n/**\n @module @ember-data/store\n*/\n\nfunction payloadIsNotBlank(adapterPayload) {\n if (Array.isArray(adapterPayload)) {\n return true;\n } else {\n return Object.keys(adapterPayload || {}).length;\n }\n}\nexport function _findAll(adapter, store, modelName, options) {\n let modelClass = store.modelFor(modelName); // adapter.findAll depends on the class\n let recordArray = store.peekAll(modelName);\n let snapshotArray = recordArray._createSnapshot(options);\n let promise = Promise.resolve().then(() => adapter.findAll(store, modelClass, null, snapshotArray));\n let label = 'DS: Handle Adapter#findAll of ' + modelClass;\n promise = guardDestroyedStore(promise, store, label);\n return promise.then(adapterPayload => {\n assert(`You made a 'findAll' request for '${modelName}' records, but the adapter's response did not have any data`, payloadIsNotBlank(adapterPayload));\n let serializer = store.serializerFor(modelName);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findAll');\n store._push(payload);\n store.recordArrayManager._didUpdateAll(modelName);\n return recordArray;\n }, null, 'DS: Extract payload of findAll ${modelName}');\n}\nexport function _query(adapter, store, modelName, query, recordArray, options) {\n let modelClass = store.modelFor(modelName); // adapter.query needs the class\n\n recordArray = recordArray || store.recordArrayManager.createAdapterPopulatedRecordArray(modelName, query);\n let promise = Promise.resolve().then(() => adapter.query(store, modelClass, query, recordArray, options));\n let label = `DS: Handle Adapter#query of ${modelName}`;\n promise = guardDestroyedStore(promise, store, label);\n return promise.then(adapterPayload => {\n let serializer = store.serializerFor(modelName);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'query');\n let identifiers = store._push(payload);\n assert('The response to store.query is expected to be an array but it was a single record. Please wrap your response in an array or use `store.queryRecord` to query for a single record.', Array.isArray(identifiers));\n if (recordArray) {\n recordArray._setIdentifiers(identifiers, payload);\n } else {\n recordArray = store.recordArrayManager.createAdapterPopulatedRecordArray(modelName, query, identifiers, payload);\n }\n return recordArray;\n }, null, `DS: Extract payload of query ${modelName}`);\n}\nexport function _queryRecord(adapter, store, modelName, query, options) {\n let modelClass = store.modelFor(modelName); // adapter.queryRecord needs the class\n let promise = Promise.resolve().then(() => adapter.queryRecord(store, modelClass, query, options));\n let label = `DS: Handle Adapter#queryRecord of ${modelName}`;\n promise = guardDestroyedStore(promise, store, label);\n return promise.then(adapterPayload => {\n let serializer = store.serializerFor(modelName);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'queryRecord');\n assert(`Expected the primary data returned by the serializer for a 'queryRecord' response to be a single object or null but instead it was an array.`, !Array.isArray(payload.data));\n return store._push(payload);\n }, null, `DS: Extract payload of queryRecord ${modelName}`);\n}","import { dasherize } from '@ember/string';\n\n/**\n @module @ember-data/store\n*/\n\n// All modelNames are dasherized internally. Changing this function may\n// require changes to other normalization hooks (such as typeForRoot).\n\n/**\n This method normalizes a modelName into the format Ember Data uses\n internally by dasherizing it.\n\n @method normalizeModelName\n @static\n @public\n @for @ember-data/store\n @param {String} modelName\n @return {String} normalizedModelName\n*/\nexport default function normalizeModelName(modelName) {\n return dasherize(modelName);\n}","export default function isNonEmptyString(str) {\n return typeof str === 'string' && str.length > 0;\n}","/**\n @module @ember-data/store\n*/\nimport { assert, warn } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { getOwnConfig, macroCondition } from '@embroider/macros';\nimport coerceId from './coerce-id';\nimport { DEBUG_CLIENT_ORIGINATED, DEBUG_IDENTIFIER_BUCKET } from './identifer-debug-consts';\nimport normalizeModelName from './normalize-model-name';\nimport isNonEmptyString from './utils/is-non-empty-string';\nimport installPolyfill from './utils/uuid-polyfill';\nimport WeakCache from './weak-cache';\nconst IDENTIFIERS = new WeakSet();\nexport function isStableIdentifier(identifier) {\n return IDENTIFIERS.has(identifier);\n}\nconst isFastBoot = typeof FastBoot !== 'undefined';\nconst _crypto = isFastBoot ? FastBoot.require('crypto') : window.crypto;\nif (macroCondition(getOwnConfig().polyfillUUID)) {\n installPolyfill();\n}\nfunction uuidv4() {\n return _crypto.randomUUID();\n}\nfunction freeze(obj) {\n if (typeof Object.freeze === 'function') {\n return Object.freeze(obj);\n }\n return obj;\n}\nlet configuredForgetMethod;\nlet configuredGenerationMethod;\nlet configuredResetMethod;\nlet configuredUpdateMethod;\nexport function setIdentifierGenerationMethod(method) {\n configuredGenerationMethod = method;\n}\nexport function setIdentifierUpdateMethod(method) {\n configuredUpdateMethod = method;\n}\nexport function setIdentifierForgetMethod(method) {\n configuredForgetMethod = method;\n}\nexport function setIdentifierResetMethod(method) {\n configuredResetMethod = method;\n}\nfunction defaultGenerationMethod(data, bucket) {\n if ('lid' in data && isNonEmptyString(data.lid)) {\n return data.lid;\n }\n if ('id' in data) {\n let {\n type,\n id\n } = data;\n // TODO: add test for id not a string\n if (isNonEmptyString(coerceId(id))) {\n return `@lid:${normalizeModelName(type)}-${id}`;\n }\n }\n return uuidv4();\n}\nfunction defaultEmptyCallback(...args) {}\nlet DEBUG_MAP;\nif (DEBUG) {\n DEBUG_MAP = new WeakCache('identifier-proxy-target');\n}\n\n/**\n * Each instance of {Store} receives a unique instance of a IdentifierCache.\n *\n * This cache is responsible for assigning or retrieving the unique identify\n * for arbitrary resource data encountered by the store. Data representing\n * a unique resource or record should always be represented by the same\n * identifier.\n *\n * It can be configured by consuming applications.\n *\n * @class IdentifierCache\n @public\n */\nexport class IdentifierCache {\n constructor() {\n // Typescript still leaks private properties in the final\n // compiled class, so we may want to move these from _underscore\n // to a WeakMap to avoid leaking\n // currently we leak this for test purposes\n this._cache = {\n lids: Object.create(null),\n types: Object.create(null)\n };\n this._generate = void 0;\n this._update = void 0;\n this._forget = void 0;\n this._reset = void 0;\n this._merge = void 0;\n // we cache the user configuredGenerationMethod at init because it must\n // be configured prior and is not allowed to be changed\n this._generate = configuredGenerationMethod || defaultGenerationMethod;\n this._update = configuredUpdateMethod || defaultEmptyCallback;\n this._forget = configuredForgetMethod || defaultEmptyCallback;\n this._reset = configuredResetMethod || defaultEmptyCallback;\n this._merge = defaultEmptyCallback;\n }\n\n /**\n * Internal hook to allow management of merge conflicts with identifiers.\n *\n * we allow late binding of this private internal merge so that `internalModelFactory`\n * can insert itself here to handle elimination of duplicates\n *\n * @method __configureMerge\n * @private\n */\n __configureMerge(method) {\n this._merge = method || defaultEmptyCallback;\n }\n\n /**\n * @method _getRecordIdentifier\n * @private\n */\n\n _getRecordIdentifier(resource, shouldGenerate = false) {\n // short circuit if we're already the stable version\n if (isStableIdentifier(resource)) {\n if (DEBUG) {\n // TODO should we instead just treat this case as a new generation skipping the short circuit?\n if (!(resource.lid in this._cache.lids) || this._cache.lids[resource.lid] !== resource) {\n throw new Error(`The supplied identifier ${resource} does not belong to this store instance`);\n }\n }\n return resource;\n }\n let lid = coerceId(resource.lid);\n let identifier = lid !== null ? this._cache.lids[lid] : undefined;\n if (identifier !== undefined) {\n return identifier;\n }\n if (shouldGenerate === false) {\n if (!('type' in resource) || !('id' in resource) || !resource.type || !resource.id) {\n return;\n }\n }\n\n // `type` must always be present\n assert('resource.type needs to be a string', 'type' in resource && isNonEmptyString(resource.type));\n let type = resource.type && normalizeModelName(resource.type);\n let id = coerceId(resource.id);\n let keyOptions = getTypeIndex(this._cache.types, type);\n\n // go straight for the stable RecordIdentifier key'd to `lid`\n if (lid !== null) {\n identifier = keyOptions.lid[lid];\n }\n\n // we may have not seen this resource before\n // but just in case we check our own secondary lookup (`id`)\n if (identifier === undefined && id !== null) {\n identifier = keyOptions.id[id];\n }\n if (identifier === undefined) {\n // we have definitely not seen this resource before\n // so we allow the user configured `GenerationMethod` to tell us\n let newLid = this._generate(resource, 'record');\n\n // we do this _even_ when `lid` is present because secondary lookups\n // may need to be populated, but we enforce not giving us something\n // different than expected\n if (lid !== null && newLid !== lid) {\n throw new Error(`You should not change the of a RecordIdentifier`);\n } else if (lid === null) {\n // allow configuration to tell us that we have\n // seen this `lid` before. E.g. a secondary lookup\n // connects this resource to a previously seen\n // resource.\n identifier = keyOptions.lid[newLid];\n }\n if (shouldGenerate === true) {\n if (identifier === undefined) {\n // if we still don't have an identifier, time to generate one\n identifier = makeStableRecordIdentifier(id, type, newLid, 'record', false);\n\n // populate our unique table\n if (DEBUG) {\n // realistically if you hit this it means you changed `type` :/\n // TODO consider how to handle type change assertions more gracefully\n if (identifier.lid in this._cache.lids) {\n throw new Error(`You should not change the of a RecordIdentifier`);\n }\n }\n this._cache.lids[identifier.lid] = identifier;\n\n // populate our primary lookup table\n // TODO consider having the `lid` cache be\n // one level up\n keyOptions.lid[identifier.lid] = identifier;\n // TODO exists temporarily to support `peekAll`\n // but likely to move\n keyOptions._allIdentifiers.push(identifier);\n }\n\n // populate our own secondary lookup table\n // even for the \"successful\" secondary lookup\n // by `_generate()`, since we missed the cache\n // previously\n // we use identifier.id instead of id here\n // because they may not match and we prefer\n // what we've set via resource data\n if (identifier.id !== null) {\n keyOptions.id[identifier.id] = identifier;\n\n // TODO allow filling out of `id` here\n // for the `username` non-client created\n // case.\n }\n }\n }\n return identifier;\n }\n\n /**\n * allows us to peek without generating when needed\n * useful for the \"create\" case when we need to see if\n * we are accidentally overwritting something\n *\n * @method peekRecordIdentifier\n * @param resource\n * @returns {StableRecordIdentifier | undefined}\n * @private\n */\n peekRecordIdentifier(resource) {\n return this._getRecordIdentifier(resource, false);\n }\n\n /**\n Returns the Identifier for the given Resource, creates one if it does not yet exist.\n Specifically this means that we:\n - validate the `id` `type` and `lid` combo against known identifiers\n - return an object with an `lid` that is stable (repeated calls with the same\n `id` + `type` or `lid` will return the same `lid` value)\n - this referential stability of the object itself is guaranteed\n @method getOrCreateRecordIdentifier\n @param resource\n @returns {StableRecordIdentifier}\n @public\n */\n getOrCreateRecordIdentifier(resource) {\n return this._getRecordIdentifier(resource, true);\n }\n\n /**\n Returns a new Identifier for the supplied data. Call this method to generate\n an identifier when a new resource is being created local to the client and\n potentially does not have an `id`.\n Delegates generation to the user supplied `GenerateMethod` if one has been provided\n with the signature `generateMethod({ type }, 'record')`.\n @method createIdentifierForNewRecord\n @param data\n @returns {StableRecordIdentifier}\n @public\n */\n createIdentifierForNewRecord(data) {\n let newLid = this._generate(data, 'record');\n let identifier = makeStableRecordIdentifier(data.id || null, data.type, newLid, 'record', true);\n let keyOptions = getTypeIndex(this._cache.types, data.type);\n\n // populate our unique table\n if (DEBUG) {\n if (identifier.lid in this._cache.lids) {\n throw new Error(`The lid generated for the new record is not unique as it matches an existing identifier`);\n }\n }\n this._cache.lids[identifier.lid] = identifier;\n\n // populate the type+lid cache\n keyOptions.lid[newLid] = identifier;\n // ensure a peekAll sees our new identifier too\n // TODO move this outta here?\n keyOptions._allIdentifiers.push(identifier);\n return identifier;\n }\n\n /**\n Provides the opportunity to update secondary lookup tables for existing identifiers\n Called after an identifier created with `createIdentifierForNewRecord` has been\n committed.\n Assigned `id` to an `Identifier` if `id` has not previously existed; however,\n attempting to change the `id` or calling update without providing an `id` when\n one is missing will throw an error.\n - sets `id` (if `id` was previously `null`)\n - `lid` and `type` MUST NOT be altered post creation\n If a merge occurs, it is possible the returned identifier does not match the originally\n provided identifier. In this case the abandoned identifier will go through the usual\n `forgetRecordIdentifier` codepaths.\n @method updateRecordIdentifier\n @param identifierObject\n @param data\n @returns {StableRecordIdentifier}\n @public\n */\n updateRecordIdentifier(identifierObject, data) {\n let identifier = this.getOrCreateRecordIdentifier(identifierObject);\n let newId = 'id' in data ? coerceId(data.id) : null;\n let existingIdentifier = detectMerge(this._cache.types, identifier, data, newId, this._cache.lids);\n if (!existingIdentifier) {\n // If the incoming type does not match the identifier type, we need to create an identifier for the incoming\n // data so we can merge the incoming data with the existing identifier, see #7325 and #7363\n if ('type' in data && data.type && identifier.type !== normalizeModelName(data.type)) {\n let incomingDataResource = {\n ...data\n };\n // Need to strip the lid from the incomingData in order force a new identifier creation\n delete incomingDataResource.lid;\n existingIdentifier = this.getOrCreateRecordIdentifier(incomingDataResource);\n }\n }\n if (existingIdentifier) {\n let keyOptions = getTypeIndex(this._cache.types, identifier.type);\n identifier = this._mergeRecordIdentifiers(keyOptions, identifier, existingIdentifier, data, newId);\n }\n let id = identifier.id;\n performRecordIdentifierUpdate(identifier, data, this._update);\n newId = identifier.id;\n\n // add to our own secondary lookup table\n if (id !== newId && newId !== null) {\n let keyOptions = getTypeIndex(this._cache.types, identifier.type);\n keyOptions.id[newId] = identifier;\n if (id !== null) {\n delete keyOptions.id[id];\n }\n }\n return identifier;\n }\n\n /**\n * @method _mergeRecordIdentifiers\n * @private\n */\n _mergeRecordIdentifiers(keyOptions, identifier, existingIdentifier, data, newId) {\n // delegate determining which identifier to keep to the configured MergeMethod\n let kept = this._merge(identifier, existingIdentifier, data);\n let abandoned = kept === identifier ? existingIdentifier : identifier;\n\n // cleanup the identifier we no longer need\n this.forgetRecordIdentifier(abandoned);\n\n // ensure a secondary cache entry for this id for the identifier we do keep\n keyOptions.id[newId] = kept;\n // ensure a secondary cache entry for this id for the abandoned identifier's type we do keep\n let baseKeyOptions = getTypeIndex(this._cache.types, existingIdentifier.type);\n baseKeyOptions.id[newId] = kept;\n\n // make sure that the `lid` on the data we are processing matches the lid we kept\n data.lid = kept.lid;\n return kept;\n }\n\n /**\n Provides the opportunity to eliminate an identifier from secondary lookup tables\n as well as eliminates it from ember-data's own lookup tables and book keeping.\n Useful when a record has been deleted and the deletion has been persisted and\n we do not care about the record anymore. Especially useful when an `id` of a\n deleted record might be reused later for a new record.\n @method forgetRecordIdentifier\n @param identifierObject\n @public\n */\n forgetRecordIdentifier(identifierObject) {\n let identifier = this.getOrCreateRecordIdentifier(identifierObject);\n let keyOptions = getTypeIndex(this._cache.types, identifier.type);\n if (identifier.id !== null) {\n delete keyOptions.id[identifier.id];\n }\n delete this._cache.lids[identifier.lid];\n delete keyOptions.lid[identifier.lid];\n let index = keyOptions._allIdentifiers.indexOf(identifier);\n keyOptions._allIdentifiers.splice(index, 1);\n IDENTIFIERS.delete(identifierObject);\n this._forget(identifier, 'record');\n }\n destroy() {\n this._reset();\n }\n}\nfunction getTypeIndex(typeMap, type) {\n let typeIndex = typeMap[type];\n if (typeIndex === undefined) {\n typeIndex = {\n lid: Object.create(null),\n id: Object.create(null),\n _allIdentifiers: []\n };\n typeMap[type] = typeIndex;\n }\n return typeIndex;\n}\nfunction makeStableRecordIdentifier(id, type, lid, bucket, clientOriginated = false) {\n let recordIdentifier = {\n lid,\n id,\n type\n };\n IDENTIFIERS.add(recordIdentifier);\n if (DEBUG) {\n // we enforce immutability in dev\n // but preserve our ability to do controlled updates to the reference\n let wrapper = {\n get lid() {\n return recordIdentifier.lid;\n },\n get id() {\n return recordIdentifier.id;\n },\n get type() {\n return recordIdentifier.type;\n },\n toString() {\n let {\n type,\n id,\n lid\n } = recordIdentifier;\n return `${clientOriginated ? '[CLIENT_ORIGINATED] ' : ''}${type}:${id} (${lid})`;\n }\n };\n wrapper[DEBUG_CLIENT_ORIGINATED] = clientOriginated;\n wrapper[DEBUG_IDENTIFIER_BUCKET] = bucket;\n IDENTIFIERS.add(wrapper);\n DEBUG_MAP.set(wrapper, recordIdentifier);\n wrapper = freeze(wrapper);\n return wrapper;\n }\n return recordIdentifier;\n}\nfunction performRecordIdentifierUpdate(identifier, data, updateFn) {\n if (DEBUG) {\n let {\n lid\n } = data;\n let id = 'id' in data ? data.id : undefined;\n let type = 'type' in data && data.type && normalizeModelName(data.type);\n\n // get the mutable instance behind our proxy wrapper\n let wrapper = identifier;\n identifier = DEBUG_MAP.get(wrapper);\n if (lid !== undefined) {\n let newLid = coerceId(lid);\n if (newLid !== identifier.lid) {\n throw new Error(`The 'lid' for a RecordIdentifier cannot be updated once it has been created. Attempted to set lid for '${wrapper}' to '${lid}'.`);\n }\n }\n if (id !== undefined) {\n let newId = coerceId(id);\n if (identifier.id !== null && identifier.id !== newId) {\n // here we warn and ignore, as this may be a mistake, but we allow the user\n // to have multiple cache-keys pointing at a single lid so we cannot error\n warn(`The 'id' for a RecordIdentifier should not be updated once it has been set. Attempted to set id for '${wrapper}' to '${newId}'.`, false, {\n id: 'ember-data:multiple-ids-for-identifier'\n });\n }\n }\n\n // TODO consider just ignoring here to allow flexible polymorphic support\n if (type && type !== identifier.type) {\n throw new Error(`The 'type' for a RecordIdentifier cannot be updated once it has been set. Attempted to set type for '${wrapper}' to '${type}'.`);\n }\n updateFn(wrapper, data, 'record');\n } else {\n updateFn(identifier, data, 'record');\n }\n\n // upgrade the ID, this is a \"one time only\" ability\n // for the multiple-cache-key scenario we \"could\"\n // use a heuristic to guess the best id for display\n // (usually when `data.id` is available and `data.attributes` is not)\n if ('id' in data && data.id !== undefined) {\n identifier.id = coerceId(data.id);\n }\n}\nfunction detectMerge(typesCache, identifier, data, newId, lids) {\n const {\n id,\n type,\n lid\n } = identifier;\n if (id !== null && id !== newId && newId !== null) {\n let keyOptions = getTypeIndex(typesCache, identifier.type);\n let existingIdentifier = keyOptions.id[newId];\n return existingIdentifier !== undefined ? existingIdentifier : false;\n } else {\n let newType = 'type' in data && data.type && normalizeModelName(data.type);\n\n // If the ids and type are the same but lid is not the same, we should trigger a merge of the identifiers\n if (id !== null && id === newId && newType === type && data.lid && data.lid !== lid) {\n let existingIdentifier = lids[data.lid];\n return existingIdentifier !== undefined ? existingIdentifier : false;\n // If the lids are the same, and ids are the same, but types are different we should trigger a merge of the identifiers\n } else if (id !== null && id === newId && newType && newType !== type && data.lid && data.lid === lid) {\n let keyOptions = getTypeIndex(typesCache, newType);\n let existingIdentifier = keyOptions.id[id];\n return existingIdentifier !== undefined ? existingIdentifier : false;\n }\n }\n return false;\n}","import { assert } from '@ember/debug';\nimport { _backburner as emberBackburner, cancel, run } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\nimport { errorsHashToArray } from '../errors-utils';\nimport { internalModelFactoryFor } from '../internal-model-factory';\n\n/**\n @module @ember-data/store\n*/\n\nfunction isDSModel(record) {\n return true /* HAS_MODEL_PACKAGE */ && !!record && 'constructor' in record && 'isModel' in record.constructor && record.constructor.isModel === true;\n}\nexport default class InternalModel {\n // Not typed yet\n\n constructor(store, identifier) {\n this.store = store;\n this.identifier = identifier;\n this._id = identifier.id;\n this._isUpdatingId = false;\n this.modelName = identifier.type;\n this.clientId = identifier.lid;\n this.hasRecord = false;\n this.hasRecordData = false;\n this._isDestroyed = false;\n this._doNotDestroy = false;\n this.isError = false;\n this._pendingRecordArrayManagerFlush = false; // used by the recordArrayManager\n\n // During dematerialization we don't want to rematerialize the record. The\n // reason this might happen is that dematerialization removes records from\n // record arrays, and Ember arrays will always `objectAt(0)` and\n // `objectAt(len - 1)` to test whether or not `firstObject` or `lastObject`\n // have changed.\n this._isDematerializing = false;\n this._scheduledDestroy = null;\n this.error = null;\n\n // caches for lazy getters\n this._modelClass = null;\n this.__recordArrays = null;\n this.error = null;\n }\n get id() {\n return this.identifier.id;\n }\n set id(value) {\n if (value !== this._id) {\n let newIdentifier = {\n type: this.identifier.type,\n lid: this.identifier.lid,\n id: value\n };\n // TODO potentially this needs to handle merged result\n this.store.identifierCache.updateRecordIdentifier(this.identifier, newIdentifier);\n this.notifyPropertyChange('id');\n }\n }\n get modelClass() {\n if (this.store.modelFor) {\n return this._modelClass || (this._modelClass = this.store.modelFor(this.modelName));\n }\n }\n get _recordData() {\n return this.store._instanceCache.getRecordData(this.identifier);\n }\n isHiddenFromRecordArrays() {\n // During dematerialization we don't want to rematerialize the record.\n // recordWasDeleted can cause other records to rematerialize because it\n // removes the internal model from the array and Ember arrays will always\n // `objectAt(0)` and `objectAt(len -1)` to check whether `firstObject` or\n // `lastObject` have changed. When this happens we don't want those\n // models to rematerialize their records.\n\n // eager checks to avoid instantiating record data if we are empty or loading\n if (this.isEmpty) {\n return true;\n }\n if (this.isLoading) {\n return false;\n }\n let isRecordFullyDeleted = this._isRecordFullyDeleted();\n return this._isDematerializing || this.hasScheduledDestroy() || this.isDestroyed || isRecordFullyDeleted;\n }\n _isRecordFullyDeleted() {\n if (this._recordData.isDeletionCommitted && this._recordData.isDeletionCommitted()) {\n return true;\n } else if (this._recordData.isNew && this._recordData.isDeleted && this._recordData.isNew() && this._recordData.isDeleted()) {\n return true;\n } else {\n return false;\n }\n }\n isDeleted() {\n if (this._recordData.isDeleted) {\n return this._recordData.isDeleted();\n } else {\n return false;\n }\n }\n isNew() {\n if (this.hasRecordData && this._recordData.isNew) {\n return this._recordData.isNew();\n } else {\n return false;\n }\n }\n get isEmpty() {\n return !this.hasRecordData || (!this.isNew() || this.isDeleted()) && this._recordData.isEmpty?.() || false;\n }\n get isLoading() {\n const req = this.store.getRequestStateService();\n const {\n identifier\n } = this;\n // const fulfilled = req.getLastRequestForRecord(identifier);\n\n return !this.isLoaded &&\n // fulfilled === null &&\n req.getPendingRequestsForRecord(identifier).some(req => req.type === 'query');\n }\n get isLoaded() {\n // if we are new we must consider ourselves loaded\n if (this.isNew()) {\n return true;\n }\n // even if we have a past request, if we are now empty we are not loaded\n // typically this is true after an unloadRecord call\n\n // if we are not empty, not new && we have a fulfilled request then we are loaded\n // we should consider allowing for something to be loaded that is simply \"not empty\".\n // which is how RecordState currently handles this case; however, RecordState is buggy\n // in that it does not account for unloading.\n return !this.isEmpty;\n }\n dematerializeRecord() {\n this._isDematerializing = true;\n\n // TODO IGOR add a test that fails when this is missing, something that involves canceling a destroy\n // and the destroy not happening, and then later on trying to destroy\n this._doNotDestroy = false;\n // this has to occur before the internal model is removed\n // for legacy compat.\n const {\n identifier\n } = this;\n this.store._instanceCache.removeRecord(identifier);\n\n // move to an empty never-loaded state\n // ensure any record notifications happen prior to us\n // unseting the record but after we've triggered\n // destroy\n this.store._backburner.join(() => {\n this._recordData.unloadRecord();\n });\n this.hasRecord = false; // this must occur after relationship removal\n this.error = null;\n this.store.recordArrayManager.recordDidChange(this.identifier);\n }\n deleteRecord() {\n run(() => {\n const backburner = this.store._backburner;\n backburner.run(() => {\n if (this._recordData.setIsDeleted) {\n this._recordData.setIsDeleted(true);\n }\n if (this.isNew()) {\n // destroyRecord follows up deleteRecord with save(). This prevents an unecessary save for a new record\n this._deletedRecordWasNew = true;\n this.unloadRecord();\n }\n });\n });\n }\n\n /*\n Unload the record for this internal model. This will cause the record to be\n destroyed and freed up for garbage collection. It will also do a check\n for cleaning up internal models.\n This check is performed by first computing the set of related internal\n models. If all records in this set are unloaded, then the entire set is\n destroyed. Otherwise, nothing in the set is destroyed.\n This means that this internal model will be freed up for garbage collection\n once all models that refer to it via some relationship are also unloaded.\n */\n unloadRecord() {\n if (this.isDestroyed) {\n return;\n }\n if (DEBUG) {\n const requests = this.store.getRequestStateService().getPendingRequestsForRecord(this.identifier);\n if (requests.some(req => {\n return req.type === 'mutation';\n })) {\n assert('You can only unload a record which is not inFlight. `' + this + '`');\n }\n }\n this.dematerializeRecord();\n if (this._scheduledDestroy === null) {\n this._scheduledDestroy = emberBackburner.schedule('destroy', this, '_checkForOrphanedInternalModels');\n }\n }\n hasScheduledDestroy() {\n return !!this._scheduledDestroy;\n }\n cancelDestroy() {\n assert(`You cannot cancel the destruction of an InternalModel once it has already been destroyed`, !this.isDestroyed);\n this._doNotDestroy = true;\n this._isDematerializing = false;\n cancel(this._scheduledDestroy);\n this._scheduledDestroy = null;\n }\n\n // typically, we prefer to async destroy this lets us batch cleanup work.\n // Unfortunately, some scenarios where that is not possible. Such as:\n //\n // ```js\n // const record = store.findRecord(‘record’, 1);\n // record.unloadRecord();\n // store.createRecord(‘record’, 1);\n // ```\n //\n // In those scenarios, we make that model's cleanup work, sync.\n //\n destroySync() {\n if (this._isDematerializing) {\n this.cancelDestroy();\n }\n this._checkForOrphanedInternalModels();\n if (this.isDestroyed || this.isDestroying) {\n return;\n }\n\n // just in-case we are not one of the orphaned, we should still\n // still destroy ourselves\n this.destroy();\n }\n _checkForOrphanedInternalModels() {\n this._isDematerializing = false;\n this._scheduledDestroy = null;\n if (this.isDestroyed) {\n return;\n }\n }\n destroyFromRecordData() {\n if (this._doNotDestroy) {\n this._doNotDestroy = false;\n return;\n }\n this.destroy();\n }\n destroy() {\n let record = this.store._instanceCache.peek({\n identifier: this.identifier,\n bucket: 'record'\n });\n assert('Cannot destroy an internalModel while its record is materialized', !record || record.isDestroyed || record.isDestroying);\n this.isDestroying = true;\n internalModelFactoryFor(this.store).remove(this);\n this._isDestroyed = true;\n }\n setupData(data) {\n if (this.isNew()) {\n this.store._notificationManager.notify(this.identifier, 'identity');\n }\n this._recordData.pushData(data, this.hasRecord);\n }\n notifyAttributes(keys) {\n if (this.hasRecord) {\n let manager = this.store._notificationManager;\n let {\n identifier\n } = this;\n if (!keys || !keys.length) {\n manager.notify(identifier, 'attributes');\n } else {\n for (let i = 0; i < keys.length; i++) {\n manager.notify(identifier, 'attributes', keys[i]);\n }\n }\n }\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n hasChangedAttributes() {\n if (!this.hasRecordData) {\n // no need to calculate changed attributes when calling `findRecord`\n return false;\n }\n return this._recordData.hasChangedAttributes();\n }\n changedAttributes() {\n if (!this.hasRecordData) {\n // no need to calculate changed attributes when calling `findRecord`\n return {};\n }\n return this._recordData.changedAttributes();\n }\n adapterWillCommit() {\n this._recordData.willCommit();\n let record = this.store._instanceCache.peek({\n identifier: this.identifier,\n bucket: 'record'\n });\n if (record && isDSModel(record)) {\n record.errors.clear();\n }\n }\n notifyHasManyChange(key) {\n if (this.hasRecord) {\n this.store._notificationManager.notify(this.identifier, 'relationships', key);\n }\n }\n notifyBelongsToChange(key) {\n if (this.hasRecord) {\n this.store._notificationManager.notify(this.identifier, 'relationships', key);\n }\n }\n notifyPropertyChange(key) {\n if (this.hasRecord) {\n // TODO this should likely *mostly* be the `attributes` bucket\n // but it seems for local mutations we rely on computed updating\n // iteself when set. As we design our own thing we may need to change\n // that.\n this.store._notificationManager.notify(this.identifier, 'property', key);\n }\n }\n notifyStateChange(key) {\n if (this.hasRecord) {\n this.store._notificationManager.notify(this.identifier, 'state');\n }\n if (!key || key === 'isDeletionCommitted') {\n this.store.recordArrayManager.recordDidChange(this.identifier);\n }\n }\n rollbackAttributes() {\n this.store._backburner.join(() => {\n let dirtyKeys = this._recordData.rollbackAttributes();\n let record = this.store._instanceCache.peek({\n identifier: this.identifier,\n bucket: 'record'\n });\n if (record && isDSModel(record)) {\n record.errors.clear();\n }\n if (this.hasRecord && dirtyKeys && dirtyKeys.length > 0) {\n this.notifyAttributes(dirtyKeys);\n }\n });\n }\n removeFromInverseRelationships() {\n if (this.hasRecordData) {\n this.store._backburner.join(() => {\n this._recordData.removeFromInverseRelationships();\n });\n }\n }\n\n /*\n When a find request is triggered on the store, the user can optionally pass in\n attributes and relationships to be preloaded. These are meant to behave as if they\n came back from the server, except the user obtained them out of band and is informing\n the store of their existence. The most common use case is for supporting client side\n nested URLs, such as `/posts/1/comments/2` so the user can do\n `store.findRecord('comment', 2, { preload: { post: 1 } })` without having to fetch the post.\n Preloaded data can be attributes and relationships passed in either as IDs or as actual\n models.\n */\n preloadData(preload) {\n let jsonPayload = {};\n //TODO(Igor) consider the polymorphic case\n Object.keys(preload).forEach(key => {\n let preloadValue = preload[key];\n let relationshipMeta = this.modelClass.metaForProperty(key);\n if (relationshipMeta.isRelationship) {\n if (!jsonPayload.relationships) {\n jsonPayload.relationships = {};\n }\n jsonPayload.relationships[key] = this._preloadRelationship(key, preloadValue);\n } else {\n if (!jsonPayload.attributes) {\n jsonPayload.attributes = {};\n }\n jsonPayload.attributes[key] = preloadValue;\n }\n });\n this._recordData.pushData(jsonPayload);\n }\n _preloadRelationship(key, preloadValue) {\n let relationshipMeta = this.modelClass.metaForProperty(key);\n let modelClass = relationshipMeta.type;\n let data;\n if (relationshipMeta.kind === 'hasMany') {\n assert('You need to pass in an array to set a hasMany property on a record', Array.isArray(preloadValue));\n data = preloadValue.map(value => this._convertPreloadRelationshipToJSON(value, modelClass));\n } else {\n data = this._convertPreloadRelationshipToJSON(preloadValue, modelClass);\n }\n return {\n data\n };\n }\n _convertPreloadRelationshipToJSON(value, modelClass) {\n if (typeof value === 'string' || typeof value === 'number') {\n return {\n type: modelClass,\n id: value\n };\n }\n let internalModel;\n if (value._internalModel) {\n internalModel = value._internalModel;\n } else {\n internalModel = value;\n }\n // TODO IGOR DAVID assert if no id is present\n return {\n type: internalModel.modelName,\n id: internalModel.id\n };\n }\n\n /*\n * calling `InstanceCache.setRecordId` is necessary to update\n * the cache index for this record if we have changed.\n *\n * However, since the store is not aware of whether the update\n * is from us (via user set) or from a push of new data\n * it will also call us so that we can notify and update state.\n *\n * When it does so it calls with `fromCache` so that we can\n * short-circuit instead of cycling back.\n *\n * This differs from the short-circuit in the `_isUpdatingId`\n * case in that the the cache can originate the call to setId,\n * so on first entry we will still need to do our own update.\n */\n setId(id, fromCache = false) {\n if (this._isUpdatingId === true) {\n return;\n }\n this._isUpdatingId = true;\n let didChange = id !== this._id;\n this._id = id;\n if (didChange && id !== null) {\n if (!fromCache) {\n this.store._instanceCache.setRecordId(this.modelName, id, this.clientId);\n }\n // internal set of ID to get it to RecordData from DS.Model\n // if we are within create we may not have a recordData yet.\n if (this.hasRecordData && this._recordData.__setId) {\n this._recordData.__setId(id);\n }\n }\n if (didChange && this.hasRecord) {\n this.store._notificationManager.notify(this.identifier, 'identity');\n }\n this._isUpdatingId = false;\n }\n didError() {}\n\n /*\n If the adapter did not return a hash in response to a commit,\n merge the changed attributes and relationships into the existing\n saved data.\n */\n adapterDidCommit(data) {\n this._recordData.didCommit(data);\n this.store.recordArrayManager.recordDidChange(this.identifier);\n }\n hasErrors() {\n // TODO add assertion forcing consuming RecordData's to implement getErrors\n if (this._recordData.getErrors) {\n return this._recordData.getErrors(this.identifier).length > 0;\n } else {\n let record = this.store._instanceCache.peek({\n identifier: this.identifier,\n bucket: 'record'\n });\n // we can't have errors if we never tried loading\n if (!record) {\n return false;\n }\n let errors = record.errors;\n return errors.length > 0;\n }\n }\n\n // FOR USE DURING COMMIT PROCESS\n adapterDidInvalidate(parsedErrors, error) {\n // TODO @runspired this should be handled by RecordState\n // and errors should be dirtied but lazily fetch if at\n // all possible. We should only notify errors here.\n let attribute;\n if (error && parsedErrors) {\n // TODO add assertion forcing consuming RecordData's to implement getErrors\n if (!this._recordData.getErrors) {\n let record = this.store._instanceCache.getRecord(this.identifier);\n let errors = record.errors;\n for (attribute in parsedErrors) {\n if (Object.prototype.hasOwnProperty.call(parsedErrors, attribute)) {\n errors.add(attribute, parsedErrors[attribute]);\n }\n }\n }\n let jsonApiErrors = errorsHashToArray(parsedErrors);\n if (jsonApiErrors.length === 0) {\n jsonApiErrors = [{\n title: 'Invalid Error',\n detail: '',\n source: {\n pointer: '/data'\n }\n }];\n }\n this._recordData.commitWasRejected(this.identifier, jsonApiErrors);\n } else {\n this._recordData.commitWasRejected(this.identifier);\n }\n }\n notifyErrorsChange() {\n this.store._notificationManager.notify(this.identifier, 'errors');\n }\n adapterDidError() {\n this._recordData.commitWasRejected();\n }\n toString() {\n return `<${this.modelName}:${this.id}>`;\n }\n}","import { assert } from '@ember/debug';\nimport InternalModel from './model/internal-model';\n\n/**\n @module @ember-data/store\n*/\n\n/**\n `InternalModelMap` is a custom storage map for internalModels of a given modelName\n used by `IdentityMap`.\n\n It was extracted from an implicit pojo based \"internalModel map\" and preserves\n that interface while we work towards a more official API.\n\n @class InternalModelMap\n @internal\n */\nexport default class InternalModelMap {\n constructor(modelName) {\n this._idToModel = Object.create(null);\n this._models = [];\n this.modelName = void 0;\n this.modelName = modelName;\n }\n get(id) {\n return this._idToModel[id] || null;\n }\n has(id) {\n return !!this._idToModel[id];\n }\n get length() {\n return this._models.length;\n }\n get recordIdentifiers() {\n return this._models.map(m => m.identifier);\n }\n set(id, internalModel) {\n assert(`You cannot index an internalModel by an empty id'`, typeof id === 'string' && id.length > 0);\n assert(`You cannot set an index for an internalModel to something other than an internalModel`, internalModel instanceof InternalModel);\n assert(`You cannot set an index for an internalModel that is not in the InternalModelMap`, this.contains(internalModel));\n assert(`You cannot update the id index of an InternalModel once set. Attempted to update ${id}.`, !this.has(id) || this.get(id) === internalModel);\n this._idToModel[id] = internalModel;\n }\n add(internalModel, id) {\n assert(`You cannot re-add an already present InternalModel to the InternalModelMap.`, !this.contains(internalModel));\n if (id) {\n assert(`Duplicate InternalModel for ${this.modelName}:${id} detected.`, !this.has(id) || this.get(id) === internalModel);\n this._idToModel[id] = internalModel;\n }\n this._models.push(internalModel);\n }\n remove(internalModel, id) {\n delete this._idToModel[id];\n let loc = this._models.indexOf(internalModel);\n if (loc !== -1) {\n this._models.splice(loc, 1);\n }\n }\n contains(internalModel) {\n return this._models.indexOf(internalModel) !== -1;\n }\n\n /**\n An array of all models of this modelName\n @property models\n @internal\n @type Array\n */\n get models() {\n return this._models;\n }\n\n /**\n Destroy all models in the map\n @internal\n */\n clear() {\n let internalModels = this._models;\n this._models = [];\n for (let i = 0; i < internalModels.length; i++) {\n let internalModel = internalModels[i];\n internalModel.unloadRecord();\n }\n }\n}","import InternalModelMap from './internal-model-map';\n\n/**\n @module @ember-data/store\n*/\n\n/**\n `IdentityMap` is a custom storage map for records by modelName\n used by `Store`.\n\n @class IdentityMap\n @internal\n */\nexport default class IdentityMap {\n constructor() {\n this._map = Object.create(null);\n }\n /**\n Retrieves the `InternalModelMap` for a given modelName,\n creating one if one did not already exist. This is\n similar to `getWithDefault` or `get` on a `MapWithDefault`\n @method retrieve\n @internal\n @param modelName a previously normalized modelName\n @return {InternalModelMap} the InternalModelMap for the given modelName\n */\n retrieve(modelName) {\n let map = this._map[modelName];\n if (map === undefined) {\n map = this._map[modelName] = new InternalModelMap(modelName);\n }\n return map;\n }\n\n /**\n Clears the contents of all known `RecordMaps`, but does\n not remove the InternalModelMap instances.\n @internal\n */\n clear() {\n let map = this._map;\n let keys = Object.keys(map);\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n map[key].clear();\n }\n }\n}","import { assert } from '@ember/debug';\nimport coerceId from '../coerce-id';\nimport { isStableIdentifier } from '../identifier-cache';\nimport isNonEmptyString from './is-non-empty-string';\nfunction constructResource(type, id, lid) {\n if (typeof type === 'object' && type !== null) {\n let resource = type;\n if (isStableIdentifier(resource)) {\n return resource;\n }\n if ('id' in resource) {\n resource.id = coerceId(resource.id);\n }\n assert('Expected either id or lid to be a valid string', 'id' in resource && isNonEmptyString(resource.id) || isNonEmptyString(resource.lid));\n assert('if id is present, the type must be a string', !('id' in resource) || typeof resource.type === 'string');\n return resource;\n } else {\n const trueId = coerceId(id);\n if (!isNonEmptyString(trueId)) {\n if (isNonEmptyString(lid)) {\n return {\n lid\n };\n }\n throw new Error('Expected either id or lid to be a valid string');\n }\n assert('type must be a string', typeof type === 'string');\n if (isNonEmptyString(lid)) {\n return {\n type,\n id: trueId,\n lid\n };\n }\n return {\n type,\n id: trueId\n };\n }\n}\nexport default constructResource;","import { assert, warn } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport IdentityMap from './identity-map';\nimport InternalModel from './model/internal-model';\nimport constructResource from './utils/construct-resource';\nimport WeakCache from './weak-cache';\n\n/**\n @module @ember-data/store\n*/\nconst FactoryCache = new WeakCache(DEBUG ? 'internal-model-factory' : '');\nFactoryCache._generator = store => {\n return new InternalModelFactory(store);\n};\nconst RecordCache = new WeakCache(DEBUG ? 'identifier' : '');\nif (DEBUG) {\n RecordCache._expectMsg = key => `${String(key)} is not a record instantiated by @ember-data/store`;\n}\nexport function peekRecordIdentifier(record) {\n return RecordCache.get(record);\n}\n\n/**\n Retrieves the unique referentially-stable [RecordIdentifier](/ember-data/release/classes/StableRecordIdentifier)\n assigned to the given record instance.\n\n ```js\n import { recordIdentifierFor } from \"@ember-data/store\";\n\n // ... gain access to a record, for instance with peekRecord or findRecord\n const record = store.peekRecord(\"user\", \"1\");\n\n // get the identifier for the record (see docs for StableRecordIdentifier)\n const identifier = recordIdentifierFor(record);\n\n // access the identifier's properties.\n const { id, type, lid } = identifier;\n ```\n\n @method recordIdentifierFor\n @public\n @static\n @for @ember-data/store\n @param {Object} record a record instance previously obstained from the store.\n @returns {StableRecordIdentifier}\n */\nexport function recordIdentifierFor(record) {\n return RecordCache.getWithError(record);\n}\nexport function setRecordIdentifier(record, identifier) {\n if (DEBUG && RecordCache.has(record) && RecordCache.get(record) !== identifier) {\n throw new Error(`${record} was already assigned an identifier`);\n }\n\n /*\n It would be nice to do a reverse check here that an identifier has not\n previously been assigned a record; however, unload + rematerialization\n prevents us from having a great way of doing so when CustomRecordClasses\n don't necessarily give us access to a `isDestroyed` for dematerialized\n instance.\n */\n\n RecordCache.set(record, identifier);\n}\nexport function internalModelFactoryFor(store) {\n return FactoryCache.lookup(store);\n}\n\n/**\n * The InternalModelFactory handles the lifecyle of\n * instantiating, caching, and destroying InternalModel\n * instances.\n *\n * @class InternalModelFactory\n * @internal\n */\nexport default class InternalModelFactory {\n constructor(store) {\n this.store = store;\n this.identifierCache = store.identifierCache;\n this.identifierCache.__configureMerge((identifier, matchedIdentifier, resourceData) => {\n let intendedIdentifier = identifier;\n if (identifier.id !== matchedIdentifier.id) {\n intendedIdentifier = 'id' in resourceData && identifier.id === resourceData.id ? identifier : matchedIdentifier;\n } else if (identifier.type !== matchedIdentifier.type) {\n intendedIdentifier = 'type' in resourceData && identifier.type === resourceData.type ? identifier : matchedIdentifier;\n }\n let altIdentifier = identifier === intendedIdentifier ? matchedIdentifier : identifier;\n\n // check for duplicate InternalModel's\n const map = this.modelMapFor(identifier.type);\n let im = map.get(intendedIdentifier.lid);\n let otherIm = map.get(altIdentifier.lid);\n\n // we cannot merge internalModels when both have records\n // (this may not be strictly true, we could probably swap the internalModel the record points at)\n if (im && otherIm && im.hasRecord && otherIm.hasRecord) {\n // TODO we probably don't need to throw these errors anymore\n // once InternalModel is fully removed, as we can just \"swap\"\n // what data source the abandoned record points at so long as\n // it itself is not retained by the store in any way.\n if ('id' in resourceData) {\n throw new Error(`Failed to update the 'id' for the RecordIdentifier '${identifier.type}:${identifier.id} (${identifier.lid})' to '${resourceData.id}', because that id is already in use by '${matchedIdentifier.type}:${matchedIdentifier.id} (${matchedIdentifier.lid})'`);\n }\n // TODO @runspired determine when this is even possible\n assert(`Failed to update the RecordIdentifier '${identifier.type}:${identifier.id} (${identifier.lid})' to merge with the detected duplicate identifier '${matchedIdentifier.type}:${matchedIdentifier.id} (${matchedIdentifier.lid})'`);\n }\n\n // remove otherIm from cache\n if (otherIm) {\n map.remove(otherIm, altIdentifier.lid);\n }\n if (im === null && otherIm === null) {\n // nothing more to do\n return intendedIdentifier;\n\n // only the other has an InternalModel\n // OR only the other has a Record\n } else if (im === null && otherIm !== null || im && !im.hasRecord && otherIm && otherIm.hasRecord) {\n if (im) {\n // TODO check if we are retained in any async relationships\n map.remove(im, intendedIdentifier.lid);\n // im.destroy();\n }\n im = otherIm;\n // TODO do we need to notify the id change?\n im._id = intendedIdentifier.id;\n im.identifier = intendedIdentifier;\n map.add(im, intendedIdentifier.lid);\n\n // just use im\n } else {\n // otherIm.destroy();\n }\n\n /*\n TODO @runspired consider adding this to make polymorphism even nicer\n if (HAS_RECORD_DATA_PACKAGE) {\n if (identifier.type !== matchedIdentifier.type) {\n const graphFor = importSync('@ember-data/record-data/-private').graphFor;\n graphFor(this).registerPolymorphicType(identifier.type, matchedIdentifier.type);\n }\n }\n */\n\n return intendedIdentifier;\n });\n this._identityMap = new IdentityMap();\n }\n\n /**\n * Retrieve the InternalModel for a given { type, id, lid }.\n *\n * If an InternalModel does not exist, it instantiates one.\n *\n * If an InternalModel does exist bus has a scheduled destroy,\n * the scheduled destroy will be cancelled.\n *\n * @method lookup\n * @private\n */\n lookup(resource, data) {\n if (data !== undefined) {\n // if we've been given data associated with this lookup\n // we must first give secondary-caches for LIDs the\n // opportunity to populate based on it\n this.identifierCache.getOrCreateRecordIdentifier(data);\n }\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n const internalModel = this.peek(identifier);\n if (internalModel) {\n // unloadRecord is async, if one attempts to unload + then sync push,\n // we must ensure the unload is canceled before continuing\n // The createRecord path will take _existingInternalModelForId()\n // which will call `destroySync` instead for this unload + then\n // sync createRecord scenario. Once we have true client-side\n // delete signaling, we should never call destroySync\n if (internalModel.hasScheduledDestroy()) {\n internalModel.cancelDestroy();\n }\n return internalModel;\n }\n return this._build(identifier, false);\n }\n\n /**\n * Peek the InternalModel for a given { type, id, lid }.\n *\n * If an InternalModel does not exist, return `null`.\n *\n * @method peek\n * @private\n */\n peek(identifier) {\n return this.modelMapFor(identifier.type).get(identifier.lid);\n }\n getByResource(resource) {\n const normalizedResource = constructResource(resource);\n return this.lookup(normalizedResource);\n }\n setRecordId(type, id, lid) {\n const resource = {\n type,\n id: null,\n lid\n };\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n const internalModel = this.peek(identifier);\n if (internalModel === null) {\n throw new Error(`Cannot set the id ${id} on the record ${type}:${lid} as there is no such record in the cache.`);\n }\n let oldId = internalModel.id;\n let modelName = internalModel.modelName;\n\n // ID absolutely can't be missing if the oldID is empty (missing Id in response for a new record)\n assert(`'${modelName}' was saved to the server, but the response does not have an id and your record does not either.`, !(id === null && oldId === null));\n\n // ID absolutely can't be different than oldID if oldID is not null\n // TODO this assertion and restriction may not strictly be needed in the identifiers world\n assert(`Cannot update the id for '${modelName}:${lid}' from '${oldId}' to '${id}'.`, !(oldId !== null && id !== oldId));\n\n // ID can be null if oldID is not null (altered ID in response for a record)\n // however, this is more than likely a developer error.\n if (oldId !== null && id === null) {\n warn(`Your ${modelName} record was saved to the server, but the response does not have an id.`, !(oldId !== null && id === null));\n return;\n }\n let existingInternalModel = this.peekById(modelName, id);\n assert(`'${modelName}' was saved to the server, but the response returned the new id '${id}', which has already been used with another record.'`, !existingInternalModel || existingInternalModel === internalModel);\n if (identifier.id === null) {\n // TODO potentially this needs to handle merged result\n this.identifierCache.updateRecordIdentifier(identifier, {\n type,\n id\n });\n }\n internalModel.setId(id, true);\n }\n peekById(type, id) {\n const identifier = this.identifierCache.peekRecordIdentifier({\n type,\n id\n });\n let internalModel = identifier ? this.modelMapFor(type).get(identifier.lid) : null;\n if (internalModel && internalModel.hasScheduledDestroy()) {\n // unloadRecord is async, if one attempts to unload + then sync create,\n // we must ensure the unload is complete before starting the create\n // The push path will take this.lookup()\n // which will call `cancelDestroy` instead for this unload + then\n // sync push scenario. Once we have true client-side\n // delete signaling, we should never call destroySync\n internalModel.destroySync();\n internalModel = null;\n }\n return internalModel;\n }\n build(newResourceInfo) {\n return this._build(newResourceInfo, true);\n }\n _build(resource, isCreate = false) {\n if (isCreate === true && resource.id) {\n let existingInternalModel = this.peekById(resource.type, resource.id);\n assert(`The id ${resource.id} has already been used with another '${resource.type}' record.`, !existingInternalModel);\n }\n const {\n identifierCache\n } = this;\n let identifier;\n if (isCreate === true) {\n identifier = identifierCache.createIdentifierForNewRecord(resource);\n } else {\n identifier = resource;\n }\n\n // lookupFactory should really return an object that creates\n // instances with the injections applied\n let internalModel = new InternalModel(this.store, identifier);\n this.modelMapFor(resource.type).add(internalModel, identifier.lid);\n return internalModel;\n }\n remove(internalModel) {\n let recordMap = this.modelMapFor(internalModel.modelName);\n let clientId = internalModel.identifier.lid;\n recordMap.remove(internalModel, clientId);\n const {\n identifier\n } = internalModel;\n this.identifierCache.forgetRecordIdentifier(identifier);\n }\n modelMapFor(type) {\n return this._identityMap.retrieve(type);\n }\n clear(type) {\n if (type === undefined) {\n this._identityMap.clear();\n } else {\n this.modelMapFor(type).clear();\n }\n }\n}","import { DEBUG } from '@glimmer/env';\nimport WeakCache from './weak-cache';\nconst Cache = new WeakCache(DEBUG ? 'subscribers' : '');\nCache._generator = () => new Map();\nconst Tokens = new WeakCache(DEBUG ? 'identifier' : '');\n\n// 'property' is an internal EmberData only transition period concept.\n\nexport function unsubscribe(token) {\n let identifier = Tokens.get(token);\n if (!identifier) {\n throw new Error('Passed unknown unsubscribe token to unsubscribe');\n }\n Tokens.delete(token);\n const map = Cache.get(identifier);\n map?.delete(token);\n}\n/*\n Currently only support a single callback per identifier\n*/\nexport default class NotificationManager {\n constructor(store) {\n this.store = store;\n }\n subscribe(identifier, callback) {\n let stableIdentifier = this.store.identifierCache.getOrCreateRecordIdentifier(identifier);\n let map = Cache.lookup(stableIdentifier);\n let unsubToken = {};\n map.set(unsubToken, callback);\n Tokens.set(unsubToken, stableIdentifier);\n return unsubToken;\n }\n unsubscribe(token) {\n unsubscribe(token);\n }\n notify(identifier, value, key) {\n let stableIdentifier = this.store.identifierCache.getOrCreateRecordIdentifier(identifier);\n let callbackMap = Cache.get(stableIdentifier);\n if (!callbackMap || !callbackMap.size) {\n return false;\n }\n callbackMap.forEach(cb => {\n cb(stableIdentifier, value, key);\n });\n return true;\n }\n}","var _class, _descriptor, _token, _identifier;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\n\n/**\n @module @ember-data/store\n*/\nimport { resolve } from 'rsvp';\nimport { unsubscribe } from '../record-notification-manager';\n\n/**\n @module @ember-data/store\n*/\n\n/**\n A `RecordReference` is a low-level API that allows users and\n addon authors to perform meta-operations on a record.\n\n @class RecordReference\n @public\n @extends Reference\n*/\nlet RecordReference = (_class = (_token = /*#__PURE__*/_classPrivateFieldLooseKey(\"token\"), _identifier = /*#__PURE__*/_classPrivateFieldLooseKey(\"identifier\"), class RecordReference {\n constructor(store, identifier) {\n // unsubscribe token given to us by the notification manager\n Object.defineProperty(this, _token, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _identifier, {\n writable: true,\n value: void 0\n });\n _initializerDefineProperty(this, \"_ref\", _descriptor, this);\n this.store = store;\n _classPrivateFieldLooseBase(this, _identifier)[_identifier] = identifier;\n _classPrivateFieldLooseBase(this, _token)[_token] = store._notificationManager.subscribe(identifier, (_, bucket, notifiedKey) => {\n if (bucket === 'identity' || (bucket === 'attributes' || bucket === 'property') && notifiedKey === 'id') {\n this._ref++;\n }\n });\n }\n destroy() {\n unsubscribe(_classPrivateFieldLooseBase(this, _token)[_token]);\n }\n get type() {\n return this.identifier().type;\n }\n\n /**\n The `id` of the record that this reference refers to.\n Together, the `type` and `id` properties form a composite key for\n the identity map.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n userRef.id(); // '1'\n ```\n @method id\n @public\n @return {String} The id of the record.\n */\n id() {\n this._ref; // consume the tracked prop\n return _classPrivateFieldLooseBase(this, _identifier)[_identifier].id;\n }\n\n /**\n The `identifier` of the record that this reference refers to.\n Together, the `type` and `id` properties form a composite key for\n the identity map.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n userRef.identifier(); // '1'\n ```\n @method identifier\n @public\n @return {String} The identifier of the record.\n */\n identifier() {\n return _classPrivateFieldLooseBase(this, _identifier)[_identifier];\n }\n\n /**\n How the reference will be looked up when it is loaded. Currently\n this always returns `identity` to signify that a record will be\n loaded by its `type` and `id`.\n Example\n ```javascript\n const userRef = store.getReference('user', 1);\n userRef.remoteType(); // 'identity'\n ```\n @method remoteType\n @public\n @return {String} 'identity'\n */\n remoteType() {\n return 'identity';\n }\n\n /**\n This API allows you to provide a reference with new data. The\n simplest usage of this API is similar to `store.push`: you provide a\n normalized hash of data and the object represented by the reference\n will update.\n If you pass a promise to `push`, Ember Data will not ask the adapter\n for the data if another attempt to fetch it is made in the\n interim. When the promise resolves, the underlying object is updated\n with the new data, and the promise returned by *this function* is resolved\n with that object.\n For example, `recordReference.push(promise)` will be resolved with a\n record.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // provide data for reference\n userRef.push({\n data: {\n id: \"1\",\n type: \"user\",\n attributes: {\n username: \"@user\"\n }\n }\n }).then(function(user) {\n userRef.value() === user;\n });\n ```\n @method push\n @public\n @param objectOrPromise a JSON:API ResourceDocument or a promise resolving to one\n @return a promise for the value (record or relationship)\n */\n push(objectOrPromise) {\n // TODO @deprecate pushing unresolved payloads\n return resolve(objectOrPromise).then(data => {\n return this.store.push(data);\n });\n }\n\n /**\n If the entity referred to by the reference is already loaded, it is\n present as `reference.value`. Otherwise the value returned by this function\n is `null`.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n userRef.value(); // user\n ```\n @method value\n @public\n @return {Model} the record for this RecordReference\n */\n value() {\n return this.store.peekRecord(_classPrivateFieldLooseBase(this, _identifier)[_identifier]);\n }\n\n /**\n Triggers a fetch for the backing entity based on its `remoteType`\n (see `remoteType` definitions per reference type).\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // load user (via store.find)\n userRef.load().then(...)\n ```\n @method load\n @public\n @return {Promise} the record for this RecordReference\n */\n load() {\n const id = this.id();\n if (id !== null) {\n return this.store.findRecord(this.type, id);\n }\n assert(`Unable to fetch record of type ${this.type} without an id`);\n }\n\n /**\n Reloads the record if it is already loaded. If the record is not\n loaded it will load the record via `store.findRecord`\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // or trigger a reload\n userRef.reload().then(...)\n ```\n @method reload\n @public\n @return {Promise} the record for this RecordReference\n */\n reload() {\n const id = this.id();\n if (id !== null) {\n return this.store.findRecord(this.type, id, {\n reload: true\n });\n }\n assert(`Unable to fetch record of type ${this.type} without an id`);\n }\n}), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_ref\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 0;\n }\n}), _class);\nexport { RecordReference as default };","import { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport WeakCache from './weak-cache';\n\n/*\n * Returns the RecordData instance associated with a given\n * Model or Identifier\n */\n\nconst RecordDataForIdentifierCache = new WeakCache(DEBUG ? 'recordData' : '');\nexport function setRecordDataFor(identifier, recordData) {\n assert(`Illegal set of identifier`, !RecordDataForIdentifierCache.has(identifier) || RecordDataForIdentifierCache.get(identifier) === recordData);\n RecordDataForIdentifierCache.set(identifier, recordData);\n}\nexport function removeRecordDataFor(identifier) {\n RecordDataForIdentifierCache.delete(identifier);\n}\nexport default function recordDataFor(instance) {\n if (RecordDataForIdentifierCache.has(instance)) {\n return RecordDataForIdentifierCache.get(instance);\n }\n return null;\n}","import { importSync } from '@embroider/macros';\nimport { internalModelFactoryFor } from './internal-model-factory';\nimport constructResource from './utils/construct-resource';\n\n/**\n @module @ember-data/store\n*/\n\nfunction metaIsRelationshipDefinition(meta) {\n return typeof meta._inverseKey === 'function';\n}\nlet peekGraph;\nif (true /* HAS_RECORD_DATA_PACKAGE */) {\n let _peekGraph;\n peekGraph = wrapper => {\n _peekGraph = _peekGraph || importSync('@ember-data/record-data/-private').peekGraph;\n return _peekGraph(wrapper);\n };\n}\nexport default class RecordDataStoreWrapper {\n constructor(_store) {\n this._store = _store;\n this._willNotify = false;\n this._pendingNotifies = new Map();\n }\n get identifierCache() {\n return this._store.identifierCache;\n }\n _scheduleNotification(identifier, key, kind) {\n let pending = this._pendingNotifies.get(identifier);\n if (!pending) {\n pending = new Map();\n this._pendingNotifies.set(identifier, pending);\n }\n pending.set(key, kind);\n if (this._willNotify === true) {\n return;\n }\n this._willNotify = true;\n let backburner = this._store._backburner;\n backburner.schedule('notify', this, this._flushNotifications);\n }\n notifyErrorsChange(type, id, lid) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n let internalModel = internalModelFactoryFor(this._store).peek(identifier);\n if (internalModel) {\n internalModel.notifyErrorsChange();\n }\n }\n _flushNotifications() {\n if (this._willNotify === false) {\n return;\n }\n let pending = this._pendingNotifies;\n this._pendingNotifies = new Map();\n this._willNotify = false;\n const factory = internalModelFactoryFor(this._store);\n pending.forEach((map, identifier) => {\n const internalModel = factory.peek(identifier);\n if (internalModel) {\n map.forEach((kind, key) => {\n if (kind === 'belongsTo') {\n internalModel.notifyBelongsToChange(key);\n } else {\n internalModel.notifyHasManyChange(key);\n }\n });\n }\n });\n }\n attributesDefinitionFor(type) {\n return this._store.getSchemaDefinitionService().attributesDefinitionFor({\n type\n });\n }\n relationshipsDefinitionFor(type) {\n return this._store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type\n });\n }\n inverseForRelationship(type, key) {\n const modelClass = this._store.modelFor(type);\n const definition = this.relationshipsDefinitionFor(type)[key];\n if (!definition) {\n return null;\n }\n if (metaIsRelationshipDefinition(definition)) {\n return definition._inverseKey(this._store, modelClass);\n } else if (definition.options && definition.options.inverse !== undefined) {\n return definition.options.inverse;\n } else {\n return null;\n }\n }\n inverseIsAsyncForRelationship(type, key) {\n const modelClass = this._store.modelFor(type);\n const definition = this.relationshipsDefinitionFor(type)[key];\n if (!definition) {\n return false;\n }\n if (definition.options && definition.options.inverse === null) {\n return false;\n }\n if (definition.inverseIsAsync !== undefined) {\n // TODO do we need to amend the RFC for this prop?\n // else we should add it to the TS interface and document.\n return !!definition.inverseIsAsync;\n } else if (metaIsRelationshipDefinition(definition)) {\n return definition._inverseIsAsync(this._store, modelClass);\n } else {\n return false;\n }\n }\n notifyPropertyChange(type, id, lid, key) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n let internalModel = internalModelFactoryFor(this._store).peek(identifier);\n if (internalModel) {\n internalModel.notifyAttributes(key ? [key] : []);\n }\n }\n notifyHasManyChange(type, id, lid, key) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n this._scheduleNotification(identifier, key, 'hasMany');\n }\n notifyBelongsToChange(type, id, lid, key) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n this._scheduleNotification(identifier, key, 'belongsTo');\n }\n notifyStateChange(type, id, lid, key) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n let internalModel = internalModelFactoryFor(this._store).peek(identifier);\n if (internalModel) {\n internalModel.notifyStateChange(key);\n }\n }\n recordDataFor(type, id, lid) {\n let identifier;\n let isCreate = false;\n if (!id && !lid) {\n isCreate = true;\n identifier = {\n type\n };\n } else {\n const resource = constructResource(type, id, lid);\n identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n }\n return this._store._instanceCache.recordDataFor(identifier, isCreate);\n }\n setRecordId(type, id, lid) {\n this._store._instanceCache.setRecordId(type, id, lid);\n }\n isRecordInUse(type, id, lid) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n const record = this._store._instanceCache.peek({\n identifier,\n bucket: 'record'\n });\n return record ? !(record.isDestroyed || record.isDestroying) : false;\n }\n disconnectRecord(type, id, lid) {\n const resource = constructResource(type, id, lid);\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n let graph = peekGraph(this);\n if (graph) {\n graph.remove(identifier);\n }\n }\n let internalModel = internalModelFactoryFor(this._store).peek(identifier);\n if (internalModel) {\n internalModel.destroyFromRecordData();\n }\n }\n}","function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nimport { A, default as EmberArray } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { resolve } from 'rsvp';\nimport coerceId, { ensureStringId } from './coerce-id';\nimport { assertIdentifierHasId } from './core-store';\nimport { internalModelFactoryFor, setRecordIdentifier } from './internal-model-factory';\nimport RecordReference from './model/record-reference';\nimport normalizeModelName from './normalize-model-name';\nimport recordDataFor, { setRecordDataFor } from './record-data-for';\nimport RecordDataStoreWrapper from './record-data-store-wrapper';\nimport Snapshot from './snapshot';\nimport constructResource from './utils/construct-resource';\nimport WeakCache from './weak-cache';\nconst RECORD_REFERENCES = new WeakCache(DEBUG ? 'reference' : '');\nexport const StoreMap = new WeakCache(DEBUG ? 'store' : '');\nexport function storeFor(record) {\n const store = StoreMap.get(record);\n assert(`A record in a disconnected state cannot utilize the store. This typically means the record has been destroyed, most commonly by unloading it.`, store);\n return store;\n}\nvar _instances = /*#__PURE__*/_classPrivateFieldLooseKey(\"instances\");\nexport class InstanceCache {\n constructor(store) {\n Object.defineProperty(this, _instances, {\n writable: true,\n value: {\n record: new WeakMap(),\n recordData: new WeakMap()\n }\n });\n this.store = store;\n this._storeWrapper = new RecordDataStoreWrapper(this.store);\n this.__recordDataFor = this.__recordDataFor.bind(this);\n RECORD_REFERENCES._generator = identifier => {\n return new RecordReference(this.store, identifier);\n };\n }\n peek({\n identifier,\n bucket\n }) {\n return _classPrivateFieldLooseBase(this, _instances)[_instances][bucket]?.get(identifier);\n }\n set({\n identifier,\n bucket,\n value\n }) {\n _classPrivateFieldLooseBase(this, _instances)[_instances][bucket].set(identifier, value);\n }\n getRecord(identifier, properties) {\n let record = this.peek({\n identifier,\n bucket: 'record'\n });\n if (!record) {\n // TODO store this state somewhere better\n const internalModel = this.getInternalModel(identifier);\n if (internalModel._isDematerializing) {\n // TODO this should be an assertion, this likely means\n // we have a bug to find wherein our own store is calling this\n // with an identifier that should have already been disconnected.\n // the destroy + fetch again case is likely either preserving the\n // identifier for re-use or failing to unload it.\n return null;\n }\n\n // TODO store this state somewhere better\n internalModel.hasRecord = true;\n if (properties && 'id' in properties) {\n assert(`expected id to be a string or null`, properties.id !== undefined);\n internalModel.setId(properties.id);\n }\n record = this._instantiateRecord(this.getRecordData(identifier), identifier, properties);\n this.set({\n identifier,\n bucket: 'record',\n value: record\n });\n }\n return record;\n }\n getReference(identifier) {\n return RECORD_REFERENCES.lookup(identifier);\n }\n _fetchDataIfNeededForIdentifier(identifier, options = {}) {\n const internalModel = this.getInternalModel(identifier);\n\n // pre-loading will change the isEmpty value\n // TODO stpre this state somewhere other than InternalModel\n const {\n isEmpty,\n isLoading\n } = internalModel;\n if (options.preload) {\n this.store._backburner.join(() => {\n internalModel.preloadData(options.preload);\n });\n }\n let promise;\n if (isEmpty) {\n assertIdentifierHasId(identifier);\n promise = this.store._fetchManager.scheduleFetch(identifier, options);\n } else if (isLoading) {\n promise = this.store._fetchManager.getPendingFetch(identifier, options);\n assert(`Expected to find a pending request for a record in the loading state, but found none`, promise);\n } else {\n promise = resolve(identifier);\n }\n return promise;\n }\n _instantiateRecord(recordData, identifier, properties) {\n // assert here\n if (properties !== undefined) {\n assert(`You passed '${typeof properties}' as properties for record creation instead of an object.`, typeof properties === 'object' && properties !== null);\n const {\n type\n } = identifier;\n\n // convert relationship Records to RecordDatas before passing to RecordData\n let defs = this.store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type\n });\n if (defs !== null) {\n let keys = Object.keys(properties);\n let relationshipValue;\n for (let i = 0; i < keys.length; i++) {\n let prop = keys[i];\n let def = defs[prop];\n if (def !== undefined) {\n if (def.kind === 'hasMany') {\n if (DEBUG) {\n assertRecordsPassedToHasMany(properties[prop]);\n }\n relationshipValue = extractRecordDatasFromRecords(properties[prop]);\n } else {\n relationshipValue = extractRecordDataFromRecord(properties[prop]);\n }\n properties[prop] = relationshipValue;\n }\n }\n }\n }\n\n // TODO guard against initRecordOptions no being there\n let createOptions = recordData._initRecordCreateOptions(properties);\n //TODO Igor pass a wrapper instead of RD\n let record = this.store.instantiateRecord(identifier, createOptions,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.__recordDataFor, this.store._notificationManager);\n setRecordIdentifier(record, identifier);\n setRecordDataFor(record, recordData);\n StoreMap.set(record, this.store);\n return record;\n }\n _teardownRecord(record) {\n StoreMap.delete(record);\n // TODO remove identifier:record cache link\n this.store.teardownRecord(record);\n }\n removeRecord(identifier) {\n let record = this.peek({\n identifier,\n bucket: 'record'\n });\n if (record) {\n _classPrivateFieldLooseBase(this, _instances)[_instances].record.delete(identifier);\n this._teardownRecord(record);\n }\n return !!record;\n }\n\n // TODO move RecordData Cache into InstanceCache\n getRecordData(identifier) {\n let recordData = this.peek({\n identifier,\n bucket: 'recordData'\n });\n if (!recordData) {\n recordData = this._createRecordData(identifier);\n _classPrivateFieldLooseBase(this, _instances)[_instances].recordData.set(identifier, recordData);\n this.getInternalModel(identifier).hasRecordData = true;\n }\n return recordData;\n }\n\n // TODO move InternalModel cache into InstanceCache\n getInternalModel(identifier) {\n return this._internalModelForResource(identifier);\n }\n createSnapshot(identifier, options = {}) {\n return new Snapshot(options, identifier, this.store);\n }\n __recordDataFor(resource) {\n const identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resource);\n return this.recordDataFor(identifier, false);\n }\n\n // TODO move this to InstanceCache\n _createRecordData(identifier) {\n const recordData = this.store.createRecordDataFor(identifier.type, identifier.id, identifier.lid, this._storeWrapper);\n setRecordDataFor(identifier, recordData);\n // TODO this is invalid for v2 recordData but required\n // for v1 recordData. Remember to remove this once the\n // RecordData manager handles converting recordData to identifier\n setRecordIdentifier(recordData, identifier);\n return recordData;\n }\n\n // TODO string candidate for early elimination\n _internalModelForResource(resource) {\n return internalModelFactoryFor(this.store).getByResource(resource);\n }\n setRecordId(modelName, newId, clientId) {\n internalModelFactoryFor(this.store).setRecordId(modelName, newId, clientId);\n }\n _load(data) {\n // TODO type should be pulled from the identifier for debug\n let modelName = data.type;\n assert(`You must include an 'id' for ${modelName} in an object passed to 'push'`, data.id !== null && data.id !== undefined && data.id !== '');\n assert(`You tried to push data with a type '${modelName}' but no model could be found with that name.`, this.store.getSchemaDefinitionService().doesTypeExist(modelName));\n\n // TODO this should determine identifier via the cache before making assumptions\n const resource = constructResource(normalizeModelName(data.type), ensureStringId(data.id), coerceId(data.lid));\n const maybeIdentifier = this.store.identifierCache.peekRecordIdentifier(resource);\n let internalModel = internalModelFactoryFor(this.store).lookup(resource, data);\n\n // store.push will be from empty\n // findRecord will be from root.loading\n // this cannot be loading state if we do not already have an identifier\n // all else will be updates\n const isLoading = internalModel.isLoading || !internalModel.isLoaded && maybeIdentifier;\n const isUpdate = internalModel.isEmpty === false && !isLoading;\n\n // exclude store.push (root.empty) case\n let identifier = internalModel.identifier;\n if (isUpdate || isLoading) {\n let updatedIdentifier = this.store.identifierCache.updateRecordIdentifier(identifier, data);\n if (updatedIdentifier !== identifier) {\n // we encountered a merge of identifiers in which\n // two identifiers (and likely two internalModels)\n // existed for the same resource. Now that we have\n // determined the correct identifier to use, make sure\n // that we also use the correct internalModel.\n identifier = updatedIdentifier;\n internalModel = internalModelFactoryFor(this.store).lookup(identifier);\n }\n }\n internalModel.setupData(data);\n if (!isUpdate) {\n this.store.recordArrayManager.recordDidChange(identifier);\n }\n return identifier;\n }\n recordDataFor(identifier, isCreate) {\n let recordData;\n if (isCreate === true) {\n // TODO remove once InternalModel is no longer essential to internal state\n // and just build a new identifier directly\n let internalModel = internalModelFactoryFor(this.store).build({\n type: identifier.type,\n id: null\n });\n let stableIdentifier = internalModel.identifier;\n recordData = this.getRecordData(stableIdentifier);\n recordData.clientDidCreate();\n this.store.recordArrayManager.recordDidChange(stableIdentifier);\n } else {\n // TODO remove once InternalModel is no longer essential to internal state\n internalModelFactoryFor(this.store).lookup(identifier);\n recordData = this.getRecordData(identifier);\n }\n return recordData;\n }\n}\nfunction assertRecordsPassedToHasMany(records) {\n assert(`You must pass an array of records to set a hasMany relationship`,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n Array.isArray(records) || EmberArray.detect(records));\n assert(`All elements of a hasMany relationship must be instances of Model, you passed ${records.map(r => `${typeof r}`).join(', ')}`, function () {\n return A(records).every(record => Object.prototype.hasOwnProperty.call(record, '_internalModel') === true);\n }());\n}\nfunction extractRecordDatasFromRecords(records) {\n return records.map(extractRecordDataFromRecord);\n}\nfunction extractRecordDataFromRecord(recordOrPromiseRecord) {\n if (!recordOrPromiseRecord) {\n return null;\n }\n if (isPromiseRecord(recordOrPromiseRecord)) {\n let content = recordOrPromiseRecord.get && recordOrPromiseRecord.get('content');\n assert('You passed in a promise that did not originate from an EmberData relationship. You can only pass promises that come from a belongsTo or hasMany relationship to the get call.', content !== undefined);\n return content ? recordDataFor(content) : null;\n }\n return recordDataFor(recordOrPromiseRecord);\n}\nfunction isPromiseRecord(record) {\n return !!record.then;\n}","import { DEBUG } from '@glimmer/env';\nimport WeakCache from '../weak-cache';\nconst AvailableShims = new WeakCache(DEBUG ? 'schema-shims' : '');\nAvailableShims._generator = () => {\n return Object.create(null);\n};\nexport function getShimClass(store, modelName) {\n let shims = AvailableShims.lookup(store);\n let shim = shims[modelName];\n if (shim === undefined) {\n shim = shims[modelName] = new ShimModelClass(store, modelName);\n }\n return shim;\n}\nfunction mapFromHash(hash) {\n let map = new Map();\n for (let i in hash) {\n if (Object.prototype.hasOwnProperty.call(hash, i)) {\n map.set(i, hash[i]);\n }\n }\n return map;\n}\n\n// Mimics the static apis of DSModel\nexport default class ShimModelClass {\n // TODO Maybe expose the class here?\n constructor(__store, modelName) {\n this.__store = __store;\n this.modelName = modelName;\n }\n get fields() {\n let attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n let relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n let fields = new Map();\n Object.keys(attrs).forEach(key => fields.set(key, 'attribute'));\n Object.keys(relationships).forEach(key => fields.set(key, relationships[key].kind));\n return fields;\n }\n get attributes() {\n let attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n return mapFromHash(attrs);\n }\n get relationshipsByName() {\n let relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n return mapFromHash(relationships);\n }\n eachAttribute(callback, binding) {\n let attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n Object.keys(attrDefs).forEach(key => {\n callback.call(binding, key, attrDefs[key]);\n });\n }\n eachRelationship(callback, binding) {\n let relationshipDefs = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n Object.keys(relationshipDefs).forEach(key => {\n callback.call(binding, key, relationshipDefs[key]);\n });\n }\n eachTransformedAttribute(callback, binding) {\n let relationshipDefs = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n Object.keys(relationshipDefs).forEach(key => {\n if (relationshipDefs[key].type) {\n callback.call(binding, key, relationshipDefs[key]);\n }\n });\n }\n}","import ArrayProxy from '@ember/array/proxy';\nimport PromiseProxyMixin from '@ember/object/promise-proxy-mixin';\nimport ObjectProxy from '@ember/object/proxy';\nexport const PromiseArrayProxy = ArrayProxy.extend(PromiseProxyMixin);\nexport const PromiseObjectProxy = ObjectProxy.extend(PromiseProxyMixin);","var _dec, _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { deprecate } from '@ember/debug';\nimport { reads } from '@ember/object/computed';\nimport { resolve } from 'rsvp';\nimport { PromiseArrayProxy, PromiseObjectProxy } from './promise-proxy-base';\n\n/**\n @module @ember-data/store\n*/\n\n/**\n A `PromiseArray` is an object that acts like both an `Ember.Array`\n and a promise. When the promise is resolved the resulting value\n will be set to the `PromiseArray`'s `content` property. This makes\n it easy to create data bindings with the `PromiseArray` that will be\n updated when the promise resolves.\n\n This class should not be imported and instantiated directly.\n\n For more information see the [Ember.PromiseProxyMixin\n documentation](/ember/release/classes/PromiseProxyMixin).\n\n Example\n\n ```javascript\n let promiseArray = PromiseArray.create({\n promise: $.getJSON('/some/remote/data.json')\n });\n\n promiseArray.get('length'); // 0\n\n promiseArray.then(function() {\n promiseArray.get('length'); // 100\n });\n ```\n\n @class PromiseArray\n @public\n @extends Ember.ArrayProxy\n @uses Ember.PromiseProxyMixin\n*/\n\nexport let PromiseArray = (_dec = reads('content.meta'), _class = class PromiseArray extends PromiseArrayProxy {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"meta\", _descriptor, this);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"meta\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\n\n/**\n A `PromiseObject` is an object that acts like both an `EmberObject`\n and a promise. When the promise is resolved, then the resulting value\n will be set to the `PromiseObject`'s `content` property. This makes\n it easy to create data bindings with the `PromiseObject` that will\n be updated when the promise resolves.\n\n This class should not be imported and instantiated directly.\n\n For more information see the [Ember.PromiseProxyMixin\n documentation](/ember/release/classes/PromiseProxyMixin.html).\n\n Example\n\n ```javascript\n let promiseObject = PromiseObject.create({\n promise: $.getJSON('/some/remote/data.json')\n });\n\n promiseObject.get('name'); // null\n\n promiseObject.then(function() {\n promiseObject.get('name'); // 'Tomster'\n });\n ```\n\n @class PromiseObject\n @public\n @extends Ember.ObjectProxy\n @uses Ember.PromiseProxyMixin\n*/\nexport { PromiseObjectProxy as PromiseObject };\nexport function promiseObject(promise, label) {\n return PromiseObjectProxy.create({\n promise: resolve(promise, label)\n });\n}\nexport function promiseArray(promise, label) {\n return PromiseArray.create({\n promise: resolve(promise, label)\n });\n}\n\n// constructor is accessed in some internals but not including it in the copyright for the deprecation\nconst ALLOWABLE_METHODS = ['constructor', 'then', 'catch', 'finally'];\nexport function deprecatedPromiseObject(promise) {\n const promiseObjectProxy = promiseObject(promise);\n const handler = {\n get(target, prop, receiver) {\n if (!ALLOWABLE_METHODS.includes(prop)) {\n deprecate(`Accessing ${prop} is deprecated. The return type is being changed fomr PromiseObjectProxy to a Promise. The only available methods to access on this promise are .then, .catch and .finally`, false, {\n id: 'ember-data:model-save-promise',\n until: '5.0',\n for: '@ember-data/store',\n since: {\n available: '4.4',\n enabled: '4.4'\n }\n });\n }\n const value = Reflect.get(target, prop, receiver);\n if (value && typeof value === 'function' && typeof value.bind === 'function') {\n return value.bind(target);\n }\n return value;\n }\n };\n return new Proxy(promiseObjectProxy, handler);\n}","/**\n @module @ember-data/store\n*/\n\nimport { deprecate } from '@ember/debug';\n/**\n SnapshotRecordArray is not directly instantiable.\n Instances are provided to consuming application's\n adapters for certain requests.\n\n @class SnapshotRecordArray\n @public\n*/\nexport default class SnapshotRecordArray {\n /**\n SnapshotRecordArray is not directly instantiable.\n Instances are provided to consuming application's\n adapters and serializers for certain requests.\n @method constructor\n @private\n @constructor\n @param {RecordArray} recordArray\n @param {Object} meta\n @param options\n */\n constructor(recordArray, meta, options = {}) {\n /**\n An array of snapshots\n @private\n @property _snapshots\n @type {Array}\n */\n this._snapshots = null;\n\n /**\n An array of records\n @private\n @property _recordArray\n @type {Array}\n */\n this._recordArray = recordArray;\n\n /**\n Number of records in the array\n Example\n ```app/adapters/post.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n export default class PostAdapter extends JSONAPIAdapter {\n shouldReloadAll(store, snapshotRecordArray) {\n return !snapshotRecordArray.length;\n }\n });\n ```\n @property length\n @public\n @type {Number}\n */\n this.length = recordArray.get('length');\n\n /**\n Meta objects for the record array.\n Example\n ```app/adapters/post.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n export default class PostAdapter extends JSONAPIAdapter {\n shouldReloadAll(store, snapshotRecordArray) {\n let lastRequestTime = snapshotRecordArray.meta.lastRequestTime;\n let twentyMinutes = 20 * 60 * 1000;\n return Date.now() > lastRequestTime + twentyMinutes;\n }\n });\n ```\n @property meta\n @public\n @type {Object}\n */\n this.meta = meta;\n\n /**\n A hash of adapter options passed into the store method for this request.\n Example\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n findAll(store, type, sinceToken, snapshotRecordArray) {\n if (snapshotRecordArray.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n @property adapterOptions\n @public\n @type {Object}\n */\n this.adapterOptions = options.adapterOptions;\n\n /**\n The relationships to include for this request.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default class ApplicationAdapter extends Adapter {\n findAll(store, type, snapshotRecordArray) {\n let url = `/${type.modelName}?include=${encodeURIComponent(snapshotRecordArray.include)}`;\n return fetch(url).then((response) => response.json())\n }\n }\n ```\n @property include\n @public\n @type {String|Array}\n */\n this.include = options.include;\n }\n\n /**\n The type of the underlying records for the snapshots in the array, as a Model\n @property type\n @deprecated\n @public\n @type {Model}\n */\n\n /**\n The modelName of the underlying records for the snapshots in the array, as a Model\n @property modelName\n @public\n @type {Model}\n */\n get modelName() {\n return this._recordArray.modelName;\n }\n\n /**\n Get snapshots of the underlying record array\n Example\n ```app/adapters/post.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n export default class PostAdapter extends JSONAPIAdapter {\n shouldReloadAll(store, snapshotArray) {\n let snapshots = snapshotArray.snapshots();\n return snapshots.any(function(ticketSnapshot) {\n let timeDiff = moment().diff(ticketSnapshot.attr('lastAccessedAt'), 'minutes');\n if (timeDiff > 20) {\n return true;\n } else {\n return false;\n }\n });\n }\n }\n ```\n @method snapshots\n @public\n @return {Array} Array of snapshots\n */\n snapshots() {\n if (this._snapshots !== null) {\n return this._snapshots;\n }\n this._snapshots = this._recordArray._takeSnapshot();\n return this._snapshots;\n }\n}\nif (true /* DEPRECATE_SNAPSHOT_MODEL_CLASS_ACCESS */) {\n Object.defineProperty(SnapshotRecordArray.prototype, 'type', {\n get() {\n deprecate(`Using SnapshotRecordArray.type to access the ModelClass for a record is deprecated. Use store.modelFor() instead.`, false, {\n id: 'ember-data:deprecate-snapshot-model-class-access',\n until: '5.0',\n for: 'ember-data',\n since: {\n available: '4.5.0',\n enabled: '4.5.0'\n }\n });\n return this._recordArray.get('type');\n }\n });\n}","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n/**\n @module @ember-data/store\n*/\n\nimport ArrayProxy from '@ember/array/proxy';\nimport { assert, deprecate } from '@ember/debug';\nimport { get, set } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { Promise } from 'rsvp';\nimport { promiseArray } from '../promise-proxies';\nimport SnapshotRecordArray from '../snapshot-record-array';\nfunction recordForIdentifier(store, identifier) {\n return store._instanceCache.getRecord(identifier);\n}\n/**\n A record array is an array that contains records of a certain modelName. The record\n array materializes records as needed when they are retrieved for the first\n time. You should not create record arrays yourself. Instead, an instance of\n `RecordArray` or its subclasses will be returned by your application's store\n in response to queries.\n\n This class should not be imported and instantiated by consuming applications.\n\n @class RecordArray\n @public\n @extends Ember.ArrayProxy\n*/\nlet RecordArray = (_class = class RecordArray extends ArrayProxy {\n constructor(...args) {\n super(...args);\n /**\n The array of client ids backing the record array. When a\n record is requested from the record array, the record\n for the client id at the same index is materialized, if\n necessary, by the store.\n @property content\n @private\n @type Ember.Array\n */\n /**\n The flag to signal a `RecordArray` is finished loading data.\n Example\n ```javascript\n let people = store.peekAll('person');\n people.get('isLoaded'); // true\n ```\n @property isLoaded\n @public\n @type Boolean\n */\n /**\n The store that created this record array.\n @property store\n @private\n @type Store\n */\n /**\n The flag to signal a `RecordArray` is currently loading data.\n Example\n ```javascript\n let people = store.peekAll('person');\n people.get('isUpdating'); // false\n people.update();\n people.get('isUpdating'); // true\n ```\n @property isUpdating\n @public\n @type Boolean\n */\n _initializerDefineProperty(this, \"isUpdating\", _descriptor, this);\n }\n init(props) {\n assert(`Cannot initialize RecordArray with isUpdating`, !props || !('isUpdating' in props));\n assert(`Cannot initialize RecordArray with isUpdating`, !props || !('_updatingPromise' in props));\n super.init();\n\n // TODO can we get rid of this?\n this.set('content', this.content || null);\n this._updatingPromise = null;\n }\n replace() {\n throw new Error(`The result of a server query (for all ${this.modelName} types) is immutable. To modify contents, use toArray()`);\n }\n\n /**\n The modelClass represented by this record array.\n @property type\n @public\n @deprecated\n @type {subclass of Model}\n */\n\n /**\n Retrieves an object from the content by index.\n @method objectAtContent\n @private\n @param {Number} index\n @return {Model} record\n */\n objectAtContent(index) {\n let identifier = get(this, 'content').objectAt(index);\n return identifier ? recordForIdentifier(this.store, identifier) : undefined;\n }\n\n /**\n Used to get the latest version of all of the records in this array\n from the adapter.\n Example\n ```javascript\n let people = store.peekAll('person');\n people.get('isUpdating'); // false\n people.update().then(function() {\n people.get('isUpdating'); // false\n });\n people.get('isUpdating'); // true\n ```\n @method update\n @public\n */\n update() {\n if (this.isUpdating) {\n return this._updatingPromise;\n }\n this.isUpdating = true;\n let updatingPromise = this._update();\n updatingPromise.finally(() => {\n this._updatingPromise = null;\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n this.isUpdating = false;\n });\n this._updatingPromise = updatingPromise;\n return updatingPromise;\n }\n\n /*\n Update this RecordArray and return a promise which resolves once the update\n is finished.\n */\n _update() {\n return this.store.findAll(this.modelName, {\n reload: true\n });\n }\n\n /**\n Saves all of the records in the `RecordArray`.\n Example\n ```javascript\n let messages = store.peekAll('message');\n messages.forEach(function(message) {\n message.set('hasBeenSeen', true);\n });\n messages.save();\n ```\n @method save\n @public\n @return {PromiseArray} promise\n */\n save() {\n let promiseLabel = `DS: RecordArray#save ${this.modelName}`;\n let promise = Promise.all(this.invoke('save'), promiseLabel).then(() => this, null, 'DS: RecordArray#save return RecordArray');\n return promiseArray(promise);\n }\n\n /**\n @method _unregisterFromManager\n @internal\n */\n _unregisterFromManager() {\n this.manager.unregisterRecordArray(this);\n }\n willDestroy() {\n this._unregisterFromManager();\n this._dissociateFromOwnRecords();\n // TODO: we should not do work during destroy:\n // * when objects are destroyed, they should simply be left to do\n // * if logic errors do to this, that logic needs to be more careful during\n // teardown (ember provides isDestroying/isDestroyed) for this reason\n // * the exception being: if an dominator has a reference to this object,\n // and must be informed to release e.g. e.g. removing itself from th\n // recordArrayMananger\n set(this, 'content', null);\n set(this, 'length', 0);\n super.willDestroy();\n }\n\n /**\n @method _createSnapshot\n @private\n */\n _createSnapshot(options) {\n // this is private for users, but public for ember-data internals\n // meta will only be present for an AdapterPopulatedRecordArray\n return new SnapshotRecordArray(this, null, options);\n }\n\n /**\n @method _dissociateFromOwnRecords\n @internal\n */\n _dissociateFromOwnRecords() {\n this.content.forEach(identifier => {\n let recordArrays = this.manager.getRecordArraysForIdentifier(identifier);\n if (recordArrays) {\n recordArrays.delete(this);\n }\n });\n }\n\n /**\n Adds identifiers to the `RecordArray` without duplicates\n @method _pushIdentifiers\n @internal\n @param {StableRecordIdentifier[]} identifiers\n */\n _pushIdentifiers(identifiers) {\n this.content.pushObjects(identifiers);\n }\n\n /**\n Removes identifiers from the `RecordArray`.\n @method _removeIdentifiers\n @internal\n @param {StableRecordIdentifier[]} identifiers\n */\n _removeIdentifiers(identifiers) {\n this.content.removeObjects(identifiers);\n }\n\n /**\n @method _takeSnapshot\n @internal\n */\n _takeSnapshot() {\n return this.content.map(identifier => this.store._instanceCache.createSnapshot(identifier));\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isUpdating\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n}), _class);\nexport { RecordArray as default };\nif (true /* DEPRECATE_SNAPSHOT_MODEL_CLASS_ACCESS */) {\n Object.defineProperty(RecordArray.prototype, 'type', {\n get() {\n deprecate(`Using RecordArray.type to access the ModelClass for a record is deprecated. Use store.modelFor() instead.`, false, {\n id: 'ember-data:deprecate-snapshot-model-class-access',\n until: '5.0',\n for: 'ember-data',\n since: {\n available: '4.5.0',\n enabled: '4.5.0'\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!this.modelName) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n return this.store.modelFor(this.modelName);\n }\n });\n}","import { assert } from '@ember/debug';\nimport { promiseArray } from '../promise-proxies';\nimport SnapshotRecordArray from '../snapshot-record-array';\nimport RecordArray from './record-array';\n/**\n @module @ember-data/store\n*/\n\n/**\n Represents an ordered list of records whose order and membership is\n determined by the adapter. For example, a query sent to the adapter\n may trigger a search on the server, whose results would be loaded\n into an instance of the `AdapterPopulatedRecordArray`.\n\n This class should not be imported and instantiated by consuming applications.\n\n ---\n\n If you want to update the array and get the latest records from the\n adapter, you can invoke [`update()`](AdapterPopulatedRecordArray/methods/update?anchor=update):\n\n Example\n\n ```javascript\n // GET /users?isAdmin=true\n store.query('user', { isAdmin: true }).then(function(admins) {\n\n admins.then(function() {\n console.log(admins.get(\"length\")); // 42\n });\n\n // somewhere later in the app code, when new admins have been created\n // in the meantime\n //\n // GET /users?isAdmin=true\n admins.update().then(function() {\n admins.get('isUpdating'); // false\n console.log(admins.get(\"length\")); // 123\n });\n\n admins.get('isUpdating'); // true\n }\n ```\n\n @class AdapterPopulatedRecordArray\n @public\n @extends RecordArray\n*/\nexport default class AdapterPopulatedRecordArray extends RecordArray {\n init(props) {\n assert(`Cannot initialize AdapterPopulatedRecordArray with isUpdating`, !props || !('isUpdating' in props));\n super.init();\n this.query = this.query || null;\n this.links = this.links || null;\n this.meta = this.meta || null;\n }\n replace() {\n throw new Error(`The result of a server query (on ${this.modelName}) is immutable.`);\n }\n _update() {\n const {\n store,\n query\n } = this;\n\n // TODO save options from initial request?\n return promiseArray(store.query(this.modelName, query, {\n _recordArray: this\n }));\n }\n _setObjects(identifiers, payload) {\n // TODO: initial load should not cause change events at all, only\n // subsequent. This requires changing the public api of adapter.query, but\n // hopefully we can do that soon.\n this.content.setObjects(identifiers);\n this.setProperties({\n isLoaded: true,\n isUpdating: false,\n // TODO this assign kills the root reference but a deep-copy would be required\n // for both meta and links to actually not be by-ref. We whould likely change\n // this to a dev-only deep-freeze.\n meta: Object.assign({}, payload.meta),\n links: Object.assign({}, payload.links)\n });\n this.manager._associateWithRecordArray(identifiers, this);\n }\n _createSnapshot(options) {\n // this is private for users, but public for ember-data internals\n // meta will only be present for an AdapterPopulatedRecordArray\n return new SnapshotRecordArray(this, this.meta, options);\n }\n\n /**\n @method _setIdentifiers\n @param {StableRecordIdentifier[]} identifiers\n @param {Object} payload normalized payload\n @private\n */\n _setIdentifiers(identifiers, payload) {\n this._setObjects(identifiers, payload);\n }\n}","/**\n @module @ember-data/store\n*/\n\nimport { A } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport { set } from '@ember/object';\nimport { _backburner as emberBackburner } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\n\n// import isStableIdentifier from '../identifiers/is-stable-identifier';\n\nimport { internalModelFactoryFor } from './internal-model-factory';\nimport AdapterPopulatedRecordArray from './record-arrays/adapter-populated-record-array';\nimport RecordArray from './record-arrays/record-array';\nimport WeakCache from './weak-cache';\nconst RecordArraysCache = new WeakCache(DEBUG ? 'record-arrays' : '');\nRecordArraysCache._generator = () => new Set();\nexport function recordArraysForIdentifier(identifier) {\n return RecordArraysCache.lookup(identifier);\n}\nconst pendingForIdentifier = new Set([]);\nfunction getIdentifier(identifier) {\n // during dematerialization we will get an identifier that\n // has already been removed from the identifiers cache\n // so it will not behave as if stable. This is a bug we should fix.\n // if (!isStableIdentifier(identifierOrInternalModel)) {\n // console.log({ unstable: i });\n // }\n\n return identifier;\n}\nfunction shouldIncludeInRecordArrays(store, identifier) {\n const cache = internalModelFactoryFor(store);\n const internalModel = cache.peek(identifier);\n if (internalModel === null) {\n return false;\n }\n return !internalModel.isHiddenFromRecordArrays();\n}\n\n/**\n @class RecordArrayManager\n @internal\n*/\nclass RecordArrayManager {\n constructor(options) {\n this.store = options.store;\n this.isDestroying = false;\n this.isDestroyed = false;\n this._liveRecordArrays = Object.create(null);\n this._pendingIdentifiers = Object.create(null);\n this._adapterPopulatedRecordArrays = [];\n }\n\n /**\n * @method getRecordArraysForIdentifier\n * @internal\n * @param {StableIdentifier} param\n * @return {RecordArray} array\n */\n getRecordArraysForIdentifier(identifier) {\n return recordArraysForIdentifier(identifier);\n }\n _flushPendingIdentifiersForModelName(modelName, identifiers) {\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n let identifiersToRemove = [];\n for (let j = 0; j < identifiers.length; j++) {\n let i = identifiers[j];\n // mark identifiers, so they can once again be processed by the\n // recordArrayManager\n pendingForIdentifier.delete(i);\n // build up a set of models to ensure we have purged correctly;\n let isIncluded = shouldIncludeInRecordArrays(this.store, i);\n if (!isIncluded) {\n identifiersToRemove.push(i);\n }\n }\n let array = this._liveRecordArrays[modelName];\n if (array) {\n // TODO: skip if it only changed\n // process liveRecordArrays\n updateLiveRecordArray(this.store, array, identifiers);\n }\n\n // process adapterPopulatedRecordArrays\n if (identifiersToRemove.length > 0) {\n removeFromAdapterPopulatedRecordArrays(this.store, identifiersToRemove);\n }\n }\n _flush() {\n let pending = this._pendingIdentifiers;\n this._pendingIdentifiers = Object.create(null);\n for (let modelName in pending) {\n this._flushPendingIdentifiersForModelName(modelName, pending[modelName]);\n }\n }\n _syncLiveRecordArray(array, modelName) {\n assert(`recordArrayManger.syncLiveRecordArray expects modelName not modelClass as the second param`, typeof modelName === 'string');\n let pending = this._pendingIdentifiers[modelName];\n if (!Array.isArray(pending)) {\n return;\n }\n let hasNoPotentialDeletions = pending.length === 0;\n let map = internalModelFactoryFor(this.store).modelMapFor(modelName);\n let hasNoInsertionsOrRemovals = map.length === array.length;\n\n /*\n Ideally the recordArrayManager has knowledge of the changes to be applied to\n liveRecordArrays, and is capable of strategically flushing those changes and applying\n small diffs if desired. However, until we've refactored recordArrayManager, this dirty\n check prevents us from unnecessarily wiping out live record arrays returned by peekAll.\n */\n if (hasNoPotentialDeletions && hasNoInsertionsOrRemovals) {\n return;\n }\n this._flushPendingIdentifiersForModelName(modelName, pending);\n delete this._pendingIdentifiers[modelName];\n let identifiers = this._visibleIdentifiersByType(modelName);\n let identifiersToAdd = [];\n for (let i = 0; i < identifiers.length; i++) {\n let identifier = identifiers[i];\n let recordArrays = recordArraysForIdentifier(identifier);\n if (recordArrays.has(array) === false) {\n recordArrays.add(array);\n identifiersToAdd.push(identifier);\n }\n }\n if (identifiersToAdd.length) {\n array._pushIdentifiers(identifiersToAdd);\n }\n }\n _didUpdateAll(modelName) {\n let recordArray = this._liveRecordArrays[modelName];\n if (recordArray) {\n set(recordArray, 'isUpdating', false);\n // TODO potentially we should sync here, currently\n // this occurs as a side-effect of individual records updating\n // this._syncLiveRecordArray(recordArray, modelName);\n }\n }\n\n /**\n Get the `RecordArray` for a modelName, which contains all loaded records of\n given modelName.\n @method liveRecordArrayFor\n @internal\n @param {String} modelName\n @return {RecordArray}\n */\n liveRecordArrayFor(modelName) {\n assert(`recordArrayManger.liveRecordArrayFor expects modelName not modelClass as the param`, typeof modelName === 'string');\n let array = this._liveRecordArrays[modelName];\n if (array) {\n // if the array already exists, synchronize\n this._syncLiveRecordArray(array, modelName);\n } else {\n // if the array is being newly created merely create it with its initial\n // content already set. This prevents unneeded change events.\n let identifiers = this._visibleIdentifiersByType(modelName);\n array = this.createRecordArray(modelName, identifiers);\n this._liveRecordArrays[modelName] = array;\n }\n return array;\n }\n _visibleIdentifiersByType(modelName) {\n let all = internalModelFactoryFor(this.store).modelMapFor(modelName).recordIdentifiers;\n let visible = [];\n for (let i = 0; i < all.length; i++) {\n let identifier = all[i];\n let shouldInclude = shouldIncludeInRecordArrays(this.store, identifier);\n if (shouldInclude) {\n visible.push(identifier);\n }\n }\n return visible;\n }\n\n /**\n Create a `RecordArray` for a modelName.\n @method createRecordArray\n @internal\n @param {String} modelName\n @param {Array} [identifiers]\n @return {RecordArray}\n */\n createRecordArray(modelName, identifiers = []) {\n assert(`recordArrayManger.createRecordArray expects modelName not modelClass as the param`, typeof modelName === 'string');\n let array = RecordArray.create({\n modelName,\n content: A(identifiers || []),\n store: this.store,\n isLoaded: true,\n manager: this\n });\n if (Array.isArray(identifiers)) {\n this._associateWithRecordArray(identifiers, array);\n }\n return array;\n }\n\n /**\n Create a `AdapterPopulatedRecordArray` for a modelName with given query.\n @method createAdapterPopulatedRecordArray\n @internal\n @param {String} modelName\n @param {Object} query\n @return {AdapterPopulatedRecordArray}\n */\n createAdapterPopulatedRecordArray(modelName, query, identifiers, payload) {\n assert(`recordArrayManger.createAdapterPopulatedRecordArray expects modelName not modelClass as the first param, received ${modelName}`, typeof modelName === 'string');\n let array;\n if (Array.isArray(identifiers)) {\n array = AdapterPopulatedRecordArray.create({\n modelName,\n query: query,\n content: A(identifiers),\n store: this.store,\n manager: this,\n isLoaded: true,\n isUpdating: false,\n // TODO this assign kills the root reference but a deep-copy would be required\n // for both meta and links to actually not be by-ref. We whould likely change\n // this to a dev-only deep-freeze.\n meta: Object.assign({}, payload?.meta),\n links: Object.assign({}, payload?.links)\n });\n this._associateWithRecordArray(identifiers, array);\n } else {\n array = AdapterPopulatedRecordArray.create({\n modelName,\n query: query,\n content: A(),\n isLoaded: false,\n store: this.store,\n manager: this\n });\n }\n this._adapterPopulatedRecordArrays.push(array);\n return array;\n }\n\n /**\n Unregister a RecordArray.\n So manager will not update this array.\n @method unregisterRecordArray\n @internal\n @param {RecordArray} array\n */\n unregisterRecordArray(array) {\n let modelName = array.modelName;\n\n // remove from adapter populated record array\n let removedFromAdapterPopulated = removeFromArray(this._adapterPopulatedRecordArrays, array);\n if (!removedFromAdapterPopulated) {\n let liveRecordArrayForType = this._liveRecordArrays[modelName];\n // unregister live record array\n if (liveRecordArrayForType) {\n if (array === liveRecordArrayForType) {\n delete this._liveRecordArrays[modelName];\n }\n }\n }\n }\n\n /**\n * @method _associateWithRecordArray\n * @internal\n * @param {StableIdentifier} identifiers\n * @param {RecordArray} array\n */\n _associateWithRecordArray(identifiers, array) {\n for (let i = 0, l = identifiers.length; i < l; i++) {\n let identifier = identifiers[i];\n identifier = getIdentifier(identifier);\n let recordArrays = this.getRecordArraysForIdentifier(identifier);\n recordArrays.add(array);\n }\n }\n\n /**\n @method recordDidChange\n @internal\n */\n recordDidChange(identifier) {\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n let modelName = identifier.type;\n identifier = getIdentifier(identifier);\n if (pendingForIdentifier.has(identifier)) {\n return;\n }\n pendingForIdentifier.add(identifier);\n let pending = this._pendingIdentifiers;\n let models = pending[modelName] = pending[modelName] || [];\n if (models.push(identifier) !== 1) {\n return;\n }\n\n // TODO do we still need this schedule?\n // eslint-disable-next-line @typescript-eslint/unbound-method\n emberBackburner.schedule('actions', this, this._flush);\n }\n willDestroy() {\n Object.keys(this._liveRecordArrays).forEach(modelName => this._liveRecordArrays[modelName].destroy());\n this._adapterPopulatedRecordArrays.forEach(entry => entry.destroy());\n this.isDestroyed = true;\n }\n destroy() {\n this.isDestroying = true;\n // TODO do we still need this schedule?\n // eslint-disable-next-line @typescript-eslint/unbound-method\n emberBackburner.schedule('actions', this, this.willDestroy);\n }\n}\nfunction removeFromArray(array, item) {\n let index = array.indexOf(item);\n if (index !== -1) {\n array.splice(index, 1);\n return true;\n }\n return false;\n}\nfunction updateLiveRecordArray(store, recordArray, identifiers) {\n let identifiersToAdd = [];\n let identifiersToRemove = [];\n for (let i = 0; i < identifiers.length; i++) {\n let identifier = identifiers[i];\n let shouldInclude = shouldIncludeInRecordArrays(store, identifier);\n let recordArrays = recordArraysForIdentifier(identifier);\n if (shouldInclude) {\n if (!recordArrays.has(recordArray)) {\n identifiersToAdd.push(identifier);\n recordArrays.add(recordArray);\n }\n }\n if (!shouldInclude) {\n identifiersToRemove.push(identifier);\n recordArrays.delete(recordArray);\n }\n }\n if (identifiersToAdd.length > 0) {\n recordArray._pushIdentifiers(identifiersToAdd);\n }\n if (identifiersToRemove.length > 0) {\n recordArray._removeIdentifiers(identifiersToRemove);\n }\n}\nfunction removeFromAdapterPopulatedRecordArrays(store, identifiers) {\n for (let i = 0; i < identifiers.length; i++) {\n removeFromAll(store, identifiers[i]);\n }\n}\nfunction removeFromAll(store, identifier) {\n identifier = getIdentifier(identifier);\n const recordArrays = recordArraysForIdentifier(identifier);\n recordArrays.forEach(function (recordArray) {\n recordArray._removeIdentifiers([identifier]);\n });\n recordArrays.clear();\n}\nexport default RecordArrayManager;","import { getOwner } from '@ember/application';\nimport { deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { importSync } from '@embroider/macros';\nimport normalizeModelName from './normalize-model-name';\nlet _modelForMixin;\nif (true /* HAS_MODEL_PACKAGE */) {\n let _found;\n _modelForMixin = function () {\n if (!_found) {\n _found = importSync('@ember-data/model/-private')._modelForMixin;\n }\n return _found(...arguments);\n };\n}\nexport class DSModelSchemaDefinitionService {\n constructor(store) {\n this._relationshipsDefCache = Object.create(null);\n this._attributesDefCache = Object.create(null);\n this.store = store;\n }\n\n // Following the existing RD implementation\n attributesDefinitionFor(identifier) {\n let modelName, attributes;\n if (true /* DEPRECATE_STRING_ARG_SCHEMAS */ && typeof identifier === 'string') {\n deprecate(`attributesDefinitionFor expects either a record identifier or an argument of shape { type: string }, received a string.`, false, {\n id: 'ember-data:deprecate-string-arg-schemas',\n for: 'ember-data',\n until: '5.0',\n since: {\n enabled: '4.5',\n available: '4.5'\n }\n });\n modelName = identifier;\n } else {\n modelName = identifier.type;\n }\n attributes = this._attributesDefCache[modelName];\n if (attributes === undefined) {\n let modelClass = this.store.modelFor(modelName);\n let attributeMap = get(modelClass, 'attributes');\n attributes = Object.create(null);\n attributeMap.forEach((meta, name) => attributes[name] = meta);\n this._attributesDefCache[modelName] = attributes;\n }\n return attributes;\n }\n\n // Following the existing RD implementation\n relationshipsDefinitionFor(identifier) {\n let modelName, relationships;\n if (true /* DEPRECATE_STRING_ARG_SCHEMAS */ && typeof identifier === 'string') {\n deprecate(`relationshipsDefinitionFor expects either a record identifier or an argument of shape { type: string }, received a string.`, false, {\n id: 'ember-data:deprecate-string-arg-schemas',\n for: 'ember-data',\n until: '5.0',\n since: {\n enabled: '4.5',\n available: '4.5'\n }\n });\n modelName = identifier;\n } else {\n modelName = identifier.type;\n }\n relationships = this._relationshipsDefCache[modelName];\n if (relationships === undefined) {\n let modelClass = this.store.modelFor(modelName);\n relationships = get(modelClass, 'relationshipsObject') || null;\n this._relationshipsDefCache[modelName] = relationships;\n }\n return relationships;\n }\n doesTypeExist(modelName) {\n let normalizedModelName = normalizeModelName(modelName);\n let factory = getModelFactory(this.store, this.store._modelFactoryCache, normalizedModelName);\n return factory !== null;\n }\n}\nexport function getModelFactory(store, cache, normalizedModelName) {\n let factory = cache[normalizedModelName];\n if (!factory) {\n let owner = getOwner(store);\n factory = owner.factoryFor(`model:${normalizedModelName}`);\n if (!factory && true /* HAS_MODEL_PACKAGE */) {\n //Support looking up mixins as base types for polymorphic relationships\n factory = _modelForMixin(store, normalizedModelName);\n }\n if (!factory) {\n // we don't cache misses in case someone wants to register a missing model\n return null;\n }\n let klass = factory.class;\n if (klass.isModel) {\n let hasOwnModelNameSet = klass.modelName && Object.prototype.hasOwnProperty.call(klass, 'modelName');\n if (!hasOwnModelNameSet) {\n Object.defineProperty(klass, 'modelName', {\n value: normalizedModelName\n });\n }\n }\n cache[normalizedModelName] = factory;\n }\n return factory;\n}","/**\n @module @ember-data/store\n */\nimport { getOwner, setOwner } from '@ember/application';\nimport { assert, deprecate } from '@ember/debug';\nimport { _backburner as emberBackburner } from '@ember/runloop';\nimport Service from '@ember/service';\nimport { registerWaiter, unregisterWaiter } from '@ember/test';\nimport { DEBUG } from '@glimmer/env';\nimport { importSync } from '@embroider/macros';\nimport { reject, resolve } from 'rsvp';\nimport edBackburner from './backburner';\nimport coerceId, { ensureStringId } from './coerce-id';\nimport FetchManager, { SaveOp } from './fetch-manager';\nimport { _findAll, _query, _queryRecord } from './finders';\nimport { IdentifierCache } from './identifier-cache';\nimport { InstanceCache, storeFor, StoreMap } from './instance-cache';\nimport { internalModelFactoryFor, peekRecordIdentifier, recordIdentifierFor, setRecordIdentifier } from './internal-model-factory';\nimport { getShimClass } from './model/shim-model-class';\nimport normalizeModelName from './normalize-model-name';\nimport { promiseArray, promiseObject } from './promise-proxies';\nimport RecordArrayManager from './record-array-manager';\nimport { setRecordDataFor } from './record-data-for';\nimport NotificationManager from './record-notification-manager';\nimport { DSModelSchemaDefinitionService, getModelFactory } from './schema-definition-service';\nimport constructResource from './utils/construct-resource';\nimport promiseRecord from './utils/promise-record';\nexport { storeFor };\nlet _RecordData;\nfunction freeze(obj) {\n if (typeof Object.freeze === 'function') {\n return Object.freeze(obj);\n }\n return obj;\n}\n/**\n The store contains all of the data for records loaded from the server.\n It is also responsible for creating instances of `Model` that wrap\n the individual data for a record, so that they can be bound to in your\n Handlebars templates.\n\n Define your application's store like this:\n\n ```app/services/store.js\n import Store from '@ember-data/store';\n\n export default class MyStore extends Store {}\n ```\n\n Most Ember.js applications will only have a single `Store` that is\n automatically created by their `Ember.Application`.\n\n You can retrieve models from the store in several ways. To retrieve a record\n for a specific id, use `Store`'s `findRecord()` method:\n\n ```javascript\n store.findRecord('person', 123).then(function (person) {\n });\n ```\n\n By default, the store will talk to your backend using a standard\n REST mechanism. You can customize how the store talks to your\n backend by specifying a custom adapter:\n\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n\n export default class ApplicationAdapter extends Adapter {\n }\n ```\n\n You can learn more about writing a custom adapter by reading the `Adapter`\n documentation.\n\n ### Store createRecord() vs. push() vs. pushPayload()\n\n The store provides multiple ways to create new record objects. They have\n some subtle differences in their use which are detailed below:\n\n [createRecord](../methods/createRecord?anchor=createRecord) is used for creating new\n records on the client side. This will return a new record in the\n `created.uncommitted` state. In order to persist this record to the\n backend, you will need to call `record.save()`.\n\n [push](../methods/push?anchor=push) is used to notify Ember Data's store of new or\n updated records that exist in the backend. This will return a record\n in the `loaded.saved` state. The primary use-case for `store#push` is\n to notify Ember Data about record updates (full or partial) that happen\n outside of the normal adapter methods (for example\n [SSE](http://dev.w3.org/html5/eventsource/) or [Web\n Sockets](http://www.w3.org/TR/2009/WD-websockets-20091222/)).\n\n [pushPayload](../methods/pushPayload?anchor=pushPayload) is a convenience wrapper for\n `store#push` that will deserialize payloads if the\n Serializer implements a `pushPayload` method.\n\n Note: When creating a new record using any of the above methods\n Ember Data will update `RecordArray`s such as those returned by\n `store#peekAll()` or `store#findAll()`. This means any\n data bindings or computed properties that depend on the RecordArray\n will automatically be synced to include the new or updated record\n values.\n\n @main @ember-data/store\n @class Store\n @public\n @extends Ember.Service\n*/\n\nclass Store extends Service {\n /**\n * Ember Data uses several specialized micro-queues for organizing\n and coalescing similar async work.\n These queues are currently controlled by a flush scheduled into\n ember-data's custom backburner instance.\n *\n * EmberData specific backburner instance\n * @property _backburner\n * @private\n */\n\n // DEBUG-only properties\n\n /**\n @method init\n @private\n */\n constructor() {\n super(...arguments);\n\n /**\n * Provides access to the IdentifierCache instance\n * for this store.\n *\n * The IdentifierCache can be used to generate or\n * retrieve a stable unique identifier for any resource.\n *\n * @property {IdentifierCache} identifierCache\n * @public\n */\n this.identifierCache = new IdentifierCache();\n\n // private but maybe useful to be here, somewhat intimate\n this.recordArrayManager = new RecordArrayManager({\n store: this\n });\n\n // private, TODO consider taking public as the instance is public to instantiateRecord anyway\n this._notificationManager = new NotificationManager(this);\n\n // private\n this._fetchManager = new FetchManager(this);\n this._instanceCache = new InstanceCache(this);\n this._adapterCache = Object.create(null);\n this._serializerCache = Object.create(null);\n this._modelFactoryCache = Object.create(null);\n\n // private\n // TODO we should find a path to something simpler than backburner\n this._backburner = edBackburner;\n if (DEBUG) {\n if (this.generateStackTracesForTrackedRequests === undefined) {\n this.generateStackTracesForTrackedRequests = false;\n }\n this._trackedAsyncRequests = [];\n this._trackAsyncRequestStart = label => {\n let trace = 'set `store.generateStackTracesForTrackedRequests = true;` to get a detailed trace for where this request originated';\n if (this.generateStackTracesForTrackedRequests) {\n try {\n throw new Error(`EmberData TrackedRequest: ${label}`);\n } catch (e) {\n trace = e;\n }\n }\n let token = freeze({\n label,\n trace\n });\n this._trackedAsyncRequests.push(token);\n return token;\n };\n this._trackAsyncRequestEnd = token => {\n let index = this._trackedAsyncRequests.indexOf(token);\n if (index === -1) {\n throw new Error(`Attempted to end tracking for the following request but it was not being tracked:\\n${token}`);\n }\n this._trackedAsyncRequests.splice(index, 1);\n };\n this.__asyncWaiter = () => {\n let tracked = this._trackedAsyncRequests;\n return tracked.length === 0;\n };\n registerWaiter(this.__asyncWaiter);\n }\n }\n getRequestStateService() {\n return this._fetchManager.requestCache;\n }\n instantiateRecord(identifier, createRecordArgs, recordDataFor, notificationManager) {\n if (true /* HAS_MODEL_PACKAGE */) {\n let modelName = identifier.type;\n let store = this;\n let internalModel = this._instanceCache._internalModelForResource(identifier);\n let createOptions = {\n _internalModel: internalModel,\n // TODO deprecate allowing unknown args setting\n _createProps: createRecordArgs,\n // TODO @deprecate consider deprecating accessing record properties during init which the below is necessary for\n _secretInit: record => {\n setRecordIdentifier(record, identifier);\n StoreMap.set(record, store);\n setRecordDataFor(record, internalModel._recordData);\n },\n container: null // necessary hack for setOwner?\n };\n\n // ensure that `getOwner(this)` works inside a model instance\n setOwner(createOptions, getOwner(this));\n delete createOptions.container;\n // TODO this needs to not use the private property here to get modelFactoryCache so as to not break interop\n return getModelFactory(this, this._modelFactoryCache, modelName).create(createOptions);\n }\n assert(`You must implement the store's instantiateRecord hook for your custom model class.`);\n }\n teardownRecord(record) {\n if (true /* HAS_MODEL_PACKAGE */) {\n assert(`expected to receive an instance of DSModel. If using a custom model make sure you implement teardownRecord`, 'destroy' in record);\n record.destroy();\n } else {\n assert(`You must implement the store's teardownRecord hook for your custom models`);\n }\n }\n getSchemaDefinitionService() {\n if (true /* HAS_MODEL_PACKAGE */ && !this._schemaDefinitionService) {\n this._schemaDefinitionService = new DSModelSchemaDefinitionService(this);\n }\n assert(`You must registerSchemaDefinitionService with the store to use custom model classes`, this._schemaDefinitionService);\n return this._schemaDefinitionService;\n }\n registerSchemaDefinitionService(schema) {\n this._schemaDefinitionService = schema;\n }\n\n /**\n Returns the schema for a particular `modelName`.\n When used with Model from @ember-data/model the return is the model class,\n but this is not guaranteed.\n The class of a model might be useful if you want to get a list of all the\n relationship names of the model, see\n [`relationshipNames`](/ember-data/release/classes/Model?anchor=relationshipNames)\n for example.\n @method modelFor\n @public\n @param {String} modelName\n @return {subclass of Model | ShimModelClass}\n */\n // TODO @deprecate in favor of schema APIs, requires adapter/serializer overhaul or replacement\n modelFor(modelName) {\n if (DEBUG) {\n assertDestroyedStoreOnly(this, 'modelFor');\n }\n assert(`You need to pass a model name to the store's modelFor method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n if (true /* HAS_MODEL_PACKAGE */) {\n let normalizedModelName = normalizeModelName(modelName);\n // TODO this is safe only because\n // apps would be horribly broken if the schema service were using DS_MODEL but not using DS_MODEL's schema service.\n // it is potentially a mistake for the RFC to have not enabled chaining these services, though highlander rule is nice.\n // what ember-m3 did via private API to allow both worlds to interop would be much much harder using this.\n let maybeFactory = getModelFactory(this, this._modelFactoryCache, normalizedModelName);\n\n // for factorFor factory/class split\n let klass = maybeFactory && maybeFactory.class ? maybeFactory.class : maybeFactory;\n if (!klass || !klass.isModel) {\n assert(`No model was found for '${modelName}' and no schema handles the type`, this.getSchemaDefinitionService().doesTypeExist(modelName));\n return getShimClass(this, modelName);\n } else {\n // TODO @deprecate ever returning the klass, always return the shim\n return klass;\n }\n }\n assert(`No model was found for '${modelName}' and no schema handles the type`, this.getSchemaDefinitionService().doesTypeExist(modelName));\n return getShimClass(this, modelName);\n }\n\n /**\n Create a new record in the current store. The properties passed\n to this method are set on the newly created record.\n To create a new instance of a `Post`:\n ```js\n store.createRecord('post', {\n title: 'Ember is awesome!'\n });\n ```\n To create a new instance of a `Post` that has a relationship with a `User` record:\n ```js\n let user = this.store.peekRecord('user', 1);\n store.createRecord('post', {\n title: 'Ember is awesome!',\n user: user\n });\n ```\n @method createRecord\n @public\n @param {String} modelName\n @param {Object} inputProperties a hash of properties to set on the\n newly created record.\n @return {Model} record\n */\n createRecord(modelName, inputProperties) {\n if (DEBUG) {\n assertDestroyingStore(this, 'createRecord');\n }\n assert(`You need to pass a model name to the store's createRecord method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n\n // This is wrapped in a `run.join` so that in test environments users do not need to manually wrap\n // calls to `createRecord`. The run loop usage here is because we batch the joining and updating\n // of record-arrays via ember's run loop, not our own.\n //\n // to remove this, we would need to move to a new `async` API.\n return emberBackburner.join(() => {\n return this._backburner.join(() => {\n let normalizedModelName = normalizeModelName(modelName);\n let properties = {\n ...inputProperties\n };\n\n // If the passed properties do not include a primary key,\n // give the adapter an opportunity to generate one. Typically,\n // client-side ID generators will use something like uuid.js\n // to avoid conflicts.\n\n if (properties.id === null || properties.id === undefined) {\n let adapter = this.adapterFor(modelName);\n if (adapter && adapter.generateIdForRecord) {\n properties.id = adapter.generateIdForRecord(this, modelName, properties);\n } else {\n properties.id = null;\n }\n }\n\n // Coerce ID to a string\n properties.id = coerceId(properties.id);\n const factory = internalModelFactoryFor(this);\n const internalModel = factory.build({\n type: normalizedModelName,\n id: properties.id\n });\n const {\n identifier\n } = internalModel;\n this._instanceCache.getRecordData(identifier).clientDidCreate();\n this.recordArrayManager.recordDidChange(identifier);\n return this._instanceCache.getRecord(identifier, properties);\n });\n });\n }\n\n /**\n For symmetry, a record can be deleted via the store.\n Example\n ```javascript\n let post = store.createRecord('post', {\n title: 'Ember is awesome!'\n });\n store.deleteRecord(post);\n ```\n @method deleteRecord\n @public\n @param {Model} record\n */\n deleteRecord(record) {\n if (DEBUG) {\n assertDestroyingStore(this, 'deleteRecord');\n }\n this._backburner.join(() => {\n let identifier = peekRecordIdentifier(record);\n if (identifier) {\n let internalModel = internalModelFactoryFor(this).peek(identifier);\n if (internalModel) {\n internalModel.deleteRecord();\n }\n }\n });\n }\n\n /**\n For symmetry, a record can be unloaded via the store.\n This will cause the record to be destroyed and freed up for garbage collection.\n Example\n ```javascript\n store.findRecord('post', 1).then(function(post) {\n store.unloadRecord(post);\n });\n ```\n @method unloadRecord\n @public\n @param {Model} record\n */\n unloadRecord(record) {\n if (DEBUG) {\n assertDestroyingStore(this, 'unloadRecord');\n }\n let identifier = peekRecordIdentifier(record);\n if (identifier) {\n let internalModel = internalModelFactoryFor(this).peek(identifier);\n if (internalModel) {\n internalModel.unloadRecord();\n }\n }\n }\n\n /**\n @method find\n @param {String} modelName\n @param {String|Integer} id\n @param {Object} options\n @return {Promise} promise\n @deprecated\n @private\n */\n find(modelName, id, options) {\n if (DEBUG) {\n assertDestroyingStore(this, 'find');\n }\n // The default `model` hook in Route calls `find(modelName, id)`,\n // that's why we have to keep this method around even though `findRecord` is\n // the public way to get a record by modelName and id.\n assert(`Using store.find(type) has been removed. Use store.findAll(modelName) to retrieve all records for a given type.`, arguments.length !== 1);\n assert(`Calling store.find(modelName, id, { preload: preload }) is no longer supported. Use store.findRecord(modelName, id, { preload: preload }) instead.`, !options);\n assert(`You need to pass the model name and id to the store's find method`, arguments.length === 2);\n assert(`You cannot pass '${id}' as id to the store's find method`, typeof id === 'string' || typeof id === 'number');\n assert(`Calling store.find() with a query object is no longer supported. Use store.query() instead.`, typeof id !== 'object');\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n if (true /* DEPRECATE_STORE_FIND */) {\n deprecate(`Using store.find is deprecated, use store.findRecord instead. Likely this means you are relying on the implicit store fetching behavior of routes unknowingly.`, false, {\n id: 'ember-data:deprecate-store-find',\n since: {\n available: '4.5',\n enabled: '4.5'\n },\n for: 'ember-data',\n until: '5.0'\n });\n return this.findRecord(modelName, id);\n }\n assert(`store.find has been removed. Use store.findRecord instead.`);\n }\n\n /**\n This method returns a record for a given identifier or type and id combination.\n The `findRecord` method will always resolve its promise with the same\n object for a given identifier or type and `id`.\n The `findRecord` method will always return a **promise** that will be\n resolved with the record.\n **Example 1**\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id }) {\n return this.store.findRecord('post', post_id);\n }\n }\n ```\n **Example 2**\n `findRecord` can be called with a single identifier argument instead of the combination\n of `type` (modelName) and `id` as separate arguments. You may recognize this combo as\n the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification)\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id: id }) {\n return this.store.findRecord({ type: 'post', id });\n }\n }\n ```\n **Example 3**\n If you have previously received an lid via an Identifier for this record, and the record\n has already been assigned an id, you can find the record again using just the lid.\n ```app/routes/post.js\n store.findRecord({ lid });\n ```\n If the record is not yet available, the store will ask the adapter's `findRecord`\n method to retrieve and supply the necessary data. If the record is already present\n in the store, it depends on the reload behavior _when_ the returned promise\n resolves.\n ### Preloading\n You can optionally `preload` specific attributes and relationships that you know of\n by passing them via the passed `options`.\n For example, if your Ember route looks like `/posts/1/comments/2` and your API route\n for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment\n without also fetching the post you can pass in the post to the `findRecord` call:\n ```app/routes/post-comments.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id, comment_id: id }) {\n return this.store.findRecord({ type: 'comment', id, { preload: { post: post_id }} });\n }\n }\n ```\n In your adapter you can then access this id without triggering a network request via the\n snapshot:\n ```app/adapters/application.js\n import EmberObject from '@ember/object';\n export default class Adapter extends EmberObject {\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n if (type === 'comment')\n let postId = snapshot.belongsTo('post', { id: true });\n return fetch(`./posts/${postId}/comments/${id}`)\n .then(response => response.json())\n }\n }\n }\n ```\n This could also be achieved by supplying the post id to the adapter via the adapterOptions\n property on the options hash.\n ```app/routes/post-comments.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id, comment_id: id }) {\n return this.store.findRecord({ type: 'comment', id, { adapterOptions: { post: post_id }} });\n }\n }\n ```\n ```app/adapters/application.js\n import EmberObject from '@ember/object';\n export default class Adapter extends EmberObject {\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n if (type === 'comment')\n let postId = snapshot.adapterOptions.post;\n return fetch(`./posts/${postId}/comments/${id}`)\n .then(response => response.json())\n }\n }\n }\n ```\n If you have access to the post model you can also pass the model itself to preload:\n ```javascript\n let post = await store.findRecord('post', 1);\n let comment = await store.findRecord('comment', 2, { post: myPostModel });\n ```\n ### Reloading\n The reload behavior is configured either via the passed `options` hash or\n the result of the adapter's `shouldReloadRecord`.\n If `{ reload: true }` is passed or `adapter.shouldReloadRecord` evaluates\n to `true`, then the returned promise resolves once the adapter returns\n data, regardless if the requested record is already in the store:\n ```js\n store.push({\n data: {\n id: 1,\n type: 'post',\n revision: 1\n }\n });\n // adapter#findRecord resolves with\n // [\n // {\n // id: 1,\n // type: 'post',\n // revision: 2\n // }\n // ]\n store.findRecord('post', 1, { reload: true }).then(function(post) {\n post.get('revision'); // 2\n });\n ```\n If no reload is indicated via the above mentioned ways, then the promise\n immediately resolves with the cached version in the store.\n ### Background Reloading\n Optionally, if `adapter.shouldBackgroundReloadRecord` evaluates to `true`,\n then a background reload is started, which updates the records' data, once\n it is available:\n ```js\n // app/adapters/post.js\n import ApplicationAdapter from \"./application\";\n export default class PostAdapter extends ApplicationAdapter {\n shouldReloadRecord(store, snapshot) {\n return false;\n },\n shouldBackgroundReloadRecord(store, snapshot) {\n return true;\n }\n });\n // ...\n store.push({\n data: {\n id: 1,\n type: 'post',\n revision: 1\n }\n });\n let blogPost = store.findRecord('post', 1).then(function(post) {\n post.get('revision'); // 1\n });\n // later, once adapter#findRecord resolved with\n // [\n // {\n // id: 1,\n // type: 'post',\n // revision: 2\n // }\n // ]\n blogPost.get('revision'); // 2\n ```\n If you would like to force or prevent background reloading, you can set a\n boolean value for `backgroundReload` in the options object for\n `findRecord`.\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n export default class PostEditRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { backgroundReload: false });\n }\n }\n ```\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n export default class PostEditRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, {\n adapterOptions: { subscribe: false }\n });\n }\n }\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n findRecord(store, type, id, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n See [peekRecord](../methods/peekRecord?anchor=peekRecord) to get the cached version of a record.\n ### Retrieving Related Model Records\n If you use an adapter such as Ember's default\n [`JSONAPIAdapter`](/ember-data/release/classes/JSONAPIAdapter)\n that supports the [JSON API specification](http://jsonapi.org/) and if your server\n endpoint supports the use of an\n ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n you can use `findRecord()` or `findAll()` to automatically retrieve additional records related to\n the one you request by supplying an `include` parameter in the `options` object.\n For example, given a `post` model that has a `hasMany` relationship with a `comment`\n model, when we retrieve a specific post we can have the server also return that post's\n comments in the same request:\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { include: 'comments' });\n }\n }\n ```\n ```app/adapters/application.js\n import EmberObject from '@ember/object';\n export default class Adapter extends EmberObject {\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n if (type === 'post')\n let includes = snapshot.adapterOptions.include;\n return fetch(`./posts/${postId}?include=${includes}`)\n .then(response => response.json())\n }\n }\n }\n ```\n In this case, the post's comments would then be available in your template as\n `model.comments`.\n Multiple relationships can be requested using an `include` parameter consisting of a\n comma-separated list (without white-space) while nested relationships can be specified\n using a dot-separated sequence of relationship names. So to request both the post's\n comments and the authors of those comments the request would look like this:\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { include: 'comments,comments.author' });\n }\n }\n ```\n ### Retrieving Specific Fields by Type\n If your server endpoint supports the use of a ['fields' query parameter](https://jsonapi.org/format/#fetching-sparse-fieldsets),\n you can use pass those fields through to your server. At this point in time, this requires a few manual steps on your part.\n 1. Implement `buildQuery` in your adapter.\n ```app/adapters/application.js\n buildQuery(snapshot) {\n let query = super.buildQuery(...arguments);\n let { fields } = snapshot.adapterOptions;\n if (fields) {\n query.fields = fields;\n }\n return query;\n }\n ```\n 2. Then pass through the applicable fields to your `findRecord` request.\n Given a `post` model with attributes body, title, publishDate and meta, you can retrieve a filtered list of attributes.\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default Route.extend({\n model(params) {\n return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title' } });\n }\n });\n ```\n Moreover, you can filter attributes on related models as well. If a `post` has a `belongsTo` relationship to a user,\n just include the relationship key and attributes.\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default Route.extend({\n model(params) {\n return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title', user: 'name,email' } });\n }\n });\n ```\n @since 1.13.0\n @method findRecord\n @public\n @param {String|object} modelName - either a string representing the modelName or a ResourceIdentifier object containing both the type (a string) and the id (a string) for the record or an lid (a string) of an existing record\n @param {(String|Integer|Object)} id - optional object with options for the request only if the first param is a ResourceIdentifier, else the string id of the record to be retrieved\n @param {Object} [options] - if the first param is a string this will be the optional options for the request. See examples for available options.\n @return {Promise} promise\n */\n\n findRecord(resource, id, options) {\n if (DEBUG) {\n assertDestroyingStore(this, 'findRecord');\n }\n assert(`You need to pass a modelName or resource identifier as the first argument to the store's findRecord method`, resource);\n if (isMaybeIdentifier(resource)) {\n options = id;\n } else {\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${resource}`, typeof resource === 'string');\n const type = normalizeModelName(resource);\n const normalizedId = ensureStringId(id);\n resource = constructResource(type, normalizedId);\n }\n const internalModel = internalModelFactoryFor(this).lookup(resource);\n const {\n identifier\n } = internalModel;\n let promise;\n options = options || {};\n\n // if not loaded start loading\n if (!internalModel.isLoaded) {\n promise = this._instanceCache._fetchDataIfNeededForIdentifier(identifier, options);\n\n // Refetch if the reload option is passed\n } else if (options.reload) {\n assertIdentifierHasId(identifier);\n promise = this._fetchManager.scheduleFetch(identifier, options);\n } else {\n let snapshot = this._instanceCache.createSnapshot(identifier, options);\n let adapter = this.adapterFor(identifier.type);\n\n // Refetch the record if the adapter thinks the record is stale\n if (typeof options.reload === 'undefined' && adapter.shouldReloadRecord && adapter.shouldReloadRecord(this, snapshot)) {\n assertIdentifierHasId(identifier);\n promise = this._fetchManager.scheduleFetch(identifier, options);\n } else {\n // Trigger the background refetch if backgroundReload option is passed\n if (options.backgroundReload !== false && (options.backgroundReload || !adapter.shouldBackgroundReloadRecord || adapter.shouldBackgroundReloadRecord(this, snapshot))) {\n assertIdentifierHasId(identifier);\n this._fetchManager.scheduleFetch(identifier, options);\n }\n\n // Return the cached record\n promise = resolve(identifier);\n }\n }\n return promiseRecord(this, promise, `DS: Store#findRecord ${identifier}`);\n }\n\n /**\n Get the reference for the specified record.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // check if the user is loaded\n let isLoaded = userRef.value() !== null;\n // get the record of the reference (null if not yet available)\n let user = userRef.value();\n // get the identifier of the reference\n if (userRef.remoteType() === 'id') {\n let id = userRef.id();\n }\n // load user (via store.find)\n userRef.load().then(...)\n // or trigger a reload\n userRef.reload().then(...)\n // provide data for reference\n userRef.push({ id: 1, username: '@user' }).then(function(user) {\n userRef.value() === user;\n });\n ```\n @method getReference\n @public\n @param {String|object} resource - modelName (string) or Identifier (object)\n @param {String|Integer} id\n @since 2.5.0\n @return {RecordReference}\n */\n // TODO @deprecate getReference (and references generally)\n getReference(resource, id) {\n if (DEBUG) {\n assertDestroyingStore(this, 'getReference');\n }\n let resourceIdentifier;\n if (arguments.length === 1 && isMaybeIdentifier(resource)) {\n resourceIdentifier = resource;\n } else {\n const type = normalizeModelName(resource);\n const normalizedId = ensureStringId(id);\n resourceIdentifier = constructResource(type, normalizedId);\n }\n assert('getReference expected to receive either a resource identifier or type and id as arguments', isMaybeIdentifier(resourceIdentifier));\n let identifier = this.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier);\n return this._instanceCache.getReference(identifier);\n }\n\n /**\n Get a record by a given type and ID without triggering a fetch.\n This method will synchronously return the record if it is available in the store,\n otherwise it will return `null`. A record is available if it has been fetched earlier, or\n pushed manually into the store.\n See [findRecord](../methods/findRecord?anchor=findRecord) if you would like to request this record from the backend.\n _Note: This is a synchronous method and does not return a promise._\n **Example 1**\n ```js\n let post = store.peekRecord('post', 1);\n post.id; // 1\n ```\n `peekRecord` can be called with a single identifier argument instead of the combination\n of `type` (modelName) and `id` as separate arguments. You may recognize this combo as\n the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification)\n **Example 2**\n ```js\n let post = store.peekRecord({ type: 'post', id });\n post.id; // 1\n ```\n If you have previously received an lid from an Identifier for this record, you can lookup the record again using\n just the lid.\n **Example 3**\n ```js\n let post = store.peekRecord({ lid });\n post.id; // 1\n ```\n @since 1.13.0\n @method peekRecord\n @public\n @param {String|object} modelName - either a string representing the modelName or a ResourceIdentifier object containing both the type (a string) and the id (a string) for the record or an lid (a string) of an existing record\n @param {String|Integer} id - optional only if the first param is a ResourceIdentifier, else the string id of the record to be retrieved.\n @return {Model|null} record\n */\n\n peekRecord(identifier, id) {\n if (arguments.length === 1 && isMaybeIdentifier(identifier)) {\n const stableIdentifier = this.identifierCache.peekRecordIdentifier(identifier);\n const internalModel = stableIdentifier && internalModelFactoryFor(this).peek(stableIdentifier);\n // TODO come up with a better mechanism for determining if we have data and could peek.\n // this is basically an \"are we not empty\" query.\n return internalModel && internalModel.isLoaded ? this._instanceCache.getRecord(stableIdentifier) : null;\n }\n if (DEBUG) {\n assertDestroyingStore(this, 'peekRecord');\n }\n assert(`You need to pass a model name to the store's peekRecord method`, identifier);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${identifier}`, typeof identifier === 'string');\n const type = normalizeModelName(identifier);\n const normalizedId = ensureStringId(id);\n const resource = {\n type,\n id: normalizedId\n };\n const stableIdentifier = this.identifierCache.peekRecordIdentifier(resource);\n const internalModel = stableIdentifier && internalModelFactoryFor(this).peek(stableIdentifier);\n return internalModel && internalModel.isLoaded ? this._instanceCache.getRecord(stableIdentifier) : null;\n }\n\n /**\n This method returns true if a record for a given modelName and id is already\n loaded in the store. Use this function to know beforehand if a findRecord()\n will result in a request or that it will be a cache hit.\n Example\n ```javascript\n store.hasRecordForId('post', 1); // false\n store.findRecord('post', 1).then(function() {\n store.hasRecordForId('post', 1); // true\n });\n ```\n @method hasRecordForId\n @public\n @param {String} modelName\n @param {(String|Integer)} id\n @return {Boolean}\n */\n hasRecordForId(modelName, id) {\n if (true /* DEPRECATE_HAS_RECORD */) {\n deprecate(`store.hasRecordForId has been deprecated in favor of store.peekRecord`, false, {\n id: 'ember-data:deprecate-has-record-for-id',\n since: {\n available: '4.5',\n enabled: '4.5'\n },\n until: '5.0',\n for: 'ember-data'\n });\n if (DEBUG) {\n assertDestroyingStore(this, 'hasRecordForId');\n }\n assert(`You need to pass a model name to the store's hasRecordForId method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n const type = normalizeModelName(modelName);\n const trueId = ensureStringId(id);\n const resource = {\n type,\n id: trueId\n };\n const identifier = this.identifierCache.peekRecordIdentifier(resource);\n const internalModel = identifier && internalModelFactoryFor(this).peek(identifier);\n return !!internalModel && internalModel.isLoaded;\n }\n assert(`store.hasRecordForId has been removed`);\n }\n\n /**\n This method delegates a query to the adapter. This is the one place where\n adapter-level semantics are exposed to the application.\n Each time this method is called a new request is made through the adapter.\n Exposing queries this way seems preferable to creating an abstract query\n language for all server-side queries, and then require all adapters to\n implement them.\n ---\n If you do something like this:\n ```javascript\n store.query('person', { page: 1 });\n ```\n The request made to the server will look something like this:\n ```\n GET \"/api/v1/person?page=1\"\n ```\n ---\n If you do something like this:\n ```javascript\n store.query('person', { ids: [1, 2, 3] });\n ```\n The request made to the server will look something like this:\n ```\n GET \"/api/v1/person?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3\"\n decoded: \"/api/v1/person?ids[]=1&ids[]=2&ids[]=3\"\n ```\n This method returns a promise, which is resolved with an\n [`AdapterPopulatedRecordArray`](/ember-data/release/classes/AdapterPopulatedRecordArray)\n once the server returns.\n @since 1.13.0\n @method query\n @public\n @param {String} modelName\n @param {any} query an opaque query to be used by the adapter\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.query\n @return {Promise} promise\n */\n query(modelName, query, options) {\n if (DEBUG) {\n assertDestroyingStore(this, 'query');\n }\n assert(`You need to pass a model name to the store's query method`, modelName);\n assert(`You need to pass a query hash to the store's query method`, query);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let adapterOptionsWrapper = {};\n if (options && options.adapterOptions) {\n adapterOptionsWrapper.adapterOptions = options.adapterOptions;\n }\n let recordArray = options?._recordArray || null;\n let normalizedModelName = normalizeModelName(modelName);\n let adapter = this.adapterFor(normalizedModelName);\n assert(`You tried to load a query but you have no adapter (for ${modelName})`, adapter);\n assert(`You tried to load a query but your adapter does not implement 'query'`, typeof adapter.query === 'function');\n let queryPromise = _query(adapter, this, normalizedModelName, query, recordArray, adapterOptionsWrapper);\n return promiseArray(queryPromise);\n }\n\n /**\n This method makes a request for one record, where the `id` is not known\n beforehand (if the `id` is known, use [`findRecord`](../methods/findRecord?anchor=findRecord)\n instead).\n This method can be used when it is certain that the server will return a\n single object for the primary data.\n Each time this method is called a new request is made through the adapter.\n Let's assume our API provides an endpoint for the currently logged in user\n via:\n ```\n // GET /api/current_user\n {\n user: {\n id: 1234,\n username: 'admin'\n }\n }\n ```\n Since the specific `id` of the `user` is not known beforehand, we can use\n `queryRecord` to get the user:\n ```javascript\n store.queryRecord('user', {}).then(function(user) {\n let username = user.get('username');\n console.log(`Currently logged in as ${username}`);\n });\n ```\n The request is made through the adapters' `queryRecord`:\n ```app/adapters/user.js\n import Adapter from '@ember-data/adapter';\n import $ from 'jquery';\n export default class UserAdapter extends Adapter {\n queryRecord(modelName, query) {\n return $.getJSON('/api/current_user');\n }\n }\n ```\n Note: the primary use case for `store.queryRecord` is when a single record\n is queried and the `id` is not known beforehand. In all other cases\n `store.query` and using the first item of the array is likely the preferred\n way:\n ```\n // GET /users?username=unique\n {\n data: [{\n id: 1234,\n type: 'user',\n attributes: {\n username: \"unique\"\n }\n }]\n }\n ```\n ```javascript\n store.query('user', { username: 'unique' }).then(function(users) {\n return users.get('firstObject');\n }).then(function(user) {\n let id = user.get('id');\n });\n ```\n This method returns a promise, which resolves with the found record.\n If the adapter returns no data for the primary data of the payload, then\n `queryRecord` resolves with `null`:\n ```\n // GET /users?username=unique\n {\n data: null\n }\n ```\n ```javascript\n store.queryRecord('user', { username: 'unique' }).then(function(user) {\n console.log(user); // null\n });\n ```\n @since 1.13.0\n @method queryRecord\n @public\n @param {String} modelName\n @param {any} query an opaque query to be used by the adapter\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.queryRecord\n @return {Promise} promise which resolves with the found record or `null`\n */\n queryRecord(modelName, query, options) {\n if (DEBUG) {\n assertDestroyingStore(this, 'queryRecord');\n }\n assert(`You need to pass a model name to the store's queryRecord method`, modelName);\n assert(`You need to pass a query hash to the store's queryRecord method`, query);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n let adapter = this.adapterFor(normalizedModelName);\n let adapterOptionsWrapper = {};\n if (options && options.adapterOptions) {\n adapterOptionsWrapper.adapterOptions = options.adapterOptions;\n }\n assert(`You tried to make a query but you have no adapter (for ${normalizedModelName})`, adapter);\n assert(`You tried to make a query but your adapter does not implement 'queryRecord'`, typeof adapter.queryRecord === 'function');\n const promise = _queryRecord(adapter, this, normalizedModelName, query, adapterOptionsWrapper);\n return promiseObject(promise.then(identifier => identifier && this.peekRecord(identifier)));\n }\n\n /**\n `findAll` asks the adapter's `findAll` method to find the records for the\n given type, and returns a promise which will resolve with all records of\n this type present in the store, even if the adapter only returns a subset\n of them.\n ```app/routes/authors.js\n import Route from '@ember/routing/route';\n export default class AuthorsRoute extends Route {\n model(params) {\n return this.store.findAll('author');\n }\n }\n ```\n _When_ the returned promise resolves depends on the reload behavior,\n configured via the passed `options` hash and the result of the adapter's\n `shouldReloadAll` method.\n ### Reloading\n If `{ reload: true }` is passed or `adapter.shouldReloadAll` evaluates to\n `true`, then the returned promise resolves once the adapter returns data,\n regardless if there are already records in the store:\n ```js\n store.push({\n data: {\n id: 'first',\n type: 'author'\n }\n });\n // adapter#findAll resolves with\n // [\n // {\n // id: 'second',\n // type: 'author'\n // }\n // ]\n store.findAll('author', { reload: true }).then(function(authors) {\n authors.getEach('id'); // ['first', 'second']\n });\n ```\n If no reload is indicated via the above mentioned ways, then the promise\n immediately resolves with all the records currently loaded in the store.\n ### Background Reloading\n Optionally, if `adapter.shouldBackgroundReloadAll` evaluates to `true`,\n then a background reload is started. Once this resolves, the array with\n which the promise resolves, is updated automatically so it contains all the\n records in the store:\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default class ApplicationAdapter extends Adapter {\n shouldReloadAll(store, snapshotsArray) {\n return false;\n },\n shouldBackgroundReloadAll(store, snapshotsArray) {\n return true;\n }\n });\n // ...\n store.push({\n data: {\n id: 'first',\n type: 'author'\n }\n });\n let allAuthors;\n store.findAll('author').then(function(authors) {\n authors.getEach('id'); // ['first']\n allAuthors = authors;\n });\n // later, once adapter#findAll resolved with\n // [\n // {\n // id: 'second',\n // type: 'author'\n // }\n // ]\n allAuthors.getEach('id'); // ['first', 'second']\n ```\n If you would like to force or prevent background reloading, you can set a\n boolean value for `backgroundReload` in the options object for\n `findAll`.\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n export default class PostEditRoute extends Route {\n model() {\n return this.store.findAll('post', { backgroundReload: false });\n }\n }\n ```\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to you adapter via the `snapshotRecordArray`\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n export default class PostsRoute extends Route {\n model(params) {\n return this.store.findAll('post', {\n adapterOptions: { subscribe: false }\n });\n }\n }\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class UserAdapter extends MyCustomAdapter {\n findAll(store, type, sinceToken, snapshotRecordArray) {\n if (snapshotRecordArray.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n See [peekAll](../methods/peekAll?anchor=peekAll) to get an array of current records in the\n store, without waiting until a reload is finished.\n ### Retrieving Related Model Records\n If you use an adapter such as Ember's default\n [`JSONAPIAdapter`](/ember-data/release/classes/JSONAPIAdapter)\n that supports the [JSON API specification](http://jsonapi.org/) and if your server\n endpoint supports the use of an\n ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n you can use `findAll()` to automatically retrieve additional records related to\n those requested by supplying an `include` parameter in the `options` object.\n For example, given a `post` model that has a `hasMany` relationship with a `comment`\n model, when we retrieve all of the post records we can have the server also return\n all of the posts' comments in the same request:\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n export default class PostsRoute extends Route {\n model() {\n return this.store.findAll('post', { include: 'comments' });\n }\n }\n ```\n Multiple relationships can be requested using an `include` parameter consisting of a\n comma-separated list (without white-space) while nested relationships can be specified\n using a dot-separated sequence of relationship names. So to request both the posts'\n comments and the authors of those comments the request would look like this:\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n export default class PostsRoute extends Route {\n model() {\n return this.store.findAll('post', { include: 'comments,comments.author' });\n }\n }\n ```\n See [query](../methods/query?anchor=query) to only get a subset of records from the server.\n @since 1.13.0\n @method findAll\n @public\n @param {String} modelName\n @param {Object} options\n @return {Promise} promise\n */\n findAll(modelName, options = {}) {\n if (DEBUG) {\n assertDestroyingStore(this, 'findAll');\n }\n assert(`You need to pass a model name to the store's findAll method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n let array = this.peekAll(normalizedModelName);\n let fetch;\n let adapter = this.adapterFor(normalizedModelName);\n assert(`You tried to load all records but you have no adapter (for ${normalizedModelName})`, adapter);\n assert(`You tried to load all records but your adapter does not implement 'findAll'`, typeof adapter.findAll === 'function');\n if (options.reload) {\n array.isUpdating = true;\n fetch = _findAll(adapter, this, normalizedModelName, options);\n } else {\n let snapshotArray = array._createSnapshot(options);\n if (options.reload !== false) {\n if (adapter.shouldReloadAll && adapter.shouldReloadAll(this, snapshotArray) || !adapter.shouldReloadAll && snapshotArray.length === 0) {\n array.isUpdating = true;\n fetch = _findAll(adapter, this, modelName, options);\n }\n }\n if (!fetch) {\n if (options.backgroundReload === false) {\n fetch = resolve(array);\n } else if (options.backgroundReload || !adapter.shouldBackgroundReloadAll || adapter.shouldBackgroundReloadAll(this, snapshotArray)) {\n array.isUpdating = true;\n _findAll(adapter, this, modelName, options);\n }\n fetch = resolve(array);\n }\n }\n return promiseArray(fetch);\n }\n\n /**\n This method returns a filtered array that contains all of the\n known records for a given type in the store.\n Note that because it's just a filter, the result will contain any\n locally created records of the type, however, it will not make a\n request to the backend to retrieve additional records. If you\n would like to request all the records from the backend please use\n [store.findAll](../methods/findAll?anchor=findAll).\n Also note that multiple calls to `peekAll` for a given type will always\n return the same `RecordArray`.\n Example\n ```javascript\n let localPosts = store.peekAll('post');\n ```\n @since 1.13.0\n @method peekAll\n @public\n @param {String} modelName\n @return {RecordArray}\n */\n peekAll(modelName) {\n if (DEBUG) {\n assertDestroyingStore(this, 'peekAll');\n }\n assert(`You need to pass a model name to the store's peekAll method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n return this.recordArrayManager.liveRecordArrayFor(normalizedModelName);\n }\n\n /**\n This method unloads all records in the store.\n It schedules unloading to happen during the next run loop.\n Optionally you can pass a type which unload all records for a given type.\n ```javascript\n store.unloadAll();\n store.unloadAll('post');\n ```\n @method unloadAll\n @public\n @param {String} modelName\n */\n unloadAll(modelName) {\n if (DEBUG) {\n assertDestroyedStoreOnly(this, 'unloadAll');\n }\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, !modelName || typeof modelName === 'string');\n const factory = internalModelFactoryFor(this);\n if (modelName === undefined) {\n factory.clear();\n } else {\n let normalizedModelName = normalizeModelName(modelName);\n factory.clear(normalizedModelName);\n }\n }\n\n /**\n This method is called once the promise returned by an\n adapter's `createRecord`, `updateRecord` or `deleteRecord`\n is rejected with a `InvalidError`.\n @method recordWasInvalid\n @private\n @deprecated\n @param {InternalModel} internalModel\n @param {Object} errors\n */\n recordWasInvalid(internalModel, parsedErrors, error) {\n if (true /* DEPRECATE_RECORD_WAS_INVALID */) {\n deprecate(`The private API recordWasInvalid will be removed in an upcoming release. Use record.errors add/remove instead if the intent was to move the record into an invalid state manually.`, false, {\n id: 'ember-data:deprecate-record-was-invalid',\n for: 'ember-data',\n until: '5.0',\n since: {\n enabled: '4.5',\n available: '4.5'\n }\n });\n if (DEBUG) {\n assertDestroyingStore(this, 'recordWasInvalid');\n }\n internalModel.adapterDidInvalidate(parsedErrors, error);\n }\n assert(`store.recordWasInvalid has been removed`);\n }\n\n /**\n Push some data for a given type into the store.\n This method expects normalized [JSON API](http://jsonapi.org/) document. This means you have to follow [JSON API specification](http://jsonapi.org/format/) with few minor adjustments:\n - record's `type` should always be in singular, dasherized form\n - members (properties) should be camelCased\n [Your primary data should be wrapped inside `data` property](http://jsonapi.org/format/#document-top-level):\n ```js\n store.push({\n data: {\n // primary data for single record of type `Person`\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Daniel',\n lastName: 'Kmak'\n }\n }\n });\n ```\n [Demo.](http://ember-twiddle.com/fb99f18cd3b4d3e2a4c7)\n `data` property can also hold an array (of records):\n ```js\n store.push({\n data: [\n // an array of records\n {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Daniel',\n lastName: 'Kmak'\n }\n },\n {\n id: '2',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n }\n }\n ]\n });\n ```\n [Demo.](http://ember-twiddle.com/69cdbeaa3702159dc355)\n There are some typical properties for `JSONAPI` payload:\n * `id` - mandatory, unique record's key\n * `type` - mandatory string which matches `model`'s dasherized name in singular form\n * `attributes` - object which holds data for record attributes - `attr`'s declared in model\n * `relationships` - object which must contain any of the following properties under each relationships' respective key (example path is `relationships.achievements.data`):\n - [`links`](http://jsonapi.org/format/#document-links)\n - [`data`](http://jsonapi.org/format/#document-resource-object-linkage) - place for primary data\n - [`meta`](http://jsonapi.org/format/#document-meta) - object which contains meta-information about relationship\n For this model:\n ```app/models/person.js\n import Model, { attr, hasMany } from '@ember-data/model';\n export default class PersonRoute extends Route {\n @attr('string') firstName;\n @attr('string') lastName;\n @hasMany('person') children;\n }\n ```\n To represent the children as IDs:\n ```js\n {\n data: {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n },\n relationships: {\n children: {\n data: [\n {\n id: '2',\n type: 'person'\n },\n {\n id: '3',\n type: 'person'\n },\n {\n id: '4',\n type: 'person'\n }\n ]\n }\n }\n }\n }\n ```\n [Demo.](http://ember-twiddle.com/343e1735e034091f5bde)\n To represent the children relationship as a URL:\n ```js\n {\n data: {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n },\n relationships: {\n children: {\n links: {\n related: '/people/1/children'\n }\n }\n }\n }\n }\n ```\n If you're streaming data or implementing an adapter, make sure\n that you have converted the incoming data into this form. The\n store's [normalize](../methods/normalize?anchor=normalize) method is a convenience\n helper for converting a json payload into the form Ember Data\n expects.\n ```js\n store.push(store.normalize('person', data));\n ```\n This method can be used both to push in brand new\n records, as well as to update existing records.\n @method push\n @public\n @param {Object} data\n @return the record(s) that was created or\n updated.\n */\n\n push(data) {\n if (DEBUG) {\n assertDestroyingStore(this, 'push');\n }\n let pushed = this._push(data);\n if (Array.isArray(pushed)) {\n let records = pushed.map(identifier => this._instanceCache.getRecord(identifier));\n return records;\n }\n if (pushed === null) {\n return null;\n }\n return this._instanceCache.getRecord(pushed);\n }\n\n /**\n Push some data in the form of a json-api document into the store,\n without creating materialized records.\n @method _push\n @private\n @param {Object} jsonApiDoc\n @return {InternalModel|Array} pushed InternalModel(s)\n */\n _push(jsonApiDoc) {\n if (DEBUG) {\n assertDestroyingStore(this, '_push');\n }\n let identifiers = this._backburner.join(() => {\n let included = jsonApiDoc.included;\n let i, length;\n if (included) {\n for (i = 0, length = included.length; i < length; i++) {\n this._instanceCache._load(included[i]);\n }\n }\n if (Array.isArray(jsonApiDoc.data)) {\n length = jsonApiDoc.data.length;\n let identifiers = new Array(length);\n for (i = 0; i < length; i++) {\n identifiers[i] = this._instanceCache._load(jsonApiDoc.data[i]);\n }\n return identifiers;\n }\n if (jsonApiDoc.data === null) {\n return null;\n }\n assert(`Expected an object in the 'data' property in a call to 'push' for ${jsonApiDoc.type}, but was ${typeof jsonApiDoc.data}`, typeof jsonApiDoc.data === 'object');\n return this._instanceCache._load(jsonApiDoc.data);\n });\n\n // this typecast is necessary because `backburner.join` is mistyped to return void\n return identifiers;\n }\n\n /**\n Push some raw data into the store.\n This method can be used both to push in brand new\n records, as well as to update existing records. You\n can push in more than one type of object at once.\n All objects should be in the format expected by the\n serializer.\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer;\n ```\n ```js\n let pushData = {\n posts: [\n { id: 1, postTitle: \"Great post\", commentIds: [2] }\n ],\n comments: [\n { id: 2, commentBody: \"Insightful comment\" }\n ]\n }\n store.pushPayload(pushData);\n ```\n By default, the data will be deserialized using a default\n serializer (the application serializer if it exists).\n Alternatively, `pushPayload` will accept a model type which\n will determine which serializer will process the payload.\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n export default class ApplicationSerializer extends RESTSerializer;\n ```\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default JSONSerializer;\n ```\n ```js\n store.pushPayload(pushData); // Will use the application serializer\n store.pushPayload('post', pushData); // Will use the post serializer\n ```\n @method pushPayload\n @public\n @param {String} modelName Optionally, a model type used to determine which serializer will be used\n @param {Object} inputPayload\n */\n // TODO @runspired @deprecate pushPayload in favor of looking up the serializer\n pushPayload(modelName, inputPayload) {\n if (DEBUG) {\n assertDestroyingStore(this, 'pushPayload');\n }\n let serializer;\n let payload;\n if (!inputPayload) {\n payload = modelName;\n serializer = this.serializerFor('application');\n assert(`You cannot use 'store#pushPayload' without a modelName unless your default serializer defines 'pushPayload'`, typeof serializer.pushPayload === 'function');\n } else {\n payload = inputPayload;\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n serializer = this.serializerFor(normalizedModelName);\n }\n assert(`You must define a pushPayload method in your serializer in order to call store.pushPayload`, serializer.pushPayload);\n serializer.pushPayload(this, payload);\n }\n\n // TODO @runspired @deprecate records should implement their own serialization if desired\n serializeRecord(record, options) {\n // TODO we used to check if the record was destroyed here\n return this._instanceCache.createSnapshot(recordIdentifierFor(record)).serialize(options);\n }\n\n // todo @runspired this should likely be publicly @documented for custom records\n saveRecord(record, options = {}) {\n assert(`Unable to initate save for a record in a disconnected state`, storeFor(record));\n let identifier = recordIdentifierFor(record);\n let internalModel = identifier && internalModelFactoryFor(this).peek(identifier);\n if (!internalModel) {\n // this commonly means we're disconnected\n // but just in case we reject here to prevent bad things.\n return reject(`Record Is Disconnected`);\n }\n // TODO we used to check if the record was destroyed here\n // Casting can be removed once REQUEST_SERVICE ff is turned on\n // because a `Record` is provided there will always be a matching internalModel\n\n assert(`Cannot initiate a save request for an unloaded record: ${identifier}`, !internalModel.isEmpty && !internalModel.isDestroyed);\n if (internalModel._isRecordFullyDeleted()) {\n return resolve(record);\n }\n internalModel.adapterWillCommit();\n if (!options) {\n options = {};\n }\n let recordData = this._instanceCache.getRecordData(identifier);\n let operation = 'updateRecord';\n\n // TODO handle missing isNew\n if (recordData.isNew && recordData.isNew()) {\n operation = 'createRecord';\n } else if (recordData.isDeleted && recordData.isDeleted()) {\n operation = 'deleteRecord';\n }\n const saveOptions = Object.assign({\n [SaveOp]: operation\n }, options);\n let fetchManagerPromise = this._fetchManager.scheduleSave(identifier, saveOptions);\n return fetchManagerPromise.then(payload => {\n /*\n // TODO @runspired re-evaluate the below claim now that\n // the save request pipeline is more streamlined.\n Note to future spelunkers hoping to optimize.\n We rely on this `run` to create a run loop if needed\n that `store._push` and `store.saveRecord` will both share.\n We use `join` because it is often the case that we\n have an outer run loop available still from the first\n call to `store._push`;\n */\n this._backburner.join(() => {\n if (DEBUG) {\n assertDestroyingStore(this, 'saveRecord');\n }\n let data = payload && payload.data;\n if (!data) {\n assert(`Your ${internalModel.modelName} record was saved to the server, but the response does not have an id and no id has been set client side. Records must have ids. Please update the server response to provide an id in the response or generate the id on the client side either before saving the record or while normalizing the response.`, internalModel.id);\n }\n const cache = this.identifierCache;\n if (operation !== 'deleteRecord' && data) {\n cache.updateRecordIdentifier(identifier, data);\n }\n\n //We first make sure the primary data has been updated\n //TODO try to move notification to the user to the end of the runloop\n internalModel.adapterDidCommit(data);\n if (payload && payload.included) {\n this._push({\n data: null,\n included: payload.included\n });\n }\n });\n return record;\n }, e => {\n if (typeof e === 'string') {\n throw e;\n }\n const {\n error,\n parsedErrors\n } = e;\n internalModel.adapterDidInvalidate(parsedErrors, error);\n throw error;\n });\n }\n\n /**\n * Instantiation hook allowing applications or addons to configure the store\n * to utilize a custom RecordData implementation.\n *\n * @method createRecordDataFor\n * @public\n * @param modelName\n * @param id\n * @param clientId\n * @param storeWrapper\n */\n createRecordDataFor(modelName, id, clientId, storeWrapper) {\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n // we can't greedily use require as this causes\n // a cycle we can't easily fix (or clearly pin point) at present.\n //\n // it can be reproduced in partner tests by running\n // node ./scripts/packages-for-commit.js && yarn test-external:ember-observer\n if (_RecordData === undefined) {\n _RecordData = importSync('@ember-data/record-data/-private').RecordData;\n }\n let identifier = this.identifierCache.getOrCreateRecordIdentifier({\n type: modelName,\n id,\n lid: clientId\n });\n return new _RecordData(identifier, storeWrapper);\n }\n assert(`Expected store.createRecordDataFor to be implemented but it wasn't`);\n }\n\n /**\n `normalize` converts a json payload into the normalized form that\n [push](../methods/push?anchor=push) expects.\n Example\n ```js\n socket.on('message', function(message) {\n let modelName = message.model;\n let data = message.data;\n store.push(store.normalize(modelName, data));\n });\n ```\n @method normalize\n @public\n @param {String} modelName The name of the model type for this payload\n @param {Object} payload\n @return {Object} The normalized payload\n */\n // TODO @runspired @deprecate users should call normalize on the associated serializer directly\n normalize(modelName, payload) {\n if (DEBUG) {\n assertDestroyingStore(this, 'normalize');\n }\n assert(`You need to pass a model name to the store's normalize method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${typeof modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n let serializer = this.serializerFor(normalizedModelName);\n let model = this.modelFor(normalizedModelName);\n assert(`You must define a normalize method in your serializer in order to call store.normalize`, serializer?.normalize);\n return serializer.normalize(model, payload);\n }\n\n /**\n Returns an instance of the adapter for a given type. For\n example, `adapterFor('person')` will return an instance of\n the adapter located at `app/adapters/person.js`\n If no `person` adapter is found, this method will look\n for an `application` adapter (the default adapter for\n your entire application).\n @method adapterFor\n @public\n @param {String} modelName\n @return Adapter\n */\n adapterFor(modelName) {\n if (DEBUG) {\n assertDestroyingStore(this, 'adapterFor');\n }\n assert(`You need to pass a model name to the store's adapterFor method`, modelName);\n assert(`Passing classes to store.adapterFor has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n let {\n _adapterCache\n } = this;\n let adapter = _adapterCache[normalizedModelName];\n if (adapter) {\n return adapter;\n }\n let owner = getOwner(this);\n\n // name specific adapter\n adapter = owner.lookup(`adapter:${normalizedModelName}`);\n if (adapter !== undefined) {\n _adapterCache[normalizedModelName] = adapter;\n return adapter;\n }\n\n // no adapter found for the specific name, fallback and check for application adapter\n adapter = _adapterCache.application || owner.lookup('adapter:application');\n if (adapter !== undefined) {\n _adapterCache[normalizedModelName] = adapter;\n _adapterCache.application = adapter;\n return adapter;\n }\n if (true /* DEPRECATE_JSON_API_FALLBACK */) {\n // final fallback, no model specific adapter, no application adapter, no\n // `adapter` property on store: use json-api adapter\n adapter = _adapterCache['-json-api'] || owner.lookup('adapter:-json-api');\n if (adapter !== undefined) {\n deprecate(`Your application is utilizing a deprecated hidden fallback adapter (-json-api). Please implement an application adapter to function as your fallback.`, false, {\n id: 'ember-data:deprecate-secret-adapter-fallback',\n for: 'ember-data',\n until: '5.0',\n since: {\n available: '4.5',\n enabled: '4.5'\n }\n });\n _adapterCache[normalizedModelName] = adapter;\n _adapterCache['-json-api'] = adapter;\n return adapter;\n }\n }\n assert(`No adapter was found for '${modelName}' and no 'application' adapter was found as a fallback.`);\n }\n\n /**\n Returns an instance of the serializer for a given type. For\n example, `serializerFor('person')` will return an instance of\n `App.PersonSerializer`.\n If no `App.PersonSerializer` is found, this method will look\n for an `App.ApplicationSerializer` (the default serializer for\n your entire application).\n If a serializer cannot be found on the adapter, it will fall back\n to an instance of `JSONSerializer`.\n @method serializerFor\n @public\n @param {String} modelName the record to serialize\n @return {Serializer}\n */\n serializerFor(modelName) {\n if (DEBUG) {\n assertDestroyingStore(this, 'serializerFor');\n }\n assert(`You need to pass a model name to the store's serializerFor method`, modelName);\n assert(`Passing classes to store.serializerFor has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n let normalizedModelName = normalizeModelName(modelName);\n let {\n _serializerCache\n } = this;\n let serializer = _serializerCache[normalizedModelName];\n if (serializer) {\n return serializer;\n }\n let owner = getOwner(this);\n\n // by name\n serializer = owner.lookup(`serializer:${normalizedModelName}`);\n if (serializer !== undefined) {\n _serializerCache[normalizedModelName] = serializer;\n return serializer;\n }\n\n // no serializer found for the specific model, fallback and check for application serializer\n serializer = _serializerCache.application || owner.lookup('serializer:application');\n if (serializer !== undefined) {\n _serializerCache[normalizedModelName] = serializer;\n _serializerCache.application = serializer;\n return serializer;\n }\n return null;\n }\n destroy() {\n // enqueue destruction of any adapters/serializers we have created\n for (let adapterName in this._adapterCache) {\n let adapter = this._adapterCache[adapterName];\n if (typeof adapter.destroy === 'function') {\n adapter.destroy();\n }\n }\n for (let serializerName in this._serializerCache) {\n let serializer = this._serializerCache[serializerName];\n if (typeof serializer.destroy === 'function') {\n serializer.destroy();\n }\n }\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n const peekGraph = importSync('@ember-data/record-data/-private').peekGraph;\n let graph = peekGraph(this);\n if (graph) {\n graph.destroy();\n }\n }\n return super.destroy();\n }\n willDestroy() {\n super.willDestroy();\n this.recordArrayManager.destroy();\n this.identifierCache.destroy();\n\n // destroy the graph before unloadAll\n // since then we avoid churning relationships\n // during unload\n if (true /* HAS_RECORD_DATA_PACKAGE */) {\n const peekGraph = importSync('@ember-data/record-data/-private').peekGraph;\n let graph = peekGraph(this);\n if (graph) {\n graph.willDestroy();\n }\n }\n this.unloadAll();\n if (DEBUG) {\n unregisterWaiter(this.__asyncWaiter);\n let tracked = this._trackedAsyncRequests;\n let isSettled = tracked.length === 0;\n if (!isSettled) {\n throw new Error('Async Request leaks detected. Add a breakpoint here and set `store.generateStackTracesForTrackedRequests = true;`to inspect traces for leak origins:\\n\\t - ' + tracked.map(o => o.label).join('\\n\\t - '));\n }\n }\n }\n}\nexport default Store;\nlet assertDestroyingStore;\nlet assertDestroyedStoreOnly;\nif (DEBUG) {\n assertDestroyingStore = function assertDestroyedStore(store, method) {\n assert(`Attempted to call store.${method}(), but the store instance has already been destroyed.`, !(store.isDestroying || store.isDestroyed));\n };\n assertDestroyedStoreOnly = function assertDestroyedStoreOnly(store, method) {\n assert(`Attempted to call store.${method}(), but the store instance has already been destroyed.`, !store.isDestroyed);\n };\n}\nfunction isMaybeIdentifier(maybeIdentifier) {\n return Boolean(maybeIdentifier !== null && typeof maybeIdentifier === 'object' && ('id' in maybeIdentifier && 'type' in maybeIdentifier && maybeIdentifier.id && maybeIdentifier.type || maybeIdentifier.lid));\n}\nexport function assertIdentifierHasId(identifier) {\n assert(`Attempted to schedule a fetch for a record without an id.`, identifier.id !== null);\n}","import { promiseObject } from '../promise-proxies';\nexport default function promiseRecord(store, promise, label) {\n let toReturn = promise.then(identifier => store.peekRecord(identifier));\n return promiseObject(toReturn, label);\n}","function intern(str) {\n let obj = {};\n //@ts-ignore\n obj[str] = 1;\n for (let key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n}\nconst GUID_KEY = intern(`__ember${Date.now()}`);\n\n// `enumerableSymbol` copied from https://github.com/emberjs/ember.js/blob/master/packages/@ember/-internals/utils/lib/symbol.ts\n// for not exported code these legacy components are dependant on.\n\n// Some legacy symbols still need to be enumerable for a variety of reasons.\n// This code exists for that, and as a fallback in IE11. In general, prefer\n// `symbol` below when creating a new symbol.\nfunction enumerableSymbol(debugName) {\n let id = GUID_KEY + Math.floor(Math.random() * Date.now());\n let symbol = intern(`__${debugName}${id}__`);\n return symbol;\n}\nexport const HAS_BLOCK = enumerableSymbol('HAS_BLOCK');\nexport function isSimpleClick(event) {\n let modifier = event.shiftKey || event.metaKey || event.altKey || event.ctrlKey;\n let secondaryClick = event.which > 1; // IE9 may return undefined\n\n return !modifier && !secondaryClick;\n}\n\n// export interface GlobalContext {\n// imports: object;\n// exports: object;\n// lookup: object;\n// }\n\n// /* globals global, window, self */\n// declare const mainContext: object | undefined;\n\n// // from lodash to catch fake globals\n// function checkGlobal(value: any | null | undefined): value is object {\n// return value && value.Object === Object ? value : undefined;\n// }\n\n// // element ids can ruin global miss checks\n// function checkElementIdShadowing(value: any | null | undefined) {\n// return value && value.nodeType === undefined ? value : undefined;\n// }\n\n// // export real global\n// export default checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) ||\n// checkGlobal(typeof self === 'object' && self) ||\n// checkGlobal(typeof window === 'object' && window) ||\n// (typeof mainContext !== 'undefined' && mainContext) || // set before strict mode in Ember loader/wrapper\n// new Function('return this')(); // eval outside of strict mode\n\n// // legacy imports/exports/lookup stuff (should we keep this??)\n// export const context = (function (\n// global: object,\n// Ember: Partial | undefined\n// ): GlobalContext {\n// return Ember === undefined\n// ? { imports: global, exports: global, lookup: global }\n// : {\n// // import jQuery\n// imports: Ember.imports || global,\n// // export Ember\n// exports: Ember.exports || global,\n// // search for Namespaces\n// lookup: Ember.lookup || global,\n// };\n// })(global, global.Ember);","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{yield}}\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/checkbox.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './checkbox.hbs'; */\n//@ts-check\n/* eslint-disable ember/no-component-lifecycle-hooks */\n/* eslint-disable ember/require-tagless-components */\n/* eslint-disable ember/no-classic-classes */\n/* eslint-disable ember/no-classic-components */\nimport { set } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport EmberComponent from '@ember/component';\n\n/**\n@module @ember/component\n*/\n\n/**\n The internal class used to create text inputs when the `{{input}}`\n helper is used with `type` of `checkbox`.\n\n See [Ember.Templates.helpers.input](/ember/release/classes/Ember.Templates.helpers/methods/input?anchor=input) for usage details.\n\n ## Direct manipulation of `checked`\n\n The `checked` attribute of an `Checkbox` object should always be set\n through the Ember object or by interacting with its rendered element\n representation via the mouse, keyboard, or touch. Updating the value of the\n checkbox via jQuery will result in the checked value of the object and its\n element losing synchronization.\n\n ## Layout and LayoutName properties\n\n Because HTML `input` elements are self closing `layout` and `layoutName`\n properties will not be applied.\n\n @class Checkbox\n @public\n*/\nconst Checkbox = EmberComponent.extend({\n /**\n By default, this component will add the `ember-checkbox` class to the component's element.\n @property classNames\n @type Array | String\n @default ['ember-checkbox']\n @public\n */\n classNames: ['ember-checkbox'],\n tagName: 'input',\n /**\n By default this component will forward a number of arguments to attributes on the the\n component's element:\n * indeterminate\n * disabled\n * tabindex\n * name\n * autofocus\n * required\n * form\n When invoked with curly braces, this is the exhaustive list of HTML attributes you can\n customize (i.e. `{{input type=\"checkbox\" disabled=true}}`).\n When invoked with angle bracket invocation, this list is irrelevant, because you can use HTML\n attribute syntax to customize the element (i.e.\n ``). However, `@type` and\n `@checked` must be passed as named arguments, not attributes.\n @property attributeBindings\n @type Array | String\n @default ['type', 'checked', 'indeterminate', 'disabled', 'tabindex', 'name', 'autofocus', 'required', 'form']\n @public\n */\n attributeBindings: ['type', 'checked', 'indeterminate', 'disabled', 'tabindex', 'name', 'autofocus', 'required', 'form'],\n /**\n Sets the `type` attribute of the `Checkbox`'s element\n @property disabled\n @default false\n @private\n */\n type: 'checkbox',\n /**\n Sets the `disabled` attribute of the `Checkbox`'s element\n @property disabled\n @default false\n @public\n */\n disabled: false,\n /**\n Corresponds to the `indeterminate` property of the `Checkbox`'s element\n @property disabled\n @default false\n @public\n */\n indeterminate: false,\n /**\n @property checked\n @default false\n @private\n */\n checked: false,\n /**\n Whenever the checkbox is inserted into the DOM, perform initialization steps, which include\n setting the indeterminate property if needed.\n If this method is overridden, `super` must be called.\n @method\n @public\n */\n didInsertElement() {\n this._super(...arguments);\n this.element.indeterminate = Boolean(this.indeterminate);\n },\n /**\n Whenever the `change` event is fired on the checkbox, update its `checked` property to reflect\n whether the checkbox is checked.\n If this method is overridden, `super` must be called.\n @method\n @public\n */\n change() {\n set(this, 'checked', this.element.checked);\n }\n});\nif (DEBUG) {\n const UNSET = {};\n Checkbox.reopen({\n value: UNSET,\n didReceiveAttrs() {\n this._super();\n assert(\"`` is not supported; \" + \"please use `` instead.\", !(this.type === 'checkbox' && this.value !== UNSET));\n }\n });\n}\nCheckbox.toString = () => '@ember/component/checkbox';\nexport default Checkbox;","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{~#if (has-block)~}}\\n {{yield}}\\n{{~else~}}\\n {{this.linkTitle}}\\n{{~/if~}}\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/components/link-to.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './link-to.hbs'; */\nimport { alias } from '@ember/object/computed';\nimport { computed } from '@ember/object';\nimport { getOwner } from '@ember/application';\nimport EmberComponent from '@ember/component';\nimport { assert, deprecate, runInDebug, warn } from '@ember/debug';\nimport { getEngineParent } from '@ember/engine';\nimport { inject as injectService } from '@ember/service';\nimport { DEBUG } from '@glimmer/env';\nimport { isSimpleClick } from './_internals';\nimport { HAS_BLOCK } from './_internals';\n\n/**\n The `LinkTo` component renders a link to the supplied `routeName` passing an optionally\n supplied model to the route as its `model` context of the route. The block for `LinkTo`\n becomes the contents of the rendered element:\n\n ```handlebars\n \n Great Hamster Photos\n \n ```\n\n This will result in:\n\n ```html\n \n Great Hamster Photos\n \n ```\n\n ### Disabling the `LinkTo` component\n\n The `LinkTo` component can be disabled by using the `disabled` argument. A disabled link\n doesn't result in a transition when activated, and adds the `disabled` class to the ``\n element.\n\n (The class name to apply to the element can be overridden by using the `disabledClass`\n argument)\n\n ```handlebars\n \n Great Hamster Photos\n \n ```\n\n ### Handling `href`\n\n `` will use your application's Router to fill the element's `href` property with a URL\n that matches the path to the supplied `routeName`.\n\n ### Handling current route\n\n The `LinkTo` component will apply a CSS class name of 'active' when the application's current\n route matches the supplied routeName. For example, if the application's current route is\n 'photoGallery.recent', then the following invocation of `LinkTo`:\n\n ```handlebars\n \n Great Hamster Photos\n \n ```\n\n will result in\n\n ```html\n \n Great Hamster Photos\n \n ```\n\n The CSS class used for active classes can be customized by passing an `activeClass` argument:\n\n ```handlebars\n \n Great Hamster Photos\n \n ```\n\n ```html\n \n Great Hamster Photos\n \n ```\n\n ### Keeping a link active for other routes\n\n If you need a link to be 'active' even when it doesn't match the current route, you can use the\n `current-when` argument.\n\n ```handlebars\n \n Photo Gallery\n \n ```\n\n This may be helpful for keeping links active for:\n\n * non-nested routes that are logically related\n * some secondary menu approaches\n * 'top navigation' with 'sub navigation' scenarios\n\n A link will be active if `current-when` is `true` or the current\n route is the route this link would transition to.\n\n To match multiple routes 'space-separate' the routes:\n\n ```handlebars\n \n Art Gallery\n \n ```\n\n ### Supplying a model\n\n An optional `model` argument can be used for routes whose\n paths contain dynamic segments. This argument will become\n the model context of the linked route:\n\n ```javascript\n Router.map(function() {\n this.route(\"photoGallery\", {path: \"hamster-photos/:photo_id\"});\n });\n ```\n\n ```handlebars\n \n {{aPhoto.title}}\n \n ```\n\n ```html\n \n Tomster\n \n ```\n\n ### Supplying multiple models\n\n For deep-linking to route paths that contain multiple\n dynamic segments, the `models` argument can be used.\n\n As the router transitions through the route path, each\n supplied model argument will become the context for the\n route with the dynamic segments:\n\n ```javascript\n Router.map(function() {\n this.route(\"photoGallery\", { path: \"hamster-photos/:photo_id\" }, function() {\n this.route(\"comment\", {path: \"comments/:comment_id\"});\n });\n });\n ```\n\n This argument will become the model context of the linked route:\n\n ```handlebars\n \n {{comment.body}}\n \n ```\n\n ```html\n \n A+++ would snuggle again.\n \n ```\n\n ### Supplying an explicit dynamic segment value\n\n If you don't have a model object available to pass to `LinkTo`,\n an optional string or integer argument can be passed for routes whose\n paths contain dynamic segments. This argument will become the value\n of the dynamic segment:\n\n ```javascript\n Router.map(function() {\n this.route(\"photoGallery\", { path: \"hamster-photos/:photo_id\" });\n });\n ```\n\n ```handlebars\n \n {{this.aPhoto.title}}\n \n ```\n\n ```html\n \n Tomster\n \n ```\n\n When transitioning into the linked route, the `model` hook will\n be triggered with parameters including this passed identifier.\n\n ### Supplying a `tagName`\n\n By default `` renders an `` element. This can be overridden for a single use of\n `` by supplying a `tagName` argument:\n\n ```handlebars\n \n Great Hamster Photos\n \n ```\n\n This produces:\n\n ```html\n
  • \n Great Hamster Photos\n
  • \n ```\n\n In general, this is not recommended.\n\n ### Supplying query parameters\n\n If you need to add optional key-value pairs that appear to the right of the ? in a URL,\n you can use the `query` argument.\n\n ```handlebars\n \n Great Hamster Photos\n \n ```\n\n This will result in:\n\n ```html\n
    \n Great Hamster Photos\n \n ```\n\n @for Ember.Templates.components\n @method LinkTo\n @see {LinkComponent}\n @public\n*/\n\n/**\n @module @ember/routing\n*/\n\n/**\n See [Ember.Templates.components.LinkTo](/ember/release/classes/Ember.Templates.components/methods/input?anchor=LinkTo).\n\n @for Ember.Templates.helpers\n @method link-to\n @see {Ember.Templates.components.LinkTo}\n @public\n**/\n\n/**\n `LinkComponent` is the internal component invoked with `` or `{{link-to}}`.\n\n @class LinkComponent\n @extends Component\n @see {Ember.Templates.components.LinkTo}\n @public\n**/\n\nconst UNDEFINED = Object.freeze({\n toString() {\n return 'UNDEFINED';\n }\n});\nconst EMPTY_QUERY_PARAMS = Object.freeze({});\nconst LinkComponent = EmberComponent.extend({\n tagName: 'a',\n /**\n @property route\n @public\n */\n route: UNDEFINED,\n /**\n @property model\n @public\n */\n model: UNDEFINED,\n /**\n @property models\n @public\n */\n models: UNDEFINED,\n /**\n @property query\n @public\n */\n query: UNDEFINED,\n /**\n Used to determine when this `LinkComponent` is active.\n @property current-when\n @public\n */\n 'current-when': null,\n /**\n @property disabledWhen\n @public\n */\n disabledWhen: undefined,\n /**\n Sets the `title` attribute of the `LinkComponent`'s HTML element.\n @property title\n @default null\n @public\n **/\n title: null,\n /**\n Sets the `rel` attribute of the `LinkComponent`'s HTML element.\n @property rel\n @default null\n @public\n **/\n rel: null,\n /**\n Sets the `tabindex` attribute of the `LinkComponent`'s HTML element.\n @property tabindex\n @default null\n @public\n **/\n tabindex: null,\n /**\n Sets the `target` attribute of the `LinkComponent`'s HTML element.\n @since 1.8.0\n @property target\n @default null\n @public\n **/\n target: null,\n /**\n The CSS class to apply to `LinkComponent`'s element when its `active`\n property is `true`.\n @property activeClass\n @type String\n @default active\n @public\n **/\n activeClass: 'active',\n /**\n The CSS class to apply to `LinkComponent`'s element when its `loading`\n property is `true`.\n @property loadingClass\n @type String\n @default loading\n @public\n **/\n loadingClass: 'loading',\n /**\n The CSS class to apply to a `LinkComponent`'s element when its `disabled`\n property is `true`.\n @property disabledClass\n @type String\n @default disabled\n @public\n **/\n disabledClass: 'disabled',\n /**\n Determines whether the `LinkComponent` will trigger routing via\n the `replaceWith` routing strategy.\n @property replace\n @type Boolean\n @default false\n @public\n **/\n replace: false,\n /**\n Determines whether the `LinkComponent` will prevent the default\n browser action by calling preventDefault() to avoid reloading\n the browser page.\n If you need to trigger a full browser reload pass `@preventDefault={{false}}`:\n ```handlebars\n \n {{this.aPhotoId.title}}\n \n ```\n @property preventDefault\n @type Boolean\n @default true\n @private\n **/\n preventDefault: true,\n /**\n @property linkTitle\n @private\n */\n linkTitle: undefined,\n /**\n By default this component will forward `href`, `title`, `rel`, `tabindex`, and `target`\n arguments to attributes on the component's element. When invoked with `{{link-to}}`, you can\n only customize these attributes. When invoked with ``, you can just use HTML\n attributes directly.\n @property attributeBindings\n @type Array | String\n @default ['title', 'rel', 'tabindex', 'target']\n @public\n */\n attributeBindings: ['href', 'title', 'rel', 'tabindex', 'target'],\n /**\n By default this component will set classes on its element when any of the following arguments\n are truthy:\n * active\n * loading\n * disabled\n When these arguments are truthy, a class with the same name will be set on the element. When\n falsy, the associated class will not be on the element.\n @property classNameBindings\n @type Array\n @default ['active', 'loading', 'disabled', 'ember-transitioning-in', 'ember-transitioning-out']\n @public\n */\n classNameBindings: ['active', 'loading', 'disabled', 'transitioningIn', 'transitioningOut'],\n /**\n By default this component responds to the `click` event. When the component element is an\n `` element, activating the link in another way, such as using the keyboard, triggers the\n click event.\n @property eventName\n @type String\n @default click\n @private\n */\n eventName: 'click',\n // this is doc'ed here so it shows up in the events\n // section of the API documentation, which is where\n // people will likely go looking for it.\n /**\n Triggers the `LinkComponent`'s routing behavior. If\n `eventName` is changed to a value other than `click`\n the routing behavior will trigger on that custom event\n instead.\n @event click\n @private\n */\n\n /**\n An overridable method called when `LinkComponent` objects are instantiated.\n Example:\n ```app/components/my-link.js\n import LinkComponent from '@ember/routing/link-component';\n export default LinkComponent.extend({\n init() {\n this._super(...arguments);\n console.log('Event is ' + this.get('eventName'));\n }\n });\n ```\n NOTE: If you do override `init` for a framework class like `Component`,\n be sure to call `this._super(...arguments)` in your\n `init` declaration! If you don't, Ember may not have an opportunity to\n do important setup work, and you'll see strange behavior in your\n application.\n @method init\n @private\n */\n init() {\n this._super(...arguments);\n this.assertLinkToOrigin();\n\n // Map desired event name to invoke function\n let {\n eventName\n } = this;\n this.on(eventName, this, this._invoke);\n },\n //@ts-ignore\n _routing: injectService('-routing'),\n _currentRoute: alias('_routing.currentRouteName'),\n _currentRouterState: alias('_routing.currentState'),\n _targetRouterState: alias('_routing.targetState'),\n /**\n * Method to assert that LinkTo is not used inside of a routeless engine. This method is\n * overridden in ember-engines link-to-external component to just be a noop, since the\n * link-to-external component extends the link-to component.\n *\n * @method assertLinkToOrigin\n * @private\n */\n assertLinkToOrigin() {\n assert('You attempted to use the component within a routeless engine, this is not supported. ' + 'If you are using the ember-engines addon, use the component instead. ' + 'See https://ember-engines.com/docs/links for more info.', !this._isEngine || this._engineMountPoint !== undefined);\n },\n _isEngine: computed(function () {\n return getEngineParent(getOwner(this)) !== undefined;\n }),\n _engineMountPoint: computed(function () {\n //@ts-ignore\n return getOwner(this).mountPoint;\n }),\n _route: computed('route', '_currentRouterState', function computeLinkToComponentRoute() {\n let {\n route\n } = this;\n return route === UNDEFINED ? this._currentRoute : this._namespaceRoute(route);\n }),\n _models: computed('model', 'models', function computeLinkToComponentModels() {\n let {\n model,\n models\n } = this;\n assert('You cannot provide both the `@model` and `@models` arguments to the component.', model === UNDEFINED || models === UNDEFINED);\n if (model !== UNDEFINED) {\n return [model];\n } else if (models !== UNDEFINED) {\n assert('The `@models` argument must be an array.', Array.isArray(models));\n return models;\n } else {\n return [];\n }\n }),\n _query: computed('query', function computeLinkToComponentQuery() {\n let {\n query\n } = this;\n if (query === UNDEFINED) {\n return EMPTY_QUERY_PARAMS;\n } else {\n return Object.assign({}, query);\n }\n }),\n /**\n Accessed as a classname binding to apply the component's `disabledClass`\n CSS `class` to the element when the link is disabled.\n When `true`, interactions with the element will not trigger route changes.\n @property disabled\n @public\n */\n disabled: computed({\n get(_key) {\n // always returns false for `get` because (due to the `set` just below)\n // the cached return value from the set will prevent this getter from _ever_\n // being called after a set has occurred\n return false;\n },\n set(_key, value) {\n this._isDisabled = value;\n return value ? this.disabledClass : false;\n }\n }),\n /**\n Accessed as a classname binding to apply the component's `activeClass`\n CSS `class` to the element when the link is active.\n This component is considered active when its `currentWhen` property is `true`\n or the application's current route is the route this component would trigger\n transitions into.\n The `currentWhen` property can match against multiple routes by separating\n route names using the ` ` (space) character.\n @property active\n @private\n */\n active: computed('activeClass', '_active', function computeLinkToComponentActiveClass() {\n return this._active ? this.activeClass : false;\n }),\n _active: computed('_currentRouterState', '_route', '_models', '_query', 'loading', 'current-when', function computeLinkToComponentActive() {\n let {\n _currentRouterState: state\n } = this;\n if (state) {\n return this._isActive(state);\n } else {\n return false;\n }\n }),\n willBeActive: computed('_currentRouterState', '_targetRouterState', '_route', '_models', '_query', 'loading', 'current-when', function computeLinkToComponentWillBeActive() {\n let {\n _currentRouterState: current,\n _targetRouterState: target\n } = this;\n if (current === target) {\n return;\n }\n return this._isActive(target);\n }),\n _isActive(routerState) {\n if (this.loading) {\n return false;\n }\n let currentWhen = this['current-when'];\n if (typeof currentWhen === 'boolean') {\n return currentWhen;\n }\n let {\n _models: models,\n _routing: routing\n } = this;\n if (typeof currentWhen === 'string') {\n return currentWhen.split(' ').some(route => routing.isActiveForRoute(models, undefined, this._namespaceRoute(route), routerState));\n } else {\n return routing.isActiveForRoute(models, this._query, this._route, routerState);\n }\n },\n transitioningIn: computed('_active', 'willBeActive', function computeLinkToComponentTransitioningIn() {\n if (this.willBeActive === true && !this._active) {\n return 'ember-transitioning-in';\n } else {\n return false;\n }\n }),\n transitioningOut: computed('_active', 'willBeActive', function computeLinkToComponentTransitioningOut() {\n if (this.willBeActive === false && this._active) {\n return 'ember-transitioning-out';\n } else {\n return false;\n }\n }),\n _namespaceRoute(route) {\n let {\n _engineMountPoint: mountPoint\n } = this;\n if (mountPoint === undefined) {\n return route;\n } else if (route === 'application') {\n return mountPoint;\n } else {\n return `${mountPoint}.${route}`;\n }\n },\n /**\n Event handler that invokes the link, activating the associated route.\n @method _invoke\n @param {Event} event\n @private\n */\n _invoke(event) {\n if (!isSimpleClick(event)) {\n return true;\n }\n let {\n bubbles,\n preventDefault\n } = this;\n let target = this.element.target;\n let isSelf = !target || target === '_self';\n if (preventDefault !== false && isSelf) {\n event.preventDefault();\n }\n if (bubbles === false) {\n event.stopPropagation();\n }\n if (this._isDisabled) {\n return false;\n }\n if (this.loading) {\n // tslint:disable-next-line:max-line-length\n warn('This link is in an inactive loading state because at least one of its models ' + 'currently has a null/undefined value, or the provided route name is invalid.', false, {\n id: 'ember-glimmer.link-to.inactive-loading-state'\n });\n return false;\n }\n if (!isSelf) {\n return false;\n }\n let {\n _route: routeName,\n _models: models,\n _query: queryParams,\n replace: shouldReplace\n } = this;\n let payload = {\n queryParams,\n routeName\n };\n\n // flaggedInstrument(\n // 'interaction.link-to',\n // payload,\n // this._generateTransition(\n // payload,\n // routeName,\n // models,\n // queryParams,\n // shouldReplace\n // )\n // );\n this._generateTransition(payload, routeName, models, queryParams, shouldReplace);\n return false;\n },\n _generateTransition(payload, qualifiedRouteName, models, queryParams, shouldReplace) {\n let {\n _routing: routing\n } = this;\n payload.transition = routing.transitionTo(qualifiedRouteName, models, queryParams, shouldReplace);\n },\n /**\n Sets the element's `href` attribute to the url for\n the `LinkComponent`'s targeted route.\n If the `LinkComponent`'s `tagName` is changed to a value other\n than `a`, this property will be ignored.\n @property href\n @private\n */\n href: computed('_currentRouterState', '_route', '_models', '_query', 'tagName', 'loading', 'loadingHref', function computeLinkToComponentHref() {\n if (this.tagName !== 'a') {\n return;\n }\n if (this.loading) {\n return this.loadingHref;\n }\n let {\n _route: route,\n _models: models,\n _query: query,\n _routing: routing\n } = this;\n if (DEBUG) {\n /*\n * Unfortunately, to get decent error messages, we need to do this.\n * In some future state we should be able to use a \"feature flag\"\n * which allows us to strip this without needing to call it twice.\n *\n * if (isDebugBuild()) {\n * // Do the useful debug thing, probably including try/catch.\n * } else {\n * // Do the performant thing.\n * }\n */\n try {\n return routing.generateURL(route, models, query);\n } catch (e) {\n // tslint:disable-next-line:max-line-length\n e.message = `While generating link to route \"${this.route}\": ${e.message}`;\n throw e;\n }\n } else {\n return routing.generateURL(route, models, query);\n }\n }),\n /**\n The loading state. Returns the loadingClass is true.\n @property activeClass\n @type {string|undefined}\n @default active\n @public\n **/\n loading: computed('_route', '_modelsAreLoaded', 'loadingClass', function computeLinkToComponentLoading() {\n let {\n _route: route,\n _modelsAreLoaded: loaded\n } = this;\n if (!loaded || route === null || route === undefined) {\n return this.loadingClass;\n }\n }),\n _modelsAreLoaded: computed('_models', function computeLinkToComponentModelsAreLoaded() {\n let {\n _models: models\n } = this;\n for (let i = 0; i < models.length; i++) {\n let model = models[i];\n if (model === null || model === undefined) {\n return false;\n }\n }\n return true;\n }),\n /**\n The default href value to use while a link-to is loading.\n Only applies when tagName is 'a'\n @property loadingHref\n @type String\n @default #\n @private\n */\n loadingHref: '#',\n didReceiveAttrs() {\n let {\n disabledWhen\n } = this;\n if (disabledWhen !== undefined) {\n this.set('disabled', disabledWhen);\n }\n\n // @ts-ignore\n let {\n params\n } = this;\n if (!params || params.length === 0) {\n assert('You must provide at least one of the `@route`, `@model`, `@models` or `@query` argument to ``.', !(this.route === UNDEFINED && this.model === UNDEFINED && this.models === UNDEFINED && this.query === UNDEFINED));\n let {\n _models: models\n } = this;\n if (models.length > 0) {\n let lastModel = models[models.length - 1];\n if (typeof lastModel === 'object' && lastModel !== null && lastModel.isQueryParams) {\n this.query = lastModel.values;\n models.pop();\n }\n }\n return;\n }\n let hasBlock = this[HAS_BLOCK];\n params = params.slice();\n\n // Process the positional arguments, in order.\n // 1. Inline link title comes first, if present.\n if (!hasBlock) {\n this.set('linkTitle', params.shift());\n }\n\n // 2. The last argument is possibly the `query` object.\n let queryParams = params[params.length - 1];\n if (queryParams && queryParams.isQueryParams) {\n this.set('query', params.pop().values);\n } else {\n this.set('query', UNDEFINED);\n }\n\n // 3. If there is a `route`, it is now at index 0.\n if (params.length === 0) {\n this.set('route', UNDEFINED);\n } else {\n this.set('route', params.shift());\n }\n\n // 4. Any remaining indices (if any) are `models`.\n this.set('model', UNDEFINED);\n this.set('models', params);\n runInDebug(() => {\n // @ts-ignore\n params = this.params.slice();\n let equivalentNamedArgs = [];\n let hasQueryParams = false;\n\n // Process the positional arguments, in order.\n // 1. Inline link title comes first, if present.\n if (!hasBlock) {\n params.shift();\n }\n\n // 2. The last argument is possibly the `query` object.\n let query = params[params.length - 1];\n if (query && query.isQueryParams) {\n params.pop();\n hasQueryParams = true;\n }\n\n // 3. If there is a `route`, it is now at index 0.\n if (params.length > 0) {\n params.shift();\n equivalentNamedArgs.push('`@route`');\n }\n\n // 4. Any remaining params (if any) are `models`.\n if (params.length === 1) {\n equivalentNamedArgs.push('`@model`');\n } else if (params.length > 1) {\n equivalentNamedArgs.push('`@models`');\n }\n if (hasQueryParams) {\n equivalentNamedArgs.push('`@query`');\n }\n if (equivalentNamedArgs.length > 0) {\n let message = 'Invoking the `` component with positional arguments is deprecated.';\n message += `Please use the equivalent named arguments (${equivalentNamedArgs.join(', ')})`;\n if (hasQueryParams) {\n message += ' along with the `hash` helper';\n }\n if (!hasBlock) {\n message += \" and pass a block for the link's content.\";\n }\n message += '.';\n deprecate(message, false, {\n id: 'ember-glimmer.link-to.positional-arguments',\n until: '4.0.0',\n for: 'ember-source',\n url: 'https://deprecations.emberjs.com/v3.x#toc_ember-glimmer-link-to-positional-arguments',\n since: {\n available: '3.26.0-beta.1',\n enabled: '3.26.0-beta.1'\n }\n });\n }\n });\n }\n});\nLinkComponent.toString = () => '@ember/routing/link-component';\nLinkComponent.reopenClass({\n positionalParams: 'params'\n});\nexport default LinkComponent;","// check if window exists and actually is the global\nexport default typeof self === 'object' && self !== null && self.Object === Object && typeof Window !== 'undefined' && self.constructor === Window && typeof document === 'object' && document !== null && self.document === document && typeof location === 'object' && location !== null && self.location === location && typeof history === 'object' && history !== null && self.history === history && typeof navigator === 'object' && navigator !== null && self.navigator === navigator && typeof navigator.userAgent === 'string';","/* eslint-disable ember/no-mixins */\n/* eslint-disable ember/no-classic-classes */\n/**\n@module @ember/component\n*/\n\nimport hasDOM from './_has-dom';\nimport { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport TextSupportMixin from '../mixins/text-support';\nconst inputTypes = hasDOM ? Object.create(null) : null;\nfunction canSetTypeOfInput(type) {\n // if running in outside of a browser always return\n // the original type\n if (!hasDOM) {\n return Boolean(type);\n }\n if (type in inputTypes) {\n return inputTypes[type];\n }\n let inputTypeTestElement = document.createElement('input');\n try {\n inputTypeTestElement.type = type;\n } catch (e) {\n // ignored\n }\n return inputTypes[type] = inputTypeTestElement.type === type;\n}\n\n/**\n The internal class used to create text inputs when the `Input` component is used with `type` of `text`.\n\n See [Ember.Templates.components.Input](/ember/release/classes/Ember.Templates.components/methods/Input?anchor=Input) for usage details.\n\n ## Layout and LayoutName properties\n\n Because HTML `input` elements are self closing `layout` and `layoutName`\n properties will not be applied.\n\n @class TextField\n @extends Component\n @uses Ember.TextSupport\n @public\n*/\nconst TextField = Component.extend(TextSupportMixin, {\n /**\n By default, this component will add the `ember-text-field` class to the component's element.\n @property classNames\n @type Array | String\n @default ['ember-text-field']\n @public\n */\n classNames: ['ember-text-field'],\n tagName: 'input',\n /**\n By default this component will forward a number of arguments to attributes on the the\n component's element:\n * accept\n * autocomplete\n * autosave\n * dir\n * formaction\n * formenctype\n * formmethod\n * formnovalidate\n * formtarget\n * height\n * inputmode\n * lang\n * list\n * type\n * max\n * min\n * multiple\n * name\n * pattern\n * size\n * step\n * value\n * width\n When invoked with `{{input type=\"text\"}}`, you can only customize these attributes. When invoked\n with ``, you can just use HTML attributes directly.\n @property attributeBindings\n @type Array | String\n @default ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', 'type', 'max', 'min', 'multiple', 'name', 'pattern', 'size', 'step', 'value', 'width']\n @public\n */\n attributeBindings: ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', 'type',\n // needs to be before min and max. See #15675\n 'max', 'min', 'multiple', 'name', 'pattern', 'size', 'step', 'value', 'width'],\n /**\n As the user inputs text, this property is updated to reflect the `value` property of the HTML\n element.\n @property value\n @type String\n @default \"\"\n @public\n */\n value: '',\n /**\n The `type` attribute of the input element.\n @property type\n @type String\n @default \"text\"\n @public\n */\n type: computed({\n get() {\n return 'text';\n },\n set(_key, value) {\n let type = 'text';\n if (canSetTypeOfInput(value)) {\n type = value;\n }\n return type;\n }\n }),\n /**\n The `size` of the text field in characters.\n @property size\n @type String\n @default null\n @public\n */\n size: null,\n /**\n The `pattern` attribute of input element.\n @property pattern\n @type String\n @default null\n @public\n */\n pattern: null,\n /**\n The `min` attribute of input element used with `type=\"number\"` or `type=\"range\"`.\n @property min\n @type String\n @default null\n @since 1.4.0\n @public\n */\n min: null,\n /**\n The `max` attribute of input element used with `type=\"number\"` or `type=\"range\"`.\n @property max\n @type String\n @default null\n @since 1.4.0\n @public\n */\n max: null\n});\nTextField.toString = () => '@ember/component/text-field';\nexport default TextField;","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@ember/legacy-built-in-components.d8e9bb4a/node_modules/@ember/legacy-built-in-components/templates/empty.hbs\" })","/* eslint-disable ember/no-mixins */\n/* eslint-disable ember/require-tagless-components */\n/**\n@module @ember/component\n*/\nimport TextSupport from '../mixins/text-support';\nimport Component from '@ember/component';\nimport layout from '../templates/empty';\n\n/**\n The `Textarea` component inserts a new instance of `\n ```\n\n The `@value` argument is two-way bound. If the user types text into the textarea, the `@value`\n argument is updated. If the `@value` argument is updated, the text in the textarea is updated.\n\n In the following example, the `writtenWords` property on the component will be updated as the user\n types 'Lots of text' into the text area of their browser's window.\n\n ```app/components/word-editor.js\n import Component from '@glimmer/component';\n import { tracked } from '@glimmer/tracking';\n\n export default class WordEditorComponent extends Component {\n @tracked writtenWords = \"Lots of text that IS bound\";\n }\n ```\n\n ```handlebars\n \n ```\n\n If you wanted a one way binding, you could use the `\n ```\n\n ```js\n export default Component.extend({\n resize(element) {\n element.style.height = `${element.scrollHeight}px`;\n }\n });\n ```\n\n In addition to the `element`, both named and positional arguments are passed to the\n executed function:\n\n ```handlebars\n
    \n ```\n\n ```js\n export default Component.extend({\n logArguments(element, [first, second], { third }) {\n console.log('element', element);\n console.log('positional args', first, second);\n console.log('names args', third);\n }\n });\n ```\n\n By default, the executed function will be unbound. If you would like to access\n the component context in your function, use the `action` decorator as follows:\n\n ```handlebars\n
    \n ```\n\n ```js\n export default Component.extend({\n someFunction: action(function(element, [someArg]) {\n // the `this` context will be the component instance\n })\n });\n ```\n\n @method did-update\n @public\n*/\nexport default setModifierManager(() => ({\n capabilities: macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1')) ? capabilities('3.22', {\n disableAutoTracking: false\n }) : capabilities('3.13', {\n disableAutoTracking: true\n }),\n createModifier() {\n return {\n element: null\n };\n },\n installModifier(state, element, args) {\n // save element into state bucket\n state.element = element;\n if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n // Consume individual properties to entangle tracking.\n // https://github.com/emberjs/ember.js/issues/19277\n // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n args.positional.forEach(() => {});\n args.named && Object.values(args.named);\n }\n },\n updateModifier({\n element\n }, args) {\n let [fn, ...positional] = args.positional;\n if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n // Consume individual properties to entangle tracking.\n // https://github.com/emberjs/ember.js/issues/19277\n // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n args.positional.forEach(() => {});\n args.named && Object.values(args.named);\n untrack(() => {\n fn(element, positional, args.named);\n });\n } else {\n fn(element, positional, args.named);\n }\n },\n destroyModifier() {}\n}), class DidUpdateModifier {});","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { macroCondition, dependencySatisfies } from '@embroider/macros';\n\n/**\n The `{{will-destroy}}` element modifier is activated immediately before the element\n is removed from the DOM.\n\n ```handlebars\n
    \n {{yield}}\n
    \n ```\n\n ```js\n export default Component.extend({\n teardownPlugin(element) {\n // teardown logic here\n }\n });\n ```\n\n By default, the executed function will be unbound. If you would like to access\n the component context in your function, use the `action` decorator as follows:\n\n ```handlebars\n
    \n {{yield}}\n
    \n ```\n\n ```js\n export default Component.extend({\n teardownPlugin: action(function(element) {\n // the `this` context will be the component instance\n })\n });\n ```\n\n @method will-destroy\n @public\n*/\nexport default setModifierManager(() => ({\n capabilities: capabilities(macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-beta.1')) ? '3.22' : '3.13', {\n disableAutoTracking: true\n }),\n createModifier() {\n return {\n element: null\n };\n },\n installModifier(state, element) {\n state.element = element;\n },\n updateModifier() {},\n destroyModifier({\n element\n }, args) {\n let [fn, ...positional] = args.positional;\n fn(element, positional, args.named);\n }\n}), class WillDestroyModifier {});","export default class Cache {\n size = 0;\n misses = 0;\n hits = 0;\n\n constructor(limit, func, store) {\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.store = store || new Map();\n }\n\n get(key) {\n let value = this.store.get(key);\n\n if (this.store.has(key)) {\n this.hits++;\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n\n return value;\n }\n\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n\n return value;\n }\n\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n\n}","/* eslint-disable no-useless-escape */\n\n/**\n @module @ember/string\n */\nimport Cache from './cache';\n// STATE within a module is frowned upon, this exists\n// to support Ember.STRINGS but shield ember internals from this legacy global\n// API.\nlet STRINGS = {};\nexport function setStrings(strings) {\n STRINGS = strings;\n}\nexport function getStrings() {\n return STRINGS;\n}\nexport function getString(name) {\n return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, key => decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-'));\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\nconst CAMELIZE_CACHE = new Cache(1000, key => key.replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) => chr ? chr.toUpperCase() : '').replace(STRING_CAMELIZE_REGEXP_2, (match\n/*, separator, chr */\n) => match.toLowerCase()));\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, str => {\n const replace1 = (_match, _separator, chr) => chr ? `_${chr.toUpperCase()}` : '';\n\n const replace2 = (_match, initialChar, _separator, chr) => initialChar + (chr ? chr.toUpperCase() : '');\n\n const parts = str.split('/');\n\n for (let i = 0; i < parts.length; i++) {\n parts[i] = parts[i].replace(STRING_CLASSIFY_REGEXP_1, replace1).replace(STRING_CLASSIFY_REGEXP_2, replace2);\n }\n\n return parts.join('/').replace(STRING_CLASSIFY_REGEXP_3, (match\n /*, separator, chr */\n ) => match.toUpperCase());\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, str => str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase());\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\nconst CAPITALIZE_CACHE = new Cache(1000, str => str.replace(STRING_CAPITALIZE_REGEXP, (match\n/*, separator, chr */\n) => match.toUpperCase()));\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, str => str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase());\n/**\n Splits a string into separate units separated by spaces, eliminating any\n empty strings in the process. This is a convenience method for split that\n is mostly useful when applied to the `String.prototype`.\n\n ```javascript\n import { w } from '@ember/string';\n\n w(\"alpha beta gamma\").forEach(function(key) {\n console.log(key);\n });\n\n // > alpha\n // > beta\n // > gamma\n ```\n\n @method w\n @param {String} str The string to split\n @return {Array} array containing the split strings\n @public\n*/\n\nexport function w(str) {\n return str.split(/\\s+/);\n}\n/**\n Converts a camelized string into all lower case separated by underscores.\n\n ```javascript\n import { decamelize } from '@ember/string';\n\n decamelize('innerHTML'); // 'inner_html'\n decamelize('action_name'); // 'action_name'\n decamelize('css-class-name'); // 'css-class-name'\n decamelize('my favorite items'); // 'my favorite items'\n ```\n\n @method decamelize\n @param {String} str The string to decamelize.\n @return {String} the decamelized string.\n @public\n*/\n\nexport function decamelize(str) {\n return DECAMELIZE_CACHE.get(str);\n}\n/**\n Replaces underscores, spaces, or camelCase with dashes.\n\n ```javascript\n import { dasherize } from '@ember/string';\n\n dasherize('innerHTML'); // 'inner-html'\n dasherize('action_name'); // 'action-name'\n dasherize('css-class-name'); // 'css-class-name'\n dasherize('my favorite items'); // 'my-favorite-items'\n dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n ```\n\n @method dasherize\n @param {String} str The string to dasherize.\n @return {String} the dasherized string.\n @public\n*/\n\nexport function dasherize(str) {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n Returns the lowerCamelCase form of a string.\n\n ```javascript\n import { camelize } from '@ember/string';\n\n camelize('innerHTML'); // 'innerHTML'\n camelize('action_name'); // 'actionName'\n camelize('css-class-name'); // 'cssClassName'\n camelize('my favorite items'); // 'myFavoriteItems'\n camelize('My Favorite Items'); // 'myFavoriteItems'\n camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'\n ```\n\n @method camelize\n @param {String} str The string to camelize.\n @return {String} the camelized string.\n @public\n*/\n\nexport function camelize(str) {\n return CAMELIZE_CACHE.get(str);\n}\n/**\n Returns the UpperCamelCase form of a string.\n\n ```javascript\n import { classify } from '@ember/string';\n\n classify('innerHTML'); // 'InnerHTML'\n classify('action_name'); // 'ActionName'\n classify('css-class-name'); // 'CssClassName'\n classify('my favorite items'); // 'MyFavoriteItems'\n classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'\n ```\n\n @method classify\n @param {String} str the string to classify\n @return {String} the classified string\n @public\n*/\n\nexport function classify(str) {\n return CLASSIFY_CACHE.get(str);\n}\n/**\n More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n form of a string.\n\n ```javascript\n import { underscore } from '@ember/string';\n\n underscore('innerHTML'); // 'inner_html'\n underscore('action_name'); // 'action_name'\n underscore('css-class-name'); // 'css_class_name'\n underscore('my favorite items'); // 'my_favorite_items'\n underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n ```\n\n @method underscore\n @param {String} str The string to underscore.\n @return {String} the underscored string.\n @public\n*/\n\nexport function underscore(str) {\n return UNDERSCORE_CACHE.get(str);\n}\n/**\n Returns the Capitalized form of a string\n\n ```javascript\n import { capitalize } from '@ember/string';\n\n capitalize('innerHTML') // 'InnerHTML'\n capitalize('action_name') // 'Action_name'\n capitalize('css-class-name') // 'Css-class-name'\n capitalize('my favorite items') // 'My favorite items'\n capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n ```\n\n @method capitalize\n @param {String} str The string to capitalize.\n @return {String} The capitalized string.\n @public\n*/\n\nexport function capitalize(str) {\n return CAPITALIZE_CACHE.get(str);\n}\n/*\n The following are implemented here to give users adding `@ember/string` to\n their projects a useful error message. The `ember-source` implementation of\n `@ember/string` is clobbered by adding this addon, and so the deprecation of\n the import path is not triggered. This error message is intended to help\n users discover what they need to change.\n*/\n\nexport function htmlSafe(str) {\n throw new Error('htmlSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}\nexport function isHTMLSafe(str) {\n throw new Error('isHTMLSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/application';\nexport default class EnsureRegisteredService extends Service {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"classNonces\", new WeakMap());\n _defineProperty(this, \"nonceCounter\", 0);\n }\n register(klass, owner = getOwner(this)) {\n let nonce = this.classNonces.get(klass);\n if (nonce == null) {\n nonce = `-ensure${this.nonceCounter++}`;\n this.classNonces.set(klass, nonce);\n owner.register(`component:${nonce}`, klass);\n }\n return nonce;\n }\n}","import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nlet runtime;\nif (macroCondition(dependencySatisfies('ember-source', '>=3.27.0-canary || >=3.27.0-beta'))) {\n // new enough ember has a real module we can import\n runtime = importSync('@glimmer/runtime');\n} else {\n // older ember has its own internal loader\n runtime = window.Ember.__loader.require('@glimmer/runtime');\n}\nlet {\n isCurriedComponentDefinition,\n CurriedComponentDefinition,\n curry,\n CurriedValue\n} = runtime;\n\n// older embers have isCurriedComponentDefinition, new ones have CurriedValue\n// and instanceof CurriedValue seems good enough.\nif (!isCurriedComponentDefinition) {\n isCurriedComponentDefinition = function (value) {\n return value instanceof CurriedValue;\n };\n}\nexport { isCurriedComponentDefinition };\nfunction runtimeResolver(owner) {\n let resolver = owner.lookup('renderer:-dom')._runtimeResolver;\n if (resolver) {\n return resolver;\n }\n let entry = Object.entries(owner.__container__.cache).find(e => e[0].startsWith('template-compiler:main-'));\n if (entry) {\n return entry[1].resolver.resolver;\n }\n throw new Error(`@embroider/util couldn't locate the runtime resolver on this ember version`);\n}\nexport function lookupCurriedComponentDefinition(name, owner) {\n let resolver = runtimeResolver(owner);\n if (typeof resolver.lookupComponentHandle === 'function') {\n let handle = resolver.lookupComponentHandle(name, contextForLookup(owner));\n if (handle != null) {\n return new CurriedComponentDefinition(resolver.resolve(handle), null);\n }\n }\n\n // here we're doing the same thing the internal currying does, in order to\n // generate a sane error message (even though we don't actually use\n // resolvedDefinition as part of our return value).\n let resolvedDefinition = resolver.lookupComponent(name, owner);\n if (!resolvedDefinition) {\n throw new Error(`Attempted to resolve \\`${name}\\` via ensureSafeComponent, but nothing was found.`);\n }\n return curry(0, name, owner, {\n named: {},\n positional: []\n });\n}\nfunction contextForLookup(owner) {\n if (macroCondition(dependencySatisfies('ember-source', '>=3.24.0-canary || >=3.24.0-beta'))) {\n return owner;\n } else {\n return {\n owner\n };\n }\n}","import { assert, deprecate } from '@ember/debug';\nimport { getOwner } from '@ember/application';\nimport { dependencySatisfies, macroCondition } from '@embroider/macros';\nimport { isCurriedComponentDefinition, lookupCurriedComponentDefinition } from './ember-private-api';\nimport Helper from '@ember/component/helper';\nexport function ensureSafeComponent(value, thingWithOwner) {\n if (typeof value === 'string') {\n return handleString(value, thingWithOwner);\n } else if (isCurriedComponentDefinition(value)) {\n return value;\n } else if (value == null) {\n return value;\n } else {\n return handleClass(value, thingWithOwner);\n }\n}\nexport class EnsureSafeComponentHelper extends Helper {\n compute([value]) {\n return ensureSafeComponent(value, this);\n }\n}\nfunction handleString(name, thingWithOwner) {\n deprecate(`You're trying to invoke the component \"${name}\" by passing its name as a string. This won't work under Embroider.`, false, {\n id: 'ensure-safe-component.string',\n url: 'https://github.com/embroider-build/embroider/blob/main/docs/replacing-component-helper.md#when-youre-passing-a-component-to-someone-else',\n until: 'embroider',\n for: '@embroider/util',\n since: '0.27.0'\n });\n let owner = getOwner(thingWithOwner);\n return lookupCurriedComponentDefinition(name, owner);\n}\nfunction ensureRegistered(klass, owner) {\n let service = owner.lookup('service:-ensure-registered');\n assert('Could not lookup private -ensure-registered service', service);\n return service.register(klass, owner);\n}\nfunction handleClass(klass, thingWithOwner) {\n if (macroCondition(dependencySatisfies('ember-source', '>=3.25.0-beta'))) {\n return klass;\n } else {\n let owner = getOwner(thingWithOwner);\n let nonce = ensureRegistered(klass, owner);\n return lookupCurriedComponentDefinition(nonce, owner);\n }\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { setOwner } from './owner';\nimport { isDestroying, isDestroyed } from './destroyables';\n\n// This provides a type-safe `WeakMap`: the getter and setter link the key to a\n// specific value. This is how `WeakMap`s actually behave, but the TS type\n// system does not (yet!) have a good way to capture that for types like\n// `WeakMap` where the type is generic over another generic type (here, `Args`).\n\n// SAFETY: this only holds because we *only* acces this when `DEBUG` is `true`.\n// There is not a great way to connect that data in TS at present.\nexport let ARGS_SET;\nif (DEBUG) {\n ARGS_SET = new WeakMap();\n}\n\n// --- Type utilities for component signatures --- //\n// Type-only \"symbol\" to use with `EmptyObject` below, so that it is *not*\n// equivalent to an empty interface.\n\n/**\n * This provides us a way to have a \"fallback\" which represents an empty object,\n * without the downsides of how TS treats `{}`. Specifically: this will\n * correctly leverage \"excess property checking\" so that, given a component\n * which has no named args, if someone invokes it with any named args, they will\n * get a type error.\n *\n * @internal This is exported so declaration emit works (if it were not emitted,\n * declarations which fall back to it would not work). It is *not* intended for\n * public usage, and the specific mechanics it uses may change at any time.\n * The location of this export *is* part of the public API, because moving it\n * will break existing declarations, but is not legal for end users to import\n * themselves, so ***DO NOT RELY ON IT***.\n */\n\n/** Given a signature `S`, get back the `Args` type. */\n\n/**\n * Given any allowed shorthand form of a signature, desugars it to its full\n * expanded type.\n *\n * @internal This is only exported so we can avoid duplicating it in\n * [Glint](https://github.com/typed-ember/glint) or other such tooling. It is\n * *not* intended for public usage, and the specific mechanics it uses may\n * change at any time. Although the signature produced by is part of Glimmer's\n * public API the existence and mechanics of this specific symbol are *not*,\n * so ***DO NOT RELY ON IT***.\n */\n// The conditional type here is because TS applies conditional types\n// distributively. This means that for union types, checks like `keyof T` get\n// all the keys from all elements of the union, instead of ending up as `never`\n// and then always falling into the `Signature` path instead of falling back to\n// the legacy args handling path.\n\n/**\n * @internal we use this type for convenience internally; inference means users\n * should not normally need to name it\n */\n\n/**\n * The `Component` class defines an encapsulated UI element that is rendered to\n * the DOM. A component is made up of a template and, optionally, this component\n * object.\n *\n * ## Defining a Component\n *\n * To define a component, subclass `Component` and add your own properties,\n * methods and lifecycle hooks:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * }\n * ```\n *\n * ## Lifecycle Hooks\n *\n * Lifecycle hooks allow you to respond to changes to a component, such as when\n * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a\n * component, implement the hook as a method on your component subclass.\n *\n * For example, to be notified when Glimmer has rendered your component so you\n * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * didInsertElement() {\n * $(this.element).pickadate();\n * }\n * }\n * ```\n *\n * ## Data for Templates\n *\n * `Component`s have two different kinds of data, or state, that can be\n * displayed in templates:\n *\n * 1. Arguments\n * 2. Properties\n *\n * Arguments are data that is passed in to a component from its parent\n * component. For example, if I have a `UserGreeting` component, I can pass it\n * a name and greeting to use:\n *\n * ```hbs\n * \n * ```\n *\n * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`\n * arguments that I've been given:\n *\n * ```hbs\n * {{@greeting}}, {{@name}}!\n * ```\n *\n * Arguments are also available inside my component:\n *\n * ```ts\n * console.log(this.args.greeting); // prints \"Olá\"\n * ```\n *\n * Properties, on the other hand, are internal to the component and declared in\n * the class. You can use properties to store data that you want to show in the\n * template, or pass to another component as an argument.\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * user = {\n * name: 'Robbie'\n * }\n * }\n * ```\n *\n * In the above example, we've defined a component with a `user` property that\n * contains an object with its own `name` property.\n *\n * We can render that property in our template:\n *\n * ```hbs\n * Hello, {{user.name}}!\n * ```\n *\n * We can also take that property and pass it as an argument to the\n * `UserGreeting` component we defined above:\n *\n * ```hbs\n * \n * ```\n *\n * ## Arguments vs. Properties\n *\n * Remember, arguments are data that was given to your component by its parent\n * component, and properties are data your component has defined for itself.\n *\n * You can tell the difference between arguments and properties in templates\n * because arguments always start with an `@` sign (think \"A is for arguments\"):\n *\n * ```hbs\n * {{@firstName}}\n * ```\n *\n * We know that `@firstName` came from the parent component, not the current\n * component, because it starts with `@` and is therefore an argument.\n *\n * On the other hand, if we see:\n *\n * ```hbs\n * {{name}}\n * ```\n *\n * We know that `name` is a property on the component. If we want to know where\n * the data is coming from, we can go look at our component class to find out.\n *\n * Inside the component itself, arguments always show up inside the component's\n * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,\n * inside the component `this.args.firstName` would also be `Tom`.\n */\nexport default class BaseComponent {\n /**\n * Constructs a new component and assigns itself the passed properties. You\n * should not construct new components yourself. Instead, Glimmer will\n * instantiate new components automatically as it renders.\n *\n * @param owner\n * @param args\n */\n constructor(owner, args) {\n /**\n * Named arguments passed to the component from its parent component.\n * They can be accessed in JavaScript via `this.args.argumentName` and in the template via `@argumentName`.\n *\n * Say you have the following component, which will have two `args`, `firstName` and `lastName`:\n *\n * ```hbs\n * \n * ```\n *\n * If you needed to calculate `fullName` by combining both of them, you would do:\n *\n * ```ts\n * didInsertElement() {\n * console.log(`Hi, my full name is ${this.args.firstName} ${this.args.lastName}`);\n * }\n * ```\n *\n * While in the template you could do:\n *\n * ```hbs\n *

    Welcome, {{@firstName}} {{@lastName}}!

    \n * ```\n */\n _defineProperty(this, \"args\", void 0);\n if (DEBUG && !(owner !== null && typeof owner === 'object' && ARGS_SET.has(args))) {\n throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);\n }\n this.args = args;\n setOwner(this, owner);\n }\n get isDestroying() {\n return isDestroying(this);\n }\n get isDestroyed() {\n return isDestroyed(this);\n }\n\n /**\n * Called before the component has been removed from the DOM.\n */\n willDestroy() {}\n}","import Ember from 'ember';\nexport const isDestroying = Ember._isDestroying;\nexport const isDestroyed = Ember._isDestroyed;","import { DEBUG } from '@glimmer/env';\nimport Ember from 'ember';\nimport { set } from '@ember/object';\nimport { getOwner, setOwner } from '@ember/application';\nimport { capabilities } from '@ember/component';\nimport { schedule } from '@ember/runloop';\nimport BaseComponentManager from './base-component-manager';\nimport * as destroyables from './destroyables';\nconst {\n setDestroyed,\n setDestroying\n} = destroyables;\nconst CAPABILITIES = true // @ts-ignore\n// @ts-ignore\n? capabilities('3.13', {\n destructor: true,\n asyncLifecycleCallbacks: false,\n updateHook: false\n}) : capabilities('3.4', {\n destructor: true,\n asyncLifecycleCallbacks: false\n});\nconst scheduledDestroyComponent = true ? undefined : (component, meta) => {\n if (component.isDestroyed) {\n return;\n }\n Ember.destroy(component);\n meta.setSourceDestroyed();\n setDestroyed(component);\n};\nconst destroy = true ? Ember.destroy : component => {\n if (component.isDestroying) {\n return;\n }\n let meta = Ember.meta(component);\n meta.setSourceDestroying();\n setDestroying(component);\n schedule('actions', component, component.willDestroy);\n schedule('destroy', this, scheduledDestroyComponent, component, meta);\n};\nconst registerDestructor = true ? Ember._registerDestructor : true ? Ember.__loader.require('@glimmer/runtime').registerDestructor : undefined;\n\n/**\n * This component manager runs in Ember.js environments and extends the base component manager to:\n *\n * 1. Properly destroy the component's associated `meta` data structure\n * 2. Schedule destruction using Ember's runloop\n */\nclass EmberGlimmerComponentManager extends BaseComponentManager(setOwner, getOwner, CAPABILITIES) {\n createComponent(ComponentClass, args) {\n const component = super.createComponent(ComponentClass, args);\n if (true) {\n registerDestructor(component, () => {\n component.willDestroy();\n });\n }\n return component;\n }\n destroyComponent(component) {\n destroy(component);\n }\n}\n// In Ember 3.12 and earlier, the updateComponent hook was mandatory.\n// As of Ember 3.13, the `args` object is stable and each property of the\n// object participates in the autotrack stack on its own. This means we do not\n// need to set the `args` property on the component instance to invalidate\n// tracked getters that rely on `args`, and therefore don't require the `updateComponent`\n// hook at all.\nif (!true) {\n EmberGlimmerComponentManager.prototype.updateComponent = function updateComponent(component, args) {\n let argSnapshot = args.named;\n if (DEBUG) {\n argSnapshot = Object.freeze(argSnapshot);\n }\n set(component, 'args', argSnapshot);\n };\n}\nexport default EmberGlimmerComponentManager;","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { ARGS_SET } from './component';\n/**\n * This factory function returns a component manager class with common behavior\n * that can be extend to add Glimmer.js- or Ember.js-specific functionality. As\n * these environments converge, the need for two component manager\n * implementations (and thus this factory) should go away.\n */\nexport default function BaseComponentManager(setOwner, getOwner, capabilities) {\n return class {\n static create(attrs) {\n let owner = getOwner(attrs);\n return new this(owner);\n }\n constructor(owner) {\n _defineProperty(this, \"capabilities\", capabilities);\n setOwner(this, owner);\n }\n createComponent(ComponentClass, args) {\n if (DEBUG) {\n ARGS_SET.set(args.named, true);\n }\n return new ComponentClass(getOwner(this), args.named);\n }\n getContext(component) {\n return component;\n }\n };\n}","import { DEBUG } from '@glimmer/env';\nimport { setComponentManager } from '@ember/component';\n\n// Hax because the old version of `@types/ember__component` the `1.x` branch\n// uses does not provide any types for `setComponentManager` *and* because we\n// are using a very old version of `setComponentManager` for versions before\n// Ember 3.8.\n\nimport GlimmerComponentManager from './-private/ember-component-manager';\nimport GlimmerComponentBase from './-private/component';\nlet GlimmerComponent = GlimmerComponentBase;\nif (DEBUG) {\n // Add assertions against using Glimmer.js only APIs\n\n // TODO: Add GlimmerComponent API docs link to these messages once API docs are live\n function throwMethodUseError(methodName) {\n throw new Error(`You attempted to define the '${methodName}' method on a Glimmer Component, but that lifecycle hook does not exist in Ember.js applications, it only exists in Glimmer.js apps. You can rename this method, and you can trigger it using a modifier such as {{did-insert}} from '@ember/render-modifiers': https://github.com/emberjs/ember-render-modifiers.`);\n }\n function throwPropertyUseError(propertyName) {\n throw new Error(`You attempted to access the '${propertyName}' property on a Glimmer Component, but that property does not exist in Ember.js applications, it only exists in Glimmer.js apps. You define a class field with the same name on your component class and it will overwrite this error message, but it will not be used by the framework.`);\n }\n GlimmerComponent = class GlimmerDebugComponent extends GlimmerComponent {\n constructor(owner, args) {\n super(owner, args);\n if (typeof this['didInsertElement'] === 'function') {\n throwMethodUseError('didInsertElement');\n }\n if (typeof this['didUpdate'] === 'function') {\n throwMethodUseError('didUpdate');\n }\n }\n };\n let proto = GlimmerComponent.prototype;\n function defineErrorProp(proto, key, getterMethod) {\n Object.defineProperty(proto, key, {\n get: () => getterMethod(key),\n set(value) {\n Object.defineProperty(this, key, {\n value\n });\n }\n });\n }\n\n // Methods should still throw whenever they are accessed\n defineErrorProp(proto, 'bounds', throwPropertyUseError);\n defineErrorProp(proto, 'element', throwPropertyUseError);\n defineErrorProp(proto, 'debugName', throwPropertyUseError);\n}\nif (true) {\n setComponentManager(owner => {\n return new GlimmerComponentManager(owner);\n }, GlimmerComponent);\n} else {\n setComponentManager('glimmer', GlimmerComponent);\n}\nexport default GlimmerComponent;","import * as metal from \"@ember/-internals/metal\";\n const { cached, tracked } = metal;\n export { cached, tracked };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#each this.virtualComponents key=\\\"id\\\" as |virtualComponent| ~}}\\n {{~unbound virtualComponent.upperBound~}}\\n {{~#if virtualComponent.isOccludedContent ~}}\\n {{{unbound virtualComponent.element}}}\\n {{~else~}}\\n {{~yield virtualComponent.content virtualComponent.index ~}}\\n {{~/if~}}\\n {{~unbound virtualComponent.lowerBound~}}\\n{{~/each}}\\n\\n{{#if this.shouldYieldToInverse}}\\n {{yield to=\\\"inverse\\\"}}\\n{{/if}}\\n\",{ moduleName: \"/ember-application/apps/customer-site/node_modules/.embroider/rewritten-packages/@html-next/vertical-collection.5ca33b23/node_modules/@html-next/vertical-collection/components/vertical-collection/template.hbs\" })","import { get } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport identity from './identity';\nexport default function keyForItem(item, keyPath, index) {\n let key;\n assert(`keyPath must be a string, received: ${keyPath}`, typeof keyPath === 'string');\n switch (keyPath) {\n case '@index':\n assert(`A numerical index must be supplied for keyForItem when keyPath is @index, received: ${index}`, typeof index === 'number');\n key = index;\n break;\n case '@identity':\n key = identity(item);\n break;\n default:\n key = get(item, keyPath);\n }\n if (typeof key === 'number') {\n key = String(key);\n }\n return key;\n}","import { guidFor } from '@ember/object/internals';\nexport default function identity(item) {\n let key;\n const type = typeof item;\n if (type === 'string' || type === 'number') {\n key = item;\n } else {\n key = guidFor(item);\n }\n return key;\n}","import { DEBUG } from '@glimmer/env';\nimport { begin, end } from '@ember/runloop';\nimport { assert } from '@ember/debug';\n\nexport class Token {\n constructor(parent) {\n this._parent = parent;\n this._cancelled = false;\n\n if (DEBUG) {\n Object.seal(this);\n }\n }\n\n get cancelled() {\n return (\n this._cancelled ||\n (this._cancelled = this._parent ? this._parent.cancelled : false)\n );\n }\n\n cancel() {\n this._cancelled = true;\n }\n}\n\nfunction job(cb, token) {\n return function execJob() {\n if (token.cancelled === false) {\n cb();\n }\n };\n}\n\nexport class Scheduler {\n constructor() {\n this.sync = [];\n this.layout = [];\n this.measure = [];\n this.affect = [];\n this.jobs = 0;\n this._nextFlush = null;\n this.ticks = 0;\n\n if (DEBUG) {\n Object.seal(this);\n }\n }\n\n schedule(queueName, cb, parent) {\n assert(\n `Attempted to schedule to unknown queue: ${queueName}`,\n queueName in this\n );\n\n this.jobs++;\n let token = new Token(parent);\n\n this[queueName].push(job(cb, token));\n this._flush();\n\n return token;\n }\n\n forget(token) {\n // TODO add explicit test\n if (token) {\n token.cancel();\n }\n }\n\n _flush() {\n if (this._nextFlush !== null) {\n return;\n }\n\n this._nextFlush = requestAnimationFrame(() => {\n this.flush();\n });\n }\n\n flush() {\n let i, q;\n this.jobs = 0;\n\n if (this.sync.length > 0) {\n begin();\n q = this.sync;\n this.sync = [];\n\n for (i = 0; i < q.length; i++) {\n q[i]();\n }\n end();\n }\n\n if (this.layout.length > 0) {\n q = this.layout;\n this.layout = [];\n\n for (i = 0; i < q.length; i++) {\n q[i]();\n }\n }\n\n if (this.measure.length > 0) {\n q = this.measure;\n this.measure = [];\n\n for (i = 0; i < q.length; i++) {\n q[i]();\n }\n }\n\n if (this.affect.length > 0) {\n q = this.affect;\n this.affect = [];\n\n for (i = 0; i < q.length; i++) {\n q[i]();\n }\n }\n\n this._nextFlush = null;\n if (this.jobs > 0) {\n this._flush();\n }\n }\n}\n\nexport const scheduler = new Scheduler();\n\nexport default scheduler;\n","export default window ? window.document : undefined;","import { set } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport document from '../../utils/document-shim';\nlet VC_IDENTITY = 0;\nexport default class VirtualComponent {\n constructor(content = null, index = null) {\n this.id = `VC-${VC_IDENTITY++}`;\n this.content = content;\n this.index = index;\n\n // We check to see if the document exists in Fastboot. Since RAF won't run in\n // Fastboot, we'll never have to use these text nodes for measurements, so they\n // can be empty\n this.upperBound = document !== undefined ? document.createTextNode('') : null;\n this.lowerBound = document !== undefined ? document.createTextNode('') : null;\n this.rendered = false;\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n get realUpperBound() {\n return this.upperBound;\n }\n get realLowerBound() {\n return this.lowerBound;\n }\n getBoundingClientRect() {\n let {\n upperBound,\n lowerBound\n } = this;\n let top = Infinity;\n let bottom = -Infinity;\n while (upperBound !== lowerBound) {\n upperBound = upperBound.nextSibling;\n if (upperBound instanceof Element) {\n top = Math.min(top, upperBound.getBoundingClientRect().top);\n bottom = Math.max(bottom, upperBound.getBoundingClientRect().bottom);\n }\n if (DEBUG) {\n if (upperBound instanceof Element) {\n continue;\n }\n const text = upperBound.textContent;\n assert(`All content inside of vertical-collection must be wrapped in an element. Detected a text node with content: ${text}`, text === '' || text.match(/^\\s+$/));\n }\n }\n assert('Items in a vertical collection require atleast one element in them', top !== Infinity && bottom !== -Infinity);\n const height = bottom - top;\n return {\n top,\n bottom,\n height\n };\n }\n recycle(newContent, newIndex) {\n assert(`You cannot set an item's content to undefined`, newContent);\n if (this.index !== newIndex) {\n set(this, 'index', newIndex);\n }\n if (this.content !== newContent) {\n set(this, 'content', newContent);\n }\n }\n destroy() {\n set(this, 'upperBound', null);\n set(this, 'lowerBound', null);\n set(this, 'content', null);\n set(this, 'index', null);\n }\n}","import { set } from '@ember/object';\nimport { DEBUG } from '@glimmer/env';\nimport document from '../../utils/document-shim';\nlet OC_IDENTITY = 0;\nexport default class OccludedContent {\n constructor(tagName) {\n this.id = `OC-${OC_IDENTITY++}`;\n this.isOccludedContent = true;\n\n // We check to see if the document exists in Fastboot. Since RAF won't run in\n // Fastboot, we'll never have to use these text nodes for measurements, so they\n // can be empty\n if (document !== undefined) {\n this.element = document.createElement(tagName);\n this.element.className += 'occluded-content';\n this.upperBound = document.createTextNode('');\n this.lowerBound = document.createTextNode('');\n } else {\n this.element = null;\n }\n this.isOccludedContent = true;\n this.rendered = false;\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n getBoundingClientRect() {\n if (this.element !== null) {\n return this.element.getBoundingClientRect();\n }\n }\n addEventListener(event, listener) {\n if (this.element !== null) {\n this.element.addEventListener(event, listener);\n }\n }\n removeEventListener(event, listener) {\n if (this.element !== null) {\n this.element.removeEventListener(event, listener);\n }\n }\n get realUpperBound() {\n return this.upperBound;\n }\n get realLowerBound() {\n return this.lowerBound;\n }\n get parentNode() {\n return this.element !== null ? this.element.parentNode : null;\n }\n get style() {\n return this.element !== null ? this.element.style : {};\n }\n set innerHTML(value) {\n if (this.element !== null) {\n this.element.innerHTML = value;\n }\n }\n destroy() {\n set(this, 'element', null);\n }\n}","export default function insertRangeBefore(parent, element, firstNode, lastNode) {\n let nextNode;\n while (firstNode) {\n nextNode = firstNode.nextSibling;\n parent.insertBefore(firstNode, element);\n if (firstNode === lastNode) {\n break;\n }\n firstNode = nextNode;\n }\n}","import { assert } from '@ember/debug';\nexport default function objectAt(arr, index) {\n assert('arr must be an instance of a Javascript Array or implement `objectAt`', Array.isArray(arr) || typeof arr.objectAt === 'function');\n return arr.objectAt ? arr.objectAt(index) : arr[index];\n}","export default function roundTo(number, decimal = 2) {\n const exp = Math.pow(10, decimal);\n return Math.round(number * exp) / exp;\n}","let supportsPassive = false;\ntry {\n let opts = Object.defineProperty({}, 'passive', {\n get() {\n supportsPassive = true;\n return supportsPassive;\n }\n });\n window.addEventListener('test', null, opts);\n} catch (e) {\n // do nothing\n}\nexport default supportsPassive;","import { begin, end } from '@ember/runloop';\nimport { scheduler } from 'ember-raf-scheduler';\nimport SUPPORTS_PASSIVE from './supports-passive';\nconst DEFAULT_ARRAY_SIZE = 10;\nconst UNDEFINED_VALUE = Object.create(null);\nexport class ScrollHandler {\n constructor() {\n this.elements = new Array(DEFAULT_ARRAY_SIZE);\n this.maxLength = DEFAULT_ARRAY_SIZE;\n this.length = 0;\n this.handlers = new Array(DEFAULT_ARRAY_SIZE);\n this.isPolling = false;\n this.isUsingPassive = SUPPORTS_PASSIVE;\n }\n addScrollHandler(element, handler) {\n let index = this.elements.indexOf(element);\n let handlers, cache;\n if (index === -1) {\n index = this.length++;\n if (index === this.maxLength) {\n this.maxLength *= 2;\n this.elements.length = this.maxLength;\n this.handlers.length = this.maxLength;\n }\n handlers = [handler];\n this.elements[index] = element;\n cache = this.handlers[index] = {\n top: element.scrollTop,\n left: element.scrollLeft,\n handlers\n };\n // TODO add explicit test\n if (SUPPORTS_PASSIVE) {\n cache.passiveHandler = function () {\n ScrollHandler.triggerElementHandlers(element, cache);\n };\n } else {\n cache.passiveHandler = UNDEFINED_VALUE;\n }\n } else {\n cache = this.handlers[index];\n handlers = cache.handlers;\n handlers.push(handler);\n }\n\n // TODO add explicit test\n if (this.isUsingPassive && handlers.length === 1) {\n element.addEventListener('scroll', cache.passiveHandler, {\n capture: true,\n passive: true\n });\n\n // TODO add explicit test\n } else if (!this.isPolling) {\n this.poll();\n }\n }\n removeScrollHandler(element, handler) {\n let index = this.elements.indexOf(element);\n let elementCache = this.handlers[index];\n // TODO add explicit test\n if (elementCache && elementCache.handlers) {\n let index = elementCache.handlers.indexOf(handler);\n if (index === -1) {\n throw new Error('Attempted to remove an unknown handler');\n }\n elementCache.handlers.splice(index, 1);\n\n // cleanup element entirely if needed\n // TODO add explicit test\n if (!elementCache.handlers.length) {\n index = this.elements.indexOf(element);\n this.handlers.splice(index, 1);\n this.elements.splice(index, 1);\n this.length--;\n this.maxLength--;\n if (this.length === 0) {\n this.isPolling = false;\n }\n\n // TODO add explicit test\n if (this.isUsingPassive) {\n element.removeEventListener('scroll', elementCache.passiveHandler, {\n capture: true,\n passive: true\n });\n }\n }\n } else {\n throw new Error('Attempted to remove a handler from an unknown element or an element with no handlers');\n }\n }\n static triggerElementHandlers(element, meta) {\n let cachedTop = element.scrollTop;\n let cachedLeft = element.scrollLeft;\n let topChanged = cachedTop !== meta.top;\n let leftChanged = cachedLeft !== meta.left;\n meta.top = cachedTop;\n meta.left = cachedLeft;\n let event = {\n top: cachedTop,\n left: cachedLeft\n };\n\n // TODO add explicit test\n if (topChanged || leftChanged) {\n begin();\n for (let j = 0; j < meta.handlers.length; j++) {\n meta.handlers[j](event);\n }\n end();\n }\n }\n poll() {\n this.isPolling = true;\n scheduler.schedule('sync', () => {\n // TODO add explicit test\n if (!this.isPolling) {\n return;\n }\n for (let i = 0; i < this.length; i++) {\n let element = this.elements[i];\n let info = this.handlers[i];\n ScrollHandler.triggerElementHandlers(element, info);\n }\n this.isPolling = this.length > 0;\n // TODO add explicit test\n if (this.isPolling) {\n this.poll();\n }\n });\n }\n}\nconst instance = new ScrollHandler();\nexport function addScrollHandler(element, handler) {\n instance.addScrollHandler(element, handler);\n}\nexport function removeScrollHandler(element, handler) {\n instance.removeScrollHandler(element, handler);\n}\nexport default instance;","/*\n * There are significant differences between browsers\n * in how they implement \"scroll\" on document.body\n *\n * The only cross-browser listener for scroll on body\n * is to listen on window with capture.\n *\n * They also implement different standards for how to\n * access the scroll position.\n *\n * This singleton class provides a cross-browser way\n * to access and set the scrollTop and scrollLeft properties.\n *\n */\nexport function ViewportContainer() {\n // A bug occurs in Chrome when we reload the browser at a lower\n // scrollTop, window.scrollY becomes stuck on a single value.\n Object.defineProperty(this, 'scrollTop', {\n get() {\n return document.body.scrollTop || document.documentElement.scrollTop;\n },\n set(v) {\n document.body.scrollTop = document.documentElement.scrollTop = v;\n }\n });\n Object.defineProperty(this, 'scrollLeft', {\n get() {\n return window.scrollX || window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;\n },\n set(v) {\n window.scrollX = window.pageXOffset = document.body.scrollLeft = document.documentElement.scrollLeft = v;\n }\n });\n Object.defineProperty(this, 'offsetHeight', {\n get() {\n return window.innerHeight;\n }\n });\n}\nViewportContainer.prototype.addEventListener = function addEventListener(event, handler, options) {\n return window.addEventListener(event, handler, options);\n};\nViewportContainer.prototype.removeEventListener = function addEventListener(event, handler, options) {\n return window.removeEventListener(event, handler, options);\n};\nViewportContainer.prototype.getBoundingClientRect = function getBoundingClientRect() {\n return {\n height: window.innerHeight,\n width: window.innerWidth,\n top: 0,\n left: 0,\n right: window.innerWidth,\n bottom: window.innerHeight\n };\n};\nexport default new ViewportContainer();","const VENDOR_MATCH_FNS = ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'];\nlet ELEMENT_MATCH_FN;\nfunction setElementMatchFn(el) {\n VENDOR_MATCH_FNS.forEach(fn => {\n if (ELEMENT_MATCH_FN === undefined && typeof el[fn] === 'function') {\n ELEMENT_MATCH_FN = fn;\n }\n });\n}\nexport default function closest(el, selector) {\n if (ELEMENT_MATCH_FN === undefined) {\n setElementMatchFn(el);\n }\n while (el) {\n // TODO add explicit test\n if (el[ELEMENT_MATCH_FN](selector)) {\n return el;\n }\n el = el.parentElement;\n }\n return null;\n}","import { assert } from '@ember/debug';\nexport default function estimateElementHeight(element, fallbackHeight) {\n assert(`You called estimateElement height without a fallbackHeight`, fallbackHeight);\n assert(`You called estimateElementHeight without an element`, element);\n if (fallbackHeight.indexOf('%') !== -1) {\n return getPercentageHeight(element, fallbackHeight);\n }\n if (fallbackHeight.indexOf('em') !== -1) {\n return getEmHeight(element, fallbackHeight);\n }\n return parseInt(fallbackHeight, 10);\n}\nfunction getPercentageHeight(element, fallbackHeight) {\n // We use offsetHeight here to get the element's true height, rather than the\n // bounding rect which may be scaled with transforms\n let parentHeight = element.offsetHeight;\n let percent = parseFloat(fallbackHeight);\n return percent * parentHeight / 100.0;\n}\nfunction getEmHeight(element, fallbackHeight) {\n const fontSizeElement = fallbackHeight.indexOf('rem') !== -1 ? document.documentElement : element;\n const fontSize = window.getComputedStyle(fontSizeElement).getPropertyValue('font-size');\n return parseFloat(fallbackHeight) * parseFloat(fontSize);\n}","export default function getScaledClientRect(element, scale) {\n const rect = element.getBoundingClientRect();\n if (scale === 1) {\n return rect;\n }\n const scaled = {};\n for (let key in rect) {\n scaled[key] = rect[key] * scale;\n }\n return scaled;\n}","import { A } from '@ember/array';\nimport { set, get } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { run } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\nimport { Token, scheduler } from 'ember-raf-scheduler';\nimport VirtualComponent from '../elements/virtual-component';\nimport OccludedContent from '../elements/occluded-content';\nimport insertRangeBefore from '../utils/insert-range-before';\nimport objectAt from '../utils/object-at';\nimport roundTo from '../utils/round-to';\nimport { isPrepend, isAppend } from '../utils/mutation-checkers';\nimport { addScrollHandler, removeScrollHandler } from '../utils/scroll-handler';\nimport ViewportContainer from '../viewport-container';\nimport closestElement from '../../utils/element/closest';\nimport estimateElementHeight from '../../utils/element/estimate-element-height';\nimport getScaledClientRect from '../../utils/element/get-scaled-client-rect';\nimport keyForItem from '../../ember-internals/key-for-item';\nimport document from '../../utils/document-shim';\nexport default class Radar {\n constructor(parentToken, {\n bufferSize,\n containerSelector,\n estimateHeight,\n initialRenderCount,\n items,\n key,\n renderAll,\n renderFromLast,\n shouldRecycle,\n startingIndex,\n occlusionTagName\n }) {\n this.token = new Token(parentToken);\n\n // Public API\n this.bufferSize = bufferSize;\n this.containerSelector = containerSelector;\n this.estimateHeight = estimateHeight;\n this.initialRenderCount = initialRenderCount;\n this.items = items;\n this.key = key;\n this.renderAll = renderAll;\n this.renderFromLast = renderFromLast;\n this.shouldRecycle = shouldRecycle;\n this.startingIndex = startingIndex;\n\n // defaults to a no-op intentionally, actions will only be sent if they\n // are passed into the component\n this.sendAction = () => {};\n\n // Calculated constants\n this._itemContainer = null;\n this._scrollContainer = null;\n this._prependOffset = 0;\n this._calculatedEstimateHeight = 0;\n this._collectionOffset = 0;\n this._calculatedScrollContainerHeight = 0;\n this._transformScale = 1;\n\n // Event handler\n this._scrollHandler = ({\n top\n }) => {\n // debounce scheduling updates by checking to make sure we've moved a minimum amount\n if (this._didEarthquake(Math.abs(this._scrollTop - top))) {\n this.scheduleUpdate();\n }\n };\n this._resizeHandler = this.scheduleUpdate.bind(this);\n\n // Run state\n this._nextUpdate = null;\n this._nextLayout = null;\n this._started = false;\n this._didReset = true;\n this._didUpdateItems = false;\n\n // Cache state\n this._scrollTop = 0;\n\n // Setting these values to infinity starts us in a guaranteed good state for the radar,\n // so it knows that it needs to run certain measurements, etc.\n this._prevFirstItemIndex = Infinity;\n this._prevLastItemIndex = -Infinity;\n this._prevFirstVisibleIndex = 0;\n this._prevLastVisibleIndex = 0;\n this._firstReached = false;\n this._lastReached = false;\n this._prevTotalItems = 0;\n this._prevFirstKey = 0;\n this._prevLastKey = 0;\n this._componentPool = [];\n this._prependComponentPool = [];\n this._appendComponentPool = []; // https://github.com/html-next/vertical-collection/issues/296\n\n // Boundaries\n this._occludedContentBefore = new OccludedContent(occlusionTagName);\n this._occludedContentAfter = new OccludedContent(occlusionTagName);\n this._pageUpHandler = this.pageUp.bind(this);\n this._occludedContentBefore.addEventListener('click', this._pageUpHandler);\n this._pageDownHandler = this.pageDown.bind(this);\n this._occludedContentAfter.addEventListener('click', this._pageDownHandler);\n\n // Element to hold pooled component DOM when not in use\n if (document) {\n this._domPool = document.createDocumentFragment();\n }\n\n // Initialize virtual components\n this.virtualComponents = A([this._occludedContentBefore, this._occludedContentAfter]);\n this.orderedComponents = [];\n this._updateVirtualComponents();\n\n // In older versions of Ember/IE, binding anything on an object in the template\n // adds observers which creates __ember_meta__\n this.__ember_meta__ = null; // eslint-disable-line camelcase\n\n if (DEBUG) {\n this._debugDidUpdate = null;\n }\n }\n destroy() {\n this.token.cancel();\n for (let i = 0; i < this.orderedComponents.length; i++) {\n this.orderedComponents[i].destroy();\n }\n\n // Boundaries\n this._occludedContentBefore.removeEventListener('click', this._pageUpHandler);\n this._occludedContentAfter.removeEventListener('click', this._pageDownHandler);\n this._occludedContentBefore.destroy();\n this._occludedContentAfter.destroy();\n this.orderedComponents = null;\n set(this, 'virtualComponents', null);\n if (this._started) {\n removeScrollHandler(this._scrollContainer, this._scrollHandler);\n ViewportContainer.removeEventListener('resize', this._resizeHandler);\n }\n }\n schedule(queueName, job) {\n return scheduler.schedule(queueName, job, this.token);\n }\n\n /**\n * Start the Radar. Does initial measurements, adds event handlers,\n * sets up initial scroll state, and\n */\n start() {\n const {\n startingIndex,\n containerSelector,\n _occludedContentBefore\n } = this;\n\n // Use the occluded content element, which has been inserted into the DOM,\n // to find the item container and the scroll container\n this._itemContainer = _occludedContentBefore.element.parentNode;\n this._scrollContainer = containerSelector === 'body' ? ViewportContainer : closestElement(this._itemContainer, containerSelector);\n this._updateConstants();\n\n // Setup initial scroll state\n if (startingIndex !== 0) {\n const {\n renderFromLast,\n _calculatedEstimateHeight,\n _collectionOffset,\n _calculatedScrollContainerHeight\n } = this;\n let startingScrollTop = startingIndex * _calculatedEstimateHeight;\n if (renderFromLast) {\n startingScrollTop -= _calculatedScrollContainerHeight - _calculatedEstimateHeight;\n }\n\n // initialize the scrollTop value, which will be applied to the\n // scrollContainer after the collection has been initialized\n this._scrollTop = startingScrollTop + _collectionOffset;\n this._prevFirstVisibleIndex = startingIndex;\n } else {\n this._scrollTop = this._scrollContainer.scrollTop;\n }\n this._started = true;\n this.update();\n\n // Setup event handlers\n addScrollHandler(this._scrollContainer, this._scrollHandler);\n ViewportContainer.addEventListener('resize', this._resizeHandler);\n }\n\n /*\n * Schedules an update for the next RAF\n *\n * This will first run _updateVirtualComponents in the sync phase, which figures out what\n * components need to be rerendered and updates the appropriate VCs and moves their associated\n * DOM. At the end of the `sync` phase the runloop is flushed and Glimmer renders the changes.\n *\n * By the `affect` phase the Radar should have had time to measure, meaning it has all of the\n * current info and we can send actions for any changes.\n *\n * @private\n */\n scheduleUpdate(didUpdateItems, promiseResolve) {\n if (didUpdateItems === true) {\n // Set the update items flag first, in case scheduleUpdate has already been called\n // but the RAF hasn't yet run\n this._didUpdateItems = true;\n }\n if (this._nextUpdate !== null || this._started === false) {\n return;\n }\n this._nextUpdate = this.schedule('sync', () => {\n this._nextUpdate = null;\n this._scrollTop = this._scrollContainer.scrollTop;\n this.update(promiseResolve);\n });\n }\n update(promiseResolve) {\n if (this._didUpdateItems === true) {\n this._determineUpdateType();\n this._didUpdateItems = false;\n }\n this._updateConstants();\n this._updateIndexes();\n this._updateVirtualComponents();\n this.schedule('measure', () => {\n if (promiseResolve) {\n promiseResolve();\n }\n this.afterUpdate();\n });\n }\n afterUpdate() {\n const {\n _prevTotalItems: totalItems\n } = this;\n const scrollDiff = this._calculateScrollDiff();\n if (scrollDiff !== 0) {\n this._scrollContainer.scrollTop += scrollDiff;\n }\n\n // Re-sync scrollTop, since Chrome may have intervened\n this._scrollTop = this._scrollContainer.scrollTop;\n\n // Unset prepend offset, we're done with any prepend changes at this point\n this._prependOffset = 0;\n if (totalItems !== 0) {\n this._sendActions();\n }\n\n // Cache previous values\n this._prevFirstItemIndex = this.firstItemIndex;\n this._prevLastItemIndex = this.lastItemIndex;\n this._prevFirstVisibleIndex = this.firstVisibleIndex;\n this._prevLastVisibleIndex = this.lastVisibleIndex;\n\n // Clear the reset flag\n this._didReset = false;\n if (DEBUG && this._debugDidUpdate !== null) {\n // Hook to update the visual debugger\n this._debugDidUpdate(this);\n }\n }\n\n /*\n * The scroll diff is the difference between where we want the container's scrollTop to be,\n * and where it actually is right now. By default it accounts for the `_prependOffset`, which\n * is set when items are added to the front of the collection, as well as any discrepancies\n * that may have arisen between the cached `_scrollTop` value and the actually container's\n * scrollTop. The container's scrollTop may be modified by the browser when we manipulate DOM\n * (Chrome specifically does this a lot), so `_scrollTop` should be considered the canonical\n * scroll top.\n *\n * Subclasses should override this method to provide any difference between expected item size\n * pre-render and actual item size post-render.\n */\n _calculateScrollDiff() {\n return this._prependOffset + this._scrollTop - this._scrollContainer.scrollTop;\n }\n _determineUpdateType() {\n const {\n items,\n key,\n totalItems,\n _prevTotalItems,\n _prevFirstKey,\n _prevLastKey\n } = this;\n const lenDiff = totalItems - _prevTotalItems;\n if (isPrepend(lenDiff, items, key, _prevFirstKey, _prevLastKey) === true) {\n this.prepend(lenDiff);\n } else if (isAppend(lenDiff, items, key, _prevFirstKey, _prevLastKey) === true) {\n this.append(lenDiff);\n } else {\n this.reset();\n }\n const firstItem = objectAt(this.items, 0);\n const lastItem = objectAt(this.items, this.totalItems - 1);\n this._prevTotalItems = totalItems;\n this._prevFirstKey = totalItems > 0 ? keyForItem(firstItem, key, 0) : 0;\n this._prevLastKey = totalItems > 0 ? keyForItem(lastItem, key, totalItems - 1) : 0;\n }\n _updateConstants() {\n const {\n estimateHeight,\n _occludedContentBefore,\n _itemContainer,\n _scrollContainer\n } = this;\n assert('Must provide a `estimateHeight` value to vertical-collection', estimateHeight !== null);\n assert('itemContainer must be set on Radar before scheduling an update', _itemContainer !== null);\n assert('scrollContainer must be set on Radar before scheduling an update', _scrollContainer !== null);\n\n // The scroll container's offsetHeight will reflect the actual height of the element, while\n // it's measured height via bounding client rect will reflect the height with any transformations\n // applied. We use this to find out the scale of the items so we can store measurements at the\n // correct heights.\n const scrollContainerOffsetHeight = _scrollContainer.offsetHeight;\n const {\n height: scrollContainerRenderedHeight\n } = _scrollContainer.getBoundingClientRect();\n let transformScale;\n\n // transformScale represents the opposite of the scale, if any, applied to the collection. Check for equality\n // to guard against floating point errors, and check to make sure we're not dividing by zero (default to scale 1 if so)\n if (scrollContainerOffsetHeight === scrollContainerRenderedHeight || scrollContainerRenderedHeight === 0) {\n transformScale = 1;\n } else {\n transformScale = scrollContainerOffsetHeight / scrollContainerRenderedHeight;\n }\n const {\n top: scrollContentTop\n } = getScaledClientRect(_occludedContentBefore, transformScale);\n const {\n top: scrollContainerTop\n } = getScaledClientRect(_scrollContainer, transformScale);\n let scrollContainerMaxHeight = 0;\n if (_scrollContainer instanceof Element) {\n const maxHeightStyle = window.getComputedStyle(_scrollContainer).maxHeight;\n if (maxHeightStyle !== 'none') {\n scrollContainerMaxHeight = estimateElementHeight(_scrollContainer.parentElement, maxHeightStyle);\n }\n }\n const calculatedEstimateHeight = typeof estimateHeight === 'string' ? estimateElementHeight(_itemContainer, estimateHeight) : estimateHeight;\n assert(`calculatedEstimateHeight must be greater than 0, instead was \"${calculatedEstimateHeight}\" based on estimateHeight: ${estimateHeight}`, calculatedEstimateHeight > 0);\n this._transformScale = transformScale;\n this._calculatedEstimateHeight = calculatedEstimateHeight;\n this._calculatedScrollContainerHeight = roundTo(Math.max(scrollContainerOffsetHeight, scrollContainerMaxHeight));\n\n // The offset between the top of the collection and the top of the scroll container. Determined by finding\n // the distance from the collection is from the top of the scroll container's content (scrollTop + actual position)\n // and subtracting the scroll containers actual top.\n this._collectionOffset = roundTo(_scrollContainer.scrollTop + scrollContentTop - scrollContainerTop);\n }\n\n /*\n * Updates virtualComponents, which is meant to be a static pool of components that we render to.\n * In order to decrease the time spent rendering and diffing, we pull the {{each}} out of the DOM\n * and only replace the content of _virtualComponents which are removed/added.\n *\n * For instance, if we start with the following and scroll down, items 2 and 3 do not need to be\n * rerendered, only item 1 needs to be removed and only item 4 needs to be added. So we replace\n * item 1 with item 4, and then manually move the DOM:\n *\n * 1 4 2\n * 2 -> replace 1 with 4 -> 2 -> manually move DOM -> 3\n * 3 3 4\n *\n * However, _virtualComponents is still out of order. Rather than keep track of the state of\n * things in _virtualComponents, we track the visually ordered components in the\n * _orderedComponents array. This is possible because all of our operations are relatively simple,\n * popping some number of components off one end and pushing them onto the other.\n *\n * @private\n */\n _updateVirtualComponents() {\n const {\n items,\n orderedComponents,\n virtualComponents,\n _componentPool,\n shouldRecycle,\n renderAll,\n _started,\n _didReset,\n _occludedContentBefore,\n _occludedContentAfter,\n totalItems\n } = this;\n let renderedFirstItemIndex, renderedLastItemIndex, renderedTotalBefore, renderedTotalAfter;\n if (renderAll === true) {\n // All items should be rendered, set indexes based on total item count\n renderedFirstItemIndex = 0;\n renderedLastItemIndex = totalItems - 1;\n renderedTotalBefore = 0;\n renderedTotalAfter = 0;\n } else if (_started === false) {\n // The Radar hasn't been started yet, render the initialRenderCount if it exists\n renderedFirstItemIndex = this.startingIndex;\n renderedLastItemIndex = this.startingIndex + this.initialRenderCount - 1;\n renderedTotalBefore = 0;\n renderedTotalAfter = 0;\n } else {\n renderedFirstItemIndex = this.firstItemIndex;\n renderedLastItemIndex = this.lastItemIndex;\n renderedTotalBefore = this.totalBefore;\n renderedTotalAfter = this.totalAfter;\n }\n\n // If there are less items available than rendered, we drop the last rendered item index\n renderedLastItemIndex = Math.min(renderedLastItemIndex, totalItems - 1);\n\n // Add components to be recycled to the pool\n while (orderedComponents.length > 0 && orderedComponents[0].index < renderedFirstItemIndex) {\n _componentPool.push(orderedComponents.shift());\n }\n while (orderedComponents.length > 0 && orderedComponents[orderedComponents.length - 1].index > renderedLastItemIndex) {\n _componentPool.unshift(orderedComponents.pop());\n }\n if (_didReset) {\n if (shouldRecycle === true) {\n for (let i = 0; i < orderedComponents.length; i++) {\n // If the underlying array has changed, the indexes could be the same but\n // the content may have changed, so recycle the remaining components\n const component = orderedComponents[i];\n component.recycle(objectAt(items, component.index), component.index);\n }\n } else {\n while (orderedComponents.length > 0) {\n // If recycling is disabled we need to delete all components and clear the array\n _componentPool.push(orderedComponents.shift());\n }\n }\n }\n let firstIndexInList = orderedComponents.length > 0 ? orderedComponents[0].index : renderedFirstItemIndex;\n let lastIndexInList = orderedComponents.length > 0 ? orderedComponents[orderedComponents.length - 1].index : renderedFirstItemIndex - 1;\n\n // Append as many items as needed to the rendered components\n while (lastIndexInList < renderedLastItemIndex) {\n let component;\n if (shouldRecycle === true) {\n component = _componentPool.pop() || new VirtualComponent();\n } else {\n component = new VirtualComponent();\n }\n const itemIndex = ++lastIndexInList;\n component.recycle(objectAt(items, itemIndex), itemIndex);\n this._appendComponent(component);\n orderedComponents.push(component);\n }\n\n // Prepend as many items as needed to the rendered components\n while (firstIndexInList > renderedFirstItemIndex) {\n let component;\n if (shouldRecycle === true) {\n component = _componentPool.pop() || new VirtualComponent();\n } else {\n component = new VirtualComponent();\n }\n const itemIndex = --firstIndexInList;\n component.recycle(objectAt(items, itemIndex), itemIndex);\n this._prependComponent(component);\n orderedComponents.unshift(component);\n }\n\n // If there are any items remaining in the pool, remove them\n if (_componentPool.length > 0) {\n if (shouldRecycle === true) {\n // Grab the DOM of the remaining components and move it to temporary node disconnected from\n // the body if the item can be reused later otherwise delete the component to avoid virtual re-rendering of the\n // deleted item. If we end up using these components again, we'll grab their DOM and put it back\n for (let i = _componentPool.length - 1; i >= 0; i--) {\n const component = _componentPool[i];\n const item = objectAt(items, component.index);\n if (item) {\n insertRangeBefore(this._domPool, null, component.realUpperBound, component.realLowerBound);\n } else {\n // Insert the virtual component bound back to make sure Glimmer is\n // not confused about the state of the DOM.\n insertRangeBefore(this._itemContainer, null, component.realUpperBound, component.realLowerBound);\n run(() => {\n virtualComponents.removeObject(component);\n });\n _componentPool.splice(i, 1);\n }\n }\n } else {\n virtualComponents.removeObjects(_componentPool);\n _componentPool.length = 0;\n }\n }\n const totalItemsBefore = renderedFirstItemIndex;\n const totalItemsAfter = totalItems - renderedLastItemIndex - 1;\n const beforeItemsText = totalItemsBefore === 1 ? 'item' : 'items';\n const afterItemsText = totalItemsAfter === 1 ? 'item' : 'items';\n\n // Set padding element heights.\n _occludedContentBefore.style.height = `${Math.max(renderedTotalBefore, 0)}px`;\n _occludedContentBefore.innerHTML = totalItemsBefore > 0 ? `And ${totalItemsBefore} ${beforeItemsText} before` : '';\n _occludedContentAfter.style.height = `${Math.max(renderedTotalAfter, 0)}px`;\n _occludedContentAfter.innerHTML = totalItemsAfter > 0 ? `And ${totalItemsAfter} ${afterItemsText} after` : '';\n }\n _appendComponent(component) {\n const {\n virtualComponents,\n _occludedContentAfter,\n _appendComponentPool,\n shouldRecycle,\n _itemContainer\n } = this;\n const relativeNode = _occludedContentAfter.realUpperBound;\n if (component.rendered === true) {\n insertRangeBefore(_itemContainer, relativeNode, component.realUpperBound, component.realLowerBound);\n } else {\n virtualComponents.insertAt(virtualComponents.length - 1, component);\n component.rendered = true;\n\n // shouldRecycle=false breaks UI when scrolling the elements fast. \n // Reference https://github.com/html-next/vertical-collection/issues/296\n // Components that are both new and appended still need to be rendered at the end because Glimmer.\n // We have to move them _after_ they render, so we schedule that if they exist\n if (!shouldRecycle) {\n _appendComponentPool.unshift(component);\n if (this._nextLayout === null) {\n this._nextLayout = this.schedule('layout', () => {\n this._nextLayout = null;\n while (_appendComponentPool.length > 0) {\n const component = _appendComponentPool.pop();\n\n // Changes with each inserted component\n const relativeNode = _occludedContentAfter.realUpperBound;\n insertRangeBefore(this._itemContainer, relativeNode, component.realUpperBound, component.realLowerBound);\n }\n });\n }\n }\n }\n }\n _prependComponent(component) {\n const {\n virtualComponents,\n _occludedContentBefore,\n _prependComponentPool,\n _itemContainer\n } = this;\n const relativeNode = _occludedContentBefore.realLowerBound.nextSibling;\n if (component.rendered === true) {\n insertRangeBefore(_itemContainer, relativeNode, component.realUpperBound, component.realLowerBound);\n } else {\n virtualComponents.insertAt(virtualComponents.length - 1, component);\n component.rendered = true;\n\n // Components that are both new and prepended still need to be rendered at the end because Glimmer.\n // We have to move them _after_ they render, so we schedule that if they exist\n _prependComponentPool.unshift(component);\n if (this._nextLayout === null) {\n this._nextLayout = this.schedule('layout', () => {\n this._nextLayout = null;\n while (_prependComponentPool.length > 0) {\n const component = _prependComponentPool.pop();\n\n // Changes with each inserted component\n const relativeNode = _occludedContentBefore.realLowerBound.nextSibling;\n insertRangeBefore(_itemContainer, relativeNode, component.realUpperBound, component.realLowerBound);\n }\n });\n }\n }\n }\n _sendActions() {\n const {\n firstItemIndex,\n lastItemIndex,\n firstVisibleIndex,\n lastVisibleIndex,\n _prevFirstVisibleIndex,\n _prevLastVisibleIndex,\n totalItems,\n _firstReached,\n _lastReached,\n _didReset\n } = this;\n if (_didReset || firstVisibleIndex !== _prevFirstVisibleIndex) {\n this.sendAction('firstVisibleChanged', firstVisibleIndex);\n }\n if (_didReset || lastVisibleIndex !== _prevLastVisibleIndex) {\n this.sendAction('lastVisibleChanged', lastVisibleIndex);\n }\n if (_firstReached === false && firstItemIndex === 0) {\n this.sendAction('firstReached', firstItemIndex);\n this._firstReached = true;\n }\n if (_lastReached === false && lastItemIndex === totalItems - 1) {\n this.sendAction('lastReached', lastItemIndex);\n this._lastReached = true;\n }\n }\n prepend(numPrepended) {\n this._prevFirstItemIndex += numPrepended;\n this._prevLastItemIndex += numPrepended;\n this.orderedComponents.forEach(c => set(c, 'index', get(c, 'index') + numPrepended));\n this._firstReached = false;\n this._prependOffset = numPrepended * this._calculatedEstimateHeight;\n }\n append() {\n this._lastReached = false;\n }\n reset() {\n this._firstReached = false;\n this._lastReached = false;\n this._didReset = true;\n }\n pageUp() {\n if (this.renderAll) {\n return; // All items rendered, no need to page up\n }\n const {\n bufferSize,\n firstItemIndex,\n totalComponents\n } = this;\n if (firstItemIndex !== 0) {\n const newFirstItemIndex = Math.max(firstItemIndex - totalComponents + bufferSize, 0);\n const offset = this.getOffsetForIndex(newFirstItemIndex);\n this._scrollContainer.scrollTop = offset + this._collectionOffset;\n this.scheduleUpdate();\n }\n }\n pageDown() {\n if (this.renderAll) {\n return; // All items rendered, no need to page down\n }\n const {\n bufferSize,\n lastItemIndex,\n totalComponents,\n totalItems\n } = this;\n if (lastItemIndex !== totalItems - 1) {\n const newFirstItemIndex = Math.min(lastItemIndex + bufferSize + 1, totalItems - totalComponents);\n const offset = this.getOffsetForIndex(newFirstItemIndex);\n this._scrollContainer.scrollTop = offset + this._collectionOffset;\n this.scheduleUpdate();\n }\n }\n get totalComponents() {\n return Math.min(this.totalItems, this.lastItemIndex - this.firstItemIndex + 1);\n }\n\n /*\n * `prependOffset` exists because there are times when we need to do the following in this exact\n * order:\n *\n * 1. Prepend, which means we need to adjust the scroll position by `estimateHeight * numPrepended`\n * 2. Calculate the items that will be displayed after the prepend, and move VCs around as\n * necessary (`scheduleUpdate`).\n * 3. Actually add the amount prepended to `scrollContainer.scrollTop`\n *\n * This is due to some strange behavior in Chrome where it will modify `scrollTop` on it's own\n * when prepending item elements. We seem to avoid this behavior by doing these things in a RAF\n * in this exact order.\n */\n get visibleTop() {\n return Math.max(this._scrollTop - this._collectionOffset + this._prependOffset, 0);\n }\n get visibleMiddle() {\n return this.visibleTop + this._calculatedScrollContainerHeight / 2;\n }\n get visibleBottom() {\n // There is a case where the container of this vertical collection could have height 0 at\n // initial render step but will be updated later. We want to return visibleBottom to be 0 rather\n // than -1.\n return Math.max(this.visibleTop + this._calculatedScrollContainerHeight - 1, 0);\n }\n get totalItems() {\n return this.items ? get(this.items, 'length') : 0;\n }\n}","import { get } from '@ember/object';\nimport objectAt from './object-at';\nimport keyForItem from '../../ember-internals/key-for-item';\nexport function isPrepend(lenDiff, newItems, key, oldFirstKey, oldLastKey) {\n const newItemsLength = get(newItems, 'length');\n if (lenDiff <= 0 || lenDiff >= newItemsLength || newItemsLength === 0) {\n return false;\n }\n const newFirstKey = keyForItem(objectAt(newItems, lenDiff), key, lenDiff);\n const newLastKey = keyForItem(objectAt(newItems, newItemsLength - 1), key, newItemsLength - 1);\n return oldFirstKey === newFirstKey && oldLastKey === newLastKey;\n}\nexport function isAppend(lenDiff, newItems, key, oldFirstKey, oldLastKey) {\n const newItemsLength = get(newItems, 'length');\n if (lenDiff <= 0 || lenDiff >= newItemsLength || newItemsLength === 0) {\n return false;\n }\n const newFirstKey = keyForItem(objectAt(newItems, 0), key, 0);\n const newLastKey = keyForItem(objectAt(newItems, newItemsLength - lenDiff - 1), key, newItemsLength - lenDiff - 1);\n return oldFirstKey === newFirstKey && oldLastKey === newLastKey;\n}","import { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport roundTo from './utils/round-to';\n\n/*\n * `SkipList` is a data structure designed with two main uses in mind:\n *\n * - Given a target value, find the index i in the list such that\n * `sum(list[0]..list[i]) <= value < sum(list[0]..list[i + 1])`\n *\n * - Given the index i (the fulcrum point) from above, get `sum(list[0]..list[i])`\n * and `sum(list[i + 1]..list[-1])`\n *\n * The idea is that given a list of arbitrary heights or widths in pixels, we want to find\n * the index of the item such that when all of the items before it are added together, it will\n * be as close to the target (scrollTop of our container) as possible.\n *\n * This data structure acts somewhat like a Binary Search Tree. Given a list of size n, the\n * retreival time for the index is O(log n) and the update time should any values change is\n * O(log n). The space complexity is O(n log n) in bytes (using Float32Arrays helps a lot\n * here), and the initialization time is O(n log n).\n *\n * It works by constructing layer arrays, each of which is setup such that\n * `layer[i] = prevLayer[i * 2] + prevLayer[(i * 2) + 1]`. This allows us to traverse the layers\n * downward using a binary search to arrive at the index we want. We also add the values up as we\n * traverse to get the total value before and after the final index.\n */\n\nfunction fill(array, value, start = 0, end = array.length) {\n if (typeof array.fill === 'function') {\n array.fill(value, start, end);\n } else {\n for (; start < end; start++) {\n array[start] = value;\n }\n return array;\n }\n}\nfunction subarray(array, start, end) {\n if (typeof array.subarray === 'function') {\n return array.subarray(start, end);\n } else {\n return array.slice(start, end);\n }\n}\nexport default class SkipList {\n constructor(length, defaultValue) {\n const values = new Float32Array(new ArrayBuffer(length * 4));\n fill(values, defaultValue);\n this.length = length;\n this.defaultValue = defaultValue;\n this._initializeLayers(values, defaultValue);\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n _initializeLayers(values, defaultValue) {\n const layers = [values];\n let i, length, layer, prevLayer, left, right;\n prevLayer = layer = values;\n length = values.length;\n while (length > 2) {\n length = Math.ceil(length / 2);\n layer = new Float32Array(new ArrayBuffer(length * 4));\n if (defaultValue !== undefined) {\n // If given a default value we assume that we can fill each\n // layer of the skip list with the previous layer's value * 2.\n // This allows us to use the `fill` method on Typed arrays, which\n // an order of magnitude faster than manually calculating each value.\n defaultValue = defaultValue * 2;\n fill(layer, defaultValue);\n left = prevLayer[(length - 1) * 2] || 0;\n right = prevLayer[(length - 1) * 2 + 1] || 0;\n\n // Layers are not powers of 2, and sometimes they may by odd sizes.\n // Only the last value of a layer will be different, so we calculate\n // its value manually.\n layer[length - 1] = left + right;\n } else {\n for (i = 0; i < length; i++) {\n left = prevLayer[i * 2];\n right = prevLayer[i * 2 + 1];\n layer[i] = right ? left + right : left;\n }\n }\n layers.unshift(layer);\n prevLayer = layer;\n }\n this.total = layer.length > 0 ? layer.length > 1 ? layer[0] + layer[1] : layer[0] : 0;\n assert('total must be a number', typeof this.total === 'number');\n this.layers = layers;\n this.values = values;\n }\n find(targetValue) {\n const {\n layers,\n total,\n length,\n values\n } = this;\n const numLayers = layers.length;\n if (length === 0) {\n return {\n index: 0,\n totalBefore: 0,\n totalAfter: 0\n };\n }\n let i, layer, left, leftIndex, rightIndex;\n let index = 0;\n let totalBefore = 0;\n let totalAfter = 0;\n targetValue = Math.min(total - 1, targetValue);\n assert('targetValue must be a number', typeof targetValue === 'number');\n assert('targetValue must be greater than or equal to 0', targetValue >= 0);\n assert('targetValue must be no more than total', targetValue < total);\n for (i = 0; i < numLayers; i++) {\n layer = layers[i];\n leftIndex = index;\n rightIndex = index + 1;\n left = layer[leftIndex];\n if (targetValue >= totalBefore + left) {\n totalBefore = totalBefore + left;\n index = rightIndex * 2;\n } else {\n index = leftIndex * 2;\n }\n }\n index = index / 2;\n assert('index must be a number', typeof index === 'number');\n assert('index must be within bounds', index >= 0 && index < this.values.length);\n totalAfter = total - (totalBefore + values[index]);\n return {\n index,\n totalBefore,\n totalAfter\n };\n }\n getOffset(targetIndex) {\n const {\n layers,\n length,\n values\n } = this;\n const numLayers = layers.length;\n if (length === 0) {\n return 0;\n }\n let index = 0;\n let offset = 0;\n for (let i = 0; i < numLayers - 1; i++) {\n const layer = layers[i];\n const leftIndex = index;\n const rightIndex = index + 1;\n if (targetIndex >= rightIndex * Math.pow(2, numLayers - i - 1)) {\n offset = offset + layer[leftIndex];\n index = rightIndex * 2;\n } else {\n index = leftIndex * 2;\n }\n }\n if (index + 1 === targetIndex) {\n offset += values[index];\n }\n return offset;\n }\n set(index, value) {\n assert('value must be a number', typeof value === 'number');\n assert('value must non-negative', value >= 0);\n assert('index must be a number', typeof index === 'number');\n assert('index must be within bounds', index >= 0 && index < this.values.length);\n const {\n layers\n } = this;\n const oldValue = layers[layers.length - 1][index];\n const delta = roundTo(value - oldValue);\n if (delta === 0) {\n return delta;\n }\n let i, layer;\n for (i = layers.length - 1; i >= 0; i--) {\n layer = layers[i];\n layer[index] += delta;\n index = Math.floor(index / 2);\n }\n this.total += delta;\n return delta;\n }\n prepend(numPrepended) {\n const {\n values: oldValues,\n length: oldLength,\n defaultValue\n } = this;\n const newLength = numPrepended + oldLength;\n const newValues = new Float32Array(new ArrayBuffer(newLength * 4));\n newValues.set(oldValues, numPrepended);\n fill(newValues, defaultValue, 0, numPrepended);\n this.length = newLength;\n this._initializeLayers(newValues);\n }\n append(numAppended) {\n const {\n values: oldValues,\n length: oldLength,\n defaultValue\n } = this;\n const newLength = numAppended + oldLength;\n const newValues = new Float32Array(new ArrayBuffer(newLength * 4));\n newValues.set(oldValues);\n fill(newValues, defaultValue, oldLength);\n this.length = newLength;\n this._initializeLayers(newValues);\n }\n reset(newLength) {\n const {\n values: oldValues,\n length: oldLength,\n defaultValue\n } = this;\n if (oldLength === newLength) {\n return;\n }\n const newValues = new Float32Array(new ArrayBuffer(newLength * 4));\n if (oldLength < newLength) {\n newValues.set(oldValues);\n fill(newValues, defaultValue, oldLength);\n } else {\n newValues.set(subarray(oldValues, 0, newLength));\n }\n this.length = newLength;\n if (oldLength === 0) {\n this._initializeLayers(newValues, defaultValue);\n } else {\n this._initializeLayers(newValues);\n }\n }\n}","import { DEBUG } from '@glimmer/env';\nimport Radar from './radar';\nimport SkipList from '../skip-list';\nimport roundTo from '../utils/round-to';\nimport getScaledClientRect from '../../utils/element/get-scaled-client-rect';\nexport default class DynamicRadar extends Radar {\n constructor(parentToken, options) {\n super(parentToken, options);\n this._firstItemIndex = 0;\n this._lastItemIndex = 0;\n this._totalBefore = 0;\n this._totalAfter = 0;\n this._minHeight = Infinity;\n this._nextIncrementalRender = null;\n this.skipList = null;\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n destroy() {\n super.destroy();\n this.skipList = null;\n }\n scheduleUpdate(didUpdateItems, promiseResolve) {\n // Cancel incremental render check, since we'll be remeasuring anyways\n if (this._nextIncrementalRender !== null) {\n this._nextIncrementalRender.cancel();\n this._nextIncrementalRender = null;\n }\n super.scheduleUpdate(didUpdateItems, promiseResolve);\n }\n afterUpdate() {\n // Schedule a check to see if we should rerender\n if (this._nextIncrementalRender === null && this._nextUpdate === null) {\n this._nextIncrementalRender = this.schedule('sync', () => {\n this._nextIncrementalRender = null;\n if (this._shouldScheduleRerender()) {\n this.update();\n }\n });\n }\n super.afterUpdate();\n }\n _updateConstants() {\n super._updateConstants();\n if (this._calculatedEstimateHeight < this._minHeight) {\n this._minHeight = this._calculatedEstimateHeight;\n }\n\n // Create the SkipList only after the estimateHeight has been calculated the first time\n if (this.skipList === null) {\n this.skipList = new SkipList(this.totalItems, this._calculatedEstimateHeight);\n } else {\n this.skipList.defaultValue = this._calculatedEstimateHeight;\n }\n }\n _updateIndexes() {\n const {\n bufferSize,\n skipList,\n visibleTop,\n visibleBottom,\n totalItems,\n _didReset\n } = this;\n if (totalItems === 0) {\n this._firstItemIndex = 0;\n this._lastItemIndex = -1;\n this._totalBefore = 0;\n this._totalAfter = 0;\n return;\n }\n\n // Don't measure if the radar has just been instantiated or reset, as we are rendering with a\n // completely new set of items and won't get an accurate measurement until after they render the\n // first time.\n if (_didReset === false) {\n this._measure();\n }\n const {\n values\n } = skipList;\n let {\n totalBefore,\n index: firstVisibleIndex\n } = this.skipList.find(visibleTop);\n let {\n totalAfter,\n index: lastVisibleIndex\n } = this.skipList.find(visibleBottom);\n const maxIndex = totalItems - 1;\n let firstItemIndex = firstVisibleIndex;\n let lastItemIndex = lastVisibleIndex;\n\n // Add buffers\n for (let i = bufferSize; i > 0 && firstItemIndex > 0; i--) {\n firstItemIndex--;\n totalBefore -= values[firstItemIndex];\n }\n for (let i = bufferSize; i > 0 && lastItemIndex < maxIndex; i--) {\n lastItemIndex++;\n totalAfter -= values[lastItemIndex];\n }\n this._firstItemIndex = firstItemIndex;\n this._lastItemIndex = lastItemIndex;\n this._totalBefore = totalBefore;\n this._totalAfter = totalAfter;\n }\n _calculateScrollDiff() {\n const {\n firstItemIndex,\n _prevFirstVisibleIndex,\n _prevFirstItemIndex\n } = this;\n let beforeVisibleDiff = 0;\n if (firstItemIndex < _prevFirstItemIndex) {\n // Measurement only items that could affect scrollTop. This will necesarilly be the\n // minimum of the either the total number of items that are rendered up to the first\n // visible item, OR the number of items that changed before the first visible item\n // (the delta). We want to measure the delta of exactly this number of items, because\n // items that are after the first visible item should not affect the scroll position,\n // and neither should items already rendered before the first visible item.\n const measureLimit = Math.min(Math.abs(firstItemIndex - _prevFirstItemIndex), _prevFirstVisibleIndex - firstItemIndex);\n beforeVisibleDiff = Math.round(this._measure(measureLimit));\n }\n return beforeVisibleDiff + super._calculateScrollDiff();\n }\n _shouldScheduleRerender() {\n const {\n firstItemIndex,\n lastItemIndex\n } = this;\n this._updateConstants();\n this._measure();\n\n // These indexes could change after the measurement, and in the incremental render\n // case we want to check them _after_ the change.\n const {\n firstVisibleIndex,\n lastVisibleIndex\n } = this;\n return firstVisibleIndex < firstItemIndex || lastVisibleIndex > lastItemIndex;\n }\n _measure(measureLimit = null) {\n const {\n orderedComponents,\n skipList,\n _occludedContentBefore,\n _transformScale\n } = this;\n const numToMeasure = measureLimit !== null ? Math.min(measureLimit, orderedComponents.length) : orderedComponents.length;\n let totalDelta = 0;\n for (let i = 0; i < numToMeasure; i++) {\n const currentItem = orderedComponents[i];\n const previousItem = orderedComponents[i - 1];\n const itemIndex = currentItem.index;\n const {\n top: currentItemTop,\n height: currentItemHeight\n } = getScaledClientRect(currentItem, _transformScale);\n let margin;\n if (previousItem !== undefined) {\n margin = currentItemTop - getScaledClientRect(previousItem, _transformScale).bottom;\n } else {\n margin = currentItemTop - getScaledClientRect(_occludedContentBefore, _transformScale).bottom;\n }\n const newHeight = roundTo(currentItemHeight + margin);\n const itemDelta = skipList.set(itemIndex, newHeight);\n if (newHeight < this._minHeight) {\n this._minHeight = newHeight;\n }\n if (itemDelta !== 0) {\n totalDelta += itemDelta;\n }\n }\n return totalDelta;\n }\n _didEarthquake(scrollDiff) {\n return scrollDiff > this._minHeight / 2;\n }\n get total() {\n return this.skipList.total;\n }\n get totalBefore() {\n return this._totalBefore;\n }\n get totalAfter() {\n return this._totalAfter;\n }\n get firstItemIndex() {\n return this._firstItemIndex;\n }\n get lastItemIndex() {\n return this._lastItemIndex;\n }\n get firstVisibleIndex() {\n const {\n visibleTop\n } = this;\n const {\n index\n } = this.skipList.find(visibleTop);\n return index;\n }\n get lastVisibleIndex() {\n const {\n visibleBottom,\n totalItems\n } = this;\n const {\n index\n } = this.skipList.find(visibleBottom);\n return Math.min(index, totalItems - 1);\n }\n prepend(numPrepended) {\n super.prepend(numPrepended);\n this.skipList.prepend(numPrepended);\n }\n append(numAppended) {\n super.append(numAppended);\n this.skipList.append(numAppended);\n }\n reset() {\n super.reset();\n this.skipList.reset(this.totalItems);\n }\n\n /*\n * Public API to query the skiplist for the offset of an item\n */\n getOffsetForIndex(index) {\n this._measure();\n return this.skipList.getOffset(index);\n }\n}","import { DEBUG } from '@glimmer/env';\nimport Radar from './radar';\nexport default class StaticRadar extends Radar {\n constructor(parentToken, options) {\n super(parentToken, options);\n this._firstItemIndex = 0;\n this._lastItemIndex = 0;\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n _updateIndexes() {\n const {\n bufferSize,\n totalItems,\n visibleMiddle,\n _calculatedEstimateHeight,\n _calculatedScrollContainerHeight\n } = this;\n if (totalItems === 0) {\n this._firstItemIndex = 0;\n this._lastItemIndex = -1;\n return;\n }\n const maxIndex = totalItems - 1;\n const middleItemIndex = Math.floor(visibleMiddle / _calculatedEstimateHeight);\n const shouldRenderCount = Math.min(Math.ceil(_calculatedScrollContainerHeight / _calculatedEstimateHeight), totalItems);\n let firstItemIndex = middleItemIndex - Math.floor(shouldRenderCount / 2);\n let lastItemIndex = middleItemIndex + Math.ceil(shouldRenderCount / 2) - 1;\n if (firstItemIndex < 0) {\n firstItemIndex = 0;\n lastItemIndex = shouldRenderCount - 1;\n }\n if (lastItemIndex > maxIndex) {\n lastItemIndex = maxIndex;\n firstItemIndex = maxIndex - (shouldRenderCount - 1);\n }\n firstItemIndex = Math.max(firstItemIndex - bufferSize, 0);\n lastItemIndex = Math.min(lastItemIndex + bufferSize, maxIndex);\n this._firstItemIndex = firstItemIndex;\n this._lastItemIndex = lastItemIndex;\n }\n _didEarthquake(scrollDiff) {\n return scrollDiff > this._calculatedEstimateHeight / 2;\n }\n get total() {\n return this.totalItems * this._calculatedEstimateHeight;\n }\n get totalBefore() {\n return this.firstItemIndex * this._calculatedEstimateHeight;\n }\n get totalAfter() {\n return this.total - (this.lastItemIndex + 1) * this._calculatedEstimateHeight;\n }\n get firstItemIndex() {\n return this._firstItemIndex;\n }\n get lastItemIndex() {\n return this._lastItemIndex;\n }\n get firstVisibleIndex() {\n return Math.ceil(this.visibleTop / this._calculatedEstimateHeight);\n }\n get lastVisibleIndex() {\n return Math.min(Math.ceil(this.visibleBottom / this._calculatedEstimateHeight), this.totalItems) - 1;\n }\n\n /*\n * Public API to query for the offset of an item\n */\n getOffsetForIndex(index) {\n return index * this._calculatedEstimateHeight + 1;\n }\n}","import { DEBUG } from '@glimmer/env';\nimport { assert } from '@ember/debug';\nimport { empty, readOnly } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, computed } from '@ember/object';\nimport { run } from '@ember/runloop';\nimport layout from './template';\nimport { ViewportContainer } from '../../-private';\nimport { scheduler, Token } from 'ember-raf-scheduler';\nimport { keyForItem, DynamicRadar, StaticRadar, objectAt } from '../../-private';\n\n/*\n * BEGIN DEBUG HELPERS\n *\n * These methods and the Visualization class are used by DEBUG code paths.\n */\nfunction isNonZero(value) {\n let int = parseInt(value, 10);\n let float = parseFloat(value);\n return !isNaN(int) && (int !== 0 || float !== 0);\n}\nfunction hasStyleValue(styles, key, value) {\n return styles[key] === value;\n}\nfunction hasStyleWithNonZeroValue(styles, key) {\n return isNonZero(styles[key]);\n}\nfunction styleIsOneOf(styles, key, values) {\n return styles[key] && values.indexOf(styles[key]) !== -1;\n}\nfunction applyVerticalStyles(element, geography) {\n element.style.height = `${geography.height}px`;\n element.style.top = `${geography.top}px`;\n}\nclass Visualization {\n constructor(radar) {\n this.radar = radar;\n this.satellites = [];\n this.cache = [];\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'vertical-collection-visual-debugger';\n this.container = document.createElement('div');\n this.container.className = 'vc_visualization-container';\n this.wrapper.appendChild(this.container);\n this.itemContainer = document.createElement('div');\n this.itemContainer.className = 'vc_visualization-item-container';\n this.container.appendChild(this.itemContainer);\n this.scrollContainer = document.createElement('div');\n this.scrollContainer.className = 'vc_visualization-scroll-container';\n this.container.appendChild(this.scrollContainer);\n this.screen = document.createElement('div');\n this.screen.className = 'vc_visualization-screen';\n this.container.appendChild(this.screen);\n document.body.appendChild(this.wrapper);\n }\n render() {\n this.styleViewport();\n this.updateSatellites();\n }\n styleViewport() {\n const {\n _scrollContainer\n } = this.radar;\n this.container.style.height = `${_scrollContainer.getBoundingClientRect().height}px`;\n applyVerticalStyles(this.scrollContainer, _scrollContainer.getBoundingClientRect());\n applyVerticalStyles(this.screen, ViewportContainer.getBoundingClientRect());\n }\n makeSatellite() {\n let satellite;\n if (this.cache.length) {\n satellite = this.cache.pop();\n } else {\n satellite = document.createElement('div');\n satellite.className = 'vc_visualization-virtual-component';\n }\n this.satellites.push(satellite);\n this.itemContainer.append(satellite);\n }\n updateSatellites() {\n const {\n satellites: sats\n } = this;\n let {\n firstItemIndex,\n lastItemIndex,\n totalItems,\n totalBefore,\n totalAfter,\n skipList,\n _calculatedEstimateHeight\n } = this.radar;\n const isDynamic = !!skipList;\n const itemHeights = isDynamic && skipList.values;\n const firstVisualizedIndex = Math.max(firstItemIndex - 10, 0);\n const lastVisualizedIndex = Math.min(lastItemIndex + 10, totalItems - 1);\n const lengthWithBuffer = lastVisualizedIndex - firstVisualizedIndex + 1;\n const isShrinking = sats.length > lengthWithBuffer;\n while (sats.length !== lengthWithBuffer) {\n if (isShrinking) {\n const satellite = sats.pop();\n satellite.parentNode.removeChild(satellite);\n this.cache.push(satellite);\n } else {\n this.makeSatellite();\n }\n }\n for (let itemIndex = firstVisualizedIndex, i = 0; itemIndex <= lastVisualizedIndex; itemIndex++, i++) {\n const element = sats[i];\n const itemHeight = isDynamic ? itemHeights[itemIndex] : _calculatedEstimateHeight;\n element.style.height = `${itemHeight}px`;\n element.setAttribute('index', String(itemIndex));\n element.innerText = String(itemIndex);\n if (itemIndex < firstItemIndex) {\n element.classList.add('culled');\n totalBefore -= itemHeight;\n } else if (itemIndex > lastItemIndex) {\n element.classList.add('culled');\n totalAfter -= itemHeight;\n } else {\n element.classList.remove('culled');\n }\n }\n this.itemContainer.style.paddingTop = `${totalBefore}px`;\n this.itemContainer.style.paddingBottom = `${totalAfter}px`;\n }\n destroy() {\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n this.radar = null;\n this.component = null;\n this.satellites.forEach(satellite => {\n if (satellite.parentNode) {\n satellite.parentNode.removeChild(satellite);\n }\n });\n this.satellites = null;\n this.cache = null;\n }\n}\n/*\n * END DEBUG HELPERS\n */\n\nconst VerticalCollection = Component.extend({\n layout,\n tagName: '',\n /**\n * Property name used for storing references to each item in items. Accessing this attribute for each item\n * should yield a unique result for every item in the list.\n *\n * @property key\n * @type String\n * @default '@identity'\n */\n key: '@identity',\n // –––––––––––––– Required Settings\n\n /**\n * Estimated height of an item to be rendered. Use best guess as this will be used to determine how many items\n * are displayed virtually, before and after the vertical-collection viewport.\n *\n * @property estimateHeight\n * @type Number\n * @required\n */\n estimateHeight: null,\n /**\n * List of objects to svelte-render.\n * Can be called like ``.\n *\n * @property items\n * @type Array\n * @required\n */\n items: null,\n // –––––––––––––– Optional Settings\n /**\n * Indicates if the occluded items' heights will change or not.\n * If true, the vertical-collection will assume that items' heights are always equal to estimateHeight;\n * this is more performant, but less flexible.\n *\n * @property staticHeight\n * @type Boolean\n */\n staticHeight: false,\n /**\n * Indicates whether or not list items in the Radar should be reused on update of virtual components (e.g. scroll).\n * This yields performance benefits because it is not necessary to repopulate the component pool of the radar.\n * Set to false when recycling a component instance has undesirable ramifications including:\n * - When using `unbound` in a component or sub-component\n * - When using init for instance state that differs between instances of a component or sub-component\n * (can move to didInitAttrs to fix this)\n * - When templates for individual items vary widely or are based on conditionals that are likely to change\n * (i.e. would defeat any benefits of DOM recycling anyway)\n *\n * @property shouldRecycle\n * @type Boolean\n */\n shouldRecycle: true,\n /*\n * A selector string that will select the element from\n * which to calculate the viewable height and needed offsets.\n *\n * This element will also have the `scroll` event handler added to it.\n *\n * Usually this element will be the component's immediate parent element,\n * if so, you can leave this null.\n *\n * Set this to \"body\" to scroll the entire web page.\n */\n containerSelector: '*',\n // –––––––––––––– Performance Tuning\n /**\n * The amount of extra items to keep visible on either side of the viewport -- must be greater than 0.\n * Increasing this value is useful when doing infinite scrolling and loading data from a remote service,\n * with the desire to allow records to show as the user scrolls and the backend API takes time to respond.\n *\n * @property bufferSize\n * @type Number\n * @default 1\n */\n bufferSize: 1,\n // –––––––––––––– Initial Scroll State\n /**\n * If set, upon initialization the scroll\n * position will be set such that the item\n * with the provided id is at the top left\n * on screen.\n *\n * If the item cannot be found, scrollTop\n * is set to 0.\n * @property idForFirstItem\n */\n idForFirstItem: null,\n /**\n * If set, if scrollPosition is empty\n * at initialization, the component will\n * render starting at the bottom.\n * @property renderFromLast\n * @type Boolean\n * @default false\n */\n renderFromLast: false,\n /**\n * If set to true, the collection will render all of the items passed into the component.\n * This counteracts the performance benefits of using vertical collection, but has several potential applications,\n * including but not limited to:\n *\n * - It allows for improved accessibility since all elements are rendered and can be picked up by a screen reader.\n * - Can be applied in SEO solutions (i.e. fastboot) where rendering every item is desirable.\n * - Can be used to respond to the keyboard input for Find (i.e. ctrl+F/cmd+F) to show all elements, which then\n * allows the list items to be searchable\n *\n * @property renderAll\n * @type Boolean\n * @default false\n */\n renderAll: false,\n /**\n * The tag name used in DOM elements before and after the rendered list. By default, it is set to\n * 'occluded-content' to avoid any confusion with user's CSS settings. However, it could be\n * overriden to provide custom behavior (for example, in table user wants to set it to 'tr' to\n * comply with table semantics).\n */\n occlusionTagName: 'occluded-content',\n isEmpty: empty('items'),\n shouldYieldToInverse: readOnly('isEmpty'),\n virtualComponents: computed('items.[]', 'renderAll', 'estimateHeight', 'bufferSize', function () {\n const {\n _radar\n } = this;\n const items = this.items;\n _radar.items = items === null || items === undefined ? [] : items;\n _radar.estimateHeight = this.estimateHeight;\n _radar.renderAll = this.renderAll;\n _radar.bufferSize = this.bufferSize;\n _radar.scheduleUpdate(true);\n this._clearScheduledActions();\n return _radar.virtualComponents;\n }),\n schedule(queueName, job) {\n return scheduler.schedule(queueName, job, this.token);\n },\n _clearScheduledActions() {\n clearTimeout(this._nextSendActions);\n this._nextSendActions = null;\n this._scheduledActions.length = 0;\n },\n _scheduleSendAction(action, index) {\n this._scheduledActions.push([action, index]);\n if (this._nextSendActions === null) {\n this._nextSendActions = setTimeout(() => {\n this._nextSendActions = null;\n run(() => {\n const items = this.items;\n const keyPath = this.key;\n this._scheduledActions.forEach(([action, index]) => {\n const item = objectAt(items, index);\n const key = keyForItem(item, keyPath, index);\n\n // this.sendAction will be deprecated in ember 4.0\n const _action = get(this, action);\n if (typeof _action == 'function') {\n _action(item, index, key);\n } else if (typeof _action === 'string') {\n this.sendAction(action, item, index, key);\n }\n });\n this._scheduledActions.length = 0;\n });\n });\n }\n },\n /* Public API Methods\n @index => number\n This will return offset height of the indexed item.\n */\n scrollToItem(index) {\n const {\n _radar\n } = this;\n // Getting the offset height from Radar\n let scrollTop = _radar.getOffsetForIndex(index);\n _radar._scrollContainer.scrollTop = scrollTop;\n // To scroll exactly to specified index, we are changing the prevIndex values to specified index\n _radar._prevFirstVisibleIndex = _radar._prevFirstItemIndex = index;\n // Components will be rendered after schedule 'measure' inside 'update' method.\n // In our case, we need to focus the element after component is rendered. So passing the promise.\n return new Promise(resolve => {\n _radar.scheduleUpdate(false, resolve);\n });\n },\n // –––––––––––––– Setup/Teardown\n didInsertElement() {\n this.schedule('sync', () => {\n this._radar.start();\n });\n },\n willDestroy() {\n this.token.cancel();\n this._radar.destroy();\n let registerAPI = this.registerAPI;\n if (registerAPI) {\n registerAPI(null);\n }\n clearTimeout(this._nextSendActions);\n if (DEBUG) {\n if (this.__visualization) {\n console.info('destroying visualization'); // eslint-disable-line no-console\n this.__visualization.destroy();\n this.__visualization = null;\n }\n }\n },\n init() {\n this._super();\n this.token = new Token();\n const RadarClass = this.staticHeight ? StaticRadar : DynamicRadar;\n const items = this.items || [];\n const {\n bufferSize,\n containerSelector,\n estimateHeight,\n initialRenderCount,\n renderAll,\n renderFromLast,\n shouldRecycle,\n occlusionTagName,\n idForFirstItem,\n key\n } = this;\n const startingIndex = calculateStartingIndex(items, idForFirstItem, key, renderFromLast);\n this._radar = new RadarClass(this.token, {\n bufferSize,\n containerSelector,\n estimateHeight,\n initialRenderCount,\n items,\n key,\n renderAll,\n renderFromLast,\n shouldRecycle,\n startingIndex,\n occlusionTagName\n });\n this._prevItemsLength = 0;\n this._prevFirstKey = null;\n this._prevLastKey = null;\n this._hasAction = null;\n this._scheduledActions = [];\n this._nextSendActions = null;\n let a = !!this.lastReached;\n let b = !!this.firstReached;\n let c = !!this.lastVisibleChanged;\n let d = !!this.firstVisibleChanged;\n let any = a || b || c || d;\n if (any) {\n this._hasAction = {\n lastReached: a,\n firstReached: b,\n lastVisibleChanged: c,\n firstVisibleChanged: d\n };\n this._radar.sendAction = (action, index) => {\n if (this._hasAction[action]) {\n this._scheduleSendAction(action, index);\n }\n };\n }\n\n /* Public methods to Expose to parent\n \n Usage:\n Template:\n \n Component:\n \n export default Component.extend({\n actions: {\n registerAPI(api) {\n this.set('collectionAPI', api);\n }\n },\n scrollToItem() {\n let collectionAPI = this.collectionAPI;\n collectionAPI.scrollToItem(index);\n }\n });\n \n Need to pass this property in the vertical-collection template\n Listen in the component actions and do your custom logic\n This API will have below methods.\n 1. scrollToItem\n */\n\n let registerAPI = get(this, 'registerAPI');\n if (registerAPI) {\n /* List of methods to be exposed to public should be added here */\n let publicAPI = {\n scrollToItem: this.scrollToItem.bind(this)\n };\n registerAPI(publicAPI);\n }\n if (DEBUG) {\n this.__visualization = null;\n this._radar._debugDidUpdate = () => {\n // Update visualization\n //\n // This debugging mode can be controlled via the argument\n // `@debugVis={{true}}` at component invocation.\n //\n if (this.debugVis !== true) {\n if (this.__visualization !== null) {\n console.info('tearing down existing visualization'); // eslint-disable-line no-console\n this.__visualization.destroy();\n this.__visualization = null;\n }\n return;\n }\n if (this.__visualization === null) {\n this.__visualization = new Visualization(this._radar);\n }\n this.__visualization.render();\n\n // Detect issues with CSS\n //\n // This debugging mode can be controlled via the argument\n // `@debugCSS={{true}}` at component invocation.\n //\n if (this.debugCSS !== true) {\n return;\n }\n let radar = this._radar;\n let styles;\n\n // check telescope\n if (radar.scrollContainer !== ViewportContainer) {\n styles = window.getComputedStyle(radar.scrollContainer);\n } else {\n styles = window.getComputedStyle(document.body);\n }\n assert(`scrollContainer cannot be inline.`, styleIsOneOf(styles, 'display', ['block', 'inline-block', 'flex', 'inline-flex']));\n assert(`scrollContainer must define position`, styleIsOneOf(styles, 'position', ['static', 'relative', 'absolute']));\n assert(`scrollContainer must define height or max-height`, hasStyleWithNonZeroValue(styles, 'height') || hasStyleWithNonZeroValue(styles, 'max-height'));\n\n // conditional perf check for non-body scrolling\n if (radar.scrollContainer !== ViewportContainer) {\n assert(`scrollContainer must define overflow-y`, hasStyleValue(styles, 'overflow-y', 'scroll') || hasStyleValue(styles, 'overflow', 'scroll'));\n }\n\n // check itemContainer\n styles = window.getComputedStyle(radar.itemContainer);\n assert(`itemContainer cannot be inline.`, styleIsOneOf(styles, 'display', ['block', 'inline-block', 'flex', 'inline-flex']));\n assert(`itemContainer must define position`, styleIsOneOf(styles, 'position', ['static', 'relative', 'absolute']));\n\n // check item defaults\n assert(`You must supply at least one item to the collection to debug it's CSS.`, this.items.length);\n let element = radar._itemContainer.firstElementChild;\n styles = window.getComputedStyle(element);\n assert(`Item cannot be inline.`, styleIsOneOf(styles, 'display', ['block', 'inline-block', 'flex', 'inline-flex']));\n assert(`Item must define position`, styleIsOneOf(styles, 'position', ['static', 'relative', 'absolute']));\n };\n }\n }\n});\nfunction calculateStartingIndex(items, idForFirstItem, key, renderFromLast) {\n const totalItems = get(items, 'length');\n let startingIndex = 0;\n if (idForFirstItem !== undefined && idForFirstItem !== null) {\n for (let i = 0; i < totalItems; i++) {\n if (keyForItem(objectAt(items, i), key, i) === idForFirstItem) {\n startingIndex = i;\n break;\n }\n }\n } else if (renderFromLast === true) {\n // If no id was set and `renderFromLast` is true, start from the bottom\n startingIndex = totalItems - 1;\n }\n return startingIndex;\n}\nexport default VerticalCollection;","/* eslint-disable max-lines */\n\nimport { subscribe } from '@ember/instrumentation';\nimport { _backburner, run, scheduleOnce } from '@ember/runloop';\nimport { getOwnConfig, isTesting, macroCondition } from '@embroider/macros';\nimport * as Sentry from '@sentry/browser';\nimport { GLOBAL_OBJ, browserPerformanceTimeOrigin, timestampInSeconds } from '@sentry/utils';\nimport { getActiveSpan, startInactiveSpan } from '..';\nfunction getSentryConfig() {\n const _global = GLOBAL_OBJ;\n _global.__sentryEmberConfig = _global.__sentryEmberConfig ?? {};\n const environmentConfig = getOwnConfig().sentryConfig;\n if (!environmentConfig.sentry) {\n environmentConfig.sentry = {\n browserTracingOptions: {}\n };\n }\n Object.assign(environmentConfig.sentry, _global.__sentryEmberConfig);\n return environmentConfig;\n}\nexport function initialize(appInstance) {\n // Disable in fastboot - we only want to run Sentry client-side\n const fastboot = appInstance.lookup('service:fastboot');\n if (fastboot?.isFastBoot) {\n return;\n }\n const config = getSentryConfig();\n if (config['disablePerformance']) {\n return;\n }\n const performancePromise = instrumentForPerformance(appInstance);\n if (macroCondition(isTesting())) {\n window._sentryPerformanceLoad = performancePromise;\n }\n}\nfunction getBackburner() {\n if (_backburner) {\n return _backburner;\n }\n if (run.backburner) {\n return run.backburner;\n }\n return {\n on() {\n // noop\n },\n off() {\n // noop\n }\n };\n}\nfunction getTransitionInformation(transition, router) {\n const fromRoute = transition?.from?.name;\n const toRoute = transition?.to?.name || router.currentRouteName;\n return {\n fromRoute,\n toRoute\n };\n}\nfunction getLocationURL(location) {\n if (!location || !location.getURL || !location.formatURL) {\n return '';\n }\n const url = location.formatURL(location.getURL());\n if (location.implementation === 'hash') {\n return `${location.rootURL}${url}`;\n }\n return url;\n}\nexport function _instrumentEmberRouter(routerService, routerMain, config, startTransaction, startTransactionOnPageLoad) {\n const {\n disableRunloopPerformance\n } = config;\n const location = routerMain.location;\n let activeTransaction;\n let transitionSpan;\n const url = getLocationURL(location);\n if (macroCondition(isTesting())) {\n routerService._sentryInstrumented = true;\n routerService._startTransaction = startTransaction;\n }\n if (startTransactionOnPageLoad && url) {\n const routeInfo = routerService.recognize(url);\n activeTransaction = startTransaction({\n name: `route:${routeInfo.name}`,\n op: 'pageload',\n origin: 'auto.pageload.ember',\n tags: {\n url,\n toRoute: routeInfo.name,\n 'routing.instrumentation': '@sentry/ember'\n }\n });\n }\n const finishActiveTransaction = (_, nextInstance) => {\n if (nextInstance) {\n return;\n }\n activeTransaction?.end();\n getBackburner().off('end', finishActiveTransaction);\n };\n routerService.on('routeWillChange', transition => {\n const {\n fromRoute,\n toRoute\n } = getTransitionInformation(transition, routerService);\n activeTransaction?.end();\n activeTransaction = startTransaction({\n name: `route:${toRoute}`,\n op: 'navigation',\n origin: 'auto.navigation.ember',\n tags: {\n fromRoute,\n toRoute,\n 'routing.instrumentation': '@sentry/ember'\n }\n });\n transitionSpan = startInactiveSpan({\n op: 'ui.ember.transition',\n name: `route:${fromRoute} -> route:${toRoute}`,\n origin: 'auto.ui.ember'\n });\n });\n routerService.on('routeDidChange', () => {\n if (!transitionSpan || !activeTransaction) {\n return;\n }\n transitionSpan.end();\n if (disableRunloopPerformance) {\n activeTransaction.end();\n return;\n }\n getBackburner().on('end', finishActiveTransaction);\n });\n return {\n startTransaction\n };\n}\nfunction _instrumentEmberRunloop(config) {\n const {\n disableRunloopPerformance,\n minimumRunloopQueueDuration\n } = config;\n if (disableRunloopPerformance) {\n return;\n }\n let currentQueueStart;\n let currentQueueSpan;\n const instrumentedEmberQueues = ['actions', 'routerTransitions', 'render', 'afterRender', 'destroy'];\n getBackburner().on('begin', (_, previousInstance) => {\n if (previousInstance) {\n return;\n }\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n if (currentQueueSpan) {\n currentQueueSpan.end();\n }\n currentQueueStart = timestampInSeconds();\n const processQueue = queue => {\n // Process this queue using the end of the previous queue.\n if (currentQueueStart) {\n const now = timestampInSeconds();\n const minQueueDuration = minimumRunloopQueueDuration ?? 5;\n if ((now - currentQueueStart) * 1000 >= minQueueDuration) {\n startInactiveSpan({\n name: 'runloop',\n op: `ui.ember.runloop.${queue}`,\n origin: 'auto.ui.ember',\n startTimestamp: currentQueueStart\n })?.end(now);\n }\n currentQueueStart = undefined;\n }\n\n // Setup for next queue\n\n const stillActiveSpan = getActiveSpan();\n if (!stillActiveSpan) {\n return;\n }\n currentQueueStart = timestampInSeconds();\n };\n instrumentedEmberQueues.forEach(queue => {\n scheduleOnce(queue, null, processQueue, queue);\n });\n });\n getBackburner().on('end', (_, nextInstance) => {\n if (nextInstance) {\n return;\n }\n if (currentQueueSpan) {\n currentQueueSpan.end();\n currentQueueSpan = undefined;\n }\n });\n}\nfunction processComponentRenderBefore(payload, beforeEntries) {\n const info = {\n payload,\n now: timestampInSeconds()\n };\n beforeEntries[payload.object] = info;\n}\nfunction processComponentRenderAfter(payload, beforeEntries, op, minComponentDuration) {\n const begin = beforeEntries[payload.object];\n if (!begin) {\n return;\n }\n const now = timestampInSeconds();\n const componentRenderDuration = now - begin.now;\n if (componentRenderDuration * 1000 >= minComponentDuration) {\n startInactiveSpan({\n name: payload.containerKey || payload.object,\n op,\n origin: 'auto.ui.ember',\n startTimestamp: begin.now\n })?.end(now);\n }\n}\nfunction _instrumentComponents(config) {\n const {\n disableInstrumentComponents,\n minimumComponentRenderDuration,\n enableComponentDefinitions\n } = config;\n if (disableInstrumentComponents) {\n return;\n }\n const minComponentDuration = minimumComponentRenderDuration ?? 2;\n const beforeEntries = {};\n const beforeComponentDefinitionEntries = {};\n function _subscribeToRenderEvents() {\n subscribe('render.component', {\n before(_name, _timestamp, payload) {\n processComponentRenderBefore(payload, beforeEntries);\n },\n after(_name, _timestamp, payload, _beganIndex) {\n processComponentRenderAfter(payload, beforeEntries, 'ui.ember.component.render', minComponentDuration);\n }\n });\n if (enableComponentDefinitions) {\n subscribe('render.getComponentDefinition', {\n before(_name, _timestamp, payload) {\n processComponentRenderBefore(payload, beforeComponentDefinitionEntries);\n },\n after(_name, _timestamp, payload, _beganIndex) {\n processComponentRenderAfter(payload, beforeComponentDefinitionEntries, 'ui.ember.component.definition', 0);\n }\n });\n }\n }\n _subscribeToRenderEvents();\n}\nfunction _instrumentInitialLoad(config) {\n const startName = '@sentry/ember:initial-load-start';\n const endName = '@sentry/ember:initial-load-end';\n const {\n HAS_PERFORMANCE,\n HAS_PERFORMANCE_TIMING\n } = _hasPerformanceSupport();\n if (!HAS_PERFORMANCE) {\n return;\n }\n const {\n performance\n } = window;\n if (config.disableInitialLoadInstrumentation) {\n performance.clearMarks(startName);\n performance.clearMarks(endName);\n return;\n }\n\n // Split performance check in two so clearMarks still happens even if timeOrigin isn't available.\n if (!HAS_PERFORMANCE_TIMING || browserPerformanceTimeOrigin === undefined) {\n return;\n }\n const measureName = '@sentry/ember:initial-load';\n const startMarkExists = performance.getEntriesByName(startName).length > 0;\n const endMarkExists = performance.getEntriesByName(endName).length > 0;\n if (!startMarkExists || !endMarkExists) {\n return;\n }\n performance.measure(measureName, startName, endName);\n const measures = performance.getEntriesByName(measureName);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const measure = measures[0];\n const startTimestamp = (measure.startTime + browserPerformanceTimeOrigin) / 1000;\n const endTimestamp = startTimestamp + measure.duration / 1000;\n startInactiveSpan({\n op: 'ui.ember.init',\n name: 'init',\n origin: 'auto.ui.ember',\n startTimestamp\n })?.end(endTimestamp);\n performance.clearMarks(startName);\n performance.clearMarks(endName);\n performance.clearMeasures(measureName);\n}\nfunction _hasPerformanceSupport() {\n // TS says that all of these methods are always available, but some of them may not be supported in older browsers\n // So we \"pretend\" they are all optional in order to be able to check this properly without TS complaining\n const _performance = window.performance;\n const HAS_PERFORMANCE = Boolean(_performance && _performance.clearMarks && _performance.clearMeasures);\n const HAS_PERFORMANCE_TIMING = Boolean(_performance.measure && _performance.getEntriesByName && browserPerformanceTimeOrigin !== undefined);\n return {\n HAS_PERFORMANCE,\n HAS_PERFORMANCE_TIMING\n };\n}\nexport async function instrumentForPerformance(appInstance) {\n const config = getSentryConfig();\n // Maintaining backwards compatibility with config.browserTracingOptions, but passing it with Sentry options is preferred.\n const browserTracingOptions = config.browserTracingOptions || config.sentry.browserTracingOptions || {};\n const {\n BrowserTracing\n } = await import('@sentry/browser');\n const idleTimeout = config.transitionTimeout || 5000;\n const browserTracing = new BrowserTracing({\n routingInstrumentation: (customStartTransaction, startTransactionOnPageLoad) => {\n // eslint-disable-next-line ember/no-private-routing-service\n const routerMain = appInstance.lookup('router:main');\n let routerService = appInstance.lookup('service:router');\n if (routerService.externalRouter) {\n // Using ember-engines-router-service in an engine.\n routerService = routerService.externalRouter;\n }\n if (routerService._hasMountedSentryPerformanceRouting) {\n // Routing listens to route changes on the main router, and should not be initialized multiple times per page.\n return;\n }\n if (!routerService.recognize) {\n // Router is missing critical functionality to limit cardinality of the transaction names.\n return;\n }\n routerService._hasMountedSentryPerformanceRouting = true;\n _instrumentEmberRouter(routerService, routerMain, config, customStartTransaction, startTransactionOnPageLoad);\n },\n idleTimeout,\n ...browserTracingOptions\n });\n if (macroCondition(isTesting())) {\n const client = Sentry.getCurrentHub().getClient();\n if (client && client.getIntegrationById && client.getIntegrationById('BrowserTracing')) {\n // Initializers are called more than once in tests, causing the integrations to not be setup correctly.\n return;\n }\n }\n const client = Sentry.getCurrentHub().getClient();\n if (client && client.addIntegration) {\n client.addIntegration(browserTracing);\n }\n _instrumentEmberRunloop(config);\n _instrumentComponents(config);\n _instrumentInitialLoad(config);\n}\nexport default {\n initialize\n};","import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n // This should be logged to the console\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return undefined;\n }\n\n const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() as string;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents: ReadonlyArray = ['protocol', 'publicKey', 'host', 'projectId'];\n const hasMissingRequiredComponent = requiredComponents.find(component => {\n if (!dsn[component]) {\n logger.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n\n if (hasMissingRequiredComponent) {\n return false;\n }\n\n if (!projectId.match(/^\\d+$/)) {\n logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n\n if (!isValidProtocol(protocol)) {\n logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n","import type {\n Attachment,\n AttachmentItem,\n BaseEnvelopeHeaders,\n BaseEnvelopeItemHeaders,\n DataCategory,\n DsnComponents,\n Envelope,\n EnvelopeItemType,\n Event,\n EventEnvelopeHeaders,\n SdkInfo,\n SdkMetadata,\n TextEncoderInternal,\n} from '@sentry/types';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope(headers: E[0], items: E[1] = []): E {\n return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope(envelope: E, newItem: E[1][number]): E {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem(\n envelope: Envelope,\n callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n const envelopeItems = envelope[1];\n\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8.\n */\nfunction encodeUTF8(input: string, textEncoder?: TextEncoderInternal): Uint8Array {\n const utf8 = textEncoder || new TextEncoder();\n return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope, textEncoder?: TextEncoderInternal): string | Uint8Array {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n function append(next: string | Uint8Array): void {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n }\n }\n\n for (const item of items) {\n const [itemHeaders, payload] = item;\n\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n if (typeof payload === 'string' || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload: string;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n // performance impact but in this case a performance hit is better than throwing.\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\nexport interface TextDecoderInternal {\n decode(input?: Uint8Array): string;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(\n env: string | Uint8Array,\n textEncoder: TextEncoderInternal,\n textDecoder: TextDecoderInternal,\n): Envelope {\n let buffer = typeof env === 'string' ? textEncoder.encode(env) : env;\n\n function readBinary(length: number): Uint8Array {\n const bin = buffer.subarray(0, length);\n // Replace the buffer with the remaining data excluding trailing newline\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n\n function readJson(): T {\n let i = buffer.indexOf(0xa);\n // If we couldn't find a newline, we must have found the end of the buffer\n if (i < 0) {\n i = buffer.length;\n }\n\n return JSON.parse(textDecoder.decode(readBinary(i))) as T;\n }\n\n const envelopeHeader = readJson();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items: [any, any][] = [];\n\n while (buffer.length) {\n const itemHeader = readJson();\n const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n\n return [envelopeHeader, items];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(\n attachment: Attachment,\n textEncoder?: TextEncoderInternal,\n): AttachmentItem {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n profile: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n // TODO: This is a temporary workaround until we have a proper data category for metrics\n statsd: 'unknown',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n if (!metadataOrEvent || !metadataOrEvent.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n event: Event,\n sdkInfo: SdkInfo | undefined,\n tunnel: string | undefined,\n dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n return {\n event_id: event.event_id as string,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n }),\n };\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n /** Display name of this error instance. */\n public name: string;\n\n public logLevel: ConsoleLevel;\n\n public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n super(message);\n\n this.name = new.target.prototype.constructor.name;\n // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n // instances of `SentryError` fail `obj instanceof SentryError` checks.\n Object.setPrototypeOf(this, new.target.prototype);\n this.logLevel = logLevel;\n }\n}\n","import type { ClientOptions, DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n return urlEncode({\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION,\n ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(\n dsn: DsnComponents,\n // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n // options: ClientOptions = {} as ClientOptions,\n tunnelOrOptions: string | ClientOptions = {} as ClientOptions,\n): string {\n // TODO (v8): Use this code instead\n // const { tunnel, _metadata = {} } = options;\n // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n const sdkInfo =\n typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n dsnLike: DsnLike,\n dialogOptions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n user?: { name?: string; email?: string };\n },\n): string {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n","/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n ClientOptions,\n DataCategory,\n DsnComponents,\n DynamicSamplingContext,\n Envelope,\n ErrorEvent,\n Event,\n EventDropReason,\n EventHint,\n EventProcessor,\n FeedbackEvent,\n Integration,\n IntegrationClass,\n MetricBucketItem,\n MetricsAggregator,\n Outcome,\n ParameterizedString,\n PropagationContext,\n SdkMetadata,\n Session,\n SessionAggregates,\n Severity,\n SeverityLevel,\n Transaction,\n TransactionEvent,\n Transport,\n TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n SentryError,\n SyncPromise,\n addItemToEnvelope,\n checkOrSetAlreadyCaught,\n createAttachmentEnvelopeItem,\n isParameterizedString,\n isPlainObject,\n isPrimitive,\n isThenable,\n logger,\n makeDsn,\n rejectedSyncPromise,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport { getClient } from './exports';\nimport { getIsolationScope } from './hub';\nimport type { IntegrationIndex } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport { createMetricEnvelope } from './metrics/envelope';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nexport abstract class BaseClient implements Client {\n /**\n * A reference to a metrics aggregator\n *\n * @experimental Note this is alpha API. It may experience breaking changes in the future.\n */\n public metricsAggregator?: MetricsAggregator;\n\n /** Options passed to the SDK. */\n protected readonly _options: O;\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n protected readonly _dsn?: DsnComponents;\n\n protected readonly _transport?: Transport;\n\n /** Array of set up integrations. */\n protected _integrations: IntegrationIndex;\n\n /** Indicates whether this client's integrations have been set up. */\n protected _integrationsInitialized: boolean;\n\n /** Number of calls being processed */\n protected _numProcessing: number;\n\n protected _eventProcessors: EventProcessor[];\n\n /** Holds flushable */\n private _outcomes: { [key: string]: number };\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _hooks: Record;\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n protected constructor(options: O) {\n this._options = options;\n this._integrations = {};\n this._integrationsInitialized = false;\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n this._transport = options.transport({\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId: string | undefined = hint && hint.event_id;\n\n this._process(\n this.eventFromException(exception, hint)\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level?: Severity | SeverityLevel,\n hint?: EventHint,\n scope?: Scope,\n ): string | undefined {\n let eventId: string | undefined = hint && hint.event_id;\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hint)\n : this.eventFromException(message, hint);\n\n this._process(\n promisedEvent\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId: string | undefined = hint && hint.event_id;\n\n this._process(\n this._captureEvent(event, hint, scope).then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(session: Session): void {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n public getDsn(): DsnComponents | undefined {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n public getOptions(): O {\n return this._options;\n }\n\n /**\n * @see SdkMetadata in @sentry/types\n *\n * @return The metadata of the SDK\n */\n public getSdkMetadata(): SdkMetadata | undefined {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n public getTransport(): Transport | undefined {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n public flush(timeout?: number): PromiseLike {\n const transport = this._transport;\n if (transport) {\n if (this.metricsAggregator) {\n this.metricsAggregator.flush();\n }\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n public close(timeout?: number): PromiseLike {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n if (this.metricsAggregator) {\n this.metricsAggregator.close();\n }\n return result;\n });\n }\n\n /** Get all installed event processors. */\n public getEventProcessors(): EventProcessor[] {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n public addEventProcessor(eventProcessor: EventProcessor): void {\n this._eventProcessors.push(eventProcessor);\n }\n\n /**\n * Sets up the integrations\n */\n public setupIntegrations(forceInitialize?: boolean): void {\n if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n this._integrations = setupIntegrations(this, this._options.integrations);\n this._integrationsInitialized = true;\n }\n }\n\n /**\n * Gets an installed integration by its `id`.\n *\n * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n */\n public getIntegrationById(integrationId: string): Integration | undefined {\n return this._integrations[integrationId];\n }\n\n /**\n * @inheritDoc\n */\n public getIntegration(integration: IntegrationClass): T | null {\n try {\n return (this._integrations[integration.id] as T) || null;\n } catch (_oO) {\n DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n public addIntegration(integration: Integration): void {\n setupIntegration(this, integration, this._integrations);\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event, hint: EventHint = {}): void {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(\n env,\n createAttachmentEnvelopeItem(\n attachment,\n this._options.transportOptions && this._options.transportOptions.textEncoder,\n ),\n );\n }\n\n const promise = this._sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session | SessionAggregates): void {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n // Note: we use `event` in replay, where we overwrite this hook.\n\n if (this._options.sendClientReports) {\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Adding outcome: \"${key}\"`);\n\n // The following works because undefined + 1 === NaN and NaN is falsy\n this._outcomes[key] = this._outcomes[key] + 1 || 1;\n }\n }\n\n /**\n * @inheritDoc\n */\n public captureAggregateMetrics(metricBucketItems: Array): void {\n DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n const metricsEnvelope = createMetricEnvelope(\n metricBucketItems,\n this._dsn,\n this._options._metadata,\n this._options.tunnel,\n );\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(metricsEnvelope);\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n public on(hook: 'startTransaction', callback: (transaction: Transaction) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'finishTransaction', callback: (transaction: Transaction) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(\n hook: 'afterSendEvent',\n callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,\n ): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'otelSpanEnd', callback: (otelSpan: unknown, mutableOptions: { drop: boolean }) => void): void;\n\n /** @inheritdoc */\n public on(\n hook: 'beforeSendFeedback',\n callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n ): void;\n\n /** @inheritdoc */\n public on(hook: string, callback: unknown): void {\n if (!this._hooks[hook]) {\n this._hooks[hook] = [];\n }\n\n // @ts-expect-error We assue the types are correct\n this._hooks[hook].push(callback);\n }\n\n /** @inheritdoc */\n public emit(hook: 'startTransaction', transaction: Transaction): void;\n\n /** @inheritdoc */\n public emit(hook: 'finishTransaction', transaction: Transaction): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n /** @inheritdoc */\n public emit(hook: 'otelSpanEnd', otelSpan: unknown, mutableOptions: { drop: boolean }): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n /** @inheritdoc */\n public emit(hook: string, ...rest: unknown[]): void {\n if (this._hooks[hook]) {\n this._hooks[hook].forEach(callback => callback(...rest));\n }\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Updates existing session based on the provided event */\n protected _updateSessionFromEvent(session: Session, event: Event): void {\n let crashed = false;\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n protected _isClientDoneProcessing(timeout?: number): PromiseLike {\n return new SyncPromise(resolve => {\n let ticked: number = 0;\n const tick: number = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n protected _isEnabled(): boolean {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n scope?: Scope,\n isolationScope = getIsolationScope(),\n ): PromiseLike {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n return prepareEvent(options, event, hint, scope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n // If a trace context is not set on the event, we use the propagationContext set on the event to\n // generate a trace context. If the propagationContext does not have a dynamic sampling context, we\n // also generate one for it.\n const { propagationContext } = evt.sdkProcessingMetadata || {};\n const trace = evt.contexts && evt.contexts.trace;\n if (!trace && propagationContext) {\n const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext as PropagationContext;\n evt.contexts = {\n trace: {\n trace_id,\n span_id: spanId,\n parent_span_id: parentSpanId,\n },\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n }\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n const sentryError = reason as SentryError;\n if (sentryError.logLevel === 'log') {\n logger.log(sentryError.message);\n } else {\n logger.warn(sentryError);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n protected _processEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n return this._prepareEvent(event, hint, scope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = scope && scope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n protected _process(promise: PromiseLike): void {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * @inheritdoc\n */\n protected _sendEnvelope(envelope: Envelope): PromiseLike | void {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending event:', reason);\n });\n } else {\n DEBUG_BUILD && logger.error('Transport disabled');\n }\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n protected _clearOutcomes(): Outcome[] {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.keys(outcomes).map(key => {\n const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n return {\n reason,\n category,\n quantity: outcomes[key],\n };\n });\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike;\n\n /**\n * @inheritDoc\n */\n public abstract eventFromMessage(\n _message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n _level?: Severity | SeverityLevel,\n _hint?: EventHint,\n ): PromiseLike;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult: PromiseLike | Event | null,\n beforeSendLabel: string,\n): PromiseLike | Event | null {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n): PromiseLike | Event | null {\n const { beforeSend, beforeSendTransaction } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event) && beforeSendTransaction) {\n return beforeSendTransaction(event, hint);\n }\n\n return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n return event.type === 'transaction';\n}\n\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n const client = getClient();\n\n if (!client || !client.addEventProcessor) {\n return;\n }\n\n client.addEventProcessor(callback);\n}\n","import type { DsnComponents, MetricBucketItem, SdkMetadata, StatsdEnvelope, StatsdItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils';\n\n/**\n * Create envelope from a metric aggregate.\n */\nexport function createMetricEnvelope(\n metricBucketItems: Array,\n dsn?: DsnComponents,\n metadata?: SdkMetadata,\n tunnel?: string,\n): StatsdEnvelope {\n const headers: StatsdEnvelope[0] = {\n sent_at: new Date().toISOString(),\n };\n\n if (metadata && metadata.sdk) {\n headers.sdk = {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n };\n }\n\n if (!!tunnel && dsn) {\n headers.dsn = dsnToString(dsn);\n }\n\n const item = createMetricEnvelopeItem(metricBucketItems);\n return createEnvelope(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems: MetricBucketItem[]): StatsdItem {\n const payload = serializeMetricBuckets(metricBucketItems);\n const metricHeaders: StatsdItem[0] = {\n type: 'statsd',\n length: payload.length,\n };\n return [metricHeaders, payload];\n}\n","import type { MeasurementUnit, MetricBucketItem, Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { NAME_AND_TAG_KEY_NORMALIZATION_REGEX, TAG_VALUE_NORMALIZATION_REGEX } from './constants';\nimport type { MetricType } from './types';\n\n/**\n * Generate bucket key from metric properties.\n */\nexport function getBucketKey(\n metricType: MetricType,\n name: string,\n unit: MeasurementUnit,\n tags: Record,\n): string {\n const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nexport function simpleHash(s: string): number {\n let rv = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n rv = (rv << 5) - rv + c;\n rv &= rv;\n }\n return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nexport function serializeMetricBuckets(metricBucketItems: MetricBucketItem[]): string {\n let out = '';\n for (const item of metricBucketItems) {\n const tagEntries = Object.entries(item.tags);\n const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n }\n return out;\n}\n\n/**\n * Sanitizes tags.\n */\nexport function sanitizeTags(unsanitizedTags: Record): Record {\n const tags: Record = {};\n for (const key in unsanitizedTags) {\n if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n const sanitizedKey = key.replace(NAME_AND_TAG_KEY_NORMALIZATION_REGEX, '_');\n tags[sanitizedKey] = String(unsanitizedTags[key]).replace(TAG_VALUE_NORMALIZATION_REGEX, '_');\n }\n }\n return tags;\n}\n","import type { Scope } from '@sentry/core';\nimport { BaseClient, SDK_VERSION } from '@sentry/core';\nimport type {\n BrowserClientProfilingOptions,\n BrowserClientReplayOptions,\n ClientOptions,\n Event,\n EventHint,\n Options,\n ParameterizedString,\n Severity,\n SeverityLevel,\n UserFeedback,\n} from '@sentry/types';\nimport { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\nimport { createUserFeedbackEnvelope } from './userfeedback';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\nexport type BrowserOptions = Options &\n BrowserClientReplayOptions &\n BrowserClientProfilingOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions &\n BrowserClientReplayOptions &\n BrowserClientProfilingOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n public constructor(options: BrowserClientOptions) {\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.browser',\n packages: [\n {\n name: `${sdkSource}:@sentry/browser`,\n version: SDK_VERSION,\n },\n ],\n version: SDK_VERSION,\n };\n\n super(options);\n\n if (options.sendClientReports && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint?: EventHint): PromiseLike {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n ): PromiseLike {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n */\n public captureUserFeedback(feedback: UserFeedback): void {\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n return;\n }\n\n const envelope = createUserFeedbackEnvelope(feedback, {\n metadata: this.getSdkMetadata(),\n dsn: this.getDsn(),\n tunnel: this.getOptions().tunnel,\n });\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n\n /**\n * Sends client reports as an envelope.\n */\n private _flushOutcomes(): void {\n const outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n DEBUG_BUILD && logger.log('No outcomes to send');\n return;\n }\n\n // This is really the only place where we want to check for a DSN and only send outcomes then\n if (!this._dsn) {\n DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(envelope);\n }\n}\n","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n return __SENTRY_SDK_SOURCE__;\n}\n","import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n feedback: UserFeedback,\n {\n metadata,\n tunnel,\n dsn,\n }: {\n metadata: SdkMetadata | undefined;\n tunnel: string | undefined;\n dsn: DsnComponents | undefined;\n },\n): EventEnvelope {\n const headers: EventEnvelope[0] = {\n event_id: feedback.event_id,\n sent_at: new Date().toISOString(),\n ...(metadata &&\n metadata.sdk && {\n sdk: {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n },\n }),\n ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n };\n const item = createUserFeedbackEnvelopeItem(feedback);\n\n return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n const feedbackHeaders: UserFeedbackItem[0] = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n","import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n discarded_events: ClientReport['discarded_events'],\n dsn?: string,\n timestamp?: number,\n): ClientReportEnvelope {\n const clientReportItem: ClientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nconst chrome: StackLineParserFn = line => {\n const parts = chromeRegex.exec(line);\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chrome];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line);\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line);\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line);\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line);\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n","import type { TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, category: string): number {\n return limits[category] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, category: string, now: number = Date.now()): boolean {\n return disabledUntil(limits, category) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n limits: RateLimits,\n { statusCode, headers }: TransportMakeRequestResponse,\n now: number = Date.now(),\n): RateLimits {\n const updatedRateLimits: RateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n *
    ,
    ,..\n * where each
    is of the form\n * : : : \n * where\n * is a delay in seconds\n * is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * ;;...\n * is what's being limited (org, project, or key) - ignored by SDK\n * is an arbitrary string like \"org_quota\" - ignored by SDK\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories] = limit.split(':', 2);\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n","import type {\n Envelope,\n EnvelopeItem,\n EnvelopeItemType,\n Event,\n EventDropReason,\n EventItem,\n InternalBaseTransportOptions,\n Transport,\n TransportMakeRequestResponse,\n TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n SentryError,\n createEnvelope,\n envelopeItemTypeToDataCategory,\n forEachEnvelopeItem,\n isRateLimited,\n logger,\n makePromiseBuffer,\n resolvedSyncPromise,\n serializeEnvelope,\n updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n options: InternalBaseTransportOptions,\n makeRequest: TransportRequestExecutor,\n buffer: PromiseBuffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n): Transport {\n let rateLimits: RateLimits = {};\n const flush = (timeout?: number): PromiseLike => buffer.drain(timeout);\n\n function send(envelope: Envelope): PromiseLike {\n const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const envelopeItemDataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, envelopeItemDataCategory)) {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason: EventDropReason): void => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = (): PromiseLike =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise();\n } else {\n throw error;\n }\n },\n );\n }\n\n // We use this to identifify if the transport is the base transport\n // TODO (v8): Remove this again as we'll no longer need it\n send.__sentry__baseTransport__ = true;\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n","import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer {\n // exposes the internal array so tests can assert on the state of it.\n // XXX: this really should not be public api.\n $: Array>;\n add(taskProducer: () => PromiseLike): PromiseLike;\n drain(timeout?: number): PromiseLike;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer(limit?: number): PromiseBuffer {\n const buffer: Array> = [];\n\n function isReady(): boolean {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike\n * @returns Removed promise.\n */\n function remove(task: PromiseLike): PromiseLike {\n return buffer.splice(buffer.indexOf(task), 1)[0];\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike; In previous versions this used to be `task:\n * PromiseLike`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer: () => PromiseLike): PromiseLike {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout?: number): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n","import { isNativeFetch, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\nlet cachedFetchImpl: FetchImpl | undefined = undefined;\n\nexport type FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nexport function getNativeFetchImplementation(): FetchImpl {\n if (cachedFetchImpl) {\n return cachedFetchImpl;\n }\n\n /* eslint-disable @typescript-eslint/unbound-method */\n\n // Fast path to avoid DOM I/O\n if (isNativeFetch(WINDOW.fetch)) {\n return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n }\n\n const document = WINDOW.document;\n let fetchImpl = WINDOW.fetch;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow.fetch) {\n fetchImpl = contentWindow.fetch;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n DEBUG_BUILD && logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nexport function clearCachedFetchImplementation(): void {\n cachedFetchImpl = undefined;\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { rejectedSyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\nimport type { FetchImpl } from './utils';\nimport { clearCachedFetchImplementation, getNativeFetchImplementation } from './utils';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n options: BrowserTransportOptions,\n nativeFetch: FetchImpl = getNativeFetchImplementation(),\n): Transport {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request: TransportRequest): PromiseLike {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions: RequestInit = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'origin',\n headers: options.headers,\n // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n ...options.fetchOptions,\n };\n\n try {\n return nativeFetch(options.url, requestOptions).then(response => {\n pendingBodySize -= requestSize;\n pendingCount--;\n return {\n statusCode: response.status,\n headers: {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n },\n };\n });\n } catch (e) {\n clearCachedFetchImplementation();\n pendingBodySize -= requestSize;\n pendingCount--;\n return rejectedSyncPromise(e);\n }\n }\n\n return createTransport(options, makeRequest);\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nexport function makeXHRTransport(options: BrowserTransportOptions): Transport {\n function makeRequest(request: TransportRequest): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n\n xhr.onerror = reject;\n\n xhr.onreadystatechange = (): void => {\n if (xhr.readyState === XHR_READYSTATE_DONE) {\n resolve({\n statusCode: xhr.status,\n headers: {\n 'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': xhr.getResponseHeader('Retry-After'),\n },\n });\n }\n };\n\n xhr.open('POST', options.url);\n\n for (const header in options.headers) {\n if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n xhr.setRequestHeader(header, options.headers[header]);\n }\n }\n\n xhr.send(request.body);\n });\n }\n\n return createTransport(options, makeRequest);\n}\n","import type { Hub } from '@sentry/core';\nimport {\n Integrations as CoreIntegrations,\n captureSession,\n getClient,\n getCurrentHub,\n getIntegrationsToSetup,\n getReportDialogEndpoint,\n initAndBind,\n startSession,\n} from '@sentry/core';\nimport type { UserFeedback } from '@sentry/types';\nimport {\n addHistoryInstrumentationHandler,\n logger,\n stackParserFromStackParserOptions,\n supportsFetch,\n} from '@sentry/utils';\n\nimport type { BrowserClientOptions, BrowserOptions } from './client';\nimport { BrowserClient } from './client';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { ReportDialogOptions } from './helpers';\nimport { WINDOW, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, HttpContext, LinkedErrors, TryCatch } from './integrations';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport, makeXHRTransport } from './transports';\n\nexport const defaultIntegrations = [\n new CoreIntegrations.InboundFilters(),\n new CoreIntegrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new HttpContext(),\n];\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n if (typeof __SENTRY_RELEASE__ === 'string') {\n options.release = __SENTRY_RELEASE__;\n }\n\n // This supports the variable that sentry-webpack-plugin injects\n if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n options.release = WINDOW.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n const clientOptions: BrowserClientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n };\n\n initAndBind(BrowserClient, clientOptions);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\ntype NewReportDialogOptions = ReportDialogOptions & { eventId: string }; // eslint-disable-line\n\ninterface ShowReportDialogFunction {\n /**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\n (options: NewReportDialogOptions): void;\n\n /**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n *\n * @deprecated Please always pass an `options` argument with `eventId`. The `hub` argument will not be used in the next version of the SDK.\n */\n // eslint-disable-next-line deprecation/deprecation\n (options?: ReportDialogOptions, hub?: Hub): void;\n}\n\nexport const showReportDialog: ShowReportDialogFunction = (\n // eslint-disable-next-line deprecation/deprecation\n options: ReportDialogOptions = {},\n hub: Hub = getCurrentHub(),\n) => {\n // doesn't work without a document (React Native)\n if (!WINDOW.document) {\n DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n const { client, scope } = hub.getStackTop();\n const dsn = options.dsn || (client && client.getDsn());\n if (!dsn) {\n DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n return;\n }\n\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n // TODO(v8): Remove this entire if statement. `eventId` will be a required option.\n // eslint-disable-next-line deprecation/deprecation\n if (!options.eventId) {\n // eslint-disable-next-line deprecation/deprecation\n options.eventId = hub.lastEventId();\n }\n\n const script = WINDOW.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n const { onClose } = options;\n if (onClose) {\n const reportDialogClosedMessageHandler = (event: MessageEvent): void => {\n if (event.data === '__sentry_reportdialog_closed__') {\n try {\n onClose();\n } finally {\n WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n }\n }\n };\n WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n }\n\n const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n};\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSession({ ignoreDuration: true });\n captureSession();\n\n // We want to create a session for every navigation as well\n addHistoryInstrumentationHandler(({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from !== undefined && from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n }\n });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n const client = getClient();\n if (client) {\n client.captureUserFeedback(feedback);\n }\n}\n","import { assert, warn } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { getOwnConfig, isDevelopingApp, macroCondition } from '@embroider/macros';\nimport { startSpan } from '@sentry/browser';\nimport * as Sentry from '@sentry/browser';\nimport { SDK_VERSION } from '@sentry/browser';\nimport { GLOBAL_OBJ } from '@sentry/utils';\nimport Ember from 'ember';\nfunction _getSentryInitConfig() {\n const _global = GLOBAL_OBJ;\n _global.__sentryEmberConfig = _global.__sentryEmberConfig ?? {};\n return _global.__sentryEmberConfig;\n}\nexport function InitSentryForEmber(_runtimeConfig) {\n const environmentConfig = getOwnConfig().sentryConfig;\n assert('Missing configuration.', environmentConfig);\n assert('Missing configuration for Sentry.', environmentConfig.sentry || _runtimeConfig);\n if (!environmentConfig.sentry) {\n // If environment config is not specified but the above assertion passes, use runtime config.\n environmentConfig.sentry = {\n ..._runtimeConfig\n };\n }\n\n // Merge runtime config into environment config, preferring runtime.\n Object.assign(environmentConfig.sentry, _runtimeConfig || {});\n const initConfig = Object.assign({}, environmentConfig.sentry);\n initConfig._metadata = initConfig._metadata || {};\n initConfig._metadata.sdk = {\n name: 'sentry.javascript.ember',\n packages: [{\n name: 'npm:@sentry/ember',\n version: SDK_VERSION\n }],\n version: SDK_VERSION\n };\n\n // Persist Sentry init options so they are identical when performance initializers call init again.\n const sentryInitConfig = _getSentryInitConfig();\n Object.assign(sentryInitConfig, initConfig);\n Sentry.init(initConfig);\n if (macroCondition(isDevelopingApp())) {\n if (environmentConfig.ignoreEmberOnErrorWarning) {\n return;\n }\n next(null, function () {\n warn('Ember.onerror found. Using Ember.onerror can hide some errors (such as flushed runloop errors) from Sentry. Use Sentry.captureException to capture errors within Ember.onError or remove it to have errors caught by Sentry directly. This error can be silenced via addon configuration.', !Ember.onerror, {\n id: '@sentry/ember.ember-onerror-detected'\n });\n });\n }\n}\n\n/**\n * Grabs active transaction off scope.\n *\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\nexport const getActiveTransaction = () => {\n // eslint-disable-next-line deprecation/deprecation\n return Sentry.getCurrentHub().getScope().getTransaction();\n};\nexport const instrumentRoutePerformance = BaseRoute => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const instrumentFunction = async (op, description, fn, args) => {\n return startSpan({\n op,\n name: description,\n origin: 'auto.ui.ember'\n }, () => {\n return fn(...args);\n });\n };\n const routeName = BaseRoute.name;\n return {\n // @ts-expect-error TS2545 We do not need to redefine a constructor here\n [routeName]: class extends BaseRoute {\n beforeModel(...args) {\n return instrumentFunction('ui.ember.route.before_model', this.fullRouteName, super.beforeModel.bind(this), args);\n }\n async model(...args) {\n return instrumentFunction('ui.ember.route.model', this.fullRouteName, super.model.bind(this), args);\n }\n afterModel(...args) {\n return instrumentFunction('ui.ember.route.after_model', this.fullRouteName, super.afterModel.bind(this), args);\n }\n setupController(...args) {\n return instrumentFunction('ui.ember.route.setup_controller', this.fullRouteName, super.setupController.bind(this), args);\n }\n }\n }[routeName];\n};\nexport * from '@sentry/browser';\n\n// init is now the preferred way to call initialization for this addon.\nexport const init = InitSentryForEmber;","import type { Client, ClientOptions } from '@sentry/types';\nimport { consoleSandbox, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { getCurrentHub } from './hub';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind(\n clientClass: ClientClass,\n options: O,\n): void {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n const hub = getCurrentHub();\n const scope = hub.getScope();\n scope.update(options.initialScope);\n\n const client = new clientClass(options);\n hub.bindClient(client);\n}\n","/**\n * A simple Error type to represent an error that occured while loading a\n * resource.\n *\n * The hack to make stack and instanceof Error work is from\n * https://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript\n *\n * @class LoadError\n * @extends Error\n */\n\nlet captureErrorForStack;\nif (new Error().stack) {\n captureErrorForStack = () => new Error();\n} else {\n captureErrorForStack = () => {\n try { __undef__(); } catch (e) { return e; } // eslint-disable-line\n }\n}\n\n/**\n * Constructs a new LoadError with a supplied error message and an instance\n * of the AssetLoader service to use when retrying a load.\n *\n * @param {String} message\n * @param {AssetLoader} assetLoader\n */\nexport default function LoadError(message, assetLoader) {\n this.name = 'LoadError';\n this.message = message;\n this.loader = assetLoader;\n this.stack = captureErrorForStack().stack;\n}\nLoadError.prototype = new Error;\n\n/**\n * An abstract hook to define in a sub-class that specifies how to retry\n * loading the errored resource.\n */\nLoadError.prototype.retryLoad = function() {\n throw new Error(`You must define a behavior for 'retryLoad' in a subclass.`);\n}\n\n/**\n * Invokes a specified method on the AssetLoader service and caches the\n * result. Should be used in implementations of the retryLoad hook.\n *\n * @protected\n */\nLoadError.prototype._invokeAndCache = function(method, ...args) {\n return this._retry || (this._retry = this.loader[method](...args));\n}\n","import LoadError from './load';\nimport { RETRY_LOAD_SECRET } from '../services/asset-loader';\n\n/**\n * Represents an error that occurred while trying to load an asset.\n *\n * @class AssetLoadError\n * @extends LoadError\n */\nexport default class AssetLoadError extends LoadError {\n /**\n * Constructs a new AssetLoadError from the original error and the info of the\n * asset that was attempting to load.\n *\n * @param {AssetLoader} assetLoader\n * @param {Asset} asset\n * @param {Error} error\n */\n constructor(assetLoader, asset, error) {\n super(`The ${asset.type} asset with uri \"${asset.uri}\" failed to load with the error: ${error}.`, assetLoader);\n this.name = 'AssetLoadError';\n this.asset = asset;\n this.originalError = error;\n }\n\n retryLoad() {\n return this._invokeAndCache('loadAsset', this.asset, RETRY_LOAD_SECRET);\n }\n}\n","import LoadError from './load';\nimport { RETRY_LOAD_SECRET } from '../services/asset-loader';\n\n/**\n * Represents an error, or errors, that occurred while trying to load a bundle\n * of assets.\n *\n * @class BundleLoadError\n * @extends LoadError\n */\nexport default class BundleLoadError extends LoadError {\n /**\n * Constructs a new BundleLoadError from the original error, or errors, and\n * the name of the bundle that was attempting to load.\n *\n * @param {AssetLoader} assetLoader\n * @param {Asset} asset\n * @param {Error} error\n */\n constructor(assetLoader, bundleName, errors) {\n super(`The bundle \"${bundleName}\" failed to load.`, assetLoader);\n this.name = 'BundleLoadError';\n this.bundleName = bundleName;\n this.errors = errors;\n }\n\n retryLoad() {\n return this._invokeAndCache('loadBundle', this.bundleName, RETRY_LOAD_SECRET);\n }\n}","import RSVP from 'rsvp';\n\nconst isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Creates a DOM element with the specified onload and onerror handlers.\n *\n * @method createLoadElement\n * @param {String} tag\n * @param {Function} load\n * @param {Function} error\n * @return {HTMLElement} el\n */\nexport function createLoadElement(tag, load, error) {\n const el = document.createElement(tag);\n\n el.onload = load;\n el.onerror = error;\n\n return el;\n}\n\n/**\n * Creates a loader function that is compatible with Node environments (such as\n * FastBoot). If we're in the browser, we'll use the passed in loader function,\n * but when in Node, we'll just return a Promise that resolves (we assume assets\n * will be pre-loaded).\n *\n * @method nodeLoader\n * @param {Function} loader\n * @return {Function}\n */\nexport function nodeLoader(loader) {\n if (isBrowser) {\n return loader;\n } else {\n return () => RSVP.resolve();\n }\n}\n","import RSVP from 'rsvp';\nimport { createLoadElement, nodeLoader } from './utilities';\n\n/**\n * Default loader function for JS assets. Loads them by inserting a script tag\n * with onload/onerror handlers that correspond to the resolve/reject callbacks\n * of the return Promise.\n *\n * @param {String} uri\n * @return {Promise}\n */\nexport default nodeLoader(function js(uri) {\n return new RSVP.Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${uri}\"]`)) {\n return resolve();\n }\n\n const script = createLoadElement('script', resolve, function(error) {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n reject(error);\n });\n\n script.src = uri;\n script.async = false;\n\n document.head.appendChild(script);\n });\n});\n","import RSVP from 'rsvp';\nimport { createLoadElement, nodeLoader } from './utilities';\n\n/**\n * Default loader function for CSS assets. Loads them by inserting a link tag\n * with onload/onerror handlers that correspond to the resolve/reject callbacks\n * of the return Promise.\n *\n * In the event that a browser does not support onload/onerror handlers for link\n * elements, we fallback to polling the document.styleSheets property. In those\n * cases, the Promise will always resolve successfully.\n *\n * @param {String} uri\n * @return {Promise}\n */\nexport default nodeLoader(function css(uri) {\n return new RSVP.Promise((resolve, reject) => {\n if (document.querySelector(`link[href=\"${uri}\"]`)) {\n return resolve();\n }\n\n // Try using the default onload/onerror handlers...\n const link = createLoadElement('link', resolve, function(error) {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n reject(error);\n });\n\n link.rel = 'stylesheet';\n link.href = uri;\n\n document.head.appendChild(link);\n\n // In case the browser doesn't fire onload/onerror events, we poll the\n // the list of stylesheets to see when it loads...\n function checkSheetLoad() {\n const resolvedHref = link.href;\n const stylesheets = document.styleSheets;\n let i = stylesheets.length;\n\n while (i--) {\n const sheet = stylesheets[i];\n if (sheet.href === resolvedHref) {\n // Unfortunately we have no way of knowing if the load was\n // successful or not, so we always resolve.\n setTimeout(resolve);\n return;\n }\n }\n\n setTimeout(checkSheetLoad);\n }\n\n setTimeout(checkSheetLoad);\n });\n});\n","import RSVP from 'rsvp';\nimport Ember from 'ember';\nimport AssetLoadError from '../errors/asset-load';\nimport BundleLoadError from '../errors/bundle-load';\nimport JsLoader from '../loaders/js';\nimport CssLoader from '../loaders/css';\n\nexport function RETRY_LOAD_SECRET() { }\n\n/**\n * Merges two manifests' bundles together and returns a new manifest.\n *\n * @param {AssetManifest} input\n * @param {AssetManifest} manifest\n * @return {AssetManifest} output\n */\nfunction reduceManifestBundles(input, manifest) {\n // If manifest doesn't have any bundles, then no reducing to do\n if (!manifest.bundles) {\n return input;\n }\n\n // Merge the bundles together, checking for collisions\n return Object.keys(manifest.bundles).reduce((output, bundle) => {\n Ember.assert(`The bundle \"${bundle}\" already exists.`, !output.bundles[bundle]);\n output.bundles[bundle] = manifest.bundles[bundle];\n return output;\n }, input);\n}\n\n/**\n * A Service class to load additional assets into the Ember application.\n *\n * @class AssetLoader\n */\nexport default Ember.Service.extend({\n /**\n * Setup the caches for the service to use when loading assets.\n *\n * @override\n */\n init() {\n this._super(...arguments);\n\n this.__manifests = [];\n this._setupCache();\n this._initAssetLoaders();\n },\n\n /**\n * Adds a manifest to the service by merging its bundles with any previously\n * added manifests. Bundle collisions result in an error being thrown.\n *\n * @public\n * @method pushManifest\n * @param {AssetManifest} manifest\n * @return {Void}\n */\n pushManifest(manifest) {\n this.__manifests.push(manifest);\n this.__manifest = this.__manifests.reduce(reduceManifestBundles, { bundles: {} });\n },\n\n /**\n * Loads a bundle by fetching all of its assets and its dependencies.\n *\n * Returns a Promise that resolve when all assets have been loaded or rejects\n * when one of the assets fails to load. Subsequent calls will return the same\n * Promise.\n *\n * @public\n * @method loadBundle\n * @param {String} name\n * @param {Boolean} retryLoad Warning: only used internally to re-initiate loads, NOT public API\n * @return {Promise} bundlePromise\n */\n loadBundle(name, retryLoad) {\n const cachedPromise = this._getFromCache('bundle', name, retryLoad === RETRY_LOAD_SECRET);\n\n if (cachedPromise) {\n return cachedPromise;\n }\n\n const bundle = this._getBundle(name);\n\n const dependencies = bundle.dependencies || [];\n const dependencyPromises = dependencies.map((dependency) => this.loadBundle(dependency, retryLoad));\n\n const assets = bundle.assets || [];\n const assetPromises = assets.map((asset) => this.loadAsset(asset, retryLoad));\n\n const bundlePromise = RSVP.allSettled([ ...dependencyPromises, ...assetPromises ]);\n\n const bundleWithFail = bundlePromise.then((promises) => {\n const rejects = promises.filter((promise) => promise.state === 'rejected');\n const errors = rejects.map((reject) => reject.reason);\n\n if (errors.length) {\n // Evict rejected promise.\n this._getFromCache('bundle', name, true);\n throw new BundleLoadError(this, name, errors);\n }\n\n return name;\n });\n\n return this._setInCache('bundle', name, bundleWithFail);\n },\n\n /**\n * Loads a single asset into the application. Expects a given asset to specify\n * a URI and type.\n *\n * @public\n * @method loadAsset\n * @param {Object} asset\n * @param {String} asset.uri\n * @param {String} asset.type\n * @return {Promise} assetPromise\n */\n loadAsset({ uri, type }, retryLoad) {\n const cacheKey = `${type}:${uri}`;\n\n const cachedPromise = this._getFromCache('asset', cacheKey, retryLoad === RETRY_LOAD_SECRET);\n\n if (cachedPromise) {\n return cachedPromise;\n }\n\n const loader = this._getAssetLoader(type);\n const assetPromise = loader(uri);\n\n const assetWithFail = assetPromise.then(\n () => ({ uri, type }),\n (error) => {\n // Evict rejected promise.\n this._getFromCache('asset', cacheKey, true);\n throw new AssetLoadError(this, { uri, type }, error);\n }\n );\n\n return this._setInCache('asset', cacheKey, assetWithFail);\n },\n\n /**\n * Define a loader function for assets of a specified type. Any previously\n * defined loaders for that type will be overriden.\n *\n * @public\n * @param {String} type\n * @param {Funciton} loader\n * @return {Void}\n */\n defineLoader(type, loader) {\n this.__assetLoaders[type] = loader;\n },\n\n /**\n * Gets the current, reduced manifest.\n *\n * @private\n * @method getManifest\n * @return {AssetManifest} manifest\n */\n getManifest() {\n const manifest = this.__manifest;\n\n Ember.assert('No asset manifest found. Ensure you call pushManifest before attempting to use the AssetLoader.', manifest);\n\n return manifest;\n },\n\n /**\n * Sets up the cache used to store Promise values for asset/bundle requests.\n *\n * @private\n * @return {Void}\n */\n _setupCache() {\n this.__cache = {};\n this.__cache.asset = {};\n this.__cache.bundle = {};\n },\n\n /**\n * Gets a value from the cache according to the type and key it was stored\n * under. Optionally, evicts the cached value and returns undefined.\n *\n * @private\n * @param {String} type\n * @param {String} key\n * @param {Boolean} evict\n * @return {Any}\n */\n _getFromCache(type, key, evict) {\n if (evict) {\n this.__cache[type][key] = undefined;\n return;\n }\n\n return this.__cache[type][key];\n },\n\n /**\n * Sets a value in the cache under a type and key.\n *\n * @private\n * @param {String} type\n * @param {String} key\n * @param {Any} value\n * @return {Any}\n */\n _setInCache(type, key, value) {\n return (this.__cache[type][key] = value);\n },\n\n /**\n * Gets the info for a bundle from the reduced manifest.\n *\n * @private\n * @method _getBundle\n * @param {String} name\n * @return {Bundle} bundle\n */\n _getBundle(name) {\n const manifest = this.getManifest();\n\n const bundles = manifest.bundles;\n\n Ember.assert('Asset manifest does not list any available bundles.', Object.keys(bundles).length);\n\n const bundle = bundles[name];\n\n Ember.assert(`No bundle with name \"${name}\" exists in the asset manifest.`, bundle);\n\n return bundle;\n },\n\n /**\n * Gets the asset loader method for a specified type.\n *\n * @private\n * @method _getAssetLoader\n * @param {String} type\n * @return {Function} loader\n */\n _getAssetLoader(type) {\n const loader = this.__assetLoaders[type];\n\n Ember.assert(`No loader for assets of type \"${type}\" defined.`, loader);\n\n return loader;\n },\n\n /**\n * Initializes the __assetLoaders object and defines our default loaders.\n */\n _initAssetLoaders() {\n this.__assetLoaders = {};\n this.defineLoader('js', JsLoader);\n this.defineLoader('css', CssLoader);\n },\n\n /**\n * Defines loader methods for various types of assets. Each loader is stored\n * under a key corresponding to the type of asset it loads.\n *\n * @private\n * @property __assetLoaders\n * @type {Object}\n */\n __assetLoaders: undefined\n});\n","import Ember from 'ember';\n\nconst { libraries } = Ember;\n\nexport default function initializerFactory(name, version) {\n let registered = false;\n\n return function () {\n if (!registered && name && version) {\n libraries.register(name, version);\n registered = true;\n }\n };\n}\n","import initializerFactory from 'ember-cli-app-version/initializer-factory';\nimport config from '../config/environment';\n\nlet name, version;\nif (config.APP) {\n name = config.APP.name;\n version = config.APP.version;\n}\n\nexport default {\n name: 'App Version',\n initialize: initializerFactory(name, version),\n};\n","export default function titleize(string = '') {\n if (typeof string !== 'string') {\n throw new TypeError(`Expected a string, got a ${typeof string}`);\n }\n\n return string.toLowerCase().replace(/(?:^|\\s|-|\\/)\\S/g, function(m) {\n return m.toUpperCase();\n });\n}\n","export function isFactory(\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_factoryOrClass) {\n return !true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * Consume each positional and named argument to entangle it in autotracking and\n * enable updates.\n *\n * This is a temporary workaround for a change in the autotracking semantics of\n * the args proxy introduced in `v3.22`. What changed is that arguments are no\n * longer eagerly consumed. Didn’t use an argument? Then updates won’t be run\n * when its value changes. This workaround reproduces the previous behaviour to\n * avoid introducing a breaking change until a suitable transition path is made\n * available.\n */\nlet consumeArgs = noop;\nif (true) {\n consumeArgs = function ({\n positional,\n named\n }) {\n // SAFETY: TS before 4.6 does not correctly/fully resolve the type in a way\n // that allows the type checker to see that `positional` must *always* be\n // something which `extends unknown[]` here, because the underlying\n // machinery is fairly complicated and relies on a fair bit of type\n // recursion. It will stop mattering when we cut v4.0, because we won't be\n // doing this anyway.\n const pos = positional;\n for (let i = 0; i < pos.length; i++) {\n pos[i];\n }\n\n // SAFETY: TS 4.7 does not see that `named` will always be an object here.\n // However, it is guaranteed to be resolved as such by the types. This *may*\n // be a bug (https://github.com/microsoft/TypeScript/issues/48468), but it\n // *should* also stop being relevant once we ship 4.0.\n Object.values(named);\n };\n}\nexport { consumeArgs };","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { capabilities } from '@ember/modifier';\nimport { destroy, registerDestructor } from '@ember/destroyable';\nimport { Element, _implementsModify, Args } from './modifier';\nimport { consumeArgs, isFactory } from '../compat';\nfunction destroyModifier(modifier) {\n modifier.willRemove();\n modifier.willDestroy();\n}\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state;\n installedState.element = element;\n return installedState;\n}\nfunction installElementOnInstance(instance, element) {\n // SAFETY: we use the internal API for all class-based modifiers to set this\n // in a way which lets us issue the deprecation warning for anyone accessing\n // `element` as a getter while allowing types to continue working for any\n // existing subclasses (see the discussion on the class definition).\n instance[Element] = element;\n}\nfunction updateArgsOnInstance(instance, args) {\n // SAFETY: we use the internal API for all class-based modifiers to set this\n // in a way which lets us issue the deprecation warning for anyone accessing\n // `args` as a getter while allowing types to continue working for any\n // existing subclasses (see the discussion on the class definition).\n instance[Args] = args;\n}\nexport default class ClassBasedModifierManager {\n constructor(owner) {\n _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n this.owner = owner;\n }\n createModifier(factoryOrClass, args) {\n const Modifier = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n const modifier = new Modifier(this.owner, args);\n registerDestructor(modifier, destroyModifier);\n return {\n instance: modifier,\n implementsModify: _implementsModify(modifier),\n element: null\n };\n }\n installModifier(createdState, element, args) {\n const state = installElement(createdState, element);\n\n // TODO: this can be deleted entirely at v4.\n const {\n instance\n } = state;\n installElementOnInstance(instance, element);\n if (state.implementsModify) {\n instance.modify(element, args.positional, args.named);\n } else {\n // The `consumeArgs()` call provides backwards compatibility on v3 for the\n // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n // and `didUpdateArguments`), which accidentally had eager consumption\n // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n // the updated lazy semantics associated with normal auto-tracking.\n if (true) {\n consumeArgs(args);\n }\n instance.didReceiveArguments();\n instance.didInstall();\n }\n }\n updateModifier(state, args) {\n const {\n instance\n } = state;\n\n // TODO: remove at 4.0\n updateArgsOnInstance(state.instance, args);\n if (state.implementsModify) {\n instance.modify(state.element, args.positional, args.named);\n } else {\n // The `consumeArgs()` call provides backwards compatibility on v3 for the\n // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n // and `didUpdateArguments`), which accidentally had eager consumption\n // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n // the updated lazy semantics associated with normal auto-tracking.\n if (true) {\n consumeArgs(args);\n }\n instance.didUpdateArguments();\n instance.didReceiveArguments();\n }\n }\n destroyModifier(state) {\n destroy(state.instance);\n }\n}","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport Manager from './modifier-manager';\nimport { isDestroying, isDestroyed } from '@ember/destroyable';\nimport { assert, deprecate } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n\n// SAFETY: these sets are dev-only code to avoid showing deprecations for the\n// same class more than once.\n\nlet SEEN_CLASSES_FOR_LIFECYCLE;\nif (DEBUG) {\n SEEN_CLASSES_FOR_LIFECYCLE = new Set();\n}\nlet SEEN_CLASSES_FOR_DESTROYABLES;\nif (DEBUG) {\n SEEN_CLASSES_FOR_DESTROYABLES = new Set();\n}\nlet SEEN_CLASSES_FOR_ARGS;\nif (DEBUG) {\n SEEN_CLASSES_FOR_ARGS = new Set();\n}\nlet SEEN_CLASSES_FOR_ELEMENTS;\nif (DEBUG) {\n SEEN_CLASSES_FOR_ELEMENTS = new Set();\n}\n\n/** @internal */\nexport const _implementsModify = instance => instance.modify !== ClassBasedModifier.prototype.modify;\n\n/** @internal */\nexport const _implementsLegacyHooks = instance => instance.didInstall !== ClassBasedModifier.prototype.didInstall || instance.didUpdateArguments !== ClassBasedModifier.prototype.didUpdateArguments || instance.didReceiveArguments !== ClassBasedModifier.prototype.didReceiveArguments;\n\n/** @internal */\nexport const Element = Symbol('Element');\n\n/** @internal */\nexport const Args = Symbol('Args');\n\n// Preserve the signature on a class-based modifier so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n * convenience reasons, and don't want to teardown the state of your modifier\n * every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\nexport default class ClassBasedModifier {\n // Done this way with the weird combination of `declare` and `defineProperty`\n // so that subclasses which are overriding this by writing their own `args`\n // field type declarations continue to type check correctly. (If we introduced\n // a getter here, existing classes defining their args via a `declare args:`\n // would stop type checking, because TS -- correctly! -- differentiates\n // between class fields and getters).\n /**\n * The arguments passed to the modifier. `args.positional` is an array of\n * positional arguments, and `args.named` is an object containing the named\n * arguments.\n *\n * @deprecated Until 4.0. Access positional and named arguments directly in\n * the `modify` hook instead.\n */\n\n // Done this way with the weird combination of `declare` and `defineProperty`\n // so that subclasses which are overriding this by writing their own `element`\n // field declarations continue to type check correctly.\n /**\n * The element the modifier is applied to.\n *\n * @warning `element` is ***not*** available during `constructor` or\n * `willDestroy`.\n * @deprecated Until 4.0. Access the `element` as an argument in the `modify`\n * hook instead.\n */\n\n constructor(owner, args) {\n setOwner(this, owner);\n\n // SAFETY: the point here is (for the period where we are providing `args`\n // and `element`) to provide an internal-only way of setting and update the\n // `args` for the modifier instance; we use the `InternalClassBasedModifier`\n // interface to represent the internal-only API in a way that end users do\n // *not* have access to when subclassing `ClassBasedModifier`.\n this[Args] = args;\n assert('ember-modifier: You cannot implement both `modify` and any of the deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`, and `didUpdateArguments`)', !(_implementsModify(this) && _implementsLegacyHooks(this)));\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): \\`willDestroy\\`, \\`isDestroyed\\`, and \\`isDestroyed\\` are deprecated. Use the corresponding API from '@ember/destroyable' instead.`, this.willDestroy === ClassBasedModifier.prototype.willDestroy || SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): The \\`didInstall\\`, \\`didReceiveArguments\\`, and \\`didUpdateArguments\\` hooks are deprecated. Use the new \\`modify\\` hook instead.`, _implementsModify(this) || SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor), {\n id: 'ember-modifier.use-modify',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor)) {\n SEEN_CLASSES_FOR_LIFECYCLE.add(this.constructor);\n }\n }\n\n /**\n * Called when the modifier is installed and any time any tracked state used\n * in the modifier changes.\n *\n * If you need to do first-time-only setup, create a class field representing\n * the initialization state and check it when running the hook. That is also\n * where and when you should use `registerDestructor` for any teardown you\n * need to do. For example:\n *\n * ```js\n * function disconnect(instance) {\n * instance.observer?.disconnect();\n * }\n *\n * class IntersectionObserver extends Modifier {\n * observer;\n *\n * constructor(owner, args) {\n * super(owner, args);\n * registerDestructor(this, disconnect);\n * }\n *\n * modify(element, callback, options) {\n * disconnect(this);\n *\n * this.observer = new IntersectionObserver(callback, options);\n * this.observer.observe(element);\n * }\n * }\n * ```\n *\n * @param element The element to which the modifier is applied.\n * @param positional The positional arguments to the modifier.\n * @param named The named arguments to the modifier.\n */\n modify( /* eslint-disable @typescript-eslint/no-unused-vars */\n element, positional, named) {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier is installed **and** anytime the arguments are\n * updated.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didReceiveArguments() {\n /* no op, for subclassing */\n }\n\n /**\n * Called anytime the arguments are updated but **not** on the initial\n * install. Called before `didReceiveArguments`.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didUpdateArguments() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier is installed on the DOM element. Called after\n * `didReceiveArguments`.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didInstall() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the DOM element is about to be destroyed; use for removing\n * event listeners on the element and other similar clean-up tasks.\n *\n * @deprecated since 2.0.0: prefer to use `willDestroy`, since both it and\n * `willRemove` can perform all the same operations, including on the\n * `element`.\n */\n willRemove() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier itself is about to be destroyed; use for teardown\n * code. Called after `willRemove`.\n *\n * @deprecated Until 4.0. Use `registerDestructor` from `@ember/destroyables`.\n */\n willDestroy() {\n /* no op, for subclassing */\n }\n\n /**\n * @deprecated Until 4.0. Use `isDestroying` from `@ember/destroyables`.\n */\n get isDestroying() {\n deprecate('Modifier.isDestroying is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n return isDestroying(this);\n }\n\n /**\n * @deprecated Until 4.0. Use `isDestroyed` from `@ember/destroyables`.\n */\n get isDestroyed() {\n deprecate('Modifier.isDestroyed is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n return isDestroyed(this);\n }\n}\n\n// We apply these here, against the prototype, so that there is only one of\n// these, rather than one per instance. We also only issue the deprecation once\n// per class for each of `args` and `element`.\nObject.defineProperty(ClassBasedModifier.prototype, 'args', {\n enumerable: true,\n get() {\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.args\\` is deprecated. Access positional and named arguments directly in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ARGS.has(this.constructor), {\n id: 'ember-modifier.no-args-property',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n if (DEBUG && !SEEN_CLASSES_FOR_ARGS.has(this.constructor)) {\n SEEN_CLASSES_FOR_ARGS.add(this.constructor);\n }\n return this[Args];\n }\n});\nObject.defineProperty(ClassBasedModifier.prototype, 'element', {\n enumerable: true,\n get() {\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.element\\` is deprecated. Access the \\`element\\` as an argument in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor), {\n id: 'ember-modifier.no-element-property',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n if (DEBUG && !SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor)) {\n SEEN_CLASSES_FOR_ELEMENTS.add(this.constructor);\n }\n return this[Element] ?? null;\n }\n});\n\n/**\n * @internal This provides an interface we can use to backwards-compatibly set\n * up the element in a way that external callers will not have access to or\n * even see.\n */\n\nsetModifierManager(owner => new Manager(owner), ClassBasedModifier);","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { capabilities } from '@ember/modifier';\nimport { consumeArgs, isFactory } from '../compat';\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state;\n installedState.element = element;\n return installedState;\n}\nexport default class FunctionBasedModifierManager {\n constructor(options) {\n _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n _defineProperty(this, \"options\", void 0);\n this.options = {\n eager: options?.eager ?? true\n };\n }\n createModifier(factoryOrClass) {\n const instance = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n return {\n element: null,\n instance: instance\n };\n }\n installModifier(createdState, element, args) {\n const state = installElement(createdState, element);\n const {\n positional,\n named\n } = args;\n const teardown = createdState.instance(element, positional, named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n if (true && this.options.eager) {\n consumeArgs(args);\n }\n }\n updateModifier(state, args) {\n if (state.teardown) {\n state.teardown();\n }\n const teardown = state.instance(state.element, args.positional, args.named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n if (true && this.options.eager) {\n consumeArgs(args);\n }\n }\n destroyModifier(state) {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n }\n}","import { deprecate } from '@ember/debug';\nimport { setModifierManager } from '@ember/modifier';\nimport Modifier from '../class/modifier';\nimport FunctionBasedModifierManager from './modifier-manager';\n\n// Provide a singleton manager for each of the options. (If we extend this to\n// many more options in the future, we can revisit, but for now this means we\n// only ever allocate two managers.)\nconst EAGER_MANAGER = new FunctionBasedModifierManager({\n eager: true\n});\nconst LAZY_MANAGER = new FunctionBasedModifierManager({\n eager: false\n});\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @deprecated Until 4.0. Calling `modifier()` without an options argument is\n * deprecated. It is supported until 4.0 so that existing modifiers can be\n * migrated individually. Please update your function-based modifiers to pass\n * `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @deprecated Until 4.0. Calling `modifier()` with `{ eager: true }` is\n * deprecated. It is supported until 4.0 so that existing modifiers can be\n * migrated individually. Please update your function-based modifiers to pass\n * `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(fn, options = {\n eager: true\n}) {\n deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier without options is deprecated and will be removed at v4.0`, options !== undefined, {\n id: 'ember-modifier.function-based-options',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier with \\`{ eager: true }\\` is deprecated and will be removed at v4.0`, options?.eager === false, {\n id: 'ember-modifier.function-based-options',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n\n // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n // type of `setModifierManager` today is `void`; we pretend it actually\n // returns an opaque `Modifier` type so that we can provide a result from this\n // type which is useful to TS-aware tooling (e.g. Glint).\n return setModifierManager(() => options.eager ? EAGER_MANAGER : LAZY_MANAGER, fn);\n}\n\n/**\n * @internal\n */\n\n/**\n * @deprecated Instead of defining a function to match this type, simply define\n * a function-based modifier either using a `Signature` or by defining the\n * types on the callback passed to the `modifier`.\n */","// https://github.com/zeppelin/ember-click-outside/issues/23\n\nconst proto = typeof Element !== 'undefined' ? Element.prototype : {};\nconst vendor = proto.matches || proto.matchesSelector || proto.webkitMatchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector;\nexport function matches(el, selector) {\n if (!el || el.nodeType !== 1) return false;\n if (vendor) return vendor.call(el, selector);\n var nodes = el.parentNode.querySelectorAll(selector);\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i] == el) return true;\n }\n return false;\n}","/* eslint no-console: \"off\" */\nimport { matches } from './-private/matches-selector';\nexport function closest(element, selector) {\n if (matches(element, selector)) {\n return element;\n }\n while (element.parentNode) {\n element = element.parentNode;\n if (matches(element, selector)) {\n return element;\n }\n }\n}\nexport const documentOrBodyContains = element => {\n // https://github.com/zeppelin/ember-click-outside/issues/30\n if (typeof document.contains === 'function') {\n return document.contains(element);\n } else {\n return document.body.contains(element);\n }\n};\nexport const ios = () => {\n return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n};\n\n// https://github.com/mike-north/ember-deprecated/blob/master/addon/utils.js\nexport function printConsoleMessage(msg) {\n if (console.trace) {\n if (console.groupCollapsed) {\n console.groupCollapsed(msg);\n console.trace();\n console.groupEnd();\n } else {\n console.warn(msg);\n console.trace();\n }\n } else {\n console.warn(msg);\n }\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { next, cancel } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\nimport Modifier from 'ember-modifier';\nimport { closest, documentOrBodyContains, ios } from './utils';\nexport default class ClickOutsideModifier extends Modifier {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"didSetup\", false);\n _defineProperty(this, \"action\", null);\n _defineProperty(this, \"capture\", null);\n _defineProperty(this, \"eventHandler\", null);\n _defineProperty(this, \"eventType\", 'click');\n _defineProperty(this, \"exceptSelector\", null);\n _defineProperty(this, \"cancelOutsideListenerSetup\", null);\n _defineProperty(this, \"cleanup\", () => {\n this._destroy();\n if (ios()) {\n document.body.style.cursor = '';\n }\n });\n registerDestructor(this, this.cleanup);\n }\n modify(element, [action], {\n capture,\n eventType,\n exceptSelector\n }) {\n if (!this.didSetup) {\n if (ios()) {\n document.body.style.cursor = 'pointer';\n }\n this.didSetup = true;\n } else {\n this._destroy();\n }\n this._init({\n element,\n action,\n capture,\n eventType,\n exceptSelector\n });\n }\n _init({\n element,\n action,\n capture,\n eventType,\n exceptSelector\n }) {\n if (!action) {\n return;\n }\n this.action = action;\n this.exceptSelector = exceptSelector;\n this.capture = capture;\n if (eventType) {\n this.eventType = eventType;\n }\n this.eventHandler = this._createHandler(element, this.action, this.exceptSelector);\n this.cancelOutsideListenerSetup = next(this, this._addClickOutsideListener);\n }\n _destroy() {\n if (!this.action) {\n return;\n }\n cancel(this.cancelOutsideListenerSetup);\n this._removeClickOutsideListener();\n }\n _addClickOutsideListener() {\n let {\n capture,\n eventHandler,\n eventType\n } = this;\n document.addEventListener(eventType, eventHandler, {\n capture\n });\n }\n _removeClickOutsideListener() {\n let {\n capture,\n eventHandler,\n eventType\n } = this;\n document.removeEventListener(eventType, eventHandler, {\n capture\n });\n }\n _createHandler(element, action, exceptSelector) {\n return e => {\n if (exceptSelector && closest(e.target, exceptSelector)) {\n return;\n }\n let path = e.path || e.composedPath && e.composedPath();\n if (path) {\n path.includes(element) || action(e);\n } else {\n // Check if the click target still is in the DOM.\n // If not, there is no way to know if it was inside the element or not.\n let isRemoved = !e.target || !documentOrBodyContains(e.target);\n\n // Check the element is found as a parent of the click target.\n let isInside = element === e.target || element.contains(e.target);\n if (!isRemoved && !isInside) {\n action(e);\n }\n }\n };\n }\n}","import 'ember-data';\n\nimport setupContainer from 'ember-data/setup-container';\n\n/*\n This code initializes EmberData in an Ember application.\n*/\nexport default {\n name: 'ember-data',\n initialize: setupContainer,\n};\n","/* exists only for things that historically used \"after\" or \"before\" */\nexport default {\n name: 'ember-data',\n initialize() {},\n};\n","export default \"4.6.5\";\n","import Namespace from '@ember/application/namespace';\nimport Ember from 'ember';\nimport VERSION from 'ember-data/version';\nconst DS = Namespace.create({\n VERSION: VERSION,\n name: 'DS'\n});\nif (Ember.libraries) {\n Ember.libraries.registerCoreLibrary('Ember Data', VERSION);\n}\nexport default DS;","import 'ember-inflector';\nimport { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';\nimport Adapter, { BuildURLMixin } from '@ember-data/adapter';\nimport AdapterError, { AbortError, ConflictError, errorsArrayToHash, errorsHashToArray, ForbiddenError, InvalidError, NotFoundError, ServerError, TimeoutError, UnauthorizedError } from '@ember-data/adapter/error';\nimport JSONAPIAdapter from '@ember-data/adapter/json-api';\nimport RESTAdapter from '@ember-data/adapter/rest';\nimport Model, { attr, belongsTo, hasMany } from '@ember-data/model';\nimport Serializer from '@ember-data/serializer';\nimport { BooleanTransform, DateTransform, NumberTransform, StringTransform } from '@ember-data/serializer/-private';\nimport JSONSerializer from '@ember-data/serializer/json';\nimport JSONAPISerializer from '@ember-data/serializer/json-api';\nimport RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\nimport Transform from '@ember-data/serializer/transform';\nimport Store, { normalizeModelName } from '@ember-data/store';\nimport { AdapterPopulatedRecordArray, DS, Errors, InternalModel, ManyArray, PromiseArray, PromiseManyArray, PromiseObject, RecordArray, RecordArrayManager, Relationship, Snapshot } from './-private';\nimport setupContainer from './setup-container';\nDS.Store = Store;\nDS.PromiseArray = PromiseArray;\nDS.PromiseObject = PromiseObject;\nDS.PromiseManyArray = PromiseManyArray;\nDS.Model = Model;\nDS.attr = attr;\nDS.Errors = Errors;\nDS.InternalModel = InternalModel;\nDS.Snapshot = Snapshot;\nDS.Adapter = Adapter;\nDS.AdapterError = AdapterError;\nDS.InvalidError = InvalidError;\nDS.TimeoutError = TimeoutError;\nDS.AbortError = AbortError;\nDS.UnauthorizedError = UnauthorizedError;\nDS.ForbiddenError = ForbiddenError;\nDS.NotFoundError = NotFoundError;\nDS.ConflictError = ConflictError;\nDS.ServerError = ServerError;\nDS.errorsHashToArray = errorsHashToArray;\nDS.errorsArrayToHash = errorsArrayToHash;\nDS.Serializer = Serializer;\nif (macroCondition(dependencySatisfies('@ember-data/debug', '*'))) {\n DS.DebugAdapter = importSync('@ember-data/debug').default;\n}\nDS.RecordArray = RecordArray;\nDS.AdapterPopulatedRecordArray = AdapterPopulatedRecordArray;\nDS.ManyArray = ManyArray;\nDS.RecordArrayManager = RecordArrayManager;\nDS.RESTAdapter = RESTAdapter;\nDS.BuildURLMixin = BuildURLMixin;\nDS.RESTSerializer = RESTSerializer;\nDS.JSONSerializer = JSONSerializer;\nDS.JSONAPIAdapter = JSONAPIAdapter;\nDS.JSONAPISerializer = JSONAPISerializer;\nDS.Transform = Transform;\nDS.DateTransform = DateTransform;\nDS.StringTransform = StringTransform;\nDS.NumberTransform = NumberTransform;\nDS.BooleanTransform = BooleanTransform;\nDS.EmbeddedRecordsMixin = EmbeddedRecordsMixin;\nDS.belongsTo = belongsTo;\nDS.hasMany = hasMany;\nDS.Relationship = Relationship;\nDS._setupContainer = setupContainer;\nObject.defineProperty(DS, 'normalizeModelName', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: normalizeModelName\n});\nexport default DS;","import Store from '@ember-data/store';\nfunction initializeStore(application) {\n application.registerOptionsForType('serializer', {\n singleton: false\n });\n application.registerOptionsForType('adapter', {\n singleton: false\n });\n if (!application.hasRegistration('service:store')) {\n application.register('service:store', Store);\n }\n}\nexport default function setupContainer(application) {\n initializeStore(application);\n}","import Route from '@ember/routing/route';\nimport { getOwner } from '@ember/application';\n\n/*\n Creates an aliased form of a method that properly resolves external routes.\n*/\nfunction externalAlias(methodName) {\n return function _externalAliasMethod(routeName, ...args) {\n let externalRoute = getOwner(this)._getExternalRoute(routeName);\n let router = this._router || this.router;\n return router[methodName](externalRoute, ...args);\n };\n}\nRoute.reopen({\n transitionToExternal: externalAlias('transitionTo'),\n replaceWithExternal: externalAlias('replaceWith')\n});","import { LinkTo as RoutingLinkComponent } from '@ember/routing';\nimport { getOwner } from '@ember/application';\nimport { set, get } from '@ember/object';\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nlet LinkToExternal;\nlet LinkComponent;\nif (macroCondition(dependencySatisfies('@ember/legacy-built-in-components', '*'))) {\n let {\n LinkComponent: LegacyLinkComponent\n } = importSync('@ember/legacy-built-in-components');\n LinkComponent = LegacyLinkComponent;\n} else {\n LinkComponent = RoutingLinkComponent;\n}\nif (macroCondition(dependencySatisfies('ember-source', '>=3.24.1 || >=4.x'))) {\n LinkToExternal = class LinkToExternal extends LinkComponent {\n _namespaceRoute(targetRouteName) {\n const owner = getOwner(this);\n if (!owner.mountPoint) {\n return super._namespaceRoute(...arguments);\n }\n const externalRoute = owner._getExternalRoute(targetRouteName);\n return externalRoute;\n }\n\n // override LinkTo's assertLinkToOrigin method to noop. In LinkTo, this assertion\n // checks to make sure LinkTo is not being used inside a routeless engine\n // See this PR here for more details: https://github.com/emberjs/ember.js/pull/19477\n assertLinkToOrigin() {}\n };\n} else {\n LinkToExternal = LinkComponent.extend({\n didReceiveAttrs() {\n this._super(...arguments);\n const owner = getOwner(this);\n if (owner.mountPoint) {\n // https://emberjs.github.io/rfcs/0459-angle-bracket-built-in-components.html\n const routeKey = 'targetRouteName' in this ? 'targetRouteName' : 'route';\n const routeName = get(this, routeKey);\n const externalRoute = owner._getExternalRoute(routeName);\n set(this, routeKey, externalRoute);\n }\n }\n });\n}\nexport default LinkToExternal;","import Application from '@ember/application';\nimport Engine from '@ember/engine';\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nimport ExternalLinkComponent from '../components/link-to-external';\nEngine.reopen({\n buildRegistry() {\n let registry = this._super(...arguments);\n if (!(this instanceof Application)) {\n if (macroCondition(!dependencySatisfies('ember-source', '>= 3.24.1 || >=4.x'))) {\n const EngineScopedLinkComponent = importSync('ember-engines/components/link-to-component').default;\n registry.register('component:link-to', EngineScopedLinkComponent);\n }\n registry.register('component:link-to-external', ExternalLinkComponent);\n }\n return registry;\n }\n});","import { camelize } from '@ember/string';\nimport { assert, deprecate } from '@ember/debug';\nimport EngineInstance from '@ember/engine/instance';\nfunction deprecateHostRouterService() {\n deprecate(`Support for the host's router service has been deprecated. Please use a different name as 'hostRouter' or 'appRouter' instead of 'router'.`, false, {\n id: 'ember-engines.deprecation-router-service-from-host',\n for: 'ember-engines',\n until: '0.9.0',\n url: 'https://ember-engines.com/docs/deprecations#-use-alias-for-inject-router-service-from-host-application',\n since: {\n enabled: '0.8.16'\n }\n });\n}\nEngineInstance.reopen({\n /**\n The root DOM element of the `EngineInstance` as an element or a\n [jQuery-compatible selector\n string](http://api.jquery.com/category/selectors/).\n @private\n @property {String|DOMElement} rootElement\n */\n rootElement: null,\n /**\n A mapping of dependency names and values, grouped by category.\n `dependencies` should be set by the parent of this engine instance upon\n instantiation and prior to boot.\n During the boot process, engine instances verify that their required\n dependencies, as defined on the parent `Engine` class, have been assigned\n by the parent.\n @private\n @property {Object} dependencies\n */\n dependencies: null,\n /**\n A cache of dependency names and values, grouped by engine name.\n This cache is maintained by `buildChildEngineInstance()` for every engine\n that's a child of this parent instance.\n Only dependencies that are singletons are currently allowed, which makes\n this safe.\n @private\n @property {Object} _dependenciesForChildEngines\n */\n _dependenciesForChildEngines: null,\n init() {\n this._super(...arguments);\n this._externalRoutes = {};\n },\n buildChildEngineInstance(name, options = {}) {\n // Check dependencies cached by engine name\n let dependencies = this._dependenciesForChildEngines && this._dependenciesForChildEngines[name];\n\n // Prepare dependencies if none are cached\n if (!dependencies) {\n dependencies = {};\n let engineConfigurations = this.base.engines || {};\n let engineConfigurationKey = name;\n let engineConfiguration = engineConfigurations[engineConfigurationKey];\n if (!engineConfiguration) {\n engineConfigurationKey = camelize(name);\n engineConfiguration = engineConfigurations[engineConfigurationKey];\n deprecate(`Support for camelized engine names has been deprecated. Please use '${name}' instead of '${engineConfigurationKey}'.`, typeof engineConfiguration !== 'object', {\n id: 'ember-engines.deprecation-camelized-engine-names',\n for: 'ember-engines',\n until: '0.9.0',\n since: {\n enabled: '0.8.13'\n }\n });\n }\n if (engineConfiguration) {\n let engineDependencies = engineConfiguration.dependencies;\n if (engineDependencies) {\n ['services'].forEach(category => {\n if (engineDependencies[category]) {\n dependencies[category] = {};\n let dependencyType = this._dependencyTypeFromCategory(category);\n for (let i = 0; i < engineDependencies[category].length; i++) {\n let engineDependency = engineDependencies[category][i];\n let dependencyName;\n let dependencyNameInParent;\n if (typeof engineDependency === 'object') {\n dependencyName = Object.keys(engineDependency)[0];\n dependencyNameInParent = engineDependency[dependencyName];\n } else {\n dependencyName = dependencyNameInParent = engineDependency;\n }\n let dependencyKey = `${dependencyType}:${dependencyNameInParent}`;\n let dependency = this.lookup(dependencyKey);\n if (category === 'services' && dependencyName === 'router') {\n deprecateHostRouterService();\n }\n assert(`Engine parent failed to lookup '${dependencyKey}' dependency, as declared in 'engines.${engineConfigurationKey}.dependencies.${category}'.`, dependency);\n dependencies[category][dependencyName] = dependency;\n }\n }\n });\n if (engineDependencies.externalRoutes) {\n dependencies.externalRoutes = engineDependencies.externalRoutes;\n }\n }\n }\n\n // Cache dependencies for child engines for faster instantiation in the future\n this._dependenciesForChildEngines = this._dependenciesForChildEngines || {};\n this._dependenciesForChildEngines[name] = dependencies;\n }\n options.dependencies = dependencies;\n return this._super(name, options);\n },\n /*\n Gets the application-scoped route path for an external route.\n @private\n @method _getExternalRoute\n @param {String} routeName\n @return {String} route\n */\n _getExternalRoute(routeName) {\n const route = this._externalRoutes[routeName];\n assert(`The external route ${routeName} does not exist`, route);\n return route;\n },\n cloneParentDependencies() {\n this._super();\n let requiredDependencies = this.base.dependencies;\n if (requiredDependencies) {\n Object.keys(requiredDependencies).forEach(category => {\n let dependencyType = this._dependencyTypeFromCategory(category);\n requiredDependencies[category].forEach(dependencyName => {\n let dependency = this.dependencies[category] && this.dependencies[category][dependencyName];\n assert(`A dependency mapping for '${category}.${dependencyName}' must be declared on this engine's parent.`, dependency);\n if (category === 'externalRoutes') {\n this._externalRoutes[dependencyName] = dependency;\n } else {\n let key = `${dependencyType}:${dependencyName}`;\n this.register(key, dependency, {\n instantiate: false\n });\n }\n });\n });\n }\n },\n _dependencyTypeFromCategory(category) {\n switch (category) {\n case 'services':\n return 'service';\n case 'externalRoutes':\n return 'externalRoute';\n }\n assert(`Dependencies of category '${category}' can not be shared with engines.`, false);\n },\n // mount(view) {\n // assert('EngineInstance must be booted before it can be mounted', this._booted);\n //\n // view.append()\n // },\n\n /**\n This hook is called by the root-most Route (a.k.a. the ApplicationRoute)\n when it has finished creating the root View. By default, we simply take the\n view and append it to the `rootElement` specified on the Application.\n In cases like FastBoot and testing, we can override this hook and implement\n custom behavior, such as serializing to a string and sending over an HTTP\n socket rather than appending to DOM.\n @param view {Ember.View} the root-most view\n @private\n */\n didCreateRootView(view) {\n view.appendTo(this.rootElement);\n }\n});","// Load extensions to Ember\nimport '../-private/route-ext';\n\nimport '../-private/engine-ext';\nimport '../-private/engine-instance-ext';\nimport '../-private/controller-ext';\n\n// TODO: Move to ensure they run prior to instantiating Ember.Application\nexport function initialize() {}\nexport default {\n name: 'engines',\n initialize\n};","import Controller from '@ember/controller';\nimport { getOwner } from '@ember/application';\nController.reopen({\n /*\n Creates an aliased form of a method that properly resolves external routes.\n */\n transitionToExternalRoute(routeName, ...args) {\n let externalRoute = getOwner(this)._getExternalRoute(routeName);\n let target = this.target;\n let method = target.transitionToRoute || target.transitionTo;\n return method.apply(target, [externalRoute, ...args]);\n }\n});","export default function buildRoutes(callback) {\n callback.isRouteMap = true;\n return callback;\n}","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\n\nexport function preventDefault([handler]) {\n assert(\n `Expected '${handler}' to be a function, if present.`,\n !handler || typeof handler === 'function'\n );\n\n return function (event) {\n assert(\n `Expected '${event}' to be an Event and have a 'preventDefault' method.`,\n event && typeof event.preventDefault === 'function'\n );\n\n event.preventDefault();\n\n if (handler) handler(event);\n };\n}\n\nexport default helper(preventDefault);\n","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\n\nexport function stopPropagation([handler]) {\n assert(\n `Expected '${handler}' to be a function, if present.`,\n !handler || typeof handler === 'function'\n );\n\n return function (event) {\n assert(\n `Expected '${event}' to be an Event and have a 'stopPropagation' method.`,\n event && typeof event.stopPropagation === 'function'\n );\n\n event.stopPropagation();\n\n if (handler) handler(event);\n };\n}\n\nexport default helper(stopPropagation);\n","/* global require */\nimport { getOwnConfig } from '@embroider/macros';\nlet configModulePath = `${getOwnConfig().modulePrefix}/config/environment`;\nexport default require(configModulePath).default;","export default class {\n\n constructor(applicationInstance, event, target = event.target) {\n this.applicationInstance = applicationInstance;\n this.event = event;\n this.target = target;\n let hrefAttr = this.target.attributes.href;\n this.url = hrefAttr && hrefAttr.value;\n }\n\n maybeHandle() {\n if (this.shouldHandle()) {\n this.handle();\n }\n }\n\n shouldHandle() {\n return this.isUnmodifiedLeftClick() &&\n this.isNotIgnored() &&\n this.hasNoTargetBlank() &&\n this.hasNoActionHelper() &&\n this.hasNoDownload() &&\n this.isNotLinkComponent() &&\n this.recognizeUrl();\n }\n\n handle() {\n let router = this._getRouter();\n router.transitionTo(this.getUrlWithoutRoot());\n this.event.preventDefault();\n }\n\n isUnmodifiedLeftClick() {\n let e = this.event;\n\n return (e.which === undefined || e.which === 1) && !e.ctrlKey && !e.metaKey;\n }\n\n hasNoTargetBlank() {\n let attr = this.target.attributes.target;\n return !attr || attr.value !== '_blank';\n }\n\n isNotIgnored() {\n return !this.target.attributes['data-href-to-ignore'];\n }\n\n hasNoActionHelper() {\n return !this.target.attributes['data-ember-action'];\n }\n\n hasNoDownload() {\n return !this.target.attributes.download;\n }\n\n isNotLinkComponent() {\n let isLinkComponent = false;\n let id = this.target.id;\n if (id) {\n let componentInstance = this.applicationInstance.lookup('-view-registry:main')[id];\n isLinkComponent = componentInstance && [componentInstance.constructor.toString(), componentInstance.constructor.superclass.toString()].includes('@ember/routing/link-component');\n }\n\n return !isLinkComponent;\n }\n\n recognizeUrl() {\n let url = this.url;\n let didRecognize = false;\n\n if (url) {\n let router = this._getRouter();\n let rootUrl = this._getRootUrl();\n let isInternal = url.indexOf(rootUrl) === 0;\n let urlWithoutRoot = this.getUrlWithoutRoot();\n let routerMicrolib = router._router._routerMicrolib || router._router.router;\n\n didRecognize = isInternal && routerMicrolib.recognizer.recognize(urlWithoutRoot);\n }\n\n return didRecognize;\n }\n\n getUrlWithoutRoot() {\n let url = this.url;\n let rootUrl = this._getRootUrl();\n return url.substr(rootUrl.length - 1);\n }\n\n _getRouter() {\n return this.applicationInstance.lookup('service:router');\n }\n\n _getRootUrl() {\n let router = this._getRouter();\n let rootURL = router.get('rootURL');\n\n if (rootURL.charAt(rootURL.length - 1) !== '/') {\n rootURL = rootURL + '/';\n }\n\n return rootURL;\n }\n}\n","import HrefTo from 'ember-href-to/href-to';\n\nfunction closestLink(el) {\n if (el.closest) {\n return el.closest('a');\n } else {\n el = el.parentElement;\n while (el && el.tagName !== 'A') {\n el = el.parentElement;\n }\n return el;\n }\n}\nexport default {\n name: 'ember-href-to',\n initialize(applicationInstance) {\n // we only want this to run in the browser, not in fastboot\n if (typeof(FastBoot) === \"undefined\") {\n let hrefToClickHandler = function _hrefToClickHandler(e) {\n let link = e.target.tagName === 'A' ? e.target : closestLink(e.target);\n if (link) {\n let hrefTo = new HrefTo(applicationInstance, e, link);\n hrefTo.maybeHandle();\n }\n };\n\n document.body.addEventListener('click', hrefToClickHandler);\n\n // Teardown on app destruction: clean up the event listener to avoid\n // memory leaks.\n applicationInstance.reopen({\n willDestroy() {\n document.body.removeEventListener('click', hrefToClickHandler);\n return this._super(...arguments);\n }\n });\n }\n }\n};\n","export default {\n plurals: [\n [/$/, 's'],\n [/s$/i, 's'],\n [/^(ax|test)is$/i, '$1es'],\n [/(octop|vir)us$/i, '$1i'],\n [/(octop|vir)i$/i, '$1i'],\n [/(alias|status|bonus)$/i, '$1es'],\n [/(bu)s$/i, '$1ses'],\n [/(buffal|tomat)o$/i, '$1oes'],\n [/([ti])um$/i, '$1a'],\n [/([ti])a$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:([^f])fe|([lr])f)$/i, '$1$2ves'],\n [/(hive)$/i, '$1s'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/(x|ch|ss|sh)$/i, '$1es'],\n [/(matr|vert|ind)(?:ix|ex)$/i, '$1ices'],\n [/^(m|l)ouse$/i, '$1ice'],\n [/^(m|l)ice$/i, '$1ice'],\n [/^(ox)$/i, '$1en'],\n [/^(oxen)$/i, '$1'],\n [/(quiz)$/i, '$1zes'],\n ],\n\n singular: [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [\n /((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,\n '$1sis',\n ],\n [/(^analy)(sis|ses)$/i, '$1sis'],\n [/([^f])ves$/i, '$1fe'],\n [/(hive)s$/i, '$1'],\n [/(tive)s$/i, '$1'],\n [/([lr])ves$/i, '$1f'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/(x|ch|ss|sh)es$/i, '$1'],\n [/^(m|l)ice$/i, '$1ouse'],\n [/(bus)(es)?$/i, '$1'],\n [/(o)es$/i, '$1'],\n [/(shoe)s$/i, '$1'],\n [/(cris|test)(is|es)$/i, '$1is'],\n [/^(a)x[ie]s$/i, '$1xis'],\n [/(octop|vir)(us|i)$/i, '$1us'],\n [/(alias|status|bonus)(es)?$/i, '$1'],\n [/^(ox)en/i, '$1'],\n [/(vert|ind)ices$/i, '$1ex'],\n [/(matr)ices$/i, '$1ix'],\n [/(quiz)zes$/i, '$1'],\n [/(database)s$/i, '$1'],\n ],\n\n irregularPairs: [\n ['person', 'people'],\n ['man', 'men'],\n ['child', 'children'],\n ['sex', 'sexes'],\n ['move', 'moves'],\n ['cow', 'kine'],\n ['zombie', 'zombies'],\n ],\n\n uncountable: [\n 'equipment',\n 'information',\n 'rice',\n 'money',\n 'species',\n 'series',\n 'fish',\n 'sheep',\n 'jeans',\n 'police',\n ],\n};\n","import defaultRules from './inflections';\n\nconst BLANK_REGEX = /^\\s*$/;\nconst LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\nconst LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\nconst CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\nconst CAPITALIZE_REGEX = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\n\nfunction capitalize(str) {\n return str.replace(CAPITALIZE_REGEX, (match) => match.toUpperCase());\n}\n\nfunction loadUncountable(rules, uncountable) {\n for (let i = 0, length = uncountable.length; i < length; i++) {\n rules.uncountable[uncountable[i].toLowerCase()] = true;\n }\n}\n\nfunction loadIrregular(rules, irregularPairs) {\n let pair;\n\n for (let i = 0, length = irregularPairs.length; i < length; i++) {\n pair = irregularPairs[i];\n\n //pluralizing\n rules.irregular[pair[0].toLowerCase()] = pair[1];\n rules.irregular[pair[1].toLowerCase()] = pair[1];\n\n //singularizing\n rules.irregularInverse[pair[1].toLowerCase()] = pair[0];\n rules.irregularInverse[pair[0].toLowerCase()] = pair[0];\n }\n}\n\n/**\n Inflector.Ember provides a mechanism for supplying inflection rules for your\n application. Ember includes a default set of inflection rules, and provides an\n API for providing additional rules.\n\n Examples:\n\n Creating an inflector with no rules.\n\n ```js\n var inflector = new Ember.Inflector();\n ```\n\n Creating an inflector with the default ember ruleset.\n\n ```js\n var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);\n\n inflector.pluralize('cow'); //=> 'kine'\n inflector.singularize('kine'); //=> 'cow'\n ```\n\n Creating an inflector and adding rules later.\n\n ```javascript\n var inflector = Ember.Inflector.inflector;\n\n inflector.pluralize('advice'); // => 'advices'\n inflector.uncountable('advice');\n inflector.pluralize('advice'); // => 'advice'\n\n inflector.pluralize('formula'); // => 'formulas'\n inflector.irregular('formula', 'formulae');\n inflector.pluralize('formula'); // => 'formulae'\n\n // you would not need to add these as they are the default rules\n inflector.plural(/$/, 's');\n inflector.singular(/s$/i, '');\n ```\n\n Creating an inflector with a nondefault ruleset.\n\n ```javascript\n var rules = {\n plurals: [\n [ /$/, 's' ]\n ],\n singular: [\n [ /\\s$/, '' ]\n ],\n irregularPairs: [\n [ 'cow', 'kine' ]\n ],\n uncountable: [ 'fish' ]\n };\n\n var inflector = new Ember.Inflector(rules);\n ```\n\n @class Inflector\n @namespace Ember\n*/\nfunction Inflector(ruleSet) {\n ruleSet = ruleSet || {};\n ruleSet.uncountable = ruleSet.uncountable || makeDictionary();\n ruleSet.irregularPairs = ruleSet.irregularPairs || makeDictionary();\n\n const rules = (this.rules = {\n plurals: ruleSet.plurals || [],\n singular: ruleSet.singular || [],\n irregular: makeDictionary(),\n irregularInverse: makeDictionary(),\n uncountable: makeDictionary(),\n });\n\n loadUncountable(rules, ruleSet.uncountable);\n loadIrregular(rules, ruleSet.irregularPairs);\n\n this.enableCache();\n}\n\nif (!Object.create && !Object.create(null).hasOwnProperty) {\n throw new Error(\n 'This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg'\n );\n}\n\nfunction makeDictionary() {\n var cache = Object.create(null);\n cache['_dict'] = null;\n delete cache['_dict'];\n return cache;\n}\n\nInflector.prototype = {\n /**\n @public\n\n As inflections can be costly, and commonly the same subset of words are repeatedly\n inflected an optional cache is provided.\n\n @method enableCache\n */\n enableCache() {\n this.purgeCache();\n\n this.singularize = function (word) {\n this._cacheUsed = true;\n return (\n this._sCache[word] || (this._sCache[word] = this._singularize(word))\n );\n };\n\n this.pluralize = function (numberOrWord, word, options = {}) {\n this._cacheUsed = true;\n var cacheKey = [numberOrWord, word, options.withoutCount];\n return (\n this._pCache[cacheKey] ||\n (this._pCache[cacheKey] = this._pluralize(numberOrWord, word, options))\n );\n };\n },\n\n /**\n @public\n\n @method purgeCache\n */\n purgeCache() {\n this._cacheUsed = false;\n this._sCache = makeDictionary();\n this._pCache = makeDictionary();\n },\n\n /**\n @public\n disable caching\n\n @method disableCache;\n */\n disableCache() {\n this._sCache = null;\n this._pCache = null;\n this.singularize = function (word) {\n return this._singularize(word);\n };\n\n this.pluralize = function () {\n return this._pluralize(...arguments);\n };\n },\n\n /**\n @method plural\n @param {RegExp} regex\n @param {String} string\n */\n plural(regex, string) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n this.rules.plurals.push([regex, string.toLowerCase()]);\n },\n\n /**\n @method singular\n @param {RegExp} regex\n @param {String} string\n */\n singular(regex, string) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n this.rules.singular.push([regex, string.toLowerCase()]);\n },\n\n /**\n @method uncountable\n @param {String} regex\n */\n uncountable(string) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n loadUncountable(this.rules, [string.toLowerCase()]);\n },\n\n /**\n @method irregular\n @param {String} singular\n @param {String} plural\n */\n irregular(singular, plural) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n loadIrregular(this.rules, [[singular, plural]]);\n },\n\n /**\n @method pluralize\n @param {String} word\n */\n pluralize() {\n return this._pluralize(...arguments);\n },\n\n _pluralize(wordOrCount, word, options = {}) {\n if (word === undefined) {\n return this.inflect(\n wordOrCount,\n this.rules.plurals,\n this.rules.irregular\n );\n }\n\n if (parseFloat(wordOrCount) !== 1) {\n word = this.inflect(word, this.rules.plurals, this.rules.irregular);\n }\n\n return options.withoutCount ? word : `${wordOrCount} ${word}`;\n },\n\n /**\n @method singularize\n @param {String} word\n */\n singularize(word) {\n return this._singularize(word);\n },\n\n _singularize(word) {\n return this.inflect(word, this.rules.singular, this.rules.irregularInverse);\n },\n\n /**\n @protected\n\n @method inflect\n @param {String} word\n @param {Object} typeRules\n @param {Object} irregular\n */\n inflect(word, typeRules, irregular) {\n let inflection,\n substitution,\n result,\n lowercase,\n wordSplit,\n lastWord,\n isBlank,\n isCamelized,\n rule,\n isUncountable;\n\n isBlank = !word || BLANK_REGEX.test(word);\n isCamelized = CAMELIZED_REGEX.test(word);\n\n if (isBlank) {\n return word;\n }\n\n lowercase = word.toLowerCase();\n wordSplit =\n LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n\n if (wordSplit) {\n lastWord = wordSplit[2].toLowerCase();\n }\n\n isUncountable =\n this.rules.uncountable[lowercase] || this.rules.uncountable[lastWord];\n\n if (isUncountable) {\n return word;\n }\n\n for (rule in irregular) {\n if (lowercase.match(rule + '$')) {\n substitution = irregular[rule];\n\n if (isCamelized && irregular[lastWord]) {\n substitution = capitalize(substitution);\n rule = capitalize(rule);\n }\n\n return word.replace(new RegExp(rule, 'i'), substitution);\n }\n }\n\n for (var i = typeRules.length, min = 0; i > min; i--) {\n inflection = typeRules[i - 1];\n rule = inflection[0];\n\n if (rule.test(word)) {\n break;\n }\n }\n\n inflection = inflection || [];\n\n rule = inflection[0];\n substitution = inflection[1];\n\n result = word.replace(rule, substitution);\n\n return result;\n },\n};\n\nInflector.defaultRules = defaultRules;\nInflector.inflector = new Inflector(defaultRules);\n\nexport default Inflector;\n","import Inflector from './inflector';\n\nfunction pluralize() {\n return Inflector.inflector.pluralize(...arguments);\n}\n\nfunction singularize(word) {\n return Inflector.inflector.singularize(word);\n}\n\nexport { pluralize, singularize };\n","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet THelper = (_class = class THelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{t}} helper requires a value.');\n }\n }\n return this.intl.t(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { THelper as default };","import { warn } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\n/**\n * @private\n * @hide\n */\nexport default function missingMessage(key, locales) {\n if (isEmpty(locales)) {\n warn(`[ember-intl] no locale has been set! See: https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-ember-intl`, false, {\n id: 'ember-intl-no-locale-set'\n });\n return `No locale defined. Unable to resolve translation: \"${key}\"`;\n }\n const localeNames = locales.join(', ');\n warn(`[ember-intl] translation: \"${key}\" on locale: \"${localeNames}\" was not found.`, false, {\n id: 'ember-intl-missing-translation'\n });\n return `Missing translation \"${key}\" for locale \"${localeNames}\"`;\n}","export var ErrorKind;\n(function (ErrorKind) {\n /** Argument is unclosed (e.g. `{0`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n /** Argument is empty (e.g. `{}`). */\n ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n /** Argument is malformed (e.g. `{foo!}``) */\n ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n /** Expect an argument type (e.g. `{foo,}`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n /** Unsupported argument type (e.g. `{foo,foo}`) */\n ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n /** Expect an argument style (e.g. `{foo, number, }`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n /** The number skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n /** The date time skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n /** Missing select argument options (e.g. `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n /**\n * Expecting a message fragment after the `plural` or `selectordinal` selector\n * (e.g. `{foo, plural, one}`)\n */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n /**\n * Duplicate selectors in `plural` or `selectordinal` argument.\n * (e.g. {foo, plural, one {#} one {#}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n /** Duplicate selectors in `select` argument.\n * (e.g. {foo, select, apple {apple} apple {apple}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n /** Plural or select argument option must have `other` clause. */\n ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n /** The tag is malformed. (e.g. `foo) */\n ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n /** The tag name is invalid. (e.g. `<123>foo`) */\n ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n /** The closing tag does not match the opening tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n /** The opening tag has unmatched closing tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n /**\n * XML-like tag\n */\n TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value,\n };\n}\nexport function createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style,\n };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n case 'E':\n result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n case 'a': // AM, PM\n result.hour12 = true;\n break;\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n // Zone\n case 'z': // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: milliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n }\n return '';\n });\n return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n if (skeleton.length === 0) {\n throw new Error('Number skeleton cannot be empty');\n }\n // Parse the skeleton\n var stringTokens = skeleton\n .split(WHITE_SPACE_REGEX)\n .filter(function (x) { return x.length > 0; });\n var tokens = [];\n for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n var stringToken = stringTokens_1[_i];\n var stemAndOptions = stringToken.split('/');\n if (stemAndOptions.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n var option = options_1[_a];\n if (option.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n }\n tokens.push({ stem: stem, options: options });\n }\n return tokens;\n}\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n var result = {};\n if (str[str.length - 1] === 'r') {\n result.roundingPriority = 'morePrecision';\n }\n else if (str[str.length - 1] === 's') {\n result.roundingPriority = 'lessPrecision';\n }\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n }\n // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n }\n // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n }\n // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits =\n g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n return '';\n });\n return result;\n}\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto',\n };\n case 'sign-accounting':\n case '()':\n return {\n currencySign: 'accounting',\n };\n case 'sign-always':\n case '+!':\n return {\n signDisplay: 'always',\n };\n case 'sign-accounting-always':\n case '()!':\n return {\n signDisplay: 'always',\n currencySign: 'accounting',\n };\n case 'sign-except-zero':\n case '+?':\n return {\n signDisplay: 'exceptZero',\n };\n case 'sign-accounting-except-zero':\n case '()?':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting',\n };\n case 'sign-never':\n case '+_':\n return {\n signDisplay: 'never',\n };\n }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n // Engineering\n var result;\n if (stem[0] === 'E' && stem[1] === 'E') {\n result = {\n notation: 'engineering',\n };\n stem = stem.slice(2);\n }\n else if (stem[0] === 'E') {\n result = {\n notation: 'scientific',\n };\n stem = stem.slice(1);\n }\n if (result) {\n var signDisplay = stem.slice(0, 2);\n if (signDisplay === '+!') {\n result.signDisplay = 'always';\n stem = stem.slice(2);\n }\n else if (signDisplay === '+?') {\n result.signDisplay = 'exceptZero';\n stem = stem.slice(2);\n }\n if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n throw new Error('Malformed concise eng/scientific notation');\n }\n result.minimumIntegerDigits = stem.length;\n }\n return result;\n}\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n if (signOpts) {\n return signOpts;\n }\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n var result = {};\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n switch (token.stem) {\n case 'percent':\n case '%':\n result.style = 'percent';\n continue;\n case '%x100':\n result.style = 'percent';\n result.scale = 100;\n continue;\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n case 'group-off':\n case ',_':\n result.useGrouping = false;\n continue;\n case 'precision-integer':\n case '.':\n result.maximumFractionDigits = 0;\n continue;\n case 'measure-unit':\n case 'unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n case 'compact-short':\n case 'K':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n case 'compact-long':\n case 'KK':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n case 'scientific':\n result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'engineering':\n result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n case 'scale':\n result.scale = parseFloat(token.options[0]);\n continue;\n case 'rounding-mode-floor':\n result.roundingMode = 'floor';\n continue;\n case 'rounding-mode-ceiling':\n result.roundingMode = 'ceil';\n continue;\n case 'rounding-mode-down':\n result.roundingMode = 'trunc';\n continue;\n case 'rounding-mode-up':\n result.roundingMode = 'expand';\n continue;\n case 'rounding-mode-half-even':\n result.roundingMode = 'halfEven';\n continue;\n case 'rounding-mode-half-down':\n result.roundingMode = 'halfTrunc';\n continue;\n case 'rounding-mode-half-up':\n result.roundingMode = 'halfExpand';\n continue;\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n case 'integer-width':\n if (token.options.length > 1) {\n throw new RangeError('integer-width stems only accept a single optional option');\n }\n token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n if (g1) {\n result.minimumIntegerDigits = g2.length;\n }\n else if (g3 && g4) {\n throw new Error('We currently do not support maximum integer digits');\n }\n else if (g5) {\n throw new Error('We currently do not support exact integer digits');\n }\n return '';\n });\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n result.minimumIntegerDigits = token.stem.length;\n continue;\n }\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n // Precision\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n // precision-integer case\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n // .000* case (before ICU67 it was .000+)\n if (g2 === '*') {\n result.minimumFractionDigits = g1.length;\n }\n // .### case\n else if (g3 && g3[0] === '#') {\n result.maximumFractionDigits = g3.length;\n }\n // .00## case\n else if (g4 && g5) {\n result.minimumFractionDigits = g4.length;\n result.maximumFractionDigits = g4.length + g5.length;\n }\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length;\n }\n return '';\n });\n var opt = token.options[0];\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n if (opt === 'w') {\n result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n }\n else if (opt) {\n result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n }\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n var signOpts = parseSign(token.stem);\n if (signOpts) {\n result = __assign(__assign({}, result), signOpts);\n }\n var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n if (conciseScientificAndEngineeringOpts) {\n result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n }\n }\n return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore \nexport var timeData = {\n \"001\": [\n \"H\",\n \"h\"\n ],\n \"AC\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"AD\": [\n \"H\",\n \"hB\"\n ],\n \"AE\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"AF\": [\n \"H\",\n \"hb\",\n \"hB\",\n \"h\"\n ],\n \"AG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"AI\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"AL\": [\n \"h\",\n \"H\",\n \"hB\"\n ],\n \"AM\": [\n \"H\",\n \"hB\"\n ],\n \"AO\": [\n \"H\",\n \"hB\"\n ],\n \"AR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"AS\": [\n \"h\",\n \"H\"\n ],\n \"AT\": [\n \"H\",\n \"hB\"\n ],\n \"AU\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"AW\": [\n \"H\",\n \"hB\"\n ],\n \"AX\": [\n \"H\"\n ],\n \"AZ\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BA\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BB\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BD\": [\n \"h\",\n \"hB\",\n \"H\"\n ],\n \"BE\": [\n \"H\",\n \"hB\"\n ],\n \"BF\": [\n \"H\",\n \"hB\"\n ],\n \"BG\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"BI\": [\n \"H\",\n \"h\"\n ],\n \"BJ\": [\n \"H\",\n \"hB\"\n ],\n \"BL\": [\n \"H\",\n \"hB\"\n ],\n \"BM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BN\": [\n \"hb\",\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"BO\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"BQ\": [\n \"H\"\n ],\n \"BR\": [\n \"H\",\n \"hB\"\n ],\n \"BS\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BT\": [\n \"h\",\n \"H\"\n ],\n \"BW\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"BY\": [\n \"H\",\n \"h\"\n ],\n \"BZ\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CA\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"CC\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CD\": [\n \"hB\",\n \"H\"\n ],\n \"CF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CG\": [\n \"H\",\n \"hB\"\n ],\n \"CH\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"CI\": [\n \"H\",\n \"hB\"\n ],\n \"CK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CL\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CM\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CN\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"CO\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"CP\": [\n \"H\"\n ],\n \"CR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CU\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CV\": [\n \"H\",\n \"hB\"\n ],\n \"CW\": [\n \"H\",\n \"hB\"\n ],\n \"CX\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CY\": [\n \"h\",\n \"H\",\n \"hb\",\n \"hB\"\n ],\n \"CZ\": [\n \"H\"\n ],\n \"DE\": [\n \"H\",\n \"hB\"\n ],\n \"DG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"DJ\": [\n \"h\",\n \"H\"\n ],\n \"DK\": [\n \"H\"\n ],\n \"DM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"DO\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"DZ\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"EA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"EC\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"EE\": [\n \"H\",\n \"hB\"\n ],\n \"EG\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"EH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"ER\": [\n \"h\",\n \"H\"\n ],\n \"ES\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"ET\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"FI\": [\n \"H\"\n ],\n \"FJ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"FK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"FM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"FO\": [\n \"H\",\n \"h\"\n ],\n \"FR\": [\n \"H\",\n \"hB\"\n ],\n \"GA\": [\n \"H\",\n \"hB\"\n ],\n \"GB\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GD\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GE\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"GF\": [\n \"H\",\n \"hB\"\n ],\n \"GG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GH\": [\n \"h\",\n \"H\"\n ],\n \"GI\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GL\": [\n \"H\",\n \"h\"\n ],\n \"GM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GN\": [\n \"H\",\n \"hB\"\n ],\n \"GP\": [\n \"H\",\n \"hB\"\n ],\n \"GQ\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"GR\": [\n \"h\",\n \"H\",\n \"hb\",\n \"hB\"\n ],\n \"GT\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"GU\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GW\": [\n \"H\",\n \"hB\"\n ],\n \"GY\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"HK\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"HN\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"HR\": [\n \"H\",\n \"hB\"\n ],\n \"HU\": [\n \"H\",\n \"h\"\n ],\n \"IC\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"ID\": [\n \"H\"\n ],\n \"IE\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IL\": [\n \"H\",\n \"hB\"\n ],\n \"IM\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IN\": [\n \"h\",\n \"H\"\n ],\n \"IO\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IQ\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"IR\": [\n \"hB\",\n \"H\"\n ],\n \"IS\": [\n \"H\"\n ],\n \"IT\": [\n \"H\",\n \"hB\"\n ],\n \"JE\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"JM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"JO\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"JP\": [\n \"H\",\n \"K\",\n \"h\"\n ],\n \"KE\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"KG\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"KH\": [\n \"hB\",\n \"h\",\n \"H\",\n \"hb\"\n ],\n \"KI\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KM\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"KN\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KP\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"KR\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"KW\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"KY\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KZ\": [\n \"H\",\n \"hB\"\n ],\n \"LA\": [\n \"H\",\n \"hb\",\n \"hB\",\n \"h\"\n ],\n \"LB\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"LC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"LI\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"LK\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"LR\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"LS\": [\n \"h\",\n \"H\"\n ],\n \"LT\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"LU\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"LV\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"LY\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"MC\": [\n \"H\",\n \"hB\"\n ],\n \"MD\": [\n \"H\",\n \"hB\"\n ],\n \"ME\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"MF\": [\n \"H\",\n \"hB\"\n ],\n \"MG\": [\n \"H\",\n \"h\"\n ],\n \"MH\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"ML\": [\n \"H\"\n ],\n \"MM\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"MN\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MO\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MP\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MQ\": [\n \"H\",\n \"hB\"\n ],\n \"MR\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MS\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MT\": [\n \"H\",\n \"h\"\n ],\n \"MU\": [\n \"H\",\n \"h\"\n ],\n \"MV\": [\n \"H\",\n \"h\"\n ],\n \"MW\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MX\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"MY\": [\n \"hb\",\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"MZ\": [\n \"H\",\n \"hB\"\n ],\n \"NA\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"NC\": [\n \"H\",\n \"hB\"\n ],\n \"NE\": [\n \"H\"\n ],\n \"NF\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NI\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"NL\": [\n \"H\",\n \"hB\"\n ],\n \"NO\": [\n \"H\",\n \"h\"\n ],\n \"NP\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"NR\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NU\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NZ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"OM\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PA\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"PE\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"PF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"PG\": [\n \"h\",\n \"H\"\n ],\n \"PH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PK\": [\n \"h\",\n \"hB\",\n \"H\"\n ],\n \"PL\": [\n \"H\",\n \"h\"\n ],\n \"PM\": [\n \"H\",\n \"hB\"\n ],\n \"PN\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"PR\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"PS\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PT\": [\n \"H\",\n \"hB\"\n ],\n \"PW\": [\n \"h\",\n \"H\"\n ],\n \"PY\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"QA\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"RE\": [\n \"H\",\n \"hB\"\n ],\n \"RO\": [\n \"H\",\n \"hB\"\n ],\n \"RS\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"RU\": [\n \"H\"\n ],\n \"RW\": [\n \"H\",\n \"h\"\n ],\n \"SA\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SB\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SC\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SD\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SE\": [\n \"H\"\n ],\n \"SG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SH\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"SI\": [\n \"H\",\n \"hB\"\n ],\n \"SJ\": [\n \"H\"\n ],\n \"SK\": [\n \"H\"\n ],\n \"SL\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SM\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SN\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SO\": [\n \"h\",\n \"H\"\n ],\n \"SR\": [\n \"H\",\n \"hB\"\n ],\n \"SS\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"ST\": [\n \"H\",\n \"hB\"\n ],\n \"SV\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"SX\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"SY\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SZ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TA\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"TC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TD\": [\n \"h\",\n \"H\",\n \"hB\"\n ],\n \"TF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"TG\": [\n \"H\",\n \"hB\"\n ],\n \"TH\": [\n \"H\",\n \"h\"\n ],\n \"TJ\": [\n \"H\",\n \"h\"\n ],\n \"TL\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"TM\": [\n \"H\",\n \"h\"\n ],\n \"TN\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"TO\": [\n \"h\",\n \"H\"\n ],\n \"TR\": [\n \"H\",\n \"hB\"\n ],\n \"TT\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TW\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"TZ\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"UA\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"UG\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"UM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"US\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"UY\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"UZ\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"VA\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"VC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VE\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"VG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VI\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VN\": [\n \"H\",\n \"h\"\n ],\n \"VU\": [\n \"h\",\n \"H\"\n ],\n \"WF\": [\n \"H\",\n \"hB\"\n ],\n \"WS\": [\n \"h\",\n \"H\"\n ],\n \"XK\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"YE\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"YT\": [\n \"H\",\n \"hB\"\n ],\n \"ZA\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"ZM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"ZW\": [\n \"H\",\n \"h\"\n ],\n \"af-ZA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"ar-001\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"ca-ES\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"en-001\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"es-BO\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-BR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-EC\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-ES\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-GQ\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-PE\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"fr-CA\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"gl-ES\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"gu-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"hi-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"it-CH\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"it-IT\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"kn-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"ml-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"mr-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"pa-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"ta-IN\": [\n \"hB\",\n \"h\",\n \"hb\",\n \"H\"\n ],\n \"te-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"zu-ZA\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n ? Number.isSafeInteger\n : function (n) {\n return (typeof n === 'number' &&\n isFinite(n) &&\n Math.floor(n) === n &&\n Math.abs(n) <= 0x1fffffffffffff);\n };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n /**\n * legacy Edge or Xbox One browser\n * Unicode flag support: supported\n * Pattern_Syntax support: not supported\n * See https://github.com/formatjs/formatjs/issues/2822\n */\n REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n ? // Native\n function startsWith(s, search, position) {\n return s.startsWith(search, position);\n }\n : // For IE11\n function startsWith(s, search, position) {\n return s.slice(position, position + search.length) === search;\n };\nvar fromCodePoint = hasNativeFromCodePoint\n ? String.fromCodePoint\n : // IE11\n function fromCodePoint() {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n var elements = '';\n var length = codePoints.length;\n var i = 0;\n var code;\n while (length > i) {\n code = codePoints[i++];\n if (code > 0x10ffff)\n throw RangeError(code + ' is not a valid code point');\n elements +=\n code < 0x10000\n ? String.fromCharCode(code)\n : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n }\n return elements;\n };\nvar fromEntries = \n// native\nhasNativeFromEntries\n ? Object.fromEntries\n : // Ponyfill\n function fromEntries(entries) {\n var obj = {};\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a = entries_1[_i], k = _a[0], v = _a[1];\n obj[k] = v;\n }\n return obj;\n };\nvar codePointAt = hasNativeCodePointAt\n ? // Native\n function codePointAt(s, index) {\n return s.codePointAt(index);\n }\n : // IE 11\n function codePointAt(s, index) {\n var size = s.length;\n if (index < 0 || index >= size) {\n return undefined;\n }\n var first = s.charCodeAt(index);\n var second;\n return first < 0xd800 ||\n first > 0xdbff ||\n index + 1 === size ||\n (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n second > 0xdfff\n ? first\n : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n };\nvar trimStart = hasTrimStart\n ? // Native\n function trimStart(s) {\n return s.trimStart();\n }\n : // Ponyfill\n function trimStart(s) {\n return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n };\nvar trimEnd = hasTrimEnd\n ? // Native\n function trimEnd(s) {\n return s.trimEnd();\n }\n : // Ponyfill\n function trimEnd(s) {\n return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n // Native\n var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var _a;\n IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n };\n}\nelse {\n // IE11\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var match = [];\n while (true) {\n var c = codePointAt(s, index);\n if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n break;\n }\n match.push(c);\n index += c >= 0x10000 ? 2 : 1;\n }\n return fromCodePoint.apply(void 0, match);\n };\n}\nvar Parser = /** @class */ (function () {\n function Parser(message, options) {\n if (options === void 0) { options = {}; }\n this.message = message;\n this.position = { offset: 0, line: 1, column: 1 };\n this.ignoreTag = !!options.ignoreTag;\n this.locale = options.locale;\n this.requiresOtherClause = !!options.requiresOtherClause;\n this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n }\n Parser.prototype.parse = function () {\n if (this.offset() !== 0) {\n throw Error('parser can only be used once');\n }\n return this.parseMessage(0, '', false);\n };\n Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n var elements = [];\n while (!this.isEOF()) {\n var char = this.char();\n if (char === 123 /* `{` */) {\n var result = this.parseArgument(nestingLevel, expectingCloseTag);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else if (char === 125 /* `}` */ && nestingLevel > 0) {\n break;\n }\n else if (char === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n var position = this.clonePosition();\n this.bump();\n elements.push({\n type: TYPE.pound,\n location: createLocation(position, this.clonePosition()),\n });\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n this.peek() === 47 // char code for '/'\n ) {\n if (expectingCloseTag) {\n break;\n }\n else {\n return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n }\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n _isAlpha(this.peek() || 0)) {\n var result = this.parseTag(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else {\n var result = this.parseLiteral(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n }\n return { val: elements, err: null };\n };\n /**\n * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n * are accepted:\n *\n * ```\n * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"\"\n * tagName ::= [a-z] (PENChar)*\n * PENChar ::=\n * \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n * ```\n *\n * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n * since other tag-based engines like React allow it\n */\n Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n var startPosition = this.clonePosition();\n this.bump(); // `<`\n var tagName = this.parseTagName();\n this.bumpSpace();\n if (this.bumpIf('/>')) {\n // Self closing tag\n return {\n val: {\n type: TYPE.literal,\n value: \"<\".concat(tagName, \"/>\"),\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else if (this.bumpIf('>')) {\n var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n if (childrenResult.err) {\n return childrenResult;\n }\n var children = childrenResult.val;\n // Expecting a close tag\n var endTagStartPosition = this.clonePosition();\n if (this.bumpIf('')) {\n return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n }\n return {\n val: {\n type: TYPE.tag,\n value: tagName,\n children: children,\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else {\n return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n }\n }\n else {\n return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n }\n };\n /**\n * This method assumes that the caller has peeked ahead for the first tag character.\n */\n Parser.prototype.parseTagName = function () {\n var startOffset = this.offset();\n this.bump(); // the first tag name character\n while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n this.bump();\n }\n return this.message.slice(startOffset, this.offset());\n };\n Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n var start = this.clonePosition();\n var value = '';\n while (true) {\n var parseQuoteResult = this.tryParseQuote(parentArgType);\n if (parseQuoteResult) {\n value += parseQuoteResult;\n continue;\n }\n var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n if (parseUnquotedResult) {\n value += parseUnquotedResult;\n continue;\n }\n var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n if (parseLeftAngleResult) {\n value += parseLeftAngleResult;\n continue;\n }\n break;\n }\n var location = createLocation(start, this.clonePosition());\n return {\n val: { type: TYPE.literal, value: value, location: location },\n err: null,\n };\n };\n Parser.prototype.tryParseLeftAngleBracket = function () {\n if (!this.isEOF() &&\n this.char() === 60 /* `<` */ &&\n (this.ignoreTag ||\n // If at the opening tag or closing tag position, bail.\n !_isAlphaOrSlash(this.peek() || 0))) {\n this.bump(); // `<`\n return '<';\n }\n return null;\n };\n /**\n * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n * a character that requires quoting (that is, \"only where needed\"), and works the same in\n * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n */\n Parser.prototype.tryParseQuote = function (parentArgType) {\n if (this.isEOF() || this.char() !== 39 /* `'` */) {\n return null;\n }\n // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n // Check if is valid escaped character\n switch (this.peek()) {\n case 39 /* `'` */:\n // double quote, should return as a single quote.\n this.bump();\n this.bump();\n return \"'\";\n // '{', '<', '>', '}'\n case 123:\n case 60:\n case 62:\n case 125:\n break;\n case 35: // '#'\n if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n break;\n }\n return null;\n default:\n return null;\n }\n this.bump(); // apostrophe\n var codePoints = [this.char()]; // escaped char\n this.bump();\n // read chars until the optional closing apostrophe is found\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch === 39 /* `'` */) {\n if (this.peek() === 39 /* `'` */) {\n codePoints.push(39);\n // Bump one more time because we need to skip 2 characters.\n this.bump();\n }\n else {\n // Optional closing apostrophe.\n this.bump();\n break;\n }\n }\n else {\n codePoints.push(ch);\n }\n this.bump();\n }\n return fromCodePoint.apply(void 0, codePoints);\n };\n Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n if (this.isEOF()) {\n return null;\n }\n var ch = this.char();\n if (ch === 60 /* `<` */ ||\n ch === 123 /* `{` */ ||\n (ch === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n (ch === 125 /* `}` */ && nestingLevel > 0)) {\n return null;\n }\n else {\n this.bump();\n return fromCodePoint(ch);\n }\n };\n Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n var openingBracePosition = this.clonePosition();\n this.bump(); // `{`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n if (this.char() === 125 /* `}` */) {\n this.bump();\n return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n // argument name\n var value = this.parseIdentifierIfPossible().value;\n if (!value) {\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n switch (this.char()) {\n // Simple argument: `{name}`\n case 125 /* `}` */: {\n this.bump(); // `}`\n return {\n val: {\n type: TYPE.argument,\n // value does not include the opening and closing braces.\n value: value,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n err: null,\n };\n }\n // Argument with options: `{name, format, ...}`\n case 44 /* `,` */: {\n this.bump(); // `,`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n }\n default:\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n };\n /**\n * Advance the parser until the end of the identifier, if it is currently on\n * an identifier character. Return an empty string otherwise.\n */\n Parser.prototype.parseIdentifierIfPossible = function () {\n var startingPosition = this.clonePosition();\n var startOffset = this.offset();\n var value = matchIdentifierAtIndex(this.message, startOffset);\n var endOffset = startOffset + value.length;\n this.bumpTo(endOffset);\n var endPosition = this.clonePosition();\n var location = createLocation(startingPosition, endPosition);\n return { value: value, location: location };\n };\n Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n var _a;\n // Parse this range:\n // {name, type, style}\n // ^---^\n var typeStartPosition = this.clonePosition();\n var argType = this.parseIdentifierIfPossible().value;\n var typeEndPosition = this.clonePosition();\n switch (argType) {\n case '':\n // Expecting a style string number, date, time, plural, selectordinal, or select.\n return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n case 'number':\n case 'date':\n case 'time': {\n // Parse this range:\n // {name, number, style}\n // ^-------^\n this.bumpSpace();\n var styleAndLocation = null;\n if (this.bumpIf(',')) {\n this.bumpSpace();\n var styleStartPosition = this.clonePosition();\n var result = this.parseSimpleArgStyleIfPossible();\n if (result.err) {\n return result;\n }\n var style = trimEnd(result.val);\n if (style.length === 0) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n styleAndLocation = { style: style, styleLocation: styleLocation };\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_1 = createLocation(openingBracePosition, this.clonePosition());\n // Extract style or skeleton\n if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n // Skeleton starts with `::`.\n var skeleton = trimStart(styleAndLocation.style.slice(2));\n if (argType === 'number') {\n var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n if (result.err) {\n return result;\n }\n return {\n val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n err: null,\n };\n }\n else {\n if (skeleton.length === 0) {\n return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n }\n var dateTimePattern = skeleton;\n // Get \"best match\" pattern only if locale is passed, if not, let it\n // pass as-is where `parseDateTimeSkeleton()` will throw an error\n // for unsupported patterns.\n if (this.locale) {\n dateTimePattern = getBestPattern(skeleton, this.locale);\n }\n var style = {\n type: SKELETON_TYPE.dateTime,\n pattern: dateTimePattern,\n location: styleAndLocation.styleLocation,\n parsedOptions: this.shouldParseSkeletons\n ? parseDateTimeSkeleton(dateTimePattern)\n : {},\n };\n var type = argType === 'date' ? TYPE.date : TYPE.time;\n return {\n val: { type: type, value: value, location: location_1, style: style },\n err: null,\n };\n }\n }\n // Regular style or no style.\n return {\n val: {\n type: argType === 'number'\n ? TYPE.number\n : argType === 'date'\n ? TYPE.date\n : TYPE.time,\n value: value,\n location: location_1,\n style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n },\n err: null,\n };\n }\n case 'plural':\n case 'selectordinal':\n case 'select': {\n // Parse this range:\n // {name, plural, options}\n // ^---------^\n var typeEndPosition_1 = this.clonePosition();\n this.bumpSpace();\n if (!this.bumpIf(',')) {\n return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n }\n this.bumpSpace();\n // Parse offset:\n // {name, plural, offset:1, options}\n // ^-----^\n //\n // or the first option:\n //\n // {name, plural, one {...} other {...}}\n // ^--^\n var identifierAndLocation = this.parseIdentifierIfPossible();\n var pluralOffset = 0;\n if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n if (!this.bumpIf(':')) {\n return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n this.bumpSpace();\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n if (result.err) {\n return result;\n }\n // Parse another identifier for option parsing\n this.bumpSpace();\n identifierAndLocation = this.parseIdentifierIfPossible();\n pluralOffset = result.val;\n }\n var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n if (optionsResult.err) {\n return optionsResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_2 = createLocation(openingBracePosition, this.clonePosition());\n if (argType === 'select') {\n return {\n val: {\n type: TYPE.select,\n value: value,\n options: fromEntries(optionsResult.val),\n location: location_2,\n },\n err: null,\n };\n }\n else {\n return {\n val: {\n type: TYPE.plural,\n value: value,\n options: fromEntries(optionsResult.val),\n offset: pluralOffset,\n pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n location: location_2,\n },\n err: null,\n };\n }\n }\n default:\n return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n }\n };\n Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n // Parse: {value, number, ::currency/GBP }\n //\n if (this.isEOF() || this.char() !== 125 /* `}` */) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bump(); // `}`\n return { val: true, err: null };\n };\n /**\n * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n */\n Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n var nestedBraces = 0;\n var startPosition = this.clonePosition();\n while (!this.isEOF()) {\n var ch = this.char();\n switch (ch) {\n case 39 /* `'` */: {\n // Treat apostrophe as quoting but include it in the style part.\n // Find the end of the quoted literal text.\n this.bump();\n var apostrophePosition = this.clonePosition();\n if (!this.bumpUntil(\"'\")) {\n return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n }\n this.bump();\n break;\n }\n case 123 /* `{` */: {\n nestedBraces += 1;\n this.bump();\n break;\n }\n case 125 /* `}` */: {\n if (nestedBraces > 0) {\n nestedBraces -= 1;\n }\n else {\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n }\n break;\n }\n default:\n this.bump();\n break;\n }\n }\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n };\n Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n var tokens = [];\n try {\n tokens = parseNumberSkeletonFromString(skeleton);\n }\n catch (e) {\n return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n }\n return {\n val: {\n type: SKELETON_TYPE.number,\n tokens: tokens,\n location: location,\n parsedOptions: this.shouldParseSkeletons\n ? parseNumberSkeleton(tokens)\n : {},\n },\n err: null,\n };\n };\n /**\n * @param nesting_level The current nesting level of messages.\n * This can be positive when parsing message fragment in select or plural argument options.\n * @param parent_arg_type The parent argument's type.\n * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n * the argument. It is a by-product of a previous parsing attempt.\n * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n * between a pair of opening and closing tags. The nested message will not parse beyond\n * the closing tag boundary.\n */\n Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n var _a;\n var hasOtherClause = false;\n var options = [];\n var parsedSelectors = new Set();\n var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n // Parse:\n // one {one apple}\n // ^--^\n while (true) {\n if (selector.length === 0) {\n var startPosition = this.clonePosition();\n if (parentArgType !== 'select' && this.bumpIf('=')) {\n // Try parse `={number}` selector\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n if (result.err) {\n return result;\n }\n selectorLocation = createLocation(startPosition, this.clonePosition());\n selector = this.message.slice(startPosition.offset, this.offset());\n }\n else {\n break;\n }\n }\n // Duplicate selector clauses\n if (parsedSelectors.has(selector)) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n }\n if (selector === 'other') {\n hasOtherClause = true;\n }\n // Parse:\n // one {one apple}\n // ^----------^\n this.bumpSpace();\n var openingBracePosition = this.clonePosition();\n if (!this.bumpIf('{')) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n if (fragmentResult.err) {\n return fragmentResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n options.push([\n selector,\n {\n value: fragmentResult.val,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n ]);\n // Keep track of the existing selectors\n parsedSelectors.add(selector);\n // Prep next selector clause.\n this.bumpSpace();\n (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n }\n if (options.length === 0) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n }\n if (this.requiresOtherClause && !hasOtherClause) {\n return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n return { val: options, err: null };\n };\n Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n var sign = 1;\n var startingPosition = this.clonePosition();\n if (this.bumpIf('+')) {\n }\n else if (this.bumpIf('-')) {\n sign = -1;\n }\n var hasDigits = false;\n var decimal = 0;\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n hasDigits = true;\n decimal = decimal * 10 + (ch - 48);\n this.bump();\n }\n else {\n break;\n }\n }\n var location = createLocation(startingPosition, this.clonePosition());\n if (!hasDigits) {\n return this.error(expectNumberError, location);\n }\n decimal *= sign;\n if (!isSafeInteger(decimal)) {\n return this.error(invalidNumberError, location);\n }\n return { val: decimal, err: null };\n };\n Parser.prototype.offset = function () {\n return this.position.offset;\n };\n Parser.prototype.isEOF = function () {\n return this.offset() === this.message.length;\n };\n Parser.prototype.clonePosition = function () {\n // This is much faster than `Object.assign` or spread.\n return {\n offset: this.position.offset,\n line: this.position.line,\n column: this.position.column,\n };\n };\n /**\n * Return the code point at the current position of the parser.\n * Throws if the index is out of bound.\n */\n Parser.prototype.char = function () {\n var offset = this.position.offset;\n if (offset >= this.message.length) {\n throw Error('out of bound');\n }\n var code = codePointAt(this.message, offset);\n if (code === undefined) {\n throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n }\n return code;\n };\n Parser.prototype.error = function (kind, location) {\n return {\n val: null,\n err: {\n kind: kind,\n message: this.message,\n location: location,\n },\n };\n };\n /** Bump the parser to the next UTF-16 code unit. */\n Parser.prototype.bump = function () {\n if (this.isEOF()) {\n return;\n }\n var code = this.char();\n if (code === 10 /* '\\n' */) {\n this.position.line += 1;\n this.position.column = 1;\n this.position.offset += 1;\n }\n else {\n this.position.column += 1;\n // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n this.position.offset += code < 0x10000 ? 1 : 2;\n }\n };\n /**\n * If the substring starting at the current position of the parser has\n * the given prefix, then bump the parser to the character immediately\n * following the prefix and return true. Otherwise, don't bump the parser\n * and return false.\n */\n Parser.prototype.bumpIf = function (prefix) {\n if (startsWith(this.message, prefix, this.offset())) {\n for (var i = 0; i < prefix.length; i++) {\n this.bump();\n }\n return true;\n }\n return false;\n };\n /**\n * Bump the parser until the pattern character is found and return `true`.\n * Otherwise bump to the end of the file and return `false`.\n */\n Parser.prototype.bumpUntil = function (pattern) {\n var currentOffset = this.offset();\n var index = this.message.indexOf(pattern, currentOffset);\n if (index >= 0) {\n this.bumpTo(index);\n return true;\n }\n else {\n this.bumpTo(this.message.length);\n return false;\n }\n };\n /**\n * Bump the parser to the target offset.\n * If target offset is beyond the end of the input, bump the parser to the end of the input.\n */\n Parser.prototype.bumpTo = function (targetOffset) {\n if (this.offset() > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n }\n targetOffset = Math.min(targetOffset, this.message.length);\n while (true) {\n var offset = this.offset();\n if (offset === targetOffset) {\n break;\n }\n if (offset > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n }\n this.bump();\n if (this.isEOF()) {\n break;\n }\n }\n };\n /** advance the parser through all whitespace to the next non-whitespace code unit. */\n Parser.prototype.bumpSpace = function () {\n while (!this.isEOF() && _isWhiteSpace(this.char())) {\n this.bump();\n }\n };\n /**\n * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n * If the input has been exhausted, then this returns null.\n */\n Parser.prototype.peek = function () {\n if (this.isEOF()) {\n return null;\n }\n var code = this.char();\n var offset = this.offset();\n var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n };\n return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n return ((codepoint >= 97 && codepoint <= 122) ||\n (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n return (c === 45 /* '-' */ ||\n c === 46 /* '.' */ ||\n (c >= 48 && c <= 57) /* 0..9 */ ||\n c === 95 /* '_' */ ||\n (c >= 97 && c <= 122) /** a..z */ ||\n (c >= 65 && c <= 90) /* A..Z */ ||\n c == 0xb7 ||\n (c >= 0xc0 && c <= 0xd6) ||\n (c >= 0xd8 && c <= 0xf6) ||\n (c >= 0xf8 && c <= 0x37d) ||\n (c >= 0x37f && c <= 0x1fff) ||\n (c >= 0x200c && c <= 0x200d) ||\n (c >= 0x203f && c <= 0x2040) ||\n (c >= 0x2070 && c <= 0x218f) ||\n (c >= 0x2c00 && c <= 0x2fef) ||\n (c >= 0x3001 && c <= 0xd7ff) ||\n (c >= 0xf900 && c <= 0xfdcf) ||\n (c >= 0xfdf0 && c <= 0xfffd) ||\n (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n return ((c >= 0x0009 && c <= 0x000d) ||\n c === 0x0020 ||\n c === 0x0085 ||\n (c >= 0x200e && c <= 0x200f) ||\n c === 0x2028 ||\n c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n return ((c >= 0x0021 && c <= 0x0023) ||\n c === 0x0024 ||\n (c >= 0x0025 && c <= 0x0027) ||\n c === 0x0028 ||\n c === 0x0029 ||\n c === 0x002a ||\n c === 0x002b ||\n c === 0x002c ||\n c === 0x002d ||\n (c >= 0x002e && c <= 0x002f) ||\n (c >= 0x003a && c <= 0x003b) ||\n (c >= 0x003c && c <= 0x003e) ||\n (c >= 0x003f && c <= 0x0040) ||\n c === 0x005b ||\n c === 0x005c ||\n c === 0x005d ||\n c === 0x005e ||\n c === 0x0060 ||\n c === 0x007b ||\n c === 0x007c ||\n c === 0x007d ||\n c === 0x007e ||\n c === 0x00a1 ||\n (c >= 0x00a2 && c <= 0x00a5) ||\n c === 0x00a6 ||\n c === 0x00a7 ||\n c === 0x00a9 ||\n c === 0x00ab ||\n c === 0x00ac ||\n c === 0x00ae ||\n c === 0x00b0 ||\n c === 0x00b1 ||\n c === 0x00b6 ||\n c === 0x00bb ||\n c === 0x00bf ||\n c === 0x00d7 ||\n c === 0x00f7 ||\n (c >= 0x2010 && c <= 0x2015) ||\n (c >= 0x2016 && c <= 0x2017) ||\n c === 0x2018 ||\n c === 0x2019 ||\n c === 0x201a ||\n (c >= 0x201b && c <= 0x201c) ||\n c === 0x201d ||\n c === 0x201e ||\n c === 0x201f ||\n (c >= 0x2020 && c <= 0x2027) ||\n (c >= 0x2030 && c <= 0x2038) ||\n c === 0x2039 ||\n c === 0x203a ||\n (c >= 0x203b && c <= 0x203e) ||\n (c >= 0x2041 && c <= 0x2043) ||\n c === 0x2044 ||\n c === 0x2045 ||\n c === 0x2046 ||\n (c >= 0x2047 && c <= 0x2051) ||\n c === 0x2052 ||\n c === 0x2053 ||\n (c >= 0x2055 && c <= 0x205e) ||\n (c >= 0x2190 && c <= 0x2194) ||\n (c >= 0x2195 && c <= 0x2199) ||\n (c >= 0x219a && c <= 0x219b) ||\n (c >= 0x219c && c <= 0x219f) ||\n c === 0x21a0 ||\n (c >= 0x21a1 && c <= 0x21a2) ||\n c === 0x21a3 ||\n (c >= 0x21a4 && c <= 0x21a5) ||\n c === 0x21a6 ||\n (c >= 0x21a7 && c <= 0x21ad) ||\n c === 0x21ae ||\n (c >= 0x21af && c <= 0x21cd) ||\n (c >= 0x21ce && c <= 0x21cf) ||\n (c >= 0x21d0 && c <= 0x21d1) ||\n c === 0x21d2 ||\n c === 0x21d3 ||\n c === 0x21d4 ||\n (c >= 0x21d5 && c <= 0x21f3) ||\n (c >= 0x21f4 && c <= 0x22ff) ||\n (c >= 0x2300 && c <= 0x2307) ||\n c === 0x2308 ||\n c === 0x2309 ||\n c === 0x230a ||\n c === 0x230b ||\n (c >= 0x230c && c <= 0x231f) ||\n (c >= 0x2320 && c <= 0x2321) ||\n (c >= 0x2322 && c <= 0x2328) ||\n c === 0x2329 ||\n c === 0x232a ||\n (c >= 0x232b && c <= 0x237b) ||\n c === 0x237c ||\n (c >= 0x237d && c <= 0x239a) ||\n (c >= 0x239b && c <= 0x23b3) ||\n (c >= 0x23b4 && c <= 0x23db) ||\n (c >= 0x23dc && c <= 0x23e1) ||\n (c >= 0x23e2 && c <= 0x2426) ||\n (c >= 0x2427 && c <= 0x243f) ||\n (c >= 0x2440 && c <= 0x244a) ||\n (c >= 0x244b && c <= 0x245f) ||\n (c >= 0x2500 && c <= 0x25b6) ||\n c === 0x25b7 ||\n (c >= 0x25b8 && c <= 0x25c0) ||\n c === 0x25c1 ||\n (c >= 0x25c2 && c <= 0x25f7) ||\n (c >= 0x25f8 && c <= 0x25ff) ||\n (c >= 0x2600 && c <= 0x266e) ||\n c === 0x266f ||\n (c >= 0x2670 && c <= 0x2767) ||\n c === 0x2768 ||\n c === 0x2769 ||\n c === 0x276a ||\n c === 0x276b ||\n c === 0x276c ||\n c === 0x276d ||\n c === 0x276e ||\n c === 0x276f ||\n c === 0x2770 ||\n c === 0x2771 ||\n c === 0x2772 ||\n c === 0x2773 ||\n c === 0x2774 ||\n c === 0x2775 ||\n (c >= 0x2794 && c <= 0x27bf) ||\n (c >= 0x27c0 && c <= 0x27c4) ||\n c === 0x27c5 ||\n c === 0x27c6 ||\n (c >= 0x27c7 && c <= 0x27e5) ||\n c === 0x27e6 ||\n c === 0x27e7 ||\n c === 0x27e8 ||\n c === 0x27e9 ||\n c === 0x27ea ||\n c === 0x27eb ||\n c === 0x27ec ||\n c === 0x27ed ||\n c === 0x27ee ||\n c === 0x27ef ||\n (c >= 0x27f0 && c <= 0x27ff) ||\n (c >= 0x2800 && c <= 0x28ff) ||\n (c >= 0x2900 && c <= 0x2982) ||\n c === 0x2983 ||\n c === 0x2984 ||\n c === 0x2985 ||\n c === 0x2986 ||\n c === 0x2987 ||\n c === 0x2988 ||\n c === 0x2989 ||\n c === 0x298a ||\n c === 0x298b ||\n c === 0x298c ||\n c === 0x298d ||\n c === 0x298e ||\n c === 0x298f ||\n c === 0x2990 ||\n c === 0x2991 ||\n c === 0x2992 ||\n c === 0x2993 ||\n c === 0x2994 ||\n c === 0x2995 ||\n c === 0x2996 ||\n c === 0x2997 ||\n c === 0x2998 ||\n (c >= 0x2999 && c <= 0x29d7) ||\n c === 0x29d8 ||\n c === 0x29d9 ||\n c === 0x29da ||\n c === 0x29db ||\n (c >= 0x29dc && c <= 0x29fb) ||\n c === 0x29fc ||\n c === 0x29fd ||\n (c >= 0x29fe && c <= 0x2aff) ||\n (c >= 0x2b00 && c <= 0x2b2f) ||\n (c >= 0x2b30 && c <= 0x2b44) ||\n (c >= 0x2b45 && c <= 0x2b46) ||\n (c >= 0x2b47 && c <= 0x2b4c) ||\n (c >= 0x2b4d && c <= 0x2b73) ||\n (c >= 0x2b74 && c <= 0x2b75) ||\n (c >= 0x2b76 && c <= 0x2b95) ||\n c === 0x2b96 ||\n (c >= 0x2b97 && c <= 0x2bff) ||\n (c >= 0x2e00 && c <= 0x2e01) ||\n c === 0x2e02 ||\n c === 0x2e03 ||\n c === 0x2e04 ||\n c === 0x2e05 ||\n (c >= 0x2e06 && c <= 0x2e08) ||\n c === 0x2e09 ||\n c === 0x2e0a ||\n c === 0x2e0b ||\n c === 0x2e0c ||\n c === 0x2e0d ||\n (c >= 0x2e0e && c <= 0x2e16) ||\n c === 0x2e17 ||\n (c >= 0x2e18 && c <= 0x2e19) ||\n c === 0x2e1a ||\n c === 0x2e1b ||\n c === 0x2e1c ||\n c === 0x2e1d ||\n (c >= 0x2e1e && c <= 0x2e1f) ||\n c === 0x2e20 ||\n c === 0x2e21 ||\n c === 0x2e22 ||\n c === 0x2e23 ||\n c === 0x2e24 ||\n c === 0x2e25 ||\n c === 0x2e26 ||\n c === 0x2e27 ||\n c === 0x2e28 ||\n c === 0x2e29 ||\n (c >= 0x2e2a && c <= 0x2e2e) ||\n c === 0x2e2f ||\n (c >= 0x2e30 && c <= 0x2e39) ||\n (c >= 0x2e3a && c <= 0x2e3b) ||\n (c >= 0x2e3c && c <= 0x2e3f) ||\n c === 0x2e40 ||\n c === 0x2e41 ||\n c === 0x2e42 ||\n (c >= 0x2e43 && c <= 0x2e4f) ||\n (c >= 0x2e50 && c <= 0x2e51) ||\n c === 0x2e52 ||\n (c >= 0x2e53 && c <= 0x2e7f) ||\n (c >= 0x3001 && c <= 0x3003) ||\n c === 0x3008 ||\n c === 0x3009 ||\n c === 0x300a ||\n c === 0x300b ||\n c === 0x300c ||\n c === 0x300d ||\n c === 0x300e ||\n c === 0x300f ||\n c === 0x3010 ||\n c === 0x3011 ||\n (c >= 0x3012 && c <= 0x3013) ||\n c === 0x3014 ||\n c === 0x3015 ||\n c === 0x3016 ||\n c === 0x3017 ||\n c === 0x3018 ||\n c === 0x3019 ||\n c === 0x301a ||\n c === 0x301b ||\n c === 0x301c ||\n c === 0x301d ||\n (c >= 0x301e && c <= 0x301f) ||\n c === 0x3020 ||\n c === 0x3030 ||\n c === 0xfd3e ||\n c === 0xfd3f ||\n (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n var skeletonCopy = '';\n for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n var patternChar = skeleton.charAt(patternPos);\n if (patternChar === 'j') {\n var extraLength = 0;\n while (patternPos + 1 < skeleton.length &&\n skeleton.charAt(patternPos + 1) === patternChar) {\n extraLength++;\n patternPos++;\n }\n var hourLen = 1 + (extraLength & 1);\n var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n var dayPeriodChar = 'a';\n var hourChar = getDefaultHourSymbolFromLocale(locale);\n if (hourChar == 'H' || hourChar == 'k') {\n dayPeriodLen = 0;\n }\n while (dayPeriodLen-- > 0) {\n skeletonCopy += dayPeriodChar;\n }\n while (hourLen-- > 0) {\n skeletonCopy = hourChar + skeletonCopy;\n }\n }\n else if (patternChar === 'J') {\n skeletonCopy += 'H';\n }\n else {\n skeletonCopy += patternChar;\n }\n }\n return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n var hourCycle = locale.hourCycle;\n if (hourCycle === undefined &&\n // @ts-ignore hourCycle(s) is not identified yet\n locale.hourCycles &&\n // @ts-ignore\n locale.hourCycles.length) {\n // @ts-ignore\n hourCycle = locale.hourCycles[0];\n }\n if (hourCycle) {\n switch (hourCycle) {\n case 'h24':\n return 'k';\n case 'h23':\n return 'H';\n case 'h12':\n return 'h';\n case 'h11':\n return 'K';\n default:\n throw new Error('Invalid hourCycle');\n }\n }\n // TODO: Once hourCycle is fully supported remove the following with data generation\n var languageTag = locale.language;\n var regionTag;\n if (languageTag !== 'root') {\n regionTag = locale.maximize().region;\n }\n var hourCycles = timeData[regionTag || ''] ||\n timeData[languageTag || ''] ||\n timeData[\"\".concat(languageTag, \"-001\")] ||\n timeData['001'];\n return hourCycles[0];\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n els.forEach(function (el) {\n delete el.location;\n if (isSelectElement(el) || isPluralElement(el)) {\n for (var k in el.options) {\n delete el.options[k].location;\n pruneLocation(el.options[k].value);\n }\n }\n else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n delete el.style.location;\n }\n else if ((isDateElement(el) || isTimeElement(el)) &&\n isDateTimeSkeleton(el.style)) {\n delete el.style.location;\n }\n else if (isTagElement(el)) {\n pruneLocation(el.children);\n }\n });\n}\nexport function parse(message, opts) {\n if (opts === void 0) { opts = {}; }\n opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n var result = new Parser(message, opts).parse();\n if (result.err) {\n var error = SyntaxError(ErrorKind[result.err.kind]);\n // @ts-expect-error Assign to error object\n error.location = result.err.location;\n // @ts-expect-error Assign to error object\n error.originalMessage = result.err.message;\n throw error;\n }\n if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n pruneLocation(result.val);\n }\n return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\n","//\n// Main\n//\nexport function memoize(fn, options) {\n var cache = options && options.cache ? options.cache : cacheDefault;\n var serializer = options && options.serializer ? options.serializer : serializerDefault;\n var strategy = options && options.strategy ? options.strategy : strategyDefault;\n return strategy(fn, {\n cache: cache,\n serializer: serializer,\n });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.call(this, arg);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n var args = Array.prototype.slice.call(arguments, 3);\n var cacheKey = serializer(args);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.apply(this, args);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n var strategy = fn.length === 1 ? monadic : variadic;\n return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n this.cache[key] = value;\n};\nvar cacheDefault = {\n create: function create() {\n // @ts-ignore\n return new ObjectWithoutPrototypeCache();\n },\n};\nexport var strategies = {\n variadic: strategyVariadic,\n monadic: strategyMonadic,\n};\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n // When we have a placeholder but no value to format\n ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n // When value supplied is invalid\n ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n // When we need specific Intl API but it's not available\n ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n __extends(FormatError, _super);\n function FormatError(msg, code, originalMessage) {\n var _this = _super.call(this, msg) || this;\n _this.code = code;\n _this.originalMessage = originalMessage;\n return _this;\n }\n FormatError.prototype.toString = function () {\n return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n };\n return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n __extends(InvalidValueError, _super);\n function InvalidValueError(variableId, value, options, originalMessage) {\n return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n __extends(InvalidValueTypeError, _super);\n function InvalidValueTypeError(value, type, originalMessage) {\n return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n __extends(MissingValueError, _super);\n function MissingValueError(variableId, originalMessage) {\n return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n }\n return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n if (parts.length < 2) {\n return parts;\n }\n return parts.reduce(function (all, part) {\n var lastPart = all[all.length - 1];\n if (!lastPart ||\n lastPart.type !== PART_TYPE.literal ||\n part.type !== PART_TYPE.literal) {\n all.push(part);\n }\n else {\n lastPart.value += part.value;\n }\n return all;\n }, []);\n}\nexport function isFormatXMLElementFn(el) {\n return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n // Hot path for straight simple msg translations\n if (els.length === 1 && isLiteralElement(els[0])) {\n return [\n {\n type: PART_TYPE.literal,\n value: els[0].value,\n },\n ];\n }\n var result = [];\n for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n var el = els_1[_i];\n // Exit early for string parts.\n if (isLiteralElement(el)) {\n result.push({\n type: PART_TYPE.literal,\n value: el.value,\n });\n continue;\n }\n // TODO: should this part be literal type?\n // Replace `#` in plural rules with the actual numeric value.\n if (isPoundElement(el)) {\n if (typeof currentPluralValue === 'number') {\n result.push({\n type: PART_TYPE.literal,\n value: formatters.getNumberFormat(locales).format(currentPluralValue),\n });\n }\n continue;\n }\n var varName = el.value;\n // Enforce that all required values are provided by the caller.\n if (!(values && varName in values)) {\n throw new MissingValueError(varName, originalMessage);\n }\n var value = values[varName];\n if (isArgumentElement(el)) {\n if (!value || typeof value === 'string' || typeof value === 'number') {\n value =\n typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : '';\n }\n result.push({\n type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: value,\n });\n continue;\n }\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (isDateElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.date[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTimeElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.time[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : formats.time.medium;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isNumberElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.number[el.style]\n : isNumberSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n if (style && style.scale) {\n value =\n value *\n (style.scale || 1);\n }\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getNumberFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTagElement(el)) {\n var children = el.children, value_1 = el.value;\n var formatFn = values[value_1];\n if (!isFormatXMLElementFn(formatFn)) {\n throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n }\n var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n var chunks = formatFn(parts.map(function (p) { return p.value; }));\n if (!Array.isArray(chunks)) {\n chunks = [chunks];\n }\n result.push.apply(result, chunks.map(function (c) {\n return {\n type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: c,\n };\n }));\n }\n if (isSelectElement(el)) {\n var opt = el.options[value] || el.options.other;\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n continue;\n }\n if (isPluralElement(el)) {\n var opt = el.options[\"=\".concat(value)];\n if (!opt) {\n if (!Intl.PluralRules) {\n throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n }\n var rule = formatters\n .getPluralRules(locales, { type: el.pluralType })\n .select(value - (el.offset || 0));\n opt = el.options[rule] || el.options.other;\n }\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n continue;\n }\n }\n return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n if (!c2) {\n return c1;\n }\n return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n return all;\n }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n if (!configs) {\n return defaultConfig;\n }\n return Object.keys(defaultConfig).reduce(function (all, k) {\n all[k] = mergeConfig(defaultConfig[k], configs[k]);\n return all;\n }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\nfunction createDefaultFormatters(cache) {\n if (cache === void 0) { cache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n }; }\n return {\n getNumberFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n }),\n getDateTimeFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n }),\n };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n function IntlMessageFormat(message, locales, overrideFormats, opts) {\n var _this = this;\n if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n this.formatterCache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n };\n this.format = function (values) {\n var parts = _this.formatToParts(values);\n // Hot path for straight simple msg translations\n if (parts.length === 1) {\n return parts[0].value;\n }\n var result = parts.reduce(function (all, part) {\n if (!all.length ||\n part.type !== PART_TYPE.literal ||\n typeof all[all.length - 1] !== 'string') {\n all.push(part.value);\n }\n else {\n all[all.length - 1] += part.value;\n }\n return all;\n }, []);\n if (result.length <= 1) {\n return result[0] || '';\n }\n return result;\n };\n this.formatToParts = function (values) {\n return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n };\n this.resolvedOptions = function () {\n var _a;\n return ({\n locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n });\n };\n this.getAst = function () { return _this.ast; };\n // Defined first because it's used to build the format pattern.\n this.locales = locales;\n this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n if (typeof message === 'string') {\n this.message = message;\n if (!IntlMessageFormat.__parse) {\n throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n }\n var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n // Parse string messages into an AST.\n this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n }\n else {\n this.ast = message;\n }\n if (!Array.isArray(this.ast)) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n this.formatters =\n (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n }\n Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n get: function () {\n if (!IntlMessageFormat.memoizedDefaultLocale) {\n IntlMessageFormat.memoizedDefaultLocale =\n new Intl.NumberFormat().resolvedOptions().locale;\n }\n return IntlMessageFormat.memoizedDefaultLocale;\n },\n enumerable: false,\n configurable: true\n });\n IntlMessageFormat.memoizedDefaultLocale = null;\n IntlMessageFormat.resolveLocale = function (locales) {\n if (typeof Intl.Locale === 'undefined') {\n return;\n }\n var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n if (supportedLocales.length > 0) {\n return new Intl.Locale(supportedLocales[0]);\n }\n return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n };\n IntlMessageFormat.__parse = parse;\n // Default format options used as the prototype of the `formats` provided to the\n // constructor. These are used when constructing the internal Intl.NumberFormat\n // and Intl.DateTimeFormat instances.\n IntlMessageFormat.formats = {\n number: {\n integer: {\n maximumFractionDigits: 0,\n },\n currency: {\n style: 'currency',\n },\n percent: {\n style: 'percent',\n },\n },\n date: {\n short: {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n },\n medium: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n },\n long: {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n full: {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n },\n time: {\n short: {\n hour: 'numeric',\n minute: 'numeric',\n },\n medium: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n long: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n full: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n },\n };\n return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { __assign, __spreadArray } from \"tslib\";\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { UnsupportedFormatterError } from './error';\nexport function filterProps(props, allowlist, defaults) {\n if (defaults === void 0) { defaults = {}; }\n return allowlist.reduce(function (filtered, name) {\n if (name in props) {\n filtered[name] = props[name];\n }\n else if (name in defaults) {\n filtered[name] = defaults[name];\n }\n return filtered;\n }, {});\n}\nvar defaultErrorHandler = function (error) {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.error(error);\n }\n};\nvar defaultWarnHandler = function (warning) {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n};\nexport var DEFAULT_INTL_CONFIG = {\n formats: {},\n messages: {},\n timeZone: undefined,\n defaultLocale: 'en',\n defaultFormats: {},\n fallbackOnEmptyString: true,\n onError: defaultErrorHandler,\n onWarn: defaultWarnHandler,\n};\nexport function createIntlCache() {\n return {\n dateTime: {},\n number: {},\n message: {},\n relativeTime: {},\n pluralRules: {},\n list: {},\n displayNames: {},\n };\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(cache) {\n if (cache === void 0) { cache = createIntlCache(); }\n var RelativeTimeFormat = Intl.RelativeTimeFormat;\n var ListFormat = Intl.ListFormat;\n var DisplayNames = Intl.DisplayNames;\n var getDateTimeFormat = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n });\n var getNumberFormat = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n });\n var getPluralRules = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n });\n return {\n getDateTimeFormat: getDateTimeFormat,\n getNumberFormat: getNumberFormat,\n getMessageFormat: memoize(function (message, locales, overrideFormats, opts) {\n return new IntlMessageFormat(message, locales, overrideFormats, __assign({ formatters: {\n getNumberFormat: getNumberFormat,\n getDateTimeFormat: getDateTimeFormat,\n getPluralRules: getPluralRules,\n } }, (opts || {})));\n }, {\n cache: createFastMemoizeCache(cache.message),\n strategy: strategies.variadic,\n }),\n getRelativeTimeFormat: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (RelativeTimeFormat.bind.apply(RelativeTimeFormat, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.relativeTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: getPluralRules,\n getListFormat: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (ListFormat.bind.apply(ListFormat, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.list),\n strategy: strategies.variadic,\n }),\n getDisplayNames: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (DisplayNames.bind.apply(DisplayNames, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.displayNames),\n strategy: strategies.variadic,\n }),\n };\n}\nexport function getNamedFormat(formats, type, name, onError) {\n var formatType = formats && formats[type];\n var format;\n if (formatType) {\n format = formatType[name];\n }\n if (format) {\n return format;\n }\n onError(new UnsupportedFormatterError(\"No \".concat(type, \" format named: \").concat(name)));\n}\n","import { IntlFormatError } from './error';\nimport { filterProps, getNamedFormat } from './utils';\nvar NUMBER_FORMAT_OPTIONS = [\n 'style',\n 'currency',\n 'unit',\n 'unitDisplay',\n 'useGrouping',\n 'minimumIntegerDigits',\n 'minimumFractionDigits',\n 'maximumFractionDigits',\n 'minimumSignificantDigits',\n 'maximumSignificantDigits',\n // ES2020 NumberFormat\n 'compactDisplay',\n 'currencyDisplay',\n 'currencySign',\n 'notation',\n 'signDisplay',\n 'unit',\n 'unitDisplay',\n 'numberingSystem',\n // ES2023 NumberFormat\n 'trailingZeroDisplay',\n 'roundingPriority',\n 'roundingIncrement',\n 'roundingMode',\n];\nexport function getFormatter(_a, getNumberFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = ((format &&\n getNamedFormat(formats, 'number', format, onError)) ||\n {});\n var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults);\n return getNumberFormat(locale, filteredOptions);\n}\nexport function formatNumber(config, getNumberFormat, value, options) {\n if (options === void 0) { options = {}; }\n try {\n return getFormatter(config, getNumberFormat, options).format(value);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n }\n return String(value);\n}\nexport function formatNumberToParts(config, getNumberFormat, value, options) {\n if (options === void 0) { options = {}; }\n try {\n return getFormatter(config, getNumberFormat, options).formatToParts(value);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n }\n return [];\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];\nfunction getFormatter(_a, getRelativeTimeFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};\n var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);\n return getRelativeTimeFormat(locale, filteredOptions);\n}\nexport function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {\n if (options === void 0) { options = {}; }\n if (!unit) {\n unit = 'second';\n }\n var RelativeTimeFormat = Intl.RelativeTimeFormat;\n if (!RelativeTimeFormat) {\n config.onError(new FormatError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n try {\n return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));\n }\n return String(value);\n}\n","import { __assign } from \"tslib\";\nimport { filterProps, getNamedFormat } from './utils';\nimport { IntlFormatError } from './error';\nvar DATE_TIME_FORMAT_OPTIONS = [\n 'formatMatcher',\n 'timeZone',\n 'hour12',\n 'weekday',\n 'era',\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'timeZoneName',\n 'hourCycle',\n 'dateStyle',\n 'timeStyle',\n 'calendar',\n // 'dayPeriod',\n 'numberingSystem',\n 'fractionalSecondDigits',\n];\nexport function getFormatter(_a, type, getDateTimeFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError, timeZone = _a.timeZone;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = __assign(__assign({}, (timeZone && { timeZone: timeZone })), (format && getNamedFormat(formats, type, format, onError)));\n var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults);\n if (type === 'time' &&\n !filteredOptions.hour &&\n !filteredOptions.minute &&\n !filteredOptions.second &&\n !filteredOptions.timeStyle &&\n !filteredOptions.dateStyle) {\n // Add default formatting options if hour, minute, or second isn't defined.\n filteredOptions = __assign(__assign({}, filteredOptions), { hour: 'numeric', minute: 'numeric' });\n }\n return getDateTimeFormat(locale, filteredOptions);\n}\nexport function formatDate(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).format(date);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n }\n return String(date);\n}\nexport function formatTime(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).format(date);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n }\n return String(date);\n}\nexport function formatDateTimeRange(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var from = _a[0], to = _a[1], _b = _a[2], options = _b === void 0 ? {} : _b;\n var timeZone = config.timeZone, locale = config.locale, onError = config.onError;\n var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, timeZone ? { timeZone: timeZone } : {});\n try {\n return getDateTimeFormat(locale, filteredOptions).formatRange(from, to);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting date time range.', config.locale, e));\n }\n return String(from);\n}\nexport function formatDateToParts(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n }\n return [];\n}\nexport function formatTimeToParts(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n }\n return [];\n}\n","import { filterProps } from './utils';\nimport { IntlFormatError } from './error';\nimport { ErrorCode, FormatError } from 'intl-messageformat';\nvar PLURAL_FORMAT_OPTIONS = ['type'];\nexport function formatPlural(_a, getPluralRules, value, options) {\n var locale = _a.locale, onError = _a.onError;\n if (options === void 0) { options = {}; }\n if (!Intl.PluralRules) {\n onError(new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n try {\n return getPluralRules(locale, filteredOptions).select(value);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting plural.', locale, e));\n }\n return 'other';\n}\n","import { __assign } from \"tslib\";\nimport { invariant } from '@formatjs/ecma402-abstract';\nimport { IntlMessageFormat, } from 'intl-messageformat';\nimport { MissingTranslationError, MessageFormatError } from './error';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nfunction setTimeZoneInOptions(opts, timeZone) {\n return Object.keys(opts).reduce(function (all, k) {\n all[k] = __assign({ timeZone: timeZone }, opts[k]);\n return all;\n }, {});\n}\nfunction deepMergeOptions(opts1, opts2) {\n var keys = Object.keys(__assign(__assign({}, opts1), opts2));\n return keys.reduce(function (all, k) {\n all[k] = __assign(__assign({}, (opts1[k] || {})), (opts2[k] || {}));\n return all;\n }, {});\n}\nfunction deepMergeFormatsAndSetTimeZone(f1, timeZone) {\n if (!timeZone) {\n return f1;\n }\n var mfFormats = IntlMessageFormat.formats;\n return __assign(__assign(__assign({}, mfFormats), f1), { date: deepMergeOptions(setTimeZoneInOptions(mfFormats.date, timeZone), setTimeZoneInOptions(f1.date || {}, timeZone)), time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone)) });\n}\nexport var formatMessage = function (_a, state, messageDescriptor, values, opts) {\n var locale = _a.locale, formats = _a.formats, messages = _a.messages, defaultLocale = _a.defaultLocale, defaultFormats = _a.defaultFormats, fallbackOnEmptyString = _a.fallbackOnEmptyString, onError = _a.onError, timeZone = _a.timeZone, defaultRichTextElements = _a.defaultRichTextElements;\n if (messageDescriptor === void 0) { messageDescriptor = { id: '' }; }\n var msgId = messageDescriptor.id, defaultMessage = messageDescriptor.defaultMessage;\n // `id` is a required field of a Message Descriptor.\n invariant(!!msgId, \"[@formatjs/intl] An `id` must be provided to format a message. You can either:\\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\\nto autofix this issue\");\n var id = String(msgId);\n var message = \n // In case messages is Object.create(null)\n // e.g import('foo.json') from webpack)\n // See https://github.com/formatjs/formatjs/issues/1914\n messages &&\n Object.prototype.hasOwnProperty.call(messages, id) &&\n messages[id];\n // IMPORTANT: Hot path if `message` is AST with a single literal node\n if (Array.isArray(message) &&\n message.length === 1 &&\n message[0].type === TYPE.literal) {\n return message[0].value;\n }\n // IMPORTANT: Hot path straight lookup for performance\n if (!values &&\n message &&\n typeof message === 'string' &&\n !defaultRichTextElements) {\n return message.replace(/'\\{(.*?)\\}'/gi, \"{$1}\");\n }\n values = __assign(__assign({}, defaultRichTextElements), (values || {}));\n formats = deepMergeFormatsAndSetTimeZone(formats, timeZone);\n defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone);\n if (!message) {\n if (fallbackOnEmptyString === false && message === '') {\n return message;\n }\n if (!defaultMessage ||\n (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())) {\n // This prevents warnings from littering the console in development\n // when no `messages` are passed into the for the\n // default locale.\n onError(new MissingTranslationError(messageDescriptor, locale));\n }\n if (defaultMessage) {\n try {\n var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting default message for: \\\"\".concat(id, \"\\\", rendering default message verbatim\"), locale, messageDescriptor, e));\n return typeof defaultMessage === 'string' ? defaultMessage : id;\n }\n }\n return id;\n }\n // We have the translated message\n try {\n var formatter = state.getMessageFormat(message, locale, formats, __assign({ formatters: state }, (opts || {})));\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting message: \\\"\".concat(id, \"\\\", using \").concat(defaultMessage ? 'default message' : 'id', \" as fallback.\"), locale, messageDescriptor, e));\n }\n if (defaultMessage) {\n try {\n var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting the default message for: \\\"\".concat(id, \"\\\", rendering message verbatim\"), locale, messageDescriptor, e));\n }\n }\n if (typeof message === 'string') {\n return message;\n }\n if (typeof defaultMessage === 'string') {\n return defaultMessage;\n }\n return id;\n};\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n // Cannot count string length via Number.toString because it may use scientific notation\n // for very small or very large numbers.\n return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n if (typeof s.repeat === 'function') {\n return s.repeat(times);\n }\n var arr = new Array(times);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = s;\n }\n return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n var slots = map.get(pl);\n slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nexport function getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n var fields = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n var slots = map.get(pl);\n if (!slots) {\n throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n }\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n return patternPart.type === 'literal';\n}\n/*\n 17 ECMAScript Standard Built-in Objects:\n Every built-in Function object, including constructors, that is not\n identified as an anonymous function has a name property whose value\n is a String.\n\n Unless otherwise specified, the name property of a built-in Function\n object, if it exists, has the attributes { [[Writable]]: false,\n [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n var value = _a.value;\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: value,\n });\n}\n/**\n * 7.3.5 CreateDataProperty\n * @param target\n * @param name\n * @param value\n */\nexport function createDataProperty(target, name, value) {\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value,\n });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n","import { __assign } from \"tslib\";\nimport { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar LIST_FORMAT_OPTIONS = [\n 'type',\n 'style',\n];\nvar now = Date.now();\nfunction generateToken(i) {\n return \"\".concat(now, \"_\").concat(i, \"_\").concat(now);\n}\nexport function formatList(opts, getListFormat, values, options) {\n if (options === void 0) { options = {}; }\n var results = formatListToParts(opts, getListFormat, values, options).reduce(function (all, el) {\n var val = el.value;\n if (typeof val !== 'string') {\n all.push(val);\n }\n else if (typeof all[all.length - 1] === 'string') {\n all[all.length - 1] += val;\n }\n else {\n all.push(val);\n }\n return all;\n }, []);\n return results.length === 1 ? results[0] : results.length === 0 ? '' : results;\n}\nexport function formatListToParts(_a, getListFormat, values, options) {\n var locale = _a.locale, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var ListFormat = Intl.ListFormat;\n if (!ListFormat) {\n onError(new FormatError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, LIST_FORMAT_OPTIONS);\n try {\n var richValues_1 = {};\n var serializedValues = values.map(function (v, i) {\n if (typeof v === 'object') {\n var id = generateToken(i);\n richValues_1[id] = v;\n return id;\n }\n return String(v);\n });\n return getListFormat(locale, filteredOptions)\n .formatToParts(serializedValues)\n .map(function (part) {\n return part.type === 'literal'\n ? part\n : __assign(__assign({}, part), { value: richValues_1[part.value] || part.value });\n });\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting list.', locale, e));\n }\n // @ts-ignore\n return values;\n}\n","import { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar DISPLAY_NAMES_OPTONS = [\n 'style',\n 'type',\n 'fallback',\n 'languageDisplay',\n];\nexport function formatDisplayName(_a, getDisplayNames, value, options) {\n var locale = _a.locale, onError = _a.onError;\n var DisplayNames = Intl.DisplayNames;\n if (!DisplayNames) {\n onError(new FormatError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, DISPLAY_NAMES_OPTONS);\n try {\n return getDisplayNames(locale, filteredOptions).of(value);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting display name.', locale, e));\n }\n}\n","import { __assign } from \"tslib\";\nimport { createFormatters, DEFAULT_INTL_CONFIG } from './utils';\nimport { InvalidConfigError, MissingDataError } from './error';\nimport { formatNumber, formatNumberToParts } from './number';\nimport { formatRelativeTime } from './relativeTime';\nimport { formatDate, formatDateToParts, formatTime, formatTimeToParts, formatDateTimeRange, } from './dateTime';\nimport { formatPlural } from './plural';\nimport { formatMessage } from './message';\nimport { formatList, formatListToParts } from './list';\nimport { formatDisplayName } from './displayName';\nfunction messagesContainString(messages) {\n var firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined;\n return typeof firstMessage === 'string';\n}\nfunction verifyConfigMessages(config) {\n if (config.onWarn &&\n config.defaultRichTextElements &&\n messagesContainString(config.messages || {})) {\n config.onWarn(\"[@formatjs/intl] \\\"defaultRichTextElements\\\" was specified but \\\"message\\\" was not pre-compiled. \\nPlease consider using \\\"@formatjs/cli\\\" to pre-compile your messages for performance.\\nFor more details see https://formatjs.io/docs/getting-started/message-distribution\");\n }\n}\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl(config, cache) {\n var formatters = createFormatters(cache);\n var resolvedConfig = __assign(__assign({}, DEFAULT_INTL_CONFIG), config);\n var locale = resolvedConfig.locale, defaultLocale = resolvedConfig.defaultLocale, onError = resolvedConfig.onError;\n if (!locale) {\n if (onError) {\n onError(new InvalidConfigError(\"\\\"locale\\\" was not configured, using \\\"\".concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details\")));\n }\n // Since there's no registered locale data for `locale`, this will\n // fallback to the `defaultLocale` to make sure things can render.\n // The `messages` are overridden to the `defaultProps` empty object\n // to maintain referential equality across re-renders. It's assumed\n // each contains a `defaultMessage` prop.\n resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n }\n else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n verifyConfigMessages(resolvedConfig);\n return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), \n // @ts-expect-error TODO: will get to this later\n formatMessage: formatMessage.bind(null, resolvedConfig, formatters), \n // @ts-expect-error TODO: will get to this later\n $t: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @private\n * @hide\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default class FormatterBase {\n get options() {\n return [];\n }\n}\n_defineProperty(FormatterBase, \"type\", void 0);","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n/**\n * @private\n * @hide\n */\nexport default class FormatDate extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatDate(value, opts);\n }\n}\n_defineProperty(FormatDate, \"type\", 'date');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatList extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatList(value, opts);\n }\n}\n_defineProperty(FormatList, \"type\", 'list');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { htmlSafe, isHTMLSafe } from '@ember/template';\nimport Ember from 'ember';\nimport Formatter from './-base';\nconst {\n Handlebars: {\n // @ts-ignore: Upstream types are incomplete.\n Utils: {\n escapeExpression\n }\n }\n} = Ember;\nfunction escapeOptions(object) {\n if (typeof object !== 'object') {\n return;\n }\n const escapedOpts = {};\n Object.keys(object).forEach(key => {\n const val = object[key];\n if (isHTMLSafe(val)) {\n // If the option is an instance of Ember SafeString,\n // we don't want to pass it into the formatter, since the\n // formatter won't know what to do with it. Instead, we cast\n // the SafeString to a regular string using `toHTML`.\n // Since it was already marked as safe we should *not* escape it.\n // @ts-ignore: see comment above\n escapedOpts[key] = val.toHTML();\n } else if (typeof val === 'string') {\n // @ts-ignore: see comment above\n escapedOpts[key] = escapeExpression(val);\n } else {\n // @ts-ignore: see comment above\n escapedOpts[key] = val; // copy as-is\n }\n });\n return escapedOpts;\n}\n/**\n * @private\n * @hide\n */\nexport default class FormatMessage extends Formatter {\n // ! Function overloads are not passed through generic types for reasons that\n // evade my knowledge. ¯\\_(ツ)_/¯\n // For this reason these types need to be manually copied over to the\n // `IntlService#formatMessage`.\n\n format(intl, stringOrDesc, options) {\n const isHTMLSafe = options && options.htmlSafe;\n // Empty string is considered an err in ember-intl\n // if (typeof stringOrDesc === 'string' && !stringOrDesc) {\n // return stringOrDesc;\n // }\n const escapedOptions = isHTMLSafe ? escapeOptions(options) : options;\n const desc = stringOrDesc && typeof stringOrDesc === 'object' ? stringOrDesc : {\n id: stringOrDesc,\n defaultMessage: stringOrDesc\n };\n const result = intl.formatMessage(desc, escapedOptions, {\n ignoreTag: true\n });\n return isHTMLSafe ? htmlSafe(result) : result;\n }\n}\n_defineProperty(FormatMessage, \"type\", 'message');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatNumber extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatNumber(value, opts);\n }\n}\n_defineProperty(FormatNumber, \"type\", 'number');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { assert } from '@ember/debug';\nimport Formatter from './-base';\n\n/**\n * An object with some or all of properties of `options` parameter\n * of `Intl.RelativeTimeFormat` constructor.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).\n *\n * [Specification](https://tc39.es/ecma402/#sec-InitializeRelativeTimeFormat).\n */\n\n/**\n * @private\n * @hide\n */\nexport default class FormatRelative extends Formatter {\n format(intl, value, formatOptions) {\n assert(`[ember-intl] FormatRelative: Missing option`, formatOptions);\n const {\n format\n } = formatOptions;\n let unit = formatOptions.unit;\n let opts = formatOptions;\n if (!unit && format && intl.formats.relative && (opts = intl.formats.relative[format])) {\n unit = opts.unit;\n }\n assert(`[ember-intl] FormatRelative: 'formatOptions' are missing a 'unit'. ${JSON.stringify(formatOptions)}`, unit);\n return intl.formatRelativeTime(value, unit, opts);\n }\n}\n_defineProperty(FormatRelative, \"type\", 'relative');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatTime extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatTime(value, opts);\n }\n}\n_defineProperty(FormatTime, \"type\", 'time');","/**\n * @private\n * @hide\n */\nconst proto = Object.create(null, {\n constructor: {\n value: undefined,\n enumerable: false,\n writable: true\n }\n});\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction EmptyObject() {}\nEmptyObject.prototype = proto;\n\n/**\n * @private\n * @hide\n */\nexport default EmptyObject;","import EmptyObject from './empty-object';\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * @private\n * @hide\n */\nexport default function flatten(src) {\n const result = new EmptyObject();\n for (const key in src) {\n if (!hasOwnProperty.call(src, key)) {\n continue;\n }\n const value = src[key];\n if (typeof value === 'object' && value) {\n const hash = flatten(value);\n for (const suffix in hash) {\n const hasSuffix = hash[suffix];\n if (typeof hasSuffix !== 'undefined') {\n result[`${key}.${suffix}`] = hasSuffix;\n }\n }\n } else {\n if (typeof value !== 'undefined') {\n result[key] = value;\n }\n }\n }\n return result;\n}","/**\n * NOTE: this is a generated file that is produced at build time during\n * `treeForAddon`, if `publicOnly` is disabled.\n *\n * @private\n * @hide\n */\nexport default [];","/**\n * @private\n * @hide\n */\nexport default function normalizeLocale(localeName) {\n if (typeof localeName === 'string') {\n return localeName.replace(/_/g, '-').toLowerCase();\n }\n}","var _class, _descriptor, _descriptor2;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { getOwner } from '@ember/application';\nimport { makeArray } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { cancel, next } from '@ember/runloop';\nimport Service from '@ember/service';\nimport { createIntl, createIntlCache, IntlErrorCode } from '@formatjs/intl';\nimport { tracked } from '@glimmer/tracking';\nimport EventEmitter from 'eventemitter3';\nimport { FormatDate, FormatList, FormatMessage, FormatNumber, FormatRelative, FormatTime } from '../-private/formatters';\nimport flatten from '../-private/utils/flatten';\nimport getDOM from '../-private/utils/get-dom';\nimport hydrate from '../-private/utils/hydrate';\nimport isArrayEqual from '../-private/utils/is-array-equal';\nimport normalizeLocale from '../-private/utils/normalize-locale';\nlet IntlService = (_class = class IntlService extends Service {\n /**\n * Returns an array of registered locale names\n *\n */\n get locales() {\n return Object.keys(this._intls);\n }\n\n /** @public **/\n set locale(localeName) {\n const proposed = makeArray(localeName).map(normalizeLocale);\n if (!isArrayEqual(proposed, this._locale)) {\n this._locale = proposed;\n cancel(this._timer);\n this._timer = next(() => {\n this._ee.emit('localeChanged');\n this._updateDocumentLanguage(this._locale);\n });\n }\n }\n get locale() {\n return this._locale;\n }\n\n /**\n * Returns the first locale of the currently active locales\n *\n */\n get primaryLocale() {\n return this.locale[0];\n }\n\n /** @public **/\n\n /** @public **/\n constructor() {\n super(...arguments);\n _defineProperty(this, \"formatRelative\", createFormatterProxy('relative'));\n /** @public **/\n _defineProperty(this, \"formatMessage\", createFormatterProxy('message'));\n /** @public **/\n _defineProperty(this, \"formatNumber\", createFormatterProxy('number'));\n /** @public **/\n _defineProperty(this, \"formatTime\", createFormatterProxy('time'));\n /** @public **/\n _defineProperty(this, \"formatDate\", createFormatterProxy('date'));\n /** @public **/\n _defineProperty(this, \"formatList\", createFormatterProxy('list'));\n /** @private **/\n _initializerDefineProperty(this, \"_locale\", _descriptor, this);\n /** @private **/\n _defineProperty(this, \"_timer\", null);\n /** @private **/\n _defineProperty(this, \"_formats\", null);\n /** @private **/\n _defineProperty(this, \"_formatters\", null);\n /** @private */\n _initializerDefineProperty(this, \"_intls\", _descriptor2, this);\n /**\n * @private\n * @type {EventEmitter}\n */\n _defineProperty(this, \"_ee\", null);\n _defineProperty(this, \"_cache\", createIntlCache());\n const initialLocale = this.locale || ['en-us'];\n this._intls = {};\n this._ee = new EventEmitter();\n this.setLocale(initialLocale);\n this._owner = getOwner(this);\n this._formatters = this._createFormatters();\n if (!this._formats) {\n this._formats = this._owner.resolveRegistration('formats:main') || {};\n }\n this.onIntlError = this.onIntlError.bind(this);\n this.getIntl = this.getIntl.bind(this);\n this.getOrCreateIntl = this.getOrCreateIntl.bind(this);\n hydrate(this);\n }\n willDestroy() {\n super.willDestroy(...arguments);\n cancel(this._timer);\n }\n onIntlError(err) {\n if (err.code !== IntlErrorCode.MISSING_TRANSLATION) {\n throw err;\n }\n }\n\n /** @private **/\n onError({\n /* kind, */error\n }) {\n throw error;\n }\n\n /** @public **/\n lookup(key, localeName, options = {}) {\n const localeNames = this._localeWithDefault(localeName);\n let translation;\n for (let i = 0; i < localeNames.length; i++) {\n const messages = this.translationsFor(localeNames[i]);\n if (!messages) {\n continue;\n }\n translation = messages[key];\n if (translation !== undefined) {\n break;\n }\n }\n if (translation === undefined && options.resilient !== true) {\n const missingMessage = this._owner.resolveRegistration('util:intl/missing-message');\n return missingMessage.call(this, key, localeNames, options);\n }\n return translation;\n }\n\n /**\n * @private\n */\n getIntl(locale) {\n const resolvedLocale = Array.isArray(locale) ? locale[0] : locale;\n return this._intls[resolvedLocale];\n }\n getOrCreateIntl(locale, messages) {\n const resolvedLocale = Array.isArray(locale) ? locale[0] : locale;\n const existingIntl = this._intls[resolvedLocale];\n if (!existingIntl) {\n this._intls = {\n ...this._intls,\n [resolvedLocale]: this.createIntl(resolvedLocale, messages)\n };\n } else if (messages) {\n this._intls = {\n ...this._intls,\n [resolvedLocale]: this.createIntl(resolvedLocale, {\n ...(existingIntl.messages || {}),\n ...messages\n })\n };\n }\n return this._intls[resolvedLocale];\n }\n\n /**\n * @private\n * @param {String} locale Locale of intl obj to create\n */\n createIntl(locale, messages = {}) {\n const resolvedLocale = Array.isArray(locale) ? locale[0] : locale;\n return createIntl({\n locale: resolvedLocale,\n defaultLocale: resolvedLocale,\n formats: this._formats,\n defaultFormats: this._formats,\n onError: this.onIntlError,\n messages\n }, this._cache);\n }\n validateKeys(keys) {\n return keys.forEach(key => {\n assert(`[ember-intl] expected translation key \"${key}\" to be of type String but received: \"${typeof key}\"`, typeof key === 'string');\n });\n }\n\n /** @public **/\n t(key, options = {}) {\n let keys = [key];\n if (options.default) {\n if (Array.isArray(options.default)) {\n keys = [...keys, ...options.default];\n } else if (typeof options.default === 'string') {\n keys = [...keys, options.default];\n }\n }\n this.validateKeys(keys);\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n const message = this.lookup(key, options.locale, {\n ...options,\n // Note: last iteration will throw with the last key that was missing\n // in the future maybe the thrown error should include all the keys to help debugging\n resilient: keys.length - 1 !== index\n });\n\n // @formatjs/intl consider empty message to be an error\n if (message === '' || typeof message === 'number') {\n return message;\n }\n if (message) {\n return this.formatMessage({\n id: key,\n defaultMessage: message\n }, options);\n }\n }\n }\n\n /** @public **/\n exists(key, localeName) {\n const localeNames = this._localeWithDefault(localeName);\n assert(`[ember-intl] locale is unset, cannot lookup '${key}'`, Array.isArray(localeNames) && localeNames.length);\n return localeNames.some(localeName => key in (this.getIntl(localeName)?.messages || {}));\n }\n\n /** @public */\n setLocale(locale) {\n assert(`[ember-intl] no locale has been set! See: https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-ember-intl`, locale);\n this.locale = locale;\n this.getOrCreateIntl(locale);\n }\n\n /** @public **/\n addTranslations(localeName, payload) {\n const locale = normalizeLocale(localeName);\n this.getOrCreateIntl(locale, flatten(payload));\n }\n\n /** @public **/\n translationsFor(localeName) {\n const locale = normalizeLocale(localeName);\n return this.getIntl(locale)?.messages;\n }\n\n /** @private **/\n _localeWithDefault(localeName) {\n if (!localeName) {\n return this._locale || [];\n }\n if (typeof localeName === 'string') {\n return makeArray(localeName).map(normalizeLocale);\n }\n if (Array.isArray(localeName)) {\n return localeName.map(normalizeLocale);\n }\n }\n\n /** @private **/\n _updateDocumentLanguage(locales) {\n const dom = getDOM(this);\n if (dom) {\n const [primaryLocale] = locales;\n const html = dom.documentElement;\n html.setAttribute('lang', primaryLocale);\n }\n }\n\n /** @private */\n _createFormatters() {\n return {\n message: new FormatMessage(),\n relative: new FormatRelative(),\n number: new FormatNumber(),\n time: new FormatTime(),\n date: new FormatDate(),\n list: new FormatList()\n };\n }\n /**\n * @private\n * @param fn\n * @param context\n */\n onLocaleChanged(fn, context) {\n this._ee.on('localeChanged', fn, context);\n registerDestructor(this, () => {\n this._ee.off('localeChanged', fn, context);\n });\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"locale\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"locale\"), _class.prototype), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_locale\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_intls\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _class);\nexport { IntlService as default };\nfunction createFormatterProxy(name) {\n return function serviceFormatterProxy(value, formatOptions) {\n let locale;\n let intl;\n if (formatOptions && formatOptions.locale) {\n locale = this._localeWithDefault(formatOptions.locale);\n // Cannot use getOrCreateIntl since it triggers a re-render which\n // might cause infinite loop\n // This is also a case we're not optimizing for so let it take\n // the slow path\n intl = this.createIntl(locale);\n } else {\n locale = this.locale;\n intl = this.getIntl(locale);\n }\n return this._formatters[name].format(intl, value, formatOptions);\n };\n}","import { isArray } from '@ember/array';\n\n/**\n * @private\n * @hide\n */\nexport default function isArrayEqual(a, b) {\n if (!isArray(a) || !isArray(b)) {\n return false;\n }\n if (a === b) {\n return true;\n }\n return a.toString() === b.toString();\n}","import translations from '../../translations';\n\n/**\n * @private\n * @hide\n */\nexport default function hydrate(service) {\n translations.forEach(([locale, translations]) => {\n service.addTranslations(locale, translations);\n });\n}","import { getOwner } from '@ember/application';\n\n// adjusted from https://github.com/yapplabs/ember-wormhole/blob/0.5.4/addon/utils/dom.js#L45-L63\n//\n// Private Ember API usage. Get the dom implementation used by the current\n// renderer, be it native browser DOM or Fastboot SimpleDOM\n/**\n * @private\n * @hide\n */\nexport default function getDOM(context) {\n let {\n renderer\n } = context;\n if (!renderer || !renderer._dom) {\n // pre glimmer2\n let container = getOwner ? getOwner(context) : context.container;\n let documentService = container.lookup('service:-document');\n if (documentService) {\n return documentService;\n }\n renderer = container.lookup('renderer:-dom');\n }\n if (renderer._dom && renderer._dom.document) {\n // pre Ember 2.6\n return renderer._dom.document;\n }\n return null;\n}","import require from 'require';\nfunction resolveInitializer(moduleName) {\n var module = require(moduleName, null, null, true);\n if (!module) {\n throw new Error(moduleName + ' must export an initializer.');\n }\n var initializer = module['default'];\n if (!initializer) {\n throw new Error(moduleName + ' must have a default export');\n }\n if (!initializer.name) {\n initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);\n }\n return initializer;\n}\nfunction registerInitializers(app, moduleNames) {\n for (var i = 0; i < moduleNames.length; i++) {\n app.initializer(resolveInitializer(moduleNames[i]));\n }\n}\nfunction registerInstanceInitializers(app, moduleNames) {\n for (var i = 0; i < moduleNames.length; i++) {\n app.instanceInitializer(resolveInitializer(moduleNames[i]));\n }\n}\nfunction _endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\n/**\n * Configure your application as it boots\n */\nexport default function loadInitializers(app, prefix) {\n var initializerPrefix = prefix + '/initializers/';\n var instanceInitializerPrefix = prefix + '/instance-initializers/';\n var initializers = [];\n var instanceInitializers = [];\n // this is 2 pass because generally the first pass is the problem\n // and is reduced, and resolveInitializer has potential to deopt\n var moduleNames = Object.keys(requirejs._eak_seen);\n for (var i = 0; i < moduleNames.length; i++) {\n var moduleName = moduleNames[i];\n if (moduleName.lastIndexOf(initializerPrefix, 0) === 0) {\n if (!_endsWith(moduleName, '-test')) {\n initializers.push(moduleName);\n }\n } else if (moduleName.lastIndexOf(instanceInitializerPrefix, 0) === 0) {\n if (!_endsWith(moduleName, '-test')) {\n instanceInitializers.push(moduleName);\n }\n }\n }\n registerInitializers(app, initializers);\n registerInstanceInitializers(app, instanceInitializers);\n}","import { isPresent } from '@ember/utils';\n/**\n * Present config options\n * @see {@link https://api.emberjs.com/ember/3.28/functions/@ember%2Futils/isPresent|isPresent}\n * @param {Options} opts\n * @returns {Options}\n */\nexport function compact(opts) {\n return includeKeys(opts, key => isPresent(opts[key]));\n}\n\n/**\n * Config options without `excludedKeys`\n * @param {Options} opts\n * @param {string[]} excludedKeys\n * @returns {Options}\n */\nexport function without(opts, excludedKeys) {\n return includeKeys(opts, key => !excludedKeys.includes(key));\n}\n\n/**\n * Config options with allowed keys\n * @param {Options} opts\n * @param {(key:string) => boolean} include\n * @returns {Options}\n */\nfunction includeKeys(opts, include) {\n const newOpts = {};\n for (const key in opts) {\n if (include(key)) newOpts[key] = opts[key];\n }\n return newOpts;\n}\n\n/**\n * Check if given object has any own properties\n * @param {Record} obj\n * @returns {boolean}\n */\nexport function hasOwnProperties(obj) {\n return Object.getOwnPropertyNames(obj).length > 0;\n}\nexport default {\n compact,\n without,\n hasOwnProperties\n};","import BaseAdapter from './base';\nimport { assert } from '@ember/debug';\nimport { without, compact, hasOwnProperties } from 'ember-metrics/-private/utils/object-transforms';\nimport removeFromDOM from 'ember-metrics/-private/utils/remove-from-dom';\nexport default class Pendo extends BaseAdapter {\n toStringExtension() {\n return 'Pendo';\n }\n\n // eslint-disable-next-line ember/classic-decorator-hooks\n init() {\n const {\n apiKey\n } = this.config;\n assert(`[ember-metrics] You must pass a valid \\`apiKey\\` to the ${this.toString()} adapter`, apiKey);\n this._injectScript(apiKey);\n window.pendo.initialize(this.config);\n }\n\n /* eslint-disable */\n // prettier-ignore\n _injectScript(apiKey) {\n (function (p, e, n, d, o) {\n var v, w, x, y, z;\n o = p[d] = p[d] || {};\n o._q = [];\n v = ['initialize', 'identify', 'updateOptions', 'pageLoad', 'track'];\n for (w = 0, x = v.length; w < x; ++w) (function (m) {\n o[m] = o[m] || function () {\n o._q[m === v[0] ? 'unshift' : 'push']([m].concat([].slice.call(arguments, 0)));\n };\n })(v[w]);\n y = e.createElement(n);\n y.async = !0;\n y.src = `https://cdn.pendo.io/agent/static/${apiKey}/pendo.js`;\n z = e.getElementsByTagName(n)[0];\n z.parentNode.insertBefore(y, z);\n })(window, document, 'script', 'pendo');\n }\n /* eslint-enable */\n\n identify(options = {}) {\n const compactedOptions = compact(options);\n window.pendo.identify(compactedOptions);\n }\n trackEvent(options = {}) {\n const compactedOptions = compact(options);\n const {\n event\n } = compactedOptions;\n const props = without(compactedOptions, 'event');\n if (hasOwnProperties(props)) {\n window.pendo.track(event, props);\n } else {\n window.pendo.track(event);\n }\n }\n trackPage(options = {}) {\n const event = {\n event: 'page viewed'\n };\n const mergedOptions = {\n ...event,\n ...options\n };\n this.trackEvent(mergedOptions);\n }\n willDestroy() {\n removeFromDOM('script[src*=\"pendo.js\"]');\n delete window.pendo;\n }\n}","/**\n * Remove scripts defined by selectors from DOM.\n *\n * @param selectors One or more DOM selectors to match against.\n */\nexport default function removeFromDOM(selectors) {\n document.querySelectorAll(selectors).forEach(el => {\n el.parentElement?.removeChild(el);\n });\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Service from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { dasherize } from '@ember/string';\nimport { getOwner } from '@ember/application';\nexport default class Metrics extends Service {\n /**\n * When the Service is created, activate adapters that were specified in the\n * configuration. This config is injected into the Service as `options`.\n */\n constructor() {\n super(...arguments);\n /**\n * Cached adapters to reduce multiple expensive lookups.\n *\n * @property _adapters\n * @private\n * @type Object\n * @default null\n */\n _defineProperty(this, \"_adapters\", {});\n /**\n * Contextual information attached to each call to an adapter. Often you'll\n * want to include things like `currentUser.name` with every event or page\n * view that's tracked. Any properties that you bind to `metrics.context`\n * will be merged into the options for every service call.\n *\n * @property context\n * @type Object\n * @default null\n */\n _defineProperty(this, \"context\", {});\n /**\n * Indicates whether calls to the service will be forwarded to the adapters.\n * This is determined by investigating the user's doNotTrack settings.\n *\n * Note that the doNotTrack specification is deprecated, and could stop\n * working at any minute. As such should this feature not be detected we\n * presume tracking is permitted.\n *\n * @property enabled\n * @type Boolean\n */\n _defineProperty(this, \"enabled\", typeof navigator !== 'undefined' && navigator.doNotTrack !== '1');\n /**\n * Environment the host application is running in (e.g. development or production).\n */\n _defineProperty(this, \"appEnvironment\", null);\n const owner = getOwner(this);\n owner.registerOptionsForType('ember-metrics@metrics-adapter', {\n instantiate: false\n });\n owner.registerOptionsForType('metrics-adapter', {\n instantiate: false\n });\n const config = owner.factoryFor('config:environment').class;\n const {\n metricsAdapters = []\n } = config;\n const {\n environment = 'development'\n } = config;\n this._options = {\n metricsAdapters,\n environment\n };\n this.appEnvironment = environment;\n this.activateAdapters(metricsAdapters);\n }\n\n /**\n * Instantiates adapters from passed adapter options and caches them for future retrieval.\n *\n * @method activateAdapters\n * @param {Array} adapterOptions\n * @return {Object} instantiated adapters\n */\n activateAdapters(adapterOptions = []) {\n if (!this.enabled) {\n return;\n }\n const adaptersForEnv = this._adaptersForEnv(adapterOptions);\n const activeAdapters = {};\n for (let {\n name,\n config\n } of adaptersForEnv) {\n let adapterClass = this._lookupAdapter(name);\n if (typeof FastBoot === 'undefined' || adapterClass.supportsFastBoot) {\n activeAdapters[name] = this._adapters[name] || this._activateAdapter({\n adapterClass,\n config\n });\n }\n }\n this._adapters = activeAdapters;\n return this._adapters;\n }\n\n /**\n * Returns all adapterOptions that should be activated in the current application environment.\n * Defaults to all environments if the option is `all` or undefined.\n *\n * @method adaptersForEnv\n * @param {Array} adapterOptions\n * @private\n * @return {Array} - adapter options in the current environment\n */\n _adaptersForEnv(adapterOptions = []) {\n return adapterOptions.filter(({\n environments = ['all']\n }) => {\n return environments.includes('all') || environments.includes(this.appEnvironment);\n });\n }\n\n /**\n * Looks up the adapter from the container. Prioritizes the consuming app's\n * adapters over the addon's adapters.\n *\n * @method _lookupAdapter\n * @param {String} adapterName\n * @private\n * @return {Adapter} a local adapter or an adapter from the addon\n */\n _lookupAdapter(adapterName) {\n assert('[ember-metrics] Could not find metrics adapter without a name.', adapterName);\n const availableAdapter = getOwner(this).lookup(`ember-metrics@metrics-adapter:${dasherize(adapterName)}`);\n const localAdapter = getOwner(this).lookup(`metrics-adapter:${dasherize(adapterName)}`);\n const adapter = localAdapter || availableAdapter;\n assert(`[ember-metrics] Could not find metrics adapter ${adapterName}.`, adapter);\n return adapter;\n }\n\n /**\n * Instantiates an adapter.\n *\n * @method _activateAdapter\n * @param {Object}\n * @private\n * @return {Adapter}\n */\n _activateAdapter({\n adapterClass,\n config\n }) {\n const decoratedClass = class decoratedClass extends adapterClass {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"identify\", this.identify);\n _defineProperty(this, \"alias\", this.alias);\n _defineProperty(this, \"trackEvent\", this.trackEvent);\n _defineProperty(this, \"trackPage\", this.trackPage);\n }\n };\n return new decoratedClass(config, getOwner(this));\n }\n identify() {\n this.invoke('identify', ...arguments);\n }\n alias() {\n this.invoke('alias', ...arguments);\n }\n trackEvent() {\n this.invoke('trackEvent', ...arguments);\n }\n trackPage() {\n this.invoke('trackPage', ...arguments);\n }\n\n /**\n * Invokes a method on the passed adapter, or across all activated adapters if not passed.\n *\n * @method invoke\n * @param {String} methodName\n * @param {Rest} args\n * @return {Void}\n */\n invoke(methodName, ...args) {\n if (!this.enabled) {\n return;\n }\n let selectedAdapterNames, options;\n if (args.length > 1) {\n selectedAdapterNames = makeArray(args[0]);\n options = args[1];\n } else {\n selectedAdapterNames = Object.keys(this._adapters);\n options = args[0];\n }\n for (let adapterName of selectedAdapterNames) {\n let adapter = this._adapters[adapterName];\n adapter && adapter[methodName]({\n ...this.context,\n ...options\n });\n }\n }\n\n /**\n * On teardown, destroy cached adapters together with the Service.\n *\n * @method willDestroy\n * @return {Void}\n */\n willDestroy() {\n Object.values(this._adapters).forEach(adapter => adapter.destroy());\n }\n}\nfunction makeArray(maybeArray) {\n return Array.isArray(maybeArray) ? Array.from(maybeArray) : Array(maybeArray);\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport emberObject from '@ember/object';\nimport { assert, deprecate } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { typeOf } from '@ember/utils';\nimport { setOwner } from '@ember/application';\nfunction makeToString(ret) {\n return () => ret;\n}\nexport default class BaseAdapter extends emberObject {\n constructor(config, owner) {\n super(...arguments);\n _defineProperty(this, \"metrics\", null);\n _defineProperty(this, \"config\", null);\n setOwner(this, owner);\n this.config = config;\n this.init();\n }\n\n // eslint-disable-next-line ember/classic-decorator-hooks\n init() {\n assert(`[ember-metrics] ${this.toString()} must implement the init hook!`);\n }\n willDestroy() {\n assert(`[ember-metrics] ${this.toString()} must implement the willDestroy hook!`);\n }\n get() {\n deprecate('Metrics Adapters must not use EmberObject methods as they will be implemented as native classes in the next major release', false, {\n id: 'ember-metrics-issue-287',\n for: 'ember-metrics',\n url: 'https://github.com/adopted-ember-addons/ember-metrics/issues/287',\n since: '1.4.0',\n until: '2.0.0'\n });\n super.get(...arguments);\n }\n set() {\n deprecate('Metrics Adapters must not use EmberObject methods as they will be implemented as native classes in the next major release', false, {\n id: 'ember-metrics.issue-287',\n for: 'ember-metrics',\n url: 'https://github.com/adopted-ember-addons/ember-metrics/issues/287',\n since: '1.4.0',\n until: '2.0.0'\n });\n super.set(...arguments);\n }\n toString() {\n const hasToStringExtension = typeOf(this.toStringExtension) === 'function';\n const extension = hasToStringExtension ? ':' + this.toStringExtension() : '';\n const ret = `ember-metrics@metrics-adapter:${extension}:${guidFor(this)}`;\n this.toString = makeToString(ret);\n return ret;\n }\n identify() {}\n trackEvent() {}\n trackPage() {}\n alias() {}\n}\n_defineProperty(BaseAdapter, \"supportsFastBoot\", false);","import { helper } from '@ember/component/helper';\nexport function noop() {\n return () => {};\n}\nexport default helper(noop);","import { getOwner } from '@ember/application';\nimport { scheduleOnce } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\n\nlet isFastBoot = typeof FastBoot !== 'undefined';\n\nconst RouterEvent = {\n ROUTE_DID_CHANGE: 'routeDidChange',\n};\n\n/**\n @class page-title-list\n @extends Ember.Service\n */\nexport default class PageTitleListService extends Service {\n @service('page-title')\n pageTitle;\n\n @service('router')\n router;\n\n // in fastboot context \"document\" is instance of\n // ember-fastboot/simple-dom document\n @service('-document')\n document;\n\n tokens = [];\n\n _defaultConfig = {\n // The default separator to use between tokens.\n separator: ' | ',\n\n // The default prepend value to use.\n prepend: true,\n\n // The default replace value to use.\n replace: null,\n };\n\n constructor() {\n super(...arguments);\n this._validateExistingTitleElement();\n\n let config = getOwner(this).resolveRegistration('config:environment');\n if (config.pageTitle) {\n ['separator', 'prepend', 'replace'].forEach((key) => {\n if (!isEmpty(config.pageTitle[key])) {\n this._defaultConfig[key] = config.pageTitle[key];\n }\n });\n }\n this.router.on(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n }\n\n applyTokenDefaults(token) {\n let defaultSeparator = this._defaultConfig.separator;\n let defaultPrepend = this._defaultConfig.prepend;\n let defaultReplace = this._defaultConfig.replace;\n\n if (token.separator == null) {\n token.separator = defaultSeparator;\n }\n\n if (token.prepend == null && defaultPrepend != null) {\n token.prepend = defaultPrepend;\n }\n\n if (token.replace == null && defaultReplace != null) {\n token.replace = defaultReplace;\n }\n }\n\n inheritFromPrevious(token) {\n let previous = token.previous;\n if (previous) {\n if (token.separator == null) {\n token.separator = previous.separator;\n }\n\n if (token.prepend == null) {\n token.prepend = previous.prepend;\n }\n }\n }\n\n push(token) {\n let tokenForId = this._findTokenById(token.id);\n if (tokenForId) {\n let index = this.tokens.indexOf(tokenForId);\n let tokens = [...this.tokens];\n let previous = tokenForId.previous;\n token.previous = previous;\n token.next = tokenForId.next;\n this.inheritFromPrevious(token);\n this.applyTokenDefaults(token);\n\n tokens.splice(index, 1, token);\n this.tokens = tokens;\n return;\n }\n\n let previous = this.tokens.slice(-1)[0];\n if (previous) {\n token.previous = previous;\n previous.next = token;\n this.inheritFromPrevious(token);\n }\n\n this.applyTokenDefaults(token);\n this.tokens = [...this.tokens, token];\n }\n\n remove(id) {\n let token = this._findTokenById(id);\n let { next, previous } = token;\n if (next) {\n next.previous = previous;\n }\n\n if (previous) {\n previous.next = next;\n }\n\n token.previous = token.next = null;\n\n let tokens = [...this.tokens];\n tokens.splice(tokens.indexOf(token), 1);\n this.tokens = tokens;\n }\n\n get visibleTokens() {\n let tokens = this.tokens;\n let i = tokens ? tokens.length : 0;\n let visible = [];\n while (i--) {\n let token = tokens[i];\n if (token.replace) {\n visible.unshift(token);\n break;\n } else {\n visible.unshift(token);\n }\n }\n return visible;\n }\n\n get sortedTokens() {\n let visible = this.visibleTokens;\n let appending = true;\n let group = [];\n let groups = [group];\n let frontGroups = [];\n visible.forEach((token) => {\n if (token.front) {\n frontGroups.unshift(token);\n } else if (token.prepend) {\n if (appending) {\n appending = false;\n group = [];\n groups.push(group);\n }\n let lastToken = group[0];\n if (lastToken) {\n token = { ...token };\n token.separator = lastToken.separator;\n }\n group.unshift(token);\n } else {\n if (!appending) {\n appending = true;\n group = [];\n groups.push(group);\n }\n group.push(token);\n }\n });\n\n return frontGroups.concat(groups.reduce((E, group) => E.concat(group), []));\n }\n\n scheduleTitleUpdate = () => {\n scheduleOnce('afterRender', this, this._updateTitle);\n };\n\n toString() {\n let tokens = this.sortedTokens;\n let title = [];\n for (let i = 0, len = tokens.length; i < len; i++) {\n let token = tokens[i];\n if (token.title) {\n title.push(token.title);\n if (i + 1 < len) {\n title.push(token.separator);\n }\n }\n }\n return title.join('');\n }\n\n willDestroy() {\n super.willDestroy();\n this.router.off(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n }\n\n _updateTitle() {\n const toBeTitle = this.toString();\n\n if (isFastBoot) {\n this.updateFastbootTitle(toBeTitle);\n } else {\n /**\n * When rendering app with \"?fastboot=false\" (http://ember-fastboot.com/docs/user-guide#disabling-fastboot)\n * We will not have element present in DOM.\n *\n * But this is fine as by HTML spec,\n * one is created upon assigning \"document.title\" value;\n *\n * https://html.spec.whatwg.org/multipage/dom.html#dom-tree-accessors\n */\n this.document.title = toBeTitle;\n }\n\n this.pageTitle.titleDidUpdate(toBeTitle);\n }\n\n /**\n * Validate if there's more than one title element present.\n *\n * Example: ember-cli-head can cause conflicting updates.\n * @private\n */\n _validateExistingTitleElement() {\n if (isFastBoot) {\n return;\n }\n assert(\n '[ember-page-title]: Multiple title elements found. Check for other addons like ember-cli-head updating <title> as well.',\n document.head.querySelectorAll('title').length <= 1\n );\n }\n\n /**\n * Find token by id\n *\n * IE11 compatible approach due to lack of Array.find support\n *\n * @param {String} id\n * @private\n */\n _findTokenById(id) {\n return this.tokens.filter((token) => {\n return token.id === id;\n })[0];\n }\n\n updateFastbootTitle(toBeTitle) {\n if (!isFastBoot) {\n return;\n }\n const headElement = this.document.head;\n const headChildNodes = headElement.childNodes;\n\n // Remove existing title elements from previous render cycle\n for (let i = 0; i < headChildNodes.length; i++) {\n let node = headChildNodes[i];\n if (node.nodeName.toLowerCase() === 'title') {\n headElement.removeChild(node);\n }\n }\n\n // Add title element with latest value\n let titleEl = this.document.createElement('title');\n let titleContents = this.document.createTextNode(toBeTitle);\n titleEl.appendChild(titleContents);\n headElement.appendChild(titleEl);\n }\n}\n","import Service from '@ember/service';\n\nexport default class PageTitleService extends Service {\n titleDidUpdate(/* title */) {}\n}\n","import AwaitHelper from 'ember-promise-helpers/helpers/await';\nexport default class extends AwaitHelper {\n compute(params) {\n const maybePromise = params[0];\n return this.ensureLatestPromise(maybePromise, async promise => {\n try {\n await promise;\n this.setValue(true, maybePromise);\n } catch (_err) {\n this.setValue(false, maybePromise);\n }\n });\n }\n}","import AwaitHelper from 'ember-promise-helpers/helpers/await';\nexport default class extends AwaitHelper {\n constructor(...args) {\n super(...args);\n this.valueBeforeSettled = true;\n }\n compute(params) {\n const maybePromise = params[0];\n return this.ensureLatestPromise(maybePromise, async promise => {\n try {\n await promise;\n /* eslint-disable-next-line no-empty */\n } catch (_err) {} finally {\n this.setValue(false, maybePromise);\n }\n });\n }\n}","import Helper from '@ember/component/helper';\nimport { Promise } from 'rsvp';\nexport default class extends Helper {\n /**\n * @property valueBeforeSettled\n * @default null\n *\n * This is the value that gets returned synchronously as the helper's return\n * value before the promise is settled. For example `{{async promise}}` will return\n * null, before the promise is resolved or rejected.\n */\n constructor(...args) {\n super(...args);\n this.valueBeforeSettled = null;\n }\n\n /**\n * @method compute\n * @public\n * @param params Array a list of arguments passed to the Helper.\n * @param hash Object a list of configuration options passed to the helper.\n * This parameter is currently unused by Await.\n */\n compute([maybePromise]) {\n if (!maybePromise || typeof maybePromise.then !== 'function') {\n return maybePromise;\n }\n return this.ensureLatestPromise(maybePromise, async promise => {\n try {\n const value = await promise;\n this.setValue(value, maybePromise);\n } catch (_error) {\n this.setValue(null, maybePromise);\n }\n });\n }\n\n /**\n * @method ensureLatestPromise\n * @public\n * @param promise Promise the new promise coming\n * @param callback Function function to be called with a wrapped promise\n *\n * Method to set the latest promise. This gets called by `compute` (which in\n * turn gets called by `recompute`). If the promise being passed in is the\n * same as before, then just return the value to `compute`. Otherwise, call\n * the callback so the user can call `then`, `catch`, or `finally` on the\n * promise to update the value using `setValue` later.\n */\n ensureLatestPromise(promise, callback) {\n if (this._wasSettled && promise === this._promise) {\n return this._value;\n } else {\n this._unsettle();\n }\n this._promise = promise;\n callback.call(this, Promise.resolve(promise));\n return this.valueBeforeSettled;\n }\n\n /**\n * @method _settle\n * @private\n */\n _settle(promise) {\n if (this.allowUpdates(promise)) {\n this._wasSettled = true;\n this.recompute();\n }\n }\n\n /**\n * @private\n * @method _unsettle\n *\n * Resets the promise to null and calls recompute. Designed to be used\n * when a new promise is passed to the `compute` method. This would happen\n * when the value changes in Handlebars.\n */\n _unsettle() {\n this._wasSettled = false;\n this._promise = null;\n }\n\n /**\n * @method setValue\n * @public\n * @param value Any the value to return to the helper\n * @param promise Promise the promise the `setValue` call is coming from.\n *\n * `setValue` is how you should set the value to be returned to the helper\n * in the app. It exists to prevent race conditions between promises.\n * For example, you may have two promises:\n *\n * ```javascript\n * let promise1 = new Ember.RSVP.Promise((resolve, reject) => {resolve(\"hello\");});\n * let promise2 = new Ember.RSVP.Promise((resolve, reject) => {(resolve(\"goodbye\")});\n * ```\n *\n * And a template:\n *\n * ```handlebars\n * {{await promise}}\n * ```\n *\n * If you set the value of `promise` to be `promise1` via your component,\n * controller, or route, when the promise resolves, it will render the value\n * of `promise1`, which is \"hello\".\n *\n * If you set the avlue of `promise` to `promise2`, you would see \"goodbye\".\n *\n * But what happens if `promise1` resolves asynchronously, e.g., using `Ember.run.later`?\n *\n * ```javascript\n * Ember.run.later(function() {\n * resolve(\"hello\");\n * }, 200);\n * ```\n *\n * Even though `promise2` already resolved with \"goodbye\", the template would\n * render \"hello\", which is not the intended behavior. So, `setValue` makes you pass\n * the promise so the internal book-keeping can ensure the last-set promise always wins.\n */\n setValue(value, promise) {\n if (this.allowUpdates(promise)) {\n this._value = value;\n this._settle(promise);\n }\n }\n allowUpdates(promise) {\n return this._promise === promise;\n }\n}","import { A } from '@ember/array';\nimport ContainerDebugAdapter from '@ember/debug/container-debug-adapter';\nimport { ModuleRegistry } from './index';\nimport { getOwner } from '@ember/application';\n\nfunction getPod(type, key, prefix) {\n let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n if (match !== null) {\n return match[1];\n }\n}\n\n/*\n * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n * support for resolving from modules.\n *\n */\n\n/* eslint-disable ember/no-classic-classes */\nexport default ContainerDebugAdapter.extend({\n _moduleRegistry: null,\n\n init() {\n this._super(...arguments);\n this.namespace = getOwner(this).lookup('application:main');\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n },\n\n /**\n The container of the application being debugged.\n This property will be injected\n on creation.\n\n @property container\n @default null\n */\n\n /**\n The resolver instance of the application\n being debugged. This property will be injected\n on creation.\n\n @property resolver\n @default null\n */\n\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n\n @method canCatalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {boolean} whether a list is available for this type.\n */\n canCatalogEntriesByType(type) {\n if (type === 'model') { return true; }\n return this._super(...arguments);\n },\n\n /**\n Returns the available classes a given type.\n\n @method catalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {Array} An array of classes.\n */\n catalogEntriesByType(type) {\n let moduleNames = this._moduleRegistry.moduleNames();\n let types = A();\n\n let prefix = this.namespace.modulePrefix;\n\n for (let i = 0, l = moduleNames.length; i < l; i++) {\n let key = moduleNames[i];\n\n if(key.indexOf(type) !== -1) {\n // Check if it's a pod module\n let name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n if (!name) {\n // Not pod\n name = key.split(type + 's/').pop();\n\n // Support for different prefix (such as ember-cli addons).\n // Uncomment the code below when\n // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n //let match = key.match('^/?(.+)/' + type);\n //if (match && match[1] !== prefix) {\n // Different prefix such as an addon\n //name = match[1] + '@' + name;\n //}\n }\n types.addObject(name);\n }\n }\n return types;\n }\n});\n\n","import ContainerDebugAdapter from 'ember-resolver/resolvers/classic/container-debug-adapter';\n\nexport default {\n name: 'container-debug-adapter',\n\n initialize() {\n let app = arguments[1] || arguments[0];\n\n app.register('container-debug-adapter:main', ContainerDebugAdapter);\n }\n};\n","/* globals requirejs, require */\n\n/* eslint-disable ember/no-classic-classes */\n\nimport Ember from 'ember';\nimport { assert, deprecate, warn } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport { dasherize, classify, underscore } from '@ember/string';\nimport { DEBUG } from '@glimmer/env';\nimport classFactory from '../../utils/class-factory';\n\nif (typeof requirejs.entries === 'undefined') {\n requirejs.entries = requirejs._eak_seen;\n}\n\nexport class ModuleRegistry {\n constructor(entries) {\n this._entries = entries || requirejs.entries;\n }\n moduleNames() {\n return Object.keys(this._entries);\n }\n has(moduleName) {\n return moduleName in this._entries;\n }\n get(...args) {\n return require(...args);\n }\n}\n\n/**\n * This module defines a subclass of Ember.DefaultResolver that adds two\n * important features:\n *\n * 1) The resolver makes the container aware of es6 modules via the AMD\n * output. The loader's _moduleEntries is consulted so that classes can be\n * resolved directly via the module loader, without needing a manual\n * `import`.\n * 2) is able to provide injections to classes that implement `extend`\n * (as is typical with Ember).\n */\n\nfunction parseName(fullName) {\n if (fullName.parsedName === true) { return fullName; }\n\n let prefix, type, name;\n let fullNameParts = fullName.split('@');\n\n if (fullNameParts.length === 3) {\n if (fullNameParts[0].length === 0) {\n // leading scoped namespace: `@scope/pkg@type:name`\n prefix = `@${fullNameParts[1]}`;\n let prefixParts = fullNameParts[2].split(':');\n type = prefixParts[0];\n name = prefixParts[1];\n } else {\n // interweaved scoped namespace: `type:@scope/pkg@name`\n prefix = `@${fullNameParts[1]}`;\n type = fullNameParts[0].slice(0, -1);\n name = fullNameParts[2];\n }\n\n if (type === 'template:components') {\n name = `components/${name}`;\n type = 'template';\n }\n } else if (fullNameParts.length === 2) {\n let prefixParts = fullNameParts[0].split(':');\n\n if (prefixParts.length === 2) {\n if (prefixParts[1].length === 0) {\n type = prefixParts[0];\n name = `@${fullNameParts[1]}`;\n } else {\n prefix = prefixParts[1];\n type = prefixParts[0];\n name = fullNameParts[1];\n }\n } else {\n let nameParts = fullNameParts[1].split(':');\n\n prefix = fullNameParts[0];\n type = nameParts[0];\n name = nameParts[1];\n }\n\n if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n name = `components/${name}`;\n prefix = prefix.slice(11);\n }\n } else {\n fullNameParts = fullName.split(':');\n type = fullNameParts[0];\n name = fullNameParts[1];\n }\n\n let fullNameWithoutType = name;\n let namespace = this.namespace;\n let root = namespace;\n\n return {\n parsedName: true,\n fullName: fullName,\n prefix: prefix || this.prefix({type: type}),\n type: type,\n fullNameWithoutType: fullNameWithoutType,\n name: name,\n root: root,\n resolveMethodName: \"resolve\" + classify(type)\n };\n}\n\nfunction resolveOther(parsedName) {\n assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n let normalizedModuleName = this.findModuleName(parsedName);\n\n if (normalizedModuleName) {\n let defaultExport = this._extractDefaultExport(normalizedModuleName, parsedName);\n\n if (defaultExport === undefined) {\n throw new Error(` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`);\n }\n\n if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n defaultExport = classFactory(defaultExport);\n }\n\n return defaultExport;\n }\n}\n\nconst Resolver = EmberObject.extend({\n resolveOther,\n parseName,\n pluralizedTypes: null,\n moduleRegistry: null,\n\n makeToString(factory, fullName) {\n return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n },\n\n shouldWrapInClassFactory(/* module, parsedName */){\n return false;\n },\n\n init() {\n this._super();\n this.moduleBasedResolver = true;\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n\n this._normalizeCache = Object.create(null);\n\n this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n\n if (!this.pluralizedTypes.config) {\n this.pluralizedTypes.config = 'config';\n }\n this._deprecatedPodModulePrefix = false;\n\n /**\n\n A listing of functions to test for moduleName's based on the provided\n `parsedName`. This allows easy customization of additional module based\n lookup patterns.\n\n @property moduleNameLookupPatterns\n @returns {Ember.Array}\n */\n this.moduleNameLookupPatterns = [\n this.podBasedModuleName,\n this.podBasedComponentsInSubdir,\n this.mainModuleName,\n this.defaultModuleName,\n this.nestedColocationComponentModuleName,\n ];\n },\n\n normalize(fullName) {\n return this._normalizeCache[fullName] || (this._normalizeCache[fullName] = this._normalize(fullName));\n },\n\n resolve(fullName) {\n let parsedName = this.parseName(fullName);\n let resolveMethodName = parsedName.resolveMethodName;\n let resolved;\n\n if (typeof this[resolveMethodName] === 'function') {\n resolved = this[resolveMethodName](parsedName);\n }\n\n if (resolved == null) {\n resolved = this.resolveOther(parsedName);\n }\n\n return resolved;\n },\n\n _normalize(fullName) {\n // A) Convert underscores to dashes\n // B) Convert camelCase to dash-case, except for components (their\n // templates) and helpers where we want to avoid shadowing camelCase\n // expressions\n // C) replace `.` with `/` in order to make nested controllers work in the following cases\n // 1. `needs: ['posts/post']`\n // 2. `{{render \"posts/post\"}}`\n // 3. `this.render('posts/post')` from Route\n\n let split = fullName.split(':');\n if (split.length > 1) {\n let type = split[0];\n\n if (\n type === 'component' ||\n type === 'helper' ||\n type === 'modifier' ||\n (type === 'template' && split[1].indexOf('components/') === 0)\n ) {\n return type + ':' + split[1].replace(/_/g, '-');\n } else {\n return type + ':' + dasherize(split[1].replace(/\\./g, '/'));\n }\n } else {\n return fullName;\n }\n },\n\n pluralize(type) {\n return this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's');\n },\n\n podBasedLookupWithPrefix(podPrefix, parsedName) {\n let fullNameWithoutType = parsedName.fullNameWithoutType;\n\n if (parsedName.type === 'template') {\n fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n }\n\n return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n },\n\n podBasedModuleName(parsedName) {\n let podPrefix = this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n },\n\n podBasedComponentsInSubdir(parsedName) {\n let podPrefix = this.namespace.podModulePrefix || this.namespace.modulePrefix;\n podPrefix = podPrefix + '/components';\n\n if (parsedName.type === 'component' || /^components/.test(parsedName.fullNameWithoutType)) {\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n },\n\n resolveEngine(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineModule = engineName + '/engine';\n\n if (this._moduleRegistry.has(engineModule)) {\n return this._extractDefaultExport(engineModule);\n }\n },\n\n resolveRouteMap(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineRoutesModule = engineName + '/routes';\n\n if (this._moduleRegistry.has(engineRoutesModule)) {\n let routeMap = this._extractDefaultExport(engineRoutesModule);\n\n assert(`The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.` , routeMap.isRouteMap);\n\n return routeMap;\n }\n },\n\n resolveTemplate(parsedName) {\n let resolved = this.resolveOther(parsedName);\n if (resolved == null) {\n resolved = Ember.TEMPLATES[parsedName.fullNameWithoutType];\n }\n return resolved;\n },\n\n mainModuleName(parsedName) {\n if (parsedName.fullNameWithoutType === 'main') {\n // if router:main or adapter:main look for a module with just the type first\n return parsedName.prefix + '/' + parsedName.type;\n }\n },\n\n defaultModuleName(parsedName) {\n return parsedName.prefix + '/' + this.pluralize(parsedName.type) + '/' + parsedName.fullNameWithoutType;\n },\n\n nestedColocationComponentModuleName(parsedName) {\n if (parsedName.type === 'component') {\n return parsedName.prefix + '/' + this.pluralize(parsedName.type) + '/' + parsedName.fullNameWithoutType + '/index';\n }\n },\n\n prefix(parsedName) {\n let tmpPrefix = this.namespace.modulePrefix;\n\n if (this.namespace[parsedName.type + 'Prefix']) {\n tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n }\n\n return tmpPrefix;\n },\n\n findModuleName(parsedName, loggingDisabled){\n let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n let moduleName;\n\n for (let index = 0, length = moduleNameLookupPatterns.length; index < length; index++) {\n let item = moduleNameLookupPatterns[index];\n\n let tmpModuleName = item.call(this, parsedName);\n\n // allow treat all dashed and all underscored as the same thing\n // supports components with dashes and other stuff with underscores.\n if (tmpModuleName) {\n tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n }\n\n if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n moduleName = tmpModuleName;\n }\n\n if (!loggingDisabled) {\n this._logLookup(moduleName, parsedName, tmpModuleName);\n }\n\n if (moduleName) {\n return moduleName;\n }\n }\n },\n\n chooseModuleName(moduleName, parsedName) {\n let underscoredModuleName = underscore(moduleName);\n\n if (moduleName !== underscoredModuleName && this._moduleRegistry.has(moduleName) && this._moduleRegistry.has(underscoredModuleName)) {\n throw new TypeError(`Ambiguous module names: '${ moduleName}' and '${underscoredModuleName }'`);\n }\n\n if (this._moduleRegistry.has(moduleName)) {\n return moduleName;\n } else if (this._moduleRegistry.has(underscoredModuleName)) {\n return underscoredModuleName;\n }\n // workaround for dasherized partials:\n // something/something/-something => something/something/_something\n let partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n\n if (this._moduleRegistry.has(partializedModuleName)) {\n deprecate('Modules should not contain underscores. ' +\n 'Attempted to lookup \"'+moduleName+'\" which ' +\n 'was not found. Please rename \"'+partializedModuleName+'\" '+\n 'to \"'+moduleName+'\" instead.', false,\n {\n id: 'ember-resolver.underscored-modules',\n until: '3.0.0',\n for: 'ember-resolver',\n since: '0.1.0'\n });\n\n return partializedModuleName;\n }\n\n if (DEBUG) {\n let isCamelCaseHelper = parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n if (isCamelCaseHelper) {\n this._camelCaseHelperWarnedNames = this._camelCaseHelperWarnedNames || [];\n let alreadyWarned = this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n if (!alreadyWarned && this._moduleRegistry.has(dasherize(moduleName))) {\n this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n warn('Attempted to lookup \"' + parsedName.fullName + '\" which ' +\n 'was not found. In previous versions of ember-resolver, a bug would have ' +\n 'caused the module at \"' + dasherize(moduleName) + '\" to be ' +\n 'returned for this camel case helper name. This has been fixed. ' +\n 'Use the dasherized name to resolve the module that would have been ' +\n 'returned in previous versions.',\n false,\n { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' });\n }\n }\n }\n },\n\n // used by Ember.DefaultResolver.prototype._logLookup\n lookupDescription(fullName) {\n let parsedName = this.parseName(fullName);\n\n let moduleName = this.findModuleName(parsedName, true);\n\n return moduleName;\n },\n\n // only needed until 1.6.0-beta.2 can be required\n _logLookup(found, parsedName, description) {\n if (!Ember.ENV.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n return;\n }\n\n let padding;\n let symbol = found ? '[✓]' : '[ ]';\n\n if (parsedName.fullName.length > 60) {\n padding = '.';\n } else {\n padding = new Array(60 - parsedName.fullName.length).join('.');\n }\n\n if (!description) {\n description = this.lookupDescription(parsedName);\n }\n\n /* eslint-disable no-console */\n if (console && console.info) {\n console.info(symbol, parsedName.fullName, padding, description);\n }\n },\n\n knownForType(type) {\n let moduleKeys = this._moduleRegistry.moduleNames();\n\n let items = Object.create(null);\n for (let index = 0, length = moduleKeys.length; index < length; index++) {\n let moduleName = moduleKeys[index];\n let fullname = this.translateToContainerFullname(type, moduleName);\n\n if (fullname) {\n items[fullname] = true;\n }\n }\n\n return items;\n },\n\n translateToContainerFullname(type, moduleName) {\n let prefix = this.prefix({ type });\n\n // Note: using string manipulation here rather than regexes for better performance.\n // pod modules\n // '^' + prefix + '/(.+)/' + type + '$'\n let podPrefix = prefix + '/';\n let podSuffix = '/' + type;\n let start = moduleName.indexOf(podPrefix);\n let end = moduleName.indexOf(podSuffix);\n\n if (start === 0 && end === (moduleName.length - podSuffix.length) &&\n moduleName.length > (podPrefix.length + podSuffix.length)) {\n return type + ':' + moduleName.slice(start + podPrefix.length, end);\n }\n\n // non-pod modules\n // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n let pluralizedType = this.pluralize(type);\n let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n if (moduleName.indexOf(nonPodPrefix) === 0 && moduleName.length > nonPodPrefix.length) {\n return type + ':' + moduleName.slice(nonPodPrefix.length);\n }\n },\n\n _extractDefaultExport(normalizedModuleName) {\n let module = this._moduleRegistry.get(normalizedModuleName, null, null, true /* force sync */);\n\n if (module && module['default']) {\n module = module['default'];\n }\n\n return module;\n }\n});\n\nResolver.reopenClass({\n moduleBasedResolver: true\n});\n\nexport default Resolver;\n","export default function classFactory(klass) {\n return {\n create(injections) {\n if (typeof klass.extend === 'function') {\n return klass.extend(injections);\n } else {\n return klass;\n }\n }\n };\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { get } from '@ember/object';\n\nexport default class MediaHelper extends Helper {\n @service() media;\n\n constructor() {\n super(...arguments);\n\n this.media.on('mediaChanged', () => {\n this.recompute();\n });\n }\n\n compute([prop]) {\n return get(this, `media.${prop}`);\n }\n}\n","/**\n * Ember responsive initializer\n *\n * Supports auto injecting media service app-wide.\n * Generated by the ember-responsive addon.\n */\nexport function initialize(application) {\n application.registerOptionsForType('breakpoints', { instantiate: false });\n}\n\nexport default {\n name: 'ember-responsive-breakpoints',\n initialize\n};\n","import ResponsiveInitializer from 'ember-responsive/initializers/responsive';\nexport default ResponsiveInitializer;\n","/**\n * Stub function that is `matchMedia` API compatible but always returns\n * `false`. Useful for server-side environments like FastBoot where there\n * is no viewport.\n */\nexport default function() {\n return {\n matches: false\n };\n}\n","import Media from 'ember-responsive/services/media';\nexport default Media;\n","import Ember from 'ember';\nimport { tracked } from '@glimmer/tracking'\nimport { run, once } from '@ember/runloop';\nimport { set, defineProperty } from '@ember/object';\nimport Service from '@ember/service';\nimport { classify, dasherize } from '@ember/string';\nimport nullMatchMedia from '../null-match-media';\nimport { getOwner } from '@ember/application'\nimport Evented from '@ember/object/evented';\nimport { dependentKeyCompat } from '@ember/object/compat';\n\n/**\n* Handles detecting and responding to media queries.\n*\n* **Adding media query matchers**\n*\n* The first step to using the class is to add media queries that you\n* want it to listen to. Each media query has a name that you can\n* use to reference it by.\n*\n* ```javascript\n* media = Ember.Responsive.Media.create();\n* media.match('mobile', '(max-width: 767px)');\n* media.match('desktop', '(min-width: 768px)');\n* ```\n*\n* **Testing the media query matchers**\n*\n* Now that you've added a few matchers, you can access those media queries as\n* if they were properties on your object. The nice thing is that whenever the\n* media queries change, this class will automatically update the relevant\n* properties (and so will the rest of your application, thanks to the power\n* of two-way data-binding).\n*\n* ```javascript\n* media = Ember.Responsive.Media.create();\n* media.match('mobile', '(max-width: 767px)');\n* media.match('desktop', '(min-width: 768px)');\n*\n* // There are convenient \"isser\" properties defined...\n* if (media.get('isMobile')) {\n* console.log('mobile!');\n* }\n*\n* // As well as access to the matchMedia API...\n* if (media.get('desktop.matches')) {\n* console.log('desktop!');\n* }\n* ```\n*\n* **Retrieving a list of matching media queries**\n*\n* It's also nice to be able to see which media queries are matching, since\n* some applications might have many matches at the same time.\n*\n* ```javascript\n* media = Ember.Responsive.Media.create();\n* media.match('desktop', 'all');\n* media.match('mobile', 'all');\n*\n* console.log(media.matches);\n* // => Ember.Set(['desktop', 'mobile']);\n* ```\n*\n* This class can also return that list as a string of dasherized class names,\n* which is useful for placing on your app's rootElement. By default, these\n* class names are prefixed with `media-`, so as not to clash with any other\n* classes your app might use.\n*\n* ```javascript\n* App.ApplicationView = Ember.View.extend({\n* classNameBindings: ['media.classNames']\n* });\n* ```\n*\n* @module ember-responsive\n* @namespace Ember.Responsive\n* @class Media\n* @extends Ember.Object\n*/\nexport default class MediaService extends Service.extend(Evented) {\n // Ember only sets Ember.testing when tests are starting\n // eslint-disable-next-line ember/no-ember-testing-in-module-scope\n _mocked = Ember.testing;\n _mockedBreakpoint = 'desktop';\n\n /**\n * @property _matches\n * @type Array\n */\n @tracked _matches;\n\n /**\n * A set of matching matchers.\n *\n * @property matches\n * @type Array\n */\n get matches() {\n if (this._matches) {\n return this._matches\n }\n\n return (Ember.testing && this._mocked) ? [this._mockedBreakpoint] : [];\n }\n\n set matches(value) {\n this._matches = value;\n }\n\n /**\n * A hash of listeners indexed by their matcher's names\n *\n * @property\n * @type Object\n */\n listeners = {};\n\n /**\n * A hash of matchers by breakpoint name\n */\n matchers = {};\n\n /**\n * The matcher to use for testing media queries.\n *\n * @property matcher\n * @type matchMedia\n * @default window.matchMedia\n * @private\n */\n mql = detectMatchMedia();\n\n /**\n * Initialize the service based on the breakpoints config\n *\n * @method init\n *\n */\n constructor() {\n super(...arguments);\n\n const breakpoints = getOwner(this).lookup('breakpoints:main');\n if (breakpoints) {\n Object.keys(breakpoints).forEach((name) => {\n const cpName = `is${classify(name)}`;\n defineProperty(\n this,\n cpName,\n dependentKeyCompat({\n get() {\n return this.matches.indexOf(name) > -1;\n },\n })\n );\n\n defineProperty(\n this,\n name,\n dependentKeyCompat({\n get() {\n return this[cpName];\n },\n })\n );\n\n this.match(name, breakpoints[name]);\n });\n }\n }\n\n /**\n * A string composed of all the matching matchers' names, turned into\n * friendly, dasherized class-names that are prefixed with `media-`.\n *\n * @property classNames\n * @type string\n */\n get classNames() {\n return this.matches.map(function(name) {\n return `media-${dasherize(name)}`;\n }).join(' ');\n }\n\n _triggerMediaChanged() {\n this.trigger('mediaChanged', {});\n }\n\n _triggerEvent() {\n once(this, this._triggerMediaChanged);\n }\n\n /**\n * Adds a new matcher to the list.\n *\n * After this method is called, you will be able to access the result\n * of the matcher as a property on this object.\n *\n * **Adding a new matcher**\n *\n * ```javascript\n * media = Ember.Responsive.Media.create();\n * media.match('all', 'all');\n * media.get('all');\n * // => instanceof window.matchMedia\n * media.get('all.matches');\n * // => true\n * ```\n *\n * @param string name The name of the matcher\n * @param string query The media query to match against\n * @method match\n */\n match(name, query) {\n // see https://github.com/ember-cli/eslint-plugin-ember/pull/272\n if (Ember.testing && this._mocked) {\n return;\n }\n\n const mql = this.mql;\n const matcher = mql(query);\n\n const listener = (matcher) => {\n if (this.isDestroyed) {\n return;\n }\n\n set(this, `matchers.${name}`, matcher);\n\n if (matcher.matches) {\n this.matches = Array.from(new Set([...this.matches, name]));\n } else {\n this.matches = Array.from(new Set(this.matches.filter(key => key !== name)));\n }\n\n this._triggerEvent();\n };\n this.listeners[name] = listener;\n\n if (matcher.addListener) {\n matcher.addListener(function(matcher){\n run(null, listener, matcher);\n });\n }\n listener(matcher);\n }\n}\n\nfunction detectMatchMedia() {\n if (typeof window === 'object' && window.matchMedia) {\n return window.matchMedia;\n }\n\n return nullMatchMedia;\n}\n","export default function esCompat(m) {\n return m?.__esModule ? m : { default: m, ...m };\n}\n","import { __extends } from \"tslib\";\nexport var IntlErrorCode;\n(function (IntlErrorCode) {\n IntlErrorCode[\"FORMAT_ERROR\"] = \"FORMAT_ERROR\";\n IntlErrorCode[\"UNSUPPORTED_FORMATTER\"] = \"UNSUPPORTED_FORMATTER\";\n IntlErrorCode[\"INVALID_CONFIG\"] = \"INVALID_CONFIG\";\n IntlErrorCode[\"MISSING_DATA\"] = \"MISSING_DATA\";\n IntlErrorCode[\"MISSING_TRANSLATION\"] = \"MISSING_TRANSLATION\";\n})(IntlErrorCode || (IntlErrorCode = {}));\nvar IntlError = /** @class */ (function (_super) {\n __extends(IntlError, _super);\n function IntlError(code, message, exception) {\n var _this = this;\n var err = exception\n ? exception instanceof Error\n ? exception\n : new Error(String(exception))\n : undefined;\n _this = _super.call(this, \"[@formatjs/intl Error \".concat(code, \"] \").concat(message, \"\\n\").concat(err ? \"\\n\".concat(err.message, \"\\n\").concat(err.stack) : '')) || this;\n _this.code = code;\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (typeof Error.captureStackTrace === 'function') {\n // @ts-ignore just so we don't need to declare dep on @types/node\n Error.captureStackTrace(_this, IntlError);\n }\n return _this;\n }\n return IntlError;\n}(Error));\nexport { IntlError };\nvar UnsupportedFormatterError = /** @class */ (function (_super) {\n __extends(UnsupportedFormatterError, _super);\n function UnsupportedFormatterError(message, exception) {\n return _super.call(this, IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception) || this;\n }\n return UnsupportedFormatterError;\n}(IntlError));\nexport { UnsupportedFormatterError };\nvar InvalidConfigError = /** @class */ (function (_super) {\n __extends(InvalidConfigError, _super);\n function InvalidConfigError(message, exception) {\n return _super.call(this, IntlErrorCode.INVALID_CONFIG, message, exception) || this;\n }\n return InvalidConfigError;\n}(IntlError));\nexport { InvalidConfigError };\nvar MissingDataError = /** @class */ (function (_super) {\n __extends(MissingDataError, _super);\n function MissingDataError(message, exception) {\n return _super.call(this, IntlErrorCode.MISSING_DATA, message, exception) || this;\n }\n return MissingDataError;\n}(IntlError));\nexport { MissingDataError };\nvar IntlFormatError = /** @class */ (function (_super) {\n __extends(IntlFormatError, _super);\n function IntlFormatError(message, locale, exception) {\n var _this = _super.call(this, IntlErrorCode.FORMAT_ERROR, \"\".concat(message, \"\\nLocale: \").concat(locale, \"\\n\"), exception) || this;\n _this.locale = locale;\n return _this;\n }\n return IntlFormatError;\n}(IntlError));\nexport { IntlFormatError };\nvar MessageFormatError = /** @class */ (function (_super) {\n __extends(MessageFormatError, _super);\n function MessageFormatError(message, locale, descriptor, exception) {\n var _this = _super.call(this, \"\".concat(message, \"\\nMessageID: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.id, \"\\nDefault Message: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.defaultMessage, \"\\nDescription: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.description, \"\\n\"), locale, exception) || this;\n _this.descriptor = descriptor;\n _this.locale = locale;\n return _this;\n }\n return MessageFormatError;\n}(IntlFormatError));\nexport { MessageFormatError };\nvar MissingTranslationError = /** @class */ (function (_super) {\n __extends(MissingTranslationError, _super);\n function MissingTranslationError(descriptor, locale) {\n var _this = _super.call(this, IntlErrorCode.MISSING_TRANSLATION, \"Missing message: \\\"\".concat(descriptor.id, \"\\\" for locale \\\"\").concat(locale, \"\\\", using \").concat(descriptor.defaultMessage\n ? \"default message (\".concat(typeof descriptor.defaultMessage === 'string'\n ? descriptor.defaultMessage\n : descriptor.defaultMessage\n .map(function (e) { var _a; return (_a = e.value) !== null && _a !== void 0 ? _a : JSON.stringify(e); })\n .join(), \")\")\n : 'id', \" as fallback.\")) || this;\n _this.descriptor = descriptor;\n return _this;\n }\n return MissingTranslationError;\n}(IntlError));\nexport { MissingTranslationError };\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", { value: true });exports.StreamTransportState = exports.StreamTransportType = exports.BoundingBoxEventCommand = exports.Priority = exports.AudioStreamingState = exports.AudioRecordingState = exports.OspConnectState = exports.DestType = exports.OscarEvents = exports.ExportError = exports.ExportStatus = exports.ExportType = exports.PlaybackState = exports.MediaState = exports.RenderState = exports.StreamError = exports.VideoFillMode = exports.StreamQuality = exports.Direction = exports.CodecType = exports.MediaType = void 0; /**\n * Specifies the major media type of a stream\n *\n * @readonly\n * @enum {number}\n */\nvar MediaType = {\n Unknown: 0,\n Video: 1,\n Audio: 2,\n Application: 3 };\n\n\n/**\n * Specifies the codec type used to encode a stream\n *\n * @readonly\n * @enum {number}\n */exports.MediaType = MediaType;\nvar CodecType = {\n Unknown: 0,\n\n Mjpeg: 1,\n Mpeg4: 2,\n H264: 3,\n H265: 4,\n\n G711: 101,\n G726: 102,\n AAC: 103,\n PCM_S16LE: 104,\n\n OnvifMetadata: 200,\n TrackletMetadata: 201,\n BoundingBoxMetadata: 202 };\n\n\n/**\n * Specifies a video playback direction\n *\n * @readonly\n * @enum {number}\n */exports.CodecType = CodecType;\nvar Direction = {\n Forwards: 0,\n Backwards: 1 };\n\n\n/**\n * Represents a stream quality setting\n *\n * @readonly\n * @enum {number}\n */exports.Direction = Direction;\nvar StreamQuality = {\n None: 0,\n Low: 1,\n Medium: 2,\n High: 3 };\n\n\n/**\n * Video fill mode\n *\n * @readonly\n * @enum {string}\n */exports.StreamQuality = StreamQuality;\nvar VideoFillMode = {\n Original: 'original',\n Stretch: 'stretched' };\n\n\n/**\n * Render state values; these indicate the state of a RenderController\n *\n * @readonly\n * @enum {string}\n */exports.VideoFillMode = VideoFillMode;\nvar RenderState = {\n Idle: 'Idle',\n Seeking: 'Seeking',\n NoMedia: 'NoMedia',\n Rendering: 'Rendering',\n Error: 'Error' };\n\n\n/**\n * Media state values; these indicate the state of a StreamController\n *\n * @readonly\n * @enum {string}\n */exports.RenderState = RenderState;\nvar MediaState = {\n Idle: 'Idle',\n Starting: 'Starting',\n MediaPresent: 'MediaPresent',\n NoMediaPresent: 'NoMediaPresent',\n Error: 'Error' };\n\n\n/**\n * Stream error code values; used in conjunction with MediaState.Error\n *\n * @readonly\n * @enum {string}\n */exports.MediaState = MediaState;\nvar StreamError = {\n NoError: 'NoError',\n UnknownError: 'UnknownError',\n ConnectFailed: 'ConnectFailed',\n ConnectionLost: 'ConnectionLost',\n SenderError: 'SenderError',\n ProtocolError: 'ProtocolError',\n RenderError: 'RenderError',\n NotAuthorized: 'NotAuthorized',\n StreamLimitReached: 'StreamLimitReached' };\n\n\n/**\n * Playback state values; these indicate the state of a VideoPlayer\n *\n * @readonly\n * @enum {string}\n */exports.StreamError = StreamError;\nvar PlaybackState = {\n NotStarted: 'NotStarted',\n Ready: 'Ready',\n Seeking: 'Seeking',\n Started: 'Started',\n Suspended: 'Suspended',\n Error: 'Error' };\n\n\n/**\n * Export type values; these indicate the types of Exports\n *\n * @readonly\n * @enum {string}\n */exports.PlaybackState = PlaybackState;\nvar ExportType = {\n VideoClip: 'VideoClip',\n Archive: 'Archive',\n Frame: 'Frame',\n Upload: 'Upload' };\n\n\n/**\n * Export destination type values; these indicate the destination types for Exports\n *\n * @readonly\n * @enum {string}\n */exports.ExportType = ExportType;\nvar DestType = {\n Upload: 'Upload',\n Local: 'Local' };\n\n\n/**\n * Export status values; these indicate the status of Exports\n *\n * @readonly\n * @enum {string}\n */exports.DestType = DestType;\nvar ExportStatus = {\n NoError: 'NOT_STARTED',\n InProgress: 'IN_PROGRESS',\n Complete: 'COMPLETE',\n Stopped: 'STOPPED',\n Canceled: 'CANCELED',\n Failed: 'FAILED',\n Error: 'ERROR' };\n\n\n/**\n * Export error values; these indicate the errors of Exports\n *\n * @readonly\n * @enum {string}\n */exports.ExportStatus = ExportStatus;\nvar ExportError = {\n NoError: 'NoError',\n NoStreams: 'NoStreams',\n OutputFileEmpty: 'OutputFileEmpty',\n NoCameraSpecified: 'NoCameraSpecified',\n NoValidStreamsFound: 'NoValidStreamsFound',\n PathDoesNotExist: 'PathDoesNotExist',\n ExportFailed: 'ExportFailed',\n Timeout: 'Timeout',\n UploadAuthFailed: 'UploadAuthFailed',\n UploadNetworkError: 'UploadNetworkError',\n UploadServerError: 'UploadServerError',\n UploadClientError: 'UploadClientError',\n UploadStorageFull: 'UploadStorageFull' };\n\n\n/**\n * Osp connection status values; these indicate the status of the osp stream connection\n *\n * @readonly\n * @enum {number}\n */exports.ExportError = ExportError;\nvar OspConnectState = {\n NotConnected: 0,\n Connecting: 1,\n Connected: 2 };\n\n\n/**\n * Audio recording state lifecycle values; these status of the recording connection\n *\n * @readonly\n * @enum {string}\n */exports.OspConnectState = OspConnectState;\nvar AudioRecordingState = {\n Idle: 'Idle',\n Connecting: 'Connecting',\n Recording: 'Recording',\n Error: 'Error' };\n\n\n/**\n * Audio streaming state lifecycle values; these status of the streaming connection\n *\n * @readonly\n * @enum {string}\n */exports.AudioRecordingState = AudioRecordingState;\nvar AudioStreamingState = {\n Idle: 'Idle',\n Connecting: 'Connecting',\n Streaming: 'Streaming',\n Error: 'Error' };\n\n\n/**\n * Events\n */exports.AudioStreamingState = AudioStreamingState;\nvar OscarEvents = {\n BoundingBox: 'boundingbox',\n PlaybackStateChange: 'playbackstatechange',\n PlaybackTimeChange: 'playbacktimechange',\n StateChange: 'statechange',\n StatChange: 'statchange',\n TransportStateChange: 'transportstatechange',\n VideoPresenterTransformed: 'videopresentertransformed' };exports.OscarEvents = OscarEvents;\n\n\nvar Priority = {\n Lowest: -Infinity,\n Low: 0,\n Medium: 50,\n High: 100,\n Highest: Infinity };\n\n\n/**\n * Types of bounding box events\n */exports.Priority = Priority;\nvar BoundingBoxEventCommand = {\n /** Denotes that all bounding boxes should be cleared from the pane */\n ClearAll: 'clearall',\n /** Denotes that a bounding box should be drawn on the pane */\n Draw: 'draw' };\n\n\n/**\n * Types of stream transports\n */exports.BoundingBoxEventCommand = BoundingBoxEventCommand;\nvar StreamTransportType = {\n None: 'None',\n WebRTC: 'WebRTC',\n WebSocket: 'WebSocket' };\n\n\n/**\n * Stream transport states\n */exports.StreamTransportType = StreamTransportType;\nvar StreamTransportState = {\n Idle: 'Idle',\n Connecting: 'Connecting',\n Connected: 'Connected',\n Closed: 'Closed',\n Timeout: 'Timeout',\n Error: 'Error' };exports.StreamTransportState = StreamTransportState;","/**\n * Specifies the major media type of a stream\n *\n * @readonly\n * @enum {number}\n */\nconst MediaType = {\n Unknown: 0,\n Video: 1,\n Audio: 2,\n Application: 3,\n};\n\n/**\n * Specifies the codec type used to encode a stream\n *\n * @readonly\n * @enum {number}\n */\nconst CodecType = {\n Unknown: 0,\n\n Mjpeg: 1,\n Mpeg4: 2,\n H264: 3,\n H265: 4,\n\n G711: 101,\n G726: 102,\n AAC: 103,\n PCM_S16LE: 104,\n\n OnvifMetadata: 200,\n TrackletMetadata: 201,\n BoundingBoxMetadata: 202,\n};\n\n/**\n * Specifies a video playback direction\n *\n * @readonly\n * @enum {number}\n */\nconst Direction = {\n Forwards: 0,\n Backwards: 1,\n};\n\n/**\n * Represents a stream quality setting\n *\n * @readonly\n * @enum {number}\n */\nconst StreamQuality = {\n None: 0,\n Low: 1,\n Medium: 2,\n High: 3,\n};\n\n/**\n * Video fill mode\n *\n * @readonly\n * @enum {string}\n */\nconst VideoFillMode = {\n Original: 'original',\n Stretch: 'stretched',\n};\n\n/**\n * Render state values; these indicate the state of a RenderController\n *\n * @readonly\n * @enum {string}\n */\nconst RenderState = {\n Idle: 'Idle',\n Seeking: 'Seeking',\n NoMedia: 'NoMedia',\n Rendering: 'Rendering',\n Error: 'Error',\n};\n\n/**\n * Media state values; these indicate the state of a StreamController\n *\n * @readonly\n * @enum {string}\n */\nconst MediaState = {\n Idle: 'Idle',\n Starting: 'Starting',\n MediaPresent: 'MediaPresent',\n NoMediaPresent: 'NoMediaPresent',\n Error: 'Error',\n};\n\n/**\n * Stream error code values; used in conjunction with MediaState.Error\n *\n * @readonly\n * @enum {string}\n */\nconst StreamError = {\n NoError: 'NoError',\n UnknownError: 'UnknownError',\n ConnectFailed: 'ConnectFailed',\n ConnectionLost: 'ConnectionLost',\n SenderError: 'SenderError',\n ProtocolError: 'ProtocolError',\n RenderError: 'RenderError',\n NotAuthorized: 'NotAuthorized',\n StreamLimitReached: 'StreamLimitReached',\n};\n\n/**\n * Playback state values; these indicate the state of a VideoPlayer\n *\n * @readonly\n * @enum {string}\n */\nconst PlaybackState = {\n NotStarted: 'NotStarted',\n Ready: 'Ready',\n Seeking: 'Seeking',\n Started: 'Started',\n Suspended: 'Suspended',\n Error: 'Error',\n};\n\n/**\n * Export type values; these indicate the types of Exports\n *\n * @readonly\n * @enum {string}\n */\nconst ExportType = {\n VideoClip: 'VideoClip',\n Archive: 'Archive',\n Frame: 'Frame',\n Upload: 'Upload',\n};\n\n/**\n * Export destination type values; these indicate the destination types for Exports\n *\n * @readonly\n * @enum {string}\n */\nconst DestType = {\n Upload: 'Upload',\n Local: 'Local',\n};\n\n/**\n * Export status values; these indicate the status of Exports\n *\n * @readonly\n * @enum {string}\n */\nconst ExportStatus = {\n NoError: 'NOT_STARTED',\n InProgress: 'IN_PROGRESS',\n Complete: 'COMPLETE',\n Stopped: 'STOPPED',\n Canceled: 'CANCELED',\n Failed: 'FAILED',\n Error: 'ERROR',\n};\n\n/**\n * Export error values; these indicate the errors of Exports\n *\n * @readonly\n * @enum {string}\n */\nconst ExportError = {\n NoError: 'NoError',\n NoStreams: 'NoStreams',\n OutputFileEmpty: 'OutputFileEmpty',\n NoCameraSpecified: 'NoCameraSpecified',\n NoValidStreamsFound: 'NoValidStreamsFound',\n PathDoesNotExist: 'PathDoesNotExist',\n ExportFailed: 'ExportFailed',\n Timeout: 'Timeout',\n UploadAuthFailed: 'UploadAuthFailed',\n UploadNetworkError: 'UploadNetworkError',\n UploadServerError: 'UploadServerError',\n UploadClientError: 'UploadClientError',\n UploadStorageFull: 'UploadStorageFull',\n};\n\n/**\n * Osp connection status values; these indicate the status of the osp stream connection\n *\n * @readonly\n * @enum {number}\n */\nconst OspConnectState = {\n NotConnected: 0,\n Connecting: 1,\n Connected: 2,\n};\n\n/**\n * Audio recording state lifecycle values; these status of the recording connection\n *\n * @readonly\n * @enum {string}\n */\nconst AudioRecordingState = {\n Idle: 'Idle',\n Connecting: 'Connecting',\n Recording: 'Recording',\n Error: 'Error',\n};\n\n/**\n * Audio streaming state lifecycle values; these status of the streaming connection\n *\n * @readonly\n * @enum {string}\n */\nconst AudioStreamingState = {\n Idle: 'Idle',\n Connecting: 'Connecting',\n Streaming: 'Streaming',\n Error: 'Error',\n};\n\n/**\n * Events\n */\nconst OscarEvents = {\n BoundingBox: 'boundingbox',\n PlaybackStateChange: 'playbackstatechange',\n PlaybackTimeChange: 'playbacktimechange',\n StateChange: 'statechange',\n StatChange: 'statchange',\n TransportStateChange: 'transportstatechange',\n VideoPresenterTransformed: 'videopresentertransformed',\n};\n\nconst Priority = {\n Lowest: -Infinity,\n Low: 0,\n Medium: 50,\n High: 100,\n Highest: Infinity,\n};\n\n/**\n * Types of bounding box events\n */\nconst BoundingBoxEventCommand = {\n /** Denotes that all bounding boxes should be cleared from the pane */\n ClearAll: 'clearall',\n /** Denotes that a bounding box should be drawn on the pane */\n Draw: 'draw',\n};\n\n/**\n * Types of stream transports\n */\nconst StreamTransportType = {\n None: 'None',\n WebRTC: 'WebRTC',\n WebSocket: 'WebSocket',\n};\n\n/**\n * Stream transport states\n */\nconst StreamTransportState = {\n Idle: 'Idle',\n Connecting: 'Connecting',\n Connected: 'Connected',\n Closed: 'Closed',\n Timeout: 'Timeout',\n Error: 'Error',\n};\n\nexport {\n MediaType,\n CodecType,\n Direction,\n StreamQuality,\n VideoFillMode,\n StreamError,\n RenderState,\n MediaState,\n PlaybackState,\n ExportType,\n ExportStatus,\n ExportError,\n OscarEvents,\n DestType,\n OspConnectState,\n AudioRecordingState,\n AudioStreamingState,\n Priority,\n BoundingBoxEventCommand,\n StreamTransportType,\n StreamTransportState,\n};\n","import {Logger} from '@oecommon/plasma-js';\nimport {\n MediaPermissionsErrorType as MicCheckMediaPermissionsErrorType,\n requestMediaPermissions as micCheckRequestMediaPermissions,\n} from 'mic-check';\n\nconst CHROMIUM_DEVICE_NOT_FOUND_ERROR_MESSAGE = 'Requested device not found';\nconst FIREFOX_DEVICE_NOT_FOUND_ERROR_MESSAGE = 'The object can not be found here.';\n\nconst DEVICE_NOT_FOUND_ERROR_MESSAGES = [\n CHROMIUM_DEVICE_NOT_FOUND_ERROR_MESSAGE,\n FIREFOX_DEVICE_NOT_FOUND_ERROR_MESSAGE,\n];\n\nexport const MediaPermissionsErrorType = {\n /** (macOS) browser does not have permission to access cam/mic */\n SystemPermissionDenied: MicCheckMediaPermissionsErrorType.SystemPermissionDenied,\n /** user denied permission for site to access cam/mic */\n UserPermissionDenied: MicCheckMediaPermissionsErrorType.UserPermissionDenied,\n /**\n * (Windows) browser does not have permission to access cam/mic OR camera is in use by\n * another application or browser tab\n */\n CouldNotStartVideoSource: MicCheckMediaPermissionsErrorType.CouldNotStartVideoSource,\n /** browser was unable to find a device to connect to */\n DeviceNotFound: 'DeviceNotFound',\n /** all other errors */\n Generic: MicCheckMediaPermissionsErrorType.Generic,\n};\n\nlet instanceNum = 0;\n\nfunction callOrDefault(context, func, def = null) {\n if (typeof func === 'undefined') {\n return def;\n }\n return func.bind(context)();\n}\n\n/**\n * Class responsible for wrapping the native browser `Navigator` and providing\n * logging and helper methods.\n */\nexport default class NavigatorService {\n constructor() {\n this.log = new Logger('navigatorservice', ++instanceNum);\n }\n\n _deviceToString(device) {\n return {\n ...callOrDefault(device, device.toJSON, device),\n capabilities: callOrDefault(device, device.getCapabilities),\n constraints: callOrDefault(device, device.getConstraints),\n settings: callOrDefault(device, device.getSettings),\n };\n }\n\n /**\n * Returns a list of all input/output devices accessible by the browser\n */\n enumerateDevices() {\n return navigator.mediaDevices.enumerateDevices()\n .then((devices) => {\n this.log.debug(() => `Enumerated devices: ${JSON.stringify(devices.map(this._deviceToString))}`);\n return devices;\n });\n }\n\n /**\n * Returns a media stream containing tracks based on the requested media\n * types contained in the `constraints`. Requires user permission to have\n * been granted, so `requestMediaPermissions` should typically be called\n * first.\n */\n getUserMedia(constraints) {\n return navigator.mediaDevices.getUserMedia(constraints)\n .then((mediaStream) => {\n this.log.debug(() => {\n const audioTracks = mediaStream.getAudioTracks();\n if (audioTracks.length <= 0) {\n return 'Media stream device could not be found';\n }\n const track = audioTracks[0];\n return `Media stream device: ${JSON.stringify(this._deviceToString(track))}`;\n });\n return mediaStream;\n });\n }\n\n /**\n * Helper method that determines the channel count on the first audio track\n * of the provided `mediaStream`.\n */\n getMediaStreamChannelCount(mediaStream) {\n const audioTracks = mediaStream.getAudioTracks();\n if (!audioTracks || audioTracks.length === 0) {\n this.log.debug(() => `No media stream audio tracks found`);\n return 0;\n }\n\n const settings = audioTracks[0].getSettings();\n if (!settings) {\n this.log.debug(() => `No media stream audio track settings found, ${JSON.stringify(audioTracks)}`);\n return 0;\n }\n\n this.log.debug(() => `Media stream audio track settings, ${JSON.stringify(settings)}`);\n return settings.channelCount || 1;\n }\n\n /**\n * Requests browser permissions from the user based on the provided `constraints`\n */\n requestMediaPermissions(constraints) {\n return new Promise(async (resolve, reject) => {\n try {\n await micCheckRequestMediaPermissions(constraints);\n resolve(true);\n } catch (error) {\n let finalError = error;\n // Extends `mic-check` to also determine if there isn't a recording\n // device available, and rejects with the respective error data\n const {message, name} = finalError;\n if (DEVICE_NOT_FOUND_ERROR_MESSAGES.includes(message)) {\n // eslint-disable-next-line prefer-promise-reject-errors\n finalError = {\n type: MediaPermissionsErrorType.DeviceNotFound,\n name,\n message,\n };\n }\n this.log.error(() => `Media permission request failed: ${JSON.stringify(finalError)}`);\n reject(finalError);\n }\n });\n }\n}\n","import {MediaType, CodecType} from '../defs';\n\n/**\n * Represents a mapping between RTP time and absolute time\n *\n * @property {Instant} absTime is the absolute time\n * @property {number} rtpTime is the corresponding RTP timestamp\n */\nclass TimeMapping {\n constructor() {\n this.absTime = null;\n this.rtpTime = 0;\n }\n}\n\n/**\n * Represents information about a track\n *\n * @property {MediaType} mediaType is the major media type of the track\n * @property {CodecType} codecType is the odec type used to encode the track\n * @property {number} rtpClockRate is the clock rate used by sample RTP timestamps\n * @property {TimeMapping} timeMapping is the RTP time mapping for the track\n * @property {number} avgBitRate is the average bit rate of the track\n * @property {number} profileLevel is the profile and level (codec dependent)\n * @property {Uint8Array[]} setupBlocks are the setup blocks for the track (codec dependent)\n */\nclass TrackInfo {\n constructor(mediaType, codecType, clockRate) {\n this.mediaType = mediaType ? mediaType : MediaType.Unknown;\n this.codecType = codecType ? codecType : CodecType.Unknown;\n this.rtpClockRate = clockRate ? clockRate : 0;\n this.timeMapping = null;\n this.avgBitRate = 0;\n this.profileLevel = 0;\n this.setupBlocks = [];\n }\n}\n\n/**\n * Represents video information for a track\n *\n * @property {number} resWidth is the resolution width in pixels\n * @property {number} resHeight is the resolution height in pixels\n */\nclass VideoInfo {\n constructor(width, height) {\n this.resWidth = width ? width : 0;\n this.resHeight = height ? height : 0;\n }\n}\n\n/**\n * Represents audio information for a track\n *\n * @property {number} sampleRate is the number of samples per second\n * @property {number} numChannels is the number of channels\n * @property {number} bitsPerSample is the number of bits per sample\n */\nclass AudioInfo {\n constructor(rate, chan, bits) {\n this.sampleRate = rate ? rate : 0;\n this.numChannels = chan ? chan : 0;\n this.bitsPerSample = bits ? bits : 0;\n }\n}\n\nexport {TimeMapping, TrackInfo, VideoInfo, AudioInfo};\n","function fourcc(str) {\n if (str.length !== 4) {\n throw new Error('Invalid fourcc string');\n }\n\n return (str.charCodeAt(0) << 24) |\n (str.charCodeAt(1) << 16) |\n (str.charCodeAt(2) << 8) |\n str.charCodeAt(3);\n}\n\nexport {fourcc};\n","import {fourcc} from './isomutils';\n\nexport class BoxWriter {\n constructor(isomBuffer, type) {\n this.buffer = isomBuffer;\n this.startPos = isomBuffer.position;\n\n // Placeholder for the 32-bit size\n this.buffer.writeUint32(0);\n this.buffer.writeUint32(fourcc(type));\n }\n\n finish() {\n const pos = this.buffer.position;\n\n this.buffer.seek(this.startPos);\n this.buffer.writeUint32(pos - this.startPos);\n this.buffer.seek(pos);\n }\n}\n\nexport class FullBoxWriter extends BoxWriter {\n constructor(isomBuffer, type, version, flags) {\n super(isomBuffer, type);\n this.buffer.writeUint8(version);\n this.buffer.writeUint8(flags >> 16);\n this.buffer.writeUint16(flags & 0xffff);\n }\n}\n","import {BinWriter, Instant} from '@oecommon/plasma-js';\n// C++ reference\n// https://bitbucket.corp.adcinternal.com/projects/OEDEV/repos/oecore/browse/main/plasma/src/media/mediaformat.cpp\n\nconst Osp = {\n ControlMessageTag: 0x6374726c, // 'ctrl'\n SectionHeaderTag: 0x73736563, // 'ssec'\n SampleAckTag: 0x7361636b, // 'sack'\n NoopTag: 0x6e6f6f70, // 'noop'\n TrackHeaderTag: 0x7472616b, // 'trak'\n VideoHeaderTag: 0x76696e66, // 'vinf'\n AudioHeaderTag: 0x61696e66, // 'ainf'\n MediaSampleTag: 0x736d706c, // 'smpl'\n MetadataHeaderTag: 0x6d696e66, // 'minf'\n\n IframesFlag: 0x01,\n ReverseFlag: 0x02,\n TranscodedFlag: 0x04,\n\n CleanPointFlag: 0x01,\n EndOfFrameFlag: 0x02,\n CatchUpFlag: 0x04,\n\n Cmd: {\n StartStream: 1,\n Step: 2,\n GetExportInfo: 3,\n SwitchStream: 4,\n Ping: 5,\n StartBackchannel: 6,\n },\n\n Notify: {\n LiveStatus: 100,\n NoMoreData: 101,\n KeepAlive: 102,\n Timeout: 103,\n },\n\n Ptz: {\n Move: 200,\n Stop: 201,\n },\n\n Status: {\n Ok: 0,\n UnknownError: 1,\n UnknownCommand: 2,\n NotFound: 3,\n BadRequest: 4,\n NotAuthorized: 5,\n InvalidState: 6,\n MaxStreams: 7,\n },\n\n MsgType: {\n Command: 0,\n Response: 1,\n Notification: 2,\n },\n\n OspHeaderSize: 8,\n BaseSampleHeaderSize: 36,\n MaxObjectSize: 2 * 1024 * 1024,\n};\n\n/**\n * Represents an OSP control message\n *\n * @class\n * @param {number} Command ID\n * @param {Osp.MsgType} type Message type\n * @param {number} sequence Sequence number\n * @param {Osp.Status} status Status code\n */\nclass OspControlMessage {\n constructor(commandId, type, sequence, status) {\n this.commandId = commandId;\n this.type = type;\n this.sequence = (sequence !== undefined) ? sequence : 0;\n this.status = (status !== undefined) ? status : 0;\n this.args = {};\n }\n\n /**\n * Gets the string value of an argument, returning a default value if it isn't\n * present\n */\n getStringArgument(arg, defVal) {\n if (Object.prototype.hasOwnProperty.call(this.args, arg)) {\n return this.args[arg];\n } else {\n return defVal;\n }\n }\n\n /**\n * Gets the numerical value of an argument, returning a default value if it\n * isn't present\n */\n getNumArgument(arg, defVal) {\n if (Object.prototype.hasOwnProperty.call(this.args, arg)) {\n return Number(this.args[arg]);\n } else {\n return defVal;\n }\n }\n}\n\nOsp.writeObjectHeader = function(writer, tag, length) {\n writer.writeUint32(tag);\n writer.writeUint32(length);\n};\n\n/**\n * @class\n * @property {boolean} isIframes true if the section is I-frame only\n * @property {boolean} isReverse true if the section is in reverse\n * @property {boolean} isTranscoded true if the section is transcoded\n * @property {number} cookie Cookie for the section\n * @property {string} streamName Stream name\n */\nclass OspSectionHeader {\n constructor(cookie) {\n this.cookie = cookie;\n this.isIframes = false;\n this.isReverse = false;\n this.isTranscoded = false;\n this.streamName = null;\n }\n}\n\n/**\n * @typedef {Object} OspVideoInfoHeader\n * @property {number} trackId Track ID\n * @property {VideoInfo} videoInfo Video info for the track\n */\n\n/**\n * @typedef {Object} OspAudioInfoHeader\n * @property {number} trackId Track ID\n * @property {AudioInfo} audioInfo Audio info for the track\n */\n\n/**\n * @typedef {Object} OspSampleHeader\n * @property {SampleInfo} sampleInfo Sample information\n * @property {number} dataOffset Offset to the sample data\n */\n\n/**\n * Writes an OSP control message to an ArrayBuffer\n *\n * @param {OspControlMessage} Control message\n *\n * @returns {ArrayBuffer} Formatted message in wire format\n */\nOsp.formatControlMessage = function(message) {\n const strings = [];\n let len = 18; // Size of the object with no arguments\n let numArgs = 0;\n\n for (const arg in message.args) {\n if (Object.prototype.hasOwnProperty.call(message.args, arg)) {\n const stringVal = message.args[arg].toString();\n strings.push(arg);\n strings.push(stringVal);\n len += 4 + arg.length + stringVal.length;\n ++numArgs;\n }\n }\n\n const writer = new BinWriter(len);\n\n Osp.writeObjectHeader(writer, Osp.ControlMessageTag, len);\n\n writer.writeUint16(message.type);\n writer.writeUint16(message.commandId);\n writer.writeUint16(message.sequence);\n writer.writeUint16(message.status);\n writer.writeUint16(numArgs);\n\n for (let i = 0; i < strings.length; ++i) {\n writer.writeUint16(strings[i].length);\n writer.writeString(strings[i]);\n }\n\n return writer.get();\n};\n\nOsp.formatTrackHeader = function(trackHeader) {\n const len = 42;\n const writer = new BinWriter(len);\n Osp.writeObjectHeader(writer, Osp.TrackHeaderTag, len); // 8 len\n\n writer.writeUint16(trackHeader.trackId);\n writer.writeUint8(trackHeader.trackInfo.mediaType);\n writer.writeUint8(trackHeader.trackInfo.codecType);\n writer.writeUint32(trackHeader.trackInfo.rtpClockRate);\n writer.writeUint64(trackHeader.trackInfo.absTime);\n writer.writeUint32(trackHeader.trackInfo.rtpTime);\n writer.writeZero(4); // track flags, not currently defined\n writer.writeUint32(trackHeader.trackInfo.avgBitRate);\n writer.writeUint32(trackHeader.trackInfo.profileLevel);\n writer.writeZero(2); // setup blocks\n\n return writer.get();\n};\n\nOsp.formatAudioHeader = function(audioHeader) {\n const len = 16;\n\n const writer = new BinWriter(len);\n Osp.writeObjectHeader(writer, Osp.AudioHeaderTag, len); // 8 len\n writer.writeUint16(audioHeader.trackId);\n writer.writeUint8(audioHeader.audioInfo.numChannels);\n writer.writeUint8(audioHeader.audioInfo.bitsPerSample);\n writer.writeUint32(audioHeader.audioInfo.sampleRate);\n\n return writer.get();\n};\n\nOsp.formatSample = function(sample, littleEndian) {\n const isInt16 = sample.data.constructor === Int16Array;\n\n const sampleHeaderSize = Osp.BaseSampleHeaderSize;\n const dataLength = sample.data.length;\n const len = sampleHeaderSize + sample.data.byteLength;\n\n let flags = 0;\n if (sample.sampleInfo.isCleanPoint) {\n flags |= Osp.CleanPointFlag;\n }\n if (sample.sampleInfo.isEndOfFrame) {\n flags |= Osp.EndOfFrameFlag;\n }\n if (sample.sampleInfo.isCatchUp) {\n flags |= Osp.CatchUpFlag;\n }\n\n const writer = new BinWriter(len);\n Osp.writeObjectHeader(writer, Osp.MediaSampleTag, len); // 8 len\n writer.writeUint16(sample.sampleInfo.trackId);\n writer.writeUint8(sampleHeaderSize);\n writer.writeUint8(flags);\n writer.writeUint32(sample.sampleInfo.rtpTimestamp);\n writer.writeUint64(sample.sampleInfo.timestamp.value);\n writer.writeUint64(sample.sampleInfo.sourceTimestamp.value);\n writer.writeZero(4); // prevClean\n for (let i = 0; i < dataLength; i++) {\n const data = sample.data[i];\n if (isInt16) {\n writer.writeUint16(data, littleEndian);\n } else {\n writer.writeUint8(data, littleEndian);\n }\n }\n\n return writer.get();\n};\n\nOsp.formatSampleAck = function(sampleNum, cookie) {\n const SampleAckLen = 16;\n\n const writer = new BinWriter(SampleAckLen);\n\n Osp.writeObjectHeader(writer, Osp.SampleAckTag, SampleAckLen);\n writer.writeUint32(sampleNum);\n writer.writeUint32(cookie);\n\n return writer.get();\n};\n\nOsp.parseControlMessage = function(reader) {\n const type = reader.readUint16();\n const commandId = reader.readUint16();\n const sequence = reader.readUint16();\n const status = reader.readUint16();\n const numArgs = reader.readUint16();\n\n const message = new OspControlMessage(commandId, type, sequence, status);\n\n for (let i = 0; i < numArgs && !reader.hasFailed; ++i) {\n const nameLength = reader.readUint16();\n const name = reader.readString(nameLength);\n const valueLength = reader.readUint16();\n const value = reader.readString(valueLength);\n\n if (name && value) {\n message.args[name] = value;\n }\n }\n\n return !reader.hasFailed ? message : null;\n};\n\nOsp.parseSectionHeader = function(reader) {\n const header = {};\n const flags = reader.readUint16();\n\n header.isIframes = (flags & Osp.IframesFlag) !== 0;\n header.isReverse = (flags & Osp.ReverseFlag) !== 0;\n header.isTranscoded = (flags & Osp.TranscodedFlag) !== 0;\n\n header.cookie = reader.readUint16();\n\n const nameLen = reader.readUint16();\n header.streamName = reader.readString(nameLen);\n\n return !reader.hasFailed ? header : null;\n};\n\nOsp.parseTrackHeader = function(reader) {\n const header = {};\n\n header.trackId = reader.readUint16();\n header.trackInfo = {};\n\n header.trackInfo.mediaType = reader.readUint8();\n header.trackInfo.codecType = reader.readUint8();\n header.trackInfo.rtpClockRate = reader.readUint32();\n header.trackInfo.timeMapping = {};\n header.trackInfo.timeMapping.absTime = new Instant(reader.readUint64());\n header.trackInfo.timeMapping.rtpTime = reader.readUint32();\n reader.skip(4);\n header.trackInfo.avgBitRate = reader.readUint32();\n header.trackInfo.profileLevel = reader.readUint32();\n header.trackInfo.setupBlocks = [];\n\n const numSetupBlocks = reader.readUint16();\n\n for (let i = 0; i < numSetupBlocks; ++i) {\n const size = reader.readUint16();\n const block = reader.readUint8Array(size);\n\n if (block) {\n header.trackInfo.setupBlocks.push(block);\n }\n }\n\n return !reader.hasFailed ? header : null;\n};\n\nOsp.parseVideoInfoHeader = function(reader) {\n const header = {};\n\n header.trackId = reader.readUint16();\n header.videoInfo = {};\n\n reader.skip(2);\n header.videoInfo.resWidth = reader.readUint32();\n header.videoInfo.resHeight = reader.readUint32();\n\n return !reader.hasFailed ? header : null;\n};\n\nOsp.parseAudioInfoHeader = function(reader) {\n const header = {};\n\n header.trackId = reader.readUint16();\n header.audioInfo = {};\n\n header.audioInfo.numChannels = reader.readUint8();\n header.audioInfo.bitsPerSample = reader.readUint8();\n header.audioInfo.sampleRate = reader.readUint32();\n\n return !reader.hasFailed ? header : null;\n};\n\nOsp.parseSampleHeader = function(reader) {\n const sampleHeader = {};\n sampleHeader.sampleInfo = {};\n\n sampleHeader.sampleInfo.trackId = reader.readUint16();\n sampleHeader.dataOffset = reader.readUint8();\n const flags = reader.readUint8();\n sampleHeader.sampleInfo.rtpTimestamp = reader.readUint32();\n sampleHeader.sampleInfo.timestamp = new Instant(reader.readUint64());\n sampleHeader.sampleInfo.sourceTimestamp = new Instant(reader.readUint64());\n reader.skip(4);\n\n sampleHeader.sampleInfo.isCleanPoint = (flags & Osp.CleanPointFlag) !== 0;\n sampleHeader.sampleInfo.isEndOfFrame = (flags & Osp.EndOfFrameFlag) !== 0;\n sampleHeader.sampleInfo.isCatchUp = (flags & Osp.CatchUpFlag) !== 0;\n\n return sampleHeader;\n};\n\nexport {Osp, OspControlMessage, OspSectionHeader};\n","const FisheyeProjection = {\n Equidistant: 'Equidistant',\n Stereographic: 'Stereographic',\n Equisolid: 'Equisolid',\n};\n\nconst FisheyeMode = {\n Original: 'Original',\n Panorama: 'Panorama',\n SplitPanorama: 'SplitPanorama',\n Ptz: 'Ptz',\n};\n\nconst FisheyeMountType = {\n Ceiling: 'Ceiling',\n Wall: 'Wall',\n};\n\nexport {FisheyeProjection, FisheyeMode, FisheyeMountType};\n","function isSameCamera(camera1, camera2) {\n if (!camera1 || !camera2) {\n return !camera1 && !camera2;\n }\n\n return camera1.id === camera2.id;\n}\n\nfunction cameraStr(camera) {\n return camera ? camera.id : 'None';\n}\n\nexport {isSameCamera, cameraStr};\n","/* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n\nimport {MediaState, MediaType, StreamError, StreamQuality, OscarEvents,\n StreamTransportState, StreamTransportType} from '../defs';\nimport {BasicEvent, DataEvent, EventTarget, Logger} from '@oecommon/plasma-js';\nimport {detect} from 'detect-browser';\nimport {FisheyeMode} from './fisheyedefs';\nimport {isSameCamera, cameraStr} from './displayutils';\nimport {createDefaultNvrInfo} from '../util/createdefaultnvrinfo';\n\nconst BROWSER = detect();\nconst IS_SAFARI = BROWSER && BROWSER.name === 'safari';\n\nfunction chooseMaxResolution() {\n if (typeof localStorage !== 'undefined' && localStorage.getItem('no-res-limit')) {\n return null;\n }\n\n if (BROWSER && BROWSER.name === 'firefox') {\n return {width: 3000, height: 3000};\n } else {\n return null;\n }\n}\n\nconst MAX_BROWSER_RESOLUTION = chooseMaxResolution();\n\n/**\n * Represents a single video pane managed by a display manager\n */\nexport default class DisplayPane extends EventTarget {\n constructor(oscarFactory, multiplayer, index) {\n super();\n this.log = new Logger('displaypane', index + 1);\n this._index = index;\n this._oscarFactory = oscarFactory;\n this._multiPlayer = multiplayer;\n this._camera = null;\n this._showBoundingBoxes = false;\n this._quality = StreamQuality.Low;\n this._state = MediaState.Idle;\n this._errorType = StreamError.NoError;\n this._changeInProgress = false;\n this._streamController = null;\n this._renderController = null;\n this._metadataController = null;\n this._videoElement = null;\n this._eventOnly = false;\n this._handleVideoElement = this._handleVideoElement.bind(this);\n this._updateState = this._updateState.bind(this);\n this._presenter = oscarFactory.createVideoPresenter(this);\n this._handleResolutionChange = this._handleResolutionChange.bind(this);\n this._volume = 0;\n this._muted = true;\n this._newState = {};\n }\n\n get index() {\n return this._index;\n }\n\n set parentElement(value) {\n this._presenter.parentElement = value;\n }\n\n get parentElement() {\n return this._presenter.parentElement;\n }\n\n set newCamera(value) {\n this._newState.camera = value;\n if (this._newState.camera && !this._newState.camera.nvrInfo) {\n this._newState.camera.nvrInfo = createDefaultNvrInfo();\n }\n }\n\n get newCamera() {\n return this._newState.camera || null;\n }\n\n get currentCamera() {\n return this._camera;\n }\n\n set newQuality(value) {\n this._newState.quality = value;\n }\n\n get newQuality() {\n return this._newState.quality || StreamQuality.None;\n }\n\n get currentQuality() {\n return this._quality;\n }\n\n set fillMode(value) {\n this._presenter.fillMode = value;\n }\n\n get fillMode() {\n return this._presenter.fillMode;\n }\n\n set zoomState(value) {\n this._presenter.zoomState = value;\n }\n\n get zoomState() {\n return this._presenter.zoomState;\n }\n\n get transform() {\n return this._presenter.transform;\n }\n\n get objectFit() {\n return this._presenter.objectFit;\n }\n\n set showBoundingBoxes(value) {\n this._showBoundingBoxes = value;\n if (this._streamController) {\n this._streamController.showBoundingBoxes = value;\n }\n }\n\n get showBoundingBoxes() {\n return this._showBoundingBoxes;\n }\n\n get eventOnly() {\n return this._eventOnly;\n }\n\n get newEventOnly() {\n return this._newState.eventOnly || false;\n }\n\n set newEventOnly(value) {\n this._newState.eventOnly = value;\n }\n\n /**\n * Sets/gets the fisheye mode (original, PTZ, panorama or split panorama)\n */\n set fisheyeMode(value) {\n if (this._changeInProgress) {\n this._newState.fisheyeMode = value;\n return;\n }\n\n if (value === this._presenter.fisheyeMode) {\n return;\n }\n\n this._presenter.fisheyeMode = value;\n\n if (value === FisheyeMode.Original && IS_SAFARI && this._camera) {\n // Safari apparently doesn't support using a video element normally after it has\n // been used as a WebGL texture source. So we tear everything down and start it\n // from scratch.\n this.beginChange();\n\n this._newState.camera = this._camera;\n this._camera = null;\n\n this.endChange(true);\n }\n }\n\n get fisheyeMode() {\n return this._presenter.fisheyeMode;\n }\n\n /**\n * Sets the fisheye pan/tilt value ({pan: degreesX, tilt: degreesY})\n */\n set fisheyePanTilt(value) {\n if (this._changeInProgress) {\n this._newState.fisheyePanTilt = value;\n return;\n }\n\n this._presenter.fisheyePanTilt = value;\n }\n\n get fisheyePanTilt() {\n return this._presenter.fisheyePanTilt;\n }\n\n /**\n * Sets the fisheye pan/tilt speed in canonical units in the range -1.0..1.0 ({pan: speedX, tilt: speedY})\n */\n set fisheyePanTiltSpeed(value) {\n this._presenter.fisheyePanTiltSpeed = value;\n }\n\n get fisheyePanTiltSpeed() {\n return this._presenter.fisheyePanTiltSpeed;\n }\n\n /**\n * Sets the fisheye field of view in degrees\n */\n set fisheyeFieldOfView(value) {\n if (this._changeInProgress) {\n this._newState.fisheyeFieldOfView = value;\n return;\n }\n\n this._presenter.fisheyeFieldOfView = value;\n }\n\n get fisheyeFieldOfView() {\n return this._presenter.fisheyeFieldOfView;\n }\n\n /**\n * Gets the fisheye panorama params\n */\n get fisheyePanoParams() {\n return this._presenter.fisheyePanoParams;\n }\n\n get videoSize() {\n if (!this._videoElement) {\n return null;\n }\n\n const {videoWidth, videoHeight} = this._videoElement;\n\n return {width: videoWidth, height: videoHeight};\n }\n\n set volume(value) {\n this._volume = value;\n if (this._streamController) {\n this._streamController.volume = value;\n }\n }\n\n get volume() {\n return this._volume;\n }\n\n set muted(value) {\n this._muted = value;\n if (this._streamController) {\n this._streamController.muted = value;\n }\n }\n\n get muted() {\n return this._muted;\n }\n\n get state() {\n return this._state;\n }\n\n get errorType() {\n return this._errorType;\n }\n\n get renderTime() {\n return this._streamController ? this._streamController.renderTime : null;\n }\n\n get streamStats() {\n return this._streamController ? this._streamController.streamStats : null;\n }\n\n get streamController() {\n return this._streamController;\n }\n\n get transportState() {\n if (!this._streamController) {\n return StreamTransportState.Idle;\n }\n return this._streamController.transportState;\n }\n\n get transportType() {\n if (!this._streamController) {\n return StreamTransportType.None;\n }\n return this._streamController.transportType;\n }\n\n get transportInfo() {\n if (!this._streamController) {\n return null;\n }\n\n return this._streamController.transportInfo;\n }\n\n onBoundingBox(boundingBox) {\n this.dispatchEventAsync(new DataEvent(OscarEvents.BoundingBox, boundingBox));\n }\n\n onVideoPresenterTransform(videoPresenterTransform) {\n this.dispatchEventAsync(new DataEvent(OscarEvents.VideoPresenterTransformed, videoPresenterTransform));\n }\n\n onPlaybackChange(newPlaybackState) {\n if (this._metadataController) {\n this._metadataController.handlePlaybackChange(newPlaybackState);\n }\n }\n\n detach() {\n this.log.debug('Detaching pane');\n\n this._camera = null;\n this._newState.camera = null;\n\n this._removeStreamController();\n\n if (this._renderController) {\n this._renderController.onVideoElementChanged = null;\n this._renderController = null;\n }\n\n this._handleVideoElement(null);\n }\n\n beginChange() {\n if (this._changeInProgress) {\n this.log.warn('Change already in progress');\n return;\n }\n\n this.log.debug('beginChange');\n\n this._changeInProgress = true;\n this._newState.camera = this._camera;\n this._newState.quality = this._quality;\n this._newState.eventOnly = this._eventOnly;\n }\n\n endChange(commit) {\n if (!this._changeInProgress) {\n this.log.error('endChange called with no change in progress');\n return;\n }\n\n this.log.debug('endChange');\n\n this._changeInProgress = false;\n\n const cameraChanged = !isSameCamera(this.newCamera, this._camera);\n const videoStreamPropertiesChanged = cameraChanged\n || this.newQuality !== this._quality\n || this.newEventOnly !== this._eventOnly;\n\n if (!commit || !videoStreamPropertiesChanged) {\n // Nothing changed\n this._updatePresenter();\n // _newState cannot be cleared until after _updatePresenter\n this._newState = {};\n return;\n }\n\n this._removeStreamController();\n\n if (this._renderController) {\n this._renderController.onVideoElementChanged = null;\n this._renderController = null;\n this._handleVideoElement(null);\n }\n\n this.log.debug(() => `EC: New camera is ${cameraStr(this.newCamera)}, new quality is ${this.newQuality}`);\n\n if (cameraChanged) {\n this._clearMetadata();\n }\n\n this._camera = this.newCamera;\n this._quality = this.newQuality;\n this._eventOnly = this.newEventOnly;\n\n this._updatePresenter();\n\n // _newState cannot be cleared until after _updatePresenter\n this._newState = {};\n\n if (!this._camera) {\n this._setState(MediaState.Idle);\n return;\n }\n\n this._startPlayback();\n this._updateState();\n }\n\n get isChangeInProgress() {\n return this._changeInProgress;\n }\n\n endChangeWithState(streamState) {\n if (!this._changeInProgress) {\n this.log.error('endChangeWithState called with no change in progress');\n return;\n }\n\n this._changeInProgress = false;\n\n if (isSameCamera(this.newCamera, this._camera)) {\n this._updatePresenter();\n // _newState cannot be cleared until after _updatePresenter\n this._newState = {};\n return;\n }\n\n this.log.debug(() => `ECWS: New camera is ${cameraStr(this.newCamera)}, new quality is ${this.newQuality}`);\n\n this._clearMetadata();\n\n this._camera = this.newCamera;\n this._quality = this.newQuality;\n\n if (!this._camera) {\n this._setState(MediaState.Idle);\n this._newState = {};\n return;\n }\n\n if (this._streamController !== streamState.streamController) {\n if (this._streamController) {\n this._streamController.removeEventListener(OscarEvents.StateChange, this._updateState);\n this._streamController.removeEventListener(OscarEvents.StatChange, this._handleStreamStatChange.bind(this));\n this._multiPlayer.removeStreamController(this._streamController);\n }\n\n this._streamController = streamState.streamController;\n this._streamController.showBoundingBoxes = this._showBoundingBoxes;\n this._streamController.onTransportStateChange = this._handleTransportStateChange.bind(this);\n this._streamController.volume = this._volume;\n this._streamController.muted = this._muted;\n this._streamController.addEventListener(OscarEvents.StateChange, this._updateState);\n this._streamController.addEventListener(OscarEvents.StatChange, this._handleStreamStatChange.bind(this));\n }\n\n if (this._renderController !== streamState.renderController) {\n if (this._renderController) {\n this._renderController.onVideoElementChanged = null;\n }\n\n this._renderController = streamState.renderController;\n this._renderController.onVideoElementChanged = this._handleVideoElement;\n this._handleVideoElement(this._renderController.videoElement);\n }\n\n if (this._metadataController !== streamState.metadataController) {\n this._metadataController = streamState.metadataController;\n this._metadataController.displayPane = this;\n }\n\n this._updatePresenter();\n\n // _newState cannot be cleared until after _updatePresenter\n this._newState = {};\n\n if (streamState.fisheye) {\n const {mode, panTilt, fieldOfView} = streamState.fisheye;\n this.fisheyeMode = mode;\n this.fisheyePanTilt = panTilt;\n this.fisheyeFieldOfView = fieldOfView;\n } else {\n this.fisheyeMode = FisheyeMode.Original;\n this._presenter.fisheyeGeometry = null;\n }\n\n this._updateState();\n }\n\n /**\n * Detaches stream state without stopping the stream\n */\n detachStreamState() {\n const streamState = {\n streamController: this._streamController,\n renderController: this._renderController,\n metadataController: this._metadataController,\n fisheye: null,\n };\n\n if (this._streamController) {\n this._streamController.removeEventListener(OscarEvents.StateChange, this._updateState);\n this._streamController.removeEventListener(OscarEvents.StatChange, this._handleStreamStatChange.bind(this));\n }\n\n if (this._renderController) {\n this._renderController.onVideoElementChanged = null;\n }\n\n if (this._metadataController) {\n this._metadataController.displayPane = null;\n }\n\n if (this._presenter.fisheyeGeometry) {\n streamState.fisheye = {\n mode: this.fisheyeMode,\n panTilt: this.fisheyePanTilt,\n fieldOfView: this.fisheyeFieldOfView,\n };\n }\n\n this._streamController = null;\n this._renderController = null;\n this._metadataController = null;\n this._handleVideoElement(null);\n\n return streamState;\n }\n\n /**\n * Handles a resize of the video element container\n */\n handleResize() {\n this._presenter.handleResize();\n }\n\n hasDebugBlob(mediaType) {\n return this._streamController && this._streamController.hasDebugBlob(mediaType);\n }\n\n getDebugBlob(mediaType) {\n return this._streamController ? this._streamController.getDebugBlob(mediaType) : null;\n }\n\n _updatePresenter() {\n if (this._fisheyeSupported()) {\n this._presenter.fisheyeGeometry = this._camera.fisheyeInfo.geometry;\n this._presenter.fisheyeMountType = this._camera.fisheyeInfo.mount.type;\n this._presenter.fisheyeMountAngle = this._camera.fisheyeInfo.mount.angle;\n\n if (this._newState.fisheyeMode != null) {\n // fisheyeMode cannot be set until after the _presenter geometry has been set,\n // otherwise any non-Original fisheyeMode will be ignored\n this._presenter.fisheyeMode = this._newState.fisheyeMode;\n }\n\n if (this._newState.fisheyePanTilt != null) {\n // fisheyePanTilt must be set after fisheyeMode otherwise the _presenter's\n // renderer will be null and the pan tilt will be ignored\n this._presenter.fisheyePanTilt = this._newState.fisheyePanTilt;\n }\n\n if (this._newState.fisheyeFieldOfView != null) {\n // fisheyeFieldOfView must be set after fisheyeMode otherwise the _presenter's\n // renderer will be null and the fov will be ignored\n this._presenter.fisheyeFieldOfView = this._newState.fisheyeFieldOfView;\n }\n } else {\n // if camera is null or fisheye is not supported, reset fisheye\n this.fisheyeMode = FisheyeMode.Original;\n this._presenter.fisheyeGeometry = null;\n }\n\n if (!this._camera) {\n // reset zoom\n this._presenter.zoomState = null;\n }\n }\n\n _fisheyeSupported() {\n // OWS supplies a \"fisheye\" prop in its camera object, in which case camera.fisheye must be true.\n // Otherwise, if camera.fisheye isn't supplied (undefined), we effectively only check camera and camera.fisheyeInfo.\n return this._camera && this._camera.fisheyeInfo &&\n (this._camera.fisheye === true || this._camera.fisheye === undefined);\n }\n\n _startPlayback() {\n const maxResolution = DisplayPane._calculateMaxResolution(this._camera);\n\n this._streamController = this._oscarFactory.createStreamController(this._camera.nvrInfo, this._camera.id,\n DisplayPane._getStreamName(this._quality, this._eventOnly), maxResolution.resolution, maxResolution.softMax,\n this._camera.boundingBoxesSupported);\n this._streamController.showBoundingBoxes = this._showBoundingBoxes;\n this._streamController.onTransportStateChange = this._handleTransportStateChange.bind(this);\n this._streamController.volume = this._volume;\n this._streamController.muted = this._muted;\n\n this._renderController = this._oscarFactory.createVideoRenderController();\n this._renderController.onVideoElementChanged = this._handleVideoElement;\n this._renderController.onHandleResolutionChange = this._handleResolutionChange.bind(this);\n this._streamController.attachRenderController(MediaType.Video, this._renderController);\n\n const audioRenderController = this._oscarFactory.createAudioRenderController();\n this._streamController.attachRenderController(MediaType.Audio, audioRenderController);\n\n this._metadataController = this._oscarFactory.createMetadataController(this);\n this._streamController.attachMetadataController(this._metadataController);\n\n this._streamController.addEventListener(OscarEvents.StateChange, this._updateState);\n this._streamController.addEventListener(OscarEvents.StatChange, this._handleStreamStatChange.bind(this));\n this._multiPlayer.addStreamController(this._streamController);\n }\n\n _updateState() {\n if (!this._camera) {\n this._setState(MediaState.Idle);\n } else if (!this._streamController) {\n this._setState(MediaState.Starting);\n } else {\n this._setState(this._streamController.videoStatus, this._streamController.streamError);\n }\n }\n\n _handleVideoElement(element) {\n this._presenter.videoElement = element;\n }\n\n _handleResolutionChange() {\n if (this._presenter) {\n this._presenter._scaleVideoElement();\n }\n }\n\n _handleTransportStateChange() {\n this.dispatchEventAsync(new BasicEvent(OscarEvents.TransportStateChange));\n }\n\n _setState(state, error) {\n if (state === this._state && error === this._errorType) {\n return;\n }\n\n this._state = state;\n\n if (state === MediaState.Error) {\n this._errorType = error ? error : StreamError.UnknownError;\n } else {\n this._errorType = StreamError.NoError;\n }\n\n this.dispatchEvent(new BasicEvent(OscarEvents.StateChange));\n }\n\n _handleStreamStatChange() {\n this.dispatchEvent(new BasicEvent(OscarEvents.StatChange));\n }\n\n _removeStreamController() {\n if (this._streamController) {\n this.log.debug('Removing stream controller');\n this._multiPlayer.removeStreamController(this._streamController);\n this._streamController.removeEventListener(OscarEvents.StateChange, this._updateState);\n this._streamController.detachRenderController(MediaType.Video);\n this._streamController.detachRenderController(MediaType.Audio);\n this._streamController.detachMetadataController();\n this._streamController.detach();\n this._streamController = null;\n }\n }\n\n _clearMetadata() {\n if (this._metadataController) {\n // clear metadata from previous camera to prevent stale dispatches\n this._metadataController.clear();\n }\n }\n\n static _getStreamName(quality, eventOnly) {\n if (eventOnly) {\n return 'event';\n }\n\n switch (quality) {\n case StreamQuality.High:\n return 'high';\n\n case StreamQuality.Medium:\n return 'medium';\n\n default:\n return 'low';\n }\n }\n\n static _calculateMaxResolution(camera) {\n if (MAX_BROWSER_RESOLUTION) {\n return {resolution: MAX_BROWSER_RESOLUTION, softMax: false};\n }\n\n return {resolution: null, softMax: false};\n }\n}\n","const LocalNvrId = 'local';\n\nexport function createDefaultNvrInfo() {\n return {id: LocalNvrId};\n}\n","import DisplayPane from './displaypane';\nimport {isSameCamera} from './displayutils';\nimport {AudioRecordingState} from '../defs';\n\n/**\n * Manages a collection of video display panes\n */\nexport default class DisplayManager {\n constructor(oscarFactory, multiPlayer) {\n this._oscarFactory = oscarFactory;\n this._multiPlayer = multiPlayer;\n this._audioRecorder = this._oscarFactory.createAudioRecorder();\n this._panes = [];\n this._masterPane = -1;\n this._previousPanes = null;\n this._changeWithNewPaneCount = false;\n this._volume = 0;\n this._muted = true;\n this.onPlaybackChange = this._handlePlaybackChange.bind(this);\n }\n\n get oscarFactory() {\n return this._oscarFactory;\n }\n\n get reactor() {\n return this._oscarFactory.reactor;\n }\n\n get audioRecorder() {\n return this._audioRecorder;\n }\n\n get recordingState() {\n return this._audioRecorder.recordingState;\n }\n\n /**\n * Gets the current pane count\n */\n get paneCount() {\n return this._panes.length;\n }\n\n /**\n * Sets the new pane count\n */\n set paneCount(count) {\n const origCount = this._panes.length;\n\n if (!this._changeWithNewPaneCount) {\n for (let i = count; i < origCount; ++i) {\n this._panes[i].detach();\n }\n }\n\n this._panes.length = count;\n\n for (let i = origCount; i < count; ++i) {\n this._panes[i] = this._getNewDisplayPane(i);\n }\n }\n\n getPane(index) {\n return (index < this._panes.length) ? this._panes[index] : null;\n }\n\n setLive() {\n if (this._multiPlayer.isLive) {\n return;\n }\n\n this._multiPlayer.startLive();\n }\n\n setPlaybackState(state) {\n this.setPlaybackStateAsync(state);\n }\n\n setPlaybackStateAsync(state) {\n this._handleLiveToRecordedChange(state.playbackTime, state.paused);\n return this._multiPlayer.setPlaybackState(state).then(() => {\n this.onPlaybackChange({\n paused: state.paused != null ? this.paused : undefined,\n playbackTime: state.playbackTime != null ? this.playbackTime : undefined,\n speed: state.speed != null ? this.speed : undefined,\n });\n });\n }\n\n get isLive() {\n return this._multiPlayer.isLive;\n }\n\n set playbackTime(value) {\n this._handleLiveToRecordedChange(value, undefined);\n this._multiPlayer.setPlaybackState({playbackTime: value});\n }\n\n get playbackTime() {\n return this._multiPlayer.playbackTime;\n }\n\n set speed(value) {\n this._multiPlayer.setPlaybackState({speed: value});\n }\n\n get speed() {\n return this._multiPlayer.speed;\n }\n\n set paused(value) {\n this._handleLiveToRecordedChange(undefined, value);\n this._multiPlayer.setPlaybackState({paused: value});\n }\n\n get paused() {\n return this._multiPlayer.paused;\n }\n\n set volume(value) {\n this._volume = value;\n\n // Apply the same volume to all panes; \"muted\" is used to turn on and off.\n for (const pane of this._panes) {\n pane.volume = value;\n }\n }\n\n get volume() {\n return this._volume;\n }\n\n set muted(value) {\n this._muted = value;\n const masterPane = this.getPane(this._masterPane);\n if (masterPane) {\n masterPane.muted = value;\n }\n }\n\n get muted() {\n return this._muted;\n }\n\n set masterPane(value) {\n this._handleMasterPaneChange(value);\n }\n\n get masterPane() {\n return this._masterPane;\n }\n\n get hasStreams() {\n return this._multiPlayer.hasStreams;\n }\n\n _handleMasterPaneChange(value) {\n const initialChange = this._masterPane === -1 && value !== -1;\n const didChange = this._masterPane !== value;\n this._masterPane = value;\n\n if (value >= 0 && value < this._panes.length) {\n this._multiPlayer.indexStreamController = this._panes[value].streamController;\n }\n\n for (let i = 0; i < this._panes.length; ++i) {\n this._panes[i].muted = (i === value) ? this._muted : true;\n }\n\n if (!initialChange && didChange && this.recordingState !== AudioRecordingState.Idle) {\n this.stopAudioRecording();\n }\n }\n\n _handlePlaybackChange(newPlaybackState) {\n for (let i = 0; i < this._panes.length; ++i) {\n const pane = this.getPane(i);\n if (!pane) {\n continue;\n }\n pane.onPlaybackChange(newPlaybackState);\n }\n }\n\n step(direction) {\n return this._multiPlayer.step(direction).then(() => {\n this.onPlaybackChange({\n playbackTime: this.playbackTime,\n speed: this.speed,\n paused: this.paused,\n });\n });\n }\n\n suspend() {\n this._multiPlayer.suspend();\n\n if (!this.isLive) {\n // if suspended while playing recorded video, paused\n // will become true, notify listeners\n this.onPlaybackChange({\n paused: this.paused,\n });\n }\n }\n\n resume() {\n this._multiPlayer.resume();\n }\n\n beginChange() {\n for (const pane of this._panes) {\n pane.beginChange();\n }\n }\n\n beginChangeWithNewPaneCount(newPaneCount) {\n this._changeWithNewPaneCount = true;\n this._previousPanes = [...this._panes];\n this.paneCount = newPaneCount;\n this.beginChange();\n }\n\n _commitChangePanes(panes, previousPanes) {\n const oldCameraMap = {};\n\n // See if any of the new assignments can be expressed as moves from the old\n // assignments. This avoids having to tear down streams and create new ones.\n for (const pane of previousPanes || panes) {\n const currentCamera = pane.currentCamera;\n\n // If this pane has an existing camera and is about to be cleared or\n // switched to a new camera, its stream state may be able to be reused.\n if (currentCamera && !isSameCamera(currentCamera, pane.newCamera)) {\n oldCameraMap[DisplayManager._makePaneKey(currentCamera, pane.currentQuality)] = pane;\n }\n }\n\n // Gather stream state from any panes whose state can be reused\n const streamStates = [];\n\n for (let i = 0; i < panes.length; ++i) {\n const pane = panes[i];\n\n const newCamera = pane.newCamera;\n const newQuality = pane.newQuality;\n\n if (this._masterPane === i && pane.currentCamera !== pane.newCamera) {\n // This means that the master pane's camera is changing. Technically it\n // could be changing to the same camera (hence why we check before\n // isSameCamera), and we still want to stop even in that scenario.\n if (this._audioRecorder.recordingState !== AudioRecordingState.Idle) {\n this.stopAudioRecording();\n }\n }\n\n if (isSameCamera(newCamera, pane.currentCamera) && newQuality === pane.currentQuality) {\n // This pane hasn't changed, so leave it alone.\n pane.endChange(true);\n continue;\n }\n\n if (newCamera) {\n const key = DisplayManager._makePaneKey(newCamera, newQuality);\n const oldPane = oldCameraMap[key];\n\n // we want to preserve the existing stream if possible, but in\n // the case of event only, we don't want to reuse an old osp\n // stream retriever because it may have stale frame info, and\n // will be using the event stream, which we may no longer want\n if (oldPane && !oldPane.eventOnly) {\n streamStates[i] = oldPane.detachStreamState();\n delete oldCameraMap[key];\n } else if (oldPane) {\n oldPane.detach();\n delete oldCameraMap[key];\n }\n }\n }\n\n // Now finalize the changes to all panes, reusing stream state where possible.\n for (let i = 0; i < panes.length; ++i) {\n const pane = panes[i];\n\n if (!pane.isChangeInProgress) {\n // We already completed this one because it was cleared or unchanged\n continue;\n }\n\n const streamState = streamStates[i];\n\n if (streamState) {\n pane.endChangeWithState(streamState);\n } else {\n pane.endChange(true);\n }\n }\n\n if (previousPanes) {\n for (let i = panes.length; i < previousPanes.length; ++i) {\n previousPanes[i].detach();\n }\n }\n }\n\n _commitChangeIndexController() {\n this._handleMasterPaneChange(this._masterPane);\n }\n\n _commitChangeRefreshPlaybackState() {\n // apply pending playback state to newly added streams\n const state = {...this._multiPlayer._requestedState};\n return this._multiPlayer.refreshPlaybackState().then(() => {\n this.onPlaybackChange({\n paused: state.paused != null ? this.paused : undefined,\n playbackTime: state.playbackTime != null ? this.playbackTime : undefined,\n speed: state.speed != null ? this.speed : undefined,\n });\n });\n }\n\n commitChange() {\n this._commitChangePanes(this._panes, this._previousPanes);\n this._commitChangeIndexController();\n this._commitChangeRefreshPlaybackState();\n this._changeWithNewPaneCount = false;\n this._previousPanes = null;\n }\n\n cancelChange() {\n this._changeWithNewPaneCount = false;\n this._previousPanes = null;\n for (const pane of this._panes) {\n pane.endChange(false);\n }\n }\n\n stop() {\n this._multiPlayer.stop();\n }\n\n requestAudioRecording() {\n return this._audioRecorder.requestPermission();\n }\n\n startAudioRecording(recordingTimesliceMillis) {\n if (!this._multiPlayer.isLive) {\n return Promise.reject(new Error('Two-way audio is only supported during live playback'));\n }\n\n const masterPane = this.getPane(this._masterPane);\n if (!masterPane) {\n return Promise.reject(new Error('No master pane found'));\n }\n\n const masterDisplayCamera = masterPane.currentCamera;\n if (!masterDisplayCamera) {\n return Promise.reject(new Error('No camera available for master pane'));\n }\n\n if (this._audioRecorder.recordingState === AudioRecordingState.Recording) {\n return Promise.resolve();\n }\n\n if (typeof recordingTimesliceMillis !== 'undefined') {\n this._audioRecorder.recordingTimesliceMillis = recordingTimesliceMillis;\n }\n\n return this._audioRecorder.start(masterDisplayCamera);\n }\n\n stopAudioRecording() {\n this._audioRecorder.stop();\n }\n\n _handleLiveToRecordedChange(playbackTime, paused) {\n const wontBeLiveAfterChange = playbackTime != null || paused === true;\n const wasLiveBeforeChange = this._multiPlayer.isLive;\n const wasRecording = this.recordingState !== AudioRecordingState.Idle;\n\n if (wontBeLiveAfterChange && wasLiveBeforeChange && wasRecording) {\n this.stopAudioRecording();\n }\n }\n\n _getNewDisplayPane(index) {\n const pane = new DisplayPane(this._oscarFactory, this._multiPlayer, index);\n pane.volume = this._volume;\n pane.muted = true;\n return pane;\n }\n\n static _makePaneKey(camera, quality) {\n return camera.id + ':' + quality;\n }\n}\n","import {BasicEvent, EventTarget} from '@oecommon/plasma-js';\nimport {OscarEvents} from '../defs';\n\n/**\n * Display Manager that also provides support for \"standalone\" panes (panes\n * that use a negative pane index and are intended to live outside the traditional\n * grid structure), as well as events for playback state and time changes.\n */\nexport default class AdvancedDisplayManager extends EventTarget {\n constructor(displayManager, playbackTimeInterval = 1000, playbackTimeIntervalPoller = setInterval.bind(window)) {\n super();\n this._displayManager = displayManager;\n this._displayManager.onPlaybackChange = this._handlePlaybackChange.bind(this);\n this._playbackTimeIntervalId = null;\n this._playbackTimeInterval = playbackTimeInterval;\n this._playbackTimeIntervalPoller = playbackTimeIntervalPoller;\n this._standalonePanes = new Map();\n }\n\n get oscarFactory() {\n return this._displayManager.oscarFactory;\n }\n\n get reactor() {\n return this._displayManager.reactor;\n }\n\n get audioRecorder() {\n return this._displayManager.audioRecorder;\n }\n\n get recordingState() {\n return this._displayManager.recordingState;\n }\n\n get paneCount() {\n return this._displayManager.paneCount;\n }\n\n set paneCount(value) {\n this._displayManager.paneCount = value;\n }\n\n get standalonePaneCount() {\n return this._standalonePanes.size;\n }\n\n get isLive() {\n return this._displayManager.isLive;\n }\n\n set playbackTime(value) {\n this._displayManager.playbackTime = value;\n }\n\n get playbackTime() {\n return this._displayManager.playbackTime;\n }\n\n set speed(value) {\n this._displayManager.speed = value;\n }\n\n get speed() {\n return this._displayManager.speed;\n }\n\n set paused(value) {\n this._displayManager.paused = value;\n if (value === false) {\n this._beginPlaybackTimeInterval();\n return;\n }\n if (value === true) {\n this._endPlaybackTimeInterval();\n return;\n }\n }\n\n get paused() {\n return this._displayManager.paused;\n }\n\n set volume(value) {\n this._displayManager.volume = value;\n }\n\n get volume() {\n return this._displayManager.volume;\n }\n\n set muted(value) {\n this._displayManager.muted = value;\n }\n\n get muted() {\n return this._displayManager.muted;\n }\n\n set masterPane(value) {\n this._displayManager.masterPane = value;\n }\n\n get masterPane() {\n return this._displayManager.masterPane;\n }\n\n get hasStreams() {\n return this._displayManager.hasStreams;\n }\n\n _beginPlaybackTimeInterval() {\n if (this._playbackTimeIntervalId !== null && this._playbackTimeIntervalId !== undefined) {\n return;\n }\n\n this._playbackTimeIntervalId = this._playbackTimeIntervalPoller(() => {\n this.dispatchEventAsync(new BasicEvent(OscarEvents.PlaybackTimeChange));\n }, this._playbackTimeInterval);\n }\n\n _endPlaybackTimeInterval() {\n if (this._playbackTimeIntervalId === null || this._playbackTimeIntervalId === undefined) {\n return;\n }\n\n clearInterval(this._playbackTimeIntervalId);\n this._playbackTimeIntervalId = null;\n }\n\n _getPane(gridIndex) {\n return this._displayManager.getPane(gridIndex);\n }\n\n _getStandalonePane(gridIndex) {\n if (!this._standalonePanes.has(gridIndex)) {\n const pane = this._displayManager._getNewDisplayPane(gridIndex);\n this._standalonePanes.set(gridIndex, pane);\n }\n\n return this._standalonePanes.get(gridIndex);\n }\n\n _getStandalonePanesArray() {\n return Array.from(this._standalonePanes.values());\n }\n\n _handlePlaybackChange(newPlaybackState) {\n const indexes = this.allPaneIndexes();\n for (let i = 0; i < indexes.length; ++i) {\n const pane = this.getPane(indexes[i]);\n if (!pane) {\n continue;\n }\n pane.onPlaybackChange(newPlaybackState);\n }\n }\n\n getPane(gridIndex) {\n if (gridIndex < 0) {\n return this._getStandalonePane(gridIndex);\n }\n return this._getPane(gridIndex);\n }\n\n allPaneIndexes() {\n const indexes = [];\n for (const standalonePane of this._standalonePanes) {\n indexes.push(standalonePane[0]);\n }\n\n for (let i = 0; i < this._displayManager._panes.length; ++i) {\n indexes.push(i);\n }\n\n return indexes;\n }\n\n beginChange() {\n this._displayManager.beginChange();\n for (const pane of this._getStandalonePanesArray()) {\n pane.beginChange();\n }\n }\n\n beginChangeWithNewPaneCount(newPaneCount) {\n this._displayManager.beginChangeWithNewPaneCount(newPaneCount);\n for (const pane of this._getStandalonePanesArray()) {\n pane.beginChange();\n }\n }\n\n commitChange() {\n this._displayManager._commitChangePanes(this._displayManager._panes, this._displayManager._previousPanes);\n this._displayManager._commitChangePanes(this._getStandalonePanesArray());\n this._displayManager._commitChangeIndexController();\n this._displayManager._previousPanes = null;\n this._displayManager._commitChangeRefreshPlaybackState().then(() => {\n this.dispatchEventAsync(new BasicEvent(OscarEvents.PlaybackStateChange));\n this.dispatchEventAsync(new BasicEvent(OscarEvents.PlaybackTimeChange));\n });\n }\n\n cancelChange() {\n this._displayManager.cancelChange();\n for (const pane of this._getStandalonePanesArray()) {\n pane.endChange(false);\n }\n }\n\n setLive() {\n this._displayManager.setLive();\n this._beginPlaybackTimeInterval();\n }\n\n setPlaybackState(state) {\n this.setPlaybackStateAsync(state);\n }\n\n setPlaybackStateAsync(state) {\n return this._displayManager.setPlaybackStateAsync(state).then(() => {\n this.dispatchEventAsync(new BasicEvent(OscarEvents.PlaybackStateChange));\n this.dispatchEventAsync(new BasicEvent(OscarEvents.PlaybackTimeChange));\n\n if (state !== null && state !== undefined) {\n if (state.paused === false) {\n this._beginPlaybackTimeInterval();\n } else if (state.paused === true) {\n this._endPlaybackTimeInterval();\n }\n }\n });\n }\n\n step(direction) {\n this._endPlaybackTimeInterval();\n return this._displayManager.step(direction).then(() => {\n this.dispatchEventAsync(new BasicEvent(OscarEvents.PlaybackTimeChange));\n });\n }\n\n suspend() {\n this._displayManager.suspend();\n this._endPlaybackTimeInterval();\n }\n\n resume() {\n this._displayManager.resume();\n if (this._displayManager.paused === false) {\n this._beginPlaybackTimeInterval();\n }\n }\n\n stop() {\n this._displayManager.stop();\n this._endPlaybackTimeInterval();\n }\n\n requestAudioRecording() {\n return this._displayManager.requestAudioRecording();\n }\n\n startAudioRecording(recordingTimesliceMillis) {\n return this._displayManager.startAudioRecording(recordingTimesliceMillis);\n }\n\n stopAudioRecording() {\n this._displayManager.stopAudioRecording();\n }\n}\n","import {BasicEvent, EventTarget} from '@oecommon/plasma-js';\nimport {OscarEvents} from '../defs';\n\nconst SamplePeriodSeconds = 2;\n\n/**\n * Keeps track of stream statistics\n */\nexport default class StreamStats extends EventTarget {\n constructor() {\n super();\n this._avgBitRate = 0;\n this._avgFrameRate = 0;\n this._bitCount = 0;\n this._clockRate = 0;\n this._frameCount = 0;\n this._prevTimestamp = null;\n this._samplePeriod = 0;\n this._samplingStarted = false;\n }\n\n setClockRate(clockRate) {\n if (this._clockRate === clockRate) {\n return;\n }\n\n this._clockRate = clockRate;\n this._samplePeriod = SamplePeriodSeconds * clockRate;\n this._avgBitRate = 0;\n this._avgFrameRate = 0;\n this._bitCount = 0;\n this._frameCount = 0;\n this._prevTimestamp = 0;\n this._samplingStarted = false;\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n update(sample) {\n if (this._clockRate === 0) {\n return;\n }\n\n // We do not want to update if the sample is not an end of frame. Some cameras\n // try to be efficient by sending slices if we update on every sample then the\n // framerate will appear larger than it actually is.\n if (!sample.sampleInfo.isEndOfFrame) {\n return;\n }\n\n // Restart sampling if either it hasn't started, or if this sample's\n // timestamp is way out of line with previous ones. The latter usually\n // indicates a discontinuity in the stream, e.g. switching between high\n // and low streams.\n const rtpTimestamp = sample.sampleInfo.rtpTimestamp;\n if (!this._samplingStarted || rtpTimestamp < this._prevTimestamp ||\n rtpTimestamp > this._prevTimestamp + (this._samplePeriod * 3)) {\n this._samplingStarted = true;\n this._prevTimestamp = rtpTimestamp;\n this._bitCount = 0;\n this._frameCount = 0;\n } else if (rtpTimestamp >= (this._prevTimestamp + this._samplePeriod)) {\n const delta = (rtpTimestamp - this._prevTimestamp) / this._clockRate;\n this._avgBitRate = this._bitCount / delta;\n this._avgFrameRate = this._frameCount / delta;\n this._prevTimestamp = rtpTimestamp;\n this._bitCount = 0;\n this._frameCount = 0;\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n this._bitCount += sample.size * 8;\n ++this._frameCount;\n }\n\n get stats() {\n return {\n bitRate: this._avgBitRate,\n frameRate: this._avgFrameRate,\n };\n }\n}\n","/* global ArrayBuffer, DataView, Uint8Array */\n\nconst DEFAULT_BUFFER_SIZE = 2048;\nconst GROW_SIZE = 1024;\n\nconst UINT32_MAX = Math.pow(2, 32);\n\nexport default class IsomBuffer {\n constructor(initialSize) {\n this._buffer = new ArrayBuffer(initialSize || DEFAULT_BUFFER_SIZE);\n this._position = 0;\n this._endPos = 0;\n this._dataView = new DataView(this._buffer);\n }\n\n get size() {\n return this._endPos;\n }\n\n get capacity() {\n return this._buffer.byteLength;\n }\n\n get position() {\n return this._position;\n }\n\n writeUint8(value) {\n this.prepareWrite(1);\n this._dataView.setUint8(this._position, value);\n this._position += 1;\n }\n\n writeUint16(value) {\n this.prepareWrite(2);\n this._dataView.setUint16(this._position, value);\n this._position += 2;\n }\n\n writeUint32(value) {\n this.prepareWrite(4);\n this._dataView.setUint32(this._position, value);\n this._position += 4;\n }\n\n writeUint64(value) {\n const upper = Math.floor(value / UINT32_MAX);\n const lower = Math.floor(value % UINT32_MAX);\n\n this.prepareWrite(8);\n this._dataView.setUint32(this._position, upper);\n this._position += 4;\n this._dataView.setUint32(this._position, lower);\n this._position += 4;\n }\n\n writeZero(count) {\n this.prepareWrite(count);\n for (let i = 0; i < count; ++i) {\n this._dataView.setUint8(this._position++, 0);\n }\n }\n\n writeString(text) {\n this.prepareWrite(text.length);\n\n for (let i = 0; i < text.length; ++i) {\n this._dataView.setUint8(this._position++, text.charCodeAt(i));\n }\n }\n\n writeBytes(uint8Array, count) {\n const size = count || uint8Array.byteLength;\n this.prepareWrite(size);\n\n for (let i = 0; i < size; ++i) {\n this._dataView.setUint8(this._position++, uint8Array[i]);\n }\n }\n\n writeBuffer(isomBuffer) {\n if (isomBuffer.size > 0) {\n this.writeBytes(new Uint8Array(isomBuffer._buffer), isomBuffer.size);\n }\n }\n\n seek(pos) {\n if (pos > this._endPos) {\n throw new Error('Invalid seek position');\n }\n\n this._position = pos;\n }\n\n getUint8Array() {\n return new Uint8Array(this._buffer, 0, this._endPos);\n }\n\n prepareWrite(size) {\n if (this._position + size > this._buffer.byteLength) {\n const newSize = this._buffer.byteLength + Math.max(GROW_SIZE, size);\n\n const newBuf = new ArrayBuffer(newSize);\n new Uint8Array(newBuf).set(new Uint8Array(this._buffer));\n this._buffer = newBuf;\n this._dataView = new DataView(this._buffer);\n }\n\n this._endPos = Math.max(this._endPos, this._position + size);\n }\n}\n","/* global Uint8Array*/\nimport {BinReader, BinWriter} from '@oecommon/plasma-js';\n\nexport const H265NaluType = {\n VPS_NUT: 32,\n SPS_NUT: 33,\n PPS_NUT: 34,\n};\n\nconst H265NaluTypeByte0Mask = 0x7e;\nconst H265NaluTypeByte0Shift = 1;\n\n/**\n * Remove start code emulation bytes from an H.26x stream\n */\nexport function removeEmulationBytes(ebsp) {\n // Check for all patterns 0x000003, and remove the 0x03 byte from the stream.\n const reader = new BinReader(ebsp);\n const writer = new BinWriter(ebsp.byteLength);\n\n let zeroCount = 0;\n while (reader.canRead(1)) {\n const cur = reader.readUint8();\n\n if (zeroCount >= 2 && cur === 3) {\n zeroCount = 0;\n continue;\n }\n\n zeroCount = cur === 0 ? zeroCount + 1 : 0;\n writer.writeUint8(cur);\n }\n\n return new Uint8Array(writer.get());\n}\n\n/**\n * Get a NALU type given the first byte of an H.265 NALU\n */\nexport function getH265NaluType(headerByte0) {\n return (headerByte0 & H265NaluTypeByte0Mask) >> H265NaluTypeByte0Shift;\n}\n","import {BoxWriter, FullBoxWriter} from './boxwriter';\nimport {CodecType} from '../../defs';\nimport IsomBuffer from './isombuffer';\nimport {fourcc} from './isomutils';\nimport {H265NaluType, removeEmulationBytes, getH265NaluType} from './h26xutil';\nimport {BinReader} from '@oecommon/plasma-js';\n\n// \"und\" in the packed bit format used in mdhd\nconst UndLanguage = 0x55c4;\nconst DefaultDpiValue = 0x00480000;\n\n// ISO 14496-1 7.2.2.1\nconst EsDescrTag = 3;\nconst DecoderConfigDescrTag = 4;\nconst DecSpecificInfoTag = 5;\nconst SlConfigDescrTag = 6;\n\nconst AacObjectType = 0x40;\nconst AudioStreamType = 5;\n\n// See https://wiki.multimedia.cx/index.php/MPEG-4_Audio for explanation\n// Object Type: AAC LC - 00010\n// Frequency Index: 48000 - 0011\n// Channel config: 1 - 0001\n// Audio Specific Config: 0001 0001 1000 1[000]\nconst DefaultAacConfigUint16 = 0x1188;\n\n// ISO 14496-14 3.1.2\nconst SlPredefined = 2;\n\nfunction writeUnityMatrix(writer) {\n writer.writeUint32(0x00010000);\n writer.writeZero(12);\n writer.writeUint32(0x00010000);\n writer.writeZero(12);\n writer.writeUint32(0x40000000);\n}\n\n/**\n * Gets an optional bool flag value for the \"Independent and\n * Disposable Samples Box\" (sdtp)\n *\n * See ISO/IEC 14496-12 section 8.6.4\n */\nfunction getSdtpFlagValue(optBool) {\n if (optBool === null) {\n return 0;\n }\n\n return optBool ? 1 : 2;\n}\n\nconst Isom = {\n TfhdFlags: {\n BaseDataOffsetPresent: 0x0001,\n SampleDescIndexPresent: 0x0002,\n DefaultSampleDurationPresent: 0x0008,\n DefaultSampleSizePresent: 0x0010,\n DefaultSampleFlagsPresent: 0x0020,\n DurationIsEmpty: 0x10000,\n DefaultBaseIsMoof: 0x20000,\n },\n\n TrunFlags: {\n DataOffsetPresent: 0x0001,\n FirstSampleFlagsPresent: 0x0004,\n SampleDurationPresent: 0x0100,\n SampleSizePresent: 0x0200,\n SampleFlagsPresent: 0x0400,\n SampleCompTimeOffsetPresent: 0x0800,\n },\n\n FileType: class {\n constructor() {\n this.majorBrand = 0;\n this.minorVersion = 0;\n this.compatibleBrands = [];\n }\n },\n\n MovieHeader: class {\n constructor() {\n this.creationTime = null;\n this.modificationTime = null;\n this.timescale = 0;\n this.duration = null;\n this.nextTrackId = 0;\n }\n },\n\n TrackHeader: class {\n constructor() {\n this.enabled = false;\n this.inMovie = false;\n this.inPreview = false;\n this.creationTime = null;\n this.modificationTime = null;\n this.trackId = 0;\n this.duration = null;\n this.volume = 0;\n this.width = 0;\n this.height = 0;\n }\n },\n\n MediaHeader: class {\n constructor() {\n this.creationTime = null;\n this.modificationTime = null;\n this.timescale = 0;\n this.duration = null;\n }\n },\n\n SampleDescription: class {\n constructor() {\n this.trackInfo = null;\n this.videoInfo = null;\n this.audioInfo = null;\n }\n },\n\n FragmentSampleFlags: class {\n constructor() {\n this.sampleDependsOn = null;\n this.sampleIsDependedOn = null;\n this.sampleHasRedundancy = null;\n this.samplePaddingValue = 0;\n this.sampleIsNonSyncSample = false;\n this.sampleDegradationPriority = 0;\n }\n },\n\n TrackExtendsData: class {\n constructor() {\n this.trackId = 0;\n this.defaultSampleDescriptionIndex = 0;\n this.defaultSampleDuration = 0;\n this.defaultSampleSize = 0;\n this.defaultSampleFlags = new Isom.FragmentSampleFlags();\n }\n },\n\n TrackRunSample: class {\n constructor() {\n this.duration = 0;\n this.size = 0;\n this.flags = new Isom.FragmentSampleFlags();\n this.compTimeOffset = 0;\n }\n },\n\n TrackRun: class {\n constructor() {\n this.dataOffset = 0;\n this.firstSampleFlags = new Isom.FragmentSampleFlags();\n this.samples = [];\n }\n },\n\n TrackFragmentHeader: class {\n constructor() {\n this.trackId = 0;\n this.baseDataOffset = 0;\n this.sampleDescIndex = 0;\n this.defaultSampleDuration = 0;\n this.defaultSampleSize = 0;\n this.defaultSampleFlags = new Isom.FragmentSampleFlags();\n }\n },\n\n TrackFragmentDecodeTimeBox: class {\n constructor() {\n this.baseMediaDecodeTime = 0;\n }\n },\n\n writeFtyp: function(writer, fileType) {\n const ftype = new BoxWriter(writer, 'ftyp');\n\n writer.writeUint32(fileType.majorBrand);\n writer.writeUint32(fileType.minorVersion);\n\n for (let i = 0; i < fileType.compatibleBrands.length; ++i) {\n writer.writeUint32(fileType.compatibleBrands[i]);\n }\n\n ftype.finish();\n },\n\n writeMvhd: function(writer, header) {\n const mvhd = new FullBoxWriter(writer, 'mvhd', 0, 0);\n\n writer.writeUint32(0); // creation time\n writer.writeUint32(0); // modification time\n writer.writeUint32(header.timescale);\n writer.writeUint32(0); // duration\n writer.writeUint32(0x00010000); // rate\n writer.writeUint16(0x0100); // volume\n writer.writeZero(10);\n\n writeUnityMatrix(writer);\n\n writer.writeZero(24);\n writer.writeUint32(header.nextTrackId);\n\n mvhd.finish();\n },\n\n writeTkhd: function(writer, header) {\n let flags = 0;\n\n if (header.enabled) {\n flags |= 0x01;\n }\n\n if (header.inMovie) {\n flags |= 0x02;\n }\n\n if (header.inPreview) {\n flags |= 0x04;\n }\n\n const tkhd = new FullBoxWriter(writer, 'tkhd', 0, flags);\n\n writer.writeUint32(0); // Creation time\n writer.writeUint32(0); // Modification time\n writer.writeUint32(header.trackId);\n writer.writeZero(4);\n writer.writeUint32(0); // Duration\n\n writer.writeZero(8); // reserved\n writer.writeUint16(0); // layer\n writer.writeUint16(header.trackId); // alternate group\n writer.writeUint16(header.volume); // volume\n writer.writeUint16(0); // reserved\n\n writeUnityMatrix(writer);\n\n writer.writeUint16(header.width);\n writer.writeZero(2);\n writer.writeUint16(header.height);\n writer.writeZero(2);\n\n tkhd.finish();\n },\n\n writeMdhd: function(writer, header) {\n const mdhd = new FullBoxWriter(writer, 'mdhd', 0, 0);\n\n writer.writeUint32(0); // Creation time\n writer.writeUint32(0); // Modification time\n writer.writeUint32(header.timescale);\n writer.writeUint32(0); // Duration\n\n writer.writeUint16(UndLanguage);\n writer.writeZero(2);\n\n mdhd.finish();\n },\n\n writeHdlr: function(writer, type, name) {\n const hdlr = new FullBoxWriter(writer, 'hdlr', 0, 0);\n\n writer.writeUint32(fourcc('mhlr'));\n writer.writeUint32(type);\n writer.writeZero(12);\n writer.writeString(name);\n writer.writeZero(1);\n\n hdlr.finish();\n },\n\n writeDinf: function(writer) {\n const dinf = new BoxWriter(writer, 'dinf');\n const dref = new FullBoxWriter(writer, 'dref', 0, 0);\n writer.writeUint32(1);\n const url = new FullBoxWriter(writer, 'url ', 0, 1);\n url.finish();\n dref.finish();\n dinf.finish();\n },\n\n writeVmhd: function(writer, graphicsMode, red, green, blue) {\n const vmhd = new FullBoxWriter(writer, 'vmhd', 0, 1);\n\n writer.writeUint16(graphicsMode);\n writer.writeUint16(red);\n writer.writeUint16(green);\n writer.writeUint16(blue);\n\n vmhd.finish();\n },\n\n writeSmhd: function(writer, balance) {\n const smhd = new FullBoxWriter(writer, 'smhd', 0, 0);\n\n writer.writeUint16(balance);\n writer.writeZero(2);\n\n smhd.finish();\n },\n\n writeStsd: function(writer, descs) {\n const stsd = new FullBoxWriter(writer, 'stsd', 0, 0);\n\n writer.writeUint32(descs.length);\n\n for (const desc of descs) {\n switch (desc.trackInfo.codecType) {\n case CodecType.H264:\n Isom.writeAvcSampleEntry(writer, desc);\n break;\n\n case CodecType.H265:\n Isom.writeHevcSampleEntry(writer, desc);\n break;\n\n case CodecType.AAC:\n Isom.writeMp4aSampleEntry(writer, desc);\n break;\n\n default:\n break;\n }\n }\n\n stsd.finish();\n },\n\n writeStts: function(writer) {\n const stts = new FullBoxWriter(writer, 'stts', 0, 0);\n\n // We only use this code to write fragmented MP4s, in which there are no\n // samples in this box.\n writer.writeUint32(0);\n stts.finish();\n },\n\n writeStsc: function(writer) {\n const stsc = new FullBoxWriter(writer, 'stsc', 0, 0);\n\n // We only use this code to write fragmented MP4s, in which there are no\n // chunks in this box.\n writer.writeUint32(0);\n stsc.finish();\n },\n\n writeStsz: function(writer) {\n const stsz = new FullBoxWriter(writer, 'stsz', 0, 0);\n\n // We only use this code to write fragmented MP4s, in which there are no\n // chunks in this box.\n writer.writeZero(4);\n writer.writeUint32(0);\n stsz.finish();\n },\n\n writeStco: function(writer) {\n const stco = new FullBoxWriter(writer, 'stco', 0, 0);\n\n // We only use this code to write fragmented MP4s, in which there are no\n // chunks in this box.\n writer.writeUint32(0);\n stco.finish();\n },\n\n writeSampleFlags: function(writer, flags) {\n let firstWord = 0;\n\n firstWord |= (getSdtpFlagValue(flags.sampleDependsOn) & 3) << 8;\n firstWord |= (getSdtpFlagValue(flags.sampleIsDependedOn) & 3) << 6;\n firstWord |= (getSdtpFlagValue(flags.sampleHasRedundancy) & 3) << 4;\n firstWord |= (flags.samplePaddingValue & 7) << 1;\n\n if (flags.sampleIsNonSyncSample) {\n firstWord |= 1;\n }\n\n writer.writeUint16(firstWord);\n writer.writeUint16(flags.sampleDegradationPriority);\n },\n\n writeMehd: function(writer, duration) {\n const mehd = new FullBoxWriter(writer, 'mehd', 0, 0);\n writer.writeUint32(duration);\n mehd.finish();\n },\n\n writeTrex: function(writer, trackExtends) {\n const trex = new FullBoxWriter(writer, 'trex', 0, 0);\n\n writer.writeUint32(trackExtends.trackId);\n writer.writeUint32(trackExtends.defaultSampleDescriptionIndex);\n writer.writeUint32(trackExtends.defaultSampleDuration);\n writer.writeUint32(trackExtends.defaultSampleSize);\n Isom.writeSampleFlags(writer, trackExtends.defaultSampleFlags);\n\n trex.finish();\n },\n\n writeTfhd: function(writer, header, flags) {\n const tfhd = new FullBoxWriter(writer, 'tfhd', 0, flags);\n\n writer.writeUint32(header.trackId);\n\n if (flags & Isom.TfhdFlags.BaseDataOffsetPresent) {\n writer.writeUint(8, header.baseDataOffset);\n }\n\n if (flags & Isom.TfhdFlags.SampleDescIndexPresent) {\n writer.writeUint32(header.sampleDescIndex);\n }\n\n if (flags & Isom.TfhdFlags.DefaultSampleDurationPresent) {\n writer.writeUint32(header.defaultSampleDuration);\n }\n\n if (flags & Isom.TfhdFlags.DefaultSampleSizePresent) {\n writer.writeUint32(header.defaultSampleSize);\n }\n\n if (flags & Isom.TfhdFlags.DefaultSampleFlagsPresent) {\n Isom.writeSampleFlags(writer, header.defaultSampleFlags);\n }\n\n tfhd.finish();\n },\n\n writeTfdt: function(writer, header) {\n const tfdt = new FullBoxWriter(writer, 'tfdt', 1, 0);\n writer.writeUint64(header.baseMediaDecodeTime);\n tfdt.finish();\n },\n\n writeTrun: function(writer, run, flags) {\n const trun = new FullBoxWriter(writer, 'trun', 0, flags);\n\n writer.writeUint32(run.samples.length);\n\n if (flags & Isom.TrunFlags.DataOffsetPresent) {\n writer.writeUint32(run.dataOffset);\n }\n\n if (flags & Isom.TrunFlags.FirstSampleFlagsPresent) {\n Isom.writeSampleFlags(writer, run.firstSampleFlags);\n }\n\n for (const sample of run.samples) {\n if (flags & Isom.TrunFlags.SampleDurationPresent) {\n writer.writeUint32(sample.duration);\n }\n\n if (flags & Isom.TrunFlags.SampleSizePresent) {\n writer.writeUint32(sample.size);\n }\n\n if (flags & Isom.TrunFlags.SampleFlagsPresent) {\n Isom.writeSampleFlags(writer, sample.flags);\n }\n\n if (flags & Isom.TrunFlags.SampleCompTimeOffsetPresent) {\n writer.writeUint32(sample.compTimeOffset);\n }\n }\n\n trun.finish();\n },\n\n writeAvcSampleEntry: function(writer, desc) {\n if (!desc.videoInfo || desc.trackInfo.setupBlocks.length < 2 ||\n desc.trackInfo.setupBlocks[0].byteLength < 4) {\n throw new Error('writeAvcSampleEntry: Bad or missing SPS/PPS');\n }\n\n const avc1 = new BoxWriter(writer, 'avc1');\n\n writer.writeZero(6);\n writer.writeUint16(1); // Data reference index\n writer.writeZero(16);\n\n writer.writeUint16(desc.videoInfo.resWidth);\n writer.writeUint16(desc.videoInfo.resHeight);\n writer.writeUint32(DefaultDpiValue);\n writer.writeUint32(DefaultDpiValue);\n writer.writeZero(4);\n writer.writeUint16(1);\n writer.writeZero(32);\n writer.writeUint16(0x0018);\n writer.writeUint16(0xffff);\n\n const avcC = new BoxWriter(writer, 'avcC');\n\n const sps = desc.trackInfo.setupBlocks[0];\n const pps = desc.trackInfo.setupBlocks[1];\n\n writer.writeUint8(1); // version\n writer.writeUint8(sps[1]); // profile\n writer.writeUint8(sps[2]); // profile compat\n writer.writeUint8(sps[3]); // level\n writer.writeUint16(0xffe1);\n\n writer.writeUint16(sps.length);\n writer.writeBytes(sps);\n\n writer.writeUint8(1); // Number of PPS\n writer.writeUint16(pps.length);\n writer.writeBytes(pps);\n\n avcC.finish();\n avc1.finish();\n },\n\n // See ISO/IEC 14496-15 section 8 for details of the HEVC SampleEntry format\n writeHevcSampleEntry: function(writer, desc) {\n if (!desc.videoInfo) {\n throw new Error('writeHevcSampleEntry: Missing VideoInfo');\n }\n\n // Use HVC1 and not HEV1, since we put the parameter sets in the sample descriptor\n // rather than the sample data.\n const hvc1 = new BoxWriter(writer, 'hvc1');\n\n writer.writeZero(6);\n writer.writeUint16(1); // Data reference index\n writer.writeZero(16);\n\n writer.writeUint16(desc.videoInfo.resWidth);\n writer.writeUint16(desc.videoInfo.resHeight);\n writer.writeUint32(DefaultDpiValue);\n writer.writeUint32(DefaultDpiValue);\n writer.writeZero(4);\n writer.writeUint16(1);\n writer.writeZero(32);\n writer.writeUint16(0x0018);\n writer.writeUint16(0xffff);\n\n const hvcC = new BoxWriter(writer, 'hvcC');\n\n let spsRbsp = null;\n\n for (const block of desc.trackInfo.setupBlocks) {\n // NALU header is 2 bytes, so all setup blocks must be at least that long.\n if (block.length < 2) {\n throw new Error(`writeHevcSampleEntry: Setup block too short (${block.length} bytes)`);\n }\n\n if (getH265NaluType(block[0]) === H265NaluType.SPS_NUT) {\n spsRbsp = removeEmulationBytes(block);\n }\n }\n\n // SPS has to be at least 15 bytes; 2 for the NALU header, 1 for the first data byte, then 12\n // for the profile information, which we copy directly into the hvcC box.\n if (!spsRbsp || spsRbsp.length < 15) {\n throw new Error('HEVC SPS missing or too short');\n }\n\n const reader = new BinReader(spsRbsp);\n\n // We can copy the 12 bytes of profile data directly from the SPS\n reader.skip(3);\n const profile = reader.readUint8Array(12);\n\n // See ISO/IEC 14496-15 section 8.3.3.1.2 for details of this structure\n writer.writeUint8(1); // version\n writer.writeBytes(profile); // 12 bytes of profile data\n\n // The next five fields are prefixed by a number of 1 bits\n writer.writeUint16(0xf000 | 0); // minSpacialSegmentationIdc\n writer.writeUint8(0xfc | 0); // parallelismType\n\n // For now (and probably forever) we only support 8-bit 4:2:0\n writer.writeUint8(0xfc | 1); // chroma_format_idc (1 = 4:2:0)\n writer.writeUint8(0xf8 | 0); // bit_depth_luma_minus8\n writer.writeUint8(0xf8 | 0); // bit_depth_chroma_minus8\n\n writer.writeUint16(0); // avgFrameRate\n writer.writeUint8(3); // lengthSizeMinusOne\n\n writer.writeUint8(desc.trackInfo.setupBlocks.length);\n\n for (const block of desc.trackInfo.setupBlocks) {\n writer.writeUint8(0x80 | getH265NaluType(block[0]));\n writer.writeUint16(1);\n writer.writeUint16(block.length);\n writer.writeBytes(block);\n }\n\n hvcC.finish();\n hvc1.finish();\n },\n\n writeMp4aSampleEntry: function(writer, desc) {\n if (!desc.audioInfo) {\n throw new Error('writeMp4aSampleEntry: Bad or missing audio info');\n }\n\n const mp4a = new BoxWriter(writer, 'mp4a');\n\n writer.writeZero(6);\n writer.writeUint16(1); // Data reference index\n\n // AudioSampleEntry\n writer.writeZero(8);\n writer.writeUint16(desc.audioInfo.numChannels);\n writer.writeUint16(desc.audioInfo.bitsPerSample);\n writer.writeZero(4);\n writer.writeUint16(desc.audioInfo.sampleRate);\n writer.writeZero(2);\n\n const esds = new FullBoxWriter(writer, 'esds', 0, 0);\n\n const esWriter = new IsomBuffer();\n\n // ISO 14496-14 3.1.2\n esWriter.writeUint16(1); // ES_ID\n esWriter.writeUint8(0); // Flags, streamPriority\n\n // DecoderConfig\n const dcWriter = new IsomBuffer(); // (DecoderConfigDescrTag);\n\n dcWriter.writeUint8(AacObjectType);\n dcWriter.writeUint8((AudioStreamType << 2) | 1); // stream_type, flags\n dcWriter.writeZero(3); // buffer size\n\n dcWriter.writeUint32(0); // max bitrate\n dcWriter.writeUint32(0); // avg bitrate\n\n const decSpecInfoBuffer = new IsomBuffer();\n if (desc.trackInfo.setupBlocks.length > 0) {\n decSpecInfoBuffer.writeBytes(desc.trackInfo.setupBlocks[0]);\n } else {\n decSpecInfoBuffer.writeUint16(DefaultAacConfigUint16);\n }\n Isom.writeDescriptor(dcWriter, DecSpecificInfoTag, decSpecInfoBuffer);\n\n Isom.writeDescriptor(esWriter, DecoderConfigDescrTag, dcWriter);\n\n const slConfigDescBuffer = new IsomBuffer();\n slConfigDescBuffer.writeUint8(SlPredefined);\n Isom.writeDescriptor(esWriter, SlConfigDescrTag, slConfigDescBuffer);\n\n Isom.writeDescriptor(writer, EsDescrTag, esWriter);\n\n esds.finish();\n mp4a.finish();\n },\n\n writeDescriptor: function(writer, tag, buffer) {\n writer.writeUint8(tag);\n\n const parts = [];\n let remaining = buffer.size;\n\n while (remaining || !parts.length) {\n parts.push(remaining & 0x7f);\n remaining >>= 7;\n }\n\n for (let i = parts.length - 1; i > 0; --i) {\n writer.writeUint8(parts[i] | 0x80);\n }\n\n writer.writeUint8(parts[0]);\n\n writer.writeBuffer(buffer);\n },\n};\n\nexport default Isom;\n","/* global ArrayBuffer,Uint8Array */\n\nimport {MediaType, CodecType, Direction} from '../../defs';\nimport Isom from './isom';\nimport IsomBuffer from './isombuffer';\nimport {BoxWriter, FullBoxWriter} from './boxwriter';\nimport {fourcc} from './isomutils';\nimport {BinWriter, Duration, TimeDefs} from '@oecommon/plasma-js';\n\nconst BaseTimescale = 1000;\nconst VideoTimescale = 90000;\n\nconst FullVolume = 256;\n\nconst AacSamplesPerFrame = 1024;\n\nconst MdatHeaderSize = 4;\n\nclass Mp4TrackData {\n constructor() {\n this.timescale = 0;\n this.trunFlags = 0;\n this.runs = [];\n this.timestamps = [];\n this.offsetPositions = [];\n this.firstSampleTime = 0;\n this.partialSamples = [];\n }\n\n reset() {\n this.runs = [];\n this.timestamps = [];\n this.offsetPositions = [];\n this.firstSampleTime = 0;\n }\n}\n\nfunction _removeAdtsHeader(sample) {\n if (sample.data[0] !== 0xff || sample.data[1] & 0xf0 !== 0xf0) {\n // Not in ADTS format, don't need to strip header\n return;\n }\n\n const headerSize = (sample.data[1] & 0x01) ? 7 : 9;\n\n sample.data = new Uint8Array(sample.data.buffer, headerSize, sample.data.length - headerSize);\n}\n\n/**\n * Writes streams in fragmented MP4 format\n */\nexport default class Mp4Writer {\n constructor(direction, speedScale, audioOnly) {\n this._dir = direction;\n this._speedScale = speedScale;\n this._audioOnly = audioOnly || false;\n this._trackState = [];\n this._nextTrackId = 1;\n this._mdatPos = 0;\n this._fragSequence = -1;\n this._currentRunTrack = -1;\n this._baseTimestamp = null;\n this._mediaData = [];\n this._outputQueue = [];\n this._streamEnded = false;\n this._metadataChanged = false;\n }\n\n /**\n * The timestamp corresponding to the \"zero\" time of the MP4\n */\n get baseTimestamp() {\n return this._baseTimestamp;\n }\n\n /**\n * The playback direction\n */\n get direction() {\n return this._dir;\n }\n\n /**\n * Converts a sample timestamp to a media playback time\n *\n * @param {Instant} timestamp is the sample timestamp\n *\n * @return {Number} The media playback time\n */\n sampleTimeToMediaTime(timestamp) {\n if (!this._baseTimestamp) {\n return 0;\n }\n\n const offset = this._timeDiff(this._baseTimestamp, timestamp);\n\n return offset.value / (TimeDefs.TimeUnitsPerSecond * this._speedScale);\n }\n\n /**\n * Converts a media playback time to a sample timestamp\n *\n * @param {Number} mediaTime is the media playback time\n *\n * @return {Instant} The corresponding timestamp\n */\n mediaTimeToSampleTime(mediaTime) {\n if (!this._baseTimestamp) {\n return null;\n }\n\n const scaledTime = mediaTime * this._speedScale;\n\n return (this._dir === Direction.Forwards) ? this._baseTimestamp.plus(Duration.seconds(scaledTime)) :\n this._baseTimestamp.minus(Duration.seconds(scaledTime));\n }\n\n /**\n * Adds a track\n *\n * @param {number} trackId\n * @param {TrackInfo} trackInfo\n */\n addTrackInfo(trackId, trackInfo) {\n if (!this._isSupportedMediaType(trackInfo.mediaType)) {\n return;\n }\n\n if (!this._trackState[trackId]) {\n this._trackState[trackId] = {\n mp4trackId: this._nextTrackId++,\n trackData: new Mp4TrackData(),\n trackInfo: null,\n videoInfo: null,\n audioInfo: null,\n };\n }\n\n this._trackState[trackId].trackInfo = trackInfo;\n this._metadataChanged = true;\n }\n\n /**\n * Adds video info for a track\n *\n * @param {number} trackId\n * @param {VideoInfo} videoInfo\n */\n addVideoInfo(trackId, videoInfo) {\n if (this._trackState[trackId]) {\n this._trackState[trackId].videoInfo = videoInfo;\n this._metadataChanged = true;\n }\n }\n\n /**\n * Adds audio info for a track\n *\n * @param {number} trackId\n * @param {VideoInfo} videoInfo\n */\n addAudioInfo(trackId, audioInfo) {\n if (this._trackState[trackId]) {\n this._trackState[trackId].audioInfo = audioInfo;\n this._metadataChanged = true;\n }\n }\n\n /**\n * Adds a sample\n *\n * @param {MediaSample} sample\n *\n * @return true if the sample was added\n */\n addSample(sample) {\n const trackState = this._trackState[sample.sampleInfo.trackId];\n\n if (!trackState) {\n return false;\n }\n\n if (this._metadataChanged) {\n this._metadataChanged = false;\n this._startNewFragment(sample.timestamp);\n this._initTracks();\n this._writeMoovBox();\n\n if (!this._baseTimestamp) {\n this._baseTimestamp = sample.timestamp;\n }\n }\n\n let sampleInfo = sample.sampleInfo;\n let cleanPoint = false;\n\n const trackData = trackState.trackData;\n const isVideo = trackState.trackInfo.mediaType === MediaType.Video;\n\n // Strip ADTS header from AAC streams if present\n if (trackState.trackInfo.mediaType === MediaType.Audio &&\n trackState.trackInfo.codecType === CodecType.AAC) {\n _removeAdtsHeader(sample);\n }\n\n trackData.partialSamples.push(sample);\n\n if (!sampleInfo.isEndOfFrame) {\n return true;\n }\n\n sampleInfo = trackData.partialSamples[0].sampleInfo;\n\n // Start a new fragment whenever we get a new frame in the primary track\n if (this._isPrimaryTrack(sampleInfo.trackId)) {\n if (!this._startNewFragment(sampleInfo.timestamp)) {\n return true;\n }\n\n cleanPoint = sampleInfo.isCleanPoint || !isVideo;\n }\n\n let run;\n\n if (trackData.runs.length === 0 ||\n this._currentRunTrack !== sampleInfo.trackId) {\n run = new Isom.TrackRun();\n run.dataOffset = this._mdatPos;\n if (cleanPoint) {\n run.firstSampleFlags.sampleDependsOn = false;\n } else {\n run.firstSampleFlags.sampleDependsOn = true;\n run.firstSampleFlags.sampleIsNonSyncSample = true;\n }\n trackData.runs.push(run);\n this._currentRunTrack = sampleInfo.trackId;\n } else {\n run = trackData.runs[trackData.runs.length - 1];\n }\n\n const runSample = new Isom.TrackRunSample();\n runSample.flags.sampleDependsOn = !cleanPoint;\n runSample.flags.sampleIsNonSyncSample = !cleanPoint;\n run.samples.push(runSample);\n\n trackData.timestamps.push(sample.timestamp);\n\n // Frames consisting of multiple slices (each in one sample) are combined into a single sample\n // record in the trun box.\n for (const partialSample of trackData.partialSamples) {\n runSample.size += partialSample.size;\n\n if (isVideo) {\n const headerBuf = new ArrayBuffer(MdatHeaderSize);\n const sizeWriter = new BinWriter(headerBuf);\n\n sizeWriter.writeUint32(partialSample.size);\n this._mediaData.push(new Uint8Array(headerBuf));\n runSample.size += MdatHeaderSize;\n }\n\n this._mediaData.push(partialSample.data);\n }\n\n this._mdatPos += runSample.size;\n\n if (!trackData.firstSampleTime) {\n trackData.firstSampleTime = sample.timestamp;\n }\n\n trackData.partialSamples = [];\n\n return true;\n }\n\n /**\n * Determines whether the writer currently has any output buffers\n */\n get hasOutput() {\n return this._outputQueue.length > 0;\n }\n\n /**\n * Gets the next output buffer and removes it from the FIFO\n *\n * @return {Uint8Array} The output buffer, or null if there are none\n */\n getNextBuffer() {\n return this._outputQueue.shift();\n }\n\n /**\n * Writes out the currently building fragment\n *\n * @param {Instant} nextTimestamp Next timestamp after the current fragment\n */\n _writeCurrentFragment(nextTimestamp) {\n if (this._mediaData.length === 0) {\n return;\n }\n\n this._calculateSampleDurations(nextTimestamp);\n\n ++this._fragSequence;\n\n const isomBuffer = new IsomBuffer();\n\n this._writeMoofBox(isomBuffer);\n\n // Add the mdat header, then write all the headers to the output queue\n isomBuffer.writeUint32(this._mdatPos + 8);\n isomBuffer.writeUint32(fourcc('mdat'));\n\n this._outputQueue.push(isomBuffer.getUint8Array());\n\n // Copy the media data buffers to the output queue\n this._outputQueue = this._outputQueue.concat(this._mediaData);\n this._mediaData = [];\n }\n\n /**\n * Starts a new fragment\n *\n * @param {Instant} nextTimestamp Next timestamp after the current fragment\n */\n _startNewFragment(nextTimestamp) {\n this._writeCurrentFragment(nextTimestamp);\n\n this._resetTracks();\n\n this._mediaData = [];\n this._mdatPos = 0;\n this._currentRunTrack = -1;\n\n return true;\n }\n\n /**\n * Ends the stream\n *\n * @param {Instant} nextTimestamp Next timestamp after the current fragment\n */\n endStream(nextTimestamp) {\n this._streamEnded = true;\n\n if (this._mediaData.length > 0) {\n this._writeCurrentFragment(nextTimestamp);\n }\n\n this.stop();\n }\n\n stop() {\n this._trackState = {};\n this._metadataChanged = false;\n this._outputQueue = [];\n this._baseTimestamp = null;\n this._mediaData = [];\n this._mdatPos = 0;\n this._streamEnded = true;\n }\n\n _initTracks() {\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (!this._trackState[trackId]) {\n continue;\n }\n\n const trackState = this._trackState[trackId];\n\n if (trackState.trackInfo.mediaType !== MediaType.Video &&\n trackState.trackInfo.mediaType !== MediaType.Audio) {\n return;\n }\n\n if (trackState.trackInfo.mediaType === MediaType.Audio &&\n trackState.trackInfo.codecType !== CodecType.AAC) {\n return;\n }\n\n trackState.trackData.trunFlags = Isom.TrunFlags.DataOffsetPresent |\n Isom.TrunFlags.SampleSizePresent;\n\n if (trackState.trackInfo.mediaType === MediaType.Video) {\n trackState.trackData.trunFlags |=\n Isom.TrunFlags.FirstSampleFlagsPresent | Isom.TrunFlags.SampleDurationPresent;\n }\n }\n }\n\n _resetTracks() {\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (this._trackState[trackId]) {\n this._trackState[trackId].trackData.reset();\n }\n }\n }\n\n _calculateSampleDurations(nextTimestamp) {\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (!this._trackState[trackId]) {\n continue;\n }\n\n const trackData = this._trackState[trackId].trackData;\n\n if (trackData.timestamps.length === 0) {\n continue;\n }\n\n let tsIndex = 0;\n let baseTime = trackData.timestamps[tsIndex++];\n\n for (let runIndex = 0; runIndex < trackData.runs.length; ++runIndex) {\n const run = trackData.runs[runIndex];\n\n for (let sampleIndex = 0; sampleIndex < run.samples.length; ++sampleIndex) {\n const sample = run.samples[sampleIndex];\n\n if (tsIndex < trackData.timestamps.length) {\n const newTime = trackData.timestamps[tsIndex++];\n\n sample.duration = this._toTimeScaleUnits(this._timeDiff(baseTime, newTime), trackData.timescale);\n baseTime = newTime;\n } else {\n // This must be the last sample. If this is the primary\n // track, base the duration on the known next timestamp.\n if (this._isPrimaryTrack(trackId) && nextTimestamp.isValid) {\n sample.duration = this._toTimeScaleUnits(this._timeDiff(baseTime, nextTimestamp), trackData.timescale);\n } else if (sampleIndex > 0) {\n // Otherwise use the duration of the first sample in this run.\n sample.duration = run.samples[0].duration;\n }\n }\n }\n }\n }\n }\n\n _writeMoovBox() {\n const fileType = new Isom.FileType();\n\n if (!this._audioOnly) {\n fileType.majorBrand = fourcc('isom');\n fileType.minorVersion = 0x200;\n fileType.compatibleBrands.push(fourcc('isom'));\n fileType.compatibleBrands.push(fourcc('iso2'));\n fileType.compatibleBrands.push(fourcc('iso5'));\n const videoFourcc = this._getVideoFourcc();\n if (videoFourcc) {\n fileType.compatibleBrands.push(videoFourcc);\n }\n } else {\n fileType.majorBrand = fourcc('iso5');\n fileType.minorVersion = 0x200;\n fileType.compatibleBrands.push(fourcc('iso6'));\n fileType.compatibleBrands.push(fourcc('mp41'));\n }\n\n const isomBuffer = new IsomBuffer();\n\n Isom.writeFtyp(isomBuffer, fileType);\n\n const moov = new BoxWriter(isomBuffer, 'moov');\n\n const movieHeader = new Isom.MovieHeader();\n\n movieHeader.timescale = BaseTimescale;\n movieHeader.duration = Duration.zero;\n movieHeader.nextTrackId = this._nextTrackId;\n\n Isom.writeMvhd(isomBuffer, movieHeader);\n\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (this._trackState[trackId]) {\n this._writeTrakBox(isomBuffer, this._trackState[trackId]);\n }\n }\n\n const mvex = new BoxWriter(isomBuffer, 'mvex');\n\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (!this._trackState[trackId]) {\n continue;\n }\n\n const trackState = this._trackState[trackId];\n\n const extendsData = new Isom.TrackExtendsData();\n\n extendsData.trackId = trackState.mp4trackId;\n extendsData.defaultSampleDescriptionIndex = 1;\n\n if (trackState.trackInfo.mediaType === MediaType.Audio) {\n extendsData.defaultSampleDuration = AacSamplesPerFrame;\n }\n\n extendsData.defaultSampleFlags.sampleIsNonSyncSample =\n (trackState.trackInfo.mediaType === MediaType.Video);\n\n Isom.writeTrex(isomBuffer, extendsData);\n }\n\n mvex.finish();\n moov.finish();\n\n this._outputQueue.push(isomBuffer.getUint8Array());\n }\n\n _writeTrakBox(isomBuffer, trackState) {\n const trackInfo = trackState.trackInfo;\n const trackData = trackState.trackData;\n\n if (!trackInfo || !trackData) {\n return;\n }\n\n const trak = new BoxWriter(isomBuffer, 'trak');\n\n // Track header\n const trackHeader = new Isom.TrackHeader();\n trackHeader.enabled = true;\n trackHeader.inMovie = true;\n trackHeader.inPreview = false;\n trackHeader.trackId = trackState.mp4trackId;\n trackHeader.duration = Duration.zero;\n trackHeader.volume = (trackState.trackInfo.mediaType === MediaType.Audio) ? FullVolume : 0;\n\n const sampleDescs = [new Isom.SampleDescription()];\n const sampleDescription = sampleDescs[0];\n\n sampleDescription.trackInfo = trackInfo;\n\n trackData.timescale = BaseTimescale;\n\n if (trackState.videoInfo) {\n sampleDescription.videoInfo = trackState.videoInfo;\n trackHeader.width = trackState.videoInfo.resWidth;\n trackHeader.height = trackState.videoInfo.resHeight;\n trackData.timescale = VideoTimescale;\n }\n\n if (trackState.audioInfo) {\n sampleDescription.audioInfo = trackState.audioInfo;\n trackData.timescale = trackState.audioInfo.sampleRate;\n }\n\n Isom.writeTkhd(isomBuffer, trackHeader);\n\n const mdia = new BoxWriter(isomBuffer, 'mdia');\n\n // Media header\n const mediaHeader = new Isom.MediaHeader();\n mediaHeader.timescale = trackData.timescale;\n mediaHeader.duration = Duration.zero;\n\n Isom.writeMdhd(isomBuffer, mediaHeader);\n\n Isom.writeHdlr(isomBuffer, this._getHandlerType(trackInfo.mediaType),\n this._getHandlerName(trackInfo.mediaType));\n\n const minf = new BoxWriter(isomBuffer, 'minf');\n\n switch (trackInfo.mediaType) {\n case MediaType.Video:\n Isom.writeVmhd(isomBuffer, 0, 0, 0, 0);\n break;\n\n case MediaType.Audio:\n Isom.writeSmhd(isomBuffer, 0);\n break;\n\n default:\n break;\n }\n\n Isom.writeDinf(isomBuffer);\n\n const stbl = new BoxWriter(isomBuffer, 'stbl');\n\n Isom.writeStsd(isomBuffer, sampleDescs);\n Isom.writeStts(isomBuffer, []);\n Isom.writeStsc(isomBuffer, []);\n Isom.writeStsz(isomBuffer, [], false);\n Isom.writeStco(isomBuffer, [], false);\n\n stbl.finish();\n minf.finish();\n mdia.finish();\n trak.finish();\n }\n\n _writeMoofBox(isomBuffer) {\n const moofStart = isomBuffer.position;\n\n const moof = new BoxWriter(isomBuffer, 'moof');\n\n const mfhd = new FullBoxWriter(isomBuffer, 'mfhd', 0, 0);\n isomBuffer.writeUint32(this._fragSequence);\n mfhd.finish();\n\n // Write out the tracks to get the total size of the moof box, then we'll\n // go back and write in the data offsets for each run\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (!this._trackState[trackId]) {\n continue;\n }\n\n const trackState = this._trackState[trackId];\n const trackData = trackState.trackData;\n\n if (trackState.trackData.runs.length) {\n const traf = new BoxWriter(isomBuffer, 'traf');\n\n const header = new Isom.TrackFragmentHeader();\n let flags = Isom.TfhdFlags.DefaultBaseIsMoof;\n\n header.trackId = trackState.mp4trackId;\n header.sampleDescIndex = 1;\n\n if (trackState.trackInfo.mediaType === MediaType.Video) {\n flags |= Isom.TfhdFlags.DefaultSampleFlagsPresent;\n header.defaultSampleFlags.sampleDependsOn = true;\n header.defaultSampleFlags.sampleIsNonSyncSample = true;\n }\n\n Isom.writeTfhd(isomBuffer, header, flags);\n\n const tfdtHeader = new Isom.TrackFragmentDecodeTimeBox();\n const baseTimeOffset = this._timeDiff(this._baseTimestamp, trackData.firstSampleTime);\n const baseTs = this._toTimeScaleUnits(baseTimeOffset, trackData.timescale);\n\n tfdtHeader.baseMediaDecodeTime = Math.max(0, baseTs);\n\n Isom.writeTfdt(isomBuffer, tfdtHeader);\n\n for (let i = 0; i < trackData.runs.length; ++i) {\n trackData.offsetPositions.push(isomBuffer.position + 16);\n Isom.writeTrun(isomBuffer, trackData.runs[i], trackData.trunFlags);\n }\n\n traf.finish();\n }\n }\n\n const endPos = isomBuffer.position;\n\n for (let trackId = 0; trackId < this._trackState.length; ++trackId) {\n if (!this._trackState[trackId]) {\n continue;\n }\n\n const trackData = this._trackState[trackId].trackData;\n\n if (trackData.runs.length !== trackData.offsetPositions.length) {\n throw Error('Logic error: Array length mismatch!');\n }\n\n for (let i = 0; i < trackData.runs.length; ++i) {\n isomBuffer.seek(trackData.offsetPositions[i]);\n isomBuffer.writeUint32(endPos - moofStart + 8 + trackData.runs[i].dataOffset);\n }\n }\n\n isomBuffer.seek(endPos);\n\n moof.finish();\n }\n\n _getHandlerType(mediaType) {\n switch (mediaType) {\n case MediaType.Video:\n return fourcc('vide');\n\n case MediaType.Audio:\n return fourcc('soun');\n\n default:\n return 0;\n }\n }\n\n _getHandlerName(mediaType) {\n switch (mediaType) {\n case MediaType.Video:\n return 'VideoHandler';\n\n case MediaType.Audio:\n return 'AudioHandler';\n\n default:\n return 'UnknownHandler';\n }\n }\n\n _toTimeScaleUnits(dur, timescale) {\n const actualDur = dur.value >= 0 ? dur : Duration.zero;\n return actualDur.value * timescale / (TimeDefs.TimeUnitsPerSecond * this._speedScale);\n }\n\n _timeDiff(time1, time2) {\n if (this._dir === Direction.Backwards) {\n return time1.minus(time2);\n } else {\n return time2.minus(time1);\n }\n }\n\n _isPrimaryTrack(trackId) {\n return trackId === 1 || this._audioOnly;\n }\n\n _isSupportedMediaType(mediaType) {\n if (this._audioOnly) {\n return mediaType === MediaType.Audio;\n }\n\n return mediaType === MediaType.Video || mediaType === MediaType.Audio;\n }\n\n _getVideoFourcc() {\n for (const track of this._trackState) {\n if (!track || !track.trackInfo || track.trackInfo.mediaType !== MediaType.Video) {\n continue;\n }\n switch (track.trackInfo.codecType) {\n case CodecType.H264:\n return fourcc('avc1');\n\n case CodecType.H265:\n return fourcc('hvc1');\n\n default:\n break;\n }\n }\n\n return null;\n }\n}\n","export default class HtmlElementFactory {\n constructor(document) {\n this._document = document;\n }\n\n createVideoElement() {\n const videoElement = this._document.createElement('video');\n videoElement.style.width = '100%';\n videoElement.style.height = '100%';\n // Some browsers refuse to play video on page load unless it is muted\n videoElement.defaultMuted = true;\n videoElement.muted = true;\n videoElement.disableRemotePlayback = true;\n videoElement.playsInline = true;\n return videoElement;\n }\n\n createAudioElement() {\n const audioElement = new Audio();\n audioElement.defaultMuted = true;\n audioElement.muted = true;\n audioElement.disableRemotePlayback = true;\n audioElement.playsInline = true;\n return audioElement;\n }\n\n createCanvas() {\n const element = this._document.createElement('canvas');\n element.style.width = '100%';\n element.style.height = '100%';\n return element;\n }\n}\n","import {Logger} from '@oecommon/plasma-js';\n\nlet instanceNum = 0;\n\nexport default class Html5MediaSourceFactory {\n constructor() {\n this.log = new Logger('mediasourcefactory', ++instanceNum);\n }\n\n createMediaSource() {\n if (typeof window.ManagedMediaSource !== 'undefined') {\n try {\n this.log.debug('Using ManagedMediaSource');\n return new window.ManagedMediaSource();\n } catch (e) {\n this.log.error(`Error occurred while instantiating ManagedMediaSource, ${e.message}`);\n // fall back to MediaSource\n }\n }\n\n this.log.debug('Using MediaSource');\n return new window.MediaSource();\n }\n}\n","import {Direction} from '../defs';\n\nexport function isTimeAfter(time1, time2, dir) {\n return (dir === Direction.Forwards) ? time1.gt(time2) : time2.gt(time1);\n}\n\nexport function isTimeBefore(time1, time2, dir) {\n return (dir === Direction.Forwards) ? time1.lt(time2) : time2.lt(time1);\n}\n","/* global Blob */\n\nimport Mp4Writer from '../media/isom/mp4writer';\nimport {isTimeAfter} from '../media/mediautils';\nimport {MediaType, CodecType, Direction} from '../defs';\nimport {CancellationError, Duration, Logger, PromiseSource, Timer} from '@oecommon/plasma-js';\n\nconst RETENTION_TIME = Duration.seconds(8);\nconst H264_MIME_TYPE = 'video/mp4; codecs=\"avc1.640028\"';\nconst H265_MIME_TYPE = 'video/mp4; codecs=\"hvc1.1.6.L63.90\"';\nconst AAC_MIME_TYPE = 'audio/mp4; codecs=\"mp4a.40.2\"';\n\nconst IFRAME_SPEED_SCALE = 8;\nconst NORMAL_SPEED_SCALE = 0.25;\n\nconst MAX_PLAYBACK_RATE = 16;\nconst MIN_PLAYBACK_RATE = 1/16;\n\nconst NORMAL_GAP_THRESHOLD = Duration.seconds(5);\nconst IFRAME_GAP_THRESHOLD = Duration.seconds(60);\nconst FRAME_GAP_MARGIN = Duration.milliseconds(30);\n\nconst SEEK_EVENT_TIMEOUT = Duration.seconds(1);\n\nconst VIDEO_ELEMENT_EVENTS = [\n 'error',\n 'canplay',\n 'playing',\n 'play',\n 'seeking',\n 'seeked',\n 'stalled',\n 'suspend',\n 'waiting',\n 'emptied',\n 'readystatechange',\n];\n\nlet instanceNum = 0;\n\nlet maxDebugBlobSize = 0;\n\n/**\n * Chooses the appropriate MIME type string for the given codec type\n */\nfunction _chooseMimeType(codecType) {\n switch (codecType) {\n case CodecType.H264:\n return H264_MIME_TYPE;\n\n case CodecType.H265:\n return H265_MIME_TYPE;\n\n case CodecType.AAC:\n return AAC_MIME_TYPE;\n\n default:\n return null;\n }\n}\n\n/**\n * Container for a MediaElement, its MediaSource and its SourceBuffers.\n */\nexport default class Html5MediaState {\n constructor(reactor, elementFactory, mediaSourceFactory, objectUrlManager,\n mediaType, direction, iframes) {\n this.log = new Logger((mediaType === MediaType.Audio) ?\n 'html5mediastate.audio' : 'html5mediastate.video', ++instanceNum);\n\n this.log.debug('Constructing media state');\n\n this._reactor = reactor;\n this._mediaType = mediaType;\n this._direction = direction;\n this._iframes = iframes;\n if (mediaType === MediaType.Video) {\n this._speedScale = iframes ? IFRAME_SPEED_SCALE : NORMAL_SPEED_SCALE;\n } else {\n this._speedScale = 1;\n }\n this._mp4Writer = new Mp4Writer(direction, this._speedScale, mediaType === MediaType.Audio);\n this._objectUrlManager = objectUrlManager;\n\n let elementTag;\n this._mediaType = mediaType;\n if (mediaType === MediaType.Video) {\n this._mediaElement = elementFactory.createVideoElement();\n elementTag = 'video';\n } else if (mediaType === MediaType.Audio) {\n this._mediaElement = elementFactory.createAudioElement();\n elementTag = 'audio';\n } else {\n throw new Error('Invalid media type specified: ' + mediaType);\n }\n\n this._mimeType = null;\n this._mediaSource = mediaSourceFactory.createMediaSource();\n this._url = null;\n this._mediaElement.id = `${elementTag}_${instanceNum}`;\n this._sourceBuffer = null;\n this._frameInfo = [];\n this._streamEnd = false;\n this._cleanupTime = null;\n this._liveStartTime = null;\n this._playPending = false;\n this._pauseAfterPlay = false;\n this._closeAfterPlay = false;\n this._stalled = false;\n this._seekPromiseSource = new PromiseSource();\n this._seekTimer = new Timer(this._reactor);\n this._appendFailed = false;\n\n this.onReady = null;\n this.onCanPlay = null;\n this.onError = null;\n\n this._onSourceOpened = this._onSourceOpened.bind(this);\n this._onUpdateEnd = this._onUpdateEnd.bind(this);\n this._onError = this._onError.bind(this);\n\n this._mediaSource.addEventListener('sourceopen', this._onSourceOpened);\n\n this._mediaElementListeners = [];\n this._addAndStoreMediaElementEventListeners(this._mediaElement);\n\n this._debugBuffers = maxDebugBlobSize ? [] : null;\n this._debugSize = 0;\n }\n\n _addAndStoreMediaElementEventListeners(mediaElement) {\n if (this._mediaElementListeners === null || this._mediaElementListeners === undefined) {\n this._mediaElementListeners = [];\n }\n\n for (const eventName of VIDEO_ELEMENT_EVENTS) {\n const listener = (event) => {\n this._handleEvent(eventName, event);\n };\n mediaElement.addEventListener(eventName, listener);\n this._mediaElementListeners.push([eventName, listener]);\n }\n }\n\n _removeAndClearMediaElementEventListeners(mediaElement) {\n for (const [eventName, listener] of this._mediaElementListeners) {\n mediaElement.removeEventListener(eventName, listener);\n }\n this._mediaElementListeners = [];\n }\n\n _handleEvent(name, event) {\n this.log.debug(() => `Media element event ${name}: ${event.toString()}, ` +\n `currentTime=${this.currentTime} (${this._mediaElement.currentTime})`);\n\n const resumed = this._stalled && name === 'canplay';\n this._stalled = (name === 'waiting' || name === 'stalled');\n\n if (this._seekPromiseSource.active) {\n if (name === 'seeked') {\n this._finishSeek();\n } else if (name === 'error') {\n this._failSeek(new Error('Error event before seek completed'));\n }\n }\n\n if (resumed && this.onCanPlay) {\n this.onCanPlay(this.currentTime);\n }\n }\n\n /**\n * Closes all resources associated with the media source\n */\n close() {\n if (this._playPending) {\n this.log.debug('Play pending, will close when done');\n this._closeAfterPlay = true;\n this.cancelSeek();\n return;\n }\n\n this.log.debug('Closing media state');\n this.cancelSeek();\n\n if (this._url) {\n this._objectUrlManager.revokeObjectUrl(this._url);\n this._url = null;\n }\n\n if (this._mediaSource) {\n if (this._sourceBuffer && this._mediaSource.activeSourceBuffers > 0) {\n this._mediaSource.removeSourceBuffer(this._sourceBuffer);\n this._sourceBuffer = null;\n }\n\n this._mediaSource.removeEventListener('sourceopen', this._onSourceOpened);\n this._mediaSource = null;\n }\n\n if (this._mediaElement) {\n this._removeAndClearMediaElementEventListeners(this._mediaElement);\n this._mediaElement.pause();\n this._mediaElement.removeAttribute('src');\n this._mediaElement.load();\n this._mediaElement = null;\n }\n\n this._mp4Writer = null;\n this._appendFailed = false;\n this.onReady = null;\n this.onError = null;\n }\n\n /**\n * Gets the video element\n */\n get mediaElement() {\n return this._mediaElement;\n }\n\n /**\n * Get the playback direction of this media source\n */\n get direction() {\n return this._direction;\n }\n\n /**\n * Gets the value of the iframes flag\n */\n get isIframeOnly() {\n return this._iframes;\n }\n\n /**\n * Sets/gets the current playback time\n */\n set currentTime(value) {\n const mediaTime = this.sampleTimeToMediaTime(value);\n this.log.debug(() => `Setting current time to ${value} (${mediaTime})`);\n this._mediaElement.currentTime = mediaTime;\n }\n\n get currentTime() {\n return this.mediaTimeToSampleTime(this._mediaElement.currentTime);\n }\n\n /**\n * Sets/gets the muted property\n */\n set muted(value) {\n this._mediaElement.muted = value;\n }\n\n get muted() {\n return this._mediaElement.muted;\n }\n\n /**\n * Sets/gets the audio volume\n */\n set volume(value) {\n this._mediaElement.volume = value;\n }\n\n get volume() {\n return this._mediaElement.volume;\n }\n\n /**\n * Sets a new playback time, returning a promise that will complete when the seek is finished\n */\n seekToTime(time) {\n this.cancelSeek();\n\n this.currentTime = time;\n\n this._seekTimer.set(SEEK_EVENT_TIMEOUT, () => this._onSeekEventTimeout());\n return this._seekPromiseSource.makePromise();\n }\n\n /**\n * Fails the promise from a previous seek with a CancellationError\n */\n cancelSeek() {\n if (this._seekPromiseSource.active) {\n this._failSeek(new CancellationError());\n }\n }\n\n _finishSeek() {\n this._seekPromiseSource.complete();\n this._seekTimer.kill();\n }\n\n _failSeek(error) {\n this._seekPromiseSource.fail(error);\n this._seekTimer.kill();\n }\n\n _onSeekEventTimeout() {\n this.log.notice(() => `Seek event not received, completing seek anyway. ` +\n `currentTime=${this._mediaElement ? this.currentTime : 'unknown'}`);\n this._finishSeek();\n }\n\n /**\n * Sets/gets the playback speed\n */\n set speed(value) {\n const scaledValue = value / this._speedScale;\n let rate = (this._direction === Direction.Forwards) ? scaledValue : -scaledValue;\n\n rate = Math.min(MAX_PLAYBACK_RATE, Math.max(MIN_PLAYBACK_RATE, rate));\n\n if (this._mediaElement.playbackRate !== rate) {\n this.log.spam(() => `Setting speed to ${value}, rate = ${rate}`);\n this._mediaElement.playbackRate = rate;\n }\n }\n\n get speed() {\n if (!this._mediaElement) {\n return 0;\n }\n\n const rate = this._mediaElement.playbackRate * this._speedScale;\n return (this._direction === Direction.Forwards) ? rate : -rate;\n }\n\n /**\n * Sets/gets the paused state\n */\n set paused(value) {\n if (this._playPending) {\n this.log.debug(() => `Play pending, will set paused=${value} when done`);\n this._pauseAfterPlay = value;\n return;\n }\n\n if (this._mediaElement.paused && !value) {\n this.log.debug('Unpausing playback');\n this.play()\n .then(() => this.log.debug('Play succeeded'))\n .catch((error) => this.log.debug(() => `Play failed: ${error}`));\n } else if (!this._mediaElement.paused && value) {\n this.log.debug('Pausing playback');\n this._mediaElement.pause();\n }\n }\n\n get paused() {\n return this._mediaElement.paused;\n }\n\n /**\n * Starts playing the video, returning a Promise\n */\n play() {\n this._playPending = true;\n this._pauseAfterPlay = false;\n this._closeAfterPlay = false;\n\n return this._mediaElement.play()\n .then(() => {\n this._playPending = false;\n if (this._pauseAfterPlay) {\n this.log.debug('Pausing after play');\n this._mediaElement.pause();\n } else if (this._closeAfterPlay) {\n this.log.debug('Closing after play');\n this.close();\n }\n })\n .catch((error) => {\n this.log.debug(() => `Play failed: ${error}`);\n throw error;\n });\n }\n\n /**\n * Adds a new track\n *\n * @param {Number} trackId\n * @param {TrackInfo} trackInfo\n */\n addTrackInfo(trackId, trackInfo) {\n if (trackInfo.mediaType !== this._mediaType) {\n return;\n }\n\n this._mp4Writer.addTrackInfo(trackId, trackInfo);\n\n // Only open the media source once we know which codec to use\n if (!this._url) {\n this._mimeType = _chooseMimeType(trackInfo.codecType);\n if (!this._mimeType) {\n this.log.error(`No MIME type found for codec type ${trackInfo.codecType}`);\n return;\n }\n\n this.log.debug(() => `MIME type is ${this._mimeType}, opening media source`);\n this._url = this._objectUrlManager.createObjectUrl(this._mediaSource);\n this._mediaElement.src = this._url;\n }\n }\n\n /**\n * Adds video info for a track\n *\n * @param {Number} trackId\n * @param {VideoInfo} videoInfo\n */\n addVideoInfo(trackId, videoInfo) {\n if (this._mediaType !== MediaType.Video) {\n return;\n }\n\n this._mp4Writer.addVideoInfo(trackId, videoInfo);\n }\n\n /**\n * Adds audio info for a track\n *\n * @param {Number} trackId\n * @param {AudioInfo} audioInfo\n */\n addAudioInfo(trackId, audioInfo) {\n if (this._mediaType !== MediaType.Audio) {\n return;\n }\n\n this._mp4Writer.addAudioInfo(trackId, audioInfo);\n }\n\n /**\n * Adds a sample\n *\n * @param {MediaSample} sample\n */\n addSample(sample) {\n const mediaTime = this.sampleTimeToMediaTime(sample.timestamp);\n\n this.log.spam(() => `Adding sample ${sample}, media timestamp ${mediaTime}, size ${sample.data.length}`);\n\n if (!sample.sampleInfo.isCatchUp && this._liveStartTime === null) {\n this._liveStartTime = sample.timestamp;\n this._mediaElement.currentTime = mediaTime;\n }\n\n if (!this._mp4Writer.addSample(sample)) {\n return;\n }\n\n this._frameInfo.push({\n timestamp: sample.timestamp,\n clean: sample.sampleInfo.isCleanPoint || this._mediaType === MediaType.Audio,\n });\n this._streamEnd = false;\n this._processOutputBuffers();\n }\n\n /**\n * Reports that the stream has ended\n */\n reportStreamEnd() {\n this._streamEnd = true;\n }\n\n /**\n * Finds a frame\n */\n findFrame(time, searchDir) {\n if (!this._frameInfo.length) {\n return null;\n }\n\n // If the target time is before the first frame in the buffer, fail the search\n if (isTimeAfter(this._frameInfo[0].timestamp, time, this._direction)) {\n return null;\n }\n\n // Find the first frame at or after the target time in the requested direction\n if (searchDir === Direction.Forwards) {\n const entry = this._frameInfo.find((entry) => entry.timestamp.ge(time));\n return entry ? entry.timestamp : null;\n } else {\n for (let i = this._frameInfo.length - 1; i >= 0; --i) {\n const entry = this._frameInfo[i];\n if (entry.timestamp.le(time)) {\n return entry.timestamp;\n }\n }\n\n return null;\n }\n }\n\n /**\n * Gets the number of samples that we've passed to the player that are not yet ready\n * to be rendered.\n *\n * @param {Instant} targetTime is the current playback time\n */\n getEarlySampleCount(targetTime) {\n let count = 0;\n\n for (let i = this._frameInfo.length - 1; i >= 0; --i) {\n if (!isTimeAfter(this._frameInfo[i].timestamp, targetTime, this._direction)) {\n break;\n }\n\n ++count;\n }\n\n return count;\n }\n\n isInGap(timestamp) {\n return this.getGapInfo(timestamp).isInGap;\n }\n\n getGapInfo(timestamp) {\n const nextIndex = this._frameInfo.findIndex((f) => isTimeAfter(f.timestamp, timestamp, this._direction));\n if (nextIndex < 0) {\n if (this._frameInfo.length > 0) {\n const prevTime = this._frameInfo[this._frameInfo.length - 1].timestamp;\n this.log.debug(() => `No frame after ${timestamp}, before frame is ${prevTime}, streamEnd=${this._streamEnd}`);\n const isInGap = this._streamEnd ? new Duration(timestamp.minus(prevTime).value).abs().ge(FRAME_GAP_MARGIN) : false;\n return {isInGap, nextVideoTime: null};\n } else {\n this.log.debug('No frames, reporting gap');\n return {isInGap: true, nextVideoTime: null};\n }\n }\n\n const nextTime = this._frameInfo[nextIndex].timestamp;\n const prevTime = (nextIndex > 0) ? this._frameInfo[nextIndex - 1].timestamp : null;\n const gapThreshold = this._iframes ? IFRAME_GAP_THRESHOLD : NORMAL_GAP_THRESHOLD;\n\n this.log.spam(() => `${prevTime} | ${timestamp} | ${nextTime}`);\n\n if (prevTime && nextTime.minus(prevTime).abs().lt(gapThreshold)) {\n // Frame timestamp difference is not large enough to be considered a gap\n return {isInGap: false, nextVideoTime: null};\n }\n\n let isInGap;\n\n if (prevTime) {\n isInGap = new Duration(timestamp.minus(prevTime).value).abs().ge(FRAME_GAP_MARGIN);\n } else {\n // For I-frame playback we don't necessarily get the frame before the start time, so don't\n // assume that its absence means that we're in a gap\n isInGap = new Duration(nextTime.minus(timestamp).value).abs().ge(this._iframes ? gapThreshold : FRAME_GAP_MARGIN);\n }\n\n return {isInGap, nextVideoTime: isInGap ? nextTime : null};\n }\n\n /**\n * Converts a media element timestamp to a sample timestamp\n *\n * @param {Number} mediaTime is the media element timestamp\n *\n * @returns {Instant} The sample timestamp\n */\n mediaTimeToSampleTime(mediaTime) {\n if (!this._mp4Writer) {\n return null;\n }\n\n return this._mp4Writer.mediaTimeToSampleTime(mediaTime);\n }\n\n /**\n * Converts a sample timestamp to a media element timestamp\n *\n * @param {Instant} sampleTime is the sample timestamp\n *\n * @returns {Number} Media element timestamp\n */\n sampleTimeToMediaTime(sampleTime) {\n if (!this._mp4Writer) {\n return 0;\n }\n\n return this._mp4Writer.sampleTimeToMediaTime(sampleTime);\n }\n\n /**\n * Determines whether the specified sample time is within the media buffer\n *\n * @param {Instant} timestamp is the sample timestamp\n */\n isReadyToPlay(timestamp) {\n if (!this._sourceBuffer) {\n return false;\n }\n\n const ranges = this._sourceBuffer.buffered;\n\n if (!timestamp) {\n if (!this._liveStartTime) {\n return false;\n }\n\n timestamp = this._liveStartTime;\n }\n\n const mediaTime = this.sampleTimeToMediaTime(timestamp);\n\n // We can start playing if we have a buffer that ends later than the target time\n for (let i = 0; i < ranges.length; ++i) {\n if (ranges.end(i) >= mediaTime) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Determines whether the stream is currently playable\n */\n get isPlayable() {\n return this._mediaElement.readyState >= 2 && !this._mediaElement.ended;\n }\n\n /**\n * Determines whether the player element is currently stalled\n */\n get isStalled() {\n return this._stalled;\n }\n\n /**\n * Tries to recover the playback state\n */\n recover(timestamp, speed) {\n if (!this.isPlayable || !this.isReadyToPlay(timestamp)) {\n this.log.debug(() => `Not ready to play from time ${timestamp}, not recovering`);\n return false;\n }\n\n this.currentTime = timestamp;\n this.speed = speed;\n this.paused = false;\n\n this.log.debug(() => `Recovered at time ${timestamp}`);\n }\n\n /**\n * Removes old media to prevent the source buffer from filling up indefinitely\n *\n * @param {Instant} playbackTime is the current playback time\n */\n removeOldMedia(playbackTime) {\n // Actual removal will happen next time an update completes\n this._cleanupTime = playbackTime || this.currentTime;\n }\n\n /**\n * Writes current stats to the log\n */\n logStats() {\n if (this._mediaElement) {\n this.log.debug('MediaElement:'\n + ' readyState=' + this._mediaElement.readyState\n + ' seeking=' + this._mediaElement.seeking\n + ' time=' + this._mediaElement.currentTime\n + ' ended=' + this._mediaElement.ended\n + ' error=' + this._mediaElement.error\n + ' paused=' + this._mediaElement.paused\n + ' rate=' + this._mediaElement.playbackRate\n + ' buffered=' + this._formatTimeRanges(this._mediaElement.buffered)\n + ' seekable=' + this._formatTimeRanges(this._mediaElement.seekable)\n );\n }\n\n if (this._mediaSource) {\n this.log.debug('MediaSource:'\n + ' readyState=' + this._mediaSource.readyState\n + ' duration=' + this._mediaSource.duration\n );\n }\n\n if (this._sourceBuffer) {\n this.log.debug('SourceBuffer:'\n + ' buffered=' + this._formatTimeRanges(this._sourceBuffer.buffered)\n + ' tsOffset=' + this._sourceBuffer.timestampOffset\n + ' appendWndStart=' + this._sourceBuffer.appendWindowStart\n + ' appendWndEnd=' + this._sourceBuffer.appendWindowEnd\n );\n }\n }\n\n get hasDebugBlob() {\n return (this._debugBuffers) ? true : false;\n }\n\n getDebugBlob() {\n if (!this.hasDebugBlob) {\n return null;\n }\n\n return new Blob(this._debugBuffers, {type: 'octet-binary'});\n }\n\n /**\n * Called when the source has finished opening\n */\n _onSourceOpened() {\n if (this._sourceBuffer) {\n return;\n }\n\n this._appendFailed = false;\n\n this.log.debug(() => `Source opened, adding SourceBuffer with MIME type ${this._mimeType}`);\n try {\n this._sourceBuffer = this._mediaSource.addSourceBuffer(this._mimeType);\n } catch (e) {\n this.log.error(`Failed to create source buffer for mimeType ${this._mimeType}`);\n this._onError();\n return;\n }\n\n this._sourceBuffer.addEventListener('updateend', this._onUpdateEnd);\n this._sourceBuffer.addEventListener('error', this._onError);\n\n this._processOutputBuffers();\n if (this.onReady) {\n this.onReady(null);\n }\n }\n\n /**\n * Called when the source buffer has finished updating\n */\n _onUpdateEnd() {\n if (this._sourceBuffer && this._mediaElement) {\n this.log.spam(() => 'onUpdateEnd:'\n + ' buffered=' + this._formatTimeRanges(this._mediaElement.buffered)\n + ' seekable=' + this._formatTimeRanges(this._mediaElement.seekable)\n + ' tsOffset=' + this._sourceBuffer.timestampOffset\n + ' appendWndStart=' + this._sourceBuffer.appendWindowStart\n + ' appendWndEnd=' + this._sourceBuffer.appendWindowEnd\n );\n } else {\n this.log.debug('onUpdateEnd: No SourceBuffer');\n }\n\n this._cleanUpOldMedia();\n this._processOutputBuffers();\n if (this.onReady) {\n this.onReady(this._getSeekableEnd(this._mediaElement.seekable));\n }\n }\n\n /**\n * Called when an error occurs\n */\n _onError() {\n if (this.onError) {\n this.onError();\n }\n }\n\n /**\n * Processes any buffers the Mp4Writer has queued for output\n */\n _processOutputBuffers() {\n if (!this._sourceBuffer) {\n return;\n }\n\n if (!this._mp4Writer) {\n return;\n }\n\n while (this._mp4Writer && this._mp4Writer.hasOutput && !this._sourceBuffer.updating) {\n const buffer = this._mp4Writer.getNextBuffer();\n\n if (this._debugBuffers) {\n if (this._debugSize < maxDebugBlobSize) {\n this._debugBuffers.push(buffer);\n this._debugSize += buffer.byteLength;\n }\n }\n\n // Once append fails once, it won't succeed again.\n // Note: We do this check here and not earlier so that we still get the debug blob.\n if (this._appendFailed) {\n continue;\n }\n\n try {\n this._sourceBuffer.appendBuffer(buffer);\n this.log.spam(`Appended buffer of size ${buffer.byteLength}`);\n } catch (e) {\n this.log.warn('Failed to append buffer: ' + e);\n this._appendFailed = true;\n this._onError();\n }\n }\n }\n\n /**\n * Performs the actual work of cleaning up old video\n */\n _cleanUpOldMedia() {\n if (!this._cleanupTime || !this._sourceBuffer || this._sourceBuffer.updating) {\n return;\n }\n\n let cleanTime = null;\n let cleanIndex = -1;\n\n // Find the most recent I-frame that is more than RETENTION_TIME behind the current playback time,\n // while ensuring that we always keep at least one GOP to avoid messing up the gap detection logic.\n // We'll then remove any buffered video before that. (Ignore the very first I-frame because there\n // is no buffered video before that).\n let isOld;\n const retentionTime = RETENTION_TIME.times(Math.abs(this.speed));\n\n if (this._direction !== Direction.Backwards) {\n const cutoffTime = this._cleanupTime.minus(retentionTime);\n isOld = (timestamp) => timestamp.lt(cutoffTime);\n } else {\n const cutoffTime = this._cleanupTime.plus(retentionTime);\n isOld = (timestamp) => timestamp.gt(cutoffTime);\n }\n\n this._cleanupTime = null;\n let firstGop = true;\n\n for (let i = this._frameInfo.length - 1; i > 0; --i) {\n const {timestamp, clean} = this._frameInfo[i];\n if (clean) {\n if (!firstGop && isOld(timestamp)) {\n cleanTime = timestamp;\n cleanIndex = i;\n break;\n }\n\n firstGop = false;\n }\n }\n\n if (!cleanTime) {\n return;\n }\n\n const mediaTime = this._mp4Writer.sampleTimeToMediaTime(cleanTime) - 0.1;\n\n if (mediaTime > 0) {\n this.log.debug(() => `Removing up to ${mediaTime}`);\n this._sourceBuffer.remove(0, mediaTime);\n this._frameInfo.splice(0, cleanIndex);\n }\n }\n\n _getSeekableEnd(ranges) {\n if (!ranges || !ranges.length) {\n return null;\n }\n\n const mediaTime = ranges.end(ranges.length - 1);\n return this.mediaTimeToSampleTime(mediaTime);\n }\n\n _formatTimeRanges(ranges) {\n let result = '[';\n\n for (let i = 0; i < ranges.length; ++i) {\n if (i > 0) {\n result += ', ';\n }\n result += ranges.start(i) + '-' + ranges.end(i);\n }\n\n result += ']';\n return result;\n }\n\n static get normalSpeedScale() {\n return NORMAL_SPEED_SCALE;\n }\n\n static setDebugBlobSize(value) {\n maxDebugBlobSize = value;\n }\n}\n","import {RenderState, Direction, MediaType} from '../defs';\nimport {Timer, Duration, PromiseSource, CancellationError, Logger, LogLevel} from '@oecommon/plasma-js';\nimport {isTimeBefore} from '../media/mediautils';\nimport Html5MediaState from './html5mediastate';\n\nconst DEF_SYNC_INTERVAL = Duration.milliseconds(500);\n\n// The minimum and maximum amount of time to allow between receiving a sample and rendering it\nconst MIN_BUFFER_TIME = Duration.milliseconds(500);\nconst MAX_BUFFER_TIME = Duration.seconds(1);\n\nlet playerStartTimeout = Duration.seconds(5);\n\n// The number of successive times the video has to be identified as stalled before we\n// try to recover it\nconst STALL_RECOVER_THRESHOLD = 3;\n\n// The maximum number of samples to accept after the current playback or seek time. We use a higher\n// number if the player is stalled to avoid letting misbehaving panes hold up other panes, and a somewhat\n// higher number while seeking to cope with troublesome streams that need a lot of future samples to\n// seek properly.\nconst MAX_EARLY_SAMPLES = 32;\nconst MAX_EARLY_SAMPLES_SEEK = 32;\nconst MAX_EARLY_SAMPLES_STALLED = 256;\n\nconst PLAYBACK_TIME_TOLERANCE = Duration.milliseconds(100);\nconst MAX_CLOCK_PULLBACK = Duration.seconds(1);\n\nconst MAX_SPEED_SCALE = 2.0;\n\nconst SEEK_OFFSET = Duration.milliseconds(1);\n\nconst CLEAN_INTERVAL = Duration.seconds(1);\n\nlet instanceNum = 0;\n\n/**\n * Render controller that renders to an HTML5 video element\n */\nexport default class Html5RenderController {\n constructor(reactor, elementFactory, mediaSourceFactory, objectUrlManager) {\n this.log = new Logger('html5render', ++instanceNum);\n\n this._reactor = reactor;\n\n this._elementFactory = elementFactory;\n this._mediaSourceFactory = mediaSourceFactory;\n this._objectUrlManager = objectUrlManager;\n this._state = RenderState.Idle;\n this._latchedState = null;\n this._live = false;\n this._videoActive = false;\n this._seekState = null;\n this._seekPromiseSource = new PromiseSource();\n this._seekSamplesAfter = 0;\n this._currentVideoState = null;\n this._prevVideoState = null;\n this._tracks = [];\n this._playerStarted = false;\n this._timeoutStartTime = null;\n this._lastCleanTime = null;\n this._renderClock = null;\n this._timingReporter = null;\n this._syncTimer = new Timer(reactor);\n this._syncInterval = DEF_SYNC_INTERVAL;\n this._frameInfo = [];\n this._blockedSender = false;\n this._suspended = false;\n this._stalledCount = 0;\n this._currentResolution = null;\n this._handledTrackInfo = false;\n this._inGap = false;\n\n this.onRenderStateChanged = null;\n this.onUnblock = null;\n this.onVideoElementChanged = null;\n\n this.resetCallbacks();\n }\n\n resetCallbacks() {\n const noop = () => { };\n\n this.onHandleResolutionChange = noop;\n }\n\n get mediaType() {\n return MediaType.Video;\n }\n\n /**\n * The current render state\n * @type {RenderState}\n */\n get state() {\n return this._latchedState || this._state;\n }\n\n /**\n * Prepares the renderer for live video\n */\n startLive() {\n this._prepareNewVideoState(Direction.Forwards, false);\n this._live = true;\n this._suspended = false;\n }\n\n /**\n * Switches the renderer to non-live mode without changing anything else about its current state\n */\n makeNonLive() {\n this._live = false;\n }\n\n /**\n * Called to tell us that a seek is about to start so that we don't report errors when the\n * render clock changes.\n */\n prepareSeek() {\n this._setRenderState(RenderState.Seeking);\n this._suspended = false;\n }\n\n /**\n * Starts a seek operation\n */\n seek(time, searchDir, streamDir, strict, iframes) {\n this.log.debug(() => `Seeking to ${time}, searchDir=${searchDir}, streamDir=${streamDir}, ` +\n `strict=${strict}, iframes=${iframes}`);\n\n // Cancel any existing seek\n if (this._seekPromiseSource.active) {\n this.log.debug('Cancelling existing seek');\n this._seekPromiseSource.fail(new CancellationError());\n }\n\n if (this._currentVideoState) {\n this._currentVideoState.paused = true;\n this._currentVideoState.cancelSeek();\n }\n\n this._prepareNewVideoState(streamDir, iframes);\n this._live = false;\n\n this._seekState = {\n seekTime: time,\n prevTime: null,\n sampleTime: null,\n searchDir: searchDir,\n streamDir: streamDir,\n strict: strict,\n samplesAfter: 0,\n iframes,\n };\n\n return this._seekPromiseSource.makePromise();\n }\n\n /**\n * Attempts to seek within currently buffered data\n */\n seekNow(time, searchDir, streamDir) {\n if (!this._currentVideoState || streamDir !== this._currentVideoState.direction ||\n this._currentVideoState.isIframeOnly) {\n return null;\n }\n\n const result = this._currentVideoState.findFrame(time, searchDir);\n\n if (!result) {\n return null;\n }\n\n this._currentVideoState.currentTime = result;\n\n if (this.onUnblock) {\n this._blockedSender = false;\n this.onUnblock();\n }\n\n return result;\n }\n\n /**\n * Called to put the renderer into a \"seek failed\" state\n */\n seekFail() {\n if (this._currentVideoState) {\n this._currentVideoState.paused = true;\n this._currentVideoState.reportStreamEnd();\n }\n\n this._setRenderState(RenderState.NoMedia);\n }\n\n /**\n * Stops playback\n */\n stop(clearDisplay) {\n if (this._seekPromiseSource.active) {\n this._seekPromiseSource.fail(new CancellationError());\n }\n\n if (clearDisplay) {\n if (this._currentVideoState) {\n this._currentVideoState.close();\n this._currentVideoState = null;\n }\n\n if (this._prevVideoState) {\n this._prevVideoState.close();\n this._prevVideoState = null;\n }\n } else if (this._currentVideoState) {\n this._currentVideoState.paused = true;\n }\n\n this._syncTimer.kill();\n this._seekState = null;\n this._playerStarted = false;\n this._timeoutStartTime = null;\n this._live = false;\n }\n\n suspend() {\n this._suspended = true;\n }\n\n resume() {\n this._suspended = false;\n }\n\n /**\n * The render clock used to control render timing for this controller\n * @type {RenderClock}\n */\n set renderClock(value) {\n this._renderClock = value;\n }\n\n get renderClock() {\n return this._renderClock;\n }\n\n /**\n * The timing reporter used to report timing information\n */\n set timingReporter(value) {\n this._timingReporter = value;\n }\n\n get timingReporter() {\n return this._timingReporter;\n }\n\n /**\n * The interval at which the controller synchronizes the video element with\n * the render clock\n */\n set syncInterval(value) {\n this._syncInterval = value;\n }\n\n get syncInterval() {\n return this._syncInterval;\n }\n\n /**\n * Gets the current playback time\n */\n get currentTime() {\n if (this._state !== RenderState.Rendering || !this._currentVideoState) {\n return this._renderClock ? this._renderClock.currentTime : null;\n }\n\n return this._currentVideoState ? this._currentVideoState.currentTime : null;\n }\n\n /**\n * Gets the video element\n */\n get videoElement() {\n return this._currentVideoState ? this._currentVideoState.mediaElement : null;\n }\n\n /**\n * Determines whether the specified timestamp is in a gap, and if so the time of the first video\n * after the gap.\n */\n getGapInfo(timestamp) {\n return this._currentVideoState ? this._currentVideoState.getGapInfo(timestamp) :\n {isInGap: false, nextVideoTime: null};\n }\n\n /**\n * Prepares a new media source without yet discarding the existing one\n */\n _prepareNewVideoState(direction, iframes) {\n this._syncTimer.kill();\n\n // If we already have a source, keep it around (and attached to the video element)\n // until we're ready to switch to the new source.\n if (this._currentVideoState) {\n if (this._prevVideoState) {\n // We already created a new source but never switched to it. Discard this one and\n // keep prevSource as it was.\n this.log.debug('Closing current video state');\n this._currentVideoState.close();\n } else {\n this.log.debug('Saving current video state');\n this._prevVideoState = this._currentVideoState;\n }\n }\n\n // We don't want any more notifications from the previous source\n if (this._prevVideoState) {\n this._prevVideoState.onReady = null;\n this._prevVideoState.onCanPlay = null;\n this._prevVideoState.onError = null;\n }\n\n this.log.debug(() => `Initializing new video state with direction ${direction}, iframes ${iframes}`);\n\n this._currentVideoState = new Html5MediaState(this._reactor, this._elementFactory, this._mediaSourceFactory,\n this._objectUrlManager, MediaType.Video, direction, iframes);\n\n this._currentVideoState.onReady = this._onSourceReady.bind(this);\n this._currentVideoState.onCanPlay = this._onCanPlay.bind(this);\n this._currentVideoState.onError = this._handleSourceError.bind(this);\n\n this._setRenderState(this._live ? RenderState.NoMedia : RenderState.Seeking);\n this._playerStarted = false;\n this._timeoutStartTime = null;\n this._handledTrackInfo = false;\n }\n\n /**\n * Switches the video element to the current media source\n */\n _switchToNewVideoState() {\n if (!this._currentVideoState) {\n return;\n }\n\n this.log.debug('Switching to new video state');\n\n if (this.onVideoElementChanged) {\n this.onVideoElementChanged(this._currentVideoState.mediaElement);\n }\n\n if (this._prevVideoState) {\n this._prevVideoState.close();\n this._prevVideoState = null;\n }\n }\n\n /**\n * Called to report track information\n *\n * @param {number} trackId\n * @param {TrackInfo} trackInfo\n */\n handleTrackInfo(trackId, trackInfo) {\n if (!this._currentVideoState) {\n return;\n }\n\n if (this._timingReporter) {\n this._timingReporter.reportTrack(trackId, trackInfo.mediaType, MIN_BUFFER_TIME);\n }\n\n this.log.debug(`Adding track info ${trackId}/${trackInfo.mediaType}/${trackInfo.codecType}`);\n\n this._currentVideoState.addTrackInfo(trackId, trackInfo);\n this._handledTrackInfo = true;\n\n const trackMeta = this._getTrackMetadata(trackId);\n trackMeta.trackInfo = trackInfo;\n }\n\n /**\n * Called to report video information for a track\n *\n * @param {number} trackId\n * @param {VideoInfo} videoInfo\n */\n handleVideoInfo(trackId, videoInfo) {\n if (!this._currentVideoState) {\n return;\n }\n\n this.log.debug(`Adding video info ${trackId}/${videoInfo.resWidth}x${videoInfo.resHeight}`);\n\n this._currentVideoState.addVideoInfo(trackId, videoInfo);\n\n const trackMeta = this._getTrackMetadata(trackId);\n trackMeta.videoInfo = videoInfo;\n }\n\n /**\n * Called to report audio information for a track\n *\n * @param {number} trackId\n * @param {AudioInfo} audioInfo\n */\n handleAudioInfo(trackId, audioInfo) {\n if (!this._currentVideoState) {\n return;\n }\n\n this._currentVideoState.addAudioInfo(trackId, audioInfo);\n\n const trackMeta = this._getTrackMetadata(trackId);\n trackMeta.audioInfo = audioInfo;\n }\n\n /**\n * Passes a sample to the render controller\n *\n * @param {MediaSample} sample\n */\n handleSample(sample) {\n if (!this._currentVideoState || this._state === RenderState.Idle) {\n this.log.debug(() => `Can't handle sample ${sample.timestamp} (${this._videoActive}, ${this._state})`);\n\n this._blockedSender = true;\n return false;\n }\n\n if (this._state === RenderState.Error) {\n if (sample.sampleInfo.isCleanPoint) {\n this.log.info(`Trying to recover stream from sample ${sample.timestamp}`);\n // Try to recover by creating a new video state. Keep reporting that we're in an error state\n // until we do.\n this._latchedState = RenderState.Error;\n this._prepareNewVideoState(this._currentVideoState.direction, this._currentVideoState.iframes);\n this._applyStoredTrackMetadata();\n } else {\n this.log.spam(() => `Discarding non-cleanpoint sample ${sample.timestamp} while in error state`);\n return true;\n }\n }\n\n if (this._isSeekActive()) {\n if (!this._continueSeek(sample)) {\n return false;\n }\n } else if (!this._live && this._renderClock && this._renderClock.isActive) {\n const earlyCount = this._currentVideoState.getEarlySampleCount(this._renderClock.currentTime);\n const renderTime = this._renderClock.getRenderTime(sample.timestamp);\n const now = this._reactor.timeProvider.currentTime;\n let maxEarly = MAX_EARLY_SAMPLES;\n\n if (this._currentVideoState.isStalled) {\n maxEarly = MAX_EARLY_SAMPLES_STALLED;\n }\n\n // Block if this sample is not due to be rendered for a while *and* we've hit our early samples limit\n if (renderTime && renderTime.minus(now).gt(MAX_BUFFER_TIME) && earlyCount >= maxEarly) {\n // Not ready for this sample yet\n this.log.spam(() => `Not ready for sample ${sample.timestamp}, render time is ${renderTime}, ` +\n `early count is ${earlyCount}`);\n this._blockedSender = true;\n return false;\n }\n }\n\n const clean = sample.sampleInfo.isCleanPoint;\n\n this.log.spam(() => `Got sample ${sample}`);\n\n if (this._timingReporter && !sample.sampleInfo.isCatchUp && !this._isSeekActive()) {\n this._timingReporter.reportSampleReceived(sample.sampleInfo.trackId, sample.timestamp, clean);\n }\n\n this._currentVideoState.addSample(sample);\n\n // If we're currently starting the player, reset the timeout whenever we get a new sample.\n if (this._timeoutStartTime) {\n this._timeoutStartTime = this._reactor.timeProvider.currentTime;\n }\n\n this._blockedSender = false;\n return true;\n }\n\n _continueSeek(sample) {\n const {seekTime, sampleTime, prevTime, searchDir, streamDir, strict} = this._seekState;\n\n if (!sampleTime && !isTimeBefore(sample.timestamp, seekTime, streamDir)) {\n if (searchDir === Direction.Forwards) {\n this.log.debug(() => `Sample ${sample.timestamp} is after seek time, using`);\n this._seekState.sampleTime = sample.timestamp;\n } else {\n if (prevTime) {\n this.log.debug(() => `Sample ${sample.timestamp} is after seek time, using prev sample ${prevTime}`);\n this._seekState.sampleTime = prevTime;\n } else {\n if (strict) {\n this.log.info(() => `No sample found at or before ${seekTime}, finishing seek`);\n this._finishSeek();\n return false;\n } else {\n this.log.debug(() => `No sample found at or before ${seekTime}, using next sample ${sample.timestamp}`);\n this._seekState.sampleTime = sample.timestamp;\n }\n }\n }\n }\n\n this._seekState.prevTime = sample.timestamp;\n\n const earlyCount = this._currentVideoState.getEarlySampleCount(this._seekState.seekTime);\n\n if (earlyCount >= MAX_EARLY_SAMPLES_SEEK) {\n this.log.spam(() => `Already have ${earlyCount} samples after target time ${this._seekState.seekTime}, ` +\n `rejecting ${sample.timestamp}`);\n this._blockedSender = true;\n return false;\n }\n\n return true;\n }\n\n /**\n * Called to report a \"no more data\" event\n */\n handleNoMoreData() {\n this.log.debug('No more data');\n this._handleEndOfStream();\n }\n\n /**\n * Called to report a stream error\n *\n * @param {StreamError} streamError\n */\n handleError(streamError) {\n this.log.debug('Stream error ' + streamError);\n this._handleEndOfStream();\n }\n\n /**\n * Handles the end of the data stream\n */\n _handleEndOfStream() {\n if (this._isSeekActive() && !this._seekState.sampleTime) {\n // We hit the end of the stream before we received the target sample, so finish the seek with no media.\n this._finishSeek();\n }\n\n if (this._currentVideoState) {\n this._currentVideoState.reportStreamEnd();\n\n if (this._state === RenderState.Rendering) {\n this._currentVideoState.paused = true;\n this._prepareNewVideoState(this._currentVideoState.direction, this._currentVideoState.isIframeOnly);\n } else if (this._state === RenderState.Seeking && this._live) {\n this._setRenderState(RenderState.NoMedia);\n }\n }\n\n if (this._timingReporter) {\n this._timingReporter.reportStreamEnd();\n }\n\n this._tracks = [];\n }\n\n /**\n * Called to report that the render clock has changed\n */\n onClockChanged() {\n if (!this._currentVideoState) {\n return;\n }\n\n this.log.debug('Clock changed, resyncing video');\n\n this._syncVideo();\n\n if (!this._isSeekActive()) {\n this._syncTimer.set(this._syncInterval, this._syncVideo.bind(this), true);\n }\n }\n\n /**\n * Called when the media source has entered a ready state\n */\n _onSourceReady(seekableTime) {\n if (this._playerStarted || !this._currentVideoState) {\n if (seekableTime && this._timingReporter) {\n this._timingReporter.reportSeekable(seekableTime);\n }\n return;\n }\n\n if (this._isSeekActive()) {\n if (!this._seekState.sampleTime) {\n this.log.spam(() => `Not starting player, target sample for ${this._seekState.seekTime} not yet received`);\n return;\n }\n\n if (!this._currentVideoState.isReadyToPlay(this._seekState.sampleTime)) {\n this.log.spam(() => `Not starting player, frame ${this._seekState.sampleTime} not ready`);\n return;\n }\n } else if (!this._currentVideoState.isReadyToPlay()) {\n this.log.spam('Not starting player, video not ready');\n return;\n }\n\n this.log.debug('Starting player');\n\n const promise = this._currentVideoState.play();\n this._playerStarted = true;\n this._timeoutStartTime = this._reactor.timeProvider.currentTime;\n\n const targetTime = (this._seekState && this._seekState.sampleTime) ? this._seekState.sampleTime :\n (this._renderClock ? this._renderClock.currentTime : null);\n\n // It's possible that we'll switch to a new video state before the play operation finishes.\n // If that happens then we need to ignore the result of the play.\n const promiseState = this._currentVideoState;\n\n promise.then(() => {\n if (this._currentVideoState !== promiseState) {\n return;\n }\n\n this._timeoutStartTime = null;\n this._inGap = (this._live || !targetTime) ? false : this._currentVideoState.isInGap(targetTime);\n this._setRenderState(this._inGap ? RenderState.NoMedia : RenderState.Rendering);\n\n if (this._isSeekActive()) {\n this.log.debug(() => `Player started, finalizing seek to ${this._seekState.seekTime} ` +\n `(${this._seekState.sampleTime})`);\n this._finalizeSeek();\n } else {\n this.log.debug('Player started');\n this._switchToNewVideoState();\n if (this._state !== RenderState.Rendering) {\n this._currentVideoState.paused = true;\n }\n }\n }).catch((error) => {\n if (this._currentVideoState !== promiseState) {\n return;\n }\n\n this._timeoutStartTime = null;\n this.log.warn('Play failed: ' + error);\n this._playerStarted = false;\n this._setRenderState(RenderState.Error);\n if (this._isSeekActive()) {\n this._finishSeek(error);\n }\n });\n\n this._syncTimer.set(this._syncInterval, this._syncVideo.bind(this), true);\n }\n\n /**\n * Called when the VideoElement generates a \"canplay\" event\n */\n _onCanPlay(timestamp) {\n if (this._timingReporter) {\n this._timingReporter.reportCanPlay(timestamp);\n }\n }\n\n /**\n * Finalizes the seek; if the target sample was found then this asynchronously seeks the video\n * state to the correct time before completing the upstream seek.\n */\n _finalizeSeek(error) {\n if (!this._seekPromiseSource.active) {\n this.log.error('Finalizing seek but promise is not active');\n return;\n }\n\n if (error || !this._seekState.sampleTime) {\n this._finishSeek(error);\n return;\n }\n\n this._currentVideoState.paused = true;\n\n // Seek the video element a little beyond the finish time to avoid getting the previous\n // frame due to rounding errors\n this._currentVideoState.seekToTime(this._seekState.sampleTime.plus(SEEK_OFFSET)).then(() => {\n this.log.debug('Seek complete, switching to new video state');\n this._switchToNewVideoState();\n this._finishSeek();\n });\n }\n\n /**\n * Completes a pending seek request\n */\n _finishSeek(error) {\n if (!this._seekPromiseSource.active) {\n this.log.error('Finishing seek but promise is not active');\n return;\n }\n\n const {seekTime, sampleTime} = this._seekState;\n this._seekState = null;\n\n if (error) {\n this.log.debug(() => `Finishing seek with error ${error}`);\n this._seekPromiseSource.fail(error);\n } else if (!sampleTime) {\n this.log.debug('No target sample, finishing seek with no media');\n this._state = RenderState.NoMedia;\n this._seekPromiseSource.complete(seekTime);\n } else {\n this._seekPromiseSource.complete(sampleTime);\n }\n }\n\n /**\n * Called when SourceBuffer encounters an error\n */\n _handleSourceError() {\n this.log.warn('Source error');\n this._setRenderState(RenderState.Error);\n }\n\n /**\n * Tries to keep the video control at the correct time according to the\n * render clock\n */\n _syncVideo() {\n if (this._suspended || this._state === RenderState.Error) {\n return;\n }\n\n if (this.log.shouldLog(LogLevel.SPAM)) {\n this._logVideoStats();\n }\n\n if (this._blockedSender && this.onUnblock) {\n this.log.spam('Unblocking sender');\n this._blockedSender = false;\n this.onUnblock();\n }\n\n if (this._timeoutStartTime && !this._live &&\n this._reactor.timeProvider.currentTime.minus(this._timeoutStartTime).ge(playerStartTimeout)) {\n this.log.warn('Timed out starting player');\n this._playerStarted = false;\n this._timeoutStartTime = null;\n this._setRenderState(RenderState.Error);\n if (this._isSeekActive()) {\n this._finishSeek(new Error('Timed out starting player'));\n }\n return;\n }\n\n if (!this._renderClock || !this._currentVideoState || this._isSeekActive()) {\n return;\n }\n\n const {videoWidth, videoHeight} = this._currentVideoState.mediaElement;\n\n if (this._currentResolution === null || videoWidth !== this._currentResolution.width ||\n videoHeight !== this._currentResolution.height) {\n this._currentResolution = {width: videoWidth, height: videoHeight};\n this.onHandleResolutionChange(this._currentResolution);\n }\n\n const expectedTime = this._renderClock.currentTime;\n\n if (!expectedTime) {\n return;\n }\n\n const wasInGap = this._inGap;\n this._inGap = this._live ? false : this._currentVideoState.isInGap(expectedTime);\n\n if (!this._inGap) {\n if (wasInGap) {\n this._currentVideoState.currentTime = expectedTime;\n }\n\n const actualTime = this.currentTime;\n\n if (!actualTime) {\n return;\n }\n\n const diff = new Duration(expectedTime.minus(actualTime).value);\n const speed = this._renderClock.speed;\n const absSpeed = Math.abs(speed);\n let adjustedSpeed = speed;\n\n if (this._shouldAdjustSmoothly()) {\n let playable = this._currentVideoState.isPlayable;\n\n if (playable) {\n // See if the stream has been stalled for a while, and recover if it has\n if (this._currentVideoState.isStalled && actualTime.le(expectedTime)) {\n ++this._stalledCount;\n } else {\n this._stalledCount = 0;\n }\n\n if (this._stalledCount >= STALL_RECOVER_THRESHOLD) {\n this.log.info('Video has stalled, trying to recover');\n playable = this._currentVideoState.recover(expectedTime, speed);\n\n if (playable) {\n this._stalledCount = 0;\n // Don't do any further adjustment on recovery from a stall.\n return;\n }\n }\n }\n\n if (playable && !this._stalledCount) {\n // Adjust the speed to try to stay in line with the render clock\n const ratio = this._syncInterval.plus(diff).value / (this._syncInterval.value * speed);\n adjustedSpeed = speed * Math.min(MAX_SPEED_SCALE, Math.max(0, ratio));\n this.log.debug(() => `expected = ${expectedTime}, actual = ${actualTime}, setting speed to ${adjustedSpeed}`);\n this._currentVideoState.speed = adjustedSpeed;\n this._currentVideoState.paused = false;\n }\n } else if (diff.ge(PLAYBACK_TIME_TOLERANCE.times(absSpeed)) && diff.lt(MAX_CLOCK_PULLBACK)) {\n // Video element time is slightly behind, adjust render clock\n this.log.debug(() => `expected = ${expectedTime}, actual = ${actualTime}, adjusting render clock`);\n this._renderClock.currentTime = actualTime;\n } else if (diff.abs().ge(PLAYBACK_TIME_TOLERANCE.times(absSpeed))) {\n // Video element time is ahead of or well behind render clock, adjust video element time\n this.log.debug(() => `expected = ${expectedTime}, actual = ${actualTime}, adjusting video playback time`);\n this._currentVideoState.currentTime = expectedTime;\n }\n\n if (!this._live) {\n const clockDir = speed >= 0 ? Direction.Forwards : Direction.Backwards;\n\n if (clockDir === this._currentVideoState.direction) {\n this._currentVideoState.speed = adjustedSpeed;\n }\n\n this._currentVideoState.paused = this._renderClock.paused;\n }\n\n if (!this._lastCleanTime || this._reactor.currentTime.minus(this._lastCleanTime).ge(CLEAN_INTERVAL)) {\n this._currentVideoState.removeOldMedia(this.currentTime);\n }\n }\n\n this._reportGap();\n }\n\n _shouldAdjustSmoothly() {\n if (this._live) {\n return true;\n }\n\n if (!this._currentVideoState) {\n return false;\n }\n\n return !this._renderClock.paused;\n }\n\n _reportGap() {\n if (this._inGap && this._state === RenderState.Rendering) {\n this._setRenderState(RenderState.NoMedia);\n this._currentVideoState.paused = true;\n } else if (!this._inGap && this._state === RenderState.NoMedia) {\n this._setRenderState(RenderState.Rendering);\n }\n }\n\n _setRenderState(newState) {\n if (newState === this._state) {\n return;\n }\n\n this.log.debug(() => `Changing state from ${this._state} to ${newState}`);\n\n this._state = newState;\n\n if (this._timingReporter && newState !== RenderState.Seeking && newState !== RenderState.Rendering) {\n this._timingReporter.reportSeekable(null);\n }\n\n if (newState !== RenderState.Seeking && newState !== RenderState.NoMedia) {\n this._latchedState = null;\n }\n\n if (this.onRenderStateChanged) {\n this.onRenderStateChanged(this.state);\n }\n }\n\n _getTrackMetadata(trackId) {\n let trackMeta = this._tracks[trackId];\n\n if (!trackMeta) {\n trackMeta = {trackInfo: null, videoInfo: null, audioInfo: null};\n this._tracks[trackId] = trackMeta;\n }\n\n return trackMeta;\n }\n\n _applyStoredTrackMetadata() {\n this._tracks.forEach((trackMeta, trackId) => {\n if (trackMeta.trackInfo) {\n this._currentVideoState.addTrackInfo(trackId, trackMeta.trackInfo);\n }\n\n if (trackMeta.videoInfo) {\n this._currentVideoState.addVideoInfo(trackId, trackMeta.videoInfo);\n }\n\n if (trackMeta.audioInfo) {\n this._currentVideoState.addAudioInfo(trackId, trackMeta.audioInfo);\n }\n });\n }\n\n _isSeekActive() {\n return this._seekPromiseSource.active;\n }\n\n _logVideoStats() {\n if (this._currentVideoState) {\n this._currentVideoState.logStats();\n }\n }\n\n get hasDebugBlob() {\n return this._currentVideoState && this._currentVideoState.hasDebugBlob;\n }\n\n getDebugBlob() {\n if (!this._currentVideoState) {\n return null;\n }\n\n return this._currentVideoState.getDebugBlob();\n }\n\n static set playerStartTimeout(value) {\n playerStartTimeout = value;\n }\n\n static get playerStartTimeout() {\n return playerStartTimeout;\n }\n}\n","import {MediaType} from '../defs';\nimport {Duration, MovingAverageWithVariance, Logger} from '@oecommon/plasma-js';\n\nconst DEFAULT_MAX_PULLBACK = Duration.seconds(3);\nconst BUFFER_TIME_GAIN = 6;\nconst RENDER_DELAY_REDUCE = 0.95;\nconst RENDER_DELAY_LATCH_TIME = Duration.seconds(10);\n\nconst log = new Logger('rendertiming');\n\n/**\n * Render timing strategy for live streams\n */\nexport default class LiveRenderTimingStrategy {\n constructor(timeProvider, renderClock) {\n this._timeProvider = timeProvider;\n this._renderClock = renderClock;\n this._initializedClock = false;\n this._tracks = [];\n\n this.maxPullback = DEFAULT_MAX_PULLBACK;\n }\n\n /**\n * Reports a track to be monitored by this timing strategy\n *\n * @param {number} streamId\n * @param {number} trackId\n * @param {MediaType} mediaType\n * @param {Duration} minBufTime\n */\n reportTrack(streamId, trackId, mediaType, minBufTime) {\n if (!this._isAVMediaType(mediaType)) {\n return;\n }\n\n let trackInfo = this._getTrackInfo(streamId, trackId);\n\n if (!trackInfo) {\n trackInfo = {\n streamId,\n trackId,\n avgIframeBufferTime: new MovingAverageWithVariance(BUFFER_TIME_GAIN),\n renderDelay: null,\n lastCanPlayTime: null,\n lastSampleTime: null,\n };\n this._tracks.push(trackInfo);\n }\n\n trackInfo.mediaType = mediaType;\n trackInfo.minBufTime = minBufTime;\n }\n\n /**\n * Reports that a sample was received and is ready for decode\n *\n * @param {number} streamId is the stream ID\n * @param {number} trackId is the track ID\n * @param {Instant} timestamp is the timestamp of the sample that was received\n * @param {boolean} iframe is true if the sample is an I-frame\n * @param {Duration} bufferTime is the buffer time\n */\n reportSampleReceived(streamId, trackId, timestamp, iframe) {\n const trackInfo = this._getTrackInfo(streamId, trackId);\n\n if (!trackInfo) {\n return;\n }\n\n // If this is the first frame we've received, initialize the render clock\n // to its timestamp\n if (!this._initializedClock) {\n this._renderClock.currentTime = timestamp;\n this._initializedClock = true;\n }\n\n // Calculate the buffer time for this sample, i.e. how long before it\n // is due to be rendered\n const bufferTime = this._renderClock.getRenderTime(timestamp).minus(\n this._timeProvider.currentTime);\n\n log.spam(() => 'Received frame ' + timestamp.toString() +\n ', buffer time is ' + bufferTime.toString());\n\n // For video tracks we only consider I-frames for buffer timing\n // calculations since they tend to arrive later than other frames.\n if (iframe || trackInfo.mediaType !== MediaType.Video) {\n trackInfo.avgIframeBufferTime.add(bufferTime.value);\n }\n\n trackInfo.lastSampleTime = timestamp;\n }\n\n /**\n * Reports the latest available timestamp\n */\n reportSeekable(streamId, timestamp) {\n log.spam(() => `${streamId}: Seekable time now ${timestamp}, curent time is ${this._renderClock.currentTime}`);\n }\n\n /**\n * Reports a \"canplay\" event, where the player has become playable again after having to wait\n */\n reportCanPlay(streamId, timestamp) {\n const trackInfo = this._getTrackInfo(streamId, 1);\n\n if (!trackInfo) {\n return;\n }\n\n const renderTime = this._renderClock.getRenderTime(timestamp);\n const now = this._timeProvider.currentTime;\n\n trackInfo.lastCanPlayTime = now;\n\n log.debug(() => `${streamId}: canplay event for ${timestamp}, curent time is ${this._renderClock.currentTime}`);\n\n if (renderTime.ge(now)) {\n // Frame became ready in time to be rendered\n return;\n }\n\n // Frame became ready too late to be rendered. Figure out what the rendering delay is.\n if (!trackInfo.lastSampleTime) {\n log.warn(() => `${streamId}: Got canplay report for ${timestamp} but no last sample time`);\n return;\n }\n\n const renderDelay = trackInfo.lastSampleTime.minus(timestamp);\n\n log.debug(() => `${streamId}: Calculated render delay is ${renderDelay}`);\n\n if (!trackInfo.renderDelay || trackInfo.renderDelay.lt(renderDelay)) {\n trackInfo.renderDelay = renderDelay;\n }\n\n // Update the clock immediately to avoid repeated video stalls\n this.updateClock();\n }\n\n /**\n * Reports the end of a stream\n *\n * @param {number} streamId is the stream ID\n */\n reportStreamEnd(streamId) {\n log.debug(() => `Stream ${streamId} ended, removing`);\n this.removeStream(streamId);\n }\n\n /**\n * Removes a stream\n *\n * @param {number} streamId\n */\n removeStream(streamId) {\n for (let i = 0; i < this._tracks.length; ++i) {\n const trackInfo = this._tracks[i];\n if (trackInfo.streamId === streamId) {\n this._tracks.splice(i, 1);\n --i;\n }\n }\n }\n\n /**\n * Updates the render clock based on information gathered since this was last\n * called.\n *\n * @param {RenderClock} renderClock is the render clock to be updated\n */\n updateClock() {\n if (this._tracks.length === 0) {\n return;\n }\n\n // Figure out the minimum \"lower buffer time\" from all of the tracks. This\n // is defined as the average buffer time minus the standard deviation;\n // roughly 85% of the samples will have a buffer time greater than this,\n // assuming normal distribution. See\n // http://en.wikipedia.org/wiki/Standard_deviation#Rules_for_normally_distributed_data\n // for more information.\n let minBufTime = Number.POSITIVE_INFINITY;\n let maxBufTime = Number.NEGATIVE_INFINITY;\n\n for (const trackInfo of this._tracks) {\n const avgBufTime = trackInfo.avgIframeBufferTime;\n\n if (!avgBufTime.started) {\n continue;\n }\n\n // If the track has a render delay value, reduce it slightly over time so that outlier measurements\n // don't cause a huge amount of latency forever.\n if (trackInfo.renderDelay &&\n this._timeProvider.currentTime.minus(trackInfo.lastCanPlayTime).ge(RENDER_DELAY_LATCH_TIME)) {\n trackInfo.renderDelay = trackInfo.renderDelay.times(RENDER_DELAY_REDUCE);\n log.debug(() => `Reduced render delay to ${trackInfo.renderDelay}`);\n }\n\n let lowerBufTime = avgBufTime.value - avgBufTime.standardDeviation;\n\n log.debug(() => `buffer time: ${avgBufTime.value}, stddev: ${avgBufTime.standardDeviation}`);\n log.debug(() => `lower buffer time is ${lowerBufTime}us`);\n\n let bufTime = trackInfo.minBufTime ? trackInfo.minBufTime.value : 0;\n\n if (trackInfo.renderDelay && trackInfo.renderDelay.value > bufTime) {\n bufTime = trackInfo.renderDelay.value;\n }\n\n if (bufTime) {\n log.debug(() => `using min. buffer time of ${bufTime}`);\n\n // Subtract the minimum buffering time from the actual buffering\n // time; this will cause us to pull the clock back if we need to\n lowerBufTime -= bufTime;\n }\n\n minBufTime = Math.min(lowerBufTime, minBufTime);\n maxBufTime = Math.max(lowerBufTime, maxBufTime);\n }\n\n if (minBufTime === Number.POSITIVE_INFINITY) {\n return;\n }\n\n // Clamp the minimum buffer time to ensure that we don't let unusually\n // tardy streams pull back the lower latency ones.\n if (maxBufTime - minBufTime > this.maxPullback.value) {\n const newMin = maxBufTime - this.maxPullback.value;\n log.debug(() => `Buffer time max = ${maxBufTime}us, min = ${minBufTime}us, clamping min to ${newMin}us`);\n minBufTime = newMin;\n }\n\n // If the min. lower buffer time is positive, we're buffering samples for\n // longer than we need to, so advance the clock.\n // If it's negative, we have a lot of samples arriving too late to be\n // rendered on time, so pull the clock back.\n // In both cases, move the clock by a fraction of the difference to avoid\n // large changes.\n const offset = minBufTime / 4;\n\n log.debug(() => `Min. buffer time is ${minBufTime}us, adjusting clock by ${offset}us`);\n\n // Adjust the render clock, and modify all of the computed buffer time\n // averages accordingly.\n this._renderClock.adjust(new Duration(offset));\n\n for (const trackInfo of this._tracks) {\n trackInfo.avgIframeBufferTime.value =\n trackInfo.avgIframeBufferTime.value - offset;\n }\n\n log.debug(() => `After updating, render time is ${this._renderClock.currentTime}`);\n }\n\n _getTrackInfo(streamId, trackId) {\n for (let i = 0; i < this._tracks.length; ++i) {\n const trackInfo = this._tracks[i];\n if (trackInfo.streamId === streamId && trackInfo.trackId === trackId) {\n return trackInfo;\n }\n }\n\n return null;\n }\n\n _isAVMediaType(mediaType) {\n return mediaType === MediaType.Audio || mediaType === MediaType.Video;\n }\n}\n","/* global Promise */\n\nimport {PlaybackState, Direction, OscarEvents} from '../defs';\nimport {isTimeBefore} from '../media/mediautils';\nimport {Duration, CancellationError, Logger} from '@oecommon/plasma-js';\n\n/**\n * Used to control a group of synchronized video streams\n */\nexport default class MultiVideoPlayer {\n constructor(reactor, timingManager) {\n this.log = new Logger('multiplayer');\n\n this._reactor = reactor;\n this._timingManager = timingManager;\n this._sharedRenderClock = timingManager.sharedRenderClock;\n this._streams = [];\n this._state = PlaybackState.NotStarted;\n this._resumeState = PlaybackState.NotStarted;\n this._live = false;\n this._unpauseAfterSeek = false;\n this._indexController = null;\n this._seekNum = 0;\n this._requestedState = {};\n\n this._sharedRenderClock.paused = true;\n\n this.onPlaybackStateChanged = null;\n\n this._onControllerStateChanged = this._onControllerStateChanged.bind(this);\n }\n\n /**\n * The current state of the player\n *\n * @return {PlaybackState} The current playback state\n */\n get state() {\n return this._state;\n }\n\n /**\n * The live state of the player\n *\n * @return {boolean} true if the player is in live mode, false otherwise\n */\n get isLive() {\n return this._live;\n }\n\n /**\n * The render clock in use by the player\n */\n get renderClock() {\n return this._sharedRenderClock;\n }\n\n /**\n * Whether or not any streams are loaded\n *\n * @return {boolean} true if the player has streams, false otherwise\n */\n get hasStreams() {\n return this._streams.length > 0;\n }\n\n /**\n * Adds a stream controller\n *\n * This will bring the stream controller into the same state as the player,\n * e.g. if the player is in live mode it will start the controller in live\n * mode.\n *\n * @param {StreamController} streamController\n */\n addStreamController(streamController) {\n if (this._streams.find((s) => (s.controller === streamController))) {\n return;\n }\n\n const streamId = this._timingManager.getNewStreamId();\n const stream = {controller: streamController, streamId, seeking: false};\n\n this._streams.push(stream);\n\n streamController.renderClock = this._timingManager.getRenderClock(streamController.syncId);\n\n streamController.timingReporter = this._timingManager.getTimingReporter(streamController.syncId, streamId);\n\n streamController.addEventListener(OscarEvents.StateChange, this._onControllerStateChanged);\n\n if (this._live) {\n streamController.startLive();\n } else {\n this._startSeekNewStream(stream);\n }\n }\n\n /**\n * Removes a stream controller.\n *\n * This will call the stream controller's stop method.\n *\n * @param {StreamController} streamController\n */\n removeStreamController(streamController) {\n const index = this._streams.findIndex((s) => (s.controller === streamController));\n\n if (index < 0) {\n return;\n }\n\n streamController.stop(true);\n streamController.removeEventListener(OscarEvents.StateChange, this._onControllerStateChanged);\n streamController.renderClock = null;\n streamController.timingReporter = null;\n this._timingManager.removeStream(streamController.syncId, this._streams[index].streamId);\n\n this._streams.splice(index, 1);\n\n if (this._streams.length === 0 && !this._live) {\n this._sharedRenderClock.paused = true;\n\n if (this._state !== PlaybackState.NotStarted) {\n this._state = PlaybackState.Ready;\n }\n }\n }\n\n /**\n * Starts the player in live mode\n */\n startLive() {\n this.log.debug('Starting live...');\n\n this._stopAll(false);\n\n this._initTiming(true);\n for (const streamInfo of this._streams) {\n streamInfo.controller.startLive();\n }\n this._state = PlaybackState.Started;\n this._live = true;\n }\n\n /**\n * Atomically sets one or more of playback time, speed and paused state. If a seek is currently\n * in progress and a new seek is not required by the change, the requested state is stored and\n * applied after the seek.\n */\n setPlaybackState(state) {\n this.log.debug(() => `Setting playback state to ${JSON.stringify(state)}`);\n\n this._requestedState = {...this._requestedState, ...state};\n\n if (this._live) {\n this._sharedRenderClock.currentTime = this.playbackTime;\n }\n\n this._setLiveState(false);\n\n return this._updateRequestedState(state);\n }\n\n /**\n * Applies pending playback time state changes if a seek is not currently in progress\n */\n refreshPlaybackState() {\n if (this._state !== PlaybackState.Seeking && !this.playbackTime && this._requestedState.playbackTime) {\n // State was previously requested but couldn't be applied because there were no streams\n return this._updateRequestedState(this._requestedState);\n }\n return Promise.resolve(null);\n }\n\n /**\n * Atomically sets one or more of playback time, speed and paused state\n */\n _updateRequestedState(newState) {\n if (!this._streams.length) {\n return Promise.resolve([]);\n }\n\n const haveSpeed = (typeof newState.speed !== 'undefined');\n const direction = haveSpeed ? (newState.speed >= 0 ? Direction.Forwards : Direction.Backwards) : null;\n\n if (newState.playbackTime || (haveSpeed && direction !== this._sharedRenderClock.direction)) {\n this.log.debug(() => `Time or direction has changed, restarting. ${JSON.stringify(newState)}`);\n\n this._sharedRenderClock.paused = true;\n if (haveSpeed) {\n this._sharedRenderClock.speed = newState.speed;\n }\n\n return this._start(newState.playbackTime || this._sharedRenderClock.currentTime)\n .then(() => this.log.debug(() => `Seek to ${newState.playbackTime} succeeded`))\n .catch((error) => this.log.debug(() => `Seek to ${newState.playbackTime} failed: ${error}`));\n }\n\n if (this._state !== PlaybackState.Seeking) {\n this._applyRequestedState();\n } else {\n this.log.debug(() => `Will apply new state after seek: ${JSON.stringify(newState)}`);\n }\n\n return Promise.resolve(null);\n }\n\n /**\n * Applies any speed or paused state that has been requested by the client.\n */\n _applyRequestedState() {\n const {paused, speed} = this._requestedState;\n\n let clockChanged = false;\n\n if (typeof paused !== 'undefined' && paused !== this._sharedRenderClock.paused) {\n this._sharedRenderClock.paused = paused;\n clockChanged = true;\n\n // If unpausing then seek to the next section if we're in a gap\n if (!paused) {\n this._skipGapIfNecessary();\n } else if (this._streams.length) {\n const stream = this._getIndexStream();\n const time = stream ? stream.controller.renderTime : null;\n\n if (time) {\n this._sharedRenderClock.currentTime = time;\n }\n }\n }\n\n if (typeof(speed) !== 'undefined' && speed !== this._sharedRenderClock.speed) {\n this._sharedRenderClock.speed = speed;\n clockChanged = true;\n }\n\n if (clockChanged) {\n this._notifyRenderClockChanged();\n }\n }\n\n /**\n * Starts the player in search mode\n */\n _start(startTime) {\n this._sharedRenderClock.currentTime = startTime;\n this._timingManager.start(false);\n this._live = false;\n\n if (!this._streams.length) {\n this._state = PlaybackState.Ready;\n return Promise.resolve([]);\n }\n\n this._stopAll(false);\n\n // Seek all streams\n this._state = PlaybackState.Seeking;\n this._sharedRenderClock.currentTime = startTime;\n\n this._streams.forEach((stream) => {\n stream.seeking = true;\n stream.controller.prepareSeek();\n });\n return this._seekAllMarked(startTime, this._sharedRenderClock.direction, false);\n }\n\n /**\n * Stops the player\n */\n stop() {\n this._stopAll(true);\n this._state = PlaybackState.NotStarted;\n this._live = false;\n }\n\n /**\n * Suspends video state in a way that can be resumed later\n */\n suspend() {\n if (this._state === PlaybackState.Suspended) {\n this.log.debug('suspend: Player is already suspended');\n return;\n }\n\n if (this._live) {\n this.log.debug('suspend: Stopping all live video');\n this._stopAll(false);\n } else {\n this.log.debug('suspend: Pausing playback');\n this.setPlaybackState({paused: true});\n this._resumeState = this._state;\n }\n\n for (const streamInfo of this._streams) {\n streamInfo.controller.suspend();\n }\n\n this._state = PlaybackState.Suspended;\n }\n\n /**\n * Resumes video state to what it was before suspending\n */\n resume() {\n if (this._state !== PlaybackState.Suspended) {\n this.log.debug('resume: Player is not suspended');\n return;\n }\n\n for (const streamInfo of this._streams) {\n streamInfo.controller.resume();\n }\n\n if (this._live) {\n this.log.debug('resume: Restarting live video');\n this.startLive();\n } else {\n // We paused the video when we suspended, just leave it paused after resuming\n this.log.debug(() => `resume: Reverting playback state to ${this._resumeState}`);\n this._state = this._resumeState;\n }\n }\n\n step(direction) {\n if (this._state === PlaybackState.Seeking) {\n return Promise.reject(new Error('Can\\'t step while player is seeking'));\n }\n\n if (this._streams.length === 0) {\n return Promise.reject(new Error('No streams to step'));\n }\n\n this.setPlaybackState({paused: true});\n\n let targetTime = this._sharedRenderClock.currentTime;\n\n this.log.debug(() => `Stepping, current time is ${targetTime}`);\n\n if (direction === Direction.Backwards) {\n targetTime = targetTime.minus(Duration.milliseconds(1));\n } else {\n targetTime = targetTime.plus(Duration.milliseconds(1));\n }\n\n this._streams.forEach((stream) => {\n stream.seeking = true;\n });\n\n return this._seekAllMarked(targetTime, direction, true);\n }\n\n get paused() {\n return this._sharedRenderClock.paused;\n }\n\n get speed() {\n return this._sharedRenderClock.speed;\n }\n\n get playbackTime() {\n if (this._live) {\n let sourceController = null;\n if (this._indexController) {\n sourceController = this._indexController;\n } else if (this._streams.length > 0) {\n sourceController = this._streams[0].controller;\n }\n if (sourceController && sourceController.renderClock && sourceController.renderClock.currentTime) {\n return sourceController.renderClock.currentTime;\n }\n return this._reactor.timeProvider.currentTime;\n } else {\n return this._sharedRenderClock.currentTime;\n }\n }\n\n set indexStreamController(value) {\n this._indexController = value;\n }\n\n get indexStreamController() {\n return this._indexController;\n }\n\n /**\n * Asynchronously seeks all streams marked for seeking\n */\n _seekAllMarked(startTime, direction, stepping) {\n this._unpauseAfterSeek = this._unpauseAfterSeek || !this._sharedRenderClock.paused;\n this._sharedRenderClock.paused = true;\n\n this._state = PlaybackState.Seeking;\n this._notifyStateChanged();\n\n ++this._seekNum;\n\n const seekState = {\n startTime,\n direction,\n stepping,\n actualSeekTime: startTime,\n bestTime: null,\n seekNum: this._seekNum,\n };\n\n this.log.debug(() => `Starting seek ${seekState.seekNum} to ${startTime}, stepping=${stepping}`);\n\n if (stepping) {\n // Seek the first stream to see where it ends up\n let firstStream = this._getIndexStream();\n\n if (!firstStream.seeking) {\n firstStream = this._streams.find((s) => s.seeking);\n }\n\n return this._seekFirst({...seekState, firstStream});\n } else {\n return this._seekOthers(seekState);\n }\n }\n\n _seekFirst(seekState) {\n if (!seekState.firstStream) {\n return Promise.reject(new Error('No stream to seek'));\n }\n\n this.log.debug(() => `Seeking first controller to ${seekState.startTime}, dir=${seekState.direction}`);\n\n return seekState.firstStream.controller.seek(seekState.startTime, seekState.direction, false)\n .then((actualSeekTime) => {\n this.log.debug(() => `First controller seeked to ${actualSeekTime}`);\n\n seekState.firstStream.seeking = false;\n seekState.firstStream = null;\n seekState.actualSeekTime = actualSeekTime;\n seekState.bestTime = actualSeekTime;\n\n return this._seekOthers(seekState);\n })\n .catch((error) => {\n if (error instanceof CancellationError) {\n this.log.debug(`Seek ${seekState.seekNum} was cancelled`);\n if (this._seekNum === seekState.seekNum) {\n this._streams.forEach((s) => {\n s.seeking = false;\n });\n }\n throw error;\n }\n\n this.log.debug(() => `Seek failed: ${error}`);\n\n // Seek failed, so find another stream that we can use instead\n seekState.firstStream.seeking = false;\n seekState.firstStream = this._streams.find((s) => s.seeking);\n\n if (!seekState.firstStream) {\n // No more streams to seek, so fail the whole operation\n if (!(error instanceof CancellationError)) {\n this.log.debug('No more streams, failing seek');\n this._state = PlaybackState.Error;\n this._notifyStateChanged();\n }\n return false;\n }\n\n return this._seekFirst(seekState);\n });\n }\n\n _seekOthers(seekState) {\n const promises = [];\n\n for (const stream of this._streams) {\n if (stream.seeking) {\n this.log.debug(() => `Seeking other stream to ${seekState.actualSeekTime}`);\n const promise = this._seekStream(seekState, stream, seekState.direction)\n .then((resultTime) => this.log.debug(() => `Seek succeeded, actual time is ${resultTime}`));\n promises.push(promise);\n }\n }\n\n if (promises.length) {\n return Promise.all(promises)\n .then(() => {\n if (this._streams.find((stream) => stream.seeking)) {\n // More have been added since we started\n return this._seekOthers(seekState);\n } else {\n return this._finishSeek(seekState);\n }\n });\n } else {\n return this._finishSeek(seekState);\n }\n }\n\n _finishSeek(seekState) {\n const newTime = seekState.actualSeekTime;\n\n this.log.debug(() => `All streams finished seeking, new time is ${newTime}`);\n\n this._sharedRenderClock.currentTime = newTime;\n\n this._applyRequestedState();\n\n this._state = PlaybackState.Started;\n this._notifyStateChanged();\n\n return Promise.resolve(true);\n }\n\n _seekStream(seekState, stream, direction) {\n return stream.controller.seek(seekState.actualSeekTime, direction, true)\n .then((resultTime) => {\n stream.seeking = false;\n\n if (!seekState.bestTime || isTimeBefore(resultTime, seekState.bestTime, direction)) {\n seekState.bestTime = resultTime;\n }\n\n return resultTime;\n })\n .catch((error) => {\n if (error instanceof CancellationError) {\n throw error;\n }\n stream.seeking = false;\n return null;\n });\n }\n\n _startSeekNewStream(stream) {\n if (this._state !== PlaybackState.Started && this._state !== PlaybackState.Seeking &&\n this._state !== PlaybackState.Ready) {\n return;\n }\n\n // Mark the stream as seeking. If we're not in the middle of a seek, start one now.\n stream.seeking = true;\n stream.controller.prepareSeek();\n\n if (this._state !== PlaybackState.Seeking) {\n this._seekAllMarked(this._sharedRenderClock.currentTime, this._sharedRenderClock.direction, false);\n }\n }\n\n _skipGapIfNecessary() {\n let skipTime = null;\n\n for (const stream of this._streams) {\n const {isInGap, nextVideoTime} = stream.controller.getGapInfo(this._sharedRenderClock.currentTime);\n\n if (!isInGap) {\n // If any stream reports that it is not in a gap, don't skip\n return;\n }\n\n if (!nextVideoTime) {\n continue;\n }\n\n if (!skipTime || isTimeBefore(nextVideoTime, skipTime, this._sharedRenderClock.direction)) {\n skipTime = nextVideoTime;\n }\n }\n\n if (skipTime) {\n this.log.info('Skipping gap; new time is ' + skipTime.toString());\n this.setPlaybackState({playbackTime: skipTime});\n }\n }\n\n _stopAll(tearDown) {\n for (const streamInfo of this._streams) {\n streamInfo.controller.stop(tearDown);\n streamInfo.seeking = false;\n }\n }\n\n _initTiming(live) {\n this.log.debug(() => `Initializing timing, live=${live}`);\n\n if (live && !this._live) {\n this._sharedRenderClock.reset();\n this._sharedRenderClock.speed = 1.0;\n }\n\n const endLive = this._live && !live;\n\n this._live = live;\n\n this._timingManager.start(live);\n\n for (const stream of this._streams) {\n if (!endLive) {\n stream.controller.makeNonLive();\n }\n stream.controller.renderClock = this._timingManager.getRenderClock(stream.controller.syncId);\n }\n }\n\n _reset() {\n this._removeAll();\n this._sharedRenderClock.reset();\n this._timingManager.reset();\n this._state = PlaybackState.NotStarted;\n this._live = false;\n this._unpauseAfterSeek = false;\n this._indexController = null;\n }\n\n _removeAll() {\n for (const stream of this._streams) {\n stream.controller.stop(true);\n stream.controller.removeEventListener(OscarEvents.StateChange, this._onControllerStateChanged);\n }\n\n this._streams = [];\n }\n\n _notifyRenderClockChanged() {\n for (const stream of this._streams) {\n stream.controller.onClockChanged();\n }\n }\n\n _notifyStateChanged() {\n if (this.onPlaybackStateChanged) {\n this.onPlaybackStateChanged();\n }\n }\n\n _onControllerStateChanged() {\n if (!this._live && this._state === PlaybackState.Started && !this._sharedRenderClock.paused) {\n this._skipGapIfNecessary();\n }\n }\n\n _setLiveState(live) {\n if (live === this._live) {\n return;\n }\n\n this._live = live;\n this._initTiming(live);\n\n this._notifyStateChanged();\n }\n\n _getIndexStream() {\n if (!this._streams.length) {\n return null;\n }\n\n const stream = this._streams.find((s) => (s.controller === this._indexController));\n\n return stream ? stream : this._streams[0];\n }\n}\n","import {Instant, Duration} from '@oecommon/plasma-js';\nimport {Direction} from '../defs';\nimport {isTimeAfter} from '../media/mediautils';\n\n/**\n * Keeps track of the render timing of one or more streams\n */\nexport default class RenderClock {\n constructor(timeProvider) {\n this._timeProvider = timeProvider;\n this._refStreamTime = null;\n this._refClockTime = null;\n this._speed = 1.0;\n this._paused = false;\n this._limit = null;\n }\n\n /**\n * Determines whether the clock is active\n *\n * @return {boolean}\n */\n get isActive() {\n return this._refClockTime !== null;\n }\n\n /**\n * Resets the render clock to its default state\n */\n reset() {\n this._refStreamTime = null;\n this._refClockTime = null;\n this._speed = 1.0;\n this._paused = false;\n this._limit = null;\n }\n\n /**\n * The current time of the render clock\n * @type {Instant}\n */\n set currentTime(value) {\n this._limit = null;\n this._refStreamTime = value;\n this._refClockTime = this._timeProvider.currentTime;\n }\n\n get currentTime() {\n return this.calcCurrentTime(false);\n }\n\n /**\n * Calculates the current clock time, optionally ignoring the limit time\n *\n * @param {bool} ignoreLimit is the limit time.\n */\n calcCurrentTime(ignoreLimit) {\n if (!this._refStreamTime || !this._refClockTime) {\n return null;\n }\n\n if (this._paused) {\n return this._refStreamTime;\n }\n\n const elapsed = this._timeProvider.currentTime.minus(this._refClockTime);\n const time = this._refStreamTime.plus(new Duration(elapsed.value * this._speed));\n\n if (!ignoreLimit && this._limit && isTimeAfter(time, this._limit, this.direction)) {\n return this._limit;\n }\n\n return time;\n }\n\n /**\n * The current speed of the clock\n * @type {Number}\n */\n set speed(value) {\n this._rebaseClock();\n this._speed = value;\n }\n\n get speed() {\n return this._speed;\n }\n\n /**\n * The current direction of the clock\n */\n get direction() {\n return this._speed >= 0 ? Direction.Forwards : Direction.Backwards;\n }\n\n /**\n * The current paused state of the clock\n * @type {boolean}\n */\n set paused(value) {\n if (this.isActive) {\n this._rebaseClock();\n }\n\n this._paused = value;\n }\n\n get paused() {\n return this._paused;\n }\n\n /**\n * The limit of the render clock, i.e. the time it is not allowed to go past\n */\n set limit(value) {\n this._limit = value;\n }\n\n get limit() {\n return this._limit;\n }\n\n /**\n * Adjusts the render clock by the given offset\n *\n * @param {Duration} offsetDuration\n */\n adjust(offsetDuration) {\n this._refClockTime = this._refClockTime.minus(offsetDuration);\n }\n\n /**\n * Gets the time at which a sample with the specified timestamp should be rendered\n *\n * @param {Instant} timestamp is a sample timestamp\n * @param {bool} ignoreLimit if true will cause the clock limit to be ignored\n *\n * @return {Instant} the render time of the given sample\n */\n getRenderTime(timestamp, ignoreLimit = false) {\n if (this._speed === 0 || this._paused) {\n return Instant.positiveInfinity;\n } else if (!this.isActive) {\n return null;\n }\n\n const cur = this.calcCurrentTime(ignoreLimit);\n const delta = timestamp.minus(cur);\n return this._timeProvider.currentTime.plus(new Duration(delta.value / this._speed));\n }\n\n _rebaseClock() {\n this._refStreamTime = this.currentTime;\n this._refClockTime = this._timeProvider.currentTime;\n }\n}\n","import RenderClock from './renderclock';\nimport {Timer, Duration, Logger} from '@oecommon/plasma-js';\n\nconst DEF_UPDATE_INTERVAL = Duration.seconds(4);\n\n/**\n * Removes tracks associated with a particular stream\n */\nfunction removeTracks(entry, streamId, trackId) {\n for (let i = 0; i < entry.tracks.length; ++i) {\n const track = entry.tracks[i];\n if (track.streamId === streamId &&\n (trackId === undefined || trackId === track.trackId)) {\n entry.tracks.splice(i, 1);\n --i;\n }\n }\n}\n\n/**\n * Manages render timing for a set of synchronized media streams\n */\nexport default class RenderTimingManager {\n /**\n * Constructor\n *\n * @param {Reactor} reactor\n */\n constructor(reactor, timingStrategyFactory) {\n this.log = new Logger('timingmanager');\n\n this._timeProvider = reactor.timeProvider;\n this._timingStrategyFactory = timingStrategyFactory;\n this._timer = new Timer(reactor);\n this._sharedRenderClock = new RenderClock(this._timeProvider);\n this._syncMap = {};\n this._live = false;\n this._sharedTimingStrategy = null;\n this._nextStreamId = 1;\n this._timerHandler = this._updateTiming.bind(this);\n\n this.updateInterval = DEF_UPDATE_INTERVAL;\n }\n\n /**\n * The render clock managed by the timing manager\n * @type {RenderClock}\n */\n get sharedRenderClock() {\n return this._sharedRenderClock;\n }\n\n /**\n * Gets the live render clock for a specific sync ID\n *\n * @param {string} syncId The synchronization ID (usually an NVR ID)\n */\n getRenderClock(syncId) {\n if (this._live) {\n this.log.spam(() => `Live mode, getting render clock for ${syncId}`);\n const entry = this._getSyncMapEntry(syncId);\n return entry.renderClock;\n } else {\n this.log.spam(() => `Live mode, getting shared render clock`);\n return this._sharedRenderClock;\n }\n }\n\n /**\n * Starts the timing manager's operation\n */\n start(liveMode) {\n this.log.debug(() => `Starting, liveMode=${liveMode}`);\n this._live = liveMode;\n this._sharedTimingStrategy = liveMode ? null : this._timingStrategyFactory.create(this._sharedRenderClock, false);\n\n for (const [, entry] of Object.entries(this._syncMap)) {\n entry.timingStrategy = liveMode ?\n this._timingStrategyFactory.create(entry.renderClock, true) :\n this._sharedTimingStrategy;\n\n for (const track of entry.tracks) {\n entry.timingStrategy.reportTrack(track.streamId, track.trackId, track.mediaType, track.minBufTime);\n }\n }\n\n this._timer.set(this.updateInterval, this._timerHandler, true);\n }\n\n /**\n * Stops the timing manager's operation\n */\n stop() {\n this._timer.kill();\n }\n\n /**\n * Live mode flag; if true the timing manager is operating in live mode,\n * otherwise non-live mode.\n * @type {boolean}\n */\n get isLive() {\n return this._live;\n }\n\n /**\n * Determines if the manager has been started\n */\n get isStarted() {\n return this._timer.isSet;\n }\n\n /**\n * Gets a unique stream ID for a new stream to use to report its render\n * timing\n *\n * @return {number} The stream ID\n */\n getNewStreamId() {\n return this._nextStreamId++;\n }\n\n /**\n * Removes a stream and all timing information associated with it\n *\n * @param {number} streamId\n */\n removeStream(syncId, streamId) {\n const entry = this._getSyncMapEntry(syncId);\n\n removeTracks(entry, streamId);\n\n if (entry.timingStrategy) {\n entry.timingStrategy.removeStream(streamId);\n }\n }\n\n getTimingReporter(syncId, streamId) {\n return {\n reportTrack: (trackId, mediaType, minBufTime) => {\n this.reportTrack(syncId, streamId, trackId, mediaType, minBufTime);\n },\n reportSampleReceived: (trackId, timestamp, iframe) => {\n this.reportSampleReceived(syncId, streamId, trackId, timestamp, iframe);\n },\n reportSeekable: (timestamp) => {\n this.reportSeekable(syncId, streamId, timestamp);\n },\n reportCanPlay: (timestamp) => {\n this.reportCanPlay(syncId, streamId, timestamp);\n },\n reportStreamEnd: () => {\n this.reportStreamEnd(syncId, streamId);\n },\n };\n }\n\n /**\n * Called by a stream to report one of its tracks\n *\n * @param {number} syncId is the synchronization ID\n * @param {number} streamId is the ID of the reporting stream\n * @param {number} trackId is the track ID\n * @param {MediaType} mediaType is the media type of the track\n * @param {Duration} minBufTime is the minimum buffer time required for the track\n */\n reportTrack(syncId, streamId, trackId, mediaType, minBufTime) {\n const entry = this._getSyncMapEntry(syncId);\n\n removeTracks(entry, streamId, trackId);\n entry.tracks.push({streamId, trackId, mediaType, minBufTime});\n\n if (entry.timingStrategy) {\n entry.timingStrategy.reportTrack(streamId, trackId, mediaType, minBufTime);\n }\n }\n\n /**\n * Reports that a sample was received and is ready for decode\n *\n * @param {number} streamId is the stream ID\n * @param {number} trackId is the track ID\n * @param {Instant} timestamp is the timestamp of the sample that was received\n * @param {boolean} iframe is true if the sample is an I-frame\n */\n reportSampleReceived(syncId, streamId, trackId, timestamp, iframe) {\n const entry = this._getSyncMapEntry(syncId);\n\n if (entry.timingStrategy) {\n entry.timingStrategy.reportSampleReceived(streamId, trackId, timestamp, iframe);\n }\n }\n\n /**\n * Reports the latest time that is seekable\n *\n * @param {number} streamId is the stream ID\n * @param {Instant} timestamp is the timestamp of the sample that was received\n */\n reportSeekable(syncId, streamId, timestamp) {\n const entry = this._getSyncMapEntry(syncId);\n\n if (entry.timingStrategy) {\n entry.timingStrategy.reportSeekable(streamId, timestamp);\n }\n }\n\n /**\n * Reports a canplay event\n *\n * @param {number} streamId is the stream ID\n * @param {Instant} timestamp is the video time associated with the canplay event\n */\n reportCanPlay(syncId, streamId, timestamp) {\n const entry = this._getSyncMapEntry(syncId);\n\n if (entry.timingStrategy) {\n entry.timingStrategy.reportCanPlay(streamId, timestamp);\n }\n }\n\n /**\n * Reports the end of a stream\n *\n * @param {number} streamId is the stream ID\n */\n reportStreamEnd(syncId, streamId) {\n const entry = this._getSyncMapEntry(syncId);\n\n if (entry.timingStrategy) {\n entry.timingStrategy.reportStreamEnd(streamId);\n }\n }\n\n _updateTiming() {\n if (this._sharedTimingStrategy) {\n this._sharedTimingStrategy.updateClock();\n }\n\n for (const [, entry] of Object.entries(this._syncMap)) {\n if (entry.timingStrategy && entry.timingStrategy !== this._sharedTimingStrategy) {\n entry.timingStrategy.updateClock();\n }\n }\n }\n\n _getSyncMapEntry(syncId) {\n let entry = this._syncMap[syncId];\n\n if (!entry) {\n entry = {\n renderClock: new RenderClock(this._timeProvider),\n timingStrategy: null,\n tracks: [],\n };\n\n this._syncMap[syncId] = entry;\n\n if (this.isStarted) {\n entry.timingStrategy = this._live ? this._timingStrategyFactory.create(entry.renderClock, true) :\n this._sharedTimingStrategy;\n }\n }\n\n return entry;\n }\n}\n","import {Duration, Logger} from '@oecommon/plasma-js';\nimport {MediaType} from '../defs';\nimport {isTimeBefore} from '../media/mediautils';\n\nconst log = new Logger('rendertiming');\n\nconst LATE_FRAME_TOLERANCE = Duration.milliseconds(30);\nconst BUFFER_TIME = Duration.milliseconds(10);\nconst MIN_SEEKABLE_PULLBACK_SPEED = 4.0;\n\nconst VideoTrackId = 1;\n\n/**\n * Render timing strategy for live streams\n */\nexport default class NonLiveRenderTimingStrategy {\n constructor(timeProvider, renderClock) {\n this._timeProvider = timeProvider;\n this._renderClock = renderClock;\n this._streamInfo = {};\n }\n\n /**\n * Reports a track to be monitored by this timing strategy\n */\n reportTrack(streamId, trackId, mediaType, minBufTime) {\n if (mediaType === MediaType.Video) {\n this._streamInfo[streamId] = {receivedTime: null, seekableTime: null};\n }\n }\n\n /**\n * Reports that a sample was received and is ready for decode\n *\n * @param {number} streamId is the stream ID\n * @param {number} trackId is the track ID\n * @param {Instant} timestamp is the timestamp of the sample that was received\n */\n reportSampleReceived(streamId, trackId, timestamp /* , iframe */) {\n if (trackId !== VideoTrackId) {\n return;\n }\n\n const streamInfo = this._streamInfo[streamId];\n\n if (!streamInfo) {\n return;\n }\n\n // Pull back prior to setting receivedTime so it's not used in the calculation\n // and don't call updateClockLimit if we're pulling back because it's already done\n const pulledBack = this._pullBackClock(streamId, timestamp, 'received');\n streamInfo.receivedTime = timestamp;\n if (!pulledBack) {\n this._updateClockLimit();\n }\n }\n\n /**\n * Reports the latest available timestamp\n *\n * @param {number} streamId is the stream ID\n * @param {Instant} timestamp is the latest available timestamp\n */\n reportSeekable(streamId, timestamp) {\n const streamInfo = this._streamInfo[streamId];\n\n if (!streamInfo) {\n return;\n }\n\n if (!timestamp) {\n streamInfo.receivedTime = null;\n streamInfo.seekableTime = null;\n this._updateClockLimit();\n return;\n }\n\n if (this._renderClock.speed >= 0 && this._renderClock.speed < MIN_SEEKABLE_PULLBACK_SPEED) {\n if (streamInfo.seekableTime) {\n streamInfo.seekableTime = null;\n this._updateClockLimit();\n }\n\n return;\n }\n\n if (this._pullBackClock(streamId, timestamp, 'seekable')) {\n return;\n }\n\n streamInfo.seekableTime = timestamp;\n this._updateClockLimit();\n }\n\n /**\n * Reports a \"canplay\" event, where the player has become playable again after having to wait\n */\n reportCanPlay() {\n // This strategy doesn't need to do anything with this event\n }\n\n /**\n * Pulls back the clock if necessary\n */\n _pullBackClock(streamId, timestamp, typeDesc) {\n if (this._renderClock.paused) {\n return false;\n }\n\n const now = this._timeProvider.currentTime;\n const readyTime = this._renderClock.getRenderTime(timestamp, true).minus(BUFFER_TIME);\n\n // If the frame is ready for render significantly later than the time it\n // was supposed to be rendered, pull the clock back\n if (now.minus(readyTime).gt(LATE_FRAME_TOLERANCE)) {\n log.debug(() => `Stream ${streamId} frame ${timestamp.toString()} ${typeDesc} late, pulling clock back`);\n this._renderClock.currentTime = timestamp.minus(BUFFER_TIME);\n this._updateClockLimit();\n return true;\n }\n\n return false;\n }\n\n /**\n * Reports the end of a stream\n *\n * @param {number} streamId is the stream ID\n */\n reportStreamEnd(streamId) {\n const streamInfo = this._streamInfo[streamId];\n\n if (streamInfo) {\n streamInfo.receivedTime = null;\n streamInfo.seekableTime = null;\n }\n\n this._updateClockLimit();\n }\n\n /**\n * Removes a stream\n *\n * @param {number} streamId\n */\n removeStream(streamId) {\n delete this._streamInfo[streamId];\n this._updateClockLimit();\n }\n\n updateClock() {\n }\n\n _updateClockLimit() {\n let limit = null;\n const direction = this._renderClock.direction;\n\n for (const stream of Object.values(this._streamInfo)) {\n if (stream.seekableTime && (!limit || isTimeBefore(stream.seekableTime, limit, direction))) {\n limit = stream.seekableTime;\n } else if (stream.receivedTime && (!limit || isTimeBefore(stream.receivedTime, limit, direction))) {\n limit = stream.receivedTime;\n }\n }\n\n log.spam(() => `Limiting clock to ${limit}`);\n\n this._renderClock.limit = limit;\n }\n}\n","import LiveRenderTimingStrategy from './liverendertimingstrategy';\nimport NonLiveRenderTimingStrategy from './nonliverendertimingstrategy';\n\n/**\n * Factory for creating render timing strategy objects\n */\nexport default class RenderTimingStrategyFactory {\n constructor(timeProvider) {\n this._timeProvider = timeProvider;\n }\n\n /**\n * Creates a render timing strategy\n *\n * @param {RenderClock} renderClock is the render clock to attach to the strategy\n * @param {boolean} live is true for live mode, false for non-live mode\n */\n create(renderClock, live) {\n if (live) {\n return new LiveRenderTimingStrategy(this._timeProvider, renderClock);\n } else {\n return new NonLiveRenderTimingStrategy(this._timeProvider, renderClock);\n }\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n\nimport StreamStats from '../media/streamstats';\nimport {RenderState, MediaState, StreamError, MediaType, CodecType,\n Direction, OscarEvents, StreamTransportState, StreamTransportType} from '../defs';\nimport {Duration, TimeDefs, BasicEvent, EventTarget, Logger, CancellationError, PromiseSource}\n from '@oecommon/plasma-js';\n\nconst MaxSmoothPlaybackSpeed = 4.0;\nconst DisplayedIframesPerSecond = 8;\n\nlet instanceNum = 0;\n\nconst noop = () => {};\n\n/**\n * Manages the retrieval and rendering of a single media stream\n */\nexport default class StreamController extends EventTarget {\n constructor(reactor, retriever, syncId) {\n super();\n this.log = new Logger('streamcontroller', ++instanceNum);\n\n this._reactor = reactor;\n this._retriever = retriever;\n this._syncId = syncId;\n this._renderControllers = new Map();\n this._trackTypes = new Map();\n this._mediaTypes = new Set();\n this._masterController = null;\n this._metadataController = null;\n this._live = false;\n this._mediaState = MediaState.Idle;\n this._mediaError = StreamError.NoError;\n this._renderClock = null;\n this._timingReporter = null;\n this._streamStats = new StreamStats();\n this._audioCodec = CodecType.Unknown;\n this._videoCodec = CodecType.Unknown;\n this._resolution = null;\n this._currentDir = null;\n this._iframeInterval = Duration.zero;\n this._newSection = false;\n this._isTranscoded = false;\n this._volume = 0;\n this._muted = true;\n this._showBoundingBoxes = false;\n this._seekPromiseSource = new PromiseSource();\n this._seekData = null;\n this.onBoundingBox = noop;\n this.onTracklet = noop;\n this.onTransportStateChange = noop;\n\n retriever.onNewSection = this._handleNewSection.bind(this);\n retriever.onTrackInfo = this._handleTrackInfo.bind(this);\n retriever.onVideoInfo = this._handleVideoInfo.bind(this);\n retriever.onAudioInfo = this._handleAudioInfo.bind(this);\n retriever.onHeadersDone = this._handleHeadersDone.bind(this);\n retriever.onSample = this._handleSample.bind(this);\n retriever.onNoMoreData = this._handleNoMoreData.bind(this);\n retriever.onError = this._handleError.bind(this);\n retriever.onTransportStateChange = this._handleTransportStateChange.bind(this);\n // triggered by the retriever when a connection completes (see _handleConnectComplete)\n retriever.addEventListener(OscarEvents.StateChange, this._handleRetrieverStateChange.bind(this));\n\n this._streamStats.addEventListener(OscarEvents.StatChange, this._handleStreamStatChange.bind(this));\n }\n\n detach() {\n this._retriever.resetCallbacks();\n this.onBoundingBox = noop;\n this.onTracklet = noop;\n this.onTransportStateChange = noop;\n }\n\n /**\n * Gets the synchronization ID\n */\n get syncId() {\n return this._syncId;\n }\n\n /**\n * The current video state\n * @type {MediaState}\n */\n get videoStatus() {\n return this._mediaState;\n }\n\n /**\n * The current stream error, if videoStatus is MediaState.Error\n * @type {StreamError}\n */\n get streamError() {\n return this._mediaError;\n }\n\n get transportState() {\n if (!this._retriever) {\n return StreamTransportState.Idle;\n }\n return this._retriever.transportState;\n }\n\n get transportType() {\n if (!this._retriever) {\n return StreamTransportType.None;\n }\n return this._retriever.transportType;\n }\n\n get transportInfo() {\n if (!this._retriever) {\n return null;\n }\n return this._retriever.transportInfo;\n }\n\n set volume(value) {\n this._volume = value;\n this._applyToAudioController((controller) => {\n controller.volume = value;\n });\n }\n\n get volume() {\n return this._volume;\n }\n\n set muted(value) {\n this._muted = value;\n this._applyToAudioController((controller) => {\n controller.muted = value;\n });\n }\n\n get muted() {\n return this._muted;\n }\n\n set showBoundingBoxes(value) {\n if (this._showBoundingBoxes === value) {\n return;\n }\n\n this._showBoundingBoxes = value;\n this._setMetadataControllerData();\n this._handleAnalyticTracksLiveUpdate();\n }\n\n get showBoundingBoxes() {\n return this._showBoundingBoxes;\n }\n\n /**\n * Attaches a render controller\n *\n * @param {RenderController} controller\n */\n attachRenderController(mediaType, controller) {\n if (typeof controller === 'undefined') {\n throw new Error('attachRenderController called with no controller');\n }\n\n this.detachRenderController(mediaType);\n\n this._renderControllers.set(mediaType, controller);\n\n if (!controller) {\n return;\n }\n\n controller.onRenderStateChanged = this._handleRenderStateChanged.bind(this);\n controller.onUnblock = this._handleRenderUnblocked.bind(this);\n\n if (this._renderClock) {\n controller.renderClock = this._renderClock;\n }\n\n if (this._timingReporter) {\n controller.timingReporter = this._timingReporter;\n }\n\n if (mediaType === MediaType.Audio) {\n controller.muted = this._muted;\n controller.volume = this._volume;\n }\n }\n\n _setMetadataControllerData() {\n if (this._metadataController) {\n this._metadataController.showBoundingBoxes = this._showBoundingBoxes;\n }\n }\n\n attachMetadataController(controller) {\n this.detachMetadataController();\n this._metadataController = controller;\n this._setMetadataControllerData();\n }\n\n /**\n * Detaches the current render controller\n */\n detachRenderController(mediaType) {\n const controller = this._renderControllers.get(mediaType);\n\n if (!controller) {\n return;\n }\n\n controller.stop(true);\n controller.onRenderStateChanged = null;\n controller.onResolutionChanged = null;\n controller.onUnblock = null;\n controller.renderClock = null;\n controller.timingReporter = null;\n this._renderControllers.delete(mediaType);\n }\n\n detachMetadataController() {\n if (this._metadataController) {\n this._metadataController.stop(true);\n this._metadataController = null;\n }\n }\n\n /**\n * The render clock used by this stream controller\n * @type {RenderClock}\n */\n set renderClock(value) {\n this._renderClock = value;\n\n this._renderControllers.forEach((controller) => {\n controller.renderClock = value;\n });\n }\n\n get renderClock() {\n return this._renderClock;\n }\n\n get isLive() {\n return this._live;\n }\n\n /**\n * The timing reporter used by this stream controller\n * @type {object}\n */\n set timingReporter(value) {\n this._timingReporter = value;\n\n this._renderControllers.forEach((controller) => {\n controller.timingReporter = value;\n });\n }\n\n get timingReporter() {\n return this._timingReporter;\n }\n\n /**\n * Stream statistics\n */\n get streamStats() {\n const stats = this._streamStats.stats;\n\n stats.audioCodec = this._audioCodec;\n stats.videoCodec = this._videoCodec;\n stats.videoResolution = this._resolution;\n stats.isTranscoded = this._isTranscoded;\n\n return stats;\n }\n\n /**\n * Starts live video\n */\n startLive() {\n this._setMediaState(MediaState.Starting);\n this._live = true;\n this._currentDir = Direction.Forwards;\n this._iframeInterval = Duration.zero;\n\n this.log.debug('Starting live video');\n\n this._retriever.analyticTracksLiveEnabled = this._getAnalyticTracksEnabled();\n this._retriever.startLive();\n\n this._renderControllers.forEach((controller) => {\n controller.startLive();\n });\n\n if (this._metadataController) {\n this._metadataController.startLive();\n }\n }\n\n /**\n * Switches the controller to non-live mode without changing anything else about its current state\n */\n makeNonLive() {\n this._live = false;\n this._renderControllers.forEach((controller) => {\n controller.makeNonLive();\n });\n }\n\n /**\n * Prepares for an upcoming seek\n */\n prepareSeek() {\n this._renderControllers.forEach((controller) => {\n controller.prepareSeek();\n });\n }\n\n /**\n * Seeks to a particular time\n */\n seek(time, searchDir, strict) {\n if (this._seekPromiseSource.active) {\n this.log.debug('Cancelling existing seek');\n this._seekPromiseSource.fail(new CancellationError());\n }\n\n this.log.debug(() => `Starting from time ${time}, direction ${searchDir}, strict=${strict}`);\n\n this._live = false;\n\n if (this._mediaState !== MediaState.MediaPresent) {\n this._setMediaState(MediaState.Starting);\n }\n\n // If we're paused, always switch to forward, all frames mode so that we\n // seek to exactly the right place.\n let streamDir = searchDir;\n let iframes = false;\n\n if (this._renderClock) {\n streamDir = this._renderClock.paused ? Direction.Forwards : this._renderClock.direction;\n iframes = !this._renderClock.paused && this._shouldUseIframes();\n }\n\n this.log.debug(() => `Retrieving stream, streamDir=${streamDir}, iframes=${iframes}`);\n this._startRetrieving(time, searchDir, streamDir, iframes);\n\n this._seekData = {\n time,\n searchDir,\n streamDir,\n iframes,\n strict,\n trackRecords: [],\n videoRecords: [],\n audioRecords: [],\n };\n return this._seekPromiseSource.makePromise();\n }\n\n /**\n * Determines whether the specified timestamp is in a gap, and if so the time of the first video\n * after the gap.\n */\n getGapInfo(timestamp) {\n return this._masterController ? this._masterController.getGapInfo(timestamp) :\n {isInGap: false, nextVideoTime: null};\n }\n\n suspend() {\n this._renderControllers.forEach((controller) => {\n controller.suspend();\n });\n\n if (this._metadataController) {\n this._metadataController.suspend();\n }\n }\n\n resume() {\n this._renderControllers.forEach((controller) => {\n controller.resume();\n });\n\n if (this._metadataController) {\n this._metadataController.resume();\n }\n }\n\n _startRetrieving(time, searchDir, streamDir, iframes) {\n if (iframes || streamDir === Direction.Backwards) {\n const interval = this._calcIframeInterval();\n this._retriever.startIframes(time, streamDir, interval);\n this._currentDir = streamDir;\n this._iframeInterval = interval;\n } else {\n this._retriever.start(time, searchDir);\n this._currentDir = Direction.Forwards;\n this._iframeInterval = Duration.zero;\n }\n }\n\n _onSeekComplete(time) {\n const renderState = this._masterController.state;\n\n this.log.debug(`Seek complete, time=${time}, state=${renderState}`);\n\n let error = StreamError.NoError;\n let status;\n\n switch (renderState) {\n case RenderState.NoMedia:\n status = MediaState.NoMediaPresent;\n break;\n\n case RenderState.Rendering:\n status = MediaState.MediaPresent;\n break;\n\n default:\n status = MediaState.Error;\n error = StreamError.RenderError;\n }\n\n this._setMediaState(status, error);\n\n if (this._seekPromiseSource.active) {\n this._seekPromiseSource.complete(time);\n }\n }\n\n /**\n * Stops video\n */\n stop(tearDown) {\n this.log.debug(() => `Stopping video, tearDown = ${tearDown}`);\n\n if (tearDown) {\n this._retriever.reset();\n }\n\n this._renderControllers.forEach((controller) => {\n controller.stop(tearDown);\n });\n\n if (this.retriever) {\n this.retriever.removeEventListeners();\n }\n\n this._setMediaState(MediaState.Idle);\n }\n\n get renderTime() {\n return this._masterController ? this._masterController.currentTime : null;\n }\n\n onClockChanged() {\n const newDir = this._renderClock.direction;\n const iframes = this._shouldUseIframes();\n const newIframeInterval = iframes ? this._calcIframeInterval() : Duration.zero;\n\n this.log.debug(() => `onClockChanged: dir ${this._currentDir} -> ${newDir}, ` +\n `iframes ${this._iframeInterval} -> ${newIframeInterval}`);\n\n if (this._live) {\n this.log.debug('Ignoring clock change');\n return;\n }\n\n if (newDir !== this._currentDir || !newIframeInterval.equals(this._iframeInterval)) {\n const time = this._renderClock.currentTime;\n this.log.debug(`Clock changed, restarting retrieval from ${time} (${newDir}, ${iframes})`);\n this._startRetrieving(time, newDir, newDir, iframes);\n\n if (this._masterController) {\n this._masterController.seek(time, newDir, newDir, false, iframes)\n .then((time) => this._onSeekComplete(time))\n .catch((error) => {\n if (!(error instanceof CancellationError)) {\n this._onSeekComplete(null);\n }\n throw error;\n });\n }\n } else {\n this._renderControllers.forEach((controller) => {\n controller.onClockChanged();\n });\n }\n }\n\n hasDebugBlob(mediaType) {\n const controller = this._renderControllers.get(mediaType);\n return controller && controller.hasDebugBlob;\n }\n\n getDebugBlob(mediaType) {\n const controller = this._renderControllers.get(mediaType);\n return controller ? controller.getDebugBlob() : null;\n }\n\n _handleNewSection(isTranscoded) {\n this._newSection = true;\n this._isTranscoded = isTranscoded;\n this._trackTypes.clear();\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n _handleTrackInfo(trackId, trackInfo) {\n this._trackTypes.set(trackId, {mediaType: trackInfo.mediaType, codecType: trackInfo.codecType});\n this._mediaTypes.add(trackInfo.mediaType);\n\n if (this._seekData != null) {\n this._seekData.trackRecords.push({trackId, trackInfo});\n return;\n }\n\n const controller = this._renderControllers.get(trackInfo.mediaType);\n\n if (controller) {\n controller.handleTrackInfo(trackId, trackInfo);\n }\n\n if (trackInfo.mediaType === MediaType.Audio) {\n this._audioCodec = trackInfo.codecType;\n this._streamStats.setClockRate(trackInfo.rtpClockRate);\n }\n\n if (trackInfo.mediaType === MediaType.Video) {\n this._videoCodec = trackInfo.codecType;\n this._streamStats.setClockRate(trackInfo.rtpClockRate);\n }\n\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n _handleVideoInfo(trackId, videoInfo) {\n if (this._seekData != null) {\n this._seekData.videoRecords.push({trackId, videoInfo});\n return;\n }\n\n const controller = this._renderControllers.get(MediaType.Video);\n\n if (controller) {\n controller.handleVideoInfo(trackId, videoInfo);\n }\n\n this._resolution = {width: videoInfo.resWidth, height: videoInfo.resHeight};\n\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n _handleAudioInfo(trackId, audioInfo) {\n if (this._seekData != null) {\n this._seekData.audioRecords.push({trackId, audioInfo});\n return;\n }\n\n const controller = this._renderControllers.get(MediaType.Audio);\n\n if (controller) {\n controller.handleAudioInfo(trackId, audioInfo);\n }\n\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n _handleHeadersDone() {\n this._masterController = null;\n if (this._mediaTypes.has(MediaType.Video)) {\n this._masterController = this._renderControllers.get(MediaType.Video);\n } else if (this._mediaTypes.has(MediaType.Audio)) {\n this._masterController = this._renderControllers.get(MediaType.Audio);\n }\n\n if (this._seekPromiseSource.active && this._seekData != null) {\n if (!this._masterController) {\n this.log.warn('No master controller could be found!');\n this._seekPromiseSource.fail(new Error('No master controller could be found'));\n return;\n }\n\n this.log.debug('Starting render controller seek');\n\n const {time, searchDir, streamDir, iframes, strict, trackRecords, videoRecords, audioRecords} = this._seekData;\n this._seekData = null;\n\n this._masterController.seek(time, searchDir, streamDir, strict, iframes)\n .then((resultTime) => {\n this._onSeekComplete(resultTime);\n return resultTime;\n })\n .catch((error) => {\n if (!(error instanceof CancellationError)) {\n this._onSeekComplete(null);\n } else {\n this.log.debug(`Seek cancelled via CancellationError`);\n }\n });\n\n for (const {trackId, trackInfo} of trackRecords) {\n this._handleTrackInfo(trackId, trackInfo);\n }\n\n for (const {trackId, videoInfo} of videoRecords) {\n this._handleVideoInfo(trackId, videoInfo);\n }\n\n for (const {trackId, audioInfo} of audioRecords) {\n this._handleAudioInfo(trackId, audioInfo);\n }\n }\n }\n\n _handleSample(sample) {\n const trackType = this._trackTypes.get(sample.sampleInfo.trackId);\n\n if (!trackType) {\n return true;\n }\n\n const {mediaType, codecType} = trackType;\n\n if (mediaType === MediaType.Application) {\n return this._handleAnalyticsSample(sample, codecType);\n }\n\n const controller = this._getControllerForTrack(sample.sampleInfo.trackId);\n\n if (!controller) {\n return true;\n }\n\n if (this._newSection && this._isAVMediaType(controller.mediaType)) {\n this._newSection = false;\n // if video is not already being rendered, assume we're still in the process of starting up\n const isRendering = controller.state === RenderState.Rendering;\n this._setMediaState(isRendering ? MediaState.MediaPresent : MediaState.Starting);\n }\n\n const handled = controller.handleSample(sample);\n\n this.log.debug(() =>\n `Render controller ${handled ? 'handled' : 'did not handle'} ` +\n `sample ${sample.sampleInfo.trackId}/${sample.timestamp}`);\n\n if (handled && this._isAVMediaType(controller.mediaType)) {\n this._streamStats.update(sample);\n }\n if (!handled) {\n // Only let this throttle downstream if this is the master controller\n return controller !== this._masterController;\n }\n\n return true;\n }\n\n _handleAnalyticsSample(sample, codecType) {\n if (this._metadataController) {\n this._metadataController.handleSample(sample, codecType);\n }\n\n return true;\n }\n\n _handleNoMoreData() {\n if (this._seekPromiseSource.active && this._seekData) {\n this._handleSeekErrorBeforeRendererStarted(this._seekData.time);\n } else {\n this._renderControllers.forEach((controller) => {\n controller.handleNoMoreData();\n });\n }\n }\n\n _handleError(streamError) {\n if (this._seekPromiseSource.active && this._seekData) {\n this._handleSeekErrorBeforeRendererStarted(this._seekData.time);\n } else {\n this._renderControllers.forEach((controller) => {\n controller.handleError(streamError);\n });\n }\n\n this._setMediaState(MediaState.Error, streamError);\n }\n\n _handleSeekErrorBeforeRendererStarted(seekTime) {\n // We started retrieving for the seek but haven't started the renderer seek yet.\n // Tell the renderers to go straight into the \"seek failed\" state, and complete\n // the promise with a null time.\n this._renderControllers.forEach((controller) => {\n controller.seekFail();\n });\n this._seekPromiseSource.complete(seekTime);\n this._seekData = null;\n }\n\n _handleRenderStateChanged(newState) {\n // Ignore render state changes if we have a seek pending, but haven't told it to seek yet\n if (this._seekPromiseSource.active && this._seekData) {\n return;\n }\n\n this.log.debug(`Render state changed to ${newState}`);\n\n switch (newState) {\n case RenderState.Seeking:\n if (this._mediaState !== MediaState.MediaPresent) {\n this._setMediaState(MediaState.Starting);\n }\n break;\n case RenderState.Rendering:\n this._setMediaState(MediaState.MediaPresent);\n break;\n\n case RenderState.NoMedia:\n this._setMediaState(MediaState.NoMediaPresent);\n break;\n\n case RenderState.Error:\n this._setMediaState(MediaState.Error, StreamError.RenderError);\n break;\n }\n }\n\n _handleRenderUnblocked() {\n this._retriever.unblock();\n }\n\n _setMediaState(newState, error) {\n error = error ? error : StreamError.NoError;\n\n if (newState === this._mediaState && error === this._mediaError) {\n return;\n }\n\n this._mediaState = newState;\n this._mediaError = error;\n\n this.dispatchEvent(new BasicEvent(OscarEvents.StateChange));\n }\n\n _shouldUseIframes() {\n const speed = this._renderClock.speed;\n return speed < 0 || speed > MaxSmoothPlaybackSpeed;\n }\n\n _calcIframeInterval() {\n return new Duration(Math.abs(this._renderClock.speed) * TimeDefs.TimeUnitsPerSecond /\n DisplayedIframesPerSecond);\n }\n\n /** Notify Web Services that stream connection has completed */\n _handleRetrieverStateChange() {\n this.dispatchEvent(new BasicEvent(OscarEvents.StateChange));\n }\n\n _handleStreamStatChange() {\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StatChange));\n }\n\n _handleTransportStateChange() {\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n\n _getControllerForTrack(trackId) {\n const trackType = this._trackTypes.get(trackId);\n\n if (!trackType) {\n return null;\n }\n\n return this._renderControllers.get(trackType.mediaType);\n }\n\n _applyToAudioController(func) {\n this._renderControllers.forEach((controller, mediaType) => {\n if (mediaType === MediaType.Audio) {\n func(controller);\n }\n });\n }\n\n /** Returns whether or not analytic tracks should be requested */\n _getAnalyticTracksEnabled() {\n return this._showBoundingBoxes;\n }\n\n _handleAnalyticTracksLiveUpdate() {\n if (!this._live) {\n return;\n }\n\n // if playing live, restart live with new bounding box state\n this.log.debug('Restarting live video with new bounding box state: ' +\n `${this._showBoundingBoxes ? 'show' : 'hide'} bounding boxes`);\n\n this._retriever.analyticTracksLiveEnabled = this._getAnalyticTracksEnabled();\n this._retriever.startLive();\n }\n\n _isAVMediaType(mediaType) {\n return mediaType === MediaType.Audio || mediaType === MediaType.Video;\n }\n}\n","/* global Uint8Array */\n\n/**\n * Represents a single sample of encoded media data\n *\n * @class\n *\n * @param {SampleInfo} sampleInfo Sample information\n * @param {Uint8Array} data Optional sample data\n */\nexport default class MediaSample {\n constructor(sampleInfo, data) {\n this.sampleInfo = sampleInfo;\n\n if (data !== undefined) {\n if (data.constructor !== Uint8Array && data.constructor !== Int16Array) {\n throw new Error('Sample data must be a Uint8Array or Int16Array');\n }\n this.data = data;\n } else {\n this.data = null;\n }\n }\n\n get size() {\n return this.data ? this.data.byteLength : 0;\n }\n\n get timestamp() {\n return this.sampleInfo.timestamp;\n }\n\n toString() {\n const info = this.sampleInfo;\n let result = `${info.trackId}:${info.timestamp}`;\n\n if (info.isCleanPoint) {\n result += ' (CLEAN)';\n }\n\n if (info.isCatchUp) {\n result += ' (CATCHUP)';\n }\n\n return result;\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n/* global ArrayBuffer,Uint8Array */\n\nimport {Osp} from './ospformat';\nimport MediaSample from '../media/mediasample';\nimport {StreamError, StreamTransportType} from '../defs';\nimport {BinReader, Logger} from '@oecommon/plasma-js';\n// eslint-disable-next-line no-unused-vars\nimport {AudioInfo, TrackInfo} from '../media/trackinfo'; // Used for jsdoc @param\n\nlet instanceNum = 0;\n\nconst ReadState = {\n OspHeader: 0,\n ObjectHeader: 1,\n ObjectHeaderExtra: 2,\n ObjectData: 3,\n};\n\n/**\n * Implements the OSP protocol over a stream transport\n */\nexport default class OspConnection {\n /**\n * Constructor\n *\n * @param streamTransport Open {StreamTransport}\n * @param callback Callback to be called when the connection attempt is\n * complete\n */\n constructor(streamTransport, callback) {\n this.log = new Logger('ospconn', ++instanceNum);\n\n this._streamTransport = streamTransport;\n this._connectCallback = callback;\n\n this._initReadState();\n\n const noop = () => {};\n\n this.onControl = noop;\n this.onSectionHeader = noop;\n this.onTrackHeader = noop;\n this.onVideoInfoHeader = noop;\n this.onAudioInfoHeader = noop;\n this.onSample = noop;\n this.onDisconnect = noop;\n this.onError = noop;\n\n this._streamTransport.onclose = this.onSocketClosed.bind(this);\n this._streamTransport.onerror = this.wrapHandler(this._streamTransport.onerror, this.onSocketError.bind(this));\n this._streamTransport.onmessage = this.onSocketMessage.bind(this);\n this._streamTransport.onopen = this.onSocketOpen.bind(this);\n }\n\n _initReadState() {\n this._readState = ReadState.OspHeader;\n this._waitingSize = Osp.OspHeaderSize;\n this._tempStorage = null;\n this._tempBuffer = null;\n this._tempSize = 0;\n\n this._objectType = 0;\n this._objectSize = 0;\n this._curSample = null;\n this._curSampleSize = 0;\n }\n\n wrapHandler(callback, handler) {\n if (!callback) {\n return handler;\n }\n return function wrappedHandler(...args) {\n callback(...args);\n handler(...args);\n };\n }\n\n /**\n * Closes the stream transport\n */\n close() {\n if (this._streamTransport) {\n this._streamTransport.onclose = null;\n this._streamTransport.onerror = null;\n this._streamTransport.onmessage = null;\n this._streamTransport.onopen = null;\n this._streamTransport.close();\n this._streamTransport = null;\n }\n\n this._initReadState();\n }\n\n /**\n * Sends a control message\n *\n * @param {OspControlMessage} message Control message object\n */\n sendControl(message) {\n this._streamTransport.send(Osp.formatControlMessage(message));\n }\n\n /**\n * Sends a track header\n *\n * @param {Object} trackHeader The wrapper object for the `TrackInfo`\n * @param {number} trackHeader.trackId The track id of the related `MediaSample` to be sent\n * @param {TrackInfo} trackHeader.trackInfo The `TrackInfo` of the related `MediaSample` to be sent\n */\n sendTrackHeader(trackHeader) {\n this._streamTransport.send(Osp.formatTrackHeader(trackHeader));\n }\n\n /**\n * Sends an audio header\n *\n * @param {Object} audioHeader The wrapper object for the `AudioInfo`\n * @param {number} audioHeader.trackId The track id of the related `MediaSample` to be sent\n * @param {AudioInfo} audioHeader.audioInfo The `AudioInfo` of the related `MediaSample` to be sent\n */\n sendAudioHeader(audioHeader) {\n this._streamTransport.send(Osp.formatAudioHeader(audioHeader));\n }\n\n /**\n * Sends a sample\n *\n * @param {MediaSample} sample The sample to be sent\n * @param {boolean} littleEndian Whether the `MediaSample`'s `data` should be sent in little endian\n */\n sendSample(sample, littleEndian) {\n this._streamTransport.send(Osp.formatSample(sample, littleEndian));\n }\n\n /**\n * Sends a sample ack\n *\n * @param {OspControlMessage} sampleNum Sample number to acknowledge\n */\n sendSampleAck(sampleNum, cookie) {\n this._streamTransport.send(Osp.formatSampleAck(sampleNum, cookie));\n }\n\n /**\n * Called when the socket has finished opening\n *\n * @private\n */\n onSocketOpen(event) {\n this.log.debug(`${this._streamTransportLabel()} opened`);\n if (this._connectCallback) {\n this.log.debug('Calling back to complete connection');\n this._connectCallback(this);\n this._connectCallback = null;\n }\n }\n\n /**\n * Called when there is a socket error\n *\n * @private\n */\n onSocketError(event) {\n this.log.notice(`Got ${this._streamTransportLabel()} error, closing`);\n\n this._streamTransport.close();\n\n if (this._connectCallback) {\n this._connectCallback(null);\n this._connectCallback = null;\n }\n\n this.onDisconnect();\n }\n\n /**\n * Called when the socket has been closed\n *\n * @private\n */\n onSocketClosed(event) {\n this.log.debug(`${this._streamTransportLabel()} closed`);\n\n this.onDisconnect();\n }\n\n /**\n * Called when a message is received on the socket\n *\n * @private\n */\n onSocketMessage(event) {\n if (!(event.data instanceof ArrayBuffer)) {\n this.log.notice('Data not ArrayBuffer');\n this._handleError(StreamError.ProtocolError);\n return;\n }\n\n const messageLen = event.data.byteLength;\n let offset = 0;\n\n while (this._streamTransport && offset < messageLen) {\n // Create a view of the data to be processed during this iteration\n const chunkSize = Math.min(this._waitingSize - this._tempSize, messageLen - offset);\n const chunk = new Uint8Array(event.data, offset, chunkSize);\n offset += chunkSize;\n\n if (chunkSize <= 0) {\n this.log.error(`OSP parsing failed! waiting=${this._waitingSize}, temp=${this._tempSize}, ` +\n `len=${messageLen}, offset=${offset}`);\n this._handleError(StreamError.ProtocolError);\n return;\n }\n\n // If the object was fragmented, we need to create a temporary buffer to hold the data until\n // the rest is received\n if (chunkSize < this._waitingSize && !this._tempBuffer) {\n this.log.spam(`Fragmented chunk received; waiting for ${this._waitingSize}, got ${chunkSize}`);\n if (!this._tempStorage || this._tempStorage.byteLength < this._waitingSize) {\n this._tempStorage = new ArrayBuffer(this._waitingSize);\n }\n this._tempBuffer = new Uint8Array(this._tempStorage, 0, this._waitingSize);\n this._tempSize = 0;\n }\n\n // If we have a temp buffer, append this chunk to it and handle if complete\n if (this._tempBuffer) {\n this._tempBuffer.set(chunk, this._tempSize);\n this._tempSize += chunkSize;\n if (this._tempSize === this._waitingSize) {\n this.log.spam(`Fragmented chunk complete; size is ${this._tempSize}`);\n this._handleOspChunk(this._tempBuffer);\n this._tempBuffer = null;\n this._tempSize = 0;\n }\n continue;\n }\n\n this._handleOspChunk(chunk);\n }\n }\n\n /**\n * Handle an OSP chunk, which is guaranteed to be a complete OSP header, object header, object\n * remainder or object data\n */\n _handleOspChunk(chunk) {\n switch (this._readState) {\n case ReadState.OspHeader:\n this._handleOspHeader(chunk);\n break;\n\n case ReadState.ObjectHeader:\n this._handleObjectHeader(chunk);\n break;\n\n case ReadState.ObjectHeaderExtra:\n this._handleObjectHeaderExtra(chunk);\n break;\n\n case ReadState.ObjectData:\n this._handleSampleData(chunk);\n break;\n }\n }\n\n /**\n * Handles an OSP header (type and size)\n */\n _handleOspHeader(chunk) {\n const reader = new BinReader(chunk);\n\n this._objectType = reader.readUint32();\n this._objectSize = reader.readUint32();\n\n this.log.spam(`OSP header; type ${this._objectType}, size ${this._objectSize}`);\n\n if (this._objectSize > Osp.MaxObjectSize) {\n this.log.notice(() => `Invalid message size: ${this._objectSize}`);\n this._handleError(StreamError.ProtocolError);\n return;\n }\n\n if (this._objectType === Osp.MediaSampleTag) {\n this._waitingSize = Osp.BaseSampleHeaderSize - Osp.OspHeaderSize;\n } else {\n this._waitingSize = this._objectSize - Osp.OspHeaderSize;\n }\n\n this._readState = ReadState.ObjectHeader;\n }\n\n /**\n * Handles an object header\n */\n _handleObjectHeader(chunk) {\n const reader = new BinReader(chunk);\n\n this.log.spam(`Got header of size ${chunk.byteLength}`);\n\n // Sample headers need special treatment because they are followed by sample data\n if (this._objectType === Osp.MediaSampleTag) {\n this._handleSampleHeader(reader);\n return;\n }\n\n switch (this._objectType) {\n case Osp.ControlMessageTag:\n this._handleObject(reader, this._objectSize, Osp.parseControlMessage,\n this.onControl);\n break;\n\n case Osp.SectionHeaderTag:\n this._handleObject(reader, this._objectSize, Osp.parseSectionHeader,\n this.onSectionHeader);\n break;\n\n case Osp.TrackHeaderTag:\n this._handleObject(reader, this._objectSize, Osp.parseTrackHeader,\n this.onTrackHeader);\n break;\n\n case Osp.VideoHeaderTag:\n this._handleObject(reader, this._objectSize, Osp.parseVideoInfoHeader,\n this.onVideoInfoHeader);\n break;\n\n case Osp.AudioHeaderTag:\n this._handleObject(reader, this._objectSize, Osp.parseAudioInfoHeader,\n this.onAudioInfoHeader);\n break;\n }\n\n this.log.spam(`Finished object of size ${chunk.byteLength}, waiting for next`);\n\n this._readState = ReadState.OspHeader;\n this._waitingSize = Osp.OspHeaderSize;\n }\n\n /**\n * Handles miscellaneous OSP objects\n *\n * @private\n *\n * @param {BinReader} reader BinReader that covers the object header\n * @param {number} objectSize Size of the object\n * @param {function} parseFn Function used to parse this type of object\n * @param {function} handleFn Callback function to handle the object\n */\n _handleObject(reader, objectSize, parseFn, handleFn) {\n const message = parseFn(reader, objectSize);\n\n if (!message || reader._position !== objectSize - Osp.OspHeaderSize) {\n this.log.notice(() => `Invalid message (${!message},${reader._position !== objectSize})`);\n this._handleError(StreamError.ProtocolError);\n return;\n }\n\n handleFn(message);\n }\n\n /**\n * Handles a sample header\n */\n _handleSampleHeader(reader) {\n const sampleHeader = Osp.parseSampleHeader(reader);\n this._curSample = new MediaSample(sampleHeader.sampleInfo);\n this._curSampleSize = this._objectSize - sampleHeader.dataOffset;\n\n const remainingHeader = sampleHeader.dataOffset - (reader.position + Osp.OspHeaderSize);\n\n this.log.spam(`Got sample header, sample size is ${this._curSampleSize}, ` +\n `extra header is ${remainingHeader}`);\n\n if (remainingHeader) {\n this._readState = ReadState.ObjectHeaderExtra;\n this._waitingSize = remainingHeader;\n } else {\n this._readState = ReadState.ObjectData;\n this._waitingSize = this._curSampleSize;\n }\n }\n\n /**\n * Handles (and ignores) a chunk representing a part of an object header beyond the base size\n */\n _handleObjectHeaderExtra(chunk) {\n this._readState = ReadState.ObjectData;\n this._waitingSize = this._curSampleSize;\n\n this.log.spam(`Got remaining header, waiting for sample data (${this._waitingSize})`);\n }\n\n /**\n * Handles a chunk containing sample data\n */\n _handleSampleData(chunk) {\n this._curSample.data = chunk;\n this.onSample(this._curSample);\n\n this.log.spam(`Got ${chunk.byteLength} of sample data, waiting for next object`);\n\n this._curSample = 0;\n this._curSampleSize = 0;\n this._readState = ReadState.OspHeader;\n this._waitingSize = Osp.OspHeaderSize;\n }\n\n /**\n * Called internally to close the stream transport\n *\n * @private\n */\n _disconnect() {\n this.close();\n this.onDisconnect();\n }\n\n /**\n * Called to handle a detected error\n *\n * @param {StreamError} code Error code\n */\n _handleError(code) {\n this.onError(code);\n this._disconnect();\n }\n\n _streamTransportLabel() {\n const type = this._streamTransport ? this._streamTransport.transportType : StreamTransportType.None;\n return `Stream transport (${type})`;\n }\n}\n","import OspConnection from './ospconnection';\nimport {Priority} from '../defs';\nimport {Logger, PromiseSource, CancellationError} from '@oecommon/plasma-js';\nimport {StreamTransportState, StreamTransportType} from '../defs';\n\nlet instanceNum = 0;\n\n/**\n * Connect client that uses a StreamTransport to form an OSP connection\n *\n * @implements {OspConnectClient}\n */\nexport default class OspConnectClient {\n /**\n * @param {NvrManager} nvrManager The NvrManager to obtain NVR connections from\n * @param {object} nvrInfo Application-supplied NVR information\n * @param {string} urlPath The path component of the WebSocket URL\n */\n constructor(nvrManager, nvrInfo, streamTransportFactory, urlPath) {\n this.log = new Logger('ospconnclient', ++instanceNum);\n this._nvrManager = nvrManager;\n this._nvrInfo = nvrInfo;\n this._streamTransportFactory = streamTransportFactory;\n this._streamTransport = null;\n this._urlPath = urlPath;\n this._ospConnection = null;\n this._transportType = StreamTransportType.None;\n this._transportState = StreamTransportState.Idle;\n this._promiseSource = new PromiseSource();\n this.onTransportStateChange = null;\n\n this._onConnectDone = this._onConnectDone.bind(this);\n }\n\n get transportType() {\n return this._transportType;\n }\n\n get transportState() {\n return this._transportState;\n }\n\n get transportInfo() {\n return this._streamTransport;\n }\n\n /**\n * Asynchronously connects to the target URL\n */\n connect(forcews) {\n this.cancelConnect();\n\n this.log.debug(() => `Attempting connection for ${JSON.stringify(this._nvrInfo)}`);\n this._nvrManager.getConnection(this._nvrInfo, Priority.Highest)\n .then((nvrConnection) => {\n if (this._promiseSource.active) {\n this.log.debug(() => `Creating stream transport for ${JSON.stringify(this._nvrInfo)}`);\n\n forcews = forcews || !nvrConnection.allowWebRTC();\n\n this._streamTransport = this._streamTransportFactory.create(nvrConnection, this._urlPath, forcews);\n this._transportType = this._streamTransport.transportType;\n this._streamTransport.onTransportStateChange = this._handleTransportStateChange.bind(this);\n return this._streamTransport.start()\n .then(() => {\n this.log.debug(() => `Stream transport started for ${JSON.stringify(this._nvrInfo)}`);\n });\n }\n })\n .catch((error) => {\n if (this._promiseSource.active) {\n this._promiseSource.fail(new Error('Connect failed'));\n }\n });\n\n return this._promiseSource.makePromise();\n }\n\n /**\n * Cancels any pending connection\n */\n cancelConnect() {\n if (this._ospConnection) {\n this._ospConnection.close();\n this._ospConnection = null;\n }\n\n if (this._promiseSource.active) {\n this._promiseSource.fail(new CancellationError());\n }\n }\n\n /**\n * Called when the connection has succeeded or failed\n */\n _onConnectDone(connection) {\n if (!this._promiseSource.active) {\n this.log.debug(() => `Connection already complete for ${JSON.stringify(this._nvrInfo)}`);\n return;\n }\n\n if (connection) {\n this.log.debug(() => `Connection completed for ${JSON.stringify(this._nvrInfo)}`);\n this._promiseSource.complete(connection);\n } else {\n this.log.debug(() => `Connection failed for ${JSON.stringify(this._nvrInfo)}`);\n this._promiseSource.fail(new Error('Connect failed'));\n }\n }\n\n /**\n * Called when the stream transport's state has changed\n */\n _handleTransportStateChange() {\n const typeChanged = this._transportType !== this._streamTransport.transportType;\n const stateChanged = this._transportState !== this._streamTransport.transportState;\n if (!typeChanged && !stateChanged) {\n return;\n }\n\n if (typeChanged) {\n this.log.debug(`Transport type changing from ${this._transportType} to ${this._streamTransport.transportType}`);\n }\n this._transportType = this._streamTransport.transportType;\n\n if (stateChanged) {\n this.log.debug(\n `Transport state changing from ${this._transportState} to ${this._streamTransport.transportState}`);\n }\n this._transportState = this._streamTransport.transportState;\n\n if (this._promiseSource.active) {\n if (this._transportState === StreamTransportState.Connected) {\n this._ospConnection = new OspConnection(this._streamTransport, this._onConnectDone);\n }\n\n if (this._transportState === StreamTransportState.Error) {\n if (this._ospConnection) {\n this._ospConnection.close();\n this._ospConnection = null;\n }\n\n this._promiseSource.fail(new Error(`${this._transportType} ${this._transportState}`));\n }\n }\n\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n\nimport {Osp, OspControlMessage} from '../osp/ospformat';\nimport {StreamError, OscarEvents, OspConnectState, StreamTransportState, StreamTransportType,\n Direction} from '../defs';\nimport {Instant, Duration, Timer, Logger, CancellationError, EventTarget, BasicEvent} from '@oecommon/plasma-js';\n\nconst MaxInFlight = 32;\nconst DefaultAudioBitsPerSample = 16;\n\nconst KeepAliveInterval = Duration.seconds(10);\nconst InitialReconnectDelay = Duration.seconds(0); // ADC override to avoid retries (VID-33103)\nconst MaxReconnectDelay = Duration.minutes(1);\n\nconst AnalyticTracksAll = 'all';\nconst AnalyticTracksNone = 'none';\n\nlet instanceNum = 0;\n\n/**\n * Retrieves an OSP stream from a server and passes it to a handler\n *\n * @implements {OspHandler}\n */\nexport default class OspStreamRetriever extends EventTarget {\n /**\n * Constructor\n *\n * @param reactor Reactor used to schedule asynchronous tasks\n * @param connectClient Connect client to make an abstract connection\n * @param cameraId Camera ID of the stream\n * @param streamName Stream name, or comma-separated list\n * @param maxResolution Maximum resolution that we can accept\n * @param softMaxRes If true, the maximum resolution is treated as a preference,\n * not a hard limit\n */\n constructor(reactor, connectClient, cameraId, streamName, maxResolution, softMaxRes, analyticsSupported) {\n super();\n this.log = new Logger('ospretriever', ++instanceNum);\n\n this._reactor = reactor;\n this._connectClient = connectClient;\n this._cameraId = cameraId;\n this._streamName = streamName;\n this._maxResolution = maxResolution;\n this._softMaxRes = softMaxRes;\n this._connectState = OspConnectState.NotConnected;\n this._connection = null;\n this._requestCookie = 0;\n this._incomingCookie = 0;\n this._cmdSequence = 0;\n this._samplesHandled = 0;\n this._streamQueue = [];\n this._tokenRequester = null;\n this._authToken = null;\n this._keepAliveTimer = new Timer(reactor);\n this._reconnectTimer = new Timer(reactor);\n this._resumeState = null;\n this._reconnectInterval = InitialReconnectDelay;\n this._analyticTracksLiveEnabled = false;\n this._analyticTracksSearchEnabled = analyticsSupported;\n\n this._connectClient.onTransportStateChange = this._handleTransportStateChange.bind(this);\n\n this.resetCallbacks();\n }\n\n resetCallbacks() {\n const noop = () => { };\n\n this.onNewSection = noop;\n this.onTrackInfo = noop;\n this.onVideoInfo = noop;\n this.onAudioInfo = noop;\n this.onHeadersDone = noop;\n this.onSample = noop;\n this.onNoMoreData = noop;\n this.onError = noop;\n this.onLiveStatus = noop;\n this.onTransportStateChange = noop;\n }\n\n /**\n * The token requester\n */\n set tokenRequester(value) {\n this._tokenRequester = value;\n }\n\n get tokenRequester() {\n return this._tokenRequester;\n }\n\n get transportState() {\n if (!this._connectClient) {\n return StreamTransportState.Idle;\n }\n return this._connectClient.transportState;\n }\n\n get transportType() {\n if (!this._connectClient) {\n return StreamTransportType.None;\n }\n return this._connectClient.transportType;\n }\n\n get transportInfo() {\n return this._connectClient.transportInfo;\n }\n\n get analyticTracksLiveEnabled() {\n return this._analyticTracksLiveEnabled;\n }\n\n set analyticTracksLiveEnabled(value) {\n this._analyticTracksLiveEnabled = value;\n }\n\n /**\n * Starts playing a live stream\n */\n startLive() {\n this.log.debug('startLive()');\n ++this._requestCookie;\n this.connReadyFn = this._continueStartLive;\n this._tryStartConnect();\n this._tryStartGetToken();\n\n this._resumeState = {live: true};\n }\n\n /**\n * Starts playing a recorded stream\n *\n * @param time {Instant} Playback start time\n * @param dir {Direction} Playback direction\n */\n start(time, dir) {\n if (!time) {\n throw new Error('OspStreamRetriever.start() called with no time');\n }\n\n this.log.debug(() => `start(${time.toString()}, ${dir})`);\n ++this._requestCookie;\n this.connReadyFn = (error) => this._continueStartSearch(error, time, dir, false, Duration.zero);\n this._tryStartConnect();\n this._tryStartGetToken();\n\n this._resumeState = {\n live: false,\n time: time,\n direction: dir,\n iframeInterval: null,\n };\n }\n\n /**\n * Starts playing a recorded stream in I-frame mode\n *\n * @param time {Instant} Playback start time\n * @param dir {Direction} Playback direction\n * @param interval {Duration} I-frame interval\n */\n startIframes(time, dir, interval) {\n if (!time) {\n throw new Error('OspStreamRetriever.startIframes() called with no time');\n }\n\n this.log.debug(() => 'startIframes(' + time.toString() + ', ' + dir + ', ' + interval + ')');\n ++this._requestCookie;\n this.connReadyFn = (error) => this._continueStartSearch(error, time, dir, true, interval);\n this._tryStartConnect();\n this._tryStartGetToken();\n\n this._resumeState = {\n live: false,\n time: time,\n direction: dir,\n iframeInterval: interval,\n };\n }\n\n /**\n * Resets the retriever\n */\n reset() {\n this.log.debug('reset');\n\n this._connectClient.cancelConnect();\n\n if (this._connection) {\n this._connection.close();\n this._connection = null;\n }\n\n this._connectState = OspConnectState.NotConnected;\n\n this._keepAliveTimer.kill();\n this._reconnectTimer.kill();\n\n this.resetStreamState();\n\n this.removeEventListeners();\n }\n\n /**\n * Called by the handler to unblock the receiver after its handleSample\n * method returned false.\n */\n unblock() {\n this._reactor.schedule(this._processStreamQueue.bind(this));\n }\n\n _handleTransportStateChange() {\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n\n /**\n * Starts connecting if necessary\n *\n * @private\n */\n _tryStartConnect() {\n this._reconnectTimer.kill();\n\n if (this._connectState === OspConnectState.NotConnected) {\n this.log.debug('Connecting...');\n\n this._connectClient.connect()\n .then((connection) => this._handleConnectComplete(connection, null))\n .catch((error) => this._handleConnectComplete(null, error));\n\n this._connectState = OspConnectState.Connecting;\n }\n }\n\n /**\n * Called when the connection is complete\n *\n * @private\n *\n * @param connection Connection object\n */\n _handleConnectComplete(connection, error) {\n if (connection) {\n this.log.debug('Connection completed successfully');\n\n this._connectState = OspConnectState.Connected;\n this._connection = connection;\n\n this._connection.onControl = this._handleControl.bind(this);\n this._connection.onSectionHeader = this._handleSectionHeader.bind(this);\n this._connection.onTrackHeader = this._handleTrackHeader.bind(this);\n this._connection.onVideoInfoHeader = this._handleVideoInfoHeader.bind(this);\n this._connection.onAudioInfoHeader = this._handleAudioInfoHeader.bind(this);\n this._connection.onSample = this._handleSample.bind(this);\n this._connection.onDisconnect = this._handleDisconnect.bind(this);\n this._connection.onError = this._handleError.bind(this);\n\n this._tryStartGetToken();\n\n this._keepAliveTimer.set(KeepAliveInterval, this._sendKeepAlive.bind(this));\n this._reconnectInterval = InitialReconnectDelay;\n } else if (!error || !(error instanceof CancellationError)) {\n this.log.notice('Connection failed');\n\n this._connectState = OspConnectState.NotConnected;\n\n this.connReadyFn(StreamError.ConnectFailed);\n } else {\n this.log.debug('Connection cancelled');\n }\n\n // When the connection is complete, notify the stream controller\n this.dispatchEvent(new BasicEvent(OscarEvents.StateChange));\n }\n\n /**\n * Starts to get a token\n */\n _tryStartGetToken() {\n if (this._connectState !== OspConnectState.Connected) {\n // Will be called again when we are connected\n return;\n }\n\n if (this._tokenRequester) {\n this.log.debug('Requesting stream token');\n\n this._tokenRequester.requestStreamToken()\n .then((t) => this._handleGetTokenDone(t))\n .catch((e) => this._handleGetTokenFailed(e));\n } else {\n this.connReadyFn(StreamError.NoError);\n }\n }\n\n _handleGetTokenDone(tokenInfo) {\n if (!this._connection) {\n return;\n }\n\n this._authToken = tokenInfo.token;\n this.connReadyFn(StreamError.NoError);\n }\n\n _handleGetTokenFailed(error) {\n this.log.notice(() => `Failed to get stream token: ${error}`);\n this.connReadyFn(StreamError.NotAuthorized);\n }\n\n /**\n * Continuation function for starting a live stream\n *\n * @private\n */\n _continueStartLive(error) {\n if (error !== StreamError.NoError) {\n this._handleError(error);\n this._scheduleReconnect();\n return;\n }\n\n const message = new OspControlMessage(Osp.Cmd.StartStream,\n Osp.MsgType.Command, ++this._cmdSequence);\n\n const analyticTracks = this._analyticTracksLiveEnabled ? AnalyticTracksAll : AnalyticTracksNone;\n\n message.args = {\n cameraId: this._cameraId,\n streamName: this._streamName,\n startTime: 'now',\n maxinflight: MaxInFlight,\n cookie: this._requestCookie,\n noSquashCatchup: 1,\n analyticTracks,\n };\n\n this._setMaxResolution(message);\n\n this.log.debug(() => 'Sending StartStream: ' + JSON.stringify(message.args));\n\n if (this._authToken) {\n message.args.authToken = this._authToken;\n }\n\n this._connection.sendControl(message);\n\n // Discard any queued samples\n this._streamQueue = [];\n this._samplesHandled = 0;\n }\n\n /**\n * Continuation function for starting a search stream\n *\n * @private\n */\n _continueStartSearch(error, time, dir, iframes, iframeInterval) {\n if (error !== StreamError.NoError) {\n this._handleError(error);\n this._scheduleReconnect();\n return;\n }\n\n const message = new OspControlMessage(Osp.Cmd.StartStream,\n Osp.MsgType.Command, ++this._cmdSequence);\n\n // Do not request analytics when playing in reverse: PMs have specifically requested that we\n // do not show bounding boxes when playing backwards.\n const analyticTracks = dir === Direction.Backwards\n ? AnalyticTracksNone\n : (this._analyticTracksSearchEnabled ? AnalyticTracksAll : AnalyticTracksNone);\n\n message.args = {\n cameraId: this._cameraId,\n streamName: this._streamName,\n startTime: time.value,\n dir: dir,\n maxinflight: MaxInFlight,\n cookie: this._requestCookie,\n analyticTracks,\n };\n\n if (iframes && iframeInterval) {\n message.args.iframe = 1;\n message.args.interval = iframeInterval.totalSeconds;\n }\n\n this._setMaxResolution(message);\n\n this.log.debug(() => 'Sending StartStream: ' + JSON.stringify(message.args));\n\n if (this._authToken) {\n message.args.authToken = this._authToken;\n }\n\n this._connection.sendControl(message);\n\n // Discard any queued samples\n this._streamQueue = [];\n this._samplesHandled = 0;\n }\n\n /**\n * Called to handle a control message\n *\n * @param {OspControlMessage} message Control message\n */\n _handleControl(message) {\n switch (message.type) {\n case Osp.MsgType.Response:\n // We're only ever interested in the response to the last command sent\n if (message.sequence !== this._cmdSequence) {\n return;\n }\n\n if (message.commandId === Osp.Cmd.StartStream) {\n this._handleStartStreamResponse(message);\n }\n\n break;\n\n case Osp.MsgType.Notification:\n switch (message.commandId) {\n case Osp.Notify.LiveStatus:\n this._handleLiveStatus(message);\n break;\n\n case Osp.Notify.NoMoreData:\n this._handleNoMoreData(message);\n break;\n }\n }\n }\n\n /**\n * Called to handle a section header\n *\n * @param {OspSectionHeader} header Header object\n */\n _handleSectionHeader(header) {\n if (header.cookie !== this._requestCookie) {\n this.log.debug(() => 'Section header, cookies did not match. ' +\n `header.cookie=${header.cookie}, _requestCookie=${this._requestCookie}`);\n // This is from an old stream, ignore\n return;\n }\n\n this.log.debug(() => `Got section header, cookie=${header.cookie}`);\n\n this._incomingCookie = header.cookie;\n this._enqueueCall(() => this.onNewSection(header.isTranscoded));\n this._receivingHeaders = true;\n }\n\n /**\n * Called to handle a track header\n *\n * @param {TrackHeader} header Header object\n */\n _handleTrackHeader(header) {\n if (this._incomingCookie !== this._requestCookie) {\n // This is from an old stream, ignore\n return;\n }\n\n this.log.debug(() => `Got track info for track ${header.trackId}`);\n\n this._enqueueCall(() => this.onTrackInfo(header.trackId, header.trackInfo));\n }\n\n /**\n * Called to handle a video info header\n *\n * @param {VideoInfoHeader} header Header object\n */\n _handleVideoInfoHeader(header) {\n if (this._incomingCookie !== this._requestCookie) {\n // This is from an old stream, ignore\n return;\n }\n\n this._enqueueCall(() => this.onVideoInfo(header.trackId, header.videoInfo));\n }\n\n /**\n * Called to handle a audio info header\n *\n * @param {AudioInfoHeader} header Header object\n */\n _handleAudioInfoHeader(header) {\n if (this._incomingCookie !== this._requestCookie) {\n // This is from an old stream, ignore\n return;\n }\n\n // Early versions of the cloud camera incorrectly set bitsPerSample to 0 for AAC audio\n const audioInfo = {\n ...header.audioInfo,\n bitsPerSample: header.audioInfo.bitsPerSample || DefaultAudioBitsPerSample,\n };\n\n this._enqueueCall(() => this.onAudioInfo(header.trackId, audioInfo));\n }\n\n /**\n * Called to handle a media sample\n *\n * @param {MediaSample} sample Media sample\n *\n * @returns {boolean} true if the sample was handled; if false the sender\n * must stop calling this until it is unblocked\n */\n _handleSample(sample) {\n if (this._incomingCookie !== this._requestCookie) {\n // This is from an old stream, ignore\n return true;\n }\n\n this.log.spam(() => `Received sample ${sample}`);\n\n if (this._receivingHeaders) {\n this._receivingHeaders = false;\n this._enqueueCall(() => this.onHeadersDone());\n }\n\n this._enqueueSample(sample);\n\n return true;\n }\n\n /**\n * Handles a start stream response\n *\n * @private\n */\n _handleStartStreamResponse(message) {\n this.log.debug(() => `Got StartStream response: ${JSON.stringify(message)}`);\n if (message.status !== Osp.Status.Ok) {\n this.log.notice(() => `StartStream failed, status is ${message.status}`);\n\n this.resetStreamState();\n\n switch (message.status) {\n case Osp.Status.NotFound:\n this.onNoMoreData();\n break;\n\n case Osp.Status.NotAuthorized:\n this.onError(StreamError.NotAuthorized);\n break;\n\n case Osp.Status.MaxStreams:\n this.onError(StreamError.StreamLimitReached);\n break;\n\n default:\n this.onError(StreamError.SenderError);\n break;\n }\n\n this._scheduleReconnect();\n return;\n }\n\n this.log.debug(() => `StartStream succeeded: ${JSON.stringify(message.args)}`);\n\n this._samplesHandled = 0;\n }\n\n /**\n * Handles a live status notification\n *\n * @private\n */\n _handleLiveStatus(message) {\n const isLive = message.getNumArgument('isLive', 0) !== 0;\n const liveTime = message.getNumArgument('liveTime', 0) !== 0;\n\n this.onLiveStatus(isLive, new Instant(liveTime));\n }\n\n /**\n * Handles a \"no more data\" notification\n *\n * @private\n */\n _handleNoMoreData(message) {\n if (this._incomingCookie && message.getNumArgument('cookie', 0) !== this._incomingCookie) {\n // Ignore - this is not for the currently requested stream\n return;\n }\n\n this.resetStreamState();\n\n const error = message.getNumArgument('error', 0);\n\n this.log.notice(() => 'No more data, error is ' + (error || 'none'));\n\n if (!error) {\n this.onNoMoreData();\n } else {\n this.onError(StreamError.SenderError);\n }\n\n if (this._resumeState && this._resumeState.live) {\n this._scheduleReconnect();\n }\n }\n\n /**\n * Called when the connection is unexpectedly closed\n *\n * @private\n */\n _handleDisconnect() {\n this.log.notice('Connection lost');\n\n this._connection = null;\n this._connectState = OspConnectState.NotConnected;\n\n this._keepAliveTimer.kill();\n\n this.resetStreamState();\n this.onError(StreamError.ConnectionLost);\n\n if (this._resumeState && this._resumeState.live) {\n this._scheduleReconnect();\n }\n }\n\n /**\n * Called when there is a connection error\n *\n * @private\n *\n * @param {StreamError} code Error code\n */\n _handleError(code) {\n this.log.notice(() => `Connection error ${code}`);\n\n this.resetStreamState();\n this.onError(code);\n }\n\n _scheduleReconnect() {\n // Avoid retries for ADC (VID-33103)\n if (this._reconnectInterval.equals(Duration.seconds(0))) {\n return;\n }\n\n this.log.debug(`Scheduling reconnect attempt for ${this._reconnectInterval.totalSeconds} seconds from now`);\n this._reconnectTimer.set(this._reconnectInterval, this._attemptReconnect.bind(this));\n\n this._reconnectInterval = this._reconnectInterval.times(2);\n if (this._reconnectInterval.gt(MaxReconnectDelay)) {\n this._reconnectInterval = MaxReconnectDelay;\n }\n }\n\n /**\n * Enqueues an item and processes it if possible\n *\n * @private\n *\n * @param {object} item Item to enqueue\n */\n _enqueue(item) {\n // TODO: Add defensive code to prevent queue from getting too big\n this._streamQueue.push(item);\n this._processStreamQueue();\n }\n\n _enqueueSample(sample) {\n this._enqueue({sample});\n }\n\n _enqueueCall(call) {\n this._enqueue({call});\n }\n\n /**\n * Attempts to process samples in the sample queue\n *\n * @private\n */\n _processStreamQueue() {\n if (!this._streamQueue.length) {\n return;\n }\n\n let sendAck = false;\n\n while (this._streamQueue.length && this._processItem(this._streamQueue[0])) {\n const item = this._streamQueue[0];\n\n if (!item) {\n this.log.debug('The stream queue was emptied while processing the sample.');\n break;\n }\n\n if (item.sample) {\n sendAck = true;\n ++this._samplesHandled;\n }\n\n this._streamQueue.shift();\n }\n\n if (sendAck) {\n this._connection.sendSampleAck(this._samplesHandled, this._incomingCookie);\n }\n }\n\n _processItem(item) {\n if (item.sample) {\n return this.onSample(item.sample);\n } else if (item.call) {\n item.call();\n }\n\n return true;\n }\n\n /**\n * Resets the streaming state without closing the connection\n *\n * @private\n */\n resetStreamState() {\n this._requestCookie = 0;\n this._incomingCookie = 0;\n this._cmdSequence = 0;\n this._samplesHandled = 0;\n this._streamQueue = [];\n }\n\n _attemptReconnect() {\n if (!this._resumeState) {\n return;\n }\n\n this.log.debug('Attempting reconnect');\n\n const {live, time, direction, iframeInterval} = this._resumeState;\n\n if (live) {\n this.log.debug('Trying to restart live stream');\n this.startLive();\n } else if (iframeInterval) {\n this.log.debug(() => `Trying to restart I-frame stream (${time}, ${direction}, ${iframeInterval})`);\n this.startIframes(time, direction, iframeInterval);\n } else {\n this.log.debug(() => `Trying to restart search stream (${time}, ${direction})`);\n this.start(time, direction);\n }\n }\n\n _sendKeepAlive() {\n if (!this._connection) {\n return;\n }\n\n this.log.debug('Sending keepalive');\n\n const message = new OspControlMessage(Osp.Cmd.Ping, Osp.MsgType.Command, ++this._cmdSequence);\n this._connection.sendControl(message);\n\n this._keepAliveTimer.set(KeepAliveInterval, this._sendKeepAlive.bind(this));\n }\n\n _setMaxResolution(message) {\n if (this._maxResolution) {\n message.args.maxWidth = this._maxResolution.width;\n message.args.maxHeight = this._maxResolution.height;\n message.args.softMaxRes = this._softMaxRes ? 1 : 0;\n }\n }\n}\n\nexport {OspConnectState};\n","import {Osp, OspControlMessage} from '../osp/ospformat';\nimport {StreamError, OscarEvents, OspConnectState} from '../defs';\nimport {Duration, Timer, Logger, CancellationError, EventTarget, BasicEvent} from '@oecommon/plasma-js';\n// eslint-disable-next-line no-unused-vars\nimport MediaStreamElement from '../media/mediastreamelement'; // Used for jsdoc @param\n\nconst KeepAliveInterval = Duration.seconds(10);\n\nlet instanceNum = 0;\n\n/**\n * Retrieves an OSP stream from a server and passes it to a handler\n *\n * @implements {OspHandler}\n */\nexport default class AudioOspBackchannelConnector extends EventTarget {\n /**\n * The camera being connected to\n */\n get cameraId() {\n return this._cameraId;\n }\n\n /**\n * The token requester\n */\n set tokenRequester(value) {\n this._tokenRequester = value;\n }\n\n get tokenRequester() {\n return this._tokenRequester;\n }\n\n get connectState() {\n return this._connectState;\n }\n\n get streamStarted() {\n return this._streamStarted;\n }\n\n /**\n * Constructor\n *\n * @param reactor Reactor used to schedule asynchronous tasks\n * @param connectClient Connect client to make an abstract connection\n * @param cameraId Camera ID of the stream\n */\n constructor(reactor, connectClient, cameraId) {\n super();\n this.log = new Logger('audioospbackchannelconnector', ++instanceNum);\n\n this._reactor = reactor;\n this._connectClient = connectClient;\n this._cameraId = cameraId;\n this._connectState = OspConnectState.NotConnected;\n this._connection = null;\n this._requestCookie = 0;\n this._cmdSequence = 0;\n this._tokenRequester = null;\n this._authToken = null;\n this._keepAliveTimer = new Timer(reactor);\n this._resumeState = null;\n\n this._samplesTransmitted = 0;\n this._samplesAcknowledged = 0;\n this._streamStarted = false;\n\n this._resetCallbacks();\n }\n\n /**\n * Opens a backchannel to the recorder for the camera\n */\n start() {\n ++this._requestCookie;\n this._streamStarted = false;\n\n this.connReadyFn = (error) => this._continueStart(error);\n this._tryStartConnect();\n this._tryStartGetToken();\n }\n\n /**\n * Resets the connector\n */\n reset() {\n this.log.debug('reset');\n\n this._connectClient.cancelConnect();\n\n if (this._connection) {\n this._connection.close();\n this._connection = null;\n }\n\n this._connectState = OspConnectState.NotConnected;\n\n this._keepAliveTimer.kill();\n\n this._resetStreamState();\n this._resetCallbacks();\n\n this.removeEventListeners();\n }\n\n /**\n * Sends the `MediaSteamElement`'s `metadata` and `sample` to the recorder/camera\n *\n * @param {MediaStreamElement} element\n */\n send(element) {\n if (!this._streamStarted || !this._connection) {\n this.log.spam(() =>\n `Skipping send, stream started = ${this._streamStarted}, ` +\n `connection = ${this._connection ? 'connected' : 'null'}, ` +\n `element = ${JSON.stringify(element)}`);\n return;\n }\n\n const metadata = element.metadata;\n const sample = element.sample;\n\n // unpack the metadata if available\n if (metadata) {\n const {audioInfo, trackInfo, trackId} = metadata;\n const trackHeader = {trackId, trackInfo};\n this.log.debug(`Sending metadata trackId: ${trackId}: ${trackInfo.mediaType}/${trackInfo.codecType}`);\n\n this._connection.sendTrackHeader(trackHeader);\n\n if (audioInfo) {\n const audioHeader = {trackId, audioInfo};\n this.log.debug(\n `Sending audioinfo trackId: ${trackId}: ${audioInfo.sampleRate}HZ ` +\n `${audioInfo.numChannels}ch ${audioInfo.bitsPerSample}bps`);\n\n this._connection.sendAudioHeader(audioHeader);\n }\n }\n\n // transmit the sample if available\n if (sample) {\n this._connection.sendSample(sample, true);\n this._samplesTransmitted++;\n this.log.spam(() => `Sent sample: ${this._samplesTransmitted} includes metadata: ${(metadata ? 'yes' : 'no')}`);\n }\n }\n\n _resetCallbacks() {\n const noop = () => { };\n\n this.onSample = noop;\n this.onNoMoreData = noop;\n this.onError = noop;\n this.onReady = noop;\n this.onLiveStatus = noop;\n }\n\n _continueStart(error) {\n if (error !== StreamError.NoError) {\n this._handleError(error);\n return;\n }\n\n const content = JSON.stringify([{cameraId: this._cameraId, authToken: this._authToken}]);\n const message = new OspControlMessage(Osp.Cmd.StartBackchannel, Osp.MsgType.Command, ++this._cmdSequence);\n message.args = {\n cookie: this._requestCookie,\n content,\n };\n\n this.log.info(() => `Starting Backchannel: ${JSON.stringify(message.args)}`);\n this._connection.sendControl(message);\n }\n\n /**\n * Starts connecting if necessary\n *\n * @private\n */\n _tryStartConnect() {\n if (this._connectState === OspConnectState.NotConnected) {\n this.log.debug('Connecting...');\n\n this._connectClient.connect()\n .then((connection) => this._handleConnectComplete(connection, null))\n .catch((error) => this._handleConnectComplete(null, error));\n\n this._connectState = OspConnectState.Connecting;\n }\n }\n\n /**\n * Called when the connection is complete\n *\n * @private\n *\n * @param connection Connection object\n */\n _handleConnectComplete(connection, error) {\n if (connection) {\n this.log.debug('Connection completed successfully');\n\n this._connectState = OspConnectState.Connected;\n this._connection = connection;\n\n this._connection.onControl = this._handleControl.bind(this);\n this._connection.onDisconnect = this._handleDisconnect.bind(this);\n this._connection.onError = this._handleError.bind(this);\n\n this._tryStartGetToken();\n\n this._keepAliveTimer.set(KeepAliveInterval, this._sendKeepAlive.bind(this));\n } else if (!error || !(error instanceof CancellationError)) {\n this.log.notice('Connection failed');\n\n this._connectState = OspConnectState.NotConnected;\n this._handleError(StreamError.ConnectFailed);\n } else {\n this.log.debug('Connection cancelled');\n }\n\n // When the connection is complete, notify the stream controller\n this.dispatchEvent(new BasicEvent(OscarEvents.StateChange));\n }\n\n /**\n * Starts to get a token\n */\n _tryStartGetToken() {\n if (this._connectState !== OspConnectState.Connected) {\n // Will be called again when we are connected\n return;\n }\n\n if (this._tokenRequester) {\n this.log.debug('Requesting stream token');\n\n this._tokenRequester.requestStreamToken()\n .then((t) => this._handleGetTokenDone(t))\n .catch((e) => this._handleGetTokenFailed(e));\n } else {\n this.connReadyFn(StreamError.NoError);\n }\n }\n\n _handleGetTokenDone(tokenInfo) {\n if (!this._connection) {\n return;\n }\n\n this._authToken = tokenInfo.token;\n this.connReadyFn(StreamError.NoError);\n }\n\n _handleGetTokenFailed(error) {\n this.log.notice(() => `Failed to get stream token: ${error}`);\n this.connReadyFn(StreamError.NotAuthorized);\n }\n\n /**\n * Called to handle a control message\n *\n * @param {OspControlMessage} message Control message\n */\n _handleControl(message) {\n switch (message.type) {\n case Osp.MsgType.Response:\n // We're only ever interested in the response to the last command sent\n if (message.sequence !== this._cmdSequence) {\n return;\n }\n\n if (message.commandId === Osp.Cmd.StartBackchannel) {\n this._handleStartBackchannelResponse(message);\n }\n\n break;\n\n case Osp.MsgType.Notification:\n switch (message.commandId) {\n case Osp.Notify.Timeout:\n this._handleTimeout(message);\n break;\n\n case Osp.Notify.KeepAlive:\n // noop\n break;\n\n default:\n this.log.info(`Unexpected notification ${message}`);\n break;\n }\n }\n }\n\n /**\n * Handles a start backchannel response\n *\n * @private\n */\n _handleStartBackchannelResponse(message) {\n this.log.debug(() => `Got StartBackchannel response: ${JSON.stringify(message)}`);\n if (message.status !== Osp.Status.Ok) {\n this.log.notice(() => `StartBackchannel failed, status is ${message.status}`);\n\n this._resetStreamState();\n\n switch (message.status) {\n case Osp.Status.NotFound:\n this.onError(StreamError.ConnectFailed);\n break;\n\n case Osp.Status.MaxStreams:\n this.onError(StreamError.StreamLimitReached);\n break;\n\n default:\n this.onError(StreamError.SenderError);\n break;\n }\n\n return;\n }\n\n\n // evaluate the backchannel response\n const content = message.getStringArgument('content');\n let responses = [];\n try {\n responses = JSON.parse(content);\n } catch (e) {\n this.log.warn(`Start Backchannel Response failed to parse content: ${content}`);\n return;\n }\n\n const hasConnectedToCamera = responses.some((rsp) =>\n rsp.cameraId === this._cameraId && rsp.status === Osp.Status.Ok);\n if (!hasConnectedToCamera) {\n this.log.error(`StartBackchannel failed ${this._cameraId}`);\n this.onError(StreamError.ConnectFailed);\n return;\n }\n\n // if the start backchannel succeeds we are ready to start\n // receiving samples from our input and sending them down to the OSP connection\n this.log.info(`StartBackchannel succeeded ${this._cameraId}, ${JSON.stringify(message.args)}`);\n this._samplesTransmitted = 0;\n this._samplesAcknowledged = 0;\n this._streamStarted = true;\n\n if (this.onReady) {\n this.onReady();\n }\n }\n\n _handleTimeout(message) {\n this.log.info('Timeout notification');\n this.onError(StreamError.ConnectionLost);\n this.reset();\n }\n\n /**\n * Called when the connection is unexpectedly closed\n *\n * @private\n */\n _handleDisconnect() {\n this.log.notice('Connection lost');\n\n this._connection = null;\n this._connectState = OspConnectState.NotConnected;\n\n this._keepAliveTimer.kill();\n\n this._resetStreamState();\n this.onError(StreamError.ConnectionLost);\n }\n\n /**\n * Called when there is a connection error\n *\n * @private\n *\n * @param {StreamError} code Error code\n */\n _handleError(code) {\n this.log.notice(() => `Connection error ${code}`);\n\n this._resetStreamState();\n this.onError(code);\n }\n\n /**\n * Resets the streaming state without closing the connection\n *\n * @private\n */\n _resetStreamState() {\n this._requestCookie = 0;\n this._cmdSequence = 0;\n }\n\n _sendKeepAlive() {\n if (!this._connection) {\n return;\n }\n\n this.log.debug('Sending keepalive');\n\n const message = new OspControlMessage(Osp.Cmd.Ping, Osp.MsgType.Command, ++this._cmdSequence);\n this._connection.sendControl(message);\n\n this._keepAliveTimer.set(KeepAliveInterval, this._sendKeepAlive.bind(this));\n }\n}\n","import {Logger} from '@oecommon/plasma-js';\n\nlet instanceNum = 0;\n\n/**\n * Simple in memory cache implemented as a map for storing\n * recorder camera tokens.\n */\nexport class HttpStreamTokenCache {\n constructor() {\n this._tokens = new Map();\n this.log = new Logger('httpstreamtokencache', ++instanceNum);\n }\n\n _getKey(nvrInfo, cameraId) {\n return `${nvrInfo.id}:${cameraId}`;\n }\n\n /**\n * Returns a token if available, or undefined\n */\n getToken(nvrInfo, cameraId) {\n const key = this._getKey(nvrInfo, cameraId);\n const token = this._tokens.get(key);\n\n this.log.spam(() => {\n if (token) {\n return `Retrieved token for ${key}`;\n }\n return `No token found for ${key}`;\n });\n return token;\n }\n\n /**\n * Stores a token\n */\n setToken(nvrInfo, cameraId, tokenInfo) {\n const key = this._getKey(nvrInfo, cameraId);\n this._tokens.set(key, tokenInfo);\n this.log.spam(() => `Stored token for ${key}`);\n }\n}\n\n/**\n * One HttpStreamTokenCache instance, intended to be used as a singleton\n * in order to have a single store for all camera tokens\n */\nexport const httpStreamTokenCache = new HttpStreamTokenCache();\n","/* global Promise */\nimport {Duration, Logger, SimpleReactor, PromiseSource} from '@oecommon/plasma-js';\nimport {httpStreamTokenCache} from './httpstreamtokencache';\nimport {Priority} from '../defs';\n\n// If our token expires in less than this amount of time, we'll request a new\n// one rather than trying to use the old one\nconst TokenExpiryTimeBuffer = Duration.seconds(10);\n\n// Used to track the state of \"/gettoken/all\" responses\nconst GetAllTokenResolution = {\n UNKNOWN: 'UNKNOWN',\n SUCCESS: 'SUCCESS',\n FAIL: 'FAIL',\n UNSUPPORTED: 'UNSUPPORTED',\n};\n\nlet instanceNum = 0;\n\n/**\n * Class responsible for hydrating the token cache and managing\n * requests for tokens. Tokens an be prefetched so that they are\n * ready and available for future reads. If they are not available\n * when a read is attempted, an on demand request will be made and\n * then cached. Concurrent requests are managed in a pending queue\n * so that requests are limited to as few as possible. Lastly,\n * since tokens expire, if a request is made for a soon expiring\n * token, it will be refreshed and the new result will be cached.\n */\nexport class HttpStreamTokenManager {\n constructor(tokenCache) {\n this._nvrs = {};\n this._reactor = new SimpleReactor();\n this._tokenCache = tokenCache;\n\n this.log = new Logger('httpstreamtokenmanager', ++instanceNum);\n }\n\n _createNvrState(nvrInfo) {\n return {\n nvrInfo,\n pending: [],\n promise: null,\n promiseResolution: GetAllTokenResolution.UNKNOWN,\n };\n }\n\n _getNvrState(nvrInfo) {\n let nvrState = this._nvrs[nvrInfo.id];\n\n if (!nvrState) {\n nvrState = this._createNvrState(nvrInfo);\n this._nvrs[nvrInfo.id] = nvrState;\n } else {\n nvrState.nvrInfo = nvrInfo;\n }\n\n return nvrState;\n }\n\n _clearNvrState(nvrInfo) {\n this.log.debug(() => `Clearing saved nvrState for ${nvrInfo.id}`);\n this._nvrs[nvrInfo.id] = null;\n }\n\n _tokenIsExpired(tokenInfo) {\n if (!tokenInfo) {\n return true;\n }\n if (!tokenInfo.token) {\n return true;\n }\n if (!tokenInfo.expirationTime) {\n return false;\n }\n return this._reactor.timeProvider.currentTime.ge(tokenInfo.expirationTime);\n }\n\n _getPromiseResolutionFromError(error) {\n if (error && error.response && error.response.status === 404) {\n return GetAllTokenResolution.UNSUPPORTED;\n }\n return GetAllTokenResolution.FAIL;\n }\n\n _cacheTokens(tokenEntries, nvrInfo) {\n const now = this._reactor.timeProvider.currentTime;\n tokenEntries.forEach(([cameraId, tokenInfo]) => {\n const expirationTime = now\n .plus(Duration.seconds(tokenInfo.expires))\n .minus(TokenExpiryTimeBuffer);\n this.log.spam(() => `Caching token for ${nvrInfo.id}, camera ${cameraId}, `\n + `expires in ${tokenInfo.expires} seconds at ${expirationTime}`);\n this._tokenCache.setToken(nvrInfo, cameraId, {\n ...tokenInfo,\n expirationTime,\n });\n });\n }\n\n _onGetAll(response, nvrState, nvrInfo) {\n const {content} = response.data;\n const tokenEntries = Object.entries(content);\n this._cacheTokens(tokenEntries, nvrInfo);\n\n nvrState.promiseResolution = GetAllTokenResolution.SUCCESS;\n this.log.debug(() =>\n `Prefetch token ${nvrState.promiseResolution} for ${nvrInfo.id}, got ${tokenEntries.length} token(s)`);\n this.log.debug(() => `Completing ${nvrState.pending.length} pending promise(s) for ${nvrInfo.id}`);\n\n nvrState.pending.forEach((promiseSource) => {\n promiseSource.complete();\n });\n nvrState.pending = [];\n }\n\n _onGetAllFailed(error, nvrState, nvrInfo) {\n nvrState.promise = null;\n nvrState.promiseResolution = this._getPromiseResolutionFromError(error);\n this.log.debug(() => `Prefetch token ${nvrState.promiseResolution} for ${nvrInfo.id}`);\n this.log.debug(() => `Failing ${nvrState.pending.length} pending promise(s) for ${nvrInfo.id}`);\n\n nvrState.pending.forEach((promiseSource) => {\n promiseSource.fail(error);\n });\n nvrState.pending = [];\n }\n\n /**\n * If necessary, creates a request to the recorder for all tokens.\n * If this request has already succeeded, the promise will immediately\n * resolve. If the request is currently pending, a pending promise\n * will be returned that will resolve when the request completes\n * or fails. On success, the retrieved tokens will be cached and\n * available by calling `getToken`.\n */\n prefetchTokens(nvrManager, nvrInfo) {\n this.log.debug(() => `Prefetch request for ${nvrInfo.id}`);\n const nvrState = this._getNvrState(nvrInfo);\n\n if (nvrState.promiseResolution === GetAllTokenResolution.SUCCESS) {\n return Promise.resolve();\n }\n\n if (!nvrState.promise) {\n this.log.debug(() => `Prefetching tokens for ${nvrInfo.id}`);\n nvrState.promise = nvrManager.getConnection(nvrInfo, Priority.High)\n .then((connection) => connection.apiGet('cameras/gettoken/all'))\n .then((response) => this._onGetAll(response, nvrState, nvrInfo))\n .catch((error) => this._onGetAllFailed(error, nvrState, nvrInfo));\n }\n\n const promiseSource = new PromiseSource();\n this.log.debug(() => `Creating new pending promise for ${nvrInfo.id}`);\n nvrState.pending.push(promiseSource);\n return promiseSource.makePromise();\n }\n\n /**\n * Helper method to determine whether or not it makes sense for the client\n * to attempt to get all tokens. If true, the client can then call `getToken`.\n * If false, an attempt to get all tokens has likely already been made and\n * subsequently failed with a 404, meaning the api does not exist on this\n * recorder.\n */\n shouldAttemptGetAllTokens(nvrInfo) {\n const nvrState = this._getNvrState(nvrInfo);\n return nvrState.promiseResolution !== GetAllTokenResolution.UNSUPPORTED;\n }\n\n /**\n * Attempts to get all tokens from the recorder identified by the `nvrInfo`. If\n * this has previously succeeded, the token will be retrieved from the internal\n * cache. If the token has not expired it will be returned. If it has expired\n * we will attempt to rehydrate the cache with new tokens for the recorder\n * cameras, and then return the token for the specified `cameraId`.\n */\n getToken(nvrManager, nvrInfo, cameraId) {\n const nvrState = this._getNvrState(nvrInfo);\n\n if (nvrState.promiseResolution === GetAllTokenResolution.SUCCESS) {\n const tokenInfo = this._tokenCache.getToken(nvrInfo, cameraId);\n this.log.spam(() => `Cache hit for ${nvrInfo.id}, camera ${cameraId}. `\n + `Retrieved token expires at ${tokenInfo.expirationTime}`);\n\n if (!this._tokenIsExpired(tokenInfo)) {\n return Promise.resolve(tokenInfo);\n }\n\n this.log.debug(() => `Token was expired for ${nvrInfo.id}, camera ${cameraId}`);\n this._clearNvrState(nvrInfo);\n }\n\n return this.prefetchTokens(nvrManager, nvrInfo)\n .then(() => {\n return this._tokenCache.getToken(nvrInfo, cameraId);\n });\n }\n}\n\n/**\n * One HttpStreamTokenManager instance, intended to be used as a singleton\n * in order to have a single store for all camera tokens\n */\nexport const httpStreamTokenManager = new HttpStreamTokenManager(httpStreamTokenCache);\n\n/**\n * Factory method intended to use the HttpStreamTokenManager singleton. Builds\n * the prefetch function with a single NvrManager, and allows it to be called\n * later, on a case-by-case basis, with nvrInfos.\n */\nexport function makeRecorderCameraTokensPrefetcher(nvrManager) {\n return function(nvrInfo) {\n return httpStreamTokenManager.prefetchTokens(nvrManager, nvrInfo);\n };\n}\n","/* global Promise */\nimport {Logger} from '@oecommon/plasma-js';\nimport {httpStreamTokenManager} from './httpstreamtokenmanager';\nimport {Priority} from '../defs';\n\nlet instanceNum = 0;\n\n/**\n * Requests a stream token using HTTP\n */\nexport default class HttpStreamTokenRequester {\n constructor(nvrManager, nvrInfo, cameraId, tokenManager) {\n this._nvrManager = nvrManager;\n this._nvrInfo = nvrInfo;\n this._cameraId = cameraId;\n this._tokenManager = tokenManager || httpStreamTokenManager;\n\n this.log = new Logger('httpstreamtokenrequester', ++instanceNum);\n }\n\n /**\n * Requests an individual camera token from the recorder\n */\n _requestIndividualStreamToken() {\n return new Promise((resolve, reject) => {\n this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => connection.apiGet('cameras/' + this._cameraId + '/gettoken'))\n .then((response) => resolve(response.data.content))\n .catch((error) => reject(error));\n });\n }\n\n /**\n * Requests a token. Attempts to use a token from the /cameras/gettoken/all endpoint\n * if possible.\n *\n * @return {Promise} Promise that will return the token info or throw an error\n */\n async requestStreamToken() {\n if (this._tokenManager.shouldAttemptGetAllTokens(this._nvrInfo)) {\n this.log.debug(() =>\n `Attempting to get all stream tokens while requesting ${this._nvrInfo.id}, ${this._cameraId}`);\n return this._tokenManager.getToken(this._nvrManager, this._nvrInfo, this._cameraId)\n .catch((error) => {\n if (error.response.status === 404) {\n // If we receive a 404, then we now know that the get all token api doesn't exist\n // and we fallback to getting individual tokens.\n this.log.debug(() =>\n `Falling back to request individual stream token for ${this._nvrInfo.id}, ${this._cameraId}`);\n return this._requestIndividualStreamToken();\n }\n this.log.debug(() => `Failed to get all stream tokens, ${error}`);\n throw error;\n });\n }\n\n this.log.debug(() => `Requesting individual stream token for ${this._nvrInfo.id}, ${this._cameraId}`);\n return this._requestIndividualStreamToken();\n }\n}\n","/* global Promise */\n\nimport {Priority} from '../defs';\n\n/**\n * Requests a bearer token using HTTP\n */\nexport default class HttpBearerTokenRequester {\n constructor(nvrManager, nvrInfo) {\n this._nvrManager = nvrManager;\n this._nvrInfo = nvrInfo;\n }\n\n /**\n * Requests a token\n *\n * @return {Promise} Promise that will return the token info or throw an error\n */\n requestToken() {\n return new Promise((resolve, reject) => {\n this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => connection.apiGet('login/gettoken'))\n .then((response) => resolve(response.data.content))\n .catch((error) => reject(error));\n });\n }\n}\n","import {Timer, Duration, Logger, PromiseSource, CancellationError} from '@oecommon/plasma-js';\nimport {MediaType, RenderState} from '../defs';\n\nconst MIN_BUFFER_TIME = Duration.milliseconds(100);\nconst MAX_BUFFER_TIME = Duration.seconds(4);\nconst DEF_SYNC_INTERVAL = Duration.milliseconds(500);\n\nlet instanceNum = 0;\n\nexport default class AudioRenderController {\n constructor(reactor, rendererFactory) {\n this.id = ++instanceNum;\n this.log = new Logger('audiorendercontroller', this.id);\n this._reactor = reactor;\n this._rendererFactory = rendererFactory;\n this._renderer = null;\n this._renderClock = null;\n this._renderState = RenderState.Idle;\n this._timingReporter = null;\n this._syncTimer = new Timer(reactor);\n this._syncInterval = DEF_SYNC_INTERVAL;\n this._trackId = 0;\n this._audioSampleRate = 0;\n this._volume = 0;\n this._muted = true;\n this._suspended = false;\n this._blockedSender = false;\n this._seekPromiseSource = new PromiseSource();\n\n const noop = () => {};\n this.onRenderStateChanged = noop;\n this.onUnblock = noop;\n\n // Run the sync timer all the time - it will do nothing if audio is not active.\n this._syncTimer.set(this._syncInterval, this._syncPlayback.bind(this), true);\n }\n\n get mediaType() {\n return MediaType.Audio;\n }\n\n /**\n * The render clock used to control render timing for this controller\n * @type {RenderClock}\n */\n set renderClock(value) {\n this._renderClock = value;\n if (this._renderer) {\n this._renderer.renderClock = value;\n }\n }\n\n get renderClock() {\n return this._renderClock;\n }\n\n /**\n * The timing reporter used to report timing information\n */\n set timingReporter(value) {\n this._timingReporter = value;\n }\n\n get timingReporter() {\n return this._timingReporter;\n }\n\n get volume() {\n return this._volume;\n }\n\n set volume(value) {\n this._volume = value;\n if (this._renderer) {\n this._renderer.volume = value;\n }\n }\n\n get muted() {\n return this._muted;\n }\n\n set muted(value) {\n this._muted = value;\n if (this._renderer) {\n this._renderer.muted = value;\n }\n this._updateEnabledState();\n }\n\n get state() {\n return this._renderState;\n }\n\n /**\n * Called when the clock has changed, including speed and pause state\n */\n onClockChanged() {\n this._updateEnabledState();\n this._syncPlayback();\n this._syncTimer.set(this._syncInterval, this._syncPlayback.bind(this), true);\n this._unblockSender();\n }\n\n /**\n * Gets the current playback time\n */\n get currentTime() {\n if (!this._renderClock) {\n return null;\n }\n\n return this._renderClock.currentTime;\n }\n\n /**\n * Prepares for live video playback\n */\n startLive() {\n this._setRenderState(RenderState.Seeking);\n }\n\n /**\n * Prepares for non-live video playback\n */\n makeNonLive() {\n }\n\n /**\n * Prepares for a seek\n */\n prepareSeek() {\n this._disable();\n }\n\n /**\n * Starts a seek operation\n */\n seek() {\n if (this._seekPromiseSource.active) {\n this.log.debug('Cancelling existing seek');\n this._seekPromiseSource.fail(new CancellationError());\n }\n\n this._setRenderState(RenderState.Seeking);\n return this._seekPromiseSource.makePromise();\n }\n\n seekFail() {\n }\n\n /**\n * Gets gap information\n */\n getGapInfo() {\n return {isInGap: false, nextVideoTime: null};\n }\n\n /**\n * Called to report track information\n *\n * @param {number} trackId\n * @param {TrackInfo} trackInfo\n */\n handleTrackInfo(trackId, trackInfo) {\n if (trackInfo.mediaType !== MediaType.Audio) {\n return;\n }\n\n this._trackId = trackId;\n\n if (!this._renderer || !this._renderer.supportsCodec(trackInfo.codecType)) {\n this._renderer = this._rendererFactory.create(trackInfo.codecType);\n if (!this._renderer) {\n this.log.notice(`Couldn't create renderer for codec type ${trackInfo.codecType}`);\n return;\n }\n this._renderer.renderClock = this._renderClock;\n this._renderer.volume = this._volume;\n this._renderer.muted = this._muted;\n }\n\n this._renderer.handleTrackInfo(trackId, trackInfo);\n\n if (this._timingReporter) {\n this._timingReporter.reportTrack(trackId, trackInfo.mediaType, MIN_BUFFER_TIME);\n }\n }\n\n /**\n * Called to report audio information for a track\n *\n * @param {number} trackId\n * @param {AudioInfo} audioInfo\n */\n handleAudioInfo(trackId, audioInfo) {\n if (trackId !== this._trackId || !this._renderer) {\n return;\n }\n\n this._renderer.handleAudioInfo(trackId, audioInfo);\n }\n\n /**\n * Handle a new sample\n */\n handleSample(sample) {\n if (sample.sampleInfo.trackId !== this._trackId || !this._renderer) {\n return true;\n }\n\n // For audio we just finish a pending seek whenever we receive a sample\n if (this._seekPromiseSource.active) {\n this._seekPromiseSource.complete(sample.timestamp);\n }\n\n this._setRenderState(RenderState.Rendering);\n\n if (this._renderClock && this._renderClock.paused) {\n return false;\n }\n\n if (this._timingReporter && !sample.sampleInfo.isCatchUp) {\n this._timingReporter.reportSampleReceived(sample.sampleInfo.trackId, sample.timestamp, true);\n }\n\n if (!this._shouldPlayAudio) {\n return true;\n }\n\n this.log.spam(() => `Got sample ${sample}`);\n\n // Block if this sample is not due to be rendered for a while\n if (this._renderClock) {\n const renderTime = this._renderClock.getRenderTime(sample.timestamp);\n const now = this._reactor.timeProvider.currentTime;\n if (renderTime && renderTime.minus(now).gt(MAX_BUFFER_TIME)) {\n // Not ready for this sample yet\n this.log.spam(() => `Not ready for sample ${sample.timestamp}, render time is ${renderTime}`);\n this._blockedSender = true;\n return false;\n }\n }\n\n this._renderer.handleSample(sample);\n return true;\n }\n\n handleNoMoreData() {\n }\n\n /**\n * Called to report a stream error\n *\n * @param {StreamError} streamError\n */\n handleError(streamError) {\n this.log.debug('Stream error ' + streamError);\n this._setRenderState(RenderState.Error);\n }\n\n suspend() {\n this._suspended = true;\n this._disable();\n }\n\n resume() {\n this._suspended = false;\n this._updateEnabledState();\n }\n\n stop() {\n this._disable();\n }\n\n get hasDebugBlob() {\n return this._renderer && this._renderer.hasDebugBlob;\n }\n\n getDebugBlob() {\n return this._renderer ? this._renderer.getDebugBlob() : null;\n }\n\n _syncPlayback() {\n if (!this._renderer || !this._renderClock || !this._shouldPlayAudio) {\n return;\n }\n\n this._unblockSender();\n this._renderer.syncPlayback();\n }\n\n _unblockSender() {\n if (!this._blockedSender) {\n return;\n }\n\n this._blockedSender = false;\n this.onUnblock();\n }\n\n _updateEnabledState() {\n if (this._shouldPlayAudio) {\n this._enable();\n } else {\n this._disable();\n }\n }\n\n _enable() {\n if (this._renderer) {\n this._renderer.enable();\n }\n }\n\n _disable() {\n if (this._renderer) {\n this._renderer.disable();\n }\n }\n\n get _shouldPlayAudio() {\n if (this._muted || this._suspended) {\n return false;\n }\n\n if (!this._renderClock) {\n // No render clock, so don't mute based on speed\n return true;\n }\n\n return this._renderClock.speed === 1 && !this._renderClock.paused;\n }\n\n _setRenderState(newState) {\n if (this._renderState === newState) {\n return;\n }\n\n this.log.debug(() => `Changing state from ${this._renderState} to ${newState}`);\n\n this._renderState = newState;\n\n if (this.onRenderStateChanged) {\n this.onRenderStateChanged(this._renderState);\n }\n }\n}\n","export const DefaultAudioSampleRate = 8000;\n\nexport default class AudioContextFactory {\n createAudioContext(sampleRate) {\n return new AudioContext({sampleRate: sampleRate || DefaultAudioSampleRate});\n }\n}\n","import {worklet, workletName} from './oscar-audio-playback-processor.worklet';\n\nexport default class AudioPlaybackProcessorWorkletFactory {\n createAudioWorkletUrl() {\n const blob = new Blob([worklet], {type: 'application/javascript; charset=utf-8'});\n return URL.createObjectURL(blob);\n }\n\n createAudioWorkletNode(id, audioContext) {\n return new AudioWorkletNode(audioContext, workletName, {parameterData: {id}});\n }\n}\n","export const workletName = 'oscar-audio-playback-processor';export const worklet = `!function(e,t){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)(\"object\"==typeof exports?exports:e)[r]=n[r]}}(this,(()=>(()=>{var e={161:(e,t,n)=>{\"use strict\";var r=n(523),a=n(486),i=n(383),s=n(738),l=n(310),f=n(715);e.exports={parse:h,stringify:function(e,t){t=void 0===t?{endianness:\"le\"}:null==t?{}:\"string\"==typeof t?h(t):b(t),l(e)||(e=b(e));var n=[];return null!=e.type&&e.type!==t.type&&n.push(e.type||\"float32\"),null!=e.channels&&e.channels!==t.channels&&n.push(p[e.channels]),null!=e.endianness&&e.endianness!==t.endianness&&n.push(e.endianness||\"le\"),null!=e.interleaved&&e.interleaved!==t.interleaved&&\"audiobuffer\"!==e.type&&n.push(e.interleaved?\"interleaved\":\"planar\"),null!=e.sampleRate&&e.sampleRate!==t.sampleRate&&n.push(e.sampleRate),n.join(\" \")},detect:b,type:m};for(var o=a.endianness instanceof Function?a.endianness().toLowerCase():\"le\",u={uint:\"uint32\",uint8:\"uint8\",uint8_clamped:\"uint8\",uint16:\"uint16\",uint32:\"uint32\",int:\"int32\",int8:\"int8\",int16:\"int16\",int32:\"int32\",float:\"float32\",float32:\"float32\",float64:\"float64\",array:\"array\",arraybuffer:\"arraybuffer\",buffer:\"buffer\",audiobuffer:\"audiobuffer\",ndarray:\"ndarray\",ndsamples:\"ndsamples\"},c={mono:1,stereo:2,quad:4,5.1:6,2.1:3,\"3-channel\":3,\"5-channel\":5},d=6;d<32;d++)c[d+\"-channel\"]=d;var p={};for(var y in c)p[c[y]]=y;function h(e){for(var t={},n=e.split(/\\s*[,;_]\\s*|\\s+/),a=0;a<n.length;a++){var i=n[a].toLowerCase();if(\"planar\"===i&&null==t.interleaved)t.interleaved=!1,null==t.channels&&(t.channels=2);else if(\"interleave\"!==i&&\"interleaved\"!==i||null!=t.interleaved)if(c[i])t.channels=c[i];else if(\"le\"===i||\"LE\"===i||\"littleendian\"===i||\"bigEndian\"===i)t.endianness=\"le\";else if(\"be\"===i||\"BE\"===i||\"bigendian\"===i||\"bigEndian\"===i)t.endianness=\"be\";else if(u[i])t.type=u[i],\"audiobuffer\"===i&&(t.endianness=o,t.interleaved=!1);else if(r[i])t.sampleRate=r[i];else{if(!/^\\d+$/.test(i))throw Error(\"Cannot identify part \\`\"+i+\"\\`\");t.sampleRate=parseInt(i)}else t.interleaved=!0,null==t.channels&&(t.channels=2)}return t}function b(e){if(!e)return{};var t=f(e,{channels:\"channel channels numberOfChannels channelCount\",sampleRate:\"sampleRate rate\",interleaved:\"interleave interleaved\",type:\"type dtype\",endianness:\"endianness\"});if(e.format&&(t.type=\"ndsamples\"),null==t.sampleRate&&e.format&&e.format.sampleRate&&(t.sampleRate=e.format.sampleRate),e.planar&&(t.interleaved=!1),null!=t.interleaved&&null==t.channels&&(t.channels=2),null==t.type){var n=m(e);n&&(t.type=n)}return\"audiobuffer\"===t.type&&(t.endianness=o,t.interleaved=!1),t}function m(e){return i(e)?\"audiobuffer\":s(e)?\"buffer\":Array.isArray(e)?\"array\":e instanceof ArrayBuffer?\"arraybuffer\":e.shape&&e.dtype?e.format?\"ndsamples\":\"ndarray\":e instanceof Float32Array?\"float32\":e instanceof Float64Array?\"float64\":e instanceof Uint8Array?\"uint8\":e instanceof Uint8ClampedArray?\"uint8_clamped\":e instanceof Int8Array?\"int8\":e instanceof Int16Array?\"int16\":e instanceof Uint16Array?\"uint16\":e instanceof Int32Array?\"int32\":e instanceof Uint32Array?\"uint32\":void 0}},383:e=>{\"use strict\";e.exports=function(e){return null!=e&&\"number\"==typeof e.length&&\"number\"==typeof e.sampleRate&&\"function\"==typeof e.getChannelData&&\"number\"==typeof e.duration}},738:e=>{function t(e){return!!e.constructor&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(t(e)||function(e){return\"function\"==typeof e.readFloatLE&&\"function\"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},310:e=>{\"use strict\";var t=Object.prototype.toString;e.exports=function(e){var n;return\"[object Object]\"===t.call(e)&&(null===(n=Object.getPrototypeOf(e))||n===Object.getPrototypeOf({}))}},418:e=>{\"use strict\";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){r[e]=e})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,a){for(var i,s,l=function(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),f=1;f<arguments.length;f++){for(var o in i=Object(arguments[f]))n.call(i,o)&&(l[o]=i[o]);if(t){s=t(i);for(var u=0;u<s.length;u++)r.call(i,s[u])&&(l[s[u]]=i[s[u]])}}return l}},974:(e,t,n)=>{\"use strict\";var r=n(551),a=n(738),i=n(161),s=n(418),l=n(383);function f(e){return\"string\"==typeof e?i.parse(e):i.detect(e)}function o(e){return\"string\"!=typeof e&&(Array.isArray(e)||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)}e.exports=function(e,t,n,c){if(r(e,\"First argument should be data\"),r(t,\"Second argument should be format string or object\"),t===n)return e;if(o(t))c=t,n=i.detect(c),t=i.detect(e);else if(void 0===n&&void 0===c)n=f(t),t=i.detect(e);else if(o(n))c=n,n=f(t),t=i.detect(e);else{var p=f(t),y=i.detect(e);y.dtype=\"arraybuffer\"===p.type?y.type:p.type,t=s(p,y);var h=f(n),b=i.detect(c);h.type&&(b.dtype=\"arraybuffer\"===h.type?b.type||t.dtype:h.type),n=s(h,b)}if(null==n.channels&&null!=t.channels&&(n.channels=t.channels),null==n.type&&(n.type=t.type,n.dtype=t.dtype),null!=n.interleaved&&null==t.channels&&(t.channels=2),t.type===n.type&&t.interleaved===n.interleaved&&t.endianness===n.endianness)return e;var m;if(d(t),d(n),(e.buffers||e.buffer&&e.buffer.buffers)&&(e.buffer&&(e=e.buffer),e.buffers&&(e=e.join())),l(e))if(e._data)m=e._data;else{m=new Float32Array(e.length*e.numberOfChannels);for(var v=0,_=e.numberOfChannels;v<_;v++)m.set(e.getChannelData(v),e.length*v)}else e instanceof ArrayBuffer?m=new u[t.dtype](e):a(e)?(m=null!=e.byteOffset?e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength):e.buffer,m=new u[t.dtype](m)):m=e;var g=\"array\"===n.type?Array.from(m):new u[n.dtype](m);if(t.max!==n.max){var A=t.max-t.min,x=n.max-n.min,w=0;for(_=m.length;w<_;w++){var O=m[w];O=(O-t.min)/A*x+n.min,g[w]=Math.max(n.min,Math.min(n.max,O))}}if(t.interleaved!=n.interleaved){var j=t.channels,I=Math.floor(m.length/j);t.interleaved&&!n.interleaved?g=g.map((function(e,t,n){return n[t%I*j+~~(t/I)]})):!t.interleaved&&n.interleaved&&(g=g.map((function(e,t,n){return n[t%j*I+~~(t/j)]})))}if(\"array\"!=n.dtype&&\"int8\"!=n.dtype&&\"uint8\"!=n.dtype&&t.endianness&&n.endianness&&t.endianness!==n.endianness){var C=\"le\"===n.endianness,R=new DataView(g.buffer),B=g.BYTES_PER_ELEMENT,E=\"set\"+n.dtype[0].toUpperCase()+n.dtype.slice(1);for(w=0,_=g.length;w<_;w++)R[E](w*B,g[w],C)}if(n.type,c){if(Array.isArray(c))for(w=0;w<g.length;w++)c[w]=g[w];else if(c instanceof ArrayBuffer){var S=new u[n.dtype](c);S.set(g),c=S}else c.set(g);g=c}return\"arraybuffer\"!==n.type&&\"buffer\"!==n.type||(g=g.buffer),g};var u={uint8:Uint8Array,uint8_clamped:Uint8ClampedArray,uint16:Uint16Array,uint32:Uint32Array,int8:Int8Array,int16:Int16Array,int32:Int32Array,float32:Float32Array,float64:Float64Array,array:Array,arraybuffer:Uint8Array,buffer:Uint8Array},c={float32:\"float32\",audiobuffer:\"float32\",ndsamples:\"float32\",ndarray:\"float32\",float64:\"float64\",buffer:\"uint8\",arraybuffer:\"uint8\",uint8:\"uint8\",uint8_clamped:\"uint8\",uint16:\"uint16\",uint32:\"uint32\",int8:\"int8\",int16:\"int16\",int32:\"int32\",array:\"array\"};function d(e){switch(e.dtype||(e.dtype=c[e.type]||\"array\"),e.dtype){case\"float32\":case\"float64\":case\"audiobuffer\":case\"ndsamples\":case\"ndarray\":default:e.min=-1,e.max=1;break;case\"uint8\":e.min=0,e.max=255;break;case\"uint16\":e.min=0,e.max=65535;break;case\"uint32\":e.min=0,e.max=4294967295;break;case\"int8\":e.min=-128,e.max=127;break;case\"int16\":e.min=-32768,e.max=32767;break;case\"int32\":e.min=-2147483648,e.max=2147483647}return e}},715:e=>{\"use strict\";e.exports=function(e,t,r){var a,i,s={};if(\"string\"==typeof t&&(t=n(t)),Array.isArray(t)){var l={};for(i=0;i<t.length;i++)l[t[i]]=!0;t=l}for(a in t)t[a]=n(t[a]);var f={};for(a in t){var o=t[a];if(Array.isArray(o))for(i=0;i<o.length;i++){var u=o[i];if(r&&(f[u]=!0),u in e){if(s[a]=e[u],r)for(var c=i;c<o.length;c++)f[o[c]]=!0;break}}else a in e&&(t[a]&&(s[a]=e[a]),r&&(f[a]=!0))}if(r)for(a in e)f[a]||(s[a]=e[a]);return s};var t={};function n(e){return t[e]?t[e]:(\"string\"==typeof e&&(e=t[e]=e.split(/\\s*,\\s*|\\s+/)),e)}},551:e=>{e.exports=function(e,t){if(!e)throw new Error(t)}},486:e=>{e.exports={}},523:e=>{\"use strict\";e.exports=JSON.parse('{\"8000\":8000,\"11025\":11025,\"16000\":16000,\"22050\":22050,\"44100\":44100,\"48000\":48000,\"88200\":88200,\"96000\":96000,\"176400\":176400,\"192000\":192000,\"352800\":352800,\"384000\":384000}')}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var r={};return(()=>{\"use strict\";n.r(r);var e=n(974),t=n.n(e);class a{constructor(e,t,n){this._id=e,this._readIndex=0,this._writeIndex=0,this._framesAvailable=0,this._channelCount=n,this._length=t,this._channelData=[];for(let e=0;e<this._channelCount;++e)this._channelData[e]=new Float32Array(t)}get framesAvailable(){return this._framesAvailable}push(e){const t=e[0].length;for(let n=0;n<t;++n){const t=(this._writeIndex+n)%this._length;for(let r=0;r<this._channelCount;++r)this._channelData[r][t]=e[r][n]}this._writeIndex+=t,this._writeIndex>=this._length&&(this._writeIndex-=this._length),this._framesAvailable+=t,this._framesAvailable>this._length&&(this._framesAvailable=this._length)}pull(e){if(0===this._framesAvailable)return;const t=e[0].length;for(let n=0;n<t;++n){const t=(this._readIndex+n)%this._length;for(let r=0;r<this._channelCount;++r)e[r][n]=this._channelData[r][t]}this._readIndex+=t,this._readIndex>=this._length&&(this._readIndex-=this._length),this._framesAvailable-=t,this._framesAvailable<0&&(this._framesAvailable=0)}}class i{constructor(){this._decodeTable=[0,132,396,924,1980,4092,8316,16764]}_decodeBit(e){const t=~e;let n=128&t;const r=t>>4&7,a=15&t;let i=this._decodeTable[r]+(a<<r+3);return 0!=n&&(i=-i),i}decode(e){if(e.constructor!==Int8Array)throw new Error(\"muLawSamples must be an Int8Array\");const t=e.length,n=new Int16Array(t);for(let r=0;r<t;r++){const t=e.at(r);n[r]=this._decodeBit(t)}return n}}class s extends AudioWorkletProcessor{constructor(e){super(e);const t=e||{};this._id=(t.parameterData||{}).id||(new Date).getTime(),this._bufferSize=t.bufferSize||16384,this._channelCount=t.channelCount||1,this._inputRingBuffer=new a(this._id,this._bufferSize,this._channelCount),this._decoder=new i,this.port.onmessage=this.handleMessage.bind(this)}_handleBytes(e){const n=new Int8Array(e),r=this._decoder.decode(n),a=t()(r,\"float32\");this._inputRingBuffer.push([a])}handleMessage(e){\"bytes\"!==e.data.type?console.warn(\"[audioprocessor] Unexpected event type. Received: \",e.data.type):this._handleBytes(e.data.bytes)}process(e,t){return this._inputRingBuffer.framesAvailable<=0||this._inputRingBuffer.pull(t[0]),!0}}registerProcessor(\"oscar-audio-playback-processor\",s)})(),r})()));`;","/* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n/* global Promise, Map */\n\nimport {Osp, OspControlMessage} from '../osp/ospformat';\nimport {Priority} from '../defs';\nimport {Logger} from '@oecommon/plasma-js';\n\nconst log = new Logger('ptzctrl');\n\nconst PtzConnectState = {\n NotConnected: 0,\n Connecting: 1,\n Connected: 2,\n};\n\nlet instanceNum = 0;\n\n/**\n * Controls a PTZ using OSP commands\n *\n * Note: OSP is used only for actual pan/tilt/zoom movement commands. All others use the\n * REST API.\n *\n * @implements {OspHandler}\n */\nexport default class PtzController {\n /**\n * Constructor\n *\n * @param reactor Reactor used to schedule asynchronous tasks\n * @param connectClient Connect client to make an abstract connection\n * @param tokenRequester Bearer token requester\n * @param adcParams Additional ADC specific params\n */\n constructor(reactor, connectClient, tokenRequester, nvrManager, nvrInfo, adcParams) {\n this.log = new Logger('ospptz', ++instanceNum);\n\n this._reactor = reactor;\n this._connectClient = connectClient;\n this._connectState = PtzConnectState.NotConnected;\n this._nvrManager = nvrManager;\n this._nvrInfo = nvrInfo;\n this._connection = null;\n this._cmdSequence = 0;\n this._tokenRequester = tokenRequester;\n this._tokenInfo = null;\n this._pendingCommands = new Map();\n\n this._hostname = adcParams.hostname;\n this._config = {\n auth: {\n username: adcParams.username,\n password: adcParams.password,\n },\n params: {\n adcRelayToken: adcParams.adcRelayToken\n }\n }\n }\n\n startConnect() {\n if (this._connectState !== PtzConnectState.NotConnected) {\n return;\n }\n\n log.debug('Connecting to OSP PTZ server');\n\n this._connectState = PtzConnectState.Connecting;\n\n Promise.all([this._connectClient.connect(true), this._tokenRequester.requestToken()])\n .then(([connection, token]) => this._onConnected(connection, token))\n .catch((error) => this._onConnectFailed(error));\n }\n\n panTiltZoom(cameraId, params) {\n if (this._connectState === PtzConnectState.Connected) {\n this._doPtz(cameraId, params);\n } else {\n this._updatePending(cameraId, 'ptz', params);\n this._updatePending(cameraId, 'stop', null);\n this.startConnect();\n }\n }\n\n stop(cameraId) {\n if (this._connectState === PtzConnectState.Connected) {\n this._doStop(cameraId);\n } else {\n this._updatePending(cameraId, 'ptz', null);\n this._updatePending(cameraId, 'stop', true);\n }\n }\n\n autoFocus(cameraId, params) {\n return this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => {\n const allParams = {...params, ...this._config.params};\n return connection.apiGet(`cameras/${cameraId}/af`, {...this._config, params: allParams});\n })\n .then((response) => response.data.content)\n .catch((error) => log.warn(`Failed to auto-focus ${cameraId}: ${error}`));\n }\n\n setPreset(cameraId, preset) {\n return this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => connection.apiPost(`cameras/${cameraId}/ptz/setpreset?presetNumber=${preset}`, undefined, this._config))\n .then((response) => response.data.content)\n .catch((error) => log.warn(`Failed to set PTZ preset ${cameraId}/${preset}: ${error}`));\n }\n\n gotoPreset(cameraId, preset) {\n return this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => {\n if (typeof connection.apiPut === 'undefined') {\n throw new Error('nvrconnection does not implement `apiPut`');\n }\n return connection.apiPut(`cameras/${cameraId}/ptz/gotopreset/${preset}`, undefined, this._config);\n })\n .then((response) => response.data.content)\n .catch((error) => log.warn(`Failed to go to PTZ preset ${cameraId}/${preset}: ${error}`));\n }\n\n deletePreset(cameraId, preset) {\n return this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => {\n if (typeof connection.apiDelete === 'undefined') {\n throw new Error('nvrconnection does not implement `apiDelete`');\n }\n return connection.apiDelete(`cameras/${cameraId}/ptz/removepreset/${preset}`, this._config);\n })\n .then((response) => response.data.content)\n .catch((error) => log.warn(`Failed to delete PTZ preset ${cameraId}/${preset}: ${error}`));\n }\n\n gotoHome(cameraId) {\n return this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => {\n if (typeof connection.apiPut === 'undefined') {\n throw new Error('nvrconnection does not implement `apiPut`');\n }\n return connection.apiPut(`cameras/${cameraId}/ptz/gotohome`, undefined, this._config);\n })\n .then((response) => response.data.content)\n .catch((error) => log.warn(`Failed to go to home position for ${cameraId}: ${error}`));\n }\n\n showMenu(cameraId) {\n return this._nvrManager.getConnection(this._nvrInfo, Priority.High)\n .then((connection) => connection.apiGet(`cameras/${cameraId}/ptz/menu`, this._config))\n .then((response) => response.data.content)\n .catch((error) => log.warn(`Failed to open PTZ menu for ${cameraId}: ${error}`));\n }\n\n get panTiltPosition() {\n return null;\n }\n\n get fieldOfView() {\n return 0;\n }\n\n _onConnected(connection, token) {\n log.debug('Connected to OSP PTZ server');\n\n this._connectState = PtzConnectState.Connected;\n this._connection = connection;\n this._tokenInfo = token;\n\n this._connection.onDisconnect = this._onConnectionLost.bind(this);\n this._connection.onError = this._onConnectionLost.bind(this);\n\n this._pendingCommands.forEach((value, cameraId) => {\n if ('ptz' in value) {\n this._doPtz(cameraId, value['ptz']);\n } else if ('stop' in value) {\n this._doStop(cameraId);\n }\n });\n\n this._pendingCommands = new Map();\n }\n\n _onConnectFailed(error) {\n log.error(() => `Failed to connect to OSP PTZ server: ${error}`);\n this._connectState = PtzConnectState.NotConnected;\n }\n\n _onConnectionLost() {\n log.info('PTZ connection lost');\n this._connection = null;\n this._tokenInfo = null;\n this._connectState = PtzConnectState.NotConnected;\n this._cmdSequence = 0;\n }\n\n _updatePending(cameraId, command, params) {\n let cameraEntry = {};\n\n if (this._pendingCommands.has(cameraId)) {\n cameraEntry = this._pendingCommands.get(cameraId);\n } else {\n this._pendingCommands.set(cameraId, cameraEntry);\n }\n\n if (params === null) {\n delete cameraEntry[command];\n return;\n }\n\n if (typeof params === 'object' && command in cameraEntry) {\n cameraEntry[command] = {...cameraEntry[command], ...params};\n } else {\n cameraEntry[command] = params;\n }\n\n log.debug(() => `${cameraId}: Updated pending command ${command}: ${JSON.stringify(cameraEntry[command])}`);\n }\n\n _doPtz(cameraId, params) {\n if (!this._connection) {\n log.warn('_doPtz: No connection');\n return;\n }\n\n log.debug(() => `${cameraId}: Sending PTZ command: ${JSON.stringify(params)}`);\n\n const message = new OspControlMessage(Osp.Ptz.Move,\n Osp.MsgType.Notification, ++this._cmdSequence);\n\n message.args = {\n cameraId,\n bearerToken: this._tokenInfo.token,\n ...params,\n };\n\n this._connection.sendControl(message);\n }\n\n _doStop(cameraId) {\n if (!this._connection) {\n log.warn('_doStop: No connection');\n return;\n }\n\n log.debug(() => `${cameraId}: Sending stop command`);\n\n const message = new OspControlMessage(Osp.Ptz.Stop,\n Osp.MsgType.Notification, ++this._cmdSequence);\n\n message.args = {\n cameraId,\n bearerToken: this._tokenInfo.token,\n };\n\n this._connection.sendControl(message);\n }\n}\n\nexport {PtzConnectState};\n","const MIN_ZOOM_FOV = 55.0;\nconst MAX_ZOOM_FOV = 8.0;\nconst NUM_FOV_INCREMENTS = 10;\nconst FOV_INCREMENT = (MIN_ZOOM_FOV - MAX_ZOOM_FOV) / NUM_FOV_INCREMENTS;\n\n/**\n * Controller that overrides PtzController for Fisheye interactive dewarp\n */\nexport default class FisheyePtzController {\n constructor(displayPane) {\n this._displayPane = displayPane;\n }\n\n panTiltZoom(cameraId, params) {\n if ('pan' in params || 'tilt' in params) {\n this._displayPane.fisheyePanTiltSpeed = {\n 'pan': params['pan'] || 0,\n 'tilt': params['tilt'] || 0,\n };\n }\n\n if ('zoom' in params) {\n this._adjustZoom(params['zoom']);\n }\n }\n\n stop(cameraId) {\n this._displayPane.fisheyePanTiltSpeed = {'pan': 0, 'tilt': 0};\n }\n\n get panTiltPosition() {\n return this._displayPane.fisheyePanTilt;\n }\n\n get fieldOfView() {\n return this._displayPane.fisheyeFieldOfView;\n }\n\n autoFocus(cameraId, params) {\n // Do nothing; only here to match PtzController\n }\n\n setPreset(cameraId, preset) {\n // Do nothing; only here to match PtzController\n }\n\n gotoPreset(cameraId, preset) {\n // Do nothing; only here to match PtzController\n }\n\n deletePreset(cameraId, preset) {\n // Do nothing; only here to match PtzController\n }\n\n gotoHome(cameraId) {\n // Do nothing; only here to match PtzController\n }\n\n showMenu(cameraId) {\n // Do nothing; only here to match PtzController\n }\n\n _adjustZoom(zoom) {\n if (!zoom) {\n return;\n }\n\n let fieldOfView = this._displayPane.fisheyeFieldOfView;\n\n if (zoom > 0) {\n fieldOfView = Math.max(MAX_ZOOM_FOV, fieldOfView - FOV_INCREMENT);\n } else {\n fieldOfView = Math.min(MIN_ZOOM_FOV, fieldOfView + FOV_INCREMENT);\n }\n\n this._displayPane.fisheyeFieldOfView = fieldOfView;\n }\n}\n","import {Logger, Duration} from '@oecommon/plasma-js';\nimport {StreamTransportState, StreamTransportType} from '../defs';\n\nconst CACHE_DURATION_LIMIT = Duration.seconds(10);\n\nlet instanceNum = 0;\n\n/**\n * Wraps another StreamRetriever, providing caching logic to avoid repeatedly requesting the same\n * samples from the server when seeking within a short period of time (e.g. when frame stepping).\n */\nexport default class CachingStreamRetriever {\n constructor(reactor, baseRetriever) {\n this.log = new Logger('cachingretriever', ++instanceNum);\n\n this._reactor = reactor;\n this._baseRetriever = baseRetriever;\n this._cache = [];\n this._iframeCount = 0;\n this._replayIndex = -1;\n this._replayRestart = false;\n this._tracks = [];\n this._primaryTrackId = Infinity;\n this._isTranscoded = false;\n this._noMoreDataAfterCache = false;\n this._streamError = null;\n\n this.resetCallbacks();\n\n this._baseRetriever.onNewSection = this._handleNewSection.bind(this);\n this._baseRetriever.onTrackInfo = this._handleTrackInfo.bind(this);\n this._baseRetriever.onVideoInfo = this._handleVideoInfo.bind(this);\n this._baseRetriever.onAudioInfo = this._handleAudioInfo.bind(this);\n this._baseRetriever.onHeadersDone = this._handleHeadersDone.bind(this);\n this._baseRetriever.onSample = this._handleSample.bind(this);\n this._baseRetriever.onNoMoreData = this._handleNoMoreData.bind(this);\n this._baseRetriever.onError = this._handleError.bind(this);\n this._baseRetriever.onLiveStatus = this._handleLiveStatus.bind(this);\n this._baseRetriever.onTransportStateChange = this._handleTransportStateChange.bind(this);\n }\n\n resetCallbacks() {\n const noop = () => { };\n\n this.onNewSection = noop;\n this.onTrackInfo = noop;\n this.onVideoInfo = noop;\n this.onAudioInfo = noop;\n this.onHeadersDone = noop;\n this.onSample = noop;\n this.onNoMoreData = noop;\n this.onError = noop;\n this.onLiveStatus = noop;\n this.onTransportStateChange = noop;\n }\n\n /**\n * The token requester\n */\n set tokenRequester(value) {\n this._baseRetriever.tokenRequester = value;\n }\n\n get tokenRequester() {\n return this._baseRetriever.tokenRequester;\n }\n\n get transportState() {\n if (!this._baseRetriever) {\n return StreamTransportState.Idle;\n }\n return this._baseRetriever.transportState;\n }\n\n get transportType() {\n if (!this._baseRetriever) {\n return StreamTransportType.None;\n }\n return this._baseRetriever.transportType;\n }\n\n get transportInfo() {\n return this._baseRetriever.transportInfo;\n }\n\n get analyticTracksLiveEnabled() {\n return this._baseRetriever.analyticTracksLiveEnabled;\n }\n\n set analyticTracksLiveEnabled(value) {\n this._baseRetriever.analyticTracksLiveEnabled = value;\n }\n\n startLive() {\n this._resetCache();\n this._baseRetriever.startLive();\n }\n\n start(time, dir) {\n this.log.debug(() => `start(${time}, ${dir}): Cache range is ${this.cacheStartTime} - ${this.cacheEndTime}`);\n\n let index = -1;\n\n if (!this._iframes && this._cache.length && time.le(this.cacheEndTime)) {\n // Find the first I-frame before the specified time\n for (let i = 0; i < this._cache.length; ++i) {\n const sample = this._cache[i];\n\n if (sample.timestamp.gt(time)) {\n break;\n }\n\n if (sample.sampleInfo.isCleanPoint && sample.sampleInfo.trackId === this._primaryTrackId) {\n // Always begin from a clean sample on the primary track\n index = i;\n }\n }\n }\n\n if (index < 0) {\n this._resetCache();\n this._baseRetriever.start(time, dir);\n return;\n }\n\n this._replayIndex = index;\n this._replayRestart = true;\n this._scheduleProcessCache();\n }\n\n startIframes(time, dir, interval) {\n this._resetCache();\n this._baseRetriever.startIframes(time, dir, interval);\n }\n\n reset() {\n this._resetCache();\n this._baseRetriever.reset();\n this._baseRetriever.removeEventListeners();\n }\n\n unblock() {\n if (this._replayIndex >= 0) {\n this._scheduleProcessCache();\n } else {\n this._baseRetriever.unblock();\n }\n }\n\n addEventListener(type, listener) {\n this._baseRetriever.addEventListener(type, listener);\n }\n\n removeEventListener(type, listener) {\n this._baseRetriever.removeEventListener(type, listener);\n }\n\n /** Removes all event listeners */\n removeEventListeners() {\n this._baseRetriever.removeEventListeners();\n }\n\n get cacheStartTime() {\n if (!this._cache.length) {\n return null;\n }\n\n return this._cache[0].timestamp;\n }\n\n get cacheEndTime() {\n if (!this._cache.length) {\n return null;\n }\n\n return this._cache[this._cache.length - 1].timestamp;\n }\n\n _handleNewSection(isTranscoded) {\n this._resetCache();\n this._isTranscoded = isTranscoded;\n this.onNewSection(isTranscoded);\n }\n\n _handleTrackInfo(trackId, trackInfo) {\n // The primary track is always the lowest-numbered track in the stream. In\n // practice that means it's video (1) if that's available, otherwise audio (2).\n this._primaryTrackId = Math.min(this._primaryTrackId, trackId);\n this._tracks[trackId] = {trackInfo, videoInfo: null, audioInfo: null};\n this.onTrackInfo(trackId, trackInfo);\n }\n\n _handleVideoInfo(trackId, videoInfo) {\n if (trackId in this._tracks) {\n this._tracks[trackId].videoInfo = videoInfo;\n }\n\n this.onVideoInfo(trackId, videoInfo);\n }\n\n _handleAudioInfo(trackId, audioInfo) {\n if (trackId in this._tracks) {\n this._tracks[trackId].audioInfo = audioInfo;\n }\n\n this.onAudioInfo(trackId, audioInfo);\n }\n\n _handleHeadersDone() {\n this.onHeadersDone();\n }\n\n _handleSample(sample) {\n this._noMoreDataAfterCache = false;\n this._streamError = null;\n\n if (this._replayIndex >= 0) {\n // Block incoming samples while the cache is being replayed\n return false;\n }\n\n if (!this.onSample(sample)) {\n return false;\n }\n\n this._cache.push(sample);\n\n if (sample.sampleInfo.isCleanPoint) {\n ++this._iframeCount;\n this.log.debug(() => `Adding ${sample} to cache, now have ${this._iframeCount} I-frames`);\n }\n\n while (this._iframeCount > 1 && sample.timestamp.minus(this._cache[0].timestamp).ge(CACHE_DURATION_LIMIT)) {\n this.log.debug(() => `Pruning GOP starting from ${this._cache[0]}`);\n\n this._cache.shift();\n --this._iframeCount;\n\n while (!this._cache[0].sampleInfo.isCleanPoint) {\n this._cache.shift();\n }\n }\n\n return true;\n }\n\n _handleNoMoreData() {\n if (this._replayIndex >= 0) {\n this._noMoreDataAfterCache = true;\n } else {\n this.onNoMoreData();\n }\n }\n\n _handleError(streamError) {\n if (this._replayIndex >= 0) {\n this._streamError = streamError;\n } else {\n this.onError(streamError);\n }\n }\n\n _handleLiveStatus(isLive, liveTime) {\n this.onLiveStatus(isLive, liveTime);\n }\n\n _resetCache() {\n this._cache = [];\n this._iframeCount = 0;\n this._replayIndex = -1;\n this._tracks = [];\n this._noMoreDataAfterCache = false;\n this._streamError = null;\n }\n\n _scheduleProcessCache() {\n this._reactor.schedule(() => this._processCache());\n }\n\n _processCache() {\n if (this._replayIndex < 0) {\n return;\n }\n\n if (this._replayRestart) {\n this.log.debug('processCache: Sending section headers');\n\n this.onNewSection(this._isTranscoded);\n for (let trackId = 0; trackId < this._tracks.length; ++trackId) {\n if (this._tracks[trackId]) {\n const track = this._tracks[trackId];\n this.onTrackInfo(trackId, track.trackInfo);\n if (track.videoInfo) {\n this.onVideoInfo(trackId, track.videoInfo);\n }\n if (track.audioInfo) {\n this.onAudioInfo(trackId, track.audioInfo);\n }\n }\n }\n this.onHeadersDone();\n\n this._replayRestart = false;\n }\n\n const sample = this._cache[this._replayIndex];\n\n this.log.debug(() => `processCache: Sending sample ${this._replayIndex}: ${sample}`);\n\n if (!this.onSample(sample)) {\n this.log.debug(() => `processCache: Sample ${this._replayIndex} not handled`);\n return;\n }\n\n ++this._replayIndex;\n\n if (this._replayIndex >= this._cache.length) {\n this._replayIndex = -1;\n\n if (this._noMoreDataAfterCache) {\n this.log.debug('processCache: No more data after cache');\n this.onNoMoreData();\n } else if (this._streamError) {\n this.log.debug(() => `processCache: Stream error ${this._streamError}`);\n this.onError(this._streamError);\n } else {\n this.log.debug('processCache: Reached end of cache, unblocking base retriever');\n this._baseRetriever.unblock();\n }\n\n this._noMoreDataAfterCache = false;\n this._streamError = null;\n } else {\n this._scheduleProcessCache();\n }\n }\n\n _handleTransportStateChange() {\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n}\n","import {Logger} from '@oecommon/plasma-js';\nimport {StreamTransportState, StreamTransportType} from '../defs';\n\nlet instanceNum = 0;\n\n/**\n * Class responsible for attempting multiple concrete stream transport\n * types, and then delegating processing.\n */\nexport default class DynamicStreamTransport {\n constructor(nvrConnection, url, forcews, webSocketStreamTransportFactory, webRtcStreamTransportFactory) {\n this.log = new Logger('dynamicstreamtransport', ++instanceNum);\n this.onTransportStateChange = null;\n this._nvrConnection = nvrConnection;\n this._nvrLabel = nvrConnection ? nvrConnection.getHostname() : 'unknown';\n this._url = url;\n this._forcews = forcews || !nvrConnection.allowWebRTC() || false;\n this._webSocketStreamTransportFactory = webSocketStreamTransportFactory;\n this._webRtcStreamTransportFactory = webRtcStreamTransportFactory;\n this._streamTransport = null;\n this._transportType = StreamTransportType.None;\n this._transportState = StreamTransportState.Idle;\n this._webRtcStats = null;\n }\n\n get transportType() {\n return this._transportType;\n }\n\n get transportState() {\n return this._transportState;\n }\n\n getWebRtcStats() {\n if (this._webRtcStats) {\n return Promise.resolve(this._webRtcStats);\n }\n\n if (!this._streamTransport) {\n return Promise.reject(new Error('Transport not yet started'));\n }\n\n return this._streamTransport.getWebRtcStats();\n }\n\n get onopen() {\n return this._streamTransport.onopen;\n }\n\n set onopen(newVal) {\n this._streamTransport.onopen = newVal;\n }\n\n get onclose() {\n return this._streamTransport.onclose;\n }\n\n set onclose(newVal) {\n this._streamTransport.onclose = newVal;\n }\n\n get onerror() {\n return this._streamTransport.onerror;\n }\n\n set onerror(newVal) {\n this._streamTransport.onerror = newVal;\n }\n\n get onmessage() {\n return this._streamTransport.onmessage;\n }\n\n set onmessage(newVal) {\n this._streamTransport.onmessage = newVal;\n }\n\n /**\n * Begins the process of opening the stream transport.\n */\n async start() {\n this._webRtcStats = null;\n\n if (this._forcews) {\n this.log.debug('WebSocket stream transport used forcefully');\n await this._startNewStreamTransport(this._webSocketStreamTransportFactory);\n } else {\n try {\n this.log.debug('Attempting WebRTC stream transport');\n await this._startNewStreamTransport(this._webRtcStreamTransportFactory);\n } catch (e) {\n // WebRTC failed; get the connection stats before reporting the state change and falling\n // back to websockets.\n try {\n this._webRtcStats = await this._streamTransport.getWebRtcStats();\n } catch (statsError) {\n this.log.debug(`Failed to get WebRTC stats: ${statsError.message}`);\n }\n\n this._handleStreamTransportStateChange(this._streamTransport);\n\n this.log.debug(`Falling back to WebSocket stream transport. Error: ${e.message}`);\n await this._startNewStreamTransport(this._webSocketStreamTransportFactory);\n }\n }\n\n this.log.debug(`Transport started, type is ${this._streamTransport.transportType}`);\n\n // Register the transport state change handler now that it has finished starting, and\n // call it once to bring observers up to date\n this._streamTransport.onTransportStateChange = () => {\n this._handleStreamTransportStateChange(this._streamTransport);\n };\n\n this._handleStreamTransportStateChange(this._streamTransport);\n }\n\n /**\n * Sends a message over the stream transport.\n */\n send(data) {\n this._streamTransport.send(data);\n }\n\n /**\n * Closes the stream transport.\n */\n close(code, reason) {\n this._streamTransport.close(code, reason);\n }\n\n _handleStreamTransportStateChange(streamTransport) {\n const typeChanged = this._transportType !== streamTransport.transportType;\n const stateChanged = this._transportState !== streamTransport.transportState;\n if (!typeChanged && !stateChanged) {\n return;\n }\n\n if (typeChanged) {\n this.log.debug(`Transport type changing from ${this._transportType} to ${streamTransport.transportType}`);\n }\n this._transportType = streamTransport.transportType;\n\n if (stateChanged) {\n this.log.debug(`Transport state changing from ${this._transportState} to ${streamTransport.transportState}`);\n }\n this._transportState = streamTransport.transportState;\n\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n\n /**\n * Helper method to create a concrete stream transport instance, attach\n * a handler for stream transport changes, and start the stream transport\n */\n _startNewStreamTransport(factory) {\n this._streamTransport = factory.create(this._nvrConnection, this._url);\n return this._streamTransport.start();\n }\n}\n","import DynamicStreamTransport from './dynamicstreamtransport';\n\nexport default class DynamicStreamTransportFactory {\n constructor(webSocketStreamTransportFactory, webRtcStreamTransportFactory) {\n this._webSocketStreamTransportFactory = webSocketStreamTransportFactory;\n this._webRtcStreamTransportFactory = webRtcStreamTransportFactory;\n }\n\n create(nvrConnection, url, forcews) {\n return new DynamicStreamTransport(\n nvrConnection,\n url,\n forcews,\n this._webSocketStreamTransportFactory,\n this._webRtcStreamTransportFactory,\n );\n }\n}\n","export class MediaStreamElementMetadata {\n /**\n * The metadata object for the `MediaStreamElement`\n *\n * @param {number} trackId The track id of the stream\n * @param {TrackInfo} trackInfo The track info of the stream\n * @param {AudioInfo} audioInfo The audio info of the stream\n */\n constructor(trackId, trackInfo, audioInfo) {\n this.trackId = trackId;\n this.trackInfo = trackInfo;\n this.audioInfo = audioInfo;\n }\n}\n\nexport default class MediaStreamElement {\n /**\n * The wrapper object for the `MediaSample`\n *\n * @param {MediaSample} sample The `MediaSample` containing the audio data to be streamed\n * @param {*} prevClean\n * @param {*} dataOffset\n */\n constructor(sample, prevClean, dataOffset) {\n this.sample = sample;\n this.prevClean = prevClean;\n this.dataOffset = dataOffset;\n this._metadata = undefined;\n }\n\n /**\n * Attaches a `MediaStreamElementMetadata` to the `MediaStreamElement`\n *\n * @param {MediaStreamElementMetadata} value The `MediaStreamElementMetadata` to attach to this `MediaStreamElement`\n */\n set metadata(value) {\n this._metadata = value;\n }\n\n /**\n * Returns the `MediaStreamElementMetadata` if it exists\n */\n get metadata() {\n return this._metadata;\n }\n}\n","import {MediaType, CodecType, AudioStreamingState} from '../defs';\nimport {AudioInfo, TrackInfo} from '../media/trackinfo';\nimport {Logger, Instant} from '@oecommon/plasma-js';\nimport MediaSample from '../media/mediasample';\nimport MediaStreamElement, {MediaStreamElementMetadata} from './../media/mediastreamelement';\n\nconst AUDIO_CHANNEL_COUNT = 1;\nconst AUDIO_BITS_PER_SAMPLE = 16;\n\nlet instanceNum = 0;\n\n/**\n * Class responsible for converting PCM 16 LE audio data to `MediaSample`s\n * and sending them to the recorder/camera via the backchannel connection\n */\nexport default class AudioStreamer {\n constructor(reactor, connector) {\n this._reactor = reactor;\n this._connector = connector;\n this._streamingState = AudioStreamingState.Idle;\n this._metadataSent = false;\n this._readyCallback = null;\n this._errorCallback = null;\n this._requestQueue = [];\n this.log = new Logger('audiostreamer', ++instanceNum);\n }\n\n get streamingState() {\n return this._streamingState;\n }\n\n /**\n * Attempts to establish the backchannel connection to the recorder/camera\n *\n * @param {Function} readyCallback Called if the backchannel connection succeeds\n * @param {Function} errorCallback Called if the backchannel connection fails\n */\n start(readyCallback, errorCallback) {\n this.log.debug(`Starting audio streaming for ${this._connector.cameraId}`);\n this._readyCallback = readyCallback;\n this._errorCallback = errorCallback;\n\n this._connector.onReady = this._handleBackchannelReady.bind(this);\n this._connector.onError = this._handleStreamError.bind(this);\n this._connector.start();\n\n this._changeStreamingState(AudioStreamingState.Connecting);\n }\n\n /**\n * Closes the backchannel connection to the recorder/camera\n */\n stop() {\n this.log.debug(`Stopping audio streaming for ${this._connector.cameraId}`);\n this._changeStreamingState(AudioStreamingState.Idle);\n\n if (this._metadataSent) {\n this._closeStream();\n }\n\n this._readyCallback = null;\n this._errorCallback = null;\n\n this._connector.reset();\n\n this._metadataSent = false;\n }\n\n /**\n * Packages the provided PCM 16 LE audio data in to a `MediaSample`\n * and sends it to the recorder/camera via the backchannel connection\n *\n * @param {Int16Array} pcm16 PCM 16 LE audio data contained in an Int16Array\n * @param {number} sampleRate The sample rate of the PCM 16 LE audio data, should typically be 8000Hz\n */\n streamAudio(pcm16, sampleRate) {\n if (this._streamingState !== AudioStreamingState.Streaming) {\n this.log.warn('Cannot stream audio, stream not started');\n return;\n }\n\n const trackId = 0;\n const sample = this._createMediaSample(trackId, pcm16);\n const element = this._createMediaStreamElement(sample);\n\n if (!this._metadataSent) {\n element.metadata = this._createMediaStreamElementMetadata(trackId, sampleRate);\n this.log.debug(() => `Sending metadata: ${this._formatMetadataLog(element.metadata)}`);\n this._metadataSent = true;\n }\n\n this._enqueueMediaStreamElement(element);\n }\n\n /**\n * Called if the backchannel connection to the recorder/camera fails\n */\n _handleStreamError(error) {\n this.log.error(() => `Stream error received, ${error}`);\n this._changeStreamingState(AudioStreamingState.Error);\n if (this._errorCallback) {\n this._errorCallback(error);\n }\n }\n\n /**\n * Called if the backchannel connection to the recorder/camera succeeds\n */\n _handleBackchannelReady() {\n this.log.debug(() => `Backchannel connection ready`);\n this._changeStreamingState(AudioStreamingState.Streaming);\n if (this._readyCallback) {\n this._readyCallback();\n }\n }\n\n /**\n * Updates the current streaming state\n */\n _changeStreamingState(streamingState) {\n this.log.debug(() => `Streaming state changing from ${this._streamingState} to ${streamingState}`);\n this._streamingState = streamingState;\n }\n\n /**\n * Helper method for creating a `MediaSample`\n */\n _createMediaSample(trackId, pcm16) {\n const instant = Instant.now();\n const sampleInfo = {\n trackId,\n timestamp: instant,\n sourceTimestamp: instant,\n rtpTimestamp: 0,\n isCleanPoint: false,\n isEndOfFrame: true,\n isCatchUp: false,\n };\n\n return new MediaSample(sampleInfo, pcm16);\n }\n\n /**\n * Helper method for creating a `MediaStreamElement`\n */\n _createMediaStreamElement(mediaSample) {\n return new MediaStreamElement(mediaSample, null, null);\n }\n\n /**\n * Helper method for creating a MediaStreamElement's Metadata\n */\n _createMediaStreamElementMetadata(trackId, sampleRate) {\n const trackInfo = new TrackInfo(MediaType.Audio, CodecType.PCM_S16LE, sampleRate);\n const audioInfo = new AudioInfo(sampleRate, AUDIO_CHANNEL_COUNT, AUDIO_BITS_PER_SAMPLE);\n return new MediaStreamElementMetadata(trackId, trackInfo, audioInfo);\n }\n\n /**\n * Helper method for formatting and logging a MediaStreamElement's Metadata\n */\n _formatMetadataLog(metadata) {\n if (!metadata) {\n return '';\n }\n\n const {trackId, trackInfo, audioInfo} = metadata;\n return `TrackId = ${trackId}, ` +\n `TrackInfo(${trackInfo.mediaType}/${trackInfo.codecType}/${trackInfo.rtpClockRate}), ` +\n `AudioInfo(${audioInfo.sampleRate}/${audioInfo.numChannels}/${audioInfo.bitsPerSample})`;\n }\n\n /**\n * Ends the backchannel connection\n */\n _closeStream() {\n const element = {}; // send an empty `MediaStreamElement` to signify the end of stream\n this._enqueueMediaStreamElement(element);\n this.log.debug(`Closing stream`);\n }\n\n /**\n * Queues a `MediaStreamElement` to be sent to the recorder/camera via the backchannel connection and\n * schedules for the queue to be processed\n *\n * @param {*} element `MediaStreamElement` to be sent to the recorder/camera via the backchannel connection\n */\n _enqueueMediaStreamElement(element) {\n if (this._connector) {\n this.log.spam(() => `enqueued sample: ${element.sample} metadata: ${this._formatMetadataLog(element.metadata)}`);\n this._requestQueue.push(element);\n this._reactor.schedule(() => this._processRequestQueue());\n }\n }\n\n /**\n * Processes the `MediaStreamElement` queue and sends the data to the backchannel connection using FIFO\n */\n _processRequestQueue() {\n while (this._requestQueue.length > 0) {\n const front = this._requestQueue.shift();\n this._connector.send(front);\n }\n }\n}\n","/**\n * Class responsible for resampling audio data\n */\nexport default class AudioResampler {\n /**\n * Naive resampling implementation that converts audio data to mono (if necessary)\n * and then omits samples in order to get to from the original sample rate to the\n * requested sample rate.\n */\n convertToMonoAndResampleWithOmit(audioData, channelCount, originalSampleRate, requestedSampleRate) {\n const monoAudioData = channelCount === 1\n ? audioData\n : this._convertMultiChannelToMono(audioData, channelCount);\n return this._resampleOmit(monoAudioData, originalSampleRate, requestedSampleRate);\n }\n\n /**\n * Naive mixing implementation that sums the sample values of all channels\n * and takes the average to convert from multiple channels to mono (one).\n */\n _convertMultiChannelToMono(multiChannelAudioData, channelCount) {\n const monoLength = Math.round(multiChannelAudioData.length / channelCount);\n const monoAudioData = new Int16Array(monoLength);\n let monoIndex = 0;\n let data = 0;\n let j = 0;\n for (let i = 0; i < multiChannelAudioData.length; i += channelCount) {\n data = 0;\n j = 0;\n while (j < channelCount && i + j < multiChannelAudioData.length) {\n data += multiChannelAudioData[i + j++] / channelCount;\n }\n monoAudioData[monoIndex++] = data;\n }\n return monoAudioData;\n }\n\n /**\n * Naive resampling implementation that determines the ratio between the\n * original sample rate and the requested sample rate, then omits audio\n * samples accordingly in order to get to the lower sample rate.\n */\n _resampleOmit(monoAudioData, originalSampleRate, requestedSampleRate) {\n if (originalSampleRate < requestedSampleRate) {\n throw new Error('Can only resample a higher sample rate to a lower sample rate');\n }\n\n const resampledRatio = originalSampleRate / requestedSampleRate;\n const resampledLength = Math.round(monoAudioData.length / resampledRatio);\n const resampledAudioData = new Int16Array(resampledLength);\n let resampledIndex = 0;\n\n for (let i = 0; i < resampledLength; i++) {\n resampledAudioData[i] = monoAudioData[Math.floor(resampledIndex)];\n resampledIndex += resampledRatio;\n }\n\n return resampledAudioData;\n }\n}\n","import {BasicEvent, EventTarget, Logger} from '@oecommon/plasma-js';\nimport {OscarEvents, AudioRecordingState} from '../defs';\n\nconst RECORDER_SAMPLE_RATE = 8000;\n\nconst MILLIS_IN_ONE_SECOND = 1000;\nconst DEFAULT_RECORDING_TIMESLICE_MILLIS = 128;\n\nconst TIMESLICE_TO_SAMPLE_RATE_FACTOR = MILLIS_IN_ONE_SECOND / DEFAULT_RECORDING_TIMESLICE_MILLIS;\n\nlet instanceNum = 0;\n\n/**\n * Class responsible for recording audio through the browser. Ensures that the user\n * has provided the appropriate permissions to a recording device, or throws an error\n * detailing why. Audio data is resampled to ensure it is sent to the recorder at the\n * appropriate sample rate.\n */\nexport default class AudioRecorder extends EventTarget {\n constructor(oscarFactory, audioResampler, navigatorService, mediaRecorderFactory) {\n super();\n this._oscarFactory = oscarFactory;\n this._audioResampler = audioResampler;\n this._navigatorService = navigatorService;\n this._mediaRecorderFactory = mediaRecorderFactory;\n this._recordingTimesliceMillis = DEFAULT_RECORDING_TIMESLICE_MILLIS;\n this._mediaStream = null;\n this._mediaRecorder = null;\n this._audioStreamer = null;\n this._recordingState = AudioRecordingState.Idle;\n this.log = new Logger('audiorecorder', ++instanceNum);\n }\n\n get recordingState() {\n return this._recordingState;\n }\n\n set recordingTimesliceMillis(value) {\n this._recordingTimesliceMillis = value;\n }\n\n /**\n * Uses the brower permission api to get access to a recording device.\n *\n * @returns `true` if the user has granted permission, otherwise throws an error\n */\n async requestPermission() {\n try {\n this.log.debug('Requesting audio permission');\n const constraints = await this._getUserMediaConstraints();\n await this._navigatorService.requestMediaPermissions(constraints);\n return true;\n } catch (error) {\n this.log.error(`Audio permission denied, reason: ${error.type}, ${error.message}`);\n throw error;\n }\n }\n\n /**\n * Begins the process of recording audio and sending it to the provided camera\n */\n async start(camera) {\n try {\n this.log.debug(`Configuring audio recording start ${camera.id}`);\n this._changeRecordingStateAndNotify(AudioRecordingState.Connecting);\n\n this._mediaStream = await this._getMediaStream();\n this._mediaRecorder = this._getMediaRecorder();\n this._audioStreamer = this._oscarFactory.createAudioStreamer(camera.nvrInfo, camera.id);\n this._audioStreamer.start(this._beginRecording.bind(this), this._onBackchannelError.bind(this));\n } catch (error) {\n this._changeRecordingStateAndNotify(AudioRecordingState.Error);\n this.log.error(`Failed to begin audio recording ${error}`);\n }\n }\n\n /**\n * Ends the currently in progress recording\n */\n stop() {\n if (this._recordingState === AudioRecordingState.Idle) {\n this.log.info('Must be Connecting or Connected in order to stop');\n return;\n }\n this._endRecording();\n this._changeRecordingStateAndNotify(AudioRecordingState.Idle);\n }\n\n /**\n * Updates the current recording state and dispatches a `OscarEvents.StateChange` event\n */\n _changeRecordingStateAndNotify(recordingState) {\n this.log.debug(() => `Recording state changing from ${this._recordingState} to ${recordingState}`);\n this._recordingState = recordingState;\n this.dispatchEventAsync(new BasicEvent(OscarEvents.StateChange));\n }\n\n /**\n * Called after the backchannel connection to the recorder/camera has been established. Begins\n * the actual audio recording from the browser recording device. This sets the recording icon\n * on the browser tab.\n */\n _beginRecording() {\n try {\n this.log.debug('Beginning audio recording');\n this._mediaRecorder.start(this._recordingTimesliceMillis);\n this._changeRecordingStateAndNotify(AudioRecordingState.Recording);\n } catch (error) {\n this.log.error(() => `Error occurred while beginning audio recording ${error}`);\n this._changeRecordingStateAndNotify(AudioRecordingState.Error);\n }\n }\n\n /**\n * Stops the audio recording on the browser recording device and closes the backchannel\n * connection to the recorder/camera. This removes the recording icon on the browser tab.\n */\n _endRecording() {\n this.log.debug('Ending audio recording');\n if (this._audioStreamer) {\n this._audioStreamer.stop();\n }\n\n if (this._mediaRecorder) {\n this._mediaRecorder.stop();\n }\n\n if (this._mediaStream) {\n this._mediaStream.getTracks().forEach((track) => {\n // this is required in order to remove the red\n // recording icon from the browser tab\n track.stop();\n track.enabled = false;\n });\n }\n\n this._mediaStream = null;\n this._mediaRecorder = null;\n this._audioStreamer = null;\n }\n\n /**\n * Called if the backchannel connection to the recorder/camera fails\n */\n _onBackchannelError() {\n this.log.error(`Backchannel error prevented audio recording`);\n this._endRecording();\n this._changeRecordingStateAndNotify(AudioRecordingState.Error);\n }\n\n /**\n * Helper method to create, configure, and return the `MediaRecorder`. Captures the recorded\n * audio as `wav`, which can be treated as `PCM 16 LE`. This audio is then resampled from the\n * recording device's sample rate (typically 48000Hz) to the sample rate required by the\n * recorder (8000Hz). After resampling, the audio is streamed to the recorder/camera through the\n * backchannel connection via the `AudioStreamer`.\n */\n _getMediaRecorder() {\n const mediaRecorder = this._mediaRecorderFactory.createMediaRecorder(this._mediaStream, {mimeType: 'audio/wav'});\n const channelCount = this._navigatorService.getMediaStreamChannelCount(this._mediaStream);\n\n mediaRecorder.ondataavailable = async (e) => {\n if (mediaRecorder.state !== 'recording') {\n return;\n }\n\n const arrayBuffer = await e.data.arrayBuffer();\n const deviceSampleRateBytes = new Int16Array(arrayBuffer);\n const deviceSampleRate = (deviceSampleRateBytes.length * TIMESLICE_TO_SAMPLE_RATE_FACTOR) / channelCount;\n const recorderSampleRateBytes = this._audioResampler.convertToMonoAndResampleWithOmit(\n deviceSampleRateBytes, channelCount, deviceSampleRate, RECORDER_SAMPLE_RATE);\n this.log.spam(() => [\n `Audio recording data available`,\n `channel count ${channelCount}`,\n `${deviceSampleRateBytes.byteLength} original bytes at ${deviceSampleRate}Hz`,\n `${recorderSampleRateBytes.byteLength} resampled bytes at ${RECORDER_SAMPLE_RATE}Hz`,\n ].join(', '));\n\n if (this._audioStreamer) {\n this._audioStreamer.streamAudio(recorderSampleRateBytes, RECORDER_SAMPLE_RATE);\n }\n };\n\n return mediaRecorder;\n }\n\n /**\n * Helper method to create, configure, and return the `MediaStream`. Streams the audio from\n * the browser recording device.\n */\n async _getMediaStream() {\n const constraints = this._getUserMediaConstraints();\n const mediaStream = await this._navigatorService.getUserMedia(constraints);\n return mediaStream;\n }\n\n /**\n * Returns the constraints for the user media. This is used to return the `MediaStream` of\n * the default recording device. We only request an audio stream. We use `audio: true`\n * which will use the default recording device.\n */\n _getUserMediaConstraints() {\n const constraints = {\n audio: true,\n video: false,\n };\n\n return constraints;\n }\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import {MediaRecorder, register} from 'extendable-media-recorder';\nimport {connect} from 'extendable-media-recorder-wav-encoder';\n\n(async () => {\n await register(await connect());\n})();\n\nexport default class MediaRecorderFactory {\n createMediaRecorder(mediaStream, options) {\n return new MediaRecorder(mediaStream, options);\n }\n}\n","/* global Promise */\n\nimport axios from 'axios';\n\n/**\n * Requests a stream token from a remote recorder using HTTP\n */\nexport default class RemoteHttpStreamTokenRequester {\n constructor(cameraId, host, username, password, adcRelayToken) {\n this._cameraId = cameraId;\n this._host = host;\n this._auth = {username, password};\n this._adcRelayToken = adcRelayToken;\n }\n\n /**\n * Requests a token\n *\n * @return {Promise} Promise that will return the token info or throw an error\n */\n requestStreamToken() {\n const auth = this._auth;\n return new Promise((resolve, reject) => {\n axios({\n method: 'get',\n url: `https://${this._host}/api/cameras/${this._cameraId}/gettoken` \n + (this._adcRelayToken ? `?adcRelayToken=${encodeURIComponent(this._adcRelayToken)}` : ''),\n auth,\n })\n .then((response) => resolve(response.data.content))\n .catch((error) => reject(error));\n });\n }\n}\n","/**\n * Linked-list based queue implementation\n * Credit: https://codereview.stackexchange.com/a/255758\n */\nexport default class Queue {\n constructor() {\n this._head = undefined;\n this._tail = undefined;\n this._size = 0;\n }\n\n /**\n * The count of items currently in the queue\n */\n size() {\n return this._size;\n }\n\n /**\n * Whether the queue has no items\n */\n isEmpty() {\n return !this._head;\n }\n\n /**\n * Adds one or more items to the end of the queue\n */\n enqueue(...values) {\n const len = values.length;\n for (let i = 0; i < len; ++i) {\n const value = values[i];\n const link = {value, next: undefined};\n if (!this._head) {\n this._head = link;\n this._tail = this._head;\n } else {\n this._tail.next = link;\n this._tail = this._tail.next;\n }\n }\n this._size += len;\n }\n\n /**\n * Removes the first item from the queue\n */\n dequeue() {\n if (!this._head) {\n return undefined;\n }\n\n const value = this._head.value;\n this._head = this._head.next;\n this._size -= 1;\n if (!this._head) {\n this._tail = undefined;\n }\n\n return value;\n }\n\n /**\n * Returns the first item from the queue without removing it\n */\n peek() {\n if (!this._head) {\n return undefined;\n }\n return this._head.value;\n }\n\n /**\n * Empties the queue without returning anything\n */\n clear() {\n this._head = undefined;\n this._tail = undefined;\n this._size = 0;\n }\n}\n","/**\n * Represents a unit of analytics data\n *\n * @class\n *\n * @param {Instant} timestamp The timestamp of the data\n * @param {Object} data The data (decoded from JSON)\n */\nexport default class AnalyticsData {\n constructor(timestamp, data) {\n this.timestamp = timestamp;\n this.data = data || null;\n }\n\n toString() {\n return `${this.timestamp}: ${JSON.stringify(this.data)}`;\n }\n}\n","import {Duration, Instant, Logger, Timer} from '@oecommon/plasma-js';\nimport {BoundingBoxEventCommand, CodecType} from '../defs';\nimport Queue from '../util/queue';\nimport AnalyticsData from '../media/analyticsdata';\n\nlet instanceNum = 0;\n\n/**\n * At most, we receive 5 bounding boxes per second (ie. one every 200ms). We only\n * notify the DisplayPane if the bounding box should be drawn relative to the current\n * playback time plus a 50% of the threshold. Can be overriden from a local storage\n * value.\n */\nexport const BBOX_MS_TRESHOLD =\n Duration.milliseconds(\n Number(\n (typeof localStorage !== 'undefined' && localStorage.getItem('oeconfig:bboxmsthreshold'))\n || (200 * 1.5)\n )\n );\n\n/**\n * Frequency with which to process the event queue. In general, we process events\n * as they arrive, but there is a ~1 second buffer. This queue check mainly helps\n * ensure that events sitting in the queue are still dispatched even if no new\n * events are received while they are in the buffer but ready to be drawn.\n */\nconst QUEUE_PROCESS_FREQUENCY =\n Duration.milliseconds(\n Number((typeof localStorage !== 'undefined' && localStorage.getItem('oeconfig:bboxmsfreq')) || 220));\n\n/**\n * Helper function for restoring event timestamps as `Instant`s instead of numbers\n */\nfunction reviver(key, value) {\n if (key === 'timestamp') {\n return new Instant(value._value);\n }\n return value;\n}\n\n/**\n * Allows a hardcoded set of custom bounding boxes to be dispatched for debugging\n */\nconst MOCK_BBOXES =\n typeof localStorage !== 'undefined' ? JSON.parse(localStorage.getItem('oeconfig:bboxes') || '[]', reviver) : [];\n\n/**\n * The amount of time that must elapse without a tracklet having been used in order\n * for it to be considered stale\n */\nconst STALE_TRACKLET_THRESHOLD_DURATION = Duration.minutes(2);\n\n/**\n * State used to describe how an event should be treated based on its timestamp\n * relative to the display pane's current render time.\n */\nexport const EventEvaluation = {\n /**\n * Event is \"too old\". If playing forwards, this is in the past.\n * If playing backwards, this is in the future.\n */\n Discard: 0,\n /**\n * Event is within the `BBOX_MS_TRESHOLD`. If playing forwards,\n * this is in the very near future. If playing backwards, this\n * is in the very recent past.\n */\n Dispatch: 1,\n /**\n * Event is \"too new\". If playing forwards, this is more than\n * `BBOX_MS_TRESHOLD` in the future. If playing backwards, this\n * is more than `BBOX_MS_TRESHOLD` in the past.\n */\n Keep: 2,\n};\n\n/**\n * Class responsible for notifying the provided DisplayPane when a bounding box\n * is available and should be drawn above the video element.\n */\nexport default class MetadataController {\n constructor(displayPane, reactor) {\n this.log = new Logger('metadatacontroller', ++instanceNum);\n this._displayPane = displayPane;\n this._showBoundingBoxes = false;\n this._tracklets = new Map(); // map of [target, {tracklet, lastUsed}]\n this._recentBoundingBoxes = new Queue();\n this._speed = 0;\n this._paused = false;\n this._playbackTime = Instant.negativeInfinity;\n this._timer = new Timer(reactor);\n this._textDecoder = new TextDecoder();\n }\n\n get camera() {\n return this._displayPane.currentCamera;\n }\n\n get displayPane() {\n return this._displayPane;\n }\n\n set displayPane(value) {\n this._displayPane = value;\n }\n\n get showBoundingBoxes() {\n return this._showBoundingBoxes;\n }\n\n set showBoundingBoxes(value) {\n if (value === this._showBoundingBoxes) {\n return;\n }\n\n this.log.debug(() => `Setting showBoundingBoxes to ${value}`);\n this._showBoundingBoxes = value;\n this._recentBoundingBoxes.clear();\n this._handleQueueTimer(value && !this._paused);\n }\n\n get tracklets() {\n return this._tracklets;\n }\n\n startLive() {\n // prevent stale bboxes from being displayed\n this._recentBoundingBoxes.clear();\n // don't reuse tracklets from recorded video, they are likely incorrect even if the targets match\n this._tracklets.clear();\n\n this._paused = false;\n const shouldResume = this._showBoundingBoxes && !this._paused;\n this.log.debug(`Starting live, ${shouldResume ? '' : 'not '}resuming queue timer`);\n this._handleQueueTimer(shouldResume);\n }\n\n stop(tearDown) {\n this.log.debug(`Stopping, tear down ${tearDown}`);\n if (tearDown) {\n this._recentBoundingBoxes.clear();\n }\n this._handleQueueTimer(false);\n }\n\n suspend() {\n this.log.debug(`Suspending queue timer`);\n this._handleQueueTimer(false);\n }\n\n resume() {\n const shouldResume = this._showBoundingBoxes && !this._paused;\n this.log.debug(() => `${shouldResume ? 'Resuming' : 'Not resuming'} queue timer`);\n this._handleQueueTimer(shouldResume);\n }\n\n clear() {\n this._recentBoundingBoxes.clear();\n this._tracklets.clear();\n }\n\n /**\n * When playback state changes, we potentially clear recent bounding boxes,\n * and store the new state so that it can be compared against future changes.\n */\n handlePlaybackChange(newPlaybackState) {\n const {speed, paused, playbackTime} = newPlaybackState;\n\n const pausedChanged = paused != null && paused !== this._paused;\n const speedDirectionChanged = speed != null && Math.sign(speed) !== Math.sign(this._speed);\n const playbackTimeChanged = playbackTime != null && !playbackTime.equals(this._playbackTime);\n\n if (pausedChanged) {\n this.log.debug(`pause changed`);\n this._handleQueueTimer(this._showBoundingBoxes && !paused);\n }\n\n if (playbackTimeChanged) {\n const jumpedBackward = this._displayPane.renderTime ? playbackTime.lt(this._displayPane.renderTime) : true;\n if (jumpedBackward) {\n this.log.debug(`playbacktime jumped backward`);\n this._recentBoundingBoxes.clear();\n }\n\n if (this._paused) {\n // If we were already paused, and playbackTime is changing, we need to\n // clear all bounding boxes from the screen, otherwise they will remain\n // when the background changes, leading to invalid ui\n this.log.debug(`dispatching clear all`);\n const event = this._createEvent(BoundingBoxEventCommand.ClearAll);\n this._displayPane.onBoundingBox(event);\n }\n }\n\n if (speedDirectionChanged || playbackTimeChanged) {\n this.log.debug(() => `Resetting recent bounding boxes: ${\n [\n speedDirectionChanged && 'speed direction',\n playbackTimeChanged && 'playbackTime',\n ].filter((x) => !!x).join(', ')\n } changed`);\n this._processQueue();\n }\n\n for (let i = 0; i < MOCK_BBOXES.length; ++i) {\n this._recentBoundingBoxes.enqueue({boundingBox: MOCK_BBOXES[i]});\n }\n\n if (speed != null) {\n this._speed = speed;\n }\n if (paused != null) {\n this._paused = paused;\n }\n if (playbackTime != null) {\n this._playbackTime = playbackTime;\n }\n }\n\n /**\n * Handles a sample containing analytics data\n */\n handleSample(sample, codecType) {\n const dataString = this._textDecoder.decode(sample.data);\n const analyticsData = new AnalyticsData(sample.timestamp, JSON.parse(dataString));\n\n if (codecType === CodecType.TrackletMetadata) {\n this._handleTracklet(analyticsData);\n } else if (codecType === CodecType.BoundingBoxMetadata) {\n this._handleBoundingBox(analyticsData);\n } else {\n this.log.debug(`Unrecognized analytics type ${codecType}`);\n }\n }\n\n /**\n * When a tracklet arrives, store it based on its target to that it can later\n * be attached to bounding boxes with the same target\n */\n _handleTracklet(tracklet) {\n this.log.spam(() => `Received tracklet ${JSON.stringify(tracklet)}`);\n const {target} = tracklet.data;\n const data = {tracklet, lastUsed: Instant.now()};\n\n this._tracklets.set(target, data);\n this.log.debug(() => `For target '${target}', saved tracklet with data ${JSON.stringify(data)}`);\n }\n\n /**\n * When a bounding box arrives, conditionally queue it depending on whether or not\n * we are currently configured to show bounding boxes.\n */\n _handleBoundingBox(boundingBox) {\n const {target} = boundingBox.data;\n if (!this._showBoundingBoxes) {\n this.log.spam(() => `Received bounding box for target '${target}', but show bounding boxes is disabled`);\n return;\n }\n\n const data = this._tracklets.get(target);\n const event = this._createEvent(BoundingBoxEventCommand.Draw, boundingBox, data);\n this._recentBoundingBoxes.enqueue(event);\n this.log.debug(() => [\n `Received bounding box for target '${target}' with timestamp '${boundingBox.timestamp.toString()}',`,\n `current render time is '${this._displayPane.renderTime.toString()}'`,\n ].join(' '));\n this._processQueue();\n }\n\n /**\n * Creates a bounding box event in a standard format\n */\n _createEvent(command, boundingBox, data) {\n const {tracklet} = data || {};\n const type = tracklet ? tracklet.data.type : 'unknown';\n return {\n command,\n boundingBox,\n tracklet,\n type,\n };\n }\n\n /**\n * Starts or stops a timer that processes the recent bounding boxes queue\n */\n _handleQueueTimer(start) {\n if (start === true) {\n this.log.debug(() => `Starting queue timer with interval of '${QUEUE_PROCESS_FREQUENCY.toString()}'`);\n this._timer.set(QUEUE_PROCESS_FREQUENCY, this._onTimer.bind(this), true);\n } else if (this._timer.isSet) {\n this.log.debug(() => `Ending queue timer`);\n this._timer.kill();\n }\n }\n\n /**\n * Helper function for returning the difference between the current display pane\n * render time and an event time\n */\n _getDirectedTimeDifference(renderTime, eventTime, playingBackwards) {\n return playingBackwards ? eventTime.minus(renderTime) : renderTime.minus(eventTime);\n }\n\n /**\n * Helper function for determing how an event should be handled based on its\n * event time relative to the current render time\n */\n _evaluateEvent(threshold, renderTime, eventTime, playingBackwards) {\n const diff = this._getDirectedTimeDifference(renderTime, eventTime, playingBackwards);\n const halfThreshold = threshold.dividedBy(2);\n if (diff.gt(halfThreshold)) {\n return EventEvaluation.Discard;\n }\n\n if (diff.ge(halfThreshold.negate())) {\n return EventEvaluation.Dispatch;\n }\n\n return EventEvaluation.Keep;\n }\n\n /**\n * Executes tasks that must be done periodically\n */\n _onTimer() {\n this._processQueue();\n this._pruneTracklets();\n }\n\n /**\n * Determines whether or not video is playing in reverse\n */\n _isPlayingBackwards() {\n if (!this._displayPane.streamController) {\n return false;\n }\n if (!this._displayPane.streamController.renderClock) {\n return false;\n }\n return this._displayPane.streamController.renderClock.speed < 0;\n }\n\n /**\n * Processes the current queue by discarding, dispatching, and keeping events\n * based on the display pane's current render time\n */\n _processQueue() {\n const renderTime = this._displayPane.renderTime;\n if (!renderTime) {\n return;\n }\n\n const playingBackwards = this._isPlayingBackwards();\n let event = null;\n let target = null;\n let eventTime = 0;\n let evaluation = null;\n const now = Instant.now();\n\n while (!this._recentBoundingBoxes.isEmpty()) {\n event = this._recentBoundingBoxes.peek();\n target = event.boundingBox.data.target;\n eventTime = event.boundingBox.timestamp;\n evaluation = this._evaluateEvent(BBOX_MS_TRESHOLD, renderTime, eventTime, playingBackwards);\n\n if (this._tracklets.has(target)) {\n this._tracklets.get(target).lastUsed = now;\n }\n\n switch (evaluation) {\n case EventEvaluation.Discard:\n this._recentBoundingBoxes.dequeue();\n this.log.spam(() => [\n `[DISCARD] For target '${target}',`,\n `bounding box ${JSON.stringify(event)},`,\n `event timestamp is '${eventTime.toString()}',`,\n `current render time is '${renderTime.toString()}',`,\n `diff is ${this._getDirectedTimeDifference(renderTime, eventTime, playingBackwards).toString()}`,\n ].join(' '));\n continue;\n\n case EventEvaluation.Dispatch:\n this._recentBoundingBoxes.dequeue();\n this._displayPane.onBoundingBox(event);\n this.log.debug(() => [\n `[DISPATCH] For target '${target}',`,\n `bounding box ${JSON.stringify(event)},`,\n `event timestamp is '${eventTime.toString()}',`,\n `current render time is '${renderTime.toString()}',`,\n `diff is ${this._getDirectedTimeDifference(renderTime, eventTime, playingBackwards).toString()}`,\n ].join(' '));\n continue;\n\n case EventEvaluation.Keep:\n this.log.spam(() => [\n `[KEEP] For target '${target}',`,\n `bounding box ${JSON.stringify(event)},`,\n `event timestamp is '${eventTime.toString()}',`,\n `current render time is '${renderTime.toString()}',`,\n `diff is ${this._getDirectedTimeDifference(renderTime, eventTime, playingBackwards).toString()}`,\n ].join(' '));\n return;\n\n default:\n this.log.error(() => [\n `[ERROR] For target '${target}',`,\n `bounding box ${JSON.stringify(event)},`,\n `event timestamp is '${eventTime.toString()}',`,\n `current render time is '${renderTime.toString()}',`,\n `diff is ${this._getDirectedTimeDifference(renderTime, eventTime, playingBackwards).toString()},`,\n `unexpected event evaluation ${evaluation}`,\n ].join(' '));\n return;\n }\n }\n }\n\n /**\n * Removes old tracklets from the map to prevent memory bloat\n */\n _pruneTracklets() {\n const toDelete = [];\n const now = Instant.now();\n this._tracklets.forEach(({lastUsed}, target) => {\n if (now.minus(lastUsed).ge(STALE_TRACKLET_THRESHOLD_DURATION)) {\n toDelete.push(target);\n }\n });\n\n for (let i = 0; i < toDelete.length; ++i) {\n this._tracklets.delete(toDelete[i]);\n }\n }\n}\n","import {FisheyeProjection} from '../fisheyedefs';\n\n/**\n * Computes the radius of a point in the fisheye image from the phi angle, which\n * is the angle from the X/Y plane to the corresponding point on the hemispherical\n * representation of the scene.\n *\n * See https://en.wikipedia.org/wiki/Fisheye_lens#Mapping_function for an\n * explanation of the formulae used in this function.\n */\nfunction radiusFromPhi(phi, focalLength, projection) {\n const invPhi = (Math.PI / 2) - phi;\n\n switch (projection) {\n case FisheyeProjection.Equidistant:\n return focalLength * invPhi;\n\n case FisheyeProjection.Equisolid:\n return 2 * focalLength * Math.sin(invPhi / 2);\n\n case FisheyeProjection.Stereographic:\n return 2 * focalLength * Math.tan(invPhi / 2);\n\n default:\n throw new Error('Invalid fisheye projection');\n }\n}\n\nexport {radiusFromPhi};\n","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\n\nexport var perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\n\nexport var ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\n\nexport var sub = subtract;","/* global Float32Array, Uint16Array */\n\nimport {FisheyeProjection, FisheyeMountType} from '../fisheyedefs';\nimport {VideoFillMode} from '../../defs';\nimport {radiusFromPhi} from './fisheyeutils';\nimport {mat4, vec3} from 'gl-matrix';\n\nconst MESH_DEGREES_PER_PANEL = 5;\nconst NUM_SLICES = 360 / MESH_DEGREES_PER_PANEL;\nconst NUM_STACKS = 90 / MESH_DEGREES_PER_PANEL;\n\nconst HALF_PI = Math.PI / 2;\nconst TWO_PI = Math.PI * 2;\n\nexport const DEFAULT_PAN_CEILING = 0;\nexport const DEFAULT_TILT_CEILING = 30;\n\nexport const DEFAULT_PAN_WALL = 0;\nexport const DEFAULT_TILT_WALL = 0;\n\nexport const DEFAULT_FIELD_OF_VIEW = 55;\nconst Z_NEAR = 0.5;\nconst Z_FAR = 1.0;\n\nconst EYEPOINT = vec3.fromValues(0, 0, 0);\n\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Renders a dewarped fisheye image with a movable perspective view\n */\nexport default class FisheyePtzRenderer {\n constructor(gl, shaderInfo) {\n this._gl = gl;\n this._shaderInfo = shaderInfo;\n this._positionBuffer = null;\n this._indexBuffer = null;\n this._textureCoordBuffer = null;\n this._panTilt = null;\n this._fovY = 0;\n this._refSize = {width: 0, height: 0};\n this._center = {x: 0, y: 0};\n this._focalLength = 0;\n this._projection = FisheyeProjection.Equidistant;\n this._mountType = null;\n this._mountAngle = 0;\n this._paramsChanged = false;\n this._projectionTransform = null;\n this._viewTransform = null;\n this._upVector = null;\n\n this._initMeshBuffers();\n\n this.mountType = FisheyeMountType.Ceiling;\n this.fieldOfView = DEFAULT_FIELD_OF_VIEW;\n }\n\n setGeometry(geometry) {\n this._refSize = {...geometry.size};\n this._center = {\n x: geometry.center.x / geometry.size.width,\n y: geometry.center.y / geometry.size.height};\n this._focalLength = geometry.focalLength;\n this._paramsChanged = true;\n }\n\n get panTilt() {\n return this._panTilt;\n }\n\n set panTilt(value) {\n this._panTilt = {...value};\n\n let lookAt;\n\n if (this._mountType === FisheyeMountType.Ceiling) {\n this._panTilt.tilt = Math.max(1.0, Math.min(90.0, this._panTilt.tilt));\n\n // Convert the pan angle to the left hand co-ordinate space, i.e.\n // counterclockwise from the X axis instead of clockwise from the Y axis\n const viewTheta = degToRad(90.0 - this._panTilt.pan);\n\n // Convert the tilt angle to degrees out from the X/Y plane, instead\n // of degrees in from the Z axis\n const viewPhi = degToRad(90.0 - this._panTilt.tilt);\n\n const cosZ = Math.cos(viewPhi);\n\n lookAt = vec3.fromValues(Math.cos(viewTheta) * cosZ, Math.sin(viewTheta) * cosZ, -Math.sin(viewPhi));\n } else {\n this._panTilt.pan = Math.max(-90.0, Math.min(90.0, this._panTilt.pan));\n this._panTilt.tilt = Math.max(-89.0, Math.min(89.0 - this._mountAngle, this._panTilt.tilt));\n\n const mountRadians = degToRad(this._mountAngle);\n const panRadians = degToRad(this._panTilt.pan);\n const tiltRadians = degToRad(this._panTilt.tilt);\n\n const mountRotation = mat4.create();\n mat4.fromRotation(mountRotation, mountRadians, vec3.fromValues(1, 0, 0));\n\n const panTiltRotation = mat4.create();\n mat4.fromRotation(panTiltRotation, -panRadians, vec3.fromValues(0, 1, 0));\n mat4.rotate(panTiltRotation, panTiltRotation, tiltRadians, vec3.fromValues(1, 0, 0));\n\n lookAt = vec3.fromValues(0, 0, -1);\n vec3.transformMat4(lookAt, lookAt, panTiltRotation);\n vec3.transformMat4(lookAt, lookAt, mountRotation);\n }\n\n this._viewTransform = mat4.create();\n mat4.lookAt(this._viewTransform, EYEPOINT, lookAt, this._upVector);\n }\n\n get fieldOfView() {\n return this._fovY;\n }\n\n set fieldOfView(degrees) {\n this._fovY = degrees;\n this._initProjectionTransform();\n }\n\n get panoParams() {\n return null;\n }\n\n get zoomState() {\n return {x: 0, y: 0, scale: 1};\n }\n\n set zoomState(value) {\n }\n\n get fillMode() {\n return VideoFillMode.Original;\n }\n\n set fillMode(value) {\n }\n\n get mountType() {\n return this._mountType;\n }\n\n set mountType(value) {\n if (this._mountType === value) {\n return;\n }\n\n this._mountType = value;\n\n this._updateMountSettings(true);\n }\n\n get mountAngle() {\n return this._mountAngle;\n }\n\n set mountAngle(value) {\n if (this._mountAngle === value) {\n return;\n }\n\n this._mountAngle = value;\n\n this._updateMountSettings(false);\n }\n\n _updateMountSettings(resetPanTilt) {\n if (this._mountType === FisheyeMountType.Ceiling) {\n this._upVector = vec3.fromValues(0.0, 0.0, 1.0);\n\n if (resetPanTilt) {\n this.panTilt = {pan: DEFAULT_PAN_CEILING, tilt: DEFAULT_TILT_CEILING};\n }\n } else {\n const mountAngleRads = degToRad(this._mountAngle);\n\n this._upVector = vec3.fromValues(0.0, Math.cos(mountAngleRads), Math.sin(mountAngleRads));\n\n if (resetPanTilt) {\n this.panTilt = {pan: DEFAULT_PAN_WALL, tilt: DEFAULT_TILT_WALL};\n }\n }\n }\n\n handleResize() {\n this._initProjectionTransform();\n }\n\n render(texture) {\n if (this._paramsChanged) {\n this._mapTexture();\n this._initProjectionTransform();\n\n this._paramsChanged = false;\n }\n\n if (!this._projectionTransform) {\n return;\n }\n\n const gl = this._gl;\n\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\n gl.clearDepth(1.0);\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\n // Tell WebGL where to find values for the vertexPosition attribute\n gl.bindBuffer(gl.ARRAY_BUFFER, this._positionBuffer);\n gl.vertexAttribPointer(this._shaderInfo.attributes.vertexPosition, 3, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this._shaderInfo.attributes.vertexPosition);\n\n // Tell WebGL where to find values for the textureCoord attribute\n gl.bindBuffer(gl.ARRAY_BUFFER, this._textureCoordBuffer);\n gl.vertexAttribPointer(this._shaderInfo.attributes.textureCoord, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this._shaderInfo.attributes.textureCoord);\n\n // Tell WebGL where to find vertex indices\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);\n\n // Tell WebGL to use our shader when drawing\n gl.useProgram(this._shaderInfo.program);\n\n gl.uniformMatrix4fv(this._shaderInfo.uniforms.projectionMatrix, false, this._projectionTransform);\n gl.uniformMatrix4fv(this._shaderInfo.uniforms.viewMatrix, false, this._viewTransform);\n\n // Specify the texture to use\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.uniform1i(this._shaderInfo.uniforms.uSampler, 0);\n\n // Draw all of the stacks except the cone at the center as triangle strips\n let offset = 0;\n\n for (let stack = 0; stack < NUM_STACKS - 1; ++stack, offset += 4 * (NUM_SLICES + 1)) {\n gl.drawElements(gl.TRIANGLE_STRIP, 2 * (NUM_SLICES + 1), gl.UNSIGNED_SHORT, offset);\n }\n\n // Draw the center cone as a triangle fan\n gl.drawElements(gl.TRIANGLE_FAN, NUM_SLICES + 2, gl.UNSIGNED_SHORT, offset);\n }\n\n cleanUp() {\n const gl = this._gl;\n\n gl.deleteBuffer(this._positionBuffer);\n gl.deleteBuffer(this._textureCoordBuffer);\n gl.deleteBuffer(this._indexBuffer);\n }\n\n _initProjectionTransform() {\n const {clientWidth, clientHeight} = this._gl.canvas;\n\n if (!clientWidth || !clientHeight) {\n return;\n }\n\n const fovRadians = degToRad(this._fovY);\n\n this._projectionTransform = mat4.create();\n mat4.perspective(this._projectionTransform, fovRadians, clientWidth / clientHeight, Z_NEAR, Z_FAR);\n }\n\n _initMeshBuffers() {\n const gl = this._gl;\n\n // Vertex positions buffer\n this._positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this._positionBuffer);\n\n const positions = [];\n\n for (const vertex of mesh.vertices) {\n positions.push(vertex.x, vertex.y, vertex.z);\n }\n\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n this._indexBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(mesh.indices), gl.STATIC_DRAW);\n }\n\n /**\n * Maps texture co-ordinates to the hemispherical mesh\n */\n _mapTexture() {\n if (!this._refSize.width || !this._refSize.height) {\n return;\n }\n\n const gl = this._gl;\n const textureCoords = [];\n\n for (const vertex of mesh.vertices) {\n // Compute the texture co-ords as polar co-ordinates\n const r = radiusFromPhi(vertex.phi, this._focalLength, this._projection);\n const rX = r / this._refSize.width;\n const rY = r / this._refSize.height;\n\n const angle = vertex.theta;\n\n textureCoords.push(this._center.x + Math.cos(angle) * rX);\n textureCoords.push(this._center.y - Math.sin(angle) * rY);\n }\n\n this._textureCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this._textureCoordBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);\n }\n}\n\n/**\n * Builds the hemispherical mesh\n *\n * This is done only once, since the mesh uses canonical co-ordinates and does\n * not depend on fisheye parameters (but texture mapping does).\n *\n * The mesh consists of a number of \"stacks\" (arranged around the lines of\n * latitude), each of which is divided into a number of \"slices\"\n * (corresponding to lines of longitude). We draw each stack except the\n * central one as a triangle strip, and the central one as a triangle fan.\n */\nfunction buildMesh() {\n const mesh = {\n vertices: [],\n indices: [],\n numSlices: NUM_SLICES,\n numStacks: NUM_STACKS,\n };\n\n // Create the vertices\n for (let stack = 0; stack < NUM_STACKS; ++stack) {\n const phi = stack * HALF_PI / NUM_STACKS;\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n\n for (let slice = 0; slice < NUM_SLICES; ++slice) {\n const theta = slice * TWO_PI / NUM_SLICES;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n\n mesh.vertices.push({\n theta,\n phi,\n x: cosTheta * cosPhi,\n y: sinTheta * cosPhi,\n z: -sinPhi,\n });\n }\n }\n\n // Add the center point\n mesh.vertices.push({\n theta: 0,\n phi: HALF_PI,\n x: 0,\n y: 0,\n z: -1.0,\n });\n\n // Create the indices for the triangle strips for each stack except the innermost one\n let outerVertexNum = 0;\n let innerVertexNum = NUM_SLICES;\n\n let cur = 0;\n\n for (let stack = 0; stack < NUM_STACKS - 1; ++stack) {\n // The last two indices are going to point back to the first two vertices of this stack\n mesh.indices[cur + NUM_SLICES * 2] = outerVertexNum;\n mesh.indices[cur + NUM_SLICES * 2 + 1] = innerVertexNum;\n\n for (let slice = 0; slice < NUM_SLICES; ++outerVertexNum, ++innerVertexNum, ++slice, cur += 2) {\n mesh.indices[cur] = outerVertexNum;\n mesh.indices[cur + 1] = innerVertexNum;\n }\n\n cur += 2;\n }\n\n // Now add indices for the cone in the center, which will be drawn using a triangle fan\n mesh.indices[cur++] = mesh.vertices.length - 1;\n mesh.indices[cur + NUM_SLICES] = outerVertexNum;\n\n for (let slice = 0; slice < NUM_SLICES; ++slice) {\n mesh.indices[cur++] = outerVertexNum++;\n }\n\n return mesh;\n}\n\nconst mesh = buildMesh();\n","import * as glMatrix from \"./common.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\n/**\n * Quaternion\n * @module quat\n */\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyVec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\n\nexport function setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\n * Gets the rotation axis and angle for a given\n * quaternion. If a quaternion is created with\n * setAxisAngle, this method will return the same\n * values as providied in the original parameter list\n * OR functionally equivalent values.\n * Example: The quaternion formed by axis [0, 0, 1] and\n * angle -90 is the same as the quaternion formed by\n * [0, 0, 1] and 270. This method favors the latter.\n * @param {vec3} out_axis Vector receiving the axis of rotation\n * @param {ReadonlyQuat} q Quaternion to be decomposed\n * @return {Number} Angle, in radians, of the rotation\n */\n\nexport function getAxisAngle(out_axis, q) {\n var rad = Math.acos(q[3]) * 2.0;\n var s = Math.sin(rad / 2.0);\n\n if (s > glMatrix.EPSILON) {\n out_axis[0] = q[0] / s;\n out_axis[1] = q[1] / s;\n out_axis[2] = q[2] / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n out_axis[0] = 1;\n out_axis[1] = 0;\n out_axis[2] = 0;\n }\n\n return rad;\n}\n/**\n * Gets the angular distance between two unit quaternions\n *\n * @param {ReadonlyQuat} a Origin unit quaternion\n * @param {ReadonlyQuat} b Destination unit quaternion\n * @return {Number} Angle, in radians, between the two quaternions\n */\n\nexport function getAngle(a, b) {\n var dotproduct = dot(a, b);\n return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n */\n\nexport function multiply(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateX(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateY(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var by = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateZ(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bz = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate W component of\n * @returns {quat} out\n */\n\nexport function calculateW(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n}\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function exp(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var et = Math.exp(w);\n var s = r > 0 ? et * Math.sin(r) / r : 0;\n out[0] = x * s;\n out[1] = y * s;\n out[2] = z * s;\n out[3] = et * Math.cos(r);\n return out;\n}\n/**\n * Calculate the natural logarithm of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function ln(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var t = r > 0 ? Math.atan2(r, w) / r : 0;\n out[0] = x * t;\n out[1] = y * t;\n out[2] = z * t;\n out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n return out;\n}\n/**\n * Calculate the scalar power of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @param {Number} b amount to scale the quaternion by\n * @returns {quat} out\n */\n\nexport function pow(out, a, b) {\n ln(out, a);\n scale(out, out, b);\n exp(out, out);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport function slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > glMatrix.EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\n * Generates a random unit quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function random(out) {\n // Implementation of http://planning.cs.uiuc.edu/node198.html\n // TODO: Calling random 3 times is probably not the fastest solution\n var u1 = glMatrix.RANDOM();\n var u2 = glMatrix.RANDOM();\n var u3 = glMatrix.RANDOM();\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\n var sqrtU1 = Math.sqrt(u1);\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n return out;\n}\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate inverse of\n * @returns {quat} out\n */\n\nexport function invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate conjugate of\n * @returns {quat} out\n */\n\nexport function conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyMat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\n\nexport function fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {x} Angle to rotate around X axis in degrees.\n * @param {y} Angle to rotate around Y axis in degrees.\n * @param {z} Angle to rotate around Z axis in degrees.\n * @returns {quat} out\n * @function\n */\n\nexport function fromEuler(out, x, y, z) {\n var halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n var sx = Math.sin(x);\n var cx = Math.cos(x);\n var sy = Math.sin(y);\n var cy = Math.cos(y);\n var sz = Math.sin(z);\n var cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n/**\n * Returns a string representation of a quatenion\n *\n * @param {ReadonlyQuat} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"quat(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {ReadonlyQuat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var clone = vec4.clone;\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var fromValues = vec4.fromValues;\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the source quaternion\n * @returns {quat} out\n * @function\n */\n\nexport var copy = vec4.copy;\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\n\nexport var set = vec4.set;\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n * @function\n */\n\nexport var add = vec4.add;\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {ReadonlyQuat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\n\nexport var scale = vec4.scale;\n/**\n * Calculates the dot product of two quat's\n *\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\n\nexport var dot = vec4.dot;\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n * @function\n */\n\nexport var lerp = vec4.lerp;\n/**\n * Calculates the length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport var length = vec4.length;\n/**\n * Alias for {@link quat.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Calculates the squared length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\n\nexport var squaredLength = vec4.squaredLength;\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\n\nexport var normalize = vec4.normalize;\n/**\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyQuat} a The first quaternion.\n * @param {ReadonlyQuat} b The second quaternion.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var exactEquals = vec4.exactEquals;\n/**\n * Returns whether or not the quaternions have approximately the same elements in the same position.\n *\n * @param {ReadonlyQuat} a The first vector.\n * @param {ReadonlyQuat} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var equals = vec4.equals;\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {ReadonlyVec3} a the initial vector\n * @param {ReadonlyVec3} b the destination vector\n * @returns {quat} out\n */\n\nexport var rotationTo = function () {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot = vec3.dot(a, b);\n\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return normalize(out, out);\n }\n };\n}();\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {ReadonlyQuat} c the third operand\n * @param {ReadonlyQuat} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport var sqlerp = function () {\n var temp1 = create();\n var temp2 = create();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {ReadonlyVec3} view the vector representing the viewing direction\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\n\nexport var setAxes = function () {\n var matr = mat3.create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize(out, fromMat3(out, matr));\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\n * Math.round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","/* global Float32Array, Uint16Array */\n\nimport {FisheyeProjection, FisheyeMountType} from '../fisheyedefs';\nimport {VideoFillMode} from '../../defs';\nimport {radiusFromPhi} from './fisheyeutils';\nimport {mat4, quat, vec3} from 'gl-matrix';\n\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n\nconst CEILING_START_ANGLE = 0;\nconst CEILING_ANGULAR_WIDTH = 360;\nconst CEILING_DEGREES_FROM_EDGE = 5;\nconst CEILING_DEGREES_FROM_CENTER = 5;\nconst CEILING_ANGULAR_HEIGHT = 90 - (CEILING_DEGREES_FROM_CENTER + CEILING_DEGREES_FROM_EDGE);\n\nconst WALL_START_ANGLE = 0;\nconst WALL_ANGULAR_WIDTH = 180;\nconst WALL_DEGREES_FROM_TOP = 40;\nconst WALL_DEGREES_FROM_BOTTOM = 40;\nconst WALL_ANGULAR_HEIGHT = 180 - (WALL_DEGREES_FROM_TOP + WALL_DEGREES_FROM_BOTTOM);\n\nconst DEGREES_PER_PANEL = 5;\nconst RADIANS_PER_PANEL = degToRad(DEGREES_PER_PANEL);\n\nconst HALF_PI = Math.PI / 2;\n\nconst NO_ROTATION = quat.create();\n\n/**\n * Renders a panorama view from a fisheye camera\n */\nexport default class FisheyePanoramaRenderer {\n constructor(gl, shaderInfo, split) {\n this._gl = gl;\n this._shaderInfo = shaderInfo;\n this._split = split;\n this._positionBuffer = null;\n this._indexBuffer = null;\n this._textureCoordBuffer = null;\n this._refSize = {width: 0, height: 0};\n this._center = {x: 0, y: 0};\n this._focalLength = 0;\n this._projection = FisheyeProjection.Equidistant;\n this._mountType = null;\n this._projectionTransform = mat4.create();\n this._viewTransform = mat4.create();\n this._zoom = {x: 0, y: 0, scale: 1};\n this._startAngle = 0;\n this._angularHeight = 0;\n this._radiansFromTop = 0;\n this._angularHeight = 0;\n this._needRebuildMesh = true;\n this._needCalcProjection = true;\n this._panelRows = 0;\n this._panelCols = 0;\n\n mat4.ortho(this._projectionTransform, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0);\n mat4.identity(this._viewTransform);\n\n this.mountType = FisheyeMountType.Ceiling;\n }\n\n setGeometry(geometry) {\n this._refSize = {...geometry.size};\n this._center = {\n x: geometry.center.x / geometry.size.width,\n y: geometry.center.y / geometry.size.height,\n };\n this._focalLength = geometry.focalLength;\n\n this._needRebuildMesh = true;\n }\n\n get mountType() {\n return this._mountType;\n }\n\n set mountType(value) {\n if (this._mountType === value) {\n return;\n }\n\n this._mountType = value;\n\n if (value === FisheyeMountType.Ceiling) {\n this._startAngle = degToRad(CEILING_START_ANGLE);\n this._angularWidth = degToRad(CEILING_ANGULAR_WIDTH);\n this._radiansFromTop = degToRad(CEILING_DEGREES_FROM_EDGE);\n this._angularHeight = degToRad(CEILING_ANGULAR_HEIGHT);\n } else {\n this._startAngle = degToRad(WALL_START_ANGLE);\n this._angularWidth = degToRad(WALL_ANGULAR_WIDTH);\n this._radiansFromTop = degToRad(WALL_DEGREES_FROM_TOP);\n this._angularHeight = degToRad(WALL_ANGULAR_HEIGHT);\n }\n\n this._needRebuildMesh = true;\n }\n\n get panTilt() {\n return {pan: 0, tilt: 0};\n }\n\n set panTilt(value) {\n }\n\n get fieldOfView() {\n return 0;\n }\n\n set fieldOfView(value) {\n }\n\n get panoParams() {\n if (this._mountType === FisheyeMountType.Ceiling) {\n return {\n startAngle: CEILING_START_ANGLE,\n angularWidth: CEILING_ANGULAR_WIDTH,\n topMargin: CEILING_DEGREES_FROM_EDGE,\n bottomMargin: CEILING_DEGREES_FROM_CENTER,\n };\n } else {\n return {\n startAngle: WALL_START_ANGLE,\n angularWidth: WALL_ANGULAR_WIDTH,\n topMargin: WALL_DEGREES_FROM_TOP,\n bottomMargin: WALL_DEGREES_FROM_BOTTOM,\n };\n }\n }\n\n get zoomState() {\n return this._zoom;\n }\n\n set zoomState(value) {\n this._zoom = value;\n this._needCalcProjection = true;\n }\n\n get fillMode() {\n return this._fillMode;\n }\n\n set fillMode(value) {\n this._fillMode = value;\n this._needCalcProjection = true;\n }\n\n get isSplit() {\n // We don't support split for wall-mounted cameras\n return this._mountType === FisheyeMountType.Ceiling && this._split;\n }\n\n handleResize() {\n this._needCalcProjection = true;\n }\n\n render(texture) {\n if (this._needRebuildMesh) {\n this._buildMesh();\n this._needRebuildMesh = false;\n }\n\n if (this._needCalcProjection) {\n this._calcProjection();\n this._needCalcProjection = false;\n }\n\n const gl = this._gl;\n\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\n gl.clearDepth(1.0);\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\n // Tell WebGL where to find values for the vertexPosition attribute\n gl.bindBuffer(gl.ARRAY_BUFFER, this._positionBuffer);\n gl.vertexAttribPointer(this._shaderInfo.attributes.vertexPosition, 3, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this._shaderInfo.attributes.vertexPosition);\n\n // Tell WebGL where to find values for the textureCoord attribute\n gl.bindBuffer(gl.ARRAY_BUFFER, this._textureCoordBuffer);\n gl.vertexAttribPointer(this._shaderInfo.attributes.textureCoord, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(this._shaderInfo.attributes.textureCoord);\n\n // Tell WebGL where to find vertex indices\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);\n\n // Tell WebGL to use our shader when drawing\n gl.useProgram(this._shaderInfo.program);\n\n gl.uniformMatrix4fv(this._shaderInfo.uniforms.projectionMatrix, false, this._projectionTransform);\n gl.uniformMatrix4fv(this._shaderInfo.uniforms.viewMatrix, false, this._viewTransform);\n\n // Specify the texture to use\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.uniform1i(this._shaderInfo.uniforms.uSampler, 0);\n\n // Draw each row in turn\n let offset = 0;\n\n for (let row = 0; row < this._panelRows; ++row) {\n gl.drawElements(gl.TRIANGLE_STRIP, 2 * (this._panelCols + 1), gl.UNSIGNED_SHORT, offset);\n offset += 4 * (this._panelCols + 1);\n }\n }\n\n cleanUp() {\n const gl = this._gl;\n\n gl.deleteBuffer(this._positionBuffer);\n gl.deleteBuffer(this._textureCoordBuffer);\n gl.deleteBuffer(this._indexBuffer);\n }\n\n _calcProjection() {\n const {clientWidth, clientHeight} = this._gl.canvas;\n const naturalWidth = this._panelCols;\n const naturalHeight = this._panelRows;\n\n const scale = {\n x: this._zoom.scale,\n y: this._zoom.scale,\n };\n\n if (this._fillMode !== VideoFillMode.Stretch) {\n const xProduct = clientWidth * naturalHeight;\n const yProduct = clientHeight * naturalWidth;\n\n if (xProduct >= yProduct) {\n scale.x = scale.x * yProduct / xProduct;\n } else {\n scale.y = scale.y * xProduct / yProduct;\n }\n }\n\n const translate = {\n x: -this._zoom.x * this._zoom.scale,\n y: -this._zoom.y * this._zoom.scale,\n };\n\n mat4.ortho(this._projectionTransform, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0);\n\n const zoomMatrix = mat4.create();\n mat4.fromRotationTranslationScaleOrigin(zoomMatrix, NO_ROTATION,\n vec3.fromValues(translate.x, translate.y, 0),\n vec3.fromValues(scale.x, scale.y, 1.0),\n vec3.fromValues(0.5, 0.5, 0));\n\n mat4.multiply(this._projectionTransform, this._projectionTransform, zoomMatrix);\n }\n\n _buildMesh() {\n if (!this.isSplit) {\n this._panelCols = Math.floor(this._angularWidth / RADIANS_PER_PANEL);\n this._panelRows = Math.floor(this._angularHeight / RADIANS_PER_PANEL);\n } else {\n this._panelCols = Math.floor((this._angularWidth / 2) / RADIANS_PER_PANEL);\n this._panelRows = Math.floor((this._angularHeight * 2) / RADIANS_PER_PANEL);\n\n if (this._panelRows & 1) {\n ++this._panelRows;\n }\n }\n\n let mesh;\n\n if (this._mountType === FisheyeMountType.Wall) {\n mesh = this._buildMeshWallMount(this._panelCols, this._panelRows);\n } else if (!this.isSplit) {\n mesh = this._buildMeshCeilingMount(this._panelCols, this._panelRows);\n } else {\n mesh = this._buildMeshSplitCeilingMount(this._panelCols, this._panelRows);\n }\n\n const gl = this._gl;\n\n this._positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this._positionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(mesh.vertices), gl.STATIC_DRAW);\n\n this._textureCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this._textureCoordBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(mesh.textureCoords), gl.STATIC_DRAW);\n\n this._indexBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(mesh.indices), gl.STATIC_DRAW);\n\n this._needCalcProjection = true;\n }\n\n /**\n * Builds a mesh for a ceiling mount camera\n */\n _buildMeshCeilingMount(panelCols, panelRows) {\n const vertices = [];\n const textureCoords = [];\n const indices = [];\n\n // Build the vertices. These are arranged in a grid, with texture points\n // mapped from an annulus around the center of the image.\n for (let row = 0; row < panelRows + 1; ++row) {\n const y = row / panelRows;\n const phi = this._radiansFromTop + (this._angularHeight * row / panelRows);\n\n const r = radiusFromPhi(phi, this._focalLength, this._projection);\n const rX = r / this._refSize.width;\n const rY = r / this._refSize.height;\n\n for (let col = 0; col < panelCols + 1; ++col) {\n const theta = HALF_PI - (this._startAngle + (this._angularWidth * col / panelCols));\n\n vertices.push(col / panelCols, y, -1.0);\n textureCoords.push(this._center.x + Math.cos(theta) * rX);\n textureCoords.push(this._center.y - Math.sin(theta) * rY);\n }\n }\n\n // Build the indices; we make a triangle strip for each row\n let baseVertexNum = 0;\n\n for (let row = 0; row < panelRows; ++row) {\n for (let col = 0; col < panelCols + 1; ++col, ++baseVertexNum) {\n indices.push(baseVertexNum);\n indices.push(baseVertexNum + panelCols + 1);\n }\n }\n\n return {vertices, textureCoords, indices};\n }\n\n /**\n * Builds a mesh for a ceiling mount camera in split panorama mode\n */\n _buildMeshSplitCeilingMount(panelCols, panelRows) {\n const vertices = [];\n const textureCoords = [];\n const indices = [];\n\n const rowsPerHalf = panelRows / 2;\n const colsTotal = panelCols * 2;\n\n // Build the vertices. These are arranged in a grid, with texture points\n // mapped from an annulus around the center of the image.\n for (let row = 0; row < rowsPerHalf + 1; ++row) {\n const y = row / panelRows;\n const phi = this._radiansFromTop + (this._angularHeight * row / rowsPerHalf);\n\n const r = radiusFromPhi(phi, this._focalLength, this._projection);\n const rX = r / this._refSize.width;\n const rY = r / this._refSize.height;\n\n for (let col = 0; col < panelCols + 1; ++col) {\n const theta = HALF_PI - (this._startAngle + (this._angularWidth * col / colsTotal));\n\n vertices.push(col / panelCols, y, -1.0);\n\n textureCoords.push(this._center.x + Math.cos(theta) * rX);\n textureCoords.push(this._center.y - Math.sin(theta) * rY);\n }\n }\n\n for (let row = rowsPerHalf; row < panelRows + 1; ++row) {\n const texRow = row - rowsPerHalf;\n const y = row / panelRows;\n const phi = this._radiansFromTop + (this._angularHeight * texRow / rowsPerHalf);\n\n const r = radiusFromPhi(phi, this._focalLength, this._projection);\n const rX = r / this._refSize.width;\n const rY = r / this._refSize.height;\n\n for (let col = 0; col < panelCols + 1; ++col) {\n const texCol = col + panelCols;\n const theta = HALF_PI - (this._startAngle + (this._angularWidth * texCol / colsTotal));\n\n vertices.push(col / panelCols, y, -1.0);\n\n textureCoords.push(this._center.x + Math.cos(theta) * rX);\n textureCoords.push(this._center.y - Math.sin(theta) * rY);\n }\n }\n\n // Build the indices; we make a triangle strip for each row\n let baseVertexNum = 0;\n let row = 0;\n\n for (; row < rowsPerHalf; ++row) {\n for (let col = 0; col < panelCols + 1; ++col, ++baseVertexNum) {\n indices.push(baseVertexNum);\n indices.push(baseVertexNum + panelCols + 1);\n }\n }\n\n baseVertexNum += panelCols + 1;\n\n for (; row < panelRows; ++row) {\n for (let col = 0; col < panelCols + 1; ++col, ++baseVertexNum) {\n indices.push(baseVertexNum);\n indices.push(baseVertexNum + panelCols + 1);\n }\n }\n\n return {vertices, textureCoords, indices};\n }\n\n /**\n * Builds a mesh for a wall mount camera\n */\n _buildMeshWallMount(panelCols, panelRows) {\n const vertices = [];\n const textureCoords = [];\n const indices = [];\n\n const alphaTop = HALF_PI - this._radiansFromTop;\n\n for (let row = 0; row < panelRows + 1; ++row) {\n const y = row / panelRows;\n const alpha = alphaTop - (this._angularHeight * y);\n const cosAlpha = Math.cos(alpha);\n const sinAlpha = Math.sin(alpha);\n\n for (let col = 0; col < panelCols + 1; ++col) {\n const beta = Math.PI - (this._startAngle + (this._angularWidth * col / panelCols));\n\n vertices.push(col / panelCols, y, -1.0);\n\n // Figure out the x, y and z co-ordinates of the point on the hemisphere that we're mapping\n const hx = cosAlpha * Math.cos(beta);\n const hy = sinAlpha;\n const hz = cosAlpha * Math.sin(beta);\n\n // Figure out theta and phi from hx, hy and hz\n const theta = Math.atan2(hy, hx);\n const xyMag = Math.sqrt(hx * hx + hy * hy);\n const phi = Math.atan2(hz, xyMag);\n\n // Now calculate texture co-ordinates from theta and phi\n const r = radiusFromPhi(phi, this._focalLength, this._projection);\n const rX = r / this._refSize.width;\n const rY = r / this._refSize.height;\n\n textureCoords.push(this._center.x + Math.cos(theta) * rX);\n textureCoords.push(this._center.y - Math.sin(theta) * rY);\n }\n }\n\n // Build the indices; we make a triangle strip for each row\n let baseVertexNum = 0;\n\n for (let col = 0; col < panelCols; ++col) {\n for (let row = 0; row < panelRows + 1; ++row, ++baseVertexNum) {\n indices.push(baseVertexNum);\n indices.push(baseVertexNum + panelCols + 1);\n }\n }\n\n return {vertices, textureCoords, indices};\n }\n}\n\n/**\n * Given a mount type, returns the ideal aspect ratio of the panorama image that would be rendered.\n */\nexport function getIdealPanoramaAspectRatio(mountType, split) {\n const {angularWidth, angularHeight} = mountType === FisheyeMountType.Ceiling\n ? {angularWidth: CEILING_ANGULAR_WIDTH, angularHeight: CEILING_ANGULAR_HEIGHT}\n : {angularWidth: WALL_ANGULAR_WIDTH, angularHeight: WALL_ANGULAR_HEIGHT};\n\n if (split) {\n return (angularWidth / 2) / (angularHeight * 2);\n }\n\n return angularWidth / angularHeight;\n}\n","import {Logger} from '@oecommon/plasma-js';\n\n// Super simple vertex and fragment shader - these just sample the texture at the appropriate\n// position, without any lighting effects or other fancy stuff\nconst vertexShaderSource = `\n attribute vec4 aVertexPosition;\n attribute vec2 aTextureCoord;\n\n uniform mat4 uViewMatrix;\n uniform mat4 uProjectionMatrix;\n\n varying highp vec2 vTextureCoord;\n\n void main(void) {\n gl_Position = uProjectionMatrix * uViewMatrix * aVertexPosition;\n vTextureCoord = aTextureCoord;\n }\n`;\n\nconst fragmentShaderSource = `\n varying highp vec2 vTextureCoord;\n\n uniform sampler2D uSampler;\n\n void main(void) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n }\n`;\n\nconst log = new Logger('webgl');\n\nfunction initFisheyeShaderProgram(gl) {\n const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);\n\n if (!vertexShader || !fragmentShader) {\n return null;\n }\n\n // Create the shader program\n const shaderProgram = gl.createProgram();\n gl.attachShader(shaderProgram, vertexShader);\n gl.attachShader(shaderProgram, fragmentShader);\n gl.linkProgram(shaderProgram);\n\n // If creating the shader program failed, alert\n\n if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {\n log.error(`Unable to initialize the shader program: ${gl.getProgramInfoLog(shaderProgram)}`);\n gl.deleteProgram(shaderProgram);\n return null;\n }\n\n return {\n program: shaderProgram,\n attributes: {\n vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'),\n textureCoord: gl.getAttribLocation(shaderProgram, 'aTextureCoord'),\n },\n uniforms: {\n projectionMatrix: gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'),\n viewMatrix: gl.getUniformLocation(shaderProgram, 'uViewMatrix'),\n uSampler: gl.getUniformLocation(shaderProgram, 'uSampler'),\n },\n };\n}\n\nfunction loadShader(gl, type, source) {\n const shader = gl.createShader(type);\n\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n log.error(`Shader compilation failed: ${gl.getShaderInfoLog(shader)}`);\n gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n}\n\nexport {initFisheyeShaderProgram};\n","/* global Uint8Array,requestAnimationFrame,performance */\n\nimport {FisheyeMode, FisheyeMountType} from './fisheyedefs';\nimport FisheyePtzRenderer from './fisheye/fisheyeptzrenderer';\nimport FisheyePanoramaRenderer from './fisheye/fisheyepanoramarenderer';\nimport {initFisheyeShaderProgram} from './fisheye/shaders';\nimport {VideoFillMode} from '../defs';\nimport {detect} from 'detect-browser';\nimport {Logger} from '@oecommon/plasma-js';\n\nconst MIN_RENDER_INTERVAL_MSECS = 30;\n\nexport const DEFAULT_ZOOM = {x: 0, y: 0, scale: 1};\nexport const DEFAULT_TRANSFORM = {\n translate: {\n x: 0,\n y: 0,\n },\n scale: {\n x: 1,\n y: 1,\n },\n};\nexport const DEFAULT_OBJECT_FIT = 'contain';\n\nconst MAX_PT_DEGREES_PER_SECOND = 60;\n\nconst elementId = (element) => element ? element.id : 'null';\n\n/**\n * Manages the presentation of the video within its parent element, including\n * fisheye dewarping if enabled.\n */\nexport default class VideoPresenter {\n constructor(elementFactory, displayPane) {\n this.log = new Logger('videopresenter', displayPane.index + 1);\n this._elementFactory = elementFactory;\n this._displayPane = displayPane;\n this._index = displayPane.index;\n this._canvasIndex = 0;\n this._renderer = null;\n this._parentElement = null;\n this._videoElement = null;\n this._currentChild = null;\n this._canvas = null;\n this._glContext = null;\n this._shaderInfo = null;\n this._texture = null;\n this._zoom = DEFAULT_ZOOM;\n this._transform = DEFAULT_TRANSFORM;\n this._objectFit = DEFAULT_OBJECT_FIT;\n this._fillMode = VideoFillMode.Original;\n this._fisheyeParams = {\n geometry: null,\n mode: FisheyeMode.Original,\n mountType: FisheyeMountType.Ceiling,\n mountAngle: 0,\n };\n this._panTiltSpeed = null;\n this._panTiltBase = null;\n this._lastRenderTime = null;\n this._lastPanTiltTime = null;\n\n this._render = this._render.bind(this);\n\n const browser = detect();\n this._fillSupported = (browser && browser.name === 'safari') ? false : true;\n }\n\n set parentElement(value) {\n this._updateElements(value);\n }\n\n get parentElement() {\n return this._parentElement;\n }\n\n set videoElement(value) {\n this._videoElement = value;\n this._updateElements(this._parentElement);\n }\n\n get videoElement() {\n return this._videoElement;\n }\n\n set fillMode(value) {\n if (value === this._fillMode) {\n return;\n }\n\n this._fillMode = value;\n\n if (this._renderer) {\n this._renderer.fillMode = value;\n }\n\n this.handleResize();\n }\n\n get fillMode() {\n return this._fillMode;\n }\n\n set zoomState(value) {\n const actualValue = value || DEFAULT_ZOOM;\n\n if (actualValue.x === this._zoom.x && actualValue.y === this._zoom.y &&\n actualValue.scale === this._zoom.scale) {\n return;\n }\n\n this._zoom = actualValue;\n\n if (this._renderer) {\n this._renderer.zoomState = actualValue;\n }\n\n this.handleResize();\n }\n\n get zoomState() {\n return this._zoom;\n }\n\n get transform() {\n return this._transform;\n }\n\n get objectFit() {\n return this._objectFit;\n }\n\n set fisheyeGeometry(value) {\n if (geometryEquals(value, this._fisheyeParams.geometry)) {\n return;\n }\n\n this._fisheyeParams.geometry = value;\n\n if (!value) {\n this.fisheyeMode = FisheyeMode.Original;\n } else if (this._renderer) {\n this._renderer.setGeometry(value);\n }\n }\n\n get fisheyeGeometry() {\n return this._fisheyeParams.geometry;\n }\n\n set fisheyeMode(value) {\n if (this._fisheyeParams.mode === value || !this._fisheyeParams.geometry) {\n return;\n }\n\n if (value === FisheyeMode.Original) {\n this._disableWebglTransform();\n } else {\n if (!this._enableWebglTransform(value)) {\n this.log.warn('Failed to enable WebGL, it may not be supported by this browser');\n return;\n }\n }\n\n this._fisheyeParams.mode = value;\n this._updateElements(this._parentElement);\n }\n\n get fisheyeMode() {\n return this._fisheyeParams.mode;\n }\n\n set fisheyeMountType(value) {\n this._fisheyeParams.mountType = value;\n\n if (this._renderer) {\n this._renderer.mountType = value;\n }\n }\n\n get fisheyeMountType() {\n return this._fisheyeParams.mountType;\n }\n\n set fisheyeMountAngle(value) {\n this._fisheyeParams.mountAngle = value;\n\n if (this._renderer) {\n this._renderer.mountAngle = value;\n }\n }\n\n get fisheyeMountAngle() {\n return this._fisheyeParams.mountAngle;\n }\n\n\n set fisheyePanTilt(value) {\n if (this._renderer) {\n this._renderer.panTilt = value;\n }\n }\n\n get fisheyePanTilt() {\n return this._renderer ? this._renderer.panTilt : {pan: 0, tilt: 0};\n }\n\n set fisheyePanTiltSpeed(value) {\n if (this._fisheyeParams.mode !== FisheyeMode.Ptz) {\n return;\n }\n\n if (!value || (!value.pan && !value.tilt)) {\n this._updateMovingPanTilt();\n this._panTiltSpeed = null;\n this._panTiltBase = null;\n this._lastPanTiltTime = null;\n return;\n }\n\n if (this._panTiltSpeed && value.pan === this._panTiltSpeed.pan && value.tilt === this._panTiltSpeed.tilt) {\n return;\n }\n\n this._updateMovingPanTilt();\n this._panTiltSpeed = value;\n this._panTiltBase = this._renderer.panTilt;\n this._lastPanTiltTime = performance.now();\n }\n\n get fisheyePanTiltSpeed() {\n return this._panTiltSpeed || {pan: 0, tilt: 0};\n }\n\n set fisheyeFieldOfView(value) {\n if (this._renderer) {\n this._renderer.fieldOfView = value;\n }\n }\n\n get fisheyeFieldOfView() {\n return this._renderer ? this._renderer.fieldOfView : 0;\n }\n\n get fisheyePanoParams() {\n return this._renderer ? this._renderer.panoParams : null;\n }\n\n /**\n * Handles a resize of the video element container\n */\n handleResize() {\n if (this._fisheyeParams.mode === FisheyeMode.Original) {\n this._scaleVideoElement();\n }\n }\n\n /**\n * Scales the video element according to the current digital zoom state\n */\n _scaleVideoElement() {\n if (!this._videoElement) {\n return;\n }\n\n this._objectFit = (this._fillMode === VideoFillMode.Stretch && this._fillSupported) ? 'fill' : 'contain';\n this._videoElement.style.objectFit = this._objectFit;\n\n const {offsetWidth, offsetHeight, videoWidth, videoHeight} = this._videoElement;\n\n if (!offsetWidth || !offsetHeight || !videoWidth || !videoHeight) {\n this._videoElement.style.transform = null;\n return;\n }\n\n const scale = {\n x: this._zoom.scale,\n y: this._zoom.scale,\n };\n\n if (this._fillMode === VideoFillMode.Stretch && !this._fillSupported) {\n const xProduct = offsetWidth * videoHeight;\n const yProduct = offsetHeight * videoWidth;\n\n if (xProduct >= yProduct) {\n scale.x = scale.x * xProduct / yProduct;\n } else {\n scale.y = scale.y * yProduct / xProduct;\n }\n }\n\n const translate = {\n x: offsetWidth * -this._zoom.x * this._zoom.scale,\n y: offsetHeight * -this._zoom.y * this._zoom.scale,\n };\n\n this._transform = {translate, scale};\n\n let transformStyles = '';\n\n if (translate.x || translate.y) {\n transformStyles += ` translate(${translate.x}px, ${translate.y}px)`;\n }\n\n if (scale.x !== 1 || scale.y !== 1) {\n transformStyles += ` scale(${scale.x}, ${scale.y})`;\n }\n\n this.log.debug(() => `Pane size is ${offsetWidth}x${offsetHeight}, new transform is ${transformStyles}`);\n\n this._videoElement.style.transform = transformStyles;\n\n const event = {\n zoom: this._zoom,\n objectFit: this._objectFit,\n transform: this._transform,\n };\n this._displayPane.onVideoPresenterTransform(event);\n }\n\n /**\n * Renders the canvas if we are dewarping fisheye video\n */\n _render() {\n if (!this._renderer) {\n return;\n }\n\n // Update the pan/tilt position if we have a continuous move in progress\n this._updateMovingPanTilt();\n\n // Don't render every cycle to avoid using excessive GPU\n const now = performance.now();\n\n if (this._lastRenderTime !== null && now - this._lastRenderTime < MIN_RENDER_INTERVAL_MSECS) {\n requestAnimationFrame(this._render);\n return;\n }\n\n this._lastRenderTime = now;\n\n if (this._canvas.width !== this._canvas.clientWidth || this._canvas.height !== this._canvas.clientHeight) {\n this.log.debug(() => `Canvas size changed from ${this._canvas.width}x${this._canvas.height} ` +\n `to ${this._canvas.clientWidth}x${this._canvas.clientHeight}`);\n\n this._canvas.width = this._canvas.clientWidth;\n this._canvas.height = this._canvas.clientHeight;\n this._glContext.viewport(0, 0, this._canvas.width, this._canvas.height);\n this._renderer.handleResize();\n }\n\n const gl = this._glContext;\n\n if (this._videoElement && this._videoElement.videoHeight) {\n gl.bindTexture(gl.TEXTURE_2D, this._texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._videoElement);\n }\n\n this._renderer.render(this._texture);\n\n requestAnimationFrame(this._render);\n }\n\n /**\n * Fixes up the parent/child relationship between the current parent element, and the\n * video element or canvas depending on whether we're dewarping or not\n */\n _updateElements(newParent) {\n const childElement = this._canvas || this.videoElement;\n\n if (childElement === this._currentChild && newParent === this._parentElement) {\n this.handleResize();\n return;\n }\n\n if (this._parentElement && this._currentChild) {\n try {\n this._parentElement.removeChild(this._currentChild);\n this.log.debug(() => `PE: Removed element ${elementId(this._currentChild)} ` +\n `from current parent ${elementId(this._parentElement)}`);\n } catch (e) {\n this.log.error(() => `PE: Failed to remove video element ${elementId(this._currentChild)} ` +\n `from current parent ${elementId(this._parentElement)}: ${e}`);\n }\n }\n\n if (newParent !== this._parentElement) {\n this.log.debug(() => `Parent element ${elementId(this._parentElement)} -> ${elementId(newParent)}`);\n this._parentElement = newParent;\n }\n\n if (childElement !== this._currentChild) {\n this.log.debug(() => `Child element ${elementId(this._currentChild)} -> ${elementId(childElement)}`);\n this._currentChild = childElement;\n }\n\n if (this._parentElement && this._currentChild) {\n this._parentElement.appendChild(this._currentChild);\n this.log.debug(() => `PE: Added element ${elementId(this._currentChild)} ` +\n `to new parent ${elementId(this._parentElement)}`);\n }\n\n this.handleResize();\n }\n\n _updateMovingPanTilt() {\n if (!this._renderer || !this._panTiltSpeed || !this._lastPanTiltTime) {\n return;\n }\n\n const panTilt = this._renderer.panTilt;\n const now = performance.now();\n const elapsed = (now - this._lastPanTiltTime) / 1000;\n\n const newPanTilt = {\n pan: panTilt.pan + (elapsed * MAX_PT_DEGREES_PER_SECOND * this._panTiltSpeed.pan),\n tilt: panTilt.tilt + (elapsed * MAX_PT_DEGREES_PER_SECOND * this._panTiltSpeed.tilt),\n };\n\n this._renderer.panTilt = newPanTilt;\n this._panTiltBase = this._renderer.panTilt;\n this._lastPanTiltTime = now;\n }\n\n /**\n * Enables image transformation using WebGL\n */\n _enableWebglTransform(mode) {\n if (!this._canvas) {\n if (!this._initWebgl()) {\n return false;\n }\n }\n\n switch (mode) {\n case FisheyeMode.Ptz:\n this._renderer = new FisheyePtzRenderer(this._glContext, this._shaderInfo);\n break;\n\n case FisheyeMode.Panorama:\n this._renderer = new FisheyePanoramaRenderer(this._glContext, this._shaderInfo, false);\n break;\n\n case FisheyeMode.SplitPanorama:\n this._renderer = new FisheyePanoramaRenderer(this._glContext, this._shaderInfo, true);\n break;\n\n default:\n this.log.error(`Unsupported mode ${mode}`);\n return false;\n }\n\n this._initRenderer();\n\n return true;\n }\n\n /**\n * Disables image transformation using WebGL\n */\n _disableWebglTransform() {\n if (!this._canvas) {\n return;\n }\n\n const gl = this._glContext;\n\n this._canvas = null;\n this._glContext = null;\n\n gl.deleteProgram(this._shaderInfo.program);\n gl.deleteTexture(this._texture);\n\n this._shaderInfo = null;\n this._texture = null;\n\n if (this._renderer) {\n this._renderer.cleanUp();\n this._renderer = null;\n }\n }\n\n _initRenderer() {\n this._renderer.setGeometry(this._fisheyeParams.geometry);\n this._renderer.mountType = this._fisheyeParams.mountType;\n this._renderer.mountAngle = this._fisheyeParams.mountAngle;\n this._renderer.zoomState = this._zoom;\n this._renderer.fillMode = this._fillMode;\n\n requestAnimationFrame(this._render);\n }\n\n _initWebgl() {\n this._canvas = this._elementFactory.createCanvas();\n this._canvas.id = `canvas_${this._index + 1}:${this._canvasIndex}`;\n ++this._canvasIndex;\n const gl = this._canvas.getContext('webgl');\n this._glContext = gl;\n\n if (!this._glContext) {\n this._canvas = null;\n return false;\n }\n\n this._texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, this._texture);\n\n // Create a single-pixel texture so that we can use it before we have the first\n // frame of video.\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,\n new Uint8Array([0, 0, 0, 255]));\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\n this._shaderInfo = initFisheyeShaderProgram(gl);\n\n return true;\n }\n}\n\nfunction geometryEquals(g1, g2) {\n if (g1 === null || g2 === null) {\n return g1 === null && g2 === null;\n }\n\n if (g1.size !== null || g2.size !== null) {\n if (g1.size === null || g2.size === null) {\n return false;\n }\n\n if (g1.size.width !== g2.size.width || g1.size.height !== g2.size.height) {\n return false;\n }\n }\n\n if (g1.center !== null || g2.center !== null) {\n if (g1.center === null || g2.center === null) {\n return false;\n }\n\n if (g1.center.x !== g2.center.x || g1.center.y !== g2.center.y) {\n return false;\n }\n }\n\n if (g1.focalLength !== g2.focalLength) {\n return false;\n }\n\n return true;\n}\n","import {MediaType, Direction, CodecType} from '../defs';\nimport Html5MediaState from './html5mediastate';\nimport {Timer, Duration, Logger} from '@oecommon/plasma-js';\n\n// Adjust playback timing if out of sync by more than this amount\nconst SYNC_ADJUST_THRESHOLD = Duration.milliseconds(100);\n\nlet instanceNum = 0;\n\nexport default class Html5AudioRenderer {\n constructor(reactor, elementFactory, mediaSourceFactory, objectUrlManager) {\n this.id = ++instanceNum;\n this.log = new Logger('html5audiorenderer', this.id);\n\n this._reactor = reactor;\n this._elementFactory = elementFactory;\n this._mediaSourceFactory = mediaSourceFactory;\n this._objectUrlManager = objectUrlManager;\n this._mediaState = null;\n this._renderClock = null;\n this._readyToPlay = false;\n this._haveSample = false;\n this._playing = false;\n this._muted = true;\n this._volume = 0;\n this._trackId = 0;\n this._trackInfo = null;\n this._audioInfo = null;\n this._playTimer = new Timer(reactor);\n }\n\n supportsCodec(codecType) {\n return codecType === CodecType.AAC;\n }\n\n set renderClock(value) {\n this._renderClock = value;\n }\n\n get renderClock() {\n return this._renderClock;\n }\n\n set muted(value) {\n this._muted = value;\n if (!value) {\n this._maybeInitialize();\n } else {\n this._reset();\n }\n }\n\n get muted() {\n return this._muted;\n }\n\n set volume(value) {\n this._volume = value;\n if (this._mediaState) {\n this._mediaState.volume = value;\n }\n }\n\n get volume() {\n return this._volume;\n }\n\n /**\n * Called to report track information\n *\n * @param {number} trackId\n * @param {TrackInfo} trackInfo\n */\n handleTrackInfo(trackId, trackInfo) {\n this._reset();\n\n this._trackId = trackId;\n this._trackInfo = trackInfo;\n this._maybeInitialize();\n }\n\n /**\n * Called to report audio information for a track\n *\n * @param {number} trackId\n * @param {AudioInfo} audioInfo\n */\n handleAudioInfo(trackId, audioInfo) {\n this._audioInfo = audioInfo;\n\n if (this._mediaState) {\n this._mediaState.addAudioInfo(trackId, audioInfo);\n }\n }\n\n /**\n * Passes a sample to the render controller\n *\n * @param {MediaSample} sample\n */\n handleSample(sample) {\n if (!this._mediaState) {\n return true;\n }\n\n this._mediaState.addSample(sample);\n this._haveSample = true;\n\n this._maybePlay();\n\n return true;\n }\n\n enable() {\n this._maybeInitialize();\n }\n\n disable() {\n this._reset();\n }\n\n /**\n * Called periodically to check and sync playback state\n */\n syncPlayback() {\n this.log.spam('Checking playback state');\n\n if (!this._mediaState) {\n return;\n }\n\n if (this._renderClock) {\n const idealTime = this._renderClock.currentTime;\n const actualTime = this._mediaState.currentTime;\n\n if (idealTime && idealTime.isValid && actualTime && actualTime.isValid) {\n const delta = idealTime.minus(actualTime);\n\n if (delta.gt(SYNC_ADJUST_THRESHOLD)) {\n this.log.debug(() => 'Adjusting playback forwards. ' +\n `idealTime=${idealTime}, actualTime=${actualTime}, delta=${delta}`);\n this._setCurrentTime(idealTime);\n } else if (delta.lt(SYNC_ADJUST_THRESHOLD.negate())) {\n const delay = delta.negate();\n this.log.debug(() => `Pausing for ${delay} ` +\n `idealTime=${idealTime}, actualTime=${actualTime}, delta=${delta}`);\n this._mediaState.paused = true;\n this._playTimer.set(delay, () => {\n this.log.debug('Unpausing audio playback');\n this._mediaState.paused = false;\n });\n }\n }\n }\n\n this._mediaState.removeOldMedia();\n }\n\n get hasDebugBlob() {\n return this._mediaState && this._mediaState.hasDebugBlob;\n }\n\n getDebugBlob() {\n return this._mediaState ? this._mediaState.getDebugBlob() : null;\n }\n\n _setCurrentTime(timestamp) {\n this._mediaState.currentTime = timestamp;\n this._playTimer.kill();\n }\n\n _maybeInitialize() {\n if (this._mediaState || !this._trackInfo || this._muted) {\n return;\n }\n\n this._initialize();\n }\n\n _initialize() {\n if (this._mediaState) {\n this._mediaState.close();\n }\n\n this._mediaState = new Html5MediaState(this._reactor, this._elementFactory, this._mediaSourceFactory,\n this._objectUrlManager, MediaType.Audio, Direction.Forwards, false);\n this._mediaState.onReady = this._onSourceReady.bind(this);\n this._mediaState.onCanPlay = this._onCanPlay.bind(this);\n this._mediaState.onError = this._handleSourceError.bind(this);\n\n this._mediaState.muted = this._muted;\n this._mediaState.volume = this._volume;\n\n if (this._trackInfo) {\n this._mediaState.addTrackInfo(this._trackId, this._trackInfo);\n if (this._audioInfo) {\n this._mediaState.addAudioInfo(this._trackId, this._audioInfo);\n }\n }\n }\n\n _reset() {\n this._playTimer.kill();\n\n if (this._mediaState) {\n this._mediaState.close();\n this._mediaState = null;\n }\n\n this._readyToPlay = false;\n this._haveSample = false;\n this._playing = false;\n }\n\n /**\n * Called when the media source has entered a ready state\n */\n _onSourceReady(seekableTime) {\n this.log.spam(`Source ready, seekableTime=${seekableTime}`);\n\n if (seekableTime) {\n this._readyToPlay = true;\n this._maybePlay();\n }\n }\n\n /**\n * Called when the media element generates a \"canplay\" event\n */\n _onCanPlay(timestamp) {\n this.log.debug(() => `Ready to play, timestamp=${timestamp}`);\n\n if (this._mediaState.isStalled) {\n this.log.debug('Resuming stalled playback');\n this._mediaState.play();\n }\n }\n\n /**\n * Called when SourceBuffer encounters an error\n */\n _handleSourceError() {\n this.log.warn('Source error');\n }\n\n _maybePlay() {\n if (this._playing || !this._haveSample || !this._readyToPlay) {\n return;\n }\n\n this.log.debug('Starting playback');\n\n this._mediaState.play();\n this._playing = true;\n }\n}\n","import {Duration, Logger, TimeDefs, Timer} from '@oecommon/plasma-js';\nimport {CodecType} from '../defs';\n\nconst G711_SAMPLE_RATE = 8000;\nconst MAX_QUEUE_DURATION = Duration.seconds(4);\nconst RENDER_TIME_MAX_DELTA = Duration.milliseconds(100);\nconst MAX_PADDING_FRAMES = 1024;\nconst PROCESS_INTERVAL = Duration.milliseconds(60);\nconst TARGET_LATENCY_EXTRA_SECONDS = 0.06;\n\nlet instanceNum = 0;\n\nexport default class WebAudioRenderer {\n constructor(reactor, audioContextFactory, audioWorkletFactory) {\n this.id = ++instanceNum;\n this.log = new Logger('webaudiorenderer', this.id);\n this._reactor = reactor;\n this._audioContextFactory = audioContextFactory;\n this._audioWorkletFactory = audioWorkletFactory;\n this._renderClock = null;\n this._sampleRate = 0;\n this._volume = 0;\n this._muted = true;\n this._initializing = false;\n this._resetting = false;\n this._audioContext = null;\n this._gainNode = null;\n this._workletNode = null;\n this._renderQueue = [];\n this._sampleCount = 0;\n this._lastSampleValue = 0xff;\n this._processTimer = new Timer(reactor);\n }\n\n set renderClock(value) {\n this._renderClock = value;\n }\n\n get renderClock() {\n return this._renderClock;\n }\n\n get volume() {\n return this._volume;\n }\n\n set volume(value) {\n this._volume = value;\n this._updateAudioState();\n }\n\n get muted() {\n return this._muted;\n }\n\n set muted(value) {\n this._muted = value;\n this._updateAudioState();\n }\n\n supportsCodec(codecType) {\n return codecType === CodecType.G711;\n }\n\n handleTrackInfo(trackId, trackInfo) {\n if (trackInfo.codecType !== CodecType.G711) {\n return;\n }\n\n this._sampleRate = G711_SAMPLE_RATE;\n this._updateAudioState();\n }\n\n handleAudioInfo(trackId, audioInfo) {\n this._sampleRate = audioInfo.sampleRate;\n this._updateAudioState();\n }\n\n handleSample(sample) {\n this._trimQueue(sample.timestamp);\n this.log.spam(() => `Queuing sample ${sample.toString()}`);\n this._renderQueue.push(sample);\n }\n\n syncPlayback() {\n }\n\n enable() {\n this._updateAudioState();\n }\n\n disable() {\n this._resetAudioContext();\n }\n\n get hasDebugBlob() {\n return false;\n }\n\n getDebugBlob() {\n return null;\n }\n\n _processQueue() {\n if (!this._audioContext || !this._workletNode) {\n return;\n }\n\n const now = this._reactor.timeProvider.currentTime;\n const currentTime = this._audioContext.currentTime;\n const baseLatency = this._audioContext.baseLatency;\n const estimatedContextTime = currentTime - baseLatency;\n\n this.log.spam(() => `Render queue length is ${this._renderQueue.length}`);\n\n while (this._renderQueue.length) {\n const fillTime = this._sampleCount / this._sampleRate;\n const latency = fillTime - estimatedContextTime;\n\n if (latency >= this._targetLatency) {\n // Already have enough samples queued\n this.log.spam(() => `Already have ${latency}s queued, not queuing more`);\n break;\n }\n\n const sample = this._renderQueue[0];\n\n // What will be the render time of the next data we send to the audio context?\n const nextRenderTime = now.plus(Duration.seconds(latency));\n const sampleRenderTime = this._renderClock.getRenderTime(sample.timestamp);\n\n // Don't do any adjustment if contextTime hasn't started updating yet\n const delta = estimatedContextTime ? sampleRenderTime.minus(nextRenderTime) : Duration.zero;\n\n this.log.spam(() => `Sample ${sample.toString()}: ` +\n `estimatedContextTime=${estimatedContextTime}, ` +\n `fillTime=${fillTime}, ` +\n `nextRenderTime=${nextRenderTime}, ` +\n `sampleRenderTime=${sampleRenderTime}, ` +\n `delta=${delta}`);\n\n // If delta is positive, it won't yet be time to render this sample when the\n // audioContext reaches nextRenderTime. If it's negative, we'll be too late\n // to render it. Only do something about this if the delta is greater than\n // RENDER_TIME_MAX_DELTA.\n if (delta.ge(RENDER_TIME_MAX_DELTA)) {\n // Inject the appropriate number of padding frames\n const paddingFramesToQueue = Math.min(this._durationToSampleCount(delta), MAX_PADDING_FRAMES);\n this.log.spam(() => `Queuing ${paddingFramesToQueue} padding frames, value ${this._lastSampleValue}`);\n const padding = new Uint8Array(paddingFramesToQueue);\n padding.fill(this._lastSampleValue);\n this._scheduleBytes(padding);\n } else if (delta.le(RENDER_TIME_MAX_DELTA.negate())) {\n // If the delta is greater than the MediaSample duration, skip it entirely. Otherwise\n // queue a subset of the data.\n const framesToSkip = this._durationToSampleCount(delta.negate());\n if (sample.size > framesToSkip) {\n this.log.spam(() => `Queuing ${sample.size - framesToSkip} frames from sample`);\n this._scheduleBytes(new Uint8Array(sample.data.buffer, sample.size - framesToSkip, framesToSkip));\n } else {\n this.log.spam('Skipping sample');\n }\n this._renderQueue.shift();\n } else {\n this.log.spam('Queuing full sample');\n this._scheduleBytes(sample.data);\n this._renderQueue.shift();\n }\n }\n }\n\n /**\n * Schedule playback of a batch of data by posting it to the worklet node\n */\n _scheduleBytes(bytes) {\n if (!bytes.length) {\n return;\n }\n\n this._workletNode.port.postMessage({type: 'bytes', bytes});\n if (this._audioContext.state !== 'running') {\n this.log.debug(() => `Audio context state is ${this._audioContext.state}; resuming`);\n this._audioContext.resume();\n }\n\n this._sampleCount += bytes.length;\n this._lastSampleValue = bytes[bytes.length - 1];\n }\n\n /**\n * Returns the target latency, i.e. the time that should elapse between posting\n * a sample to the worklet node and that sample being played.\n */\n get _targetLatency() {\n if (!this._audioContext) {\n return 0;\n }\n\n return this._audioContext.baseLatency + TARGET_LATENCY_EXTRA_SECONDS;\n }\n\n /**\n * Trims the queue so that adding a sample with the specified timestamp doesn't take it over the\n * maximum duration\n */\n _trimQueue(newTimestamp) {\n let trimCount = 0;\n const trimThreshold = newTimestamp.minus(MAX_QUEUE_DURATION);\n\n for (let i = 0; i < this._renderQueue.length; ++i) {\n const sample = this._renderQueue[i];\n if (sample.timestamp.le(trimThreshold)) {\n trimCount = i + 1;\n } else if (sample.timestamp.gt(newTimestamp)) {\n // Gone back in time - erase all samples from this one on\n this.log.notice(() => `Time shift detected - removing ${this._renderQueue.length - i} samples`);\n this._renderQueue.splice(i);\n break;\n }\n }\n\n if (trimCount) {\n this.log.notice(() => `Too many samples queued, removing ${trimCount}`);\n this._renderQueue.splice(0, trimCount);\n }\n }\n\n async _updateAudioState() {\n await this._initAudioContext();\n this._setVolumeOnGainNode();\n }\n\n _setVolumeOnGainNode() {\n if (this._gainNode) {\n this._gainNode.gain.value = this._muted ? 0 : this._volume;\n }\n }\n\n async _initAudioContext() {\n if (this._audioContext || this._muted || !this._sampleRate) {\n return Promise.resolve();\n }\n\n this._initializing = true;\n this._audioContext = this._audioContextFactory.createAudioContext(this._sampleRate);\n this._gainNode = this._audioContext.createGain();\n this._setVolumeOnGainNode();\n\n const url = this._audioWorkletFactory.createAudioWorkletUrl();\n\n await this._audioContext.audioWorklet.addModule(url)\n .then(() => {\n this._initializing = false;\n this._workletNode = this._audioWorkletFactory.createAudioWorkletNode(this.id, this._audioContext);\n this._gainNode.connect(this._audioContext.destination);\n this._workletNode.connect(this._gainNode);\n this._processTimer.set(PROCESS_INTERVAL, this._processQueue.bind(this), true);\n })\n .catch((error) => {\n this.log.error('An error occurred while creating the worklet node', error);\n });\n }\n\n async _resetAudioContext() {\n if (!this._audioContext || this._resetting) {\n return;\n }\n\n try {\n this.log.debug(() => `Resetting audio context. id = ${this.id}`);\n this._resetting = true;\n this._processTimer.kill();\n await this._audioContext.close();\n this._audioContext = null;\n this._gainNode = null;\n this._workletNode = null;\n this._renderQueue = [];\n this._sampleCount = 0;\n } finally {\n this._resetting = false;\n this.log.debug(() => `Audio context reset. id = ${this.id}`);\n }\n }\n\n _durationToSampleCount(duration) {\n return duration.value * this._sampleRate / TimeDefs.TimeUnitsPerSecond;\n }\n}\n","import {CodecType} from '../defs';\nimport Html5AudioRenderer from './html5audiorenderer';\nimport WebAudioRenderer from './webaudiorenderer';\n\nexport default class AudioRendererFactory {\n constructor(reactor, elementFactory, mediaSourceFactory, objectUrlManager,\n audioContextFactory, audioWorkletFactory) {\n this._reactor = reactor;\n this._elementFactory = elementFactory;\n this._mediaSourceFactory = mediaSourceFactory;\n this._objectUrlManager = objectUrlManager;\n this._audioContextFactory = audioContextFactory;\n this._audioWorkletFactory = audioWorkletFactory;\n }\n\n create(codecType) {\n if (codecType === CodecType.AAC) {\n return new Html5AudioRenderer(this._reactor, this._elementFactory, this._mediaSourceFactory,\n this._objectUrlManager);\n } else if (codecType === CodecType.G711) {\n return new WebAudioRenderer(this._reactor, this._audioContextFactory, this._audioWorkletFactory);\n } else {\n return null;\n }\n }\n}\n","import {Logger} from '@oecommon/plasma-js';\nimport {StreamTransportState, StreamTransportType} from '../defs';\n\nlet instanceNum = 0;\n\n/**\n * @implements {StreamTransport}\n *\n * StreamTransport implementation that uses WebSocket.\n */\nexport default class WebSocketStreamTransport {\n constructor(connection, url) {\n this.log = new Logger('wsockstream', ++instanceNum);\n this._connection = connection;\n this._url = url;\n this._transportState = StreamTransportState.Idle;\n this._impl = null;\n\n this._onopen = null;\n this._onclose = null;\n this._onerror = null;\n this._onmessage = null;\n\n this.onTransportStateChange = null;\n }\n\n get transportType() {\n return StreamTransportType.WebSocket;\n }\n\n get transportState() {\n return this._transportState;\n }\n\n getWebRtcStats() {\n return Promise.reject(new Error('Not a WebRTC transport'));\n }\n\n /**\n * Override of {StreamTransport} onopen.\n */\n get onopen() {\n return this._onopen;\n }\n\n set onopen(newVal) {\n this._onopen = newVal;\n }\n\n /**\n * Override of {StreamTransport} onclose.\n */\n get onclose() {\n return this._onclose;\n }\n\n set onclose(newVal) {\n this._onclose = newVal;\n }\n\n /**\n * Override of {StreamTransport} onerror.\n */\n get onerror() {\n return this._onerror;\n }\n\n set onerror(newVal) {\n this._onerror = newVal;\n }\n\n /**\n * Override of {StreamTransport} onmessage.\n */\n get onmessage() {\n return this._onmessage;\n }\n\n set onmessage(newVal) {\n this._onmessage = newVal;\n }\n\n /**\n * Opens the WebSocket and reports Connecting.\n */\n async start() {\n this.log.debug('Starting stream transport');\n\n this._setState(StreamTransportState.Connecting);\n\n this._impl = this._connection.createWebSocket(this._url);\n this._impl.binaryType = 'arraybuffer';\n this._impl.onopen = this._handleOpen.bind(this);\n this._impl.onclose = this._handleClose.bind(this);\n this._impl.onerror = this._handleError.bind(this);\n this._impl.onmessage = this._handleMessage.bind(this);\n }\n\n /**\n * Override of {StreamTransport} send.\n */\n send(data) {\n if (!this._impl) {\n return;\n }\n this._impl.send(data);\n }\n\n /**\n * Override of {StreamTransport} close.\n */\n close(code, reason) {\n if (!this._impl) {\n return;\n }\n this._impl.close(code, reason);\n }\n\n /**\n * Helper method for updating transport state if necessary and notifying observers\n */\n _setState(state) {\n if (state === this._transportState) {\n return;\n }\n\n this.log.debug(`Transport state changing from ${this._transportState} to ${state}`);\n\n this._transportState = state;\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n\n /**\n * Handler for the WebSocket opened event\n */\n _handleOpen(event) {\n this.log.debug('Transport opened');\n this._setState(StreamTransportState.Connected);\n if (this._onopen) {\n this._onopen(event);\n }\n }\n\n /**\n * Handler for the WebSocket closed event\n */\n _handleClose(event) {\n this.log.debug('Transport closed');\n this._setState(StreamTransportState.Closed);\n if (this._onclose) {\n this._onclose(event);\n }\n }\n\n /**\n * Handler for the WebSocket error event\n */\n _handleError(event) {\n this.log.debug('Transport error');\n this._setState(StreamTransportState.Error);\n if (this._onerror) {\n this._onerror(event);\n }\n }\n\n /**\n * Handler for the WebSocket message event\n */\n _handleMessage(event) {\n if (this._onmessage) {\n this._onmessage(event);\n }\n }\n}\n","import WebSocketStreamTransport from './websocketstreamtransport';\n\nexport default class WebSocketStreamTransportFactory {\n constructor() {}\n\n create(nvrConnection, url) {\n return new WebSocketStreamTransport(nvrConnection, url);\n }\n}\n","import {DataEvent, Duration, EventTarget, Logger, LogLevel, PromiseSource} from '@oecommon/plasma-js';\nimport {OscarEvents, StreamTransportState} from '../defs';\n\nexport const WEBRTC_SESSIONS_ENDPOINT = '/napi/webrtc/sessions';\n\nlet instanceNum = 0;\n\n/**\n * Helper error to distinguish Timeouts from all other Errors\n */\nclass TimeoutError extends Error {\n constructor(message) {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Class responsible for creating and managing an underlying RTCPeerConnection\n */\nexport default class WebRtcConnection extends EventTarget {\n constructor(nvrConnection, url, webRtcStreamDataChannelIdQueue, adcStunServer) {\n super();\n this.log = new Logger('webrtcconn', ++instanceNum);\n this._nvrConnection = nvrConnection;\n this._url = url;\n this._webRtcStreamDataChannelIdQueue = webRtcStreamDataChannelIdQueue;\n this._rtcPeerConnection = null;\n this._promiseSource = new PromiseSource();\n this._localDescPromiseSource = new PromiseSource();\n this._iceCandidatesGatheredPromiseSource = new PromiseSource();\n this._transportState = StreamTransportState.Idle;\n this._adcStunServer = adcStunServer;\n\n this.onTransportStateChange = null;\n }\n\n get transportState() {\n return this._transportState;\n }\n\n get rtcPeerConnection() {\n return this._rtcPeerConnection;\n }\n\n get rtcPeerConnectionState() {\n if (!this._rtcPeerConnection) {\n return null;\n }\n return this._rtcPeerConnection.connectionState;\n }\n\n /**\n * Creates an RTCPeerConnection and establishes the webrtc connection\n */\n connect() {\n if (!this._nvrConnection.allowWebRTC()) {\n this.log.debug(() => `WebRTC not allowed for ${this._nvrConnection.getHostname()}`);\n throw new Error();\n }\n\n this._candidates = [];\n this._rtcPeerConnection = this._createRtcPeerConnection();\n this._firstChannel = this.createDataChannel();\n\n this.log.debug('WebRTC connection process started');\n\n this._rtcPeerConnection.createOffer()\n .then((offer) => {\n this.log.debug(() => `Created offer, ${offer.sdp}`);\n this._rtcPeerConnection.setLocalDescription(offer);\n })\n .then(this._onLocalDescDone.bind(this));\n\n Promise.all([\n this._localDescPromiseSource.makePromise(),\n this._iceCandidatesGatheredPromiseSource.makePromise(),\n ])\n .then(this._onLocalCandidateReady.bind(this))\n .then(this._onRemoteCandidateReady.bind(this))\n .catch((e) => {\n if (this._promiseSource.active) {\n this.log.error(`Error occurred while establishing new WebRTC channel. ${e.message}`);\n this._setState(StreamTransportState.Error);\n this._promiseSource.fail(e);\n }\n });\n\n const connectionPromise = this._promiseSource.makePromise();\n this._raceAgainstTimeout(connectionPromise)\n .catch((e) => {\n if (this._promiseSource.active) {\n if (e instanceof TimeoutError) {\n this.log.warn(e.message);\n this._rtcPeerConnection.close();\n this._setState(StreamTransportState.Timeout);\n } else {\n this.log.error(`Error occurred while establishing new WebRTC channel. ${e.message}`);\n this._setState(StreamTransportState.Error);\n }\n this._promiseSource.fail(e);\n }\n });\n return connectionPromise;\n }\n\n /**\n * Creates an RTCDataChannel on the underlying RTCPeerConnection\n */\n createDataChannel() {\n if (this._firstChannel) {\n const channel = this._firstChannel;\n this._firstChannel = null;\n this.log.debug(`Reusing initially opened datachannel with id ${channel.id}`);\n return channel;\n }\n\n const dcId = this._webRtcStreamDataChannelIdQueue.getNextId();\n const channel = this._rtcPeerConnection.createDataChannel('ospwebrtc', {id: dcId, negotiated: true});\n channel.binaryType = 'arraybuffer';\n\n // custom close override\n const origClose = channel.close.bind(channel);\n channel.close = () => {\n origClose();\n this._webRtcStreamDataChannelIdQueue.returnClosedId(channel.id);\n };\n\n this.log.debug(`Created datachannel with id ${channel.id}`);\n return channel;\n }\n\n /**\n * Closes the RTCPeerConnection\n */\n close() {\n this.log.debug('Closing rtcpeerconnection');\n if (this._rtcPeerConnection) {\n this._rtcPeerConnection.close();\n this._rtcPeerConnection = null;\n }\n }\n\n /**\n * Attaches an event listener to the underlying RTCPeerConnection. Logs a warning if\n * `connect` hasn't been called before the event listener addition is attempted.\n */\n addEventListener(type, listener) {\n if (type === OscarEvents.TransportStateChange) {\n super.addEventListener(type, listener);\n return;\n }\n\n if (!this._rtcPeerConnection) {\n this.log.warn(`Event listener cannot be added until after 'connect' is called`);\n return;\n }\n this.log.spam(`Adding rtcpeerconnection event listener with type '${type}'`);\n this._rtcPeerConnection.addEventListener(type, listener);\n }\n\n /**\n * Removes an event listener to the underlying RTCPeerConnection. Does nothing if\n * there is no underlying RTCPeerConnection.\n */\n removeEventListener(type, listener) {\n if (type === OscarEvents.TransportStateChange) {\n super.removeEventListener(type, listener);\n return;\n }\n\n if (!this._rtcPeerConnection) {\n return;\n }\n this.log.spam(`Removing rtcpeerconnection event listener with type '${type}'`);\n this._rtcPeerConnection.removeEventListener(type, listener);\n }\n\n _createRtcPeerConnection() {\n const rtcConfiguration = this._getRtcConfiguration();\n const rtcPeerConnection = new RTCPeerConnection(rtcConfiguration);\n rtcPeerConnection.onicecandidate = this._handleIceCandidate.bind(this);\n rtcPeerConnection.onconnectionstatechange = this._handleConnectionStateChange.bind(this);\n rtcPeerConnection.oniceconnectionstatechange = this._handleIceConnectionStateChange.bind(this);\n return rtcPeerConnection;\n }\n\n /**\n * Helper method for getting the configuration to be used with the RTCPeerConnection. Attempts to get the\n * configuration from the NvrConnection, and falls back to a hardcoded instance if not.\n */\n _getRtcConfiguration() {\n if (typeof this._nvrConnection.getWebRTCConfiguration === 'function') {\n const config = this._nvrConnection.getWebRTCConfiguration(this._url);\n this.log.debug(() => `Using NvrConnection specific RTCConfiguration, ${JSON.stringify(config)}`);\n return config;\n }\n return {iceServers: [{urls: \"stun:\" + this._adcStunServer}]};\n }\n\n /**\n * Timeout promise that rejects after 4 seconds by default. Prevents slow webrtc connections, forcing a\n * fallback to relay.\n */\n _createConnectionTimeoutPromise() {\n const WEBRTC_CONNECTION_TIMEOUT = Duration.milliseconds(\n Number((typeof localStorage !== 'undefined' && localStorage.getItem('webrtc.timeout')) || 4000));\n\n return new Promise((_, reject) => {\n setTimeout(\n reject,\n WEBRTC_CONNECTION_TIMEOUT.totalMilliseconds,\n new TimeoutError('WebRTC connection timeout occurred.')\n );\n });\n }\n\n /**\n * Will resolve with the provided promise if it completes before the timeout,\n * otherwise it will reject with a TimeoutError.\n */\n _raceAgainstTimeout(promise) {\n const timeoutPromise = this._createConnectionTimeoutPromise();\n return Promise.race([promise, timeoutPromise]);\n }\n\n /**\n * Helper method called when the local description is set on to the RTCPeerConnection\n */\n _onLocalDescDone() {\n this._logRtcPeerConnection('_onLocalDescDone');\n if (this._localDescPromiseSource.active) {\n this._localDescPromiseSource.complete();\n }\n }\n\n /**\n * Helper method called when \"all\" ice candidates have been gathered. We stop gathering\n * candidates after receiving the first `srflx` candidate.\n */\n _onIceCandidatesGathered() {\n this._logRtcPeerConnection('_onIceCandidatesGathered');\n if (this._iceCandidatesGatheredPromiseSource.active) {\n this._iceCandidatesGatheredPromiseSource.complete();\n }\n }\n\n /**\n * Handler for the RTCPeerConnection IceCandidate event.\n */\n _handleIceCandidate(e) {\n if (e.candidate) {\n this._candidates.push(e.candidate);\n this.log.debug(() => `Got candidate: ${JSON.stringify(e.candidate)}`);\n }\n\n const legacyCandidateGatheringCompleteFlag = !e.candidate;\n const receivedStunCandidate = !!e.candidate && e.candidate.candidate.includes('typ srflx');\n if (legacyCandidateGatheringCompleteFlag || receivedStunCandidate) {\n this._onIceCandidatesGathered();\n }\n }\n\n /**\n * Handler for the RTCPeerConnection ConnectionStateChanged event.\n */\n _handleConnectionStateChange(e) {\n this._logRtcPeerConnection('_handleConnectionStateChange');\n\n if (this._rtcPeerConnection.connectionState === 'failed') {\n if (this._promiseSource.active) {\n this.log.debug(() => `Connection failed for connection state: ${this._rtcPeerConnection.connectionState}`);\n this._promiseSource.fail(new Error('WebRTC connection failure'));\n }\n this._setState(StreamTransportState.Error);\n }\n\n if (this._rtcPeerConnection.connectionState === 'connected') {\n if (this._promiseSource.active) {\n this.log.debug('Connection succeeded');\n this._promiseSource.complete(this);\n }\n this._setState(StreamTransportState.Connected);\n }\n\n this._logRtcPeerConnectionStats();\n }\n\n /**\n * Handler for the RTCPeerConnection IceConnectionStateChanged event.\n */\n _handleIceConnectionStateChange(e) {\n this._logRtcPeerConnection('_handleIceConnectionStateChange');\n }\n\n /**\n * Called after the gathering phase has been completed. This generates the\n * webservice call to initiate the session.\n */\n _onLocalCandidateReady() {\n this._logRtcPeerConnection('_onLocalCandidateReady');\n\n const candidateDescs = [];\n for (const c of this._candidates) {\n candidateDescs.push({\n candidate: c.candidate,\n sdpMid: c.sdpMid,\n });\n }\n\n const payload = {\n sessionType: 'stream',\n sessionDesc: this._rtcPeerConnection.pendingLocalDescription.sdp,\n candidates: candidateDescs,\n };\n\n return this._nvrConnection.apiPost(WEBRTC_SESSIONS_ENDPOINT, JSON.stringify(payload))\n .then((response) => {\n this.log.debug(() => `Remote session response, ${JSON.stringify(response.data.content)}`);\n return response.data;\n })\n .catch((e) => {\n this.log.notice(`Remote session gathering request failed, ${e.toString()}`);\n throw e;\n });\n }\n\n /**\n * Handler for the signaling response.\n */\n _onRemoteCandidateReady(response) {\n this._logRtcPeerConnection('_onRemoteCandidateReady');\n\n if (this._rtcPeerConnection.connectionState === 'closed') {\n this.log.debug('Connection state is already closed, ignoring remote candidate');\n return;\n }\n\n const remoteDescription = new RTCSessionDescription({\n type: 'answer',\n sdp: response.content.sessionDesc,\n });\n this._rtcPeerConnection.setRemoteDescription(remoteDescription);\n\n for (const c of response.content.candidates) {\n this._rtcPeerConnection.addIceCandidate(new RTCIceCandidate(c))\n .catch((e) => {\n this.log.notice(() => `Failed to add candidate ${c.candidate}, error: ${e.toString()}`);\n });\n }\n }\n\n /**\n * Helper method for updating transport state if necessary and notifying observers\n */\n _setState(state) {\n if (state === this._transportState) {\n return;\n }\n\n this.log.debug(`Transport state changing from ${this._transportState} to ${state}`);\n\n this._transportState = state;\n // state must be provided in the event payload because listeners may not yet have\n // reference to the actual webrtcconnection based on the async `start` call\n this.dispatchEvent(new DataEvent(OscarEvents.TransportStateChange, this._transportState));\n }\n\n /**\n * Logs all RTCPeerConnection stats\n */\n _logRtcPeerConnectionStats() {\n if (!this.log.shouldLog(LogLevel.DEBUG)) {\n return;\n }\n\n if (!this._rtcPeerConnection) {\n this.log.warn(`Cannot log rtcpeerconnection stats before 'connect'`);\n return;\n }\n\n this._rtcPeerConnection.getStats().then((stats) => {\n try {\n this._writeConnectionStatsLog(stats);\n } catch (e) {\n this.log.warn(`Cound not log connection stats, ${e.toString()}`);\n }\n });\n }\n\n /**\n * Helper method for logging information about the RTCPeerConnection\n */\n _logRtcPeerConnection(prefix) {\n if (!this.log.shouldLog(LogLevel.DEBUG)) {\n return;\n }\n\n if (!this._rtcPeerConnection) {\n this.log.debug(`${prefix} rtcpeerconnection is null`);\n return;\n }\n\n try {\n const {\n connectionState,\n iceConnectionState,\n iceGatheringState,\n signalingState,\n } = this._rtcPeerConnection;\n\n let obj = {\n connectionState,\n iceConnectionState,\n iceGatheringState,\n signalingState,\n };\n\n if (this._rtcPeerConnection.sctp) {\n const {\n state: sctpState,\n transport: {\n state: transportState,\n },\n } = this._rtcPeerConnection.sctp;\n\n obj = {\n ...obj,\n sctpState,\n transportState,\n };\n }\n\n this.log.debug(() => `${prefix} rtcpeerconnection ${JSON.stringify(obj)}`);\n } catch (e) {\n this.log.warn(`${prefix} Error occurred while logging rtcpeerconnection, ${e.toString()}`);\n }\n }\n\n /**\n * Formats and writes RTCPeerConnection stats as candidate pairs,\n * and as all raw stats\n */\n _writeConnectionStatsLog(stats) {\n const statsArray = Array.from(stats.entries());\n\n const candidatePairs = statsArray.filter((s) => s[1].type === 'candidate-pair');\n if (!candidatePairs.length) {\n this.log.debug(() => `No candidate pairs`);\n } else {\n candidatePairs.forEach((p) => {\n const candidatePair = p[1];\n const {localCandidateId, remoteCandidateId} = candidatePair;\n const [, localCandidate] = statsArray.find((s) => s[0] === localCandidateId);\n const [, remoteCandidate] = statsArray.find((s) => s[0] === remoteCandidateId);\n\n this.log.spam(() => [\n candidatePair.type,\n candidatePair.id,\n candidatePair.nominated ? 'nominated' : 'not nominated',\n localCandidate.type,\n localCandidate.id,\n localCandidate.candidateType,\n localCandidate.protocol,\n localCandidate.address,\n localCandidate.networkType,\n remoteCandidate.type,\n remoteCandidate.id,\n remoteCandidate.candidateType,\n remoteCandidate.protocol,\n remoteCandidate.address,\n remoteCandidate.networkType,\n ].join(', '));\n });\n }\n\n this.log.spam(() => `Connection stats, ${JSON.stringify(statsArray)}`);\n }\n}\n","import {PromiseSource} from '@oecommon/plasma-js';\nimport {OscarEvents} from '../defs';\nimport WebRtcConnection from './webrtcconnection';\n\n/**\n * Class that manages delivering rtcpeerconnections per nvr. If multiple\n * connections are attempted at the same time, they will be queued and\n * delivered once the initial connection is established. Every request\n * gets its own individual connection.\n */\nexport class WebRtcConnectionManager {\n constructor(webRtcStreamDataChannelIdQueue, adcStunServer) {\n this._webRtcStreamDataChannelIdQueue = webRtcStreamDataChannelIdQueue;\n this._connectionMap = new Map();\n this._adcStunServer = adcStunServer;\n }\n\n /**\n * Returns `true` or `false` if webrtc has succeeded or failed for a given nvr. Returns\n * `undefined` if no connection attempt has been made.\n */\n supportsWebRtc(nvrConnection, url) {\n const key = nvrConnection.getHostname();\n const connectionState = this._connectionMap.get(key);\n if (!connectionState) {\n return undefined;\n }\n\n return connectionState.supported;\n }\n\n /**\n * Closes the WebRtcConnection if one exists, and fails any pending promises.\n * Does not modify the \"supported\" state of the connection.\n */\n disconnectWebRtcConnection(nvrConnection, url) {\n const key = nvrConnection.getHostname();\n const connectionState = this._connectionMap.get(key);\n if (!connectionState) {\n return;\n }\n this._onDisconnect(connectionState, new Error('WebRTC disconnected'));\n }\n\n /**\n * Returns a promise that will resolve with a WebRtcConnection for the given\n * nvr, or reject. Attaches an `onTransportChange` callback to the\n * WebRtcConnection if provided.\n */\n getWebRtcConnection(nvrConnection, url, onTransportStateChange) {\n const key = nvrConnection.getHostname();\n let connectionState = this._connectionMap.get(key);\n\n if (!connectionState) {\n connectionState = {\n nvrConnection,\n url,\n supported: undefined,\n pending: [],\n connection: null,\n connectionPromise: null,\n };\n this._connectionMap.set(key, connectionState);\n }\n\n if (connectionState.supported === false) {\n return Promise.reject(new Error('WebRTC unsupported'));\n }\n\n if (connectionState.connection) {\n if (onTransportStateChange) {\n connectionState.connection.addEventListener(OscarEvents.TransportStateChange, onTransportStateChange);\n }\n return Promise.resolve(connectionState.connection);\n }\n\n const promiseSource = new PromiseSource();\n\n if (!connectionState.connectionPromise) {\n connectionState.pending.push(promiseSource);\n connectionState.connectionPromise =\n this._createWebRtcConnection(nvrConnection, url, onTransportStateChange)\n .then((result) => this._onConnected(connectionState, result))\n .catch((error) => this._onConnectFailed(connectionState, error));\n } else {\n connectionState.pending.push(promiseSource);\n }\n\n return promiseSource.makePromise();\n }\n\n /**\n * Helper method for instanitating the WebRtcConnection, attaching any provided\n * `onTransportStateChange` callback, and connecting to the nvr.\n */\n async _createWebRtcConnection(nvrConnection, url, onTransportStateChange) {\n const connection = new WebRtcConnection(nvrConnection, url, this._webRtcStreamDataChannelIdQueue, this._adcStunServer);\n if (onTransportStateChange) {\n connection.addEventListener(OscarEvents.TransportStateChange, onTransportStateChange);\n }\n await connection.connect();\n return connection;\n }\n\n /**\n * Callback for a successful WebRtcConnection. Marks the connection state as\n * supported, completes any pending promises, and resets the remaining\n * connections state.\n */\n _onConnected(connectionState, connection) {\n connectionState.supported = true;\n connectionState.connection = connection;\n\n for (const promiseSource of connectionState.pending) {\n if (promiseSource.active) {\n promiseSource.complete(connectionState.connection);\n }\n }\n\n connectionState.pending = [];\n connectionState.connectionPromise = null;\n }\n\n /**\n * Callback for a failed WebRtcConnection. Marks the connection state as\n * unsupported if it has not succeeded in the past, fails any pending\n * promises, and resets the remaining connection state.\n */\n _onConnectFailed(connectionState, error) {\n if (connectionState.supported !== true) {\n // only set supported to false if we haven't successfully\n // connected in the past\n connectionState.supported = false;\n }\n\n for (const promiseSource of connectionState.pending) {\n if (promiseSource.active) {\n promiseSource.fail(error);\n }\n }\n\n connectionState.pending = [];\n connectionState.connectionPromise = null;\n }\n\n /**\n * Helper method for closing a WebRtcConnection, failing any pending promises,\n * and resetting the stored connection state. Does not modify the \"supported\"\n * portion of the connection state.\n */\n _onDisconnect(connectionState, error) {\n if (connectionState.connection) {\n connectionState.connection.close();\n connectionState.connection = undefined;\n }\n\n for (const promiseSource of connectionState.pending) {\n if (promiseSource.active) {\n promiseSource.fail(error);\n }\n }\n\n connectionState.pending = [];\n connectionState.connectionPromise = null;\n }\n}\n","import {Logger} from '@oecommon/plasma-js';\n\nlet webRtcStreamTransportIdQueueId = 0;\nconst MAX_STREAM_COUNT = 128;\n\nexport class WebRtcStreamTransportIdQueue {\n /**\n * Constructor\n */\n constructor(maxStreamCount = MAX_STREAM_COUNT) {\n this.log = new Logger('webrtcstreamidqueue', ++webRtcStreamTransportIdQueueId);\n\n this._maxStreamCount = maxStreamCount;\n this._queue = new Array(maxStreamCount).fill(0).map((_, i) => i);\n this._activeIds = new Set();\n }\n\n /**\n * Returns the next queue'd id\n */\n getNextId() {\n const nextId = this._queue.shift();\n if (nextId === undefined) {\n throw new Error('Queue is empty');\n }\n\n this._activeIds.add(nextId);\n this.log.debug(() => `Dequeueing id ${nextId}`);\n this.log.spam(() => `Current queue [${this._queue.join(',')}]`);\n return nextId;\n }\n\n /**\n * Places the returned id at the end of the queue\n */\n returnClosedId(id) {\n const success = this.tryReturnClosedId(id);\n if (success) {\n return;\n }\n\n if (id < 0 || id >= this._maxStreamCount) {\n throw new Error(`Invalid webrtc stream transport id ${id}`);\n }\n\n if (!this._activeIds.has(id)) {\n throw new Error(`Cannot return inactive id ${id}. This id is already enqueued.`);\n }\n }\n\n tryReturnClosedId(id) {\n if (id < 0 || id >= this._maxStreamCount) {\n return false;\n }\n\n if (!this._activeIds.has(id)) {\n return false;\n }\n\n this.log.debug(() => `Enqueueing id ${id}`);\n this.log.spam(() => `Current queue [${this._queue.join(',')}]`);\n\n this._queue.push(id);\n this._activeIds.delete(id);\n return true;\n }\n}\n","/**\n * @implements {StreamTransport}\n *\n * StreamTransport implementation that uses WebRtc.\n */\nimport {EventTarget, Logger, PromiseSource} from '@oecommon/plasma-js';\nimport {StreamTransportState, StreamTransportType} from '../defs';\n\nlet instanceNum = 0;\n\n//\n// Strings for each of the SCTP cause codes found in RFC\n// 4960, section 3.3.10:\n// https://datatracker.ietf.org/doc/html/rfc4960#section-3.3.10\n//\nconst sctpCauseCodes = [\n 'No SCTP error',\n 'Invalid stream identifier',\n 'Missing mandatory parameter',\n 'Stale cookie error',\n 'Sender is out of resource (i.e., memory)',\n 'Unable to resolve address',\n 'Unrecognized SCTP chunk type received',\n 'Invalid mandatory parameter',\n 'Unrecognized parameters',\n 'No user data (SCTP DATA chunk has no data)',\n 'Cookie received while shutting down',\n 'Restart of an association with new addresses',\n 'User-initiated abort',\n 'Protocol violation',\n];\n\n/**\n * Class responsible for maintaining an open transport stream to an nvr\n * over webrtc. This is accomplished using an RTCDataChannel on the underlying\n * WebRtcConnection/RTCPeerConnection.\n */\nexport default class WebRtcStreamTransport extends EventTarget {\n /**\n * Constructor\n */\n constructor(nvrConnection, url, webRtcConnectionManager) {\n super();\n\n this.log = new Logger('webrtcstream', ++instanceNum);\n\n this._nvrConnection = nvrConnection;\n this._url = new URL(url, \"https://\" + nvrConnection.getHostname()).toString();\n this._promiseSource = new PromiseSource();\n this._localDescPromiseSource = new PromiseSource();\n this._iceCandidatesGatheredPromiseSource = new PromiseSource();\n this._transportState = StreamTransportState.Idle;\n this._webRtcConnectionManager = webRtcConnectionManager;\n this._webRtcConnection = null;\n\n this._channel = null;\n this._onopen = null;\n this._onclose = null;\n this._onerror = null;\n this._onmessage = null;\n\n this.onTransportStateChange = null;\n }\n\n get transportType() {\n return StreamTransportType.WebRTC;\n }\n\n get transportState() {\n return this._transportState;\n }\n\n getWebRtcStats() {\n if (!this._webRtcConnection || !this._webRtcConnection.rtcPeerConnection) {\n return Promise.reject(new Error('WebRTC connection not established'));\n }\n\n return this._webRtcConnection.rtcPeerConnection.getStats(null);\n }\n\n /**\n * Override of {StreamTransport} onopen.\n */\n get onopen() {\n return this._onopen;\n }\n\n set onopen(newVal) {\n this._onopen = newVal;\n }\n\n /**\n * Override of {StreamTransport} onclose.\n */\n get onclose() {\n return this._onclose;\n }\n\n set onclose(newVal) {\n this._onclose = newVal;\n }\n\n /**\n * Override of {StreamTransport} onerror.\n */\n get onerror() {\n return this._onerror;\n }\n\n set onerror(newVal) {\n this._onerror = newVal;\n }\n\n /**\n * Override of {StreamTransport} onmessage.\n */\n get onmessage() {\n return this._onmessage;\n }\n\n set onmessage(newVal) {\n this._onmessage = newVal;\n }\n\n /**\n * Returns the RTCDataChannel associated with this WebRtcStream.\n */\n get channel() {\n return this._channel;\n }\n\n /**\n * Opens the WebRtcConnection if one is not yet opened, then attaches a new RTCDataChannel\n * to the underlying RTCPeerConnection, then reports Connecting. Throws an exception if the\n * nvr does not support webrtc connection (this is infered via previous failures).\n */\n async start() {\n if (this._webRtcConnectionManager.supportsWebRtc(this._nvrConnection, this._url) === false) {\n throw new Error('WebRTC previously failed, will not re-attempt');\n }\n\n this.log.debug('Starting stream transport');\n\n this._setState(StreamTransportState.Connecting);\n\n try {\n this._webRtcConnection = await this._webRtcConnectionManager.getWebRtcConnection(\n this._nvrConnection, this._url, this._handleTransportStateChange.bind(this));\n\n this._webRtcConnection.addEventListener('connectionstatechange', this._handleDisconnect.bind(this));\n this._addChannel();\n this._setState(StreamTransportState.Connected);\n this.log.debug(() => `WebRTC used for ${this._nvrConnection ? this._nvrConnection.getHostname() : 'unknown'}`);\n } catch (error) {\n if (this._webRtcConnection) {\n this._webRtcConnection.removeEventListener('connectionstatechange', this._handleDisconnect.bind(this));\n }\n if (this._channel) {\n this._channel.close();\n }\n throw error;\n }\n }\n\n /**\n * Override of {StreamTransport} send.\n */\n send(data) {\n this._channel.send(data);\n }\n\n /**\n * Override of {StreamTransport} close.\n */\n close(code, reason) {\n if (this._channel == null || this._channel.readyState !== 'open') {\n return;\n }\n this._channel.close();\n }\n\n /**\n * Adds a datachannel to the connection state.\n */\n _addChannel() {\n this._channel = this._webRtcConnection.createDataChannel();\n this._channel.onopen = this._handleOpen.bind(this);\n this._channel.onclose = this._handleClose.bind(this);\n this._channel.onerror = this._handleError.bind(this);\n this._channel.onmessage = this._handleMessage.bind(this);\n }\n\n /**\n * Helper method for updating transport state if necessary and notifying observers\n */\n _setState(state) {\n if (state === this._transportState) {\n return;\n }\n\n this.log.debug(`Transport state changing from ${this._transportState} to ${state}`);\n\n this._transportState = state;\n if (this.onTransportStateChange) {\n this.onTransportStateChange();\n }\n }\n\n /**\n * Callback for transport state changes on the WebRtcConnection. Does not report the\n * Connected state intentionally, and instead relies on the RTCDataChannel opened callback\n * `_handleOpen` to report that state.\n */\n _handleTransportStateChange(event) {\n if (event.data !== StreamTransportState.Connected) {\n this._setState(event.data);\n }\n }\n\n /**\n * Handler for the RTCDataChannel opened event\n */\n _handleOpen(event) {\n this.log.debug('Transport opened');\n this._setState(StreamTransportState.Connected);\n if (this._onopen) {\n this._onopen(event);\n }\n }\n\n /**\n * Handler for the RTCDataChannel closed event\n */\n _handleClose(event) {\n this.log.debug('Transport closed');\n this._setState(StreamTransportState.Closed);\n if (this._onclose) {\n this._onclose(event);\n }\n }\n\n /**\n * Handler for the RTCDataChannel error event\n */\n _handleError(event) {\n this.log.debug('Transport error');\n this._setState(StreamTransportState.Error);\n this._handleDataChannelError(event);\n if (this._onerror) {\n this._onerror(event);\n }\n }\n\n /**\n * RTCPeerConnection connectionstatechange event listener that disconnects the WebRtcConnection\n * and reports Closed.\n */\n _handleDisconnect() {\n if (this._webRtcConnection.rtcPeerConnectionState !== 'disconnected') {\n return;\n }\n\n this.log.debug('Transport disconnected');\n\n this._webRtcConnectionManager.disconnectWebRtcConnection(this._nvrConnection, this._url);\n this._webRtcConnection.removeEventListener('connectionstatechange', this._handleDisconnect.bind(this));\n\n this._setState(StreamTransportState.Closed);\n if (this._onerror) {\n this._onerror();\n }\n }\n\n /**\n * Handler for the RTCDataChannel message event\n */\n _handleMessage(event) {\n if (this._onmessage) {\n this._onmessage(event);\n }\n }\n\n /**\n * Handler for the RTCDataChannel Error event.\n */\n _handleDataChannelError(e) {\n if (!e || !e.error) {\n return;\n }\n\n const err = e.error;\n\n this.log.error(`Data channel error: ${err.message}`);\n\n // Handle specific error detail types\n switch (err.errorDetail) {\n case 'sdp-syntax-error':\n this.log.error(`SDP syntax error in line ${err.sdpLineNumber}`);\n break;\n case 'idp-load-failure':\n this.log.error(`Identity provider load failure: HTTP error ${err.httpRequestStatusCode}`);\n break;\n case 'sctp-failure':\n if (err.sctpCauseCode < sctpCauseCodes.length) {\n this.log.error(`SCTP failure: ${err.sctpCauseCode}`);\n } else {\n this.log.error('Unknown SCTP error');\n }\n break;\n case 'dtls-failure':\n if (err.receivedAlert) {\n this.log.error(`Received DTLS failure alert: ${err.receivedAlert}`);\n }\n if (err.sentAlert) {\n this.log.error(`Sent DTLS failure alert: ${err.sentAlert}`);\n }\n break;\n }\n\n this.log.error(`Error in file ${err.filename}, at line ${err.lineNumber}, column ${err.columnNumber}`);\n\n if (this._promiseSource.active) {\n this.log.debug(() => `Connection failed for data channel error: ${JSON.stringify(e)}}`);\n this._promiseSource.fail(err);\n }\n }\n}\n","import WebRtcStreamTransport from './webrtcstreamtransport';\n\nexport default class WebRtcStreamTransportFactory {\n constructor(webRtcConnectionManager) {\n this._webRtcConnectionManager = webRtcConnectionManager;\n }\n\n create(nvrConnection, url) {\n return new WebRtcStreamTransport(\n nvrConnection,\n url,\n this._webRtcConnectionManager\n );\n }\n}\n","/* global localStorage */\n\nimport OspConnectClient from '../osp/ospconnectclient';\nimport OspStreamRetriever from '../streaming/ospstreamretriever';\nimport AudioOspBackchannelConnector from '../streaming/audioospbackchannelconnector';\nimport HttpStreamTokenRequester from '../streaming/httpstreamtokenrequester';\nimport HttpBearerTokenRequester from '../streaming/httpbearertokenrequester';\nimport StreamController from './streamcontroller';\nimport Html5RenderController from './html5rendercontroller';\nimport AudioRenderController from './audiorendercontroller';\nimport AudioContextFactory from './audiocontextfactory';\nimport AudioPlaybackProcessorWorkletFactory from './audioplaybackprocessorworkletfactory';\nimport PtzController from '../ptz/ptzcontroller';\nimport FisheyePtzController from '../ptz/fisheyeptzcontroller';\nimport CachingStreamRetriever from '../streaming/cachingstreamretriever';\nimport DynamicStreamTransportFactory from '../streaming/dynamicstreamtransportfactory';\nimport AudioStreamer from '../streaming/audiostreamer';\nimport AudioResampler from '../streaming/audioresampler';\nimport AudioRecorder from '../streaming/audiorecorder';\nimport NavigatorService from '../streaming/navigatorservice';\nimport {createDefaultNvrInfo} from '../util/createdefaultnvrinfo';\nimport MediaRecorderFactory from '../streaming/mediarecorderfactory';\nimport RemoteHttpStreamTokenRequester from '../streaming/remotehttpstreamtokenrequester';\nimport MetadataController from './metadatacontroller';\nimport VideoPresenter from '../display/videopresenter';\nimport AudioRendererFactory from './audiorendererfactory';\nimport WebSocketStreamTransportFactory from '../streaming/websocketstreamtransportfactory';\nimport {WebRtcConnectionManager} from '../streaming/webrtcconnectionmanager';\nimport {WebRtcStreamTransportIdQueue} from '../streaming/webrtcstreamtransportidqueue';\nimport WebRtcStreamTransportFactory from './../streaming/webrtcstreamtransportfactory';\n\nexport default class OscarFactory {\n constructor(reactor, nvrManager, elementFactory, mediaSourceFactory, objectUrlManager, adcParams) {\n this.hostname = adcParams.hostname;\n this.username = adcParams.username;\n this.password = adcParams.password;\n this.adcRelayToken = adcParams.adcRelayToken;\n\n this.reactor = reactor;\n this.nvrManager = nvrManager;\n // CML-10104: ADC appends an encoded ADC relay token to the paths\n const token = adcParams.adcRelayToken ? `?adcRelayToken=${encodeURIComponent(adcParams.adcRelayToken)}` : '';\n this.streamingUrlPath = '/ws/ospserver' + token;\n this.ptzUrlPath = '/ws/ospptz' + token;\n this.elementFactory = elementFactory;\n this.mediaSourceFactory = mediaSourceFactory;\n this.objectUrlManager = objectUrlManager;\n\n const webRtcStreamDataChannelIdQueue = new WebRtcStreamTransportIdQueue();\n const webRtcConnectionManager = new WebRtcConnectionManager(webRtcStreamDataChannelIdQueue, adcParams.stunServer);\n const webRtcStreamTransportFactory = new WebRtcStreamTransportFactory(webRtcConnectionManager);\n const webSocketStreamTransportFactory = new WebSocketStreamTransportFactory();\n this.streamTransportFactory = new DynamicStreamTransportFactory(\n webSocketStreamTransportFactory,\n webRtcStreamTransportFactory,\n );\n\n const audioContextFactory = new AudioContextFactory();\n const audioWorkletFactory = new AudioPlaybackProcessorWorkletFactory();\n this.audioRendererFactory = new AudioRendererFactory(reactor, elementFactory,\n mediaSourceFactory, objectUrlManager, audioContextFactory, audioWorkletFactory);\n }\n\n createStreamController(nvrInfo, cameraId, streamName, maxResolution, softMaxRes, analyticsSupported) {\n const connectClient = new OspConnectClient(\n this.nvrManager, nvrInfo, this.streamTransportFactory, this.streamingUrlPath);\n let retriever;\n const baseRetriever = new OspStreamRetriever(this.reactor, connectClient, cameraId, streamName,\n maxResolution, softMaxRes, analyticsSupported);\n if (!localStorage.getItem('no-stream-cache')) {\n retriever = new CachingStreamRetriever(this.reactor, baseRetriever);\n } else {\n retriever = baseRetriever;\n }\n retriever.tokenRequester = this.hostname === window.location.host ?\n new HttpStreamTokenRequester(this.nvrManager, nvrInfo, cameraId) :\n // VID-27733: Remote token request for ADC, see https://bitbucket.corp.adcinternal.com/projects/JSAP/repos/oscar-js/pull-requests/1/overview?commentId=277679\n new RemoteHttpStreamTokenRequester(cameraId, this.hostname, this.username, this.password, this.adcRelayToken);\n\n // Use the NVR ID as the sync ID\n return new StreamController(this.reactor, retriever, nvrInfo.id || createDefaultNvrInfo().id);\n }\n\n createAudioStreamer(nvrInfo, cameraId) {\n const connectClient = new OspConnectClient(\n this.nvrManager, nvrInfo, this.streamTransportFactory, this.streamingUrlPath);\n const connector = new AudioOspBackchannelConnector(this.reactor, connectClient, cameraId);\n connector.tokenRequester = this.hostname === window.location.host\n ? new HttpStreamTokenRequester(this.nvrManager, nvrInfo, cameraId)\n : new RemoteHttpStreamTokenRequester(cameraId, this.hostname, this.username, this.password, this.adcRelayToken);\n return new AudioStreamer(this.reactor, connector);\n }\n\n createAudioRecorder() {\n const audioResampler = new AudioResampler();\n const navigatorService = new NavigatorService();\n const mediaRecorderFactory = new MediaRecorderFactory();\n return new AudioRecorder(this, audioResampler, navigatorService, mediaRecorderFactory);\n }\n\n createPtzController(nvrInfo) {\n if (!nvrInfo) {\n nvrInfo = createDefaultNvrInfo();\n }\n\n const adcParams = {\n hostname: this.hostname,\n username: this.username,\n password: this.password,\n adcRelayToken: this.adcRelayToken,\n };\n\n const connectClient = new OspConnectClient(\n this.nvrManager, nvrInfo, this.streamTransportFactory, this.ptzUrlPath);\n return new PtzController(\n this.reactor, connectClient, new HttpBearerTokenRequester(this.nvrManager, nvrInfo), this.nvrManager, nvrInfo, adcParams);\n }\n\n createFisheyePtzController(displayPane) {\n if (!displayPane) {\n return null;\n }\n return new FisheyePtzController(displayPane);\n }\n\n createVideoRenderController() {\n return new Html5RenderController(this.reactor, this.elementFactory, this.mediaSourceFactory,\n this.objectUrlManager);\n }\n\n createAudioRenderController() {\n return new AudioRenderController(this.reactor, this.audioRendererFactory);\n }\n\n createMetadataController(displayPane) {\n return new MetadataController(displayPane, this.reactor);\n }\n\n createVideoPresenter(displayPane) {\n return new VideoPresenter(this.elementFactory, displayPane);\n }\n}\n","import {Priority} from '../defs';\nimport SpanSubscription from './spansubscription';\nimport {\n Instant,\n Duration,\n PromiseSource,\n CancellationError,\n Timer,\n Logger,\n LogLevel,\n rangeEquals,\n} from '@oecommon/plasma-js';\n\nconst UPDATE_INTERVAL = Duration.seconds(10);\n\nconst log = new Logger('eventsubscription');\n\n/**\n * Subscription that retrieves recording spans.\n */\nexport default class EventSpanSubscription extends SpanSubscription {\n /**\n * Constructor\n */\n constructor(reactor, range, camera, nvrManager) {\n super(range, camera, nvrManager);\n this._timer = new Timer(reactor);\n this._endPoint = 'eventsearch/sources';\n this._eventType = ['motion'];\n this._duration = 0;\n this._greaterThanDuration = true;\n this._requestStartTime = null;\n this._updatePromiseSource = new PromiseSource();\n }\n\n /**\n * Start subscription request\n */\n start() {\n this.cancel();\n\n log.debug('Starting subscription');\n\n return this._fetchEvents()\n .then((response) => this._continueStart(response, []));\n }\n\n /**\n * Update subscription request\n */\n update() {\n this.cancel();\n\n log.debug('Updating subscription');\n\n this._timer.set(UPDATE_INTERVAL, () => {\n this._fetchEvents()\n .then((response) => this._updatePromiseSource.complete(this._process(response)))\n .catch((error) => this._updatePromiseSource.fail(error));\n });\n\n return this._updatePromiseSource.makePromise();\n }\n\n /**\n * Continues a start operation. Returns either all of the data received so far, or\n * a promise representing a new fetch operation.\n */\n _continueStart(response, existingData) {\n const newData = this._process(response);\n\n if (newData.length > 0 && existingData.length > 0 &&\n rangeEquals(newData[0], existingData[existingData.length - 1])) {\n existingData.pop();\n }\n\n existingData = existingData.concat(newData);\n\n if (response.data.truncated && this._requestStartTime) {\n log.debug(() => `Results truncated (${newData.length}), fetching more`);\n\n return this._fetchEvents()\n .then((response) => this._continueStart(response, existingData));\n } else {\n log.debug(() => `Returning ${existingData.length} results`);\n return existingData;\n }\n }\n\n /**\n * Fetches events starting either from the search start time or the time of the last received event\n */\n _fetchEvents() {\n const params = {\n sourceIds: [this._camera.id],\n eventTypes: this._eventType,\n startTime: this._requestStartTime ? this._requestStartTime.value : this.startTime(),\n endTime: this.endTime(),\n duration: this._duration,\n greaterThanDuration: this._greaterThanDuration,\n };\n\n log.debug(() => `Requesting events: sources ${params.sourceIds}, ` +\n `range ${new Instant(params.startTime)} - ${new Instant(params.endTime)}`);\n\n let promise = this._nvrManager.getConnection(this._camera.nvrInfo, Priority.Medium)\n .then((nvrConnection) => {\n return nvrConnection.apiPost(this._endPoint, params)\n .catch((error) => this.error(error));\n })\n .catch((error) => this.error(error));\n\n\n if (log.shouldLog(LogLevel.DEBUG)) {\n promise = promise.then((response) => {\n log.debug(`Received ${response.data.content.length} results, truncated=${response.data.truncated}`);\n return response;\n });\n }\n\n return promise;\n }\n\n /**\n * Cancel a subscription.\n */\n cancel() {\n this._timer.kill();\n\n if (this._updatePromiseSource.active) {\n this._updatePromiseSource.fail(new CancellationError());\n }\n }\n\n /**\n * Process request.\n */\n _process(response) {\n const data = [];\n const count = response.data.content.length;\n\n if (count > 0) {\n for (let i = 0; i < count; i++) {\n data.push(this.format(response.data.content[i]));\n }\n\n this._requestStartTime = new Instant(response.data.content[count - 1].startTime);\n }\n\n return data;\n }\n}\n","/* global URL */\n\nexport default class ObjectUrlManager {\n createObjectUrl(object) {\n return URL.createObjectURL(object);\n }\n\n revokeObjectUrl(url) {\n URL.revokeObjectURL(url);\n }\n}\n","const top = 0;\nconst parent = (i) => ((i + 1) >>> 1) - 1;\nconst left = (i) => (i << 1) + 1;\nconst right = (i) => (i + 1) << 1;\n\n/**\n * Heap based priority queue implementation\n * Credit: https://stackoverflow.com/a/42919752\n */\nexport default class PriorityQueue {\n constructor(comparator = (a, b) => a > b) {\n this._heap = [];\n this._comparator = comparator;\n }\n\n _greater(i, j) {\n return this._comparator(this._heap[i], this._heap[j]);\n }\n\n _swap(i, j) {\n [this._heap[i], this._heap[j]] = [this._heap[j], this._heap[i]];\n }\n\n _siftUp() {\n let node = this.size() - 1;\n while (node > top && this._greater(node, parent(node))) {\n this._swap(node, parent(node));\n node = parent(node);\n }\n }\n\n _siftDown() {\n let node = top;\n while (\n (left(node) < this.size() && this._greater(left(node), node)) ||\n (right(node) < this.size() && this._greater(right(node), node))\n ) {\n const maxChild = (right(node) < this.size() && this._greater(right(node), left(node))) ? right(node) : left(node);\n this._swap(node, maxChild);\n node = maxChild;\n }\n }\n\n size() {\n return this._heap.length;\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n peek() {\n return this._heap[top];\n }\n\n push(...values) {\n values.forEach((value) => {\n this._heap.push(value);\n this._siftUp();\n });\n return this.size();\n }\n\n pop() {\n const poppedValue = this.peek();\n const bottom = this.size() - 1;\n if (bottom > top) {\n this._swap(top, bottom);\n }\n this._heap.pop();\n this._siftDown();\n return poppedValue;\n }\n}\n","/* global Promise */\n\nimport {Logger, PromiseSource} from '@oecommon/plasma-js';\nimport {Priority} from '../defs';\nimport PriorityQueue from '../util/priorityqueue';\n\nlet instanceNum = 0;\n/**\n * Manages connections to multiple NVRs.\n *\n * The application supplies a \"connector\" function, which asynchronously connects to an NVR. The\n * NvrManager ensures that we have only one connection to each NVR at a time.\n */\nexport default class NvrManager {\n constructor(nvrConnector) {\n this._connector = nvrConnector;\n this._nvrs = {};\n this.log = new Logger('nvrmanager', ++instanceNum);\n }\n\n _getNewQueue() {\n return new PriorityQueue((a, b) => a[1] > b[1]);\n }\n\n _drainQueue(nvrState, callback) {\n this.log.spam(() => `Processing ${nvrState.pending.size()} pending promise(s) for ${nvrState.nvrInfo.id}`);\n while (!nvrState.pending.isEmpty()) {\n const [promiseSource, priority] = nvrState.pending.pop();\n this.log.spam(() => `Processing pending promise for ${nvrState.nvrInfo.id} with priority ${priority}`);\n callback(promiseSource);\n }\n }\n\n /**\n * Asynchronously gets a connection to an NVR\n *\n * @param {Object} nvrInfo The NVR info from a camera object that was attached to a DisplayPane\n * @param {number=} priority Number used to determine the priority with which this connection request is resolved\n * once the connection is established. Higher number === higher priority. Defaults to 0.\n *\n * @returns {Promise<NvrConnection>} promise Eventually returns an NvrConnection\n */\n getConnection(nvrInfo, priority = Priority.Low) {\n let nvrState = this._nvrs[nvrInfo.id];\n\n if (!nvrState) {\n this.log.debug(() => `Creating new nvr state for ${nvrInfo.id}, ${JSON.stringify(nvrInfo)}`);\n nvrState = {\n nvrInfo: nvrInfo,\n pending: this._getNewQueue(),\n connection: null,\n connectionPromise: null,\n };\n this._nvrs[nvrInfo.id] = nvrState;\n } else {\n this.log.debug(() => `Updating nvr state for ${nvrInfo.id}, ${JSON.stringify(nvrInfo)}`);\n nvrState.nvrInfo = nvrInfo;\n }\n\n if (nvrState.connection && !nvrState.connection.hasExpired()) {\n this.log.spam(() => `Resolved existing connection for ${nvrInfo.id}`);\n return Promise.resolve(nvrState.connection);\n }\n\n if (!nvrState.connectionPromise) {\n this.log.debug(() => `Created initial connection request for ${nvrInfo.id}`);\n nvrState.connectionPromise = this._connector(nvrState.nvrInfo)\n .then((result) => this.onConnected(nvrState, result))\n .catch((error) => this.onConnectFailed(nvrState, error));\n }\n\n const promiseSource = new PromiseSource();\n nvrState.pending.push([promiseSource, priority]);\n this.log.debug(() => `Created promise for ${nvrInfo.id} with priority ${priority}`);\n return promiseSource.makePromise();\n }\n\n onConnected(nvrState, connection) {\n this.log.debug(() => `Connection completed successfully for ${nvrState.nvrInfo.id}`);\n nvrState.connection = connection;\n\n this._drainQueue(nvrState, (promiseSource) => {\n promiseSource.complete(nvrState.connection);\n });\n\n nvrState.pending = this._getNewQueue();\n nvrState.connectionPromise = null;\n }\n\n onConnectFailed(nvrState, error) {\n this.log.debug(() => `Connection failed for ${nvrState.nvrInfo.id}`);\n\n this._drainQueue(nvrState, (promiseSource) => {\n promiseSource.fail(error);\n });\n\n nvrState.pending = this._getNewQueue();\n nvrState.connectionPromise = null;\n }\n}\n","/* global Promise */\n\nimport axios from \"axios\";\n\n/**\n * Represents an NVR connection through AlarmApexVideoRelayService.\n * Based off LocalNvrConnection.\n */\nclass AdcNvrConnection {\n constructor(webSocketFactory, adcParams) {\n this._webSocketFactory = webSocketFactory;\n this._hostname = adcParams.hostname;\n this._username = adcParams.username;\n this._password = adcParams.password;\n this._adcRelayToken = adcParams.adcRelayToken;\n this._allowWebrtc = adcParams.allowWebrtc;\n }\n\n /**\n * Has the NVR connection expired?\n *\n * @returns {boolean}\n */\n hasExpired() {\n return false;\n }\n\n /**\n * Create a WebSocket connection to a specified URL path.\n *\n * @param {string} urlPath - The endpoint to establish a WebSocket, such as \"ospptz\" for PTZ\n * @returns {WebSocket}\n */\n createWebSocket(urlPath) {\n const url = \"wss://\" + this._hostname + urlPath;\n return this._webSocketFactory.create(url);\n }\n\n /**\n * Helper method to create a URL and final configuration for an API request.\n *\n * @param {string} path - The api path\n * @param {import(\"axios\").AxiosRequestConfig | undefined} config - Optional config for Axios\n * @returns {Object} - Object containing the URL string and final config\n */\n getAxiosParams(path, config) {\n const requestPath = path.startsWith(\"/\") ? path : \"/api/\" + path;\n const origin = \"https://\" + this._hostname;\n const url = new URL(requestPath, origin);\n const params = config === undefined ? undefined : config.params;\n const allParams = {\n ...params,\n adcRelayToken: this._adcRelayToken,\n };\n const finalConfig = { ...config, params: allParams };\n return { url: url.toString(), finalConfig };\n }\n\n /**\n * Make a GET request\n *\n * @param {string} path - The api path\n * @param {import(\"axios\").AxiosRequestConfig | undefined} config - Optional config for Axios\n * @returns {Promise<any>}\n */\n apiGet(path, config) {\n const { url, finalConfig } = this.getAxiosParams(path, config);\n return axios.get(url, finalConfig);\n }\n\n /**\n * Make a POST request\n *\n * @param {string} path - The api path\n * @param {any} body - The request body\n * @param {import(\"axios\").AxiosRequestConfig | undefined} config - Optional config for Axios\n * @returns {Promise<any>}\n */\n apiPost(path, body, config) {\n const { url, finalConfig } = this.getAxiosParams(path, config);\n return axios.post(url, body, finalConfig);\n }\n\n /**\n * Make a PUT request\n *\n * @param {string} path - The api path\n * @param {any} body - The request body\n * @param {import(\"axios\").AxiosRequestConfig | undefined} config - Optional config for Axios\n * @returns {Promise<any>}\n */\n apiPut(path, body, config) {\n const { url, finalConfig } = this.getAxiosParams(path, config);\n return axios.put(url, body, finalConfig);\n }\n\n /**\n * Make a DELETE request\n *\n * @param {string} path - The api path\n * @param {any} body - The request body\n * @param {import(\"axios\").AxiosRequestConfig | undefined} config - Optional config for Axios\n * @returns {Promise<any>}\n */\n apiDelete(path, body, config) {\n const { url, finalConfig } = this.getAxiosParams(path, config);\n return axios.delete(url, body, finalConfig);\n }\n\n /**\n * The device URI (at least for Openeye).\n *\n * @returns {string}\n */\n getHostname() {\n return this._hostname;\n }\n\n /**\n * Are we allowed to use WebRTC?\n *\n * @returns {boolean}\n */\n allowWebRTC() {\n return this._allowWebrtc;\n }\n}\n\n/**\n * Returns a connector that creates an AdcNvrConnection\n */\nexport default function getAdcNvrConnector(webSocketFactory, adcParams) {\n return () =>\n Promise.resolve(new AdcNvrConnection(webSocketFactory, adcParams));\n}\n","export default class BasicEvent {\n constructor(type) {\n this.type = type;\n }\n}\n","export default class DataEvent {\n constructor(type, data) {\n this.type = type;\n this.data = data;\n }\n}\n","/* global queueMicrotask */\n/**\n * Base class for classes that emit events\n *\n * This implementation is based on the one here:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n */\nexport default class EventTarget {\n constructor() {\n this.listeners = {};\n }\n\n /**\n * Adds a listener for a specific event type\n *\n * @param {string} type\n * @param {function} callback\n */\n addEventListener(type, callback) {\n let typeListeners = this.listeners[type];\n\n if (typeListeners === undefined) {\n typeListeners = [];\n this.listeners[type] = typeListeners;\n }\n\n typeListeners.push(callback);\n }\n\n /**\n * Removes an event listener\n *\n * @param {string} type\n * @param {function} callback\n */\n removeEventListener(type, callback) {\n const typeListeners = this.listeners[type];\n\n if (!typeListeners) {\n return;\n }\n\n for (let i = 0; i < typeListeners.length; ++i) {\n if (typeListeners[i] === callback) {\n typeListeners.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * Removes all event listener for a specific type if\n * provided. Removes all event listeners if no type\n * is provided.\n *\n * @param {string} type - optional\n */\n removeEventListeners(type) {\n if (type === null || type === undefined) {\n // remove all event listeners\n Object.keys(this.listeners).forEach((type) => {\n this.listeners[type] = [];\n });\n return;\n }\n\n if (!this.listeners[type]) {\n return;\n }\n\n this.listeners[type] = [];\n }\n\n /**\n * Emits an event\n *\n * @param {object} event\n */\n dispatchEvent(event) {\n const typeListeners = this.listeners[event.type];\n\n if (!typeListeners) {\n return;\n }\n\n typeListeners.forEach((listener) => listener.call(this, event));\n\n return !event.defaultPrevented;\n }\n\n /**\n * Emits an event through a queued microtask\n *\n * @param {object} event\n */\n dispatchEventAsync(event) {\n const typeListeners = this.listeners[event.type];\n\n if (!typeListeners) {\n return;\n }\n\n typeListeners.forEach((listener) => {\n queueMicrotask(() => {\n // because this is async, removeEventListener may have been called for\n // this listener in the meantime, in which case, the event should not\n // be dispatched\n if (!typeListeners.includes(listener)) {\n return;\n }\n listener.call(this, event);\n });\n });\n }\n}\n","const TimeDefs = {\n TimeUnitsPerMillisecond: 1000,\n};\n\nTimeDefs.TimeUnitsPerSecond = 1000 * TimeDefs.TimeUnitsPerMillisecond;\nTimeDefs.TimeUnitsPerMinute = 60 * TimeDefs.TimeUnitsPerSecond;\nTimeDefs.TimeUnitsPerHour = 60 * TimeDefs.TimeUnitsPerMinute;\nTimeDefs.TimeUnitsPerDay = 24 * TimeDefs.TimeUnitsPerHour;\n\nexport default TimeDefs;\n","import TimeDefs from './timedefs';\n\n/**\n * Represents a duration in microsecond units\n */\nexport default class Duration {\n /**\n * Constructor\n *\n * @param {number} usecVal Duration in microseconds\n */\n constructor(usecVal) {\n this._value = (usecVal !== undefined) ? Math.floor(usecVal) : 0;\n }\n\n get value() {\n return this._value;\n }\n\n negate() {\n return new Duration(-this._value);\n }\n\n plus(other) {\n return new Duration(this._value + other.value);\n }\n\n minus(other) {\n return new Duration(this._value - other.value);\n }\n\n times(value) {\n return new Duration(this._value * value);\n }\n\n dividedBy(value) {\n if (value instanceof Duration) {\n return this._value / value._value;\n } else {\n return new Duration(this._value / value);\n }\n }\n\n equals(other) {\n return this._value === other.value;\n }\n\n lt(other) {\n return this._value < other.value;\n }\n\n gt(other) {\n return this._value > other.value;\n }\n\n le(other) {\n return this._value <= other.value;\n }\n\n ge(other) {\n return this._value >= other.value;\n }\n\n get totalHours() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerHour);\n }\n\n get totalMinutes() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerMinute);\n }\n\n get totalSeconds() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerSecond);\n }\n\n get totalMilliseconds() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerMillisecond);\n }\n\n get hourPart() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerHour);\n }\n\n get minutePart() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerMinute) % 60;\n }\n\n get secondPart() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerSecond) % 60;\n }\n\n get millisecondPart() {\n return Math.floor(this._value / TimeDefs.TimeUnitsPerMillisecond) % 1000;\n }\n\n get microsecondPart() {\n return this._value % 1000000;\n }\n\n abs() {\n return new Duration(Math.abs(this._value));\n }\n\n toString(precision = 3) {\n let sign = '';\n let pos = this;\n\n if (this._value < 0) {\n pos = pos.negate();\n sign = '-';\n }\n\n const pad = (num, c) => ('00' + num).slice(-c);\n\n let result = `${sign}${pad(pos.hourPart, 2)}:${pad(pos.minutePart, 2)}:${pad(pos.secondPart, 2)}`;\n\n if (precision && precision <= 6) {\n result += (pos.microsecondPart / 1000000).toFixed(precision).slice(-precision - 1);\n }\n\n return result;\n }\n\n static milliseconds(value) {\n return new Duration(value * TimeDefs.TimeUnitsPerMillisecond);\n }\n\n static seconds(value) {\n return new Duration(value * TimeDefs.TimeUnitsPerSecond);\n }\n\n static minutes(value) {\n return new Duration(value * TimeDefs.TimeUnitsPerMinute);\n }\n\n static hours(value) {\n return new Duration(value * TimeDefs.TimeUnitsPerHour);\n }\n\n static days(value) {\n return new Duration(value * TimeDefs.TimeUnitsPerDay);\n }\n\n static get zero() {\n return new Duration(0);\n }\n\n static get positiveInfinity() {\n return new Duration(Number.POSITIVE_INFINITY);\n }\n\n static get negativeInfinity() {\n return new Duration(Number.NEGATIVE_INFINITY);\n }\n\n static fromParts(parts) {\n let value = new Duration();\n\n if (parts.days !== undefined) {\n value = value.plus(Duration.days(parts.days));\n }\n\n if (parts.hours !== undefined) {\n value = value.plus(Duration.hours(parts.hours));\n }\n\n if (parts.minutes !== undefined) {\n value = value.plus(Duration.minutes(parts.minutes));\n }\n\n if (parts.seconds !== undefined) {\n value = value.plus(Duration.seconds(parts.seconds));\n }\n\n return value;\n }\n}\n","import Instant from './instant';\nimport TimeDefs from './timedefs';\n\nconst MillisecondsPerDay = 86400000;\n\n/**\n * Represents a calendar date\n */\nexport default class CalendarDate {\n constructor(dayNumberOrYear, month, day) {\n if (dayNumberOrYear === undefined) {\n this._dayNumber = 0;\n } else if (month === undefined) {\n this._dayNumber = dayNumberOrYear;\n } else {\n this._dayNumber = CalendarDate.ymdToDayNumber(dayNumberOrYear, month, day);\n }\n }\n\n get yearMonthDay() {\n return CalendarDate.dayNumberToYmd(this._dayNumber);\n }\n\n get dayNumber() {\n return this._dayNumber;\n }\n\n midnight() {\n return new Instant(this._dayNumber * TimeDefs.TimeUnitsPerDay);\n }\n\n firstOfMonth() {\n const {year, month} = this.yearMonthDay;\n return new CalendarDate(year, month, 1);\n }\n\n lastOfMonth() {\n const {year, month} = this.plusMonths(1).yearMonthDay;\n return new CalendarDate(CalendarDate.ymdToDayNumber(year, month, 1) - 1);\n }\n\n plusDays(n) {\n return new CalendarDate(this._dayNumber + n);\n }\n\n minusDays(n) {\n return this.plusDays(-n);\n }\n\n plusMonths(n) {\n const {year, month, day} = this.yearMonthDay;\n\n // % doesn't correctly calculate mod for negative numbers...\n let modMonth = (month - 1 + n) % 12;\n modMonth = modMonth >= 0 ? modMonth : modMonth + 12;\n const newMonth = modMonth + 1;\n const newYear = year + Math.floor((month - 1 + n) / 12);\n\n return new CalendarDate(newYear, newMonth, day);\n }\n\n minusMonths(n) {\n return this.plusMonths(-n);\n }\n\n equals(other) {\n return this._dayNumber === other.dayNumber;\n }\n\n lt(other) {\n return this._dayNumber < other.dayNumber;\n }\n\n gt(other) {\n return this._dayNumber > other.dayNumber;\n }\n\n le(other) {\n return this._dayNumber <= other.dayNumber;\n }\n\n ge(other) {\n return this._dayNumber >= other.dayNumber;\n }\n\n toString() {\n const {year, month, day} = this.yearMonthDay;\n const pad = (num, c) => ('0000' + num).slice(-c);\n\n return `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;\n }\n\n static ymdToDayNumber(year, month, day) {\n const date = new Date(Date.UTC(year, month - 1, day));\n return Math.floor(date.getTime() / MillisecondsPerDay);\n }\n\n static dayNumberToYmd(dayNumber) {\n const date = new Date(dayNumber * MillisecondsPerDay);\n return {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate(),\n };\n }\n}\n","import Duration from './duration';\nimport CalendarDate from './calendardate';\nimport TimeDefs from './timedefs';\n\n/**\n * Represents a point in time with microsecond precision\n */\nexport default class Instant {\n /**\n * @param {number} usecVal Number of microseconds since 1970-01-01 00:00:00 UTC\n */\n constructor(yearOrValue, month, day, hour, minute, second, microseconds) {\n if (month === undefined) {\n if (yearOrValue === undefined) {\n this._value = 0;\n } else if (yearOrValue instanceof Instant) {\n this._value = yearOrValue._value;\n } else {\n this._value = (yearOrValue !== undefined) ? Math.floor(yearOrValue) : 0;\n }\n } else {\n const date = Date.UTC(yearOrValue, month - 1, day, hour, minute, second);\n this._value = date.valueOf() * 1000;\n if (microseconds) {\n this._value += microseconds;\n }\n }\n }\n\n get isValid() {\n return this._value > 0;\n }\n\n get value() {\n return this._value;\n }\n\n get calendarDate() {\n return new CalendarDate(Math.floor(this._value / TimeDefs.TimeUnitsPerDay));\n }\n\n get timeOfDay() {\n return new Duration(this._value % TimeDefs.TimeUnitsPerDay);\n }\n\n toDate() {\n return new Date(this._value / 1000);\n }\n\n plus(duration) {\n return new Instant(this._value + duration.value);\n }\n\n minus(timeOrDuration) {\n if (timeOrDuration instanceof Instant) {\n return new Duration(this._value - timeOrDuration.value);\n } else {\n return new Instant(this._value - timeOrDuration.value);\n }\n }\n\n equals(other) {\n return this._value === other.value;\n }\n\n lt(other) {\n return this._value < other.value;\n }\n\n gt(other) {\n return this._value > other.value;\n }\n\n le(other) {\n return this._value <= other.value;\n }\n\n ge(other) {\n return this._value >= other.value;\n }\n\n toString(precision = 3) {\n if (this._value === Number.POSITIVE_INFINITY) {\n return '+infinity';\n } else if (this._value === Number.NEGATIVE_INFINITY) {\n return '-infinity';\n }\n\n return `${this.calendarDate.toString()} ${this.timeOfDay.toString(precision)}`;\n }\n\n static fromDateAndTime(date, time) {\n return new Instant(date.dayNumber * TimeDefs.TimeUnitsPerDay + time.value);\n }\n\n static get positiveInfinity() {\n return new Instant(Number.POSITIVE_INFINITY);\n }\n\n static get negativeInfinity() {\n return new Instant(Number.NEGATIVE_INFINITY);\n }\n\n static now() {\n return new Instant(new Date().getTime() * 1000);\n }\n}\n","import Instant from '../time/instant';\n\nexport default class SimpleTimeProvider {\n get currentTime() {\n const date = new Date();\n return new Instant(date.getTime() * 1000);\n }\n}\n","/* global setImmediate, setTimeout */\nimport SimpleTimeProvider from './simpletimeprovider';\n\n/**\n * @implements {Reactor}\n *\n * Reactor implementation that uses the JavaScript runtime (browser or node.js)\n * to execute scheduled calls.\n */\nexport default class SimpleReactor {\n constructor() {\n this.timeProvider = new SimpleTimeProvider();\n }\n\n schedule(fun, delay = { totalMilliseconds : 0 }) {\n setTimeout(fun, delay.totalMilliseconds);\n }\n}\n","/**\n * Implements a timer that can call a callback after a delay, with optional repeat\n */\nexport default class Timer {\n constructor(reactor) {\n this._reactor = reactor;\n this._delay = null;\n this._handler = null;\n this._repeat = false;\n this._timerChanged = false;\n this._localHandler = null;\n this._sequence = 0;\n }\n\n /**\n * Sets the timer\n *\n * @param {Duration} delay is the delay before the handler will be called\n * @param {function} handler is the function to be called\n * @param {boolean} repeat is true for a repeated timer, false for single shot\n */\n set(delay, handler, repeat) {\n this.kill();\n\n this._delay = delay;\n this._handler = handler;\n this._repeat = repeat || false;\n\n this._localHandler = this._handleExpiry.bind(this, this._sequence);\n\n this._reactor.schedule(this._localHandler, this._delay);\n this._timerChanged = true;\n }\n\n /**\n * Kills the timer\n */\n kill() {\n this._delay = null;\n this._handler = null;\n this._repeat = false;\n this._timerChanged = true;\n ++this._sequence;\n }\n\n /**\n * Returns true if the timer is currently set\n */\n get isSet() {\n return this._handler !== null;\n }\n\n _handleExpiry(sequence) {\n // Ignore calls scheduled before the timer was killed and set again\n if (sequence !== this._sequence) {\n return;\n }\n\n this._timerChanged = false;\n\n const tempHandler = this._handler;\n const tempRepeat = this._repeat;\n\n this._handler = null;\n this._repeat = false;\n\n if (tempHandler) {\n tempHandler();\n }\n\n if (tempRepeat && !this._timerChanged && this._delay) {\n this._repeat = true;\n this._handler = tempHandler;\n this._reactor.schedule(this._localHandler, this._delay);\n }\n }\n}\n","/* global Promise */\n\n/**\n * Generates a promise (at most one at a time) and allows it to be completed normally\n * or with an exception\n */\nexport default class PromiseSource {\n constructor() {\n this.reset();\n }\n\n get active() {\n return this._promise ? true : false;\n }\n\n makePromise() {\n if (this._promise) {\n throw new Error('Promise already active!');\n }\n\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n return this._promise;\n }\n\n complete(result) {\n if (!this._promise) {\n throw new Error('Promise already completed!');\n }\n\n const tempResolve = this._resolve;\n this.reset();\n tempResolve(result);\n }\n\n fail(error) {\n if (!this._promise) {\n throw new Error('Promise already completed!');\n }\n\n const tempReject = this._reject;\n this.reset();\n tempReject(error);\n }\n\n reset() {\n this._promise = null;\n this._resolve = null;\n this._reject = null;\n }\n}\n","/* global Error */\n\nexport default class CancellationError extends Error {\n constructor(message, fileName, lineNumber) {\n super(message || 'Operation canceled', fileName, lineNumber);\n }\n}\n","const LogLevel = {\n FATAL: 1,\n ERROR: 2,\n WARNING: 3,\n NOTICE: 4,\n INFO: 5,\n DEBUG: 6,\n SPAM: 7,\n};\n\nexport {LogLevel};\n","const LEVEL_NAMES = ['', 'FATAL', 'ERROR', 'WARNING', 'NOTICE', 'INFO', 'DEBUG', 'SPAM'];\n\nfunction makeLogLine(time, name, level, id, message) {\n let levelName = '';\n\n if (level >= 1 || level < LEVEL_NAMES.length) {\n levelName = LEVEL_NAMES[level];\n }\n\n const pad = (num, c) => ('0000' + num).slice(-c);\n\n const timeStr = `${pad(time.getFullYear(), 4)}-${pad(time.getMonth() + 1, 2)}-${pad(time.getDate(), 2)} ` +\n `${pad(time.getHours(), 2)}:${pad(time.getMinutes(), 2)}:${pad(time.getSeconds(), 2)}` +\n `.${pad(time.getMilliseconds(), 3)}`;\n\n let result = `${timeStr} ${levelName} [${name}]`;\n\n if (id !== 0) {\n result += ':' + id;\n }\n\n result += ' ' + message;\n\n return result;\n}\n\nexport {makeLogLine};\n","import {LogLevel} from './logdefs';\nimport {makeLogLine} from './logutil';\n\nconst DEFAULT_LEVEL = LogLevel.WARNING;\n\n/**\n * Represents a single logging node. There is exactly one of these for\n * each named logger, even if multiple Logger instances are created with\n * that name.\n */\nexport default class LoggerNode {\n constructor(parent) {\n this.parent = parent || null;\n this.writers = [];\n this.nodeLevel = parent ? 0 : DEFAULT_LEVEL;\n }\n\n write(time, name, level, id, message) {\n const text = makeLogLine(time, name, level, id, message);\n\n this.writeRaw(text);\n\n if (this.parent) {\n this.parent.writeRaw(text);\n }\n }\n\n writeRaw(text) {\n for (const writer of this.writers) {\n writer.write(text);\n }\n }\n\n addWriter(writer) {\n this.writers.push(writer);\n }\n\n clearWriters() {\n this.writers = [];\n }\n\n set level(value) {\n this.nodeLevel = value;\n }\n\n get level() {\n if (this.nodeLevel) {\n return this.nodeLevel;\n } else if (this.parent) {\n return this.parent.level;\n } else {\n return DEFAULT_LEVEL;\n }\n }\n\n resetLevel() {\n this.nodeLevel = this.parent ? 0 : DEFAULT_LEVEL;\n }\n}\n","/* global window */\n\nimport LoggerNode from './loggernode';\n\n/**\n * Global log registry\n *\n * We make this a property of the global 'window' object to avoid ending up with multiple\n * instances of it in the case that plasma-js is included multiple times in a bundle.\n */\nconst container = (typeof window !== 'undefined') ? window : {};\n\nif (!container.LogRegistry) {\n container.LogRegistry = {\n rootLogger: new LoggerNode(),\n loggerMap: {},\n\n /**\n * Gets a logger by name. If a node with this name doesn't exist yet\n * it is created.\n */\n getLogger: function(name) {\n if (LogRegistry.loggerMap[name]) {\n return LogRegistry.loggerMap[name];\n }\n\n const node = new LoggerNode(LogRegistry.rootLogger);\n LogRegistry.loggerMap[name] = node;\n return node;\n },\n\n setGlobalLevel: function(value) {\n LogRegistry.rootLogger.level = value;\n },\n\n setLevel: function(name, value) {\n LogRegistry.getLogger(name).level = value;\n },\n\n clearLevels: function() {\n LogRegistry.rootLogger.resetLevel();\n for (const [, value] of Object.entries(LogRegistry.loggerMap)) {\n value.resetLevel();\n }\n },\n\n addWriter: function(writer) {\n LogRegistry.rootLogger.addWriter(writer);\n },\n\n clearWriters: function() {\n LogRegistry.rootLogger.clearWriters();\n },\n };\n}\n\nconst LogRegistry = container.LogRegistry;\n\nexport default LogRegistry;\n","/* global console */\n/* eslint no-console:\"off\" */\n\n/**\n * Log writer that writes to the console\n */\nexport default class ConsoleLogWriter {\n write(text) {\n console.log(text);\n }\n}\n","/* global WebSocket */\n\n/**\n * Log writer that writes to a WebSocket\n */\nexport default class WebSocketLogWriter {\n constructor(url) {\n this._webSocket = new WebSocket(url);\n this._bufferedLines = [];\n }\n\n write(text) {\n if (this._webSocket.readyState === WebSocket.CONNECTING) {\n this._bufferedLines.push(text + '\\n');\n } else if (this._webSocket.readyState === WebSocket.OPEN) {\n if (this._bufferedLines.length) {\n for (const line of this._bufferedLines) {\n this._webSocket.send(line);\n }\n this._bufferedLines = [];\n }\n\n this._webSocket.send(text + '\\n');\n }\n }\n}\n","/* global setTimeout, localStorage */\n\nimport axios from 'axios';\nimport LogRegistry from './logregistry';\nimport ConsoleLogWriter from './writers/consolelogwriter';\nimport {LogLevel} from './logdefs';\nimport WebSocketLogWriter from './writers/websocketlogwriter';\n\nconst LOG_KEY_PREFIX = 'oelog:';\nconst LOG_KEY_PREFIX_LEN = LOG_KEY_PREFIX.length;\n\n/**\n * Configures logging by retrieving a config file from a URL.\n *\n * The config file is of the form:\n * logname1 = debug\n * logname2 = info\n * ...\n */\nexport default class LogConfig {\n constructor(configUrl) {\n this.configUrl = configUrl;\n this.writerType = null;\n this.refreshMsecs = 0;\n this.scheduled = false;\n }\n\n startAutoRefresh(seconds) {\n this.refreshMsecs = seconds * 1000;\n this.scheduleAutoRefresh();\n }\n\n stopAutoRefresh() {\n this.refreshMsecs = 0;\n }\n\n scheduleAutoRefresh() {\n if (this.refreshMsecs && !this.scheduled) {\n setTimeout(() => {\n this.scheduled = false;\n this.doAutoRefresh();\n }, this.refreshMsecs);\n\n this.scheduled = true;\n }\n }\n\n doAutoRefresh() {\n this.config();\n this.scheduleAutoRefresh();\n }\n\n /**\n * Starts the configuration process by retrieving the config file\n */\n config() {\n if (this.configUrl) {\n return axios.get(this.configUrl)\n .then((response) => this.processConfig(response.data.content))\n .catch(() => {});\n } else {\n this.processConfig({});\n }\n }\n\n processConfig(config) {\n this.getLocalStorageConfig(config);\n\n let newWriterType = 'console';\n\n if (config.writer && this.configUrl && config.writer === 'server') {\n newWriterType = 'server';\n }\n\n LogRegistry.clearLevels();\n\n if (newWriterType !== this.writerType) {\n LogRegistry.clearWriters();\n\n if (newWriterType === 'server') {\n const scheme = this.configUrl.protocol === 'https:' ? 'wss' : 'ws';\n LogRegistry.addWriter(new WebSocketLogWriter(`${scheme}://${this.configUrl.host}/ws/clientlog`));\n } else {\n LogRegistry.addWriter(new ConsoleLogWriter());\n }\n\n this.writerType = newWriterType;\n }\n\n for (const name in config) {\n if (Object.prototype.hasOwnProperty.call(config, name)) {\n const level = this.levelFromString(config[name]);\n\n if (level > 0) {\n if (name === 'default') {\n LogRegistry.setGlobalLevel(level);\n } else if (name !== 'writer') {\n LogRegistry.setLevel(name, level);\n }\n }\n }\n }\n }\n\n getLocalStorageConfig(config) {\n for (let i = 0; i < localStorage.length; ++i) {\n const key = localStorage.key(i);\n if (key.startsWith(LOG_KEY_PREFIX)) {\n config[key.substr(LOG_KEY_PREFIX_LEN)] = localStorage.getItem(key);\n }\n }\n }\n\n levelFromString(str) {\n const lstr = str.toLowerCase();\n\n switch (lstr) {\n case 'fatal':\n return LogLevel.FATAL;\n\n case 'error':\n return LogLevel.ERROR;\n\n case 'warn':\n case 'warning':\n return LogLevel.WARNING;\n\n case 'notice':\n return LogLevel.NOTICE;\n\n case 'info':\n return LogLevel.INFO;\n\n case 'debug':\n return LogLevel.DEBUG;\n\n case 'spam':\n return LogLevel.SPAM;\n\n default:\n return 0;\n }\n }\n}\n","import LogRegistry from './logregistry';\nimport {LogLevel} from './logdefs';\n\n/**\n * Used by modules to write to a specific log\n */\nexport default class Logger {\n constructor(name, id) {\n this.name = name;\n this.id = id || 0;\n this.node = LogRegistry.getLogger(name);\n }\n\n /**\n * Writes a log message\n *\n * @param {number} level is the level to log at\n * @param {string|function} message is the log message, or a function that returns it.\n * Using a function avoids evaluating the string composition if the log level\n * is disabled.\n */\n write(level, message) {\n if (this.shouldLog(level)) {\n const text = (typeof message === 'function') ? message() : message;\n this.node.write(new Date(), this.name, level, this.id, text);\n }\n }\n\n fatal(message) {\n this.write(LogLevel.FATAL, message);\n }\n\n error(message) {\n this.write(LogLevel.ERROR, message);\n }\n\n warn(message) {\n this.write(LogLevel.WARNING, message);\n }\n\n notice(message) {\n this.write(LogLevel.NOTICE, message);\n }\n\n info(message) {\n this.write(LogLevel.INFO, message);\n }\n\n debug(message) {\n this.write(LogLevel.DEBUG, message);\n }\n\n spam(message) {\n this.write(LogLevel.SPAM, message);\n }\n\n shouldLog(level) {\n return level <= this.node.level;\n }\n}\n","/* global WebSocket */\n\nexport default class WebSocketFactory {\n create(url) {\n return new WebSocket(url);\n }\n}\n","/* global DataView,Uint8Array */\n\n/**\n * Reads formatted binary data from an ArrayBuffer\n */\nexport default class BinReader {\n /**\n * Constructor\n *\n * @param {*} buffer Buffer containing the data to be read\n */\n constructor(buffer) {\n if (buffer instanceof Uint8Array) {\n this._arrayBuffer = buffer.buffer;\n this._bufferOffset = buffer.byteOffset;\n this._dataView = new DataView(this._arrayBuffer, this._bufferOffset, buffer.byteLength);\n } else {\n this._arrayBuffer = buffer;\n this._bufferOffset = 0;\n this._dataView = new DataView(this._arrayBuffer);\n }\n\n this._position = 0;\n this._end = this._dataView.byteLength;\n this._fail = false;\n }\n\n get position() {\n return this._position;\n }\n\n get hasFailed() {\n return this._fail;\n }\n\n canRead(count) {\n return !this._fail && count <= this._end - this._position;\n }\n\n readUint8() {\n if (!this._checkRead(1)) {\n return 0;\n }\n\n const result = this._dataView.getUint8(this._position);\n this._position += 1;\n return result;\n }\n\n readUint16() {\n if (!this._checkRead(2)) {\n return 0;\n }\n\n const result = this._dataView.getUint16(this._position);\n this._position += 2;\n return result;\n }\n\n readUint32() {\n if (!this._checkRead(4)) {\n return 0;\n }\n\n const result = this._dataView.getUint32(this._position);\n this._position += 4;\n return result;\n }\n\n readUint64() {\n if (!this._checkRead(8)) {\n return 0;\n }\n\n const high = this._dataView.getUint32(this._position);\n const low = this._dataView.getUint32(this._position + 4);\n\n this._position += 8;\n\n return high * 0x100000000 + low;\n }\n\n readString(count) {\n if (!this._checkRead(count)) {\n return null;\n }\n\n const bytes = new Uint8Array(this._arrayBuffer, this._bufferOffset + this._position, count);\n const result = String.fromCharCode(...bytes);\n\n this._position += count;\n return result;\n }\n\n readUint8Array(count) {\n if (!this._checkRead(count)) {\n return null;\n }\n\n const result = new Uint8Array(this._arrayBuffer, this._bufferOffset + this._position, count);\n this._position += count;\n return result;\n }\n\n skip(count) {\n if (!this._checkRead(count)) {\n return false;\n }\n\n this._position += count;\n return true;\n }\n\n _checkRead(count) {\n if (!this.canRead(count)) {\n this._fail = true;\n return false;\n }\n\n return true;\n }\n}\n","/* global ArrayBuffer,DataView */\n\n/**\n * Writes formatted binary data to an ArrayBuffer\n */\nexport default class BinWriter {\n /**\n * Constructor\n *\n * @param {*} bufOrLength Either an existing ArrayBuffer to write into or the\n * length of an ArrayBuffer that should be created by\n * this constructor\n */\n constructor(bufOrLength) {\n if (bufOrLength instanceof ArrayBuffer) {\n this._arrayBuffer = bufOrLength;\n } else {\n this._arrayBuffer = new ArrayBuffer(bufOrLength);\n }\n\n this._dataView = new DataView(this._arrayBuffer);\n\n this._position = 0;\n this._end = this._arrayBuffer.byteLength;\n this._fail = false;\n }\n\n get position() {\n return this._position;\n }\n\n get hasFailed() {\n return this._fail;\n }\n\n canWrite(count) {\n return !this._fail && count <= this._end - this._position;\n }\n\n get(size) {\n if (size === undefined) {\n size = this._position;\n }\n\n if (size === this._arrayBuffer.byteLength) {\n return this._arrayBuffer;\n } else if (size < this._arrayBuffer.byteLength) {\n return this._arrayBuffer.slice(0, size);\n } else {\n throw new RangeError('Size is larger than the actual buffer');\n }\n }\n\n writeUint8(value, littleEndian) {\n if (!this._checkWrite(1)) {\n return false;\n }\n\n this._dataView.setUint8(this._position, value, littleEndian);\n this._position += 1;\n return true;\n }\n\n writeUint16(value, littleEndian) {\n if (!this._checkWrite(2)) {\n return false;\n }\n\n this._dataView.setUint16(this._position, value, littleEndian);\n this._position += 2;\n return true;\n }\n\n writeUint32(value, littleEndian) {\n if (!this._checkWrite(4)) {\n return false;\n }\n\n this._dataView.setUint32(this._position, value, littleEndian);\n this._position += 4;\n return true;\n }\n\n writeUint64(value) {\n if (!this._checkWrite(8)) {\n return false;\n }\n\n const high = value / 0x100000000;\n const low = value & 0xffffffff;\n\n this._dataView.setUint32(this._position, high);\n this._dataView.setUint32(this._position + 4, low);\n this._position += 8;\n return true;\n }\n\n writeString(value) {\n if (!this._checkWrite(value.length)) {\n return false;\n }\n\n for (let i = 0; i < value.length; ++i) {\n this._dataView.setUint8(this._position + i, value.charCodeAt(i));\n }\n\n this._position += value.length;\n return true;\n }\n\n writeZero(count) {\n if (!this._checkWrite(count)) {\n return false;\n }\n\n for (let i = 0; i < count; ++i) {\n this._dataView.setUint8(this._position + i, 0);\n }\n\n this._position += count;\n return true;\n }\n\n _checkWrite(count) {\n if (!this.canWrite(count)) {\n this._fail = true;\n return false;\n }\n\n return true;\n }\n}\n","/**\n * Maintains a moving average of a continuous stream of values\n *\n * This implements an \"exponential moving average\" as described here:\n * http://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n */\nexport default class MovingAverage {\n constructor(alpha) {\n if (alpha < 1) {\n throw new Error('MovingAverage: alpha must be >= 1');\n }\n this._value = 0;\n this._alpha = alpha;\n this._started = false;\n }\n\n get started() {\n return this._started;\n }\n\n get value() {\n return this._value;\n }\n\n set value(val) {\n this._value = val;\n this._started = true;\n }\n\n add(num) {\n if (!this._started) {\n this._value = num;\n this._started = true;\n } else {\n this._value = ((this._value * (this._alpha - 1)) + num) / this._alpha;\n }\n }\n\n reset() {\n this._value = 0;\n this._started = false;\n }\n}\n","import MovingAverage from './movingaverage';\n\n/**\n * Combines a moving average with a variance computed over its values\n */\nexport default class MovingAverageWithVariance {\n constructor(alpha) {\n this._average = new MovingAverage(alpha);\n this._variance = new MovingAverage(alpha);\n }\n\n get started() {\n return this._average.started;\n }\n\n get value() {\n return this._average.value;\n }\n\n set value(val) {\n this._average.value = val;\n this._variance.reset();\n }\n\n get variance() {\n return this._variance._value;\n }\n\n get standardDeviation() {\n return Math.sqrt(this.variance);\n }\n\n add(num) {\n // If this isn't the first value, get the difference between this new\n // value and the current average.\n if (this._average.started) {\n // The variance is the average of the squares of the differences\n // between each value and the current average\n const diffFromAverage = num - this._average.value;\n this._variance.add(diffFromAverage * diffFromAverage);\n }\n\n this._average.add(num);\n }\n\n reset() {\n this._average.reset();\n this._variance.reset();\n }\n}\n","function rangeCombine(range1, range2) {\n return {\n start: range1.start <= range2.start ? range1.start : range2.start,\n end: range1.end >= range2.end ? range1.end : range2.end,\n };\n}\n\nfunction rangeOverlaps(range1, range2) {\n return range1.start < range2.end && range2.start < range1.end;\n}\n\nfunction rangeContains(range1, rangeOrValue) {\n if (rangeOrValue.start !== undefined) {\n return range1.start <= rangeOrValue.start && range1.end >= rangeOrValue.end;\n } else {\n return rangeOrValue >= range1.start && rangeOrValue < range1.end;\n }\n}\n\nfunction rangeEquals(range1, range2) {\n return range1.start === range2.start && range1.end === range2.end;\n}\n\nexport {rangeCombine, rangeOverlaps, rangeContains, rangeEquals};\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { getClient } from '@sentry/core';\nimport type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n Severity,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: ex && ex.name,\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n },\n };\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const popSize = getPopSize(ex);\n\n try {\n return stackParser(stacktrace, popSize);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record<string, unknown>;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record<string, unknown>,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n","import { captureException, withScope } from '@sentry/core';\nimport type { DsnLike, Mechanism, WrappedFunction } from '@sentry/types';\nimport {\n GLOBAL_OBJ,\n addExceptionMechanism,\n addExceptionTypeValue,\n addNonEnumerableProperty,\n getOriginalFunction,\n markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n fn: WrappedFunction,\n options: {\n mechanism?: Mechanism;\n } = {},\n before?: WrappedFunction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = fn.__sentry_wrapped__;\n if (wrapper) {\n return wrapper;\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n /* eslint-disable prefer-rest-params */\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped: WrappedFunction = function (this: unknown): void {\n const args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n };\n /* eslint-enable prefer-rest-params */\n\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get(): string {\n return fn.name;\n },\n });\n }\n // eslint-disable-next-line no-empty\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n *\n * @deprecated This type will be removed in the next major version of the Sentry SDK. `showReportDialog` will still be around, however the `eventId` option will now be required.\n */\nexport interface ReportDialogOptions {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n eventId?: string;\n dsn?: DsnLike;\n user?: {\n email?: string;\n name?: string;\n };\n lang?: string;\n title?: string;\n subtitle?: string;\n subtitle2?: string;\n labelName?: string;\n labelEmail?: string;\n labelComments?: string;\n labelClose?: string;\n labelSubmit?: string;\n errorGeneric?: string;\n errorFormEntry?: string;\n successMessage?: string;\n /** Callback after reportDialog showed up */\n onLoad?(this: void): void;\n /** Callback after reportDialog closed */\n onClose?(this: void): void;\n}\n","import type {\n Client,\n Event,\n EventHint,\n Exception,\n Extras,\n Hub,\n Mechanism,\n ParameterizedString,\n Severity,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\n\nimport { isError, isParameterizedString, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n const exception: Exception = {\n type: error.name || error.constructor.name,\n value: error.message,\n };\n\n const frames = parseStackFrames(stackParser, error);\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n return exception;\n}\n\nfunction getMessageForObject(exception: object): string {\n if ('name' in exception && typeof exception.name === 'string') {\n let message = `'${exception.name}' captured as exception`;\n\n if ('message' in exception && typeof exception.message === 'string') {\n message += ` with message '${exception.message}'`;\n }\n\n return message;\n } else if ('message' in exception && typeof exception.message === 'string') {\n return exception.message;\n } else {\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n return `Object captured as exception with keys: ${extractExceptionKeysForMessage(\n exception as Record<string, unknown>,\n )}`;\n }\n}\n\n/**\n * Builds and Event from a Exception\n *\n * TODO(v8): Remove getHub fallback\n * @hidden\n */\nexport function eventFromUnknownInput(\n getHubOrClient: (() => Hub) | Client | undefined,\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n): Event {\n const client = typeof getHubOrClient === 'function' ? getHubOrClient().getClient() : getHubOrClient;\n\n let ex: unknown = exception;\n const providedMechanism: Mechanism | undefined =\n hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n const mechanism: Mechanism = providedMechanism || {\n handled: true,\n type: 'generic',\n };\n\n let extras: Extras | undefined;\n\n if (!isError(exception)) {\n if (isPlainObject(exception)) {\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n extras = { ['__serialized__']: normalizeToSize(exception as Record<string, unknown>, normalizeDepth) };\n\n const message = getMessageForObject(exception);\n ex = (hint && hint.syntheticException) || new Error(message);\n (ex as Error).message = message;\n } else {\n // This handles when someone does: `throw \"something awesome\";`\n // We use synthesized Error here so we can extract a (rough) stack trace.\n ex = (hint && hint.syntheticException) || new Error(exception as string);\n (ex as Error).message = exception as string;\n }\n mechanism.synthetic = true;\n }\n\n const event: Event = {\n exception: {\n values: [exceptionFromError(stackParser, ex as Error)],\n },\n };\n\n if (extras) {\n event.extra = extras;\n }\n\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, mechanism);\n\n return {\n ...event,\n event_id: hint && hint.event_id,\n };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {\n event_id: hint && hint.event_id,\n level,\n };\n\n if (attachStacktrace && hint && hint.syntheticException) {\n const frames = parseStackFrames(stackParser, hint.syntheticException);\n if (frames.length) {\n event.exception = {\n values: [\n {\n value: message,\n stacktrace: { frames },\n },\n ],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n","import type { IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent, exceptionFromError } from '@sentry/utils';\nimport { convertIntegrationFnToClass } from '../integration';\n\ninterface LinkedErrorsOptions {\n key?: string;\n limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst linkedErrorsIntegration: IntegrationFn = (options: LinkedErrorsOptions = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n};\n\n/** Adds SDK info to an event. */\n// eslint-disable-next-line deprecation/deprecation\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration);\n","import type { Options } from '@sentry/types';\n\nimport { getClient } from '../exports';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(\n maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,\n): boolean {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n","import type {\n Instrumenter,\n Primitive,\n Scope,\n Span,\n SpanTimeInput,\n TransactionContext,\n TransactionMetadata,\n} from '@sentry/types';\nimport type { SpanAttributes } from '@sentry/types';\nimport type { SpanOrigin } from '@sentry/types';\nimport type { TransactionSource } from '@sentry/types';\nimport { dropUndefinedKeys, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getCurrentScope, withScope } from '../exports';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanTimeInputToSeconds } from '../utils/spanUtils';\n\ninterface StartSpanOptions extends TransactionContext {\n /** A manually specified start time for the created `Span` object. */\n startTime?: SpanTimeInput;\n\n /** If defined, start this span off this scope instead off the current scope. */\n scope?: Scope;\n\n /** The name of the span. */\n name: string;\n\n /** An op for the span. This is a categorization for spans. */\n op?: string;\n\n /** The origin of the span - if it comes from auto instrumenation or manual instrumentation. */\n origin?: SpanOrigin;\n\n /** Attributes for the span. */\n attributes?: SpanAttributes;\n\n // All remaining fields are deprecated\n\n /**\n * @deprecated Manually set the end timestamp instead.\n */\n trimEnd?: boolean;\n\n /**\n * @deprecated This cannot be set manually anymore.\n */\n parentSampled?: boolean;\n\n /**\n * @deprecated Use attributes or set data on scopes instead.\n */\n metadata?: Partial<TransactionMetadata>;\n\n /**\n * The name thingy.\n * @deprecated Use `name` instead.\n */\n description?: string;\n\n /**\n * @deprecated Use `span.setStatus()` instead.\n */\n status?: string;\n\n /**\n * @deprecated Use `scope` instead.\n */\n parentSpanId?: string;\n\n /**\n * @deprecated You cannot manually set the span to sampled anymore.\n */\n sampled?: boolean;\n\n /**\n * @deprecated You cannot manually set the spanId anymore.\n */\n spanId?: string;\n\n /**\n * @deprecated You cannot manually set the traceId anymore.\n */\n traceId?: string;\n\n /**\n * @deprecated Use an attribute instead.\n */\n source?: TransactionSource;\n\n /**\n * @deprecated Use attributes or set tags on the scope instead.\n */\n tags?: { [key: string]: Primitive };\n\n /**\n * @deprecated Use attributes instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: { [key: string]: any };\n\n /**\n * @deprecated Use `startTime` instead.\n */\n startTimestamp?: number;\n\n /**\n * @deprecated Use `span.end()` instead.\n */\n endTimestamp?: number;\n\n /**\n * @deprecated You cannot set the instrumenter manually anymore.\n */\n instrumenter?: Instrumenter;\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n *\n * This function is meant to be used internally and may break at any time. Use at your own risk.\n *\n * @internal\n * @private\n *\n * @deprecated Use `startSpan` instead.\n */\nexport function trace<T>(\n context: TransactionContext,\n callback: (span?: Span) => T,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onError: (error: unknown, span?: Span) => void = () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n afterFinish: () => void = () => {},\n): T {\n const hub = getCurrentHub();\n const scope = getCurrentScope();\n // eslint-disable-next-line deprecation/deprecation\n const parentSpan = scope.getSpan();\n\n const ctx = normalizeContext(context);\n const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n error => {\n activeSpan && activeSpan.setStatus('internal_error');\n onError(error, activeSpan);\n },\n () => {\n activeSpan && activeSpan.end();\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(parentSpan);\n afterFinish();\n },\n );\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpan<T>(context: StartSpanOptions, callback: (span: Span | undefined) => T): T {\n const ctx = normalizeContext(context);\n\n return withScope(context.scope, scope => {\n const hub = getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const parentSpan = scope.getSpan();\n\n const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n () => {\n // Only update the span status if it hasn't been changed yet\n if (activeSpan && (!activeSpan.status || activeSpan.status === 'ok')) {\n activeSpan.setStatus('internal_error');\n }\n },\n () => activeSpan && activeSpan.end(),\n );\n });\n}\n\n/**\n * @deprecated Use {@link startSpan} instead.\n */\nexport const startActiveSpan = startSpan;\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpanManual<T>(\n context: StartSpanOptions,\n callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n const ctx = normalizeContext(context);\n\n return withScope(context.scope, scope => {\n const hub = getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const parentSpan = scope.getSpan();\n\n const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(activeSpan);\n\n function finishAndSetSpan(): void {\n activeSpan && activeSpan.end();\n }\n\n return handleCallbackErrors(\n () => callback(activeSpan, finishAndSetSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n if (activeSpan && !activeSpan.endTimestamp && (!activeSpan.status || activeSpan.status === 'ok')) {\n activeSpan.setStatus('internal_error');\n }\n },\n );\n });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startInactiveSpan(context: StartSpanOptions): Span | undefined {\n if (!hasTracingEnabled()) {\n return undefined;\n }\n\n const ctx = normalizeContext(context);\n const hub = getCurrentHub();\n const parentSpan = context.scope\n ? // eslint-disable-next-line deprecation/deprecation\n context.scope.getSpan()\n : getActiveSpan();\n return parentSpan\n ? // eslint-disable-next-line deprecation/deprecation\n parentSpan.startChild(ctx)\n : // eslint-disable-next-line deprecation/deprecation\n hub.startTransaction(ctx);\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentScope().getSpan();\n}\n\nexport function continueTrace({\n sentryTrace,\n baggage,\n}: {\n sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n baggage: Parameters<typeof tracingContextFromHeaders>[1];\n}): Partial<TransactionContext>;\nexport function continueTrace<V>(\n {\n sentryTrace,\n baggage,\n }: {\n sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n baggage: Parameters<typeof tracingContextFromHeaders>[1];\n },\n callback: (transactionContext: Partial<TransactionContext>) => V,\n): V;\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers,\n * or in the browser from `<meta name=\"sentry-trace\">` and `<meta name=\"baggage\">` HTML tags.\n *\n * The callback receives a transactionContext that may be used for `startTransaction` or `startSpan`.\n */\nexport function continueTrace<V>(\n {\n sentryTrace,\n baggage,\n }: {\n sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n baggage: Parameters<typeof tracingContextFromHeaders>[1];\n },\n callback?: (transactionContext: Partial<TransactionContext>) => V,\n): V | Partial<TransactionContext> {\n const currentScope = getCurrentScope();\n\n const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n sentryTrace,\n baggage,\n );\n\n currentScope.setPropagationContext(propagationContext);\n\n if (DEBUG_BUILD && traceparentData) {\n logger.log(`[Tracing] Continuing trace ${traceparentData.traceId}.`);\n }\n\n const transactionContext: Partial<TransactionContext> = {\n ...traceparentData,\n metadata: dropUndefinedKeys({\n dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n }),\n };\n\n if (!callback) {\n return transactionContext;\n }\n\n return callback(transactionContext);\n}\n\nfunction createChildSpanOrTransaction(\n hub: Hub,\n parentSpan: Span | undefined,\n ctx: TransactionContext,\n): Span | undefined {\n if (!hasTracingEnabled()) {\n return undefined;\n }\n return parentSpan\n ? // eslint-disable-next-line deprecation/deprecation\n parentSpan.startChild(ctx)\n : // eslint-disable-next-line deprecation/deprecation\n hub.startTransaction(ctx);\n}\n\n/**\n * This converts StartSpanOptions to TransactionContext.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n *\n * Eventually the StartSpanOptions will be more aligned with OpenTelemetry.\n */\nfunction normalizeContext(context: StartSpanOptions): TransactionContext {\n if (context.startTime) {\n const ctx: TransactionContext & { startTime?: SpanTimeInput } = { ...context };\n ctx.startTimestamp = spanTimeInputToSeconds(context.startTime);\n delete ctx.startTime;\n return ctx;\n }\n\n return context;\n}\n","/* eslint-disable max-lines */\nimport type {\n Instrumenter,\n Primitive,\n Span as SpanInterface,\n SpanAttributeValue,\n SpanAttributes,\n SpanContext,\n SpanContextData,\n SpanJSON,\n SpanOrigin,\n SpanTimeInput,\n TraceContext,\n Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport {\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTraceContext,\n spanToTraceHeader,\n} from '../utils/spanUtils';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n public spans: Span[];\n\n private readonly _maxlen: number;\n\n public constructor(maxlen: number = 1000) {\n this._maxlen = maxlen;\n this.spans = [];\n }\n\n /**\n * This is just so that we don't run out of memory while recording a lot\n * of spans. At some point we just stop and flush out the start of the\n * trace tree (i.e.the first n spans with the smallest\n * start_timestamp).\n */\n public add(span: Span): void {\n if (this.spans.length > this._maxlen) {\n span.spanRecorder = undefined;\n } else {\n this.spans.push(span);\n }\n }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n /**\n * @inheritDoc\n */\n public parentSpanId?: string;\n\n /**\n * Internal keeper of the status\n */\n public status?: SpanStatusType | string;\n\n /**\n * Timestamp in seconds when the span was created.\n */\n public startTimestamp: number;\n\n /**\n * Timestamp in seconds when the span ended.\n */\n public endTimestamp?: number;\n\n /**\n * @inheritDoc\n */\n public op?: string;\n\n /**\n * Tags for the span.\n * @deprecated Use `getSpanAttributes(span)` instead.\n */\n public tags: { [key: string]: Primitive };\n\n /**\n * Data for the span.\n * @deprecated Use `getSpanAttributes(span)` instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: { [key: string]: any };\n\n /**\n * List of spans that were finalized\n */\n public spanRecorder?: SpanRecorder;\n\n /**\n * @inheritDoc\n */\n public transaction?: Transaction;\n\n /**\n * The instrumenter that created this span.\n */\n public instrumenter: Instrumenter;\n\n /**\n * The origin of the span, giving context about what created the span.\n */\n public origin?: SpanOrigin;\n\n protected _traceId: string;\n protected _spanId: string;\n protected _sampled: boolean | undefined;\n protected _name?: string;\n protected _attributes: SpanAttributes;\n\n private _logMessage?: string;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startTransaction()`\n * or call `startChild()` on an existing span.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SpanContext = {}) {\n this._traceId = spanContext.traceId || uuid4();\n this._spanId = spanContext.spanId || uuid4().substring(16);\n this.startTimestamp = spanContext.startTimestamp || timestampInSeconds();\n // eslint-disable-next-line deprecation/deprecation\n this.tags = spanContext.tags ? { ...spanContext.tags } : {};\n // eslint-disable-next-line deprecation/deprecation\n this.data = spanContext.data ? { ...spanContext.data } : {};\n this._attributes = spanContext.attributes ? { ...spanContext.attributes } : {};\n this.instrumenter = spanContext.instrumenter || 'sentry';\n this.origin = spanContext.origin || 'manual';\n // eslint-disable-next-line deprecation/deprecation\n this._name = spanContext.name || spanContext.description;\n\n if (spanContext.parentSpanId) {\n this.parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.op) {\n this.op = spanContext.op;\n }\n if (spanContext.status) {\n this.status = spanContext.status;\n }\n if (spanContext.endTimestamp) {\n this.endTimestamp = spanContext.endTimestamp;\n }\n }\n\n // This rule conflicts with another eslint rule :(\n /* eslint-disable @typescript-eslint/member-ordering */\n\n /**\n * An alias for `description` of the Span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public get name(): string {\n return this._name || '';\n }\n\n /**\n * Update the name of the span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public set name(name: string) {\n this.updateName(name);\n }\n\n /**\n * Get the description of the Span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public get description(): string | undefined {\n return this._name;\n }\n\n /**\n * Get the description of the Span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public set description(description: string | undefined) {\n this._name = description;\n }\n\n /**\n * The ID of the trace.\n * @deprecated Use `spanContext().traceId` instead.\n */\n public get traceId(): string {\n return this._traceId;\n }\n\n /**\n * The ID of the trace.\n * @deprecated You cannot update the traceId of a span after span creation.\n */\n public set traceId(traceId: string) {\n this._traceId = traceId;\n }\n\n /**\n * The ID of the span.\n * @deprecated Use `spanContext().spanId` instead.\n */\n public get spanId(): string {\n return this._spanId;\n }\n\n /**\n * The ID of the span.\n * @deprecated You cannot update the spanId of a span after span creation.\n */\n public set spanId(spanId: string) {\n this._spanId = spanId;\n }\n\n /**\n * Was this span chosen to be sent as part of the sample?\n * @deprecated Use `isRecording()` instead.\n */\n public get sampled(): boolean | undefined {\n return this._sampled;\n }\n\n /**\n * Was this span chosen to be sent as part of the sample?\n * @deprecated You cannot update the sampling decision of a span after span creation.\n */\n public set sampled(sampled: boolean | undefined) {\n this._sampled = sampled;\n }\n\n /**\n * Attributes for the span.\n * @deprecated Use `getSpanAttributes(span)` instead.\n */\n public get attributes(): SpanAttributes {\n return this._attributes;\n }\n\n /**\n * Attributes for the span.\n * @deprecated Use `setAttributes()` instead.\n */\n public set attributes(attributes: SpanAttributes) {\n this._attributes = attributes;\n }\n\n /* eslint-enable @typescript-eslint/member-ordering */\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * Also the `sampled` decision will be inherited.\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\n public startChild(\n spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n ): Span {\n const childSpan = new Span({\n ...spanContext,\n parentSpanId: this._spanId,\n sampled: this._sampled,\n traceId: this._traceId,\n });\n\n childSpan.spanRecorder = this.spanRecorder;\n if (childSpan.spanRecorder) {\n childSpan.spanRecorder.add(childSpan);\n }\n\n childSpan.transaction = this.transaction;\n\n if (DEBUG_BUILD && childSpan.transaction) {\n const opStr = (spanContext && spanContext.op) || '< unknown op >';\n const nameStr = spanToJSON(childSpan).description || '< unknown name >';\n const idStr = childSpan.transaction.spanContext().spanId;\n\n const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n logger.log(logMessage);\n this._logMessage = logMessage;\n }\n\n return childSpan;\n }\n\n /**\n * Sets the tag attribute on the current span.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key Tag key\n * @param value Tag value\n * @deprecated Use `setAttribute()` instead.\n */\n public setTag(key: string, value: Primitive): this {\n // eslint-disable-next-line deprecation/deprecation\n this.tags = { ...this.tags, [key]: value };\n return this;\n }\n\n /**\n * Sets the data attribute on the current span\n * @param key Data key\n * @param value Data value\n * @deprecated Use `setAttribute()` instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setData(key: string, value: any): this {\n // eslint-disable-next-line deprecation/deprecation\n this.data = { ...this.data, [key]: value };\n return this;\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): void {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): void {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatusType): this {\n this.status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setHttpStatus(httpStatus: number): this {\n // eslint-disable-next-line deprecation/deprecation\n this.setTag('http.status_code', String(httpStatus));\n // eslint-disable-next-line deprecation/deprecation\n this.setData('http.response.status_code', httpStatus);\n const spanStatus = spanStatusfromHttpCode(httpStatus);\n if (spanStatus !== 'unknown_error') {\n this.setStatus(spanStatus);\n }\n return this;\n }\n\n /** @inheritdoc */\n public setName(name: string): void {\n this.updateName(name);\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public isSuccess(): boolean {\n return this.status === 'ok';\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `.end()` instead.\n */\n public finish(endTimestamp?: number): void {\n return this.end(endTimestamp);\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n if (\n DEBUG_BUILD &&\n // Don't call this for transactions\n this.transaction &&\n this.transaction.spanContext().spanId !== this._spanId\n ) {\n const logMessage = this._logMessage;\n if (logMessage) {\n logger.log((logMessage as string).replace('Starting', 'Finishing'));\n }\n }\n\n this.endTimestamp = spanTimeInputToSeconds(endTimestamp);\n }\n\n /**\n * @inheritDoc\n */\n public toTraceparent(): string {\n return spanToTraceHeader(this);\n }\n\n /**\n * @inheritDoc\n */\n public toContext(): SpanContext {\n return dropUndefinedKeys({\n data: this._getData(),\n description: this._name,\n endTimestamp: this.endTimestamp,\n op: this.op,\n parentSpanId: this.parentSpanId,\n sampled: this._sampled,\n spanId: this._spanId,\n startTimestamp: this.startTimestamp,\n status: this.status,\n // eslint-disable-next-line deprecation/deprecation\n tags: this.tags,\n traceId: this._traceId,\n });\n }\n\n /**\n * @inheritDoc\n */\n public updateWithContext(spanContext: SpanContext): this {\n // eslint-disable-next-line deprecation/deprecation\n this.data = spanContext.data || {};\n // eslint-disable-next-line deprecation/deprecation\n this._name = spanContext.name || spanContext.description;\n this.endTimestamp = spanContext.endTimestamp;\n this.op = spanContext.op;\n this.parentSpanId = spanContext.parentSpanId;\n this._sampled = spanContext.sampled;\n this._spanId = spanContext.spanId || this._spanId;\n this.startTimestamp = spanContext.startTimestamp || this.startTimestamp;\n this.status = spanContext.status;\n // eslint-disable-next-line deprecation/deprecation\n this.tags = spanContext.tags || {};\n this._traceId = spanContext.traceId || this._traceId;\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getTraceContext(): TraceContext {\n return spanToTraceContext(this);\n }\n\n /**\n * Get JSON representation of this span.\n */\n public getSpanJSON(): SpanJSON {\n return dropUndefinedKeys({\n data: this._getData(),\n description: this._name,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this._spanId,\n start_timestamp: this.startTimestamp,\n status: this.status,\n // eslint-disable-next-line deprecation/deprecation\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n timestamp: this.endTimestamp,\n trace_id: this._traceId,\n origin: this.origin,\n });\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this.endTimestamp && !!this._sampled;\n }\n\n /**\n * Convert the object to JSON.\n * @deprecated Use `spanToJSON(span)` instead.\n */\n public toJSON(): SpanJSON {\n return this.getSpanJSON();\n }\n\n /**\n * Get the merged data for this span.\n * For now, this combines `data` and `attributes` together,\n * until eventually we can ingest `attributes` directly.\n */\n private _getData():\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined {\n // eslint-disable-next-line deprecation/deprecation\n const { data, _attributes: attributes } = this;\n\n const hasData = Object.keys(data).length > 0;\n const hasAttributes = Object.keys(attributes).length > 0;\n\n if (!hasData && !hasAttributes) {\n return undefined;\n }\n\n if (hasData && hasAttributes) {\n return {\n ...data,\n ...attributes,\n };\n }\n\n return hasData ? data : attributes;\n }\n}\n\nexport type SpanStatusType =\n /** The operation completed successfully. */\n | 'ok'\n /** Deadline expired before operation could complete. */\n | 'deadline_exceeded'\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n | 'unauthenticated'\n /** 403 Forbidden */\n | 'permission_denied'\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n | 'not_found'\n /** 429 Too Many Requests */\n | 'resource_exhausted'\n /** Client specified an invalid argument. 4xx. */\n | 'invalid_argument'\n /** 501 Not Implemented */\n | 'unimplemented'\n /** 503 Service Unavailable */\n | 'unavailable'\n /** Other/generic 5xx. */\n | 'internal_error'\n /** Unknown. Any non-standard HTTP status code. */\n | 'unknown_error'\n /** The operation was cancelled (typically by the user). */\n | 'cancelled'\n /** Already exists (409) */\n | 'already_exists'\n /** Operation was rejected because the system is not in a state required for the operation's */\n | 'failed_precondition'\n /** The operation was aborted, typically due to a concurrency issue. */\n | 'aborted'\n /** Operation was attempted past the valid range. */\n | 'out_of_range'\n /** Unrecoverable data loss or corruption */\n | 'data_loss';\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function spanStatusfromHttpCode(httpStatus: number): SpanStatusType {\n if (httpStatus < 400 && httpStatus >= 100) {\n return 'ok';\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return 'unauthenticated';\n case 403:\n return 'permission_denied';\n case 404:\n return 'not_found';\n case 409:\n return 'already_exists';\n case 413:\n return 'failed_precondition';\n case 429:\n return 'resource_exhausted';\n default:\n return 'invalid_argument';\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return 'unimplemented';\n case 503:\n return 'unavailable';\n case 504:\n return 'deadline_exceeded';\n default:\n return 'internal_error';\n }\n }\n\n return 'unknown_error';\n}\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n","import type {\n Context,\n Contexts,\n DynamicSamplingContext,\n MeasurementUnit,\n Measurements,\n SpanTimeInput,\n Transaction as TransactionInterface,\n TransactionContext,\n TransactionEvent,\n TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { spanTimeInputToSeconds, spanToTraceContext } from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n /**\n * The reference to the current hub.\n */\n public _hub: Hub;\n\n protected _name: string;\n\n private _measurements: Measurements;\n\n private _contexts: Contexts;\n\n private _trimEnd?: boolean;\n\n // DO NOT yet remove this property, it is used in a hack for v7 backwards compatibility.\n private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n private _metadata: Partial<TransactionMetadata>;\n\n /**\n * This constructor should never be called manually. Those instrumenting tracing should use\n * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n * @internal\n * @hideconstructor\n * @hidden\n *\n * @deprecated Transactions will be removed in v8. Use spans instead.\n */\n public constructor(transactionContext: TransactionContext, hub?: Hub) {\n super(transactionContext);\n this._measurements = {};\n this._contexts = {};\n\n this._hub = hub || getCurrentHub();\n\n this._name = transactionContext.name || '';\n\n this._metadata = {\n // eslint-disable-next-line deprecation/deprecation\n ...transactionContext.metadata,\n };\n\n this._trimEnd = transactionContext.trimEnd;\n\n // this is because transactions are also spans, and spans have a transaction pointer\n this.transaction = this;\n\n // If Dynamic Sampling Context is provided during the creation of the transaction, we freeze it as it usually means\n // there is incoming Dynamic Sampling Context. (Either through an incoming request, a baggage meta-tag, or other means)\n const incomingDynamicSamplingContext = this._metadata.dynamicSamplingContext;\n if (incomingDynamicSamplingContext) {\n // We shallow copy this in case anything writes to the original reference of the passed in `dynamicSamplingContext`\n this._frozenDynamicSamplingContext = { ...incomingDynamicSamplingContext };\n }\n }\n\n // This sadly conflicts with the getter/setter ordering :(\n /* eslint-disable @typescript-eslint/member-ordering */\n\n /**\n * Getter for `name` property.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public get name(): string {\n return this._name;\n }\n\n /**\n * Setter for `name` property, which also sets `source` as custom.\n * @deprecated Use `updateName()` and `setMetadata()` instead.\n */\n public set name(newName: string) {\n // eslint-disable-next-line deprecation/deprecation\n this.setName(newName);\n }\n\n /**\n * Get the metadata for this transaction.\n * @deprecated Use `spanGetMetadata(transaction)` instead.\n */\n public get metadata(): TransactionMetadata {\n // We merge attributes in for backwards compatibility\n return {\n // Defaults\n // eslint-disable-next-line deprecation/deprecation\n source: 'custom',\n spanMetadata: {},\n\n // Legacy metadata\n ...this._metadata,\n\n // From attributes\n ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && {\n source: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionMetadata['source'],\n }),\n ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && {\n sampleRate: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as TransactionMetadata['sampleRate'],\n }),\n };\n }\n\n /**\n * Update the metadata for this transaction.\n * @deprecated Use `spanGetMetadata(transaction)` instead.\n */\n public set metadata(metadata: TransactionMetadata) {\n this._metadata = metadata;\n }\n\n /* eslint-enable @typescript-eslint/member-ordering */\n\n /**\n * Setter for `name` property, which also sets `source` on the metadata.\n *\n * @deprecated Use `updateName()` and `setMetadata()` instead.\n */\n public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n this._name = name;\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n }\n\n /** @inheritdoc */\n public updateName(name: string): this {\n this._name = name;\n return this;\n }\n\n /**\n * Attaches SpanRecorder to the span itself\n * @param maxlen maximum number of spans that can be recorded\n */\n public initSpanRecorder(maxlen: number = 1000): void {\n if (!this.spanRecorder) {\n this.spanRecorder = new SpanRecorder(maxlen);\n }\n this.spanRecorder.add(this);\n }\n\n /**\n * Set the context of a transaction event.\n * @deprecated Use either `.setAttribute()`, or set the context on the scope before creating the transaction.\n */\n public setContext(key: string, context: Context | null): void {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n }\n\n /**\n * @inheritDoc\n */\n public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n this._measurements[name] = { value, unit };\n }\n\n /**\n * Store metadata on this transaction.\n * @deprecated Use attributes or store data on the scope instead.\n */\n public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n this._metadata = { ...this._metadata, ...newMetadata };\n }\n\n /**\n * @inheritDoc\n */\n public end(endTimestamp?: SpanTimeInput): string | undefined {\n const timestampInS = spanTimeInputToSeconds(endTimestamp);\n const transaction = this._finishTransaction(timestampInS);\n if (!transaction) {\n return undefined;\n }\n // eslint-disable-next-line deprecation/deprecation\n return this._hub.captureEvent(transaction);\n }\n\n /**\n * @inheritDoc\n */\n public toContext(): TransactionContext {\n // eslint-disable-next-line deprecation/deprecation\n const spanContext = super.toContext();\n\n return dropUndefinedKeys({\n ...spanContext,\n name: this._name,\n trimEnd: this._trimEnd,\n });\n }\n\n /**\n * @inheritDoc\n */\n public updateWithContext(transactionContext: TransactionContext): this {\n // eslint-disable-next-line deprecation/deprecation\n super.updateWithContext(transactionContext);\n\n this._name = transactionContext.name || '';\n this._trimEnd = transactionContext.trimEnd;\n\n return this;\n }\n\n /**\n * @inheritdoc\n *\n * @experimental\n *\n * @deprecated Use top-level `getDynamicSamplingContextFromSpan` instead.\n */\n public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n return getDynamicSamplingContextFromSpan(this);\n }\n\n /**\n * Override the current hub with a new one.\n * Used if you want another hub to finish the transaction.\n *\n * @internal\n */\n public setHub(hub: Hub): void {\n this._hub = hub;\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n protected _finishTransaction(endTimestamp?: number): TransactionEvent | undefined {\n // This transaction is already finished, so we should not flush it again.\n if (this.endTimestamp !== undefined) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n // just sets the end timestamp\n super.end(endTimestamp);\n\n const client = this._hub.getClient();\n if (client && client.emit) {\n client.emit('finishTransaction', this);\n }\n\n if (this._sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n const finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(s => s !== this && s.endTimestamp) : [];\n\n if (this._trimEnd && finishedSpans.length > 0) {\n this.endTimestamp = finishedSpans.reduce((prev: SpanClass, current: SpanClass) => {\n if (prev.endTimestamp && current.endTimestamp) {\n return prev.endTimestamp > current.endTimestamp ? prev : current;\n }\n return prev;\n }).endTimestamp;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const { metadata } = this;\n // eslint-disable-next-line deprecation/deprecation\n const { source } = metadata;\n\n const transaction: TransactionEvent = {\n contexts: {\n ...this._contexts,\n // We don't want to override trace context\n trace: spanToTraceContext(this),\n },\n // TODO: Pass spans serialized via `spanToJSON()` here instead in v8.\n spans: finishedSpans,\n start_timestamp: this.startTimestamp,\n // eslint-disable-next-line deprecation/deprecation\n tags: this.tags,\n timestamp: this.endTimestamp,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n ...metadata,\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n },\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n logger.log(\n '[Measurements] Adding measurements to transaction',\n JSON.stringify(this._measurements, undefined, 2),\n );\n transaction.measurements = this._measurements;\n }\n\n DEBUG_BUILD && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`);\n\n return transaction;\n }\n}\n","/* eslint-disable max-lines */\nimport type { SpanTimeInput, TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { spanTimeInputToSeconds } from '../utils/spanUtils';\nimport type { Span } from './span';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const TRACING_DEFAULTS = {\n idleTimeout: 1000,\n finalTimeout: 30000,\n heartbeatInterval: 5000,\n};\n\nconst FINISH_REASON_TAG = 'finishReason';\n\nconst IDLE_TRANSACTION_FINISH_REASONS = [\n 'heartbeatFailed',\n 'idleTimeout',\n 'documentHidden',\n 'finalTimeout',\n 'externalFinish',\n 'cancelled',\n];\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n public constructor(\n private readonly _pushActivity: (id: string) => void,\n private readonly _popActivity: (id: string) => void,\n public transactionSpanId: string,\n maxlen?: number,\n ) {\n super(maxlen);\n }\n\n /**\n * @inheritDoc\n */\n public add(span: Span): void {\n // We should make sure we do not push and pop activities for\n // the transaction that this span recorder belongs to.\n if (span.spanContext().spanId !== this.transactionSpanId) {\n // We patch span.end() to pop an activity after setting an endTimestamp.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalEnd = span.end;\n span.end = (...rest: unknown[]) => {\n this._popActivity(span.spanContext().spanId);\n return originalEnd.apply(span, rest);\n };\n\n // We should only push new activities if the span does not have an end timestamp.\n if (span.endTimestamp === undefined) {\n this._pushActivity(span.spanContext().spanId);\n }\n }\n\n super.add(span);\n }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nexport class IdleTransaction extends Transaction {\n // Activities store a list of active spans\n public activities: Record<string, boolean>;\n // Track state of activities in previous heartbeat\n private _prevHeartbeatString: string | undefined;\n\n // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n private _heartbeatCounter: number;\n\n // We should not use heartbeat if we finished a transaction\n private _finished: boolean;\n\n // Idle timeout was canceled and we should finish the transaction with the last span end.\n private _idleTimeoutCanceledPermanently: boolean;\n\n private readonly _beforeFinishCallbacks: BeforeFinishCallback[];\n\n /**\n * Timer that tracks Transaction idleTimeout\n */\n private _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n private _finishReason: (typeof IDLE_TRANSACTION_FINISH_REASONS)[number];\n\n /**\n * @deprecated Transactions will be removed in v8. Use spans instead.\n */\n public constructor(\n transactionContext: TransactionContext,\n private readonly _idleHub: Hub,\n /**\n * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n * there are no active spans on this transaction.\n */\n private readonly _idleTimeout: number = TRACING_DEFAULTS.idleTimeout,\n /**\n * The final value in ms that a transaction cannot exceed\n */\n private readonly _finalTimeout: number = TRACING_DEFAULTS.finalTimeout,\n private readonly _heartbeatInterval: number = TRACING_DEFAULTS.heartbeatInterval,\n // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n private readonly _onScope: boolean = false,\n ) {\n super(transactionContext, _idleHub);\n\n this.activities = {};\n this._heartbeatCounter = 0;\n this._finished = false;\n this._idleTimeoutCanceledPermanently = false;\n this._beforeFinishCallbacks = [];\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[4];\n\n if (_onScope) {\n // We set the transaction here on the scope so error events pick up the trace\n // context and attach it to the error.\n DEBUG_BUILD && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`);\n // eslint-disable-next-line deprecation/deprecation\n _idleHub.getScope().setSpan(this);\n }\n\n this._restartIdleTimeout();\n setTimeout(() => {\n if (!this._finished) {\n this.setStatus('deadline_exceeded');\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n this.end();\n }\n }, this._finalTimeout);\n }\n\n /** {@inheritDoc} */\n public end(endTimestamp?: SpanTimeInput): string | undefined {\n const endTimestampInS = spanTimeInputToSeconds(endTimestamp);\n\n this._finished = true;\n this.activities = {};\n\n if (this.op === 'ui.action.click') {\n this.setAttribute(FINISH_REASON_TAG, this._finishReason);\n }\n\n if (this.spanRecorder) {\n DEBUG_BUILD &&\n logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestampInS * 1000).toISOString(), this.op);\n\n for (const callback of this._beforeFinishCallbacks) {\n callback(this, endTimestampInS);\n }\n\n this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n // If we are dealing with the transaction itself, we just return it\n if (span.spanContext().spanId === this.spanContext().spanId) {\n return true;\n }\n\n // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n if (!span.endTimestamp) {\n span.endTimestamp = endTimestampInS;\n span.setStatus('cancelled');\n DEBUG_BUILD &&\n logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n }\n\n const spanStartedBeforeTransactionFinish = span.startTimestamp < endTimestampInS;\n\n // Add a delta with idle timeout so that we prevent false positives\n const timeoutWithMarginOfError = (this._finalTimeout + this._idleTimeout) / 1000;\n const spanEndedBeforeFinalTimeout = span.endTimestamp - this.startTimestamp < timeoutWithMarginOfError;\n\n if (DEBUG_BUILD) {\n const stringifiedSpan = JSON.stringify(span, undefined, 2);\n if (!spanStartedBeforeTransactionFinish) {\n logger.log('[Tracing] discarding Span since it happened after Transaction was finished', stringifiedSpan);\n } else if (!spanEndedBeforeFinalTimeout) {\n logger.log('[Tracing] discarding Span since it finished after Transaction final timeout', stringifiedSpan);\n }\n }\n\n return spanStartedBeforeTransactionFinish && spanEndedBeforeFinalTimeout;\n });\n\n DEBUG_BUILD && logger.log('[Tracing] flushing IdleTransaction');\n } else {\n DEBUG_BUILD && logger.log('[Tracing] No active IdleTransaction');\n }\n\n // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n if (this._onScope) {\n const scope = this._idleHub.getScope();\n // eslint-disable-next-line deprecation/deprecation\n if (scope.getTransaction() === this) {\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(undefined);\n }\n }\n\n return super.end(endTimestamp);\n }\n\n /**\n * Register a callback function that gets excecuted before the transaction finishes.\n * Useful for cleanup or if you want to add any additional spans based on current context.\n *\n * This is exposed because users have no other way of running something before an idle transaction\n * finishes.\n */\n public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n this._beforeFinishCallbacks.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public initSpanRecorder(maxlen?: number): void {\n if (!this.spanRecorder) {\n const pushActivity = (id: string): void => {\n if (this._finished) {\n return;\n }\n this._pushActivity(id);\n };\n const popActivity = (id: string): void => {\n if (this._finished) {\n return;\n }\n this._popActivity(id);\n };\n\n this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanContext().spanId, maxlen);\n\n // Start heartbeat so that transactions do not run forever.\n DEBUG_BUILD && logger.log('Starting heartbeat');\n this._pingHeartbeat();\n }\n this.spanRecorder.add(this);\n }\n\n /**\n * Cancels the existing idle timeout, if there is one.\n * @param restartOnChildSpanChange Default is `true`.\n * If set to false the transaction will end\n * with the last child span.\n */\n public cancelIdleTimeout(\n endTimestamp?: Parameters<IdleTransaction['end']>[0],\n {\n restartOnChildSpanChange,\n }: {\n restartOnChildSpanChange?: boolean;\n } = {\n restartOnChildSpanChange: true,\n },\n ): void {\n this._idleTimeoutCanceledPermanently = restartOnChildSpanChange === false;\n if (this._idleTimeoutID) {\n clearTimeout(this._idleTimeoutID);\n this._idleTimeoutID = undefined;\n\n if (Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) {\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n this.end(endTimestamp);\n }\n }\n }\n\n /**\n * Temporary method used to externally set the transaction's `finishReason`\n *\n * ** WARNING**\n * This is for the purpose of experimentation only and will be removed in the near future, do not use!\n *\n * @internal\n *\n */\n public setFinishReason(reason: string): void {\n this._finishReason = reason;\n }\n\n /**\n * Restarts idle timeout, if there is no running idle timeout it will start one.\n */\n private _restartIdleTimeout(endTimestamp?: Parameters<IdleTransaction['end']>[0]): void {\n this.cancelIdleTimeout();\n this._idleTimeoutID = setTimeout(() => {\n if (!this._finished && Object.keys(this.activities).length === 0) {\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[1];\n this.end(endTimestamp);\n }\n }, this._idleTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n private _pushActivity(spanId: string): void {\n this.cancelIdleTimeout(undefined, { restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently });\n DEBUG_BUILD && logger.log(`[Tracing] pushActivity: ${spanId}`);\n this.activities[spanId] = true;\n DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n private _popActivity(spanId: string): void {\n if (this.activities[spanId]) {\n DEBUG_BUILD && logger.log(`[Tracing] popActivity ${spanId}`);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.activities[spanId];\n DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n if (Object.keys(this.activities).length === 0) {\n const endTimestamp = timestampInSeconds();\n if (this._idleTimeoutCanceledPermanently) {\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n this.end(endTimestamp);\n } else {\n // We need to add the timeout here to have the real endtimestamp of the transaction\n // Remember timestampInSeconds is in seconds, timeout is in ms\n this._restartIdleTimeout(endTimestamp + this._idleTimeout / 1000);\n }\n }\n }\n\n /**\n * Checks when entries of this.activities are not changing for 3 beats.\n * If this occurs we finish the transaction.\n */\n private _beat(): void {\n // We should not be running heartbeat if the idle transaction is finished.\n if (this._finished) {\n return;\n }\n\n const heartbeatString = Object.keys(this.activities).join('');\n\n if (heartbeatString === this._prevHeartbeatString) {\n this._heartbeatCounter++;\n } else {\n this._heartbeatCounter = 1;\n }\n\n this._prevHeartbeatString = heartbeatString;\n\n if (this._heartbeatCounter >= 3) {\n DEBUG_BUILD && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n this.setStatus('deadline_exceeded');\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[0];\n this.end();\n } else {\n this._pingHeartbeat();\n }\n }\n\n /**\n * Pings the heartbeat\n */\n private _pingHeartbeat(): void {\n DEBUG_BUILD && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n setTimeout(() => {\n this._beat();\n }, this._heartbeatInterval);\n }\n}\n","import type { Transaction } from '@sentry/types';\nimport { extractTraceparentData as _extractTraceparentData } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * Grabs active transaction off scope.\n *\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n const hub = maybeHub || getCurrentHub();\n const scope = hub.getScope();\n // eslint-disable-next-line deprecation/deprecation\n return scope.getTransaction() as T | undefined;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n *\n * @deprecated Import this function from `@sentry/utils` instead\n */\nexport const extractTraceparentData = _extractTraceparentData;\n","import {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SpanStatusType } from './span';\nimport { getActiveTransaction } from './utils';\n\nlet errorsInstrumented = false;\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n // eslint-disable-next-line deprecation/deprecation\n const activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n const status: SpanStatusType = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n activeTransaction.setStatus(status);\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","import type { Options, SamplingContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanToJSON } from '../utils/spanUtils';\nimport type { Transaction } from './transaction';\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * This method muttes the given `transaction` and will set the `sampled` value on it.\n * It returns the same transaction, for convenience.\n */\nexport function sampleTransaction<T extends Transaction>(\n transaction: T,\n options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,\n samplingContext: SamplingContext,\n): T {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = false;\n return transaction;\n }\n\n // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n // eslint-disable-next-line deprecation/deprecation\n if (transaction.sampled !== undefined) {\n // eslint-disable-next-line deprecation/deprecation\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(transaction.sampled));\n return transaction;\n }\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n } else {\n // When `enableTracing === true`, we use a sample rate of 100%\n sampleRate = 1;\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n if (!isValidSampleRate(sampleRate)) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = false;\n return transaction;\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!sampleRate) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = false;\n return transaction;\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n // if we're not going to keep it, we're done\n // eslint-disable-next-line deprecation/deprecation\n if (!transaction.sampled) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return transaction;\n }\n\n DEBUG_BUILD &&\n logger.log(`[Tracing] starting ${transaction.op} transaction - ${spanToJSON(transaction).description}`);\n return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate: unknown): boolean {\n // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n rate,\n )} of type ${JSON.stringify(typeof rate)}.`,\n );\n return false;\n }\n\n // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n if (rate < 0 || rate > 1) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n return false;\n }\n return true;\n}\n","import type { ClientOptions, CustomSamplingContext, TransactionContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { spanToTraceHeader } from '../utils/spanUtils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { sampleTransaction } from './sampling';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n const scope = this.getScope();\n // eslint-disable-next-line deprecation/deprecation\n const span = scope.getSpan();\n\n return span\n ? {\n 'sentry-trace': spanToTraceHeader(span),\n }\n : {};\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n this: Hub,\n transactionContext: TransactionContext,\n customSamplingContext?: CustomSamplingContext,\n): Transaction {\n const client = this.getClient();\n const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n const configInstrumenter = options.instrumenter || 'sentry';\n const transactionInstrumenter = transactionContext.instrumenter || 'sentry';\n\n if (configInstrumenter !== transactionInstrumenter) {\n DEBUG_BUILD &&\n logger.error(\n `A transaction was started with instrumenter=\\`${transactionInstrumenter}\\`, but the SDK is configured with the \\`${configInstrumenter}\\` instrumenter.\nThe transaction will not be sampled. Please use the ${configInstrumenter} instrumentation to start transactions.`,\n );\n\n // eslint-disable-next-line deprecation/deprecation\n transactionContext.sampled = false;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n let transaction = new Transaction(transactionContext, this);\n transaction = sampleTransaction(transaction, options, {\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n ...customSamplingContext,\n });\n if (transaction.isRecording()) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n }\n if (client && client.emit) {\n client.emit('startTransaction', transaction);\n }\n return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n hub: Hub,\n transactionContext: TransactionContext,\n idleTimeout: number,\n finalTimeout: number,\n onScope?: boolean,\n customSamplingContext?: CustomSamplingContext,\n heartbeatInterval?: number,\n): IdleTransaction {\n const client = hub.getClient();\n const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n // eslint-disable-next-line deprecation/deprecation\n let transaction = new IdleTransaction(transactionContext, hub, idleTimeout, finalTimeout, heartbeatInterval, onScope);\n transaction = sampleTransaction(transaction, options, {\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n ...customSamplingContext,\n });\n if (transaction.isRecording()) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n }\n if (client && client.emit) {\n client.emit('startTransaction', transaction);\n }\n return transaction;\n}\n\n/**\n * Adds tracing extensions to the global hub.\n */\nexport function addTracingExtensions(): void {\n const carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n if (!carrier.__SENTRY__.extensions.startTransaction) {\n carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n }\n if (!carrier.__SENTRY__.extensions.traceHeaders) {\n carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n }\n\n registerErrorInstrumentation();\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric, ReportCallback } from '../types';\n\nexport const bindReporter = (\n callback: ReportCallback,\n metric: Metric,\n reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n let prevValue: number;\n let delta: number;\n return (forceReport?: boolean) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n callback(metric);\n }\n }\n }\n };\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nconst getNavigationEntryFromPerformanceTiming = (): NavigationTimingPolyfillEntry => {\n // eslint-disable-next-line deprecation/deprecation\n const timing = WINDOW.performance.timing;\n // eslint-disable-next-line deprecation/deprecation\n const type = WINDOW.performance.navigation.type;\n\n const navigationEntry: { [key: string]: number | string } = {\n entryType: 'navigation',\n startTime: 0,\n type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n };\n\n for (const key in timing) {\n if (key !== 'navigationStart' && key !== 'toJSON') {\n // eslint-disable-next-line deprecation/deprecation\n navigationEntry[key] = Math.max((timing[key as keyof PerformanceTiming] as number) - timing.navigationStart, 0);\n }\n }\n return navigationEntry as unknown as NavigationTimingPolyfillEntry;\n};\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n if (WINDOW.__WEB_VITALS_POLYFILL__) {\n return (\n WINDOW.performance &&\n ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n getNavigationEntryFromPerformanceTiming())\n );\n } else {\n return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n }\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n const navEntry = getNavigationEntry();\n let navigationType: Metric['navigationType'] = 'navigate';\n\n if (navEntry) {\n if (WINDOW.document.prerendering || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else {\n navigationType = navEntry.type.replace(/_/g, '-') as Metric['navigationType'];\n }\n }\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good', // Will be updated if the value changes.\n delta: 0,\n entries: [],\n id: generateUniqueID(),\n navigationType,\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = (): string => {\n return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry, PerformancePaintTiming } from '../types';\n\nexport interface PerformanceEntryHandler {\n (entry: PerformanceEntry): void;\n}\n\ninterface PerformanceEntryMap {\n event: PerformanceEventTiming[];\n paint: PerformancePaintTiming[];\n 'layout-shift': LayoutShift[];\n 'largest-contentful-paint': LargestContentfulPaint[];\n 'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n resource: PerformanceResourceTiming[];\n longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = <K extends keyof PerformanceEntryMap>(\n type: K,\n callback: (entries: PerformanceEntryMap[K]) => void,\n opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n callback(list.getEntries() as PerformanceEntryMap[K]);\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) as PerformanceObserverInit,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\n\nexport interface OnHiddenCallback {\n (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n const onHiddenOrPageHide = (event: Event): void => {\n if (event.type === 'pagehide' || WINDOW.document.visibilityState === 'hidden') {\n cb(event);\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { CLSMetric, ReportCallback, StopListening } from './types';\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport: ReportCallback): StopListening | undefined => {\n const metric = initMetric('CLS', 0);\n let report: ReturnType<typeof bindReporter>;\n\n let sessionValue = 0;\n let sessionEntries: PerformanceEntry[] = [];\n\n // const handleEntries = (entries: Metric['entries']) => {\n const handleEntries = (entries: LayoutShift[]): void => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry and\n // less than 5 seconds after the first entry in the session, include the\n // entry in the current session. Otherwise, start a new session.\n if (\n sessionValue &&\n sessionEntries.length !== 0 &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n if (report) {\n report();\n }\n }\n }\n });\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric);\n\n const stopListening = (): void => {\n handleEntries(po.takeRecords() as CLSMetric['entries']);\n report(true);\n };\n\n onHidden(stopListening);\n\n return stopListening;\n }\n\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): number => {\n // If the document is hidden and not prerendering, assume it was always\n // hidden and the page was loaded in the background.\n return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst trackChanges = (): void => {\n // Update the time if/when the document becomes hidden.\n onHidden(({ timeStamp }) => {\n firstHiddenTime = timeStamp;\n }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n readonly firstHiddenTime: number;\n} => {\n if (firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n trackChanges();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { FIDMetric, PerformanceEventTiming, ReportCallback } from './types';\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: ReportCallback): void => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report: ReturnType<typeof bindReporter>;\n\n const handleEntry = (entry: PerformanceEventTiming): void => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries: FIDMetric['entries']): void => {\n (entries as PerformanceEventTiming[]).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n report = bindReporter(onReport, metric);\n\n if (po) {\n onHidden(() => {\n handleEntries(po.takeRecords() as FIDMetric['entries']);\n po.disconnect();\n }, true);\n }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { LCPMetric, ReportCallback, StopListening } from './types';\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nexport const onLCP = (onReport: ReportCallback): StopListening | undefined => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report: ReturnType<typeof bindReporter>;\n\n const handleEntries = (entries: LCPMetric['entries']): void => {\n const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n if (lastEntry) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was prerendered.\n const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n // Only report if the page wasn't hidden prior to LCP.\n if (value < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries = [lastEntry];\n report();\n }\n }\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric);\n\n const stopListening = (): void => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() as LCPMetric['entries']);\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n };\n\n // Stop listening after input. Note: while scrolling is an input that\n // stop LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n addEventListener(type, stopListening, { once: true, capture: true });\n });\n\n onHidden(stopListening, true);\n\n return stopListening;\n }\n\n return;\n};\n","import { getFunctionName, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\n\ntype InstrumentHandlerTypePerformanceObserver = 'longtask' | 'event' | 'navigation' | 'paint' | 'resource';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n readonly duration: number;\n readonly entryType: string;\n readonly name: string;\n readonly startTime: number;\n toJSON(): Record<string, unknown>;\n}\n\ninterface Metric {\n /**\n * The name of the metric (in acronym form).\n */\n name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n /**\n * The current value of the metric.\n */\n value: number;\n\n /**\n * The rating as to whether the metric value is within the \"good\",\n * \"needs improvement\", or \"poor\" thresholds of the metric.\n */\n rating: 'good' | 'needs-improvement' | 'poor';\n\n /**\n * The delta between the current value and the last-reported value.\n * On the first report, `delta` and `value` will always be the same.\n */\n delta: number;\n\n /**\n * A unique ID representing this particular metric instance. This ID can\n * be used by an analytics tool to dedupe multiple values sent for the same\n * metric instance, or to group multiple deltas together and calculate a\n * total. It can also be used to differentiate multiple different metric\n * instances sent from the same page, which can happen if the page is\n * restored from the back/forward cache (in that case new metrics object\n * get created).\n */\n id: string;\n\n /**\n * Any performance entries relevant to the metric value calculation.\n * The array may also be empty if the metric value was not based on any\n * entries (e.g. a CLS value of 0 given no layout shifts).\n */\n entries: PerformanceEntry[];\n\n /**\n * The type of navigation\n *\n * Navigation Timing API (or `undefined` if the browser doesn't\n * support that API). For pages that are restored from the bfcache, this\n * value will be 'back-forward-cache'.\n */\n navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addClsInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addLcpInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\nexport function addPerformanceInstrumentationHandler(\n type: 'event',\n callback: (data: { entries: (PerformanceEntry & { target?: unknown | null })[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n type: InstrumentHandlerTypePerformanceObserver,\n callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n type: InstrumentHandlerTypePerformanceObserver,\n callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls(): void {\n onCLS(metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n });\n}\n\nfunction instrumentFid(): void {\n onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp(): void {\n onLCP(metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n });\n}\n\nfunction addMetricObserver(\n type: InstrumentHandlerTypeMetric,\n callback: InstrumentHandlerCallback,\n instrumentFn: () => void,\n previousValue: Metric | undefined,\n): CleanupHandlerCallback {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n const options: PerformanceObserverInit = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(type: InstrumentHandlerType, callback: InstrumentHandlerCallback): CleanupHandlerCallback {\n return () => {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n","import type { Transaction } from '@sentry/core';\nimport type { Span, SpanContext } from '@sentry/types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n transaction.startTimestamp = startTimestamp;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return transaction.startChild({\n startTimestamp,\n ...ctx,\n });\n}\n","/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport type { Measurements, SpanContext } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../common/debug-build';\nimport {\n addClsInstrumentationHandler,\n addFidInstrumentationHandler,\n addLcpInstrumentationHandler,\n addPerformanceInstrumentationHandler,\n} from '../instrument';\nimport { WINDOW } from '../types';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport type { NavigatorDeviceMemory, NavigatorNetworkInformation } from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time: number): number {\n return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI(): Performance | undefined {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCallback = _trackFID();\n const clsCallback = _trackCLS();\n const lcpCallback = _trackLCP();\n\n return (): void => {\n fidCallback();\n clsCallback();\n lcpCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n for (const entry of entries) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction() as IdleTransaction | undefined;\n if (!transaction) {\n return;\n }\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n // eslint-disable-next-line deprecation/deprecation\n transaction.startChild({\n description: 'Main UI thread blocked',\n op: 'ui.long-task',\n origin: 'auto.ui.browser.metrics',\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n });\n }\n });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n for (const entry of entries) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction() as IdleTransaction | undefined;\n if (!transaction) {\n return;\n }\n\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const span: SpanContext = {\n description: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n origin: 'auto.ui.browser.metrics',\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n span.attributes = { 'ui.component_name': componentName };\n }\n\n // eslint-disable-next-line deprecation/deprecation\n transaction.startChild(span);\n }\n }\n });\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry as LayoutShift;\n });\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry as LargestContentfulPaint;\n });\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n const startTime = msToSec(entry.startTime);\n DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(transaction: Transaction): void {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n let responseStartTimestamp: number | undefined;\n let requestStartTimestamp: number | undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n performanceEntries.slice(_performanceCursor).forEach((entry: Record<string, any>) => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(entry.duration);\n\n if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(transaction, entry, timeOrigin);\n responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);\n requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n const resourceName = (entry.name as string).replace(WINDOW.location.origin, '');\n _addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n break;\n }\n default:\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(transaction);\n\n // Measurements are only available for pageload transactions\n if (transaction.op === 'pageload') {\n // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n // start of the response in milliseconds\n if (typeof responseStartTimestamp === 'number') {\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n _measurements['ttfb'] = {\n value: (responseStartTimestamp - transaction.startTimestamp) * 1000,\n unit: 'millisecond',\n };\n\n if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n // Capture the time spent making the request and receiving the first byte of the response.\n // This is the time between the start of the request and the start of the response in milliseconds.\n _measurements['ttfb.requestTime'] = {\n value: (responseStartTimestamp - requestStartTimestamp) * 1000,\n unit: 'millisecond',\n };\n }\n }\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n if (!_measurements[name] || timeOrigin >= transaction.startTimestamp) {\n return;\n }\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n // to be adjusted to be relative to transaction.startTimestamp.\n const oldValue = _measurements[name].value;\n const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n // normalizedValue should be in milliseconds\n const normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n const delta = normalizedValue - oldValue;\n\n DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n _measurements[name].value = normalizedValue;\n });\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n _startChild(transaction, {\n description: 'first input delay',\n endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n op: 'ui.action',\n origin: 'auto.ui.browser.metrics',\n startTimestamp: fidMark.value,\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n if (!('fcp' in _measurements)) {\n delete _measurements.cls;\n }\n\n Object.keys(_measurements).forEach(measurementName => {\n transaction.setMeasurement(\n measurementName,\n _measurements[measurementName].value,\n _measurements[measurementName].unit,\n );\n });\n\n _tagMetricInfo(transaction);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n transaction: Transaction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry: Record<string, any>,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): number {\n const measureStartTimestamp = timeOrigin + startTime;\n const measureEndTimestamp = measureStartTimestamp + duration;\n\n _startChild(transaction, {\n description: entry.name as string,\n endTimestamp: measureEndTimestamp,\n op: entry.entryType as string,\n origin: 'auto.resource.browser.metrics',\n startTimestamp: measureStartTimestamp,\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n transaction: Transaction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry: Record<string, any>,\n event: string,\n timeOrigin: number,\n description?: string,\n eventEnd?: string,\n): void {\n const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n const start = entry[`${event}Start`] as number | undefined;\n if (!start || !end) {\n return;\n }\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: description || event,\n startTimestamp: timeOrigin + msToSec(start),\n endTimestamp: timeOrigin + msToSec(end),\n });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: 'request',\n startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n });\n\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: 'response',\n startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n });\n}\n\nexport interface ResourceEntry extends Record<string, unknown> {\n initiatorType?: string;\n transferSize?: number;\n encodedBodySize?: number;\n decodedBodySize?: number;\n renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n transaction: Transaction,\n entry: ResourceEntry,\n resourceName: string,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): void {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data: Record<string, any> = {};\n setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n if ('renderBlockingStatus' in entry) {\n data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n }\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n _startChild(transaction, {\n description: resourceName,\n endTimestamp,\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n origin: 'auto.resource.browser.metrics',\n startTimestamp,\n data,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction: Transaction): void {\n const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction: Transaction): void {\n if (_lcpEntry) {\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n _clsEntry.sources.forEach((source, index) =>\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n data: Record<string, unknown>,\n entry: ResourceEntry,\n key: keyof Pick<ResourceEntry, 'transferSize' | 'encodedBodySize' | 'decodedBodySize'>,\n dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n data[dataKey] = entryVal;\n }\n}\n","/* eslint-disable max-lines */\nimport {\n getActiveSpan,\n getClient,\n getCurrentScope,\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n hasTracingEnabled,\n spanToJSON,\n spanToTraceHeader,\n} from '@sentry/core';\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/types';\nimport {\n BAGGAGE_HEADER_NAME,\n SENTRY_XHR_DATA_KEY,\n addFetchInstrumentationHandler,\n addXhrInstrumentationHandler,\n browserPerformanceTimeOrigin,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport { instrumentFetchRequest } from '../common/fetch';\nimport { addPerformanceInstrumentationHandler } from './instrument';\n\nexport const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n /**\n * @deprecated Will be removed in v8.\n * Use `shouldCreateSpanForRequest` to control span creation and `tracePropagationTargets` to control\n * trace header attachment.\n */\n tracingOrigins: Array<string | RegExp>;\n\n /**\n * List of strings and/or regexes used to determine which outgoing requests will have `sentry-trace` and `baggage`\n * headers attached.\n *\n * @deprecated Use the top-level `tracePropagationTargets` option in `Sentry.init` instead.\n * This option will be removed in v8.\n *\n * Default: ['localhost', /^\\//] @see {DEFAULT_TRACE_PROPAGATION_TARGETS}\n */\n tracePropagationTargets: Array<string | RegExp>;\n\n /**\n * Flag to disable patching all together for fetch requests.\n *\n * Default: true\n */\n traceFetch: boolean;\n\n /**\n * Flag to disable patching all together for xhr requests.\n *\n * Default: true\n */\n traceXHR: boolean;\n\n /**\n * If true, Sentry will capture http timings and add them to the corresponding http spans.\n *\n * Default: true\n */\n enableHTTPTimings: boolean;\n\n /**\n * This function will be called before creating a span for a request with the given url.\n * Return false if you don't want a span for the given url.\n *\n * Default: (url: string) => true\n */\n shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n // TODO (v8): Remove this property\n tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests */\nexport function instrumentOutgoingRequests(_options?: Partial<RequestInstrumentationOptions>): void {\n const {\n traceFetch,\n traceXHR,\n // eslint-disable-next-line deprecation/deprecation\n tracePropagationTargets,\n // eslint-disable-next-line deprecation/deprecation\n tracingOrigins,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n // TODO(v8) Remove tracingOrigins here\n // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n // and we don't want to break the API. We can remove it in v8.\n const shouldAttachHeadersWithTargets = (url: string): boolean =>\n shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n const spans: Record<string, Span> = {};\n\n if (traceFetch) {\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/');\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1];\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData: [string, string | number][] = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nexport function shouldAttachHeaders(url: string, tracePropagationTargets: (string | RegExp)[] | undefined): boolean {\n return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nexport function xhrCallback(\n handlerData: HandlerDataXhr,\n shouldCreateSpan: (url: string) => boolean,\n shouldAttachHeaders: (url: string) => boolean,\n spans: Record<string, Span>,\n): Span | undefined {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!hasTracingEnabled() || !xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n span.setHttpStatus(sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const parentSpan = getActiveSpan();\n\n const span =\n shouldCreateSpanResult && parentSpan\n ? // eslint-disable-next-line deprecation/deprecation\n parentSpan.startChild({\n data: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n url: sentryXhrData.url,\n },\n description: `${sentryXhrData.method} ${sentryXhrData.url}`,\n op: 'http.client',\n origin: 'auto.http.browser',\n })\n : undefined;\n\n if (span) {\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n }\n\n if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) {\n if (span) {\n const transaction = span && span.transaction;\n const dynamicSamplingContext = transaction && getDynamicSamplingContextFromSpan(transaction);\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n setHeaderOnXhr(xhr, spanToTraceHeader(span), sentryBaggageHeader);\n } else {\n const client = getClient();\n const { traceId, sampled, dsc } = scope.getPropagationContext();\n const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);\n const dynamicSamplingContext =\n dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n }\n }\n\n return span;\n}\n\nfunction setHeaderOnXhr(\n xhr: SentryWrappedXMLHttpRequest,\n sentryTraceHeader: string,\n sentryBaggageHeader: string | undefined,\n): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n","import {\n getActiveSpan,\n getClient,\n getCurrentScope,\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n hasTracingEnabled,\n spanToTraceHeader,\n} from '@sentry/core';\nimport type { Client, HandlerDataFetch, Scope, Span, SpanOrigin } from '@sentry/types';\nimport {\n BAGGAGE_HEADER_NAME,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n isInstanceOf,\n} from '@sentry/utils';\n\ntype PolymorphicRequestHeaders =\n | Record<string, string | undefined>\n | Array<[string, string]>\n // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n append: (key: string, value: string) => void;\n get: (key: string) => string | null | undefined;\n };\n\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n handlerData: HandlerDataFetch,\n shouldCreateSpan: (url: string) => boolean,\n shouldAttachHeaders: (url: string) => boolean,\n spans: Record<string, Span>,\n spanOrigin: SpanOrigin = 'auto.http.browser',\n): Span | undefined {\n if (!hasTracingEnabled() || !handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n if (handlerData.response) {\n span.setHttpStatus(handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus('internal_error');\n }\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const client = getClient();\n const parentSpan = getActiveSpan();\n\n const { method, url } = handlerData.fetchData;\n\n const span =\n shouldCreateSpanResult && parentSpan\n ? // eslint-disable-next-line deprecation/deprecation\n parentSpan.startChild({\n data: {\n url,\n type: 'fetch',\n 'http.method': method,\n },\n description: `${method} ${url}`,\n op: 'http.client',\n origin: spanOrigin,\n })\n : undefined;\n\n if (span) {\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n }\n\n if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n const request: string | Request = handlerData.args[0];\n\n // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n handlerData.args[1] = handlerData.args[1] || {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const options: { [key: string]: any } = handlerData.args[1];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n client: Client,\n scope: Scope,\n options: {\n headers?:\n | {\n [key: string]: string[] | string | undefined;\n }\n | PolymorphicRequestHeaders;\n },\n requestSpan?: Span,\n): PolymorphicRequestHeaders | undefined {\n // eslint-disable-next-line deprecation/deprecation\n const span = requestSpan || scope.getSpan();\n\n const transaction = span && span.transaction;\n\n const { traceId, sampled, dsc } = scope.getPropagationContext();\n\n const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, undefined, sampled);\n const dynamicSamplingContext = transaction\n ? getDynamicSamplingContextFromSpan(transaction)\n : dsc\n ? dsc\n : getDynamicSamplingContextFromClient(traceId, client, scope);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n const headers =\n typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : options.headers;\n\n if (!headers) {\n return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n const newHeaders = new Headers(headers as Headers);\n\n newHeaders.append('sentry-trace', sentryTraceHeader);\n\n if (sentryBaggageHeader) {\n // If the same header is appended multiple times the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n\n return newHeaders as PolymorphicRequestHeaders;\n } else if (Array.isArray(headers)) {\n const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n if (sentryBaggageHeader) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n }\n\n return newHeaders as PolymorphicRequestHeaders;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n const newBaggageHeaders: string[] = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders.push(...existingBaggageHeader);\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(existingBaggageHeader);\n }\n\n if (sentryBaggageHeader) {\n newBaggageHeaders.push(sentryBaggageHeader);\n }\n\n return {\n ...(headers as Exclude<typeof headers, Headers>),\n 'sentry-trace': sentryTraceHeader,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n","/* eslint-disable max-lines */\nimport type { Hub, IdleTransaction } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n TRACING_DEFAULTS,\n addTracingExtensions,\n getActiveTransaction,\n spanIsSampled,\n startIdleTransaction,\n} from '@sentry/core';\nimport type { EventProcessor, Integration, Transaction, TransactionContext, TransactionSource } from '@sentry/types';\nimport { getDomElement, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport {\n addPerformanceEntries,\n startTrackingInteractions,\n startTrackingLongTasks,\n startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { instrumentRoutingWithDefaults } from './router';\nimport { WINDOW } from './types';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n /**\n * The time to wait in ms until the transaction will be finished during an idle state. An idle state is defined\n * by a moment where there are no in-progress spans.\n *\n * The transaction will use the end timestamp of the last finished span as the endtime for the transaction.\n * If there are still active spans when this the `idleTimeout` is set, the `idleTimeout` will get reset.\n * Time is in ms.\n *\n * Default: 1000\n */\n idleTimeout: number;\n\n /**\n * The max duration for a transaction. If a transaction duration hits the `finalTimeout` value, it\n * will be finished.\n * Time is in ms.\n *\n * Default: 30000\n */\n finalTimeout: number;\n\n /**\n * The heartbeat interval. If no new spans are started or open spans are finished within 3 heartbeats,\n * the transaction will be finished.\n * Time is in ms.\n *\n * Default: 5000\n */\n heartbeatInterval: number;\n\n /**\n * Flag to enable/disable creation of `navigation` transaction on history changes.\n *\n * Default: true\n */\n startTransactionOnLocationChange: boolean;\n\n /**\n * Flag to enable/disable creation of `pageload` transaction on first pageload.\n *\n * Default: true\n */\n startTransactionOnPageLoad: boolean;\n\n /**\n * Flag Transactions where tabs moved to background with \"cancelled\". Browser background tab timing is\n * not suited towards doing precise measurements of operations. By default, we recommend that this option\n * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n *\n * Default: true\n */\n markBackgroundTransactions: boolean;\n\n /**\n * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n *\n * Default: true\n */\n enableLongTask: boolean;\n\n /**\n * _metricOptions allows the user to send options to change how metrics are collected.\n *\n * _metricOptions is currently experimental.\n *\n * Default: undefined\n */\n _metricOptions?: Partial<{\n /**\n * @deprecated This property no longer has any effect and will be removed in v8.\n */\n _reportAllChanges: boolean;\n }>;\n\n /**\n * _experiments allows the user to send options to define how this integration works.\n * Note that the `enableLongTask` options is deprecated in favor of the option at the top level, and will be removed in v8.\n *\n * TODO (v8): Remove enableLongTask\n *\n * Default: undefined\n */\n _experiments: Partial<{\n enableLongTask: boolean;\n enableInteractions: boolean;\n onStartRouteTransaction: (t: Transaction | undefined, ctx: TransactionContext, getCurrentHub: () => Hub) => void;\n }>;\n\n /**\n * beforeNavigate is called before a pageload/navigation transaction is created and allows users to modify transaction\n * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n *\n * Note: For legacy reasons, transactions can also be dropped by returning `undefined`.\n *\n * @param context: The context data which will be passed to `startTransaction` by default\n *\n * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n */\n beforeNavigate?(this: void, context: TransactionContext): TransactionContext | undefined;\n\n /**\n * Instrumentation that creates routing change transactions. By default creates\n * pageload and navigation transactions.\n */\n routingInstrumentation<T extends Transaction>(\n this: void,\n customStartTransaction: (context: TransactionContext) => T | undefined,\n startTransactionOnPageLoad?: boolean,\n startTransactionOnLocationChange?: boolean,\n ): void;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n ...TRACING_DEFAULTS,\n markBackgroundTransactions: true,\n routingInstrumentation: instrumentRoutingWithDefaults,\n startTransactionOnLocationChange: true,\n startTransactionOnPageLoad: true,\n enableLongTask: true,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nexport class BrowserTracing implements Integration {\n // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n // integrations.\n\n /** Browser Tracing integration options */\n public options: BrowserTracingOptions;\n\n /**\n * @inheritDoc\n */\n public name: string;\n\n private _getCurrentHub?: () => Hub;\n\n private _latestRouteName?: string;\n private _latestRouteSource?: TransactionSource;\n\n private _collectWebVitals: () => void;\n\n private _hasSetTracePropagationTargets: boolean;\n\n public constructor(_options?: Partial<BrowserTracingOptions>) {\n this.name = BROWSER_TRACING_INTEGRATION_ID;\n this._hasSetTracePropagationTargets = false;\n\n addTracingExtensions();\n\n if (DEBUG_BUILD) {\n this._hasSetTracePropagationTargets = !!(\n _options &&\n // eslint-disable-next-line deprecation/deprecation\n (_options.tracePropagationTargets || _options.tracingOrigins)\n );\n }\n\n this.options = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n // Special case: enableLongTask can be set in _experiments\n // TODO (v8): Remove this in v8\n if (this.options._experiments.enableLongTask !== undefined) {\n this.options.enableLongTask = this.options._experiments.enableLongTask;\n }\n\n // TODO (v8): remove this block after tracingOrigins is removed\n // Set tracePropagationTargets to tracingOrigins if specified by the user\n // In case both are specified, tracePropagationTargets takes precedence\n // eslint-disable-next-line deprecation/deprecation\n if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n // eslint-disable-next-line deprecation/deprecation\n this.options.tracePropagationTargets = _options.tracingOrigins;\n }\n\n this._collectWebVitals = startTrackingWebVitals();\n if (this.options.enableLongTask) {\n startTrackingLongTasks();\n }\n if (this.options._experiments.enableInteractions) {\n startTrackingInteractions();\n }\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n this._getCurrentHub = getCurrentHub;\n const hub = getCurrentHub();\n const client = hub.getClient();\n const clientOptions = client && client.getOptions();\n\n const {\n routingInstrumentation: instrumentRouting,\n startTransactionOnLocationChange,\n startTransactionOnPageLoad,\n markBackgroundTransactions,\n traceFetch,\n traceXHR,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n _experiments,\n } = this.options;\n\n const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n // There are three ways to configure tracePropagationTargets:\n // 1. via top level client option `tracePropagationTargets`\n // 2. via BrowserTracing option `tracePropagationTargets`\n // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n //\n // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n // This is done as it minimizes bundle size (we don't have to have undefined checks).\n //\n // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n // eslint-disable-next-line deprecation/deprecation\n const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n if (DEBUG_BUILD && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n logger.warn(\n '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n );\n }\n\n instrumentRouting(\n (context: TransactionContext) => {\n const transaction = this._createRouteTransaction(context);\n\n this.options._experiments.onStartRouteTransaction &&\n this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n return transaction;\n },\n startTransactionOnPageLoad,\n startTransactionOnLocationChange,\n );\n\n if (markBackgroundTransactions) {\n registerBackgroundTabDetection();\n }\n\n if (_experiments.enableInteractions) {\n this._registerInteractionListener();\n }\n\n instrumentOutgoingRequests({\n traceFetch,\n traceXHR,\n tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n }\n\n /** Create routing idle transaction. */\n private _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n if (!this._getCurrentHub) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n const hub = this._getCurrentHub();\n\n const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n const isPageloadTransaction = context.op === 'pageload';\n\n const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n const baggage = isPageloadTransaction ? getMetaContent('baggage') : '';\n const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n sentryTrace,\n baggage,\n );\n\n const expandedContext: TransactionContext = {\n ...context,\n ...traceparentData,\n metadata: {\n // eslint-disable-next-line deprecation/deprecation\n ...context.metadata,\n dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n },\n trimEnd: true,\n };\n\n const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n // from being sent to Sentry).\n const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n // If `beforeNavigate` set a custom name, record that fact\n // eslint-disable-next-line deprecation/deprecation\n finalContext.metadata =\n finalContext.name !== expandedContext.name\n ? // eslint-disable-next-line deprecation/deprecation\n { ...finalContext.metadata, source: 'custom' }\n : // eslint-disable-next-line deprecation/deprecation\n finalContext.metadata;\n\n this._latestRouteName = finalContext.name;\n\n // eslint-disable-next-line deprecation/deprecation\n const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n // eslint-disable-next-line deprecation/deprecation\n const sourceFromMetadata = finalContext.metadata && finalContext.metadata.source;\n\n this._latestRouteSource = sourceFromData || sourceFromMetadata;\n\n // eslint-disable-next-line deprecation/deprecation\n if (finalContext.sampled === false) {\n DEBUG_BUILD && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n }\n\n DEBUG_BUILD && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n const { location } = WINDOW;\n\n const idleTransaction = startIdleTransaction(\n hub,\n finalContext,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n heartbeatInterval,\n );\n\n const scope = hub.getScope();\n\n // If it's a pageload and there is a meta tag set\n // use the traceparentData as the propagation context\n if (isPageloadTransaction && traceparentData) {\n scope.setPropagationContext(propagationContext);\n } else {\n // Navigation transactions should set a new propagation context based on the\n // created idle transaction.\n scope.setPropagationContext({\n traceId: idleTransaction.spanContext().traceId,\n spanId: idleTransaction.spanContext().spanId,\n parentSpanId: idleTransaction.parentSpanId,\n sampled: spanIsSampled(idleTransaction),\n });\n }\n\n idleTransaction.registerBeforeFinishCallback(transaction => {\n this._collectWebVitals();\n addPerformanceEntries(transaction);\n });\n\n return idleTransaction as Transaction;\n }\n\n /** Start listener for interaction transactions */\n private _registerInteractionListener(): void {\n let inflightInteractionTransaction: IdleTransaction | undefined;\n const registerInteractionTransaction = (): void => {\n const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n const op = 'ui.action.click';\n\n // eslint-disable-next-line deprecation/deprecation\n const currentTransaction = getActiveTransaction();\n if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n );\n return undefined;\n }\n\n if (inflightInteractionTransaction) {\n inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n inflightInteractionTransaction.end();\n inflightInteractionTransaction = undefined;\n }\n\n if (!this._getCurrentHub) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n if (!this._latestRouteName) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n const hub = this._getCurrentHub();\n const { location } = WINDOW;\n\n const context: TransactionContext = {\n name: this._latestRouteName,\n op,\n trimEnd: true,\n data: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRouteSource || 'url',\n },\n };\n\n inflightInteractionTransaction = startIdleTransaction(\n hub,\n context,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n heartbeatInterval,\n );\n };\n\n ['click'].forEach(type => {\n addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n });\n }\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n","import type { Transaction, TransactionContext } from '@sentry/types';\nimport { addHistoryInstrumentationHandler, browserPerformanceTimeOrigin, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults<T extends Transaction>(\n customStartTransaction: (context: TransactionContext) => T | undefined,\n startTransactionOnPageLoad: boolean = true,\n startTransactionOnLocationChange: boolean = true,\n): void {\n if (!WINDOW || !WINDOW.location) {\n DEBUG_BUILD && logger.warn('Could not initialize routing instrumentation due to invalid location');\n return;\n }\n\n let startingUrl: string | undefined = WINDOW.location.href;\n\n let activeTransaction: T | undefined;\n if (startTransactionOnPageLoad) {\n activeTransaction = customStartTransaction({\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n op: 'pageload',\n origin: 'auto.pageload.browser',\n metadata: { source: 'url' },\n });\n }\n\n if (startTransactionOnLocationChange) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n if (activeTransaction) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeTransaction.end();\n }\n activeTransaction = customStartTransaction({\n name: WINDOW.location.pathname,\n op: 'navigation',\n origin: 'auto.navigation.browser',\n metadata: { source: 'url' },\n });\n }\n });\n }\n}\n","import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n // eslint-disable-next-line deprecation/deprecation\n const activeTransaction = getActiveTransaction() as IdleTransaction;\n if (WINDOW.document.hidden && activeTransaction) {\n const statusType: SpanStatusType = 'cancelled';\n\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${activeTransaction.op}`,\n );\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!activeTransaction.status) {\n activeTransaction.setStatus(statusType);\n }\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n activeTransaction.setTag('visibilitychange', 'document.hidden');\n activeTransaction.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n","export * from './exports';\n\nimport { Integrations as CoreIntegrations } from '@sentry/core';\n\nimport { WINDOW } from './helpers';\nimport * as BrowserIntegrations from './integrations';\n\nlet windowIntegrations = {};\n\n// This block is needed to add compatibility with the integrations packages when used with a CDN\nif (WINDOW.Sentry && WINDOW.Sentry.Integrations) {\n windowIntegrations = WINDOW.Sentry.Integrations;\n}\n\nconst INTEGRATIONS = {\n ...windowIntegrations,\n ...CoreIntegrations,\n ...BrowserIntegrations,\n};\n\nexport { INTEGRATIONS as Integrations };\n\nexport { Replay } from '@sentry/replay';\nexport type {\n ReplayEventType,\n ReplayEventWithTime,\n ReplayBreadcrumbFrame,\n ReplayBreadcrumbFrameEvent,\n ReplayOptionFrameEvent,\n ReplayFrame,\n ReplayFrameEvent,\n ReplaySpanFrame,\n ReplaySpanFrameEvent,\n} from '@sentry/replay';\n\nexport { Feedback } from '@sentry-internal/feedback';\n\nexport {\n BrowserTracing,\n defaultRequestInstrumentationOptions,\n instrumentOutgoingRequests,\n} from '@sentry-internal/tracing';\nexport type { RequestInstrumentationOptions } from '@sentry-internal/tracing';\nexport {\n addTracingExtensions,\n setMeasurement,\n // eslint-disable-next-line deprecation/deprecation\n extractTraceparentData,\n // eslint-disable-next-line deprecation/deprecation\n getActiveTransaction,\n spanStatusfromHttpCode,\n // eslint-disable-next-line deprecation/deprecation\n trace,\n makeMultiplexedTransport,\n ModuleMetadata,\n} from '@sentry/core';\nexport type { SpanStatusType } from '@sentry/core';\nexport type { Span } from '@sentry/types';\nexport { makeBrowserOfflineTransport } from './transports/offline';\nexport { onProfilingStartRouteTransaction } from './profiling/hubextensions';\nexport { BrowserProfilingIntegration } from './profiling/integration';\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataDom } from '@sentry/types';\n\nimport { uuid4 } from '../misc';\nimport { addNonEnumerableProperty, fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\ntype AddEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n __sentry_instrumentation_handlers__?: {\n [key in 'click' | 'keypress']?: {\n handler?: Function;\n /** The number of custom listeners attached to this element */\n refCount: number;\n };\n };\n};\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nexport function instrumentDOM(): void {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): AddEventListener {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = el.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n handler: (data: HandlerDataDom) => void,\n globalListener: boolean = false,\n): (event: Event) => void {\n return (event: Event & { _sentryCaptured?: true }): void => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData: HandlerDataDom = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n try {\n return event.target as SentryWrappedTarget | null;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n","type PartialURL = {\n host?: string;\n path?: string;\n protocol?: string;\n relative?: string;\n search?: string;\n hash?: string;\n};\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n if (!url) {\n return {};\n }\n\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n const query = match[6] || '';\n const fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n search: query,\n hash: fragment,\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n // eslint-disable-next-line no-useless-escape\n return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n // split at '/' or at '\\/' to split regex urls correctly\n return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n const { protocol, host, path } = url;\n\n const filteredHost =\n (host &&\n host\n // Always filter out authority\n .replace(/^.*@/, '[filtered]:[filtered]@')\n // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n // TODO: Use new URL global if it exists\n .replace(/(:80)$/, '')\n .replace(/(:443)$/, '')) ||\n '';\n\n return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","/* eslint-disable max-lines */\nimport { addBreadcrumb, convertIntegrationFnToClass, getClient } from '@sentry/core';\nimport type {\n Client,\n Event as SentryEvent,\n HandlerDataConsole,\n HandlerDataDom,\n HandlerDataFetch,\n HandlerDataHistory,\n HandlerDataXhr,\n IntegrationFn,\n} from '@sentry/types';\nimport type {\n Breadcrumb,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n XhrBreadcrumbData,\n XhrBreadcrumbHint,\n} from '@sentry/types/build/types/breadcrumb';\nimport {\n SENTRY_XHR_DATA_KEY,\n addClickKeypressInstrumentationHandler,\n addConsoleInstrumentationHandler,\n addFetchInstrumentationHandler,\n addHistoryInstrumentationHandler,\n addXhrInstrumentationHandler,\n getComponentName,\n getEventDescription,\n htmlTreeAsString,\n logger,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n console: boolean;\n dom:\n | boolean\n | {\n serializeAttribute?: string | string[];\n maxStringLength?: number;\n };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst breadcrumbsIntegration: IntegrationFn = (options: Partial<BreadcrumbsOptions> = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry && client.on) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n};\n\n/**\n * Default Breadcrumbs instrumentations\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Breadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n return function addSentryBreadcrumb(event: SentryEvent): void {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client: Client,\n dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event as Event | Node;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb: Breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data: XhrBreadcrumbData = {\n method,\n url,\n status_code,\n };\n\n const hint: XhrBreadcrumbHint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data: FetchBreadcrumbData = handlerData.fetchData;\n const hint: FetchBreadcrumbHint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response as Response | undefined;\n const data: FetchBreadcrumbData = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n if (getClient() !== client) {\n return;\n }\n\n let from: string | undefined = handlerData.from;\n let to: string | undefined = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n return !!event && !!(event as Record<string, unknown>).target;\n}\n","import { convertIntegrationFnToClass } from '@sentry/core';\nimport type { Event, Exception, IntegrationFn, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst dedupeIntegration: IntegrationFn = () => {\n let previousEvent: Event | undefined;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(currentEvent) {\n // We want to ignore any non-error type events, e.g. transactions or replays\n // These should never be deduped, and also not be compared against as _previousEvent.\n if (currentEvent.type) {\n return currentEvent;\n }\n\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n return (previousEvent = currentEvent);\n },\n };\n};\n\n/** Deduplication filter */\n// eslint-disable-next-line deprecation/deprecation\nexport const Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration);\n\nfunction _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n let currentFrames = _getFramesFromEvent(currentEvent);\n let previousFrames = _getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames as StackFrame[];\n previousFrames = previousFrames as StackFrame[];\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n const frameA = previousFrames[i];\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint as string[];\n previousFingerprint = previousFingerprint as string[];\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n const exception = event.exception;\n\n if (exception) {\n try {\n // @ts-expect-error Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { captureEvent, convertIntegrationFnToClass, getClient } from '@sentry/core';\nimport type { Client, Event, IntegrationFn, Primitive, StackParser } from '@sentry/types';\nimport {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n getLocationHref,\n isErrorEvent,\n isPrimitive,\n isString,\n logger,\n} from '@sentry/utils';\n\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst globalHandlersIntegrations: IntegrationFn = (options: Partial<GlobalHandlersIntegrations> = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog('onerror');\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog('onunhandledrejection');\n }\n },\n };\n};\n\n/** Global handlers */\n// eslint-disable-next-line deprecation/deprecation\nexport const GlobalHandlers = convertIntegrationFnToClass(INTEGRATION_NAME, globalHandlersIntegrations);\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n addGlobalErrorInstrumentationHandler(data => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const { msg, url, line, column, error } = data;\n\n const event =\n error === undefined && isString(msg)\n ? _eventFromIncompleteOnError(msg, url, line, column)\n : _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onerror',\n },\n });\n });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e as unknown);\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onunhandledrejection',\n },\n });\n });\n}\n\nfunction _getUnhandledRejectionError(error: unknown): unknown {\n if (isPrimitive(error)) {\n return error;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const e = error as any;\n\n // dig the object of the rejection out of known event types\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in e) {\n return e.reason;\n }\n\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in e && 'reason' in e.detail) {\n return e.detail.reason;\n }\n } catch {} // eslint-disable-line no-empty\n\n return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {\n const ERROR_TYPES_RE =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n // If 'message' is ErrorEvent, get real message from inside\n let message = isErrorEvent(msg) ? msg.message : msg;\n let name = 'Error';\n\n const groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n\n const event = {\n exception: {\n values: [\n {\n type: name,\n value: message,\n },\n ],\n },\n };\n\n return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: '?',\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n const client = getClient<BrowserClient>();\n const options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n","import { convertIntegrationFnToClass } from '@sentry/core';\nimport type { IntegrationFn } from '@sentry/types';\n\nimport { WINDOW } from '../helpers';\n\nconst INTEGRATION_NAME = 'HttpContext';\n\nconst httpContextIntegration: IntegrationFn = () => {\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event) {\n // if none of the information we want exists, don't bother\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n const { referrer } = WINDOW.document || {};\n const { userAgent } = WINDOW.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...event.request, ...(url && { url }), headers };\n\n event.request = request;\n },\n };\n};\n\n/** HttpContext integration collects information about HTTP request headers */\n// eslint-disable-next-line deprecation/deprecation\nexport const HttpContext = convertIntegrationFnToClass(INTEGRATION_NAME, httpContextIntegration);\n","import { convertIntegrationFnToClass } from '@sentry/core';\nimport type { IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder';\n\ninterface LinkedErrorsOptions {\n key?: string;\n limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst linkedErrorsIntegration: IntegrationFn = (options: LinkedErrorsOptions = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n};\n\n/** Aggregrate linked errors in an event. */\n// eslint-disable-next-line deprecation/deprecation\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration);\n","import { convertIntegrationFnToClass } from '@sentry/core';\nimport type { IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'BroadcastChannel',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'SharedWorker',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'TryCatch';\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\nconst tryCatchIntegration: IntegrationFn = (options: Partial<TryCatchOptions> = {}) => {\n const _options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n // TODO: This currently only works for the first client this is setup\n // We may want to adjust this to check for client etc.\n setupOnce() {\n if (_options.setTimeout) {\n fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n }\n\n if (_options.setInterval) {\n fill(WINDOW, 'setInterval', _wrapTimeFunction);\n }\n\n if (_options.requestAnimationFrame) {\n fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = _options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n },\n };\n};\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\n// eslint-disable-next-line deprecation/deprecation\nexport const TryCatch = convertIntegrationFnToClass(INTEGRATION_NAME, tryCatchIntegration);\n\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: false,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function (original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalObject = WINDOW as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = globalObject[target] && globalObject[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original: VoidFunction,): (\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n // ESlint disable explanation:\n // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n // introduce a bug here, because bind returns a new function that doesn't have our\n // flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n // Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn as any as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn as unknown as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, getGlobalSingleton, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nexport function getGlobalEventProcessors(): EventProcessor[] {\n return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n // eslint-disable-next-line deprecation/deprecation\n getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n processors: EventProcessor[],\n event: Event | null,\n hint: EventHint,\n index: number = 0,\n): PromiseLike<Event | null> {\n return new SyncPromise<Event | null>((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) as Event | null;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n","import type {\n Breadcrumb,\n BreadcrumbHint,\n CaptureContext,\n CheckIn,\n Client,\n CustomSamplingContext,\n Event,\n EventHint,\n Extra,\n Extras,\n FinishedCheckIn,\n MonitorConfig,\n Primitive,\n Scope as ScopeInterface,\n Session,\n SessionContext,\n Severity,\n SeverityLevel,\n TransactionContext,\n User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Hub } from './hub';\nimport { getCurrentHub, getIsolationScope } from './hub';\nimport type { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optinal additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exception: any,\n hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n captureContext?: CaptureContext | Severity | SeverityLevel,\n): string {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n *\n * @deprecated Use getCurrentScope() directly.\n */\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): ReturnType<Hub['addBreadcrumb']> {\n getCurrentHub().addBreadcrumb(breadcrumb, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name: string, context: { [key: string]: any } | null): ReturnType<Hub['setContext']> {\n getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): ReturnType<Hub['setExtras']> {\n getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): ReturnType<Hub['setExtra']> {\n getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): ReturnType<Hub['setTags']> {\n getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): ReturnType<Hub['setTag']> {\n getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): ReturnType<Hub['setUser']> {\n getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: ScopeInterface | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n ...rest: [callback: (scope: Scope) => T] | [scope: ScopeInterface | undefined, callback: (scope: Scope) => T]\n): T {\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n if (!scope) {\n return getCurrentHub().withScope(callback);\n }\n\n const hub = getCurrentHub();\n return hub.withScope(() => {\n hub.getStackTop().scope = scope as Scope;\n return callback(scope as Scope);\n });\n }\n\n return getCurrentHub().withScope(rest[0]);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nexport function startTransaction(\n context: TransactionContext,\n customSamplingContext?: CustomSamplingContext,\n): ReturnType<Hub['startTransaction']> {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n monitorSlug: CheckIn['monitorSlug'],\n callback: () => T,\n upsertMonitorConfig?: MonitorConfig,\n): T {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status: FinishedCheckIn['status']): void {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n () => {\n finishCheckIn('error');\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n * @deprecated This function will be removed in the next major version of the Sentry SDK.\n */\nexport function lastEventId(): string | undefined {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n return getCurrentHub().getClient<C>();\n}\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client && client.captureSession) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n","/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n CustomSamplingContext,\n Event,\n EventHint,\n Extra,\n Extras,\n Hub as HubInterface,\n Integration,\n IntegrationClass,\n Primitive,\n Session,\n SessionContext,\n Severity,\n SeverityLevel,\n Transaction,\n TransactionContext,\n User,\n} from '@sentry/types';\nimport {\n GLOBAL_OBJ,\n consoleSandbox,\n dateTimestampInSeconds,\n getGlobalSingleton,\n isThenable,\n logger,\n uuid4,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { SDK_VERSION } from './version';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = parseFloat(SDK_VERSION);\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\nexport interface RunWithAsyncContextOptions {\n /** Whether to reuse an existing async context if one exists. Defaults to false. */\n reuseExisting?: boolean;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Strategy used to track async context.\n */\nexport interface AsyncContextStrategy {\n /**\n * Gets the current async context. Returns undefined if there is no current async context.\n */\n getCurrentHub: () => Hub | undefined;\n /**\n * Runs the supplied callback in its own async context.\n */\n runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T;\n}\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n client?: Client;\n scope: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n __SENTRY__?: {\n hub?: Hub;\n acs?: AsyncContextStrategy;\n /**\n * Extra Hub properties injected by various SDKs\n */\n integrations?: Integration[];\n extensions?: {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n };\n}\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n /** Is a {@link Layer}[] containing the client and scope */\n private readonly _stack: Layer[];\n\n /** Contains the last event id of a captured event. */\n private _lastEventId?: string;\n\n private _isolationScope: Scope;\n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n public constructor(\n client?: Client,\n scope?: Scope,\n isolationScope?: Scope,\n private readonly _version: number = API_VERSION,\n ) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n assignedScope.setClient(client);\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n assignedIsolationScope.setClient(client);\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n this._stack = [{ scope: assignedScope }];\n\n if (client) {\n this.bindClient(client);\n }\n\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * @inheritDoc\n */\n public isOlderThan(version: number): boolean {\n return this._version < version;\n }\n\n /**\n * @inheritDoc\n */\n public bindClient(client?: Client): void {\n const top = this.getStackTop();\n top.client = client;\n top.scope.setClient(client);\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `withScope` instead.\n */\n public pushScope(): Scope {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `withScope` instead.\n */\n public popScope(): boolean {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n */\n public withScope<T>(callback: (scope: Scope) => T): T {\n // eslint-disable-next-line deprecation/deprecation\n const scope = this.pushScope();\n\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n return res;\n },\n e => {\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n throw e;\n },\n );\n }\n\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n return maybePromiseResult;\n }\n\n /**\n * @inheritDoc\n */\n public getClient<C extends Client>(): C | undefined {\n return this.getStackTop().client as C;\n }\n\n /** Returns the scope of the top stack. */\n public getScope(): Scope {\n return this.getStackTop().scope;\n }\n\n /** @inheritdoc */\n public getIsolationScope(): Scope {\n return this._isolationScope;\n }\n\n /** Returns the scope stack for domains or the process. */\n public getStack(): Layer[] {\n return this._stack;\n }\n\n /** Returns the topmost scope layer in the order domain > local > process. */\n public getStackTop(): Layer {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.captureException()` instead.\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error('Sentry syntheticException');\n this.getScope().captureException(exception, {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n });\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.captureMessage()` instead.\n */\n public captureMessage(\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n level?: Severity | SeverityLevel,\n hint?: EventHint,\n ): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error(message);\n this.getScope().captureMessage(message, level, {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n });\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.captureEvent()` instead.\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (!event.type) {\n this._lastEventId = eventId;\n }\n\n this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public lastEventId(): string | undefined {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n const { scope, client } = this.getStackTop();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): void {\n this.getScope().setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): void {\n this.getScope().setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): void {\n this.getScope().setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): void {\n this.getScope().setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): void {\n this.getScope().setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(name: string, context: { [key: string]: any } | null): void {\n this.getScope().setContext(name, context);\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `getScope()` directly.\n */\n public configureScope(callback: (scope: Scope) => void): void {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n public run(callback: (hub: Hub) => void): void {\n const oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n */\n public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n const client = this.getClient();\n if (!client) return null;\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\n public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n const result = this._callExtensionMethod<Transaction>('startTransaction', context, customSamplingContext);\n\n if (DEBUG_BUILD && !result) {\n const client = this.getClient();\n if (!client) {\n logger.warn(\n \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n );\n } else {\n logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n }\n }\n\n return result;\n }\n\n /**\n * @inheritDoc\n */\n public traceHeaders(): { [key: string]: string } {\n return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use top level `captureSession` instead.\n */\n public captureSession(endSession: boolean = false): void {\n // both send the update and pull the session from the scope\n if (endSession) {\n // eslint-disable-next-line deprecation/deprecation\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n * @deprecated Use top level `endSession` instead.\n */\n public endSession(): void {\n const layer = this.getStackTop();\n const scope = layer.scope;\n const session = scope.getSession();\n if (session) {\n closeSession(session);\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n scope.setSession();\n }\n\n /**\n * @inheritDoc\n * @deprecated Use top level `startSession` instead.\n */\n public startSession(context?: SessionContext): Session {\n const { scope, client } = this.getStackTop();\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: scope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n // eslint-disable-next-line deprecation/deprecation\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n\n return session;\n }\n\n /**\n * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n * when Tracing is used.\n *\n * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n * only unnecessarily increased API surface but only wrapped accessing the option.\n */\n public shouldSendDefaultPii(): boolean {\n const client = this.getClient();\n const options = client && client.getOptions();\n return Boolean(options && options.sendDefaultPii);\n }\n\n /**\n * Sends the current Session on the scope\n */\n private _sendSessionUpdate(): void {\n const { scope, client } = this.getStackTop();\n\n const session = scope.getSession();\n if (session && client && client.captureSession) {\n client.captureSession(session);\n }\n }\n\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n private _withClient(callback: (client: Client, scope: Scope) => void): void {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(client, scope);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n const carrier = getMainCarrier();\n const sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub: Hub): Hub {\n const registry = getMainCarrier();\n const oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub(): Hub {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n\n if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n if (hub) {\n return hub;\n }\n }\n\n // Return hub that lives on a global object\n return getGlobalHub(registry);\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nexport function getIsolationScope(): Scope {\n return getCurrentHub().getIsolationScope();\n}\n\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\nexport function ensureHubOnCarrier(carrier: Carrier, parent: Hub = getGlobalHub()): void {\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(carrier) || getHubFromCarrier(carrier).isOlderThan(API_VERSION)) {\n const client = parent.getClient();\n const scope = parent.getScope();\n const isolationScope = parent.getIsolationScope();\n setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\n }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n registry.__SENTRY__ = registry.__SENTRY__ || {};\n registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nexport function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions = {}): T {\n const registry = getMainCarrier();\n\n if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n }\n\n // if there was no strategy, fallback to just calling the callback\n return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n if (!carrier) return false;\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n","import type { Client, Event, EventHint, EventProcessor, Hub, Integration, IntegrationFn, Options } from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { addGlobalEventProcessor } from './eventProcessors';\nimport { getClient } from './exports';\nimport { getCurrentHub } from './hub';\n\ndeclare module '@sentry/types' {\n interface Integration {\n isDefaultInstance?: boolean;\n }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n const integrationsByName: { [key: string]: Integration } = {};\n\n integrations.forEach(currentInstance => {\n const { name } = currentInstance;\n\n const existingInstance = integrationsByName[name];\n\n // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n // default instance to overwrite an existing user instance\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n\n integrationsByName[name] = currentInstance;\n });\n\n return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick<Options, 'defaultIntegrations' | 'integrations'>): Integration[] {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n\n // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n defaultIntegrations.forEach(integration => {\n integration.isDefaultInstance = true;\n });\n\n let integrations: Integration[];\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n integrations = arrayify(userIntegrations(defaultIntegrations));\n } else {\n integrations = defaultIntegrations;\n }\n\n const finalIntegrations = filterDuplicates(integrations);\n\n // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n if (debugIndex !== -1) {\n const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n finalIntegrations.push(debugInstance);\n }\n\n return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n const integrationIndex: IntegrationIndex = {};\n\n integrations.forEach(integration => {\n // guard against empty provided integrations\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n\n return integrationIndex;\n}\n\n/** Setup a single integration. */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n\n // `setupOnce` is only called the first time\n if (installedIntegrations.indexOf(integration.name) === -1) {\n // eslint-disable-next-line deprecation/deprecation\n integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n installedIntegrations.push(integration.name);\n }\n\n // `setup` is run for each client\n if (integration.setup && typeof integration.setup === 'function') {\n integration.setup(client);\n }\n\n if (client.on && typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n id: integration.name,\n });\n\n client.addEventProcessor(processor);\n }\n\n DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nexport function addIntegration(integration: Integration): void {\n const client = getClient();\n\n if (!client || !client.addIntegration) {\n DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n\n client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n for (let i = 0; i < arr.length; i++) {\n if (callback(arr[i]) === true) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nexport function convertIntegrationFnToClass<Fn extends IntegrationFn>(\n name: string,\n fn: Fn,\n): Integration & {\n id: string;\n new (...args: Parameters<Fn>): Integration &\n ReturnType<Fn> & {\n setupOnce: (addGlobalEventProcessor?: (callback: EventProcessor) => void, getCurrentHub?: () => Hub) => void;\n };\n} {\n return Object.assign(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function ConvertedIntegration(...rest: Parameters<Fn>) {\n return {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setupOnce: () => {},\n ...fn(...rest),\n };\n },\n { id: name },\n ) as unknown as Integration & {\n id: string;\n new (...args: Parameters<Fn>): Integration &\n ReturnType<Fn> & {\n setupOnce: (addGlobalEventProcessor?: (callback: EventProcessor) => void, getCurrentHub?: () => Hub) => void;\n };\n };\n}\n","import type { IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\nimport { convertIntegrationFnToClass } from '../integration';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst functionToStringIntegration: IntegrationFn = () => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // intrinsics (like Function.prototype) might be immutable in some environments\n // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n const context = getOriginalFunction(this) || this;\n return originalFunctionToString.apply(context, args);\n };\n } catch {\n // ignore errors here, just don't patch this\n }\n },\n };\n};\n\n/** Patch toString calls to return proper name for wrapped functions */\n// eslint-disable-next-line deprecation/deprecation\nexport const FunctionToString = convertIntegrationFnToClass(INTEGRATION_NAME, functionToStringIntegration);\n","import type { Event, IntegrationFn, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { convertIntegrationFnToClass } from '../integration';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n /^.*\\/healthcheck$/,\n /^.*\\/healthy$/,\n /^.*\\/live$/,\n /^.*\\/ready$/,\n /^.*\\/heartbeat$/,\n /^.*\\/health$/,\n /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n allowUrls: Array<string | RegExp>;\n denyUrls: Array<string | RegExp>;\n ignoreErrors: Array<string | RegExp>;\n ignoreTransactions: Array<string | RegExp>;\n ignoreInternal: boolean;\n disableErrorDefaults: boolean;\n disableTransactionDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst inboundFiltersIntegration: IntegrationFn = (options: Partial<InboundFiltersOptions>) => {\n return {\n name: INTEGRATION_NAME,\n processEvent(event, _hint, client) {\n const clientOptions = client.getOptions();\n const mergedOptions = _mergeOptions(options, clientOptions);\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n};\n\n/** Inbound filters configurable by the user */\n// eslint-disable-next-line deprecation/deprecation\nexport const InboundFilters = convertIntegrationFnToClass(INTEGRATION_NAME, inboundFiltersIntegration);\n\nfunction _mergeOptions(\n internalOptions: Partial<InboundFiltersOptions> = {},\n clientOptions: Partial<InboundFiltersOptions> = {},\n): Partial<InboundFiltersOptions> {\n return {\n allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n ],\n ignoreTransactions: [\n ...(internalOptions.ignoreTransactions || []),\n ...(clientOptions.ignoreTransactions || []),\n ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n ],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n if (options.ignoreInternal && _isSentryError(event)) {\n DEBUG_BUILD &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n // If event.type, this is not an error\n if (event.type || !ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n const possibleMessages: string[] = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n let lastException;\n try {\n // @ts-expect-error Try catching to save bundle size\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n lastException = event.exception.values[event.exception.values.length - 1];\n } catch (e) {\n // try catching to save bundle size checking existence of variables\n }\n\n if (lastException) {\n if (lastException.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n }\n\n if (DEBUG_BUILD && possibleMessages.length === 0) {\n logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n }\n\n return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n try {\n let frames;\n try {\n // @ts-expect-error we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n","/* eslint-disable max-lines */\nimport type {\n Attachment,\n Breadcrumb,\n CaptureContext,\n Client,\n Context,\n Contexts,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n Primitive,\n PropagationContext,\n RequestSession,\n Scope as ScopeInterface,\n ScopeContext,\n ScopeData,\n Session,\n Severity,\n SeverityLevel,\n Span,\n Transaction,\n User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope: ScopeInterface | undefined;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n /** Flag if notifying is happening. */\n protected _notifyingListeners: boolean;\n\n /** Callback for client to receive scope changes. */\n protected _scopeListeners: Array<(scope: Scope) => void>;\n\n /** Callback list that will be called after {@link applyToEvent}. */\n protected _eventProcessors: EventProcessor[];\n\n /** Array of breadcrumbs. */\n protected _breadcrumbs: Breadcrumb[];\n\n /** User */\n protected _user: User;\n\n /** Tags */\n protected _tags: { [key: string]: Primitive };\n\n /** Extra */\n protected _extra: Extras;\n\n /** Contexts */\n protected _contexts: Contexts;\n\n /** Attachments */\n protected _attachments: Attachment[];\n\n /** Propagation Context for distributed tracing */\n protected _propagationContext: PropagationContext;\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n /** Fingerprint */\n protected _fingerprint?: string[];\n\n /** Severity */\n // eslint-disable-next-line deprecation/deprecation\n protected _level?: Severity | SeverityLevel;\n\n /**\n * Transaction Name\n */\n protected _transactionName?: string;\n\n /** Span */\n protected _span?: Span;\n\n /** Session */\n protected _session?: Session;\n\n /** Request Mode Session Status */\n protected _requestSession?: RequestSession;\n\n /** The client on this scope */\n protected _client?: Client;\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n public constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * Inherit values from the parent scope.\n * @deprecated Use `scope.clone()` and `new Scope()` instead.\n */\n public static clone(scope?: Scope): Scope {\n return scope ? scope.clone() : new Scope();\n }\n\n /**\n * Clone this scope instance.\n */\n public clone(): Scope {\n const newScope = new Scope();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._span = this._span;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n\n return newScope;\n }\n\n /** Update the client on the scope. */\n public setClient(client: Client | undefined): void {\n this._client = client;\n }\n\n /**\n * Get the client assigned to this scope.\n *\n * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n */\n public getClient(): Client | undefined {\n return this._client;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n public addScopeListener(callback: (scope: Scope) => void): void {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public addEventProcessor(callback: EventProcessor): this {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n this._user = user || {};\n if (this._session) {\n updateSession(this._session, { user });\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getUser(): User | undefined {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n public getRequestSession(): RequestSession | undefined {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n public setRequestSession(requestSession?: RequestSession): this {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): this {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): this {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): this {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setFingerprint(fingerprint: string[]): this {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setLevel(\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel,\n ): this {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the transaction name on the scope for future events.\n * @deprecated Use extra or tags instead.\n */\n public setTransactionName(name?: string): this {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setContext(key: string, context: Context | null): this {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the Span on the scope.\n * @param span Span\n * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n */\n public setSpan(span?: Span): this {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Returns the `Span` if there is one.\n * @deprecated Use `getActiveSpan()` instead.\n */\n public getSpan(): Span | undefined {\n return this._span;\n }\n\n /**\n * Returns the `Transaction` attached to the scope (if there is one).\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\n public getTransaction(): Transaction | undefined {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n const span = this._span;\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n public setSession(session?: Session): this {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSession(): Session | undefined {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n public update(captureContext?: CaptureContext): this {\n if (!captureContext) {\n return this;\n }\n\n if (typeof captureContext === 'function') {\n const updatedScope = (captureContext as <T>(scope: T) => T)(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n\n if (captureContext instanceof Scope) {\n this._tags = { ...this._tags, ...captureContext._tags };\n this._extra = { ...this._extra, ...captureContext._extra };\n this._contexts = { ...this._contexts, ...captureContext._contexts };\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n if (captureContext._propagationContext) {\n this._propagationContext = captureContext._propagationContext;\n }\n } else if (isPlainObject(captureContext)) {\n // eslint-disable-next-line no-param-reassign\n captureContext = captureContext as ScopeContext;\n this._tags = { ...this._tags, ...captureContext.tags };\n this._extra = { ...this._extra, ...captureContext.extra };\n this._contexts = { ...this._contexts, ...captureContext.contexts };\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n if (captureContext.propagationContext) {\n this._propagationContext = captureContext.propagationContext;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clear(): this {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getLastBreadcrumb(): Breadcrumb | undefined {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `getScopeData()` instead.\n */\n public getAttachments(): Attachment[] {\n const data = this.getScopeData();\n\n return data.attachments;\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n public getScopeData(): ScopeData {\n const {\n _breadcrumbs,\n _attachments,\n _contexts,\n _tags,\n _extra,\n _user,\n _level,\n _fingerprint,\n _eventProcessors,\n _propagationContext,\n _sdkProcessingMetadata,\n _transactionName,\n _span,\n } = this;\n\n return {\n breadcrumbs: _breadcrumbs,\n attachments: _attachments,\n contexts: _contexts,\n tags: _tags,\n extra: _extra,\n user: _user,\n level: _level,\n fingerprint: _fingerprint || [],\n eventProcessors: _eventProcessors,\n propagationContext: _propagationContext,\n sdkProcessingMetadata: _sdkProcessingMetadata,\n transactionName: _transactionName,\n span: _span,\n };\n }\n\n /**\n * Applies data from the scope to the event and runs all event processors on it.\n *\n * @param event Event\n * @param hint Object containing additional information about the original exception, for use by the event processors.\n * @hidden\n * @deprecated Use `applyScopeDataToEvent()` directly\n */\n public applyToEvent(\n event: Event,\n hint: EventHint = {},\n additionalEventProcessors: EventProcessor[] = [],\n ): PromiseLike<Event | null> {\n applyScopeDataToEvent(event, this.getScopeData());\n\n // TODO (v8): Update this order to be: Global > Client > Scope\n const eventProcessors: EventProcessor[] = [\n ...additionalEventProcessors,\n // eslint-disable-next-line deprecation/deprecation\n ...getGlobalEventProcessors(),\n ...this._eventProcessors,\n ];\n\n return notifyEventProcessors(eventProcessors, event, hint);\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setPropagationContext(context: PropagationContext): this {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getPropagationContext(): PropagationContext {\n return this._propagationContext;\n }\n\n /**\n * Capture an exception for this scope.\n *\n * @param exception The exception to capture.\n * @param hint Optinal additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * Capture a message for this scope.\n *\n * @param message The message to capture.\n * @param level An optional severity level to report the message with.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured message.\n */\n public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * Captures a manually created event for this scope and sends it to Sentry.\n *\n * @param exception The event to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n protected _notifyScopeListeners(): void {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): ScopeInterface {\n if (!globalScope) {\n globalScope = new Scope();\n }\n\n return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nexport function setGlobalScope(scope: ScopeInterface | undefined): void {\n globalScope = scope;\n}\n\nfunction generatePropagationContext(): PropagationContext {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session: Session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n","import type { Client, DynamicSamplingContext, Scope, Span, Transaction } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient, getCurrentScope } from '../exports';\nimport { spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(\n trace_id: string,\n client: Client,\n scope?: Scope,\n): DynamicSamplingContext {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n user_segment,\n public_key,\n trace_id,\n }) as DynamicSamplingContext;\n\n client.emit && client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * A Span with a frozen dynamic sampling context.\n */\ntype TransactionWithV7FrozenDsc = Transaction & { _frozenDynamicSamplingContext?: DynamicSamplingContext };\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n // passing emit=false here to only emit later once the DSC is actually populated\n const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n // As long as we use `Transaction`s internally, this should be fine.\n // TODO: We need to replace this with a `getRootSpan(span)` function though\n const txn = span.transaction as TransactionWithV7FrozenDsc | undefined;\n if (!txn) {\n return dsc;\n }\n\n // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n // @see Transaction class constructor\n const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n if (v7FrozenDsc) {\n return v7FrozenDsc;\n }\n\n // TODO (v8): Replace txn.metadata with txn.attributes[]\n // We can't do this yet because attributes aren't always set yet.\n // eslint-disable-next-line deprecation/deprecation\n const { sampleRate: maybeSampleRate, source } = txn.metadata;\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const jsonSpan = spanToJSON(txn);\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n if (source && source !== 'url') {\n dsc.transaction = jsonSpan.description;\n }\n\n dsc.sampled = String(spanIsSampled(txn));\n\n client.emit && client.emit('createDsc', dsc);\n\n return dsc;\n}\n","import type { Breadcrumb, Event, PropagationContext, ScopeData, Span } from '@sentry/types';\nimport { arrayify } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata, propagationContext } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata, propagationContext);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n // eslint-disable-next-line deprecation/deprecation\n transactionName,\n span,\n } = mergeData;\n\n mergePropOverwrite(data, 'extra', extra);\n mergePropOverwrite(data, 'tags', tags);\n mergePropOverwrite(data, 'user', user);\n mergePropOverwrite(data, 'contexts', contexts);\n mergePropOverwrite(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n // eslint-disable-next-line deprecation/deprecation\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merge properties, overwriting existing keys.\n * Exported only for tests.\n */\nexport function mergePropOverwrite<\n Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n Data extends ScopeData | Event,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n if (mergeVal && Object.keys(mergeVal).length) {\n data[prop] = { ...data[prop], ...mergeVal };\n }\n}\n\n/**\n * Merge properties, keeping existing keys.\n * Exported only for tests.\n */\nexport function mergePropKeep<\n Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n Data extends ScopeData | Event,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n if (mergeVal && Object.keys(mergeVal).length) {\n data[prop] = { ...mergeVal, ...data[prop] };\n }\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n event: Event,\n prop: Prop,\n mergeVal: ScopeData[Prop],\n): void {\n const prevVal = event[prop];\n // If we are not merging any new values,\n // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n if (!mergeVal.length && (!prevVal || prevVal.length)) {\n return;\n }\n\n const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n // eslint-disable-next-line deprecation/deprecation\n transactionName,\n } = data;\n\n if (extra && Object.keys(extra).length) {\n event.extra = { ...extra, ...event.extra };\n }\n if (tags && Object.keys(tags).length) {\n event.tags = { ...tags, ...event.tags };\n }\n if (user && Object.keys(user).length) {\n event.user = { ...user, ...event.user };\n }\n if (contexts && Object.keys(contexts).length) {\n event.contexts = { ...contexts, ...event.contexts };\n }\n if (level) {\n event.level = level;\n }\n if (transactionName) {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(\n event: Event,\n sdkProcessingMetadata: ScopeData['sdkProcessingMetadata'],\n propagationContext: PropagationContext,\n): void {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n propagationContext: propagationContext,\n };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n const transaction = span.transaction;\n if (transaction) {\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n const transactionName = spanToJSON(transaction).description;\n if (transactionName) {\n event.tags = { transaction: transactionName, ...event.tags };\n }\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n","import type {\n CaptureContext,\n Client,\n ClientOptions,\n Event,\n EventHint,\n Scope as ScopeInterface,\n ScopeContext,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors';\nimport { Scope, getGlobalScope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\nimport { spanToJSON } from './spanUtils';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n scope?: Scope,\n client?: Client,\n isolationScope?: Scope,\n): PromiseLike<Event | null> {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n const prepared: Event = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n // TODO (v8): Update this order to be: Global > Client > Scope\n const eventProcessors = [\n ...clientEventProcessors,\n // eslint-disable-next-line deprecation/deprecation\n ...getGlobalEventProcessors(),\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n if (!debugIdMap) {\n return;\n }\n\n let debugIdStackFramesCache: Map<string, StackFrame[]>;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map<string, StackFrame[]>();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n let parsedStack: StackFrame[];\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n if (stackFrame.filename) {\n acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n break;\n }\n }\n return acc;\n }, {});\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event!.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap: Record<string, string> = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.keys(filenameDebugIdMap).forEach(filename => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id: filenameDebugIdMap[filename],\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n if (!event) {\n return null;\n }\n\n const normalized: Event = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n const data = spanToJSON(span).data;\n\n if (data) {\n // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n // eslint-disable-next-line deprecation/deprecation\n span.data = normalize(data, depth, maxBreadth);\n }\n\n return span;\n });\n }\n\n return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n","import type { Span, SpanJSON, SpanTimeInput, TraceContext } from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\nimport type { Span as SpanClass } from '../tracing/span';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n data,\n op,\n parent_span_id,\n span_id,\n status,\n tags,\n trace_id,\n origin,\n });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nexport function spanToJSON(span: Span): Partial<SpanJSON> {\n if (spanIsSpanClass(span)) {\n return span.getSpanJSON();\n }\n\n // Fallback: We also check for `.toJSON()` here...\n // eslint-disable-next-line deprecation/deprecation\n if (typeof span.toJSON === 'function') {\n // eslint-disable-next-line deprecation/deprecation\n return span.toJSON();\n }\n\n return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span: Span): span is SpanClass {\n return typeof (span as SpanClass).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n // eslint-disable-next-line no-bitwise\n return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n","export const SDK_VERSION = '7.93.0';\n","import { captureException, captureMessage, convertIntegrationFnToClass, getClient, withScope } from '@sentry/core';\nimport type { CaptureContext, IntegrationFn } from '@sentry/types';\nimport {\n CONSOLE_LEVELS,\n GLOBAL_OBJ,\n addConsoleInstrumentationHandler,\n addExceptionMechanism,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/utils';\n\ninterface CaptureConsoleOptions {\n levels?: string[];\n}\n\nconst INTEGRATION_NAME = 'CaptureConsole';\n\nconst captureConsoleIntegration = ((options: CaptureConsoleOptions = {}) => {\n const levels = options.levels || CONSOLE_LEVELS;\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n addConsoleInstrumentationHandler(({ args, level }) => {\n if (getClient() !== client || !levels.includes(level)) {\n return;\n }\n\n consoleHandler(args, level);\n });\n },\n };\n}) satisfies IntegrationFn;\n\n/** Send Console API calls as Sentry Events */\n// eslint-disable-next-line deprecation/deprecation\nexport const CaptureConsole = convertIntegrationFnToClass(INTEGRATION_NAME, captureConsoleIntegration);\n\nfunction consoleHandler(args: unknown[], level: string): void {\n const captureContext: CaptureContext = {\n level: severityLevelFromString(level),\n extra: {\n arguments: args,\n },\n };\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n event.logger = 'console';\n\n addExceptionMechanism(event, {\n handled: false,\n type: 'console',\n });\n\n return event;\n });\n\n if (level === 'assert' && args[0] === false) {\n const message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`;\n scope.setExtra('arguments', args.slice(1));\n captureMessage(message, captureContext);\n return;\n }\n\n const error = args.find(arg => arg instanceof Error);\n if (level === 'error' && error) {\n captureException(error, captureContext);\n return;\n }\n\n const message = safeJoin(args, ' ');\n captureMessage(message, captureContext);\n });\n}\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n parser: StackParser,\n maxValueLimit: number = 250,\n key: string,\n limit: number,\n event: Event,\n hint?: EventHint,\n): void {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return;\n }\n\n // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n const originalException: Exception | undefined =\n event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n // We only create exception grouping if there is an exception in the event.\n if (originalException) {\n event.exception.values = truncateAggregateExceptions(\n aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException as ExtendedError,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n parser: StackParser,\n limit: number,\n error: ExtendedError,\n key: string,\n prevExceptions: Exception[],\n exception: Exception,\n exceptionId: number,\n): Exception[] {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n\n let newExceptions = [...prevExceptions];\n\n if (isInstanceOf(error[key], Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n\n // This will create exception grouping for AggregateErrors\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n if (Array.isArray(error.errors)) {\n error.errors.forEach((childError, i) => {\n if (isInstanceOf(childError, Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n });\n }\n\n return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n is_exception_group: true,\n exception_id: exceptionId,\n };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n exception: Exception,\n source: string,\n exceptionId: number,\n parentId: number | undefined,\n): void {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n type: 'chained',\n source,\n exception_id: exceptionId,\n parent_id: parentId,\n };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n","import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n if (!isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n return undefined;\n }\n\n // Intermediary object to store baggage key value pairs of incoming baggage headers on.\n // It is later used to read Sentry-DSC-values from.\n let baggageObject: Readonly<Record<string, string>> = {};\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n baggageObject = baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n for (const key of Object.keys(currBaggageObject)) {\n acc[key] = currBaggageObject[key];\n }\n return acc;\n }, {});\n } else {\n // Return undefined if baggage header is an empty string (technically an empty baggage header is not spec conform but\n // this is how we choose to handle it)\n if (!baggageHeader) {\n return undefined;\n }\n\n baggageObject = baggageHeaderToObject(baggageHeader);\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce<Record<string, string>>((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record<string, string>): string | undefined {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n","import { isString } from './is';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n parentNode: SimpleNode;\n} | null;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n elem: unknown,\n options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n if (!elem) {\n return '<unknown>';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n const elem = el as {\n tagName?: string;\n id?: string;\n className?: string;\n getAttribute(key: string): string;\n };\n\n const out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n // eslint-disable-next-line prefer-const\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) as unknown as E;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n Object.keys(handlers).forEach(key => {\n handlers[key as InstrumentHandlerType] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n if (!instrumented[type]) {\n instrumentFn();\n instrumented[type] = true;\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '@sentry/types';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole(): void {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args: any[]): void {\n const handlerData: HandlerDataConsole = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataFetch } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n const type = 'fetch';\n addHandler(type, handler);\n maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch(): void {\n if (!supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n return function (...args: any[]): void {\n const { method, url } = parseFetchArgs(args);\n\n const handlerData: HandlerDataFetch = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: Date.now(),\n };\n\n triggerHandlers('fetch', {\n ...handlerData,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n (response: Response) => {\n const finishedHandlerData: HandlerDataFetch = {\n ...handlerData,\n endTimestamp: Date.now(),\n response,\n };\n\n triggerHandlers('fetch', finishedHandlerData);\n return response;\n },\n (error: Error) => {\n const erroredHandlerData: HandlerDataFetch = {\n ...handlerData,\n endTimestamp: Date.now(),\n error,\n };\n\n triggerHandlers('fetch', erroredHandlerData);\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\nfunction getUrlFromResource(resource: FetchResource): string {\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (!resource) {\n return '';\n }\n\n if (hasProp(resource, 'url')) {\n return resource.url;\n }\n\n if (resource.toString) {\n return resource.toString();\n }\n\n return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs as [FetchResource, object];\n\n return {\n url: getUrlFromResource(url),\n method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n };\n }\n\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg as FetchResource),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n","import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n GLOBAL_OBJ.onerror = function (\n msg: string | object,\n url?: string,\n line?: number,\n column?: number,\n error?: Error,\n ): boolean {\n const handlerData: HandlerDataError = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n const handlerData: HandlerDataUnhandledRejection = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { getGlobalObject } from '../worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chrome = (WINDOW as any).chrome;\n const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataHistory } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsHistory } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n const type = 'history';\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory(): void {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = WINDOW.onpopstate;\n WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n const to = WINDOW.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n const handlerData: HandlerDataHistory = { from, to };\n triggerHandlers('history', handlerData);\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n return function (this: History, ...args: any[]): void {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n const handlerData: HandlerDataHistory = { from, to };\n triggerHandlers('history', handlerData);\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(WINDOW.history, 'pushState', historyReplacementFunction);\n fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, WrappedFunction } from '@sentry/types';\n\nimport { isString } from '../is';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n const type = 'xhr';\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nexport function instrumentXHR(): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!(WINDOW as any).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n const startTimestamp = Date.now();\n\n // open() should always be called with two or more arguments\n // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n const url = parseUrl(args[1]);\n\n if (!method || !url) {\n return originalOpen.apply(this, args);\n }\n\n this[SENTRY_XHR_DATA_KEY] = {\n method,\n url,\n request_headers: {},\n };\n\n // if Sentry key appears in URL, don't capture it as a request\n if (method === 'POST' && url.match(/sentry_key/)) {\n this.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler: () => void = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (this.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = this.status;\n } catch (e) {\n /* do nothing */\n }\n\n const handlerData: HandlerDataXhr = {\n args: [method, url],\n endTimestamp: Date.now(),\n startTimestamp,\n xhr: this,\n };\n triggerHandlers('xhr', handlerData);\n }\n };\n\n if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n onreadystatechangeHandler();\n return original.apply(this, readyStateArgs);\n };\n });\n } else {\n this.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n const [header, value] = setRequestHeaderArgs;\n\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return original.apply(this, setRequestHeaderArgs);\n };\n });\n\n return originalOpen.apply(this, args);\n };\n });\n\n fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return originalSend.apply(this, args);\n }\n\n if (args[0] !== undefined) {\n sentryXhrData.body = args[0];\n }\n\n const handlerData: HandlerDataXhr = {\n args: [sentryXhrData.method, sentryXhrData.url],\n startTimestamp: Date.now(),\n xhr: this,\n };\n triggerHandlers('xhr', handlerData);\n\n return originalSend.apply(this, args);\n };\n });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n if (isString(url)) {\n return url;\n }\n\n try {\n // url can be a string or URL\n // but since URL is not available in IE11, we do not check for it,\n // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n // If that fails, we just return undefined\n return (url as URL).toString();\n } catch {} // eslint-disable-line no-empty\n\n return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\ninterface VueViewModel {\n // Vue3\n __isVue?: boolean;\n // Vue2\n _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] as const;\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n disable(): void;\n enable(): void;\n isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console as Console;\n const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] as LoggerMethod;\n });\n }\n}\n\nfunction makeLogger(): Logger {\n let enabled = false;\n const logger: Partial<Logger> = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args: any[]) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger as Logger;\n}\n\nexport const logger = makeLogger();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n getRandomValues(array: Uint8Array): Uint8Array;\n randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n msCrypto?: CryptoInternal;\n crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = (): number => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '<unknown>';\n }\n return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n major?: number;\n minor?: number;\n patch?: number;\n prerelease?: string;\n buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception as any).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n","import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: { [key: string]: any },\n // Default Node.js REPL depth\n depth: number = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize: number = 100 * 1024,\n): T {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key: string,\n value: unknown,\n depth: number = +Infinity,\n maxProperties: number = +Infinity,\n memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n ) {\n return value as Primitive;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n return value as ObjOrArray<unknown>;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/**\n * @deprecated This export will be removed in v8.\n */\nexport { visit as walk };\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key: unknown,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value: Exclude<unknown, string | number | boolean | null>,\n): string {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n // memoize\n (obj: any) => boolean,\n // unmemoize\n (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner: any = hasWeakSet ? new WeakSet() : [];\n function memoize(obj: any): boolean {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj: any): void {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] as () => any;\n const wrapped = replacementFactory(original) as WrappedFunction;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nexport function convertToPlainObject<V>(\n value: V,\n):\n | {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n }\n | {\n [ownProps: string]: unknown;\n message: string;\n name: string;\n stack?: string;\n }\n | V {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj: {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n } = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps: { [key: string]: unknown } = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj as Record<string, unknown>)[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map<unknown, unknown>();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n if (isPlainObject(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: { [key: string]: any } = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue as T;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: unknown[] = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item: unknown) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue as unknown as T;\n }\n\n return inputValue;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat as any).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n","/* eslint-disable deprecation/deprecation */\nimport type { Severity, SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: Severity | SeverityLevel | string): Severity {\n return severityLevelFromString(level) as Severity;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n","import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nimport type { GetModuleFn } from './node-stack-trace';\nimport { filenameIsInApp, node } from './node-stack-trace';\n\nexport { filenameIsInApp };\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack: string, skipFirst: number = 0): StackFrame[] => {\n const frames: StackFrame[] = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirst; i < lines.length; i++) {\n const line = lines[i];\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames);\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || '?',\n }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n return [90, node(getModule)];\n}\n","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n value: string,\n pattern: RegExp | string,\n requireExactStringMatch: boolean = false,\n): boolean {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n testString: string,\n patterns: Array<string | RegExp> = [],\n requireExactStringMatch: boolean = false,\n): boolean {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\ndeclare const EdgeRuntime: string | undefined;\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-expect-error It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n if (!('fetch' in WINDOW)) {\n return false;\n }\n\n try {\n new Headers();\n new Request('http://www.example.com');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func: Function): boolean {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n if (typeof EdgeRuntime === 'string') {\n return true;\n }\n\n if (!supportsFetch()) {\n return false;\n }\n\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFetch(WINDOW.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n const doc = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof (doc.createElement as unknown) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n DEBUG_BUILD &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' as ReferrerPolicy,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n /** Pending */\n PENDING = 0,\n /** Resolved / OK */\n RESOLVED = 1,\n /** Rejected / Error */\n REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n private _state: States;\n private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n private _value: any;\n\n public constructor(\n executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n ) {\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result as any);\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n ): PromiseLike<T | TResult> {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n return new SyncPromise<TResult>((resolve, reject) => {\n let val: TResult | any;\n let isRejected: boolean;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val as unknown as any);\n });\n });\n }\n\n /** JSDoc */\n private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n this._setResult(States.RESOLVED, value);\n };\n\n /** JSDoc */\n private readonly _reject = (reason?: any) => {\n this._setResult(States.REJECTED, reason);\n };\n\n /** JSDoc */\n private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value as PromiseLike<T>).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };\n\n /** JSDoc */\n private readonly _executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n handler[1](this._value as unknown as any);\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };\n}\n\nexport { SyncPromise };\n","import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n /**\n * The millisecond timestamp at which measurement began, measured in Unix time.\n */\n timeOrigin: number;\n /**\n * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n */\n now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n","import type { DynamicSamplingContext, PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n if (!traceparent) {\n return undefined;\n }\n\n const matches = traceparent.match(TRACEPARENT_REGEXP);\n if (!matches) {\n return undefined;\n }\n\n let parentSampled: boolean | undefined;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n}\n\n/**\n * Create tracing context from incoming headers.\n */\nexport function tracingContextFromHeaders(\n sentryTrace: Parameters<typeof extractTraceparentData>[0],\n baggage: Parameters<typeof baggageHeaderToDynamicSamplingContext>[0],\n): {\n traceparentData: ReturnType<typeof extractTraceparentData>;\n dynamicSamplingContext: ReturnType<typeof baggageHeaderToDynamicSamplingContext>;\n propagationContext: PropagationContext;\n} {\n const traceparentData = extractTraceparentData(sentryTrace);\n const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n const propagationContext: PropagationContext = {\n traceId: traceId || uuid4(),\n spanId: uuid4().substring(16),\n sampled: parentSampled,\n };\n\n if (parentSpanId) {\n propagationContext.parentSpanId = parentSpanId;\n }\n\n if (dynamicSamplingContext) {\n propagationContext.dsc = dynamicSamplingContext as DynamicSamplingContext;\n }\n\n return {\n traceparentData,\n dynamicSamplingContext,\n propagationContext,\n };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n traceId: string = uuid4(),\n spanId: string = uuid4().substring(16),\n sampled?: boolean,\n): string {\n let sampledString = '';\n if (sampled !== undefined) {\n sampledString = sampled ? '-1' : '-0';\n }\n return `${traceId}-${spanId}${sampledString}`;\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '@sentry/types';\n\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions */\nexport interface InternalGlobal {\n navigator?: { userAgent?: string };\n console: Console;\n Sentry?: {\n Integrations?: Integration[];\n };\n onerror?: {\n (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n onunhandledrejection?: {\n (event: unknown): boolean;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n SENTRY_ENVIRONMENT?: string;\n SENTRY_DSN?: string;\n SENTRY_RELEASE?: {\n id?: string;\n };\n SENTRY_SDK_SOURCE?: SdkSource;\n /**\n * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n * file.\n */\n _sentryDebugIds?: Record<string, string>;\n __SENTRY__: {\n globalEventProcessors: any;\n hub: any;\n logger: any;\n extensions?: {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n };\n /**\n * Raw module metadata that is injected by bundler plugins.\n *\n * Keys are `error.stack` strings, values are the metadata.\n */\n _sentryModuleMetadata?: Record<string, any>;\n}\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj: { Math?: Math }): any | undefined {\n return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ: InternalGlobal =\n (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n // eslint-disable-next-line no-restricted-globals\n (typeof window == 'object' && isGlobalObj(window)) ||\n (typeof self == 'object' && isGlobalObj(self)) ||\n (typeof global == 'object' && isGlobalObj(global)) ||\n (function (this: any) {\n return this;\n })() ||\n {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nexport function getGlobalObject<T>(): T & InternalGlobal {\n return GLOBAL_OBJ as T & InternalGlobal;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof InternalGlobal['__SENTRY__'], creator: () => T, obj?: unknown): T {\n const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n return singleton;\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@babel/runtime/helpers/slicedToArray'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass')) :\n typeof define === 'function' && define.amd ? define(['exports', '@babel/runtime/helpers/slicedToArray', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.automationEvents = {}, global._slicedToArray, global._classCallCheck, global._createClass));\n})(this, (function (exports, _slicedToArray, _classCallCheck, _createClass) { 'use strict';\n\n var createExtendedExponentialRampToValueAutomationEvent = function createExtendedExponentialRampToValueAutomationEvent(value, endTime, insertTime) {\n return {\n endTime: endTime,\n insertTime: insertTime,\n type: 'exponentialRampToValue',\n value: value\n };\n };\n\n var createExtendedLinearRampToValueAutomationEvent = function createExtendedLinearRampToValueAutomationEvent(value, endTime, insertTime) {\n return {\n endTime: endTime,\n insertTime: insertTime,\n type: 'linearRampToValue',\n value: value\n };\n };\n\n var createSetValueAutomationEvent = function createSetValueAutomationEvent(value, startTime) {\n return {\n startTime: startTime,\n type: 'setValue',\n value: value\n };\n };\n\n var createSetValueCurveAutomationEvent = function createSetValueCurveAutomationEvent(values, startTime, duration) {\n return {\n duration: duration,\n startTime: startTime,\n type: 'setValueCurve',\n values: values\n };\n };\n\n var getTargetValueAtTime = function getTargetValueAtTime(time, valueAtStartTime, _ref) {\n var startTime = _ref.startTime,\n target = _ref.target,\n timeConstant = _ref.timeConstant;\n return target + (valueAtStartTime - target) * Math.exp((startTime - time) / timeConstant);\n };\n\n var isExponentialRampToValueAutomationEvent = function isExponentialRampToValueAutomationEvent(automationEvent) {\n return automationEvent.type === 'exponentialRampToValue';\n };\n\n var isLinearRampToValueAutomationEvent = function isLinearRampToValueAutomationEvent(automationEvent) {\n return automationEvent.type === 'linearRampToValue';\n };\n\n var isAnyRampToValueAutomationEvent = function isAnyRampToValueAutomationEvent(automationEvent) {\n return isExponentialRampToValueAutomationEvent(automationEvent) || isLinearRampToValueAutomationEvent(automationEvent);\n };\n\n var isSetValueAutomationEvent = function isSetValueAutomationEvent(automationEvent) {\n return automationEvent.type === 'setValue';\n };\n\n var isSetValueCurveAutomationEvent = function isSetValueCurveAutomationEvent(automationEvent) {\n return automationEvent.type === 'setValueCurve';\n };\n\n var _getValueOfAutomationEventAtIndexAtTime = function getValueOfAutomationEventAtIndexAtTime(automationEvents, index, time, defaultValue) {\n var automationEvent = automationEvents[index];\n return automationEvent === undefined ? defaultValue : isAnyRampToValueAutomationEvent(automationEvent) || isSetValueAutomationEvent(automationEvent) ? automationEvent.value : isSetValueCurveAutomationEvent(automationEvent) ? automationEvent.values[automationEvent.values.length - 1] : getTargetValueAtTime(time, _getValueOfAutomationEventAtIndexAtTime(automationEvents, index - 1, automationEvent.startTime, defaultValue), automationEvent);\n };\n\n var getEndTimeAndValueOfPreviousAutomationEvent = function getEndTimeAndValueOfPreviousAutomationEvent(automationEvents, index, currentAutomationEvent, nextAutomationEvent, defaultValue) {\n return currentAutomationEvent === undefined ? [nextAutomationEvent.insertTime, defaultValue] : isAnyRampToValueAutomationEvent(currentAutomationEvent) ? [currentAutomationEvent.endTime, currentAutomationEvent.value] : isSetValueAutomationEvent(currentAutomationEvent) ? [currentAutomationEvent.startTime, currentAutomationEvent.value] : isSetValueCurveAutomationEvent(currentAutomationEvent) ? [currentAutomationEvent.startTime + currentAutomationEvent.duration, currentAutomationEvent.values[currentAutomationEvent.values.length - 1]] : [currentAutomationEvent.startTime, _getValueOfAutomationEventAtIndexAtTime(automationEvents, index - 1, currentAutomationEvent.startTime, defaultValue)];\n };\n\n var isCancelAndHoldAutomationEvent = function isCancelAndHoldAutomationEvent(automationEvent) {\n return automationEvent.type === 'cancelAndHold';\n };\n\n var isCancelScheduledValuesAutomationEvent = function isCancelScheduledValuesAutomationEvent(automationEvent) {\n return automationEvent.type === 'cancelScheduledValues';\n };\n\n var getEventTime = function getEventTime(automationEvent) {\n if (isCancelAndHoldAutomationEvent(automationEvent) || isCancelScheduledValuesAutomationEvent(automationEvent)) {\n return automationEvent.cancelTime;\n }\n if (isExponentialRampToValueAutomationEvent(automationEvent) || isLinearRampToValueAutomationEvent(automationEvent)) {\n return automationEvent.endTime;\n }\n return automationEvent.startTime;\n };\n\n var getExponentialRampValueAtTime = function getExponentialRampValueAtTime(time, startTime, valueAtStartTime, _ref) {\n var endTime = _ref.endTime,\n value = _ref.value;\n if (valueAtStartTime === value) {\n return value;\n }\n if (0 < valueAtStartTime && 0 < value || valueAtStartTime < 0 && value < 0) {\n return valueAtStartTime * Math.pow(value / valueAtStartTime, (time - startTime) / (endTime - startTime));\n }\n return 0;\n };\n\n var getLinearRampValueAtTime = function getLinearRampValueAtTime(time, startTime, valueAtStartTime, _ref) {\n var endTime = _ref.endTime,\n value = _ref.value;\n return valueAtStartTime + (time - startTime) / (endTime - startTime) * (value - valueAtStartTime);\n };\n\n var interpolateValue = function interpolateValue(values, theoreticIndex) {\n var lowerIndex = Math.floor(theoreticIndex);\n var upperIndex = Math.ceil(theoreticIndex);\n if (lowerIndex === upperIndex) {\n return values[lowerIndex];\n }\n return (1 - (theoreticIndex - lowerIndex)) * values[lowerIndex] + (1 - (upperIndex - theoreticIndex)) * values[upperIndex];\n };\n\n var getValueCurveValueAtTime = function getValueCurveValueAtTime(time, _ref) {\n var duration = _ref.duration,\n startTime = _ref.startTime,\n values = _ref.values;\n var theoreticIndex = (time - startTime) / duration * (values.length - 1);\n return interpolateValue(values, theoreticIndex);\n };\n\n var isSetTargetAutomationEvent = function isSetTargetAutomationEvent(automationEvent) {\n return automationEvent.type === 'setTarget';\n };\n\n var AutomationEventList = /*#__PURE__*/function () {\n function AutomationEventList(defaultValue) {\n _classCallCheck(this, AutomationEventList);\n this._automationEvents = [];\n this._currenTime = 0;\n this._defaultValue = defaultValue;\n }\n return _createClass(AutomationEventList, [{\n key: Symbol.iterator,\n value: function value() {\n return this._automationEvents[Symbol.iterator]();\n }\n }, {\n key: \"add\",\n value: function add(automationEvent) {\n var eventTime = getEventTime(automationEvent);\n if (isCancelAndHoldAutomationEvent(automationEvent) || isCancelScheduledValuesAutomationEvent(automationEvent)) {\n var index = this._automationEvents.findIndex(function (currentAutomationEvent) {\n if (isCancelScheduledValuesAutomationEvent(automationEvent) && isSetValueCurveAutomationEvent(currentAutomationEvent)) {\n return currentAutomationEvent.startTime + currentAutomationEvent.duration >= eventTime;\n }\n return getEventTime(currentAutomationEvent) >= eventTime;\n });\n var removedAutomationEvent = this._automationEvents[index];\n if (index !== -1) {\n this._automationEvents = this._automationEvents.slice(0, index);\n }\n if (isCancelAndHoldAutomationEvent(automationEvent)) {\n var lastAutomationEvent = this._automationEvents[this._automationEvents.length - 1];\n if (removedAutomationEvent !== undefined && isAnyRampToValueAutomationEvent(removedAutomationEvent)) {\n if (lastAutomationEvent !== undefined && isSetTargetAutomationEvent(lastAutomationEvent)) {\n throw new Error('The internal list is malformed.');\n }\n var startTime = lastAutomationEvent === undefined ? removedAutomationEvent.insertTime : isSetValueCurveAutomationEvent(lastAutomationEvent) ? lastAutomationEvent.startTime + lastAutomationEvent.duration : getEventTime(lastAutomationEvent);\n var startValue = lastAutomationEvent === undefined ? this._defaultValue : isSetValueCurveAutomationEvent(lastAutomationEvent) ? lastAutomationEvent.values[lastAutomationEvent.values.length - 1] : lastAutomationEvent.value;\n var value = isExponentialRampToValueAutomationEvent(removedAutomationEvent) ? getExponentialRampValueAtTime(eventTime, startTime, startValue, removedAutomationEvent) : getLinearRampValueAtTime(eventTime, startTime, startValue, removedAutomationEvent);\n var truncatedAutomationEvent = isExponentialRampToValueAutomationEvent(removedAutomationEvent) ? createExtendedExponentialRampToValueAutomationEvent(value, eventTime, this._currenTime) : createExtendedLinearRampToValueAutomationEvent(value, eventTime, this._currenTime);\n this._automationEvents.push(truncatedAutomationEvent);\n }\n if (lastAutomationEvent !== undefined && isSetTargetAutomationEvent(lastAutomationEvent)) {\n this._automationEvents.push(createSetValueAutomationEvent(this.getValue(eventTime), eventTime));\n }\n if (lastAutomationEvent !== undefined && isSetValueCurveAutomationEvent(lastAutomationEvent) && lastAutomationEvent.startTime + lastAutomationEvent.duration > eventTime) {\n var duration = eventTime - lastAutomationEvent.startTime;\n var ratio = (lastAutomationEvent.values.length - 1) / lastAutomationEvent.duration;\n var length = Math.max(2, 1 + Math.ceil(duration * ratio));\n var fraction = duration / (length - 1) * ratio;\n var values = lastAutomationEvent.values.slice(0, length);\n if (fraction < 1) {\n for (var i = 1; i < length; i += 1) {\n var factor = fraction * i % 1;\n values[i] = lastAutomationEvent.values[i - 1] * (1 - factor) + lastAutomationEvent.values[i] * factor;\n }\n }\n this._automationEvents[this._automationEvents.length - 1] = createSetValueCurveAutomationEvent(values, lastAutomationEvent.startTime, duration);\n }\n }\n } else {\n var _index = this._automationEvents.findIndex(function (currentAutomationEvent) {\n return getEventTime(currentAutomationEvent) > eventTime;\n });\n var previousAutomationEvent = _index === -1 ? this._automationEvents[this._automationEvents.length - 1] : this._automationEvents[_index - 1];\n if (previousAutomationEvent !== undefined && isSetValueCurveAutomationEvent(previousAutomationEvent) && getEventTime(previousAutomationEvent) + previousAutomationEvent.duration > eventTime) {\n return false;\n }\n var persistentAutomationEvent = isExponentialRampToValueAutomationEvent(automationEvent) ? createExtendedExponentialRampToValueAutomationEvent(automationEvent.value, automationEvent.endTime, this._currenTime) : isLinearRampToValueAutomationEvent(automationEvent) ? createExtendedLinearRampToValueAutomationEvent(automationEvent.value, eventTime, this._currenTime) : automationEvent;\n if (_index === -1) {\n this._automationEvents.push(persistentAutomationEvent);\n } else {\n if (isSetValueCurveAutomationEvent(automationEvent) && eventTime + automationEvent.duration > getEventTime(this._automationEvents[_index])) {\n return false;\n }\n this._automationEvents.splice(_index, 0, persistentAutomationEvent);\n }\n }\n return true;\n }\n }, {\n key: \"flush\",\n value: function flush(time) {\n var index = this._automationEvents.findIndex(function (currentAutomationEvent) {\n return getEventTime(currentAutomationEvent) > time;\n });\n if (index > 1) {\n var remainingAutomationEvents = this._automationEvents.slice(index - 1);\n var firstRemainingAutomationEvent = remainingAutomationEvents[0];\n if (isSetTargetAutomationEvent(firstRemainingAutomationEvent)) {\n remainingAutomationEvents.unshift(createSetValueAutomationEvent(_getValueOfAutomationEventAtIndexAtTime(this._automationEvents, index - 2, firstRemainingAutomationEvent.startTime, this._defaultValue), firstRemainingAutomationEvent.startTime));\n }\n this._automationEvents = remainingAutomationEvents;\n }\n }\n }, {\n key: \"getValue\",\n value: function getValue(time) {\n if (this._automationEvents.length === 0) {\n return this._defaultValue;\n }\n var indexOfNextEvent = this._automationEvents.findIndex(function (automationEvent) {\n return getEventTime(automationEvent) > time;\n });\n var nextAutomationEvent = this._automationEvents[indexOfNextEvent];\n var indexOfCurrentEvent = (indexOfNextEvent === -1 ? this._automationEvents.length : indexOfNextEvent) - 1;\n var currentAutomationEvent = this._automationEvents[indexOfCurrentEvent];\n if (currentAutomationEvent !== undefined && isSetTargetAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent) || nextAutomationEvent.insertTime > time)) {\n return getTargetValueAtTime(time, _getValueOfAutomationEventAtIndexAtTime(this._automationEvents, indexOfCurrentEvent - 1, currentAutomationEvent.startTime, this._defaultValue), currentAutomationEvent);\n }\n if (currentAutomationEvent !== undefined && isSetValueAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent))) {\n return currentAutomationEvent.value;\n }\n if (currentAutomationEvent !== undefined && isSetValueCurveAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent) || currentAutomationEvent.startTime + currentAutomationEvent.duration > time)) {\n if (time < currentAutomationEvent.startTime + currentAutomationEvent.duration) {\n return getValueCurveValueAtTime(time, currentAutomationEvent);\n }\n return currentAutomationEvent.values[currentAutomationEvent.values.length - 1];\n }\n if (currentAutomationEvent !== undefined && isAnyRampToValueAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent))) {\n return currentAutomationEvent.value;\n }\n if (nextAutomationEvent !== undefined && isExponentialRampToValueAutomationEvent(nextAutomationEvent)) {\n var _getEndTimeAndValueOf = getEndTimeAndValueOfPreviousAutomationEvent(this._automationEvents, indexOfCurrentEvent, currentAutomationEvent, nextAutomationEvent, this._defaultValue),\n _getEndTimeAndValueOf2 = _slicedToArray(_getEndTimeAndValueOf, 2),\n startTime = _getEndTimeAndValueOf2[0],\n value = _getEndTimeAndValueOf2[1];\n return getExponentialRampValueAtTime(time, startTime, value, nextAutomationEvent);\n }\n if (nextAutomationEvent !== undefined && isLinearRampToValueAutomationEvent(nextAutomationEvent)) {\n var _getEndTimeAndValueOf3 = getEndTimeAndValueOfPreviousAutomationEvent(this._automationEvents, indexOfCurrentEvent, currentAutomationEvent, nextAutomationEvent, this._defaultValue),\n _getEndTimeAndValueOf4 = _slicedToArray(_getEndTimeAndValueOf3, 2),\n _startTime = _getEndTimeAndValueOf4[0],\n _value = _getEndTimeAndValueOf4[1];\n return getLinearRampValueAtTime(time, _startTime, _value, nextAutomationEvent);\n }\n return this._defaultValue;\n }\n }]);\n }();\n\n var createCancelAndHoldAutomationEvent = function createCancelAndHoldAutomationEvent(cancelTime) {\n return {\n cancelTime: cancelTime,\n type: 'cancelAndHold'\n };\n };\n\n var createCancelScheduledValuesAutomationEvent = function createCancelScheduledValuesAutomationEvent(cancelTime) {\n return {\n cancelTime: cancelTime,\n type: 'cancelScheduledValues'\n };\n };\n\n var createExponentialRampToValueAutomationEvent = function createExponentialRampToValueAutomationEvent(value, endTime) {\n return {\n endTime: endTime,\n type: 'exponentialRampToValue',\n value: value\n };\n };\n\n var createLinearRampToValueAutomationEvent = function createLinearRampToValueAutomationEvent(value, endTime) {\n return {\n endTime: endTime,\n type: 'linearRampToValue',\n value: value\n };\n };\n\n var createSetTargetAutomationEvent = function createSetTargetAutomationEvent(target, startTime, timeConstant) {\n return {\n startTime: startTime,\n target: target,\n timeConstant: timeConstant,\n type: 'setTarget'\n };\n };\n\n exports.AutomationEventList = AutomationEventList;\n exports.createCancelAndHoldAutomationEvent = createCancelAndHoldAutomationEvent;\n exports.createCancelScheduledValuesAutomationEvent = createCancelScheduledValuesAutomationEvent;\n exports.createExponentialRampToValueAutomationEvent = createExponentialRampToValueAutomationEvent;\n exports.createLinearRampToValueAutomationEvent = createLinearRampToValueAutomationEvent;\n exports.createSetTargetAutomationEvent = createSetTargetAutomationEvent;\n exports.createSetValueAutomationEvent = createSetValueAutomationEvent;\n exports.createSetValueCurveAutomationEvent = createSetValueCurveAutomationEvent;\n\n}));\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]<u[1][a])return-1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];\"object\"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||\"\"},e}();t.default=i,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];\"string\"==typeof a?(i[t]=a,s+=1):\"object\"==typeof a&&(r[t]=a,n+=1)})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})}));","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addLeadingZeros;\n\nfunction addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = assign;\n\nfunction assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cloneObject;\n\nvar _index = _interopRequireDefault(require(\"../assign/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneObject(object) {\n return (0, _index.default)({}, object);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../locale/en-US/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = _index.default;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDefaultOptions = getDefaultOptions;\nexports.setDefaultOptions = setDefaultOptions;\nvar defaultOptions = {};\n\nfunction getDefaultOptions() {\n return defaultOptions;\n}\n\nfunction setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../../_lib/getUTCDayOfYear/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../../../_lib/getUTCISOWeek/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../../../_lib/getUTCISOWeekYear/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../../../_lib/getUTCWeek/index.js\"));\n\nvar _index5 = _interopRequireDefault(require(\"../../../_lib/getUTCWeekYear/index.js\"));\n\nvar _index6 = _interopRequireDefault(require(\"../../addLeadingZeros/index.js\"));\n\nvar _index7 = _interopRequireDefault(require(\"../lightFormatters/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return _index7.default.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = (0, _index5.default)(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return (0, _index6.default)(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return (0, _index6.default)(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = (0, _index3.default)(date); // Padding\n\n return (0, _index6.default)(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return (0, _index6.default)(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return (0, _index6.default)(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return (0, _index6.default)(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return _index7.default.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return (0, _index6.default)(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = (0, _index4.default)(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return (0, _index6.default)(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = (0, _index2.default)(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return (0, _index6.default)(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return _index7.default.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = (0, _index.default)(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return (0, _index6.default)(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return (0, _index6.default)(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return (0, _index6.default)(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return (0, _index6.default)(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return _index7.default.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return _index7.default.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return (0, _index6.default)(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return (0, _index6.default)(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return _index7.default.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return _index7.default.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return _index7.default.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return (0, _index6.default)(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return (0, _index6.default)(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + (0, _index6.default)(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + (0, _index6.default)(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = (0, _index6.default)(Math.floor(absOffset / 60), 2);\n var minutes = (0, _index6.default)(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nvar _default = formatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../addLeadingZeros/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return (0, _index.default)(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : (0, _index.default)(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return (0, _index.default)(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return (0, _index.default)(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return (0, _index.default)(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return (0, _index.default)(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return (0, _index.default)(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return (0, _index.default)(fractionalSeconds, token.length);\n }\n};\nvar _default = formatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n};\n\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n};\n\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nvar _default = longFormatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getTimezoneOffsetInMilliseconds;\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nfunction getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCDayOfYear;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MILLISECONDS_IN_DAY = 86400000;\n\nfunction getUTCDayOfYear(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCISOWeek;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../startOfUTCISOWeek/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCISOWeekYear/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MILLISECONDS_IN_WEEK = 604800000;\n\nfunction getUTCISOWeek(dirtyDate) {\n (0, _index4.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var diff = (0, _index2.default)(date).getTime() - (0, _index3.default)(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCISOWeekYear;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCISOWeek/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getUTCISOWeekYear(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = (0, _index3.default)(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = (0, _index3.default)(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCWeek;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../startOfUTCWeek/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCWeekYear/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MILLISECONDS_IN_WEEK = 604800000;\n\nfunction getUTCWeek(dirtyDate, options) {\n (0, _index4.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var diff = (0, _index2.default)(date, options).getTime() - (0, _index3.default)(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCWeekYear;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCWeek/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../toInteger/index.js\"));\n\nvar _index5 = require(\"../defaultOptions/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var year = date.getUTCFullYear();\n var defaultOptions = (0, _index5.getDefaultOptions)();\n var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = (0, _index3.default)(firstWeekOfNextYear, options);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = (0, _index3.default)(firstWeekOfThisYear, options);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isProtectedDayOfYearToken = isProtectedDayOfYearToken;\nexports.isProtectedWeekYearToken = isProtectedWeekYearToken;\nexports.throwProtectedError = throwProtectedError;\nvar protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\n\nfunction isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\n\nfunction isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\n\nfunction throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = requiredArgs;\n\nfunction requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCISOWeek;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction startOfUTCISOWeek(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var weekStartsOn = 1;\n var date = (0, _index.default)(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCISOWeekYear;\n\nvar _index = _interopRequireDefault(require(\"../getUTCISOWeekYear/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../startOfUTCISOWeek/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction startOfUTCISOWeekYear(dirtyDate) {\n (0, _index3.default)(1, arguments);\n var year = (0, _index.default)(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = (0, _index2.default)(fourthOfJanuary);\n return date;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCWeek;\n\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../toInteger/index.js\"));\n\nvar _index4 = require(\"../defaultOptions/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction startOfUTCWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n (0, _index2.default)(1, arguments);\n var defaultOptions = (0, _index4.getDefaultOptions)();\n var weekStartsOn = (0, _index3.default)((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = (0, _index.default)(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCWeekYear;\n\nvar _index = _interopRequireDefault(require(\"../getUTCWeekYear/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCWeek/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../toInteger/index.js\"));\n\nvar _index5 = require(\"../defaultOptions/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction startOfUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n (0, _index2.default)(1, arguments);\n var defaultOptions = (0, _index5.getDefaultOptions)();\n var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n var year = (0, _index.default)(dirtyDate, options);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = (0, _index3.default)(firstWeek, options);\n return date;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toInteger;\n\nfunction toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addMilliseconds;\n\nvar _index = _interopRequireDefault(require(\"../_lib/toInteger/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n (0, _index3.default)(2, arguments);\n var timestamp = (0, _index2.default)(dirtyDate).getTime();\n var amount = (0, _index.default)(dirtyAmount);\n return new Date(timestamp + amount);\n}\n\nmodule.exports = exports.default;","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import defaultLocale from \"../../locale/en-US/index.js\";\nexport default defaultLocale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","var defaultOptions = {};\nexport function getDefaultOptions() {\n return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}","var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n};\n\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n};\n\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n var year = getUTCWeekYear(dirtyDate, options);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, options);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n }\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","var roundingMap = {\n ceil: Math.ceil,\n round: Math.round,\n floor: Math.floor,\n trunc: function trunc(value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n } // Math.trunc is not supported by IE\n\n};\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\n\nexport default function addHours(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\n\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var daysInYear = 365.2425;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInDay = secondsInHour * 24;\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInWeek = secondsInDay * 7;\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInYear = secondsInDay * daysInYear;\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMonth = secondsInYear / 12;\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInQuarter = secondsInMonth * 3;","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\n\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var startOfDayLeft = startOfDay(dirtyDateLeft);\n var startOfDayRight = startOfDay(dirtyDateRight);\n var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}","import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport default function differenceInHours(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n requiredArgs(2, arguments);\n return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n var matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\n\nexport default function getDate(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var dayOfMonth = date.getDate();\n return dayOfMonth;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\n\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * const result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\n\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyLeftDate);\n var dateRight = toDate(dirtyRightDate);\n return dateLeft.getTime() === dateRight.getTime();\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\n\nexport default function max(dirtyDatesArray) {\n requiredArgs(1, arguments);\n var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n\n if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array.\n } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n datesArray = Array.prototype.slice.call(dirtyDatesArray);\n } else {\n // `dirtyDatesArray` is non-iterable, return Invalid Date\n return new Date(NaN);\n }\n\n var result;\n datesArray.forEach(function (dirtyDate) {\n var currentDate = toDate(dirtyDate);\n\n if (result === undefined || result < currentDate || isNaN(Number(currentDate))) {\n result = currentDate;\n }\n });\n return result || new Date(NaN);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} - the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\n\nexport default function min(dirtyDatesArray) {\n requiredArgs(1, arguments);\n var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n\n if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array.\n } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n datesArray = Array.prototype.slice.call(dirtyDatesArray);\n } else {\n // `dirtyDatesArray` is non-iterable, return Invalid Date\n return new Date(NaN);\n }\n\n var result;\n datesArray.forEach(function (dirtyDate) {\n var currentDate = toDate(dirtyDate);\n\n if (result === undefined || result > currentDate || isNaN(currentDate.getDate())) {\n result = currentDate;\n }\n });\n return result || new Date(NaN);\n}","export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\n}();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);","export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};","import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);","import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n requiredArgs(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\n var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * const result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\n\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dayOfMonth = toInteger(dirtyDayOfMonth);\n date.setDate(dayOfMonth);\n return date;\n}","import addDays from \"../addDays/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\n\nexport default function setDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var delta = 7 - weekStartsOn;\n var diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7;\n return addDays(date, diff);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * const result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\n\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var milliseconds = toInteger(dirtyMilliseconds);\n date.setMilliseconds(milliseconds);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\n\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var minutes = toInteger(dirtyMinutes);\n date.setMinutes(minutes);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\n\nexport default function setMonth(dirtyDate, dirtyMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var month = toInteger(dirtyMonth);\n var year = date.getFullYear();\n var day = date.getDate();\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(year, month, 15);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month\n // if the original date was the last day of the longer month\n\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\n\nexport default function getDaysInMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n var monthIndex = date.getMonth();\n var lastDayOfMonth = new Date(0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\n\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var seconds = toInteger(dirtySeconds);\n date.setSeconds(seconds);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\n\nexport default function setYear(dirtyDate, dirtyYear) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var year = toInteger(dirtyYear); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n date.setFullYear(year);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\n\nexport default function startOfHour(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMinutes(0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\n\nexport default function startOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var cleanDate = toDate(dirtyDate);\n var date = new Date(0);\n date.setFullYear(cleanDate.getFullYear(), 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}","import addHours from \"../addHours/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * const result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\n\nexport default function subHours(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addHours(dirtyDate, -amount);\n}","import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import addMinutes from \"../addMinutes/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\n\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMinutes(dirtyDate, -amount);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = format;\n\nvar _index = _interopRequireDefault(require(\"../isValid/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../subMilliseconds/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../_lib/format/formatters/index.js\"));\n\nvar _index5 = _interopRequireDefault(require(\"../_lib/format/longFormatters/index.js\"));\n\nvar _index6 = _interopRequireDefault(require(\"../_lib/getTimezoneOffsetInMilliseconds/index.js\"));\n\nvar _index7 = require(\"../_lib/protectedTokens/index.js\");\n\nvar _index8 = _interopRequireDefault(require(\"../_lib/toInteger/index.js\"));\n\nvar _index9 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nvar _index10 = require(\"../_lib/defaultOptions/index.js\");\n\nvar _index11 = _interopRequireDefault(require(\"../_lib/defaultLocale/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nfunction format(dirtyDate, dirtyFormatStr, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n (0, _index9.default)(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var defaultOptions = (0, _index10.getDefaultOptions)();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : _index11.default;\n var firstWeekContainsDate = (0, _index8.default)((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var weekStartsOn = (0, _index8.default)((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = (0, _index3.default)(dirtyDate);\n\n if (!(0, _index.default)(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = (0, _index6.default)(originalDate);\n var utcDate = (0, _index2.default)(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = _index5.default[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = _index4.default[firstCharacter];\n\n if (formatter) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && (0, _index7.isProtectedWeekYearToken)(substring)) {\n (0, _index7.throwProtectedError)(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && (0, _index7.isProtectedDayOfYearToken)(substring)) {\n (0, _index7.throwProtectedError)(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n var matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isDate;\n\nvar _index = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nfunction isDate(value) {\n (0, _index.default)(1, arguments);\n return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isValid;\n\nvar _index = _interopRequireDefault(require(\"../isDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nfunction isValid(dirtyDate) {\n (0, _index3.default)(1, arguments);\n\n if (!(0, _index.default)(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = (0, _index2.default)(dirtyDate);\n return !isNaN(Number(date));\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildFormatLongFn;\n\nfunction buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildLocalizeFn;\n\nfunction buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildMatchFn;\n\nfunction buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildMatchPatternFn;\n\nfunction buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nvar _default = formatDistance;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../../_lib/buildFormatLongFn/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: (0, _index.default)({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: (0, _index.default)({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: (0, _index.default)({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nvar _default = formatLong;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nvar _default = formatRelative;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../../_lib/buildLocalizeFn/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: (0, _index.default)({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: (0, _index.default)({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: (0, _index.default)({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: (0, _index.default)({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: (0, _index.default)({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nvar _default = localize;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../../_lib/buildMatchFn/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../../../_lib/buildMatchPatternFn/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: (0, _index2.default)({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: (0, _index.default)({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: (0, _index.default)({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: (0, _index.default)({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: (0, _index.default)({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: (0, _index.default)({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nvar _default = match;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"./_lib/formatDistance/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"./_lib/formatLong/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"./_lib/formatRelative/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"./_lib/localize/index.js\"));\n\nvar _index5 = _interopRequireDefault(require(\"./_lib/match/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: _index.default,\n formatLong: _index2.default,\n formatRelative: _index3.default,\n localize: _index4.default,\n match: _index5.default,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nvar _default = locale;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = subMilliseconds;\n\nvar _index = _interopRequireDefault(require(\"../addMilliseconds/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../_lib/toInteger/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nfunction subMilliseconds(dirtyDate, dirtyAmount) {\n (0, _index2.default)(2, arguments);\n var amount = (0, _index3.default)(dirtyAmount);\n return (0, _index.default)(dirtyDate, -amount);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toDate;\n\nvar _index = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nfunction toDate(argument) {\n (0, _index.default)(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}\n\nmodule.exports = exports.default;","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar BrowserInfo = /** @class */ (function () {\n function BrowserInfo(name, version, os) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.type = 'browser';\n }\n return BrowserInfo;\n}());\nexport { BrowserInfo };\nvar NodeInfo = /** @class */ (function () {\n function NodeInfo(version) {\n this.version = version;\n this.type = 'node';\n this.name = 'node';\n this.os = process.platform;\n }\n return NodeInfo;\n}());\nexport { NodeInfo };\nvar SearchBotDeviceInfo = /** @class */ (function () {\n function SearchBotDeviceInfo(name, version, os, bot) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.bot = bot;\n this.type = 'bot-device';\n }\n return SearchBotDeviceInfo;\n}());\nexport { SearchBotDeviceInfo };\nvar BotInfo = /** @class */ (function () {\n function BotInfo() {\n this.type = 'bot';\n this.bot = true; // NOTE: deprecated test name instead\n this.name = 'bot';\n this.version = null;\n this.os = null;\n }\n return BotInfo;\n}());\nexport { BotInfo };\nvar ReactNativeInfo = /** @class */ (function () {\n function ReactNativeInfo() {\n this.type = 'react-native';\n this.name = 'react-native';\n this.version = null;\n this.os = null;\n }\n return ReactNativeInfo;\n}());\nexport { ReactNativeInfo };\n// tslint:disable-next-line:max-line-length\nvar SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;\nvar SEARCHBOT_OS_REGEX = /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/;\nvar REQUIRED_VERSION_PARTS = 3;\nvar userAgentRules = [\n ['aol', /AOLShield\\/([0-9\\._]+)/],\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['edge-ios', /EdgiOS\\/([0-9\\._]+)/],\n ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\n ['kakaotalk', /KAKAOTALK\\s([0-9\\.]+)/],\n ['samsung', /SamsungBrowser\\/([0-9\\.]+)/],\n ['silk', /\\bSilk\\/([0-9._-]+)\\b/],\n ['miui', /MiuiBrowser\\/([0-9\\.]+)$/],\n ['beaker', /BeakerBrowser\\/([0-9\\.]+)/],\n ['edge-chromium', /EdgA?\\/([0-9\\.]+)/],\n [\n 'chromium-webview',\n /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n ],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['phantomjs', /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['fxios', /FxiOS\\/([0-9\\.]+)/],\n ['opera-mini', /Opera Mini.*Version\\/([0-9\\.]+)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n ['pie', /^Microsoft Pocket Internet Explorer\\/(\\d+\\.\\d+)$/],\n ['pie', /^Mozilla\\/\\d\\.\\d+\\s\\(compatible;\\s(?:MSP?IE|MSInternet Explorer) (\\d+\\.\\d+);.*Windows CE.*\\)$/],\n ['netfront', /^Mozilla\\/\\d\\.\\d+.*NetFront\\/(\\d.\\d)/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n ['facebook', /FB[AS]V\\/([0-9\\.]+)/],\n ['instagram', /Instagram\\s([0-9\\.]+)/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n ['curl', /^curl\\/([0-9\\.]+)$/],\n ['searchbot', SEARCHBOX_UA_REGEX],\n];\nvar operatingSystemRules = [\n ['iOS', /iP(hone|od|ad)/],\n ['Android OS', /Android/],\n ['BlackBerry OS', /BlackBerry|BB10/],\n ['Windows Mobile', /IEMobile/],\n ['Amazon OS', /Kindle/],\n ['Windows 3.11', /Win16/],\n ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],\n ['Windows 98', /(Windows 98)|(Win98)/],\n ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],\n ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],\n ['Windows Server 2003', /(Windows NT 5.2)/],\n ['Windows Vista', /(Windows NT 6.0)/],\n ['Windows 7', /(Windows NT 6.1)/],\n ['Windows 8', /(Windows NT 6.2)/],\n ['Windows 8.1', /(Windows NT 6.3)/],\n ['Windows 10', /(Windows NT 10.0)/],\n ['Windows ME', /Windows ME/],\n ['Windows CE', /Windows CE|WinCE|Microsoft Pocket Internet Explorer/],\n ['Open BSD', /OpenBSD/],\n ['Sun OS', /SunOS/],\n ['Chrome OS', /CrOS/],\n ['Linux', /(Linux)|(X11)/],\n ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],\n ['QNX', /QNX/],\n ['BeOS', /BeOS/],\n ['OS/2', /OS\\/2/],\n];\nexport function detect(userAgent) {\n if (!!userAgent) {\n return parseUserAgent(userAgent);\n }\n if (typeof document === 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative') {\n return new ReactNativeInfo();\n }\n if (typeof navigator !== 'undefined') {\n return parseUserAgent(navigator.userAgent);\n }\n return getNodeVersion();\n}\nfunction matchUserAgent(ua) {\n // opted for using reduce here rather than Array#first with a regex.test call\n // this is primarily because using the reduce we only perform the regex\n // execution once rather than once for the test and for the exec again below\n // probably something that needs to be benchmarked though\n return (ua !== '' &&\n userAgentRules.reduce(function (matched, _a) {\n var browser = _a[0], regex = _a[1];\n if (matched) {\n return matched;\n }\n var uaMatch = regex.exec(ua);\n return !!uaMatch && [browser, uaMatch];\n }, false));\n}\nexport function browserName(ua) {\n var data = matchUserAgent(ua);\n return data ? data[0] : null;\n}\nexport function parseUserAgent(ua) {\n var matchedRule = matchUserAgent(ua);\n if (!matchedRule) {\n return null;\n }\n var name = matchedRule[0], match = matchedRule[1];\n if (name === 'searchbot') {\n return new BotInfo();\n }\n // Do not use RegExp for split operation as some browser do not support it (See: http://blog.stevenlevithan.com/archives/cross-browser-split)\n var versionParts = match[1] && match[1].split('.').join('_').split('_').slice(0, 3);\n if (versionParts) {\n if (versionParts.length < REQUIRED_VERSION_PARTS) {\n versionParts = __spreadArray(__spreadArray([], versionParts, true), createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length), true);\n }\n }\n else {\n versionParts = [];\n }\n var version = versionParts.join('.');\n var os = detectOS(ua);\n var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua);\n if (searchBotMatch && searchBotMatch[1]) {\n return new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]);\n }\n return new BrowserInfo(name, version, os);\n}\nexport function detectOS(ua) {\n for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {\n var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];\n var match = regex.exec(ua);\n if (match) {\n return os;\n }\n }\n return null;\n}\nexport function getNodeVersion() {\n var isNode = typeof process !== 'undefined' && process.version;\n return isNode ? new NodeInfo(process.version.slice(1)) : null;\n}\nfunction createVersionParts(count) {\n var output = [];\n for (var ii = 0; ii < count; ii++) {\n output.push('0');\n }\n return output;\n}\n","import Ember from 'ember';\nimport { defer } from 'rsvp';\nimport { Environment } from './external/environment';\nimport { assert } from '@ember/debug';\nimport { join, next, schedule } from '@ember/runloop';\n\nexport class EmberEnvironment extends Environment {\n assert(...args) {\n assert(...args);\n }\n\n async(callback) {\n join(() => schedule('actions', callback));\n }\n\n reportUncaughtRejection(error) {\n next(null, function () {\n if (Ember.onerror) {\n Ember.onerror(error);\n } else {\n throw error;\n }\n });\n }\n\n defer() {\n return defer();\n }\n\n globalDebuggingEnabled() {\n return Ember.ENV.DEBUG_TASKS;\n }\n}\n\nexport const EMBER_ENVIRONMENT = new EmberEnvironment();\n","export class Environment {\n assert() {}\n\n async(callback) {\n Promise.resolve().then(callback);\n }\n\n reportUncaughtRejection() {\n this.async((error) => {\n throw error;\n });\n }\n\n defer() {\n let deferable = {\n promise: null,\n resolve: null,\n reject: null,\n };\n\n let promise = new Promise((resolve, reject) => {\n deferable.resolve = resolve;\n deferable.reject = reject;\n });\n\n deferable.promise = promise;\n\n return deferable;\n }\n\n globalDebuggingEnabled() {\n return false;\n }\n}\n\nexport const DEFAULT_ENVIRONMENT = new Environment();\n","class BoundedPolicy {\n constructor(maxConcurrency) {\n this.maxConcurrency = maxConcurrency || 1;\n }\n}\n\nexport default BoundedPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { makeCancelState, STARTED } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n `it belongs to a 'drop' Task that was already running`,\n);\n\nclass DropReducer {\n constructor(remainingSlots) {\n this.remainingSlots = remainingSlots;\n }\n\n step() {\n if (this.remainingSlots > 0) {\n this.remainingSlots--;\n return STARTED;\n }\n\n return CANCELLED;\n }\n}\n\nclass DropPolicy extends BoundedPolicy {\n makeReducer() {\n return new DropReducer(this.maxConcurrency);\n }\n}\n\nexport default DropPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, QUEUED } from './execution-states';\n\nclass EnqueuedReducer {\n constructor(remainingSlots) {\n this.remainingSlots = remainingSlots;\n }\n\n step() {\n if (this.remainingSlots > 0) {\n this.remainingSlots--;\n return STARTED;\n } else {\n return QUEUED;\n }\n }\n}\n\nclass EnqueuedPolicy extends BoundedPolicy {\n makeReducer() {\n return new EnqueuedReducer(this.maxConcurrency);\n }\n}\n\nexport default EnqueuedPolicy;\n","export const TYPE_CANCELLED = 'CANCELLED';\nexport const TYPE_STARTED = 'STARTED';\nexport const TYPE_QUEUED = 'QUEUED';\n\nexport const STARTED = { type: TYPE_STARTED };\nexport const QUEUED = { type: TYPE_QUEUED };\n\nexport const makeCancelState = (reason) => ({ type: TYPE_CANCELLED, reason });\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, QUEUED, makeCancelState } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n `it belongs to a 'keepLatest' Task that was already running`,\n);\n\n// Given:\n// - started tasks: [a,b,_]\n// - queued tasks: [c,d,e,f]\n// KeepLatest will cancel all but the last queued task instance, producing:\n// - started tasks: [a,b,c]\n// - queued tasks: [f]\n\n// TODO: perhaps we should expose another config for the number to keep enqueued.\n// this would also make sense for enqueued, e.g. perform a max of maxConcurrency\n// concurrent task instances, but after a number of queued instances has been\n// reached, they should be cancelled.\n\nclass KeepLatestReducer {\n constructor(remainingSlots, numToCancel) {\n this.remainingSlots = remainingSlots;\n this.numToCancel = numToCancel;\n }\n\n step() {\n if (this.remainingSlots > 0) {\n this.remainingSlots--;\n return STARTED;\n } else {\n if (this.numToCancel > 0) {\n this.numToCancel--;\n return CANCELLED;\n } else {\n return QUEUED;\n }\n }\n }\n}\n\nclass KeepLatestPolicy extends BoundedPolicy {\n makeReducer(numRunning, numQueued) {\n let maxEnqueued = 1;\n let totalRunning = numRunning + numQueued;\n return new KeepLatestReducer(\n this.maxConcurrency,\n totalRunning - this.maxConcurrency - maxEnqueued,\n );\n }\n}\n\nexport default KeepLatestPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, makeCancelState } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n `it belongs to a 'restartable' Task that was .perform()ed again`,\n);\n\nclass RestartableReducer {\n constructor(numToCancel) {\n this.numToCancel = numToCancel;\n }\n\n step() {\n if (this.numToCancel > 0) {\n this.numToCancel--;\n return CANCELLED;\n } else {\n return STARTED;\n }\n }\n}\n\nclass RestartablePolicy extends BoundedPolicy {\n makeReducer(numRunning, numQueued) {\n return new RestartableReducer(numRunning + numQueued - this.maxConcurrency);\n }\n}\n\nexport default RestartablePolicy;\n","import {\n TYPE_STARTED,\n TYPE_QUEUED,\n TYPE_CANCELLED,\n} from './policies/execution-states';\n\nconst LAST_APPLIED_TAGS = new Map();\n\nclass Refresh {\n constructor(schedulerPolicy, stateTracker, taskInstances) {\n this.stateTracker = stateTracker;\n this.schedulerPolicy = schedulerPolicy;\n this.initialTaskInstances = taskInstances;\n this.startingInstances = [];\n }\n\n process() {\n let [taskInstances, numRunning, numQueued] =\n this.filterFinishedTaskInstances();\n let reducer = this.schedulerPolicy.makeReducer(numRunning, numQueued);\n\n let finalTaskInstances = taskInstances.filter((taskInstance) => {\n return this.setTaskInstanceExecutionState(taskInstance, reducer.step());\n });\n\n this.stateTracker.computeFinalStates((state) => this.applyState(state));\n this.startingInstances.forEach((taskInstance) => taskInstance.start());\n\n return finalTaskInstances;\n }\n\n filterFinishedTaskInstances() {\n let numRunning = 0,\n numQueued = 0;\n let taskInstances = this.initialTaskInstances.filter((taskInstance) => {\n let taskState = this.stateTracker.stateFor(taskInstance.task);\n let executorState = taskInstance.executor.state;\n\n if (executorState.isFinished) {\n taskState.onCompletion(taskInstance);\n return false;\n }\n\n if (executorState.hasStarted) {\n numRunning += 1;\n } else {\n numQueued += 1;\n }\n\n return true;\n });\n return [taskInstances, numRunning, numQueued];\n }\n\n setTaskInstanceExecutionState(taskInstance, desiredState) {\n let taskState = this.stateTracker.stateFor(taskInstance.task);\n\n if (!taskInstance.executor.counted) {\n taskInstance.executor.counted = true;\n taskState.onPerformed(taskInstance);\n }\n\n switch (desiredState.type) {\n case TYPE_CANCELLED:\n // this will cause a follow up flush which will detect and recompute cancellation state\n taskInstance.cancel(desiredState.reason);\n return false;\n case TYPE_STARTED:\n if (!taskInstance.executor.state.hasStarted) {\n this.startingInstances.push(taskInstance);\n taskState.onStart(taskInstance);\n }\n taskState.onRunning(taskInstance);\n return true;\n case TYPE_QUEUED:\n taskState.onQueued(taskInstance);\n // TODO: assert taskInstance hasn't started?\n // Or perhaps this can be a way to pause a task?\n return true;\n }\n }\n\n applyState(state) {\n let { taskable } = state;\n\n if (!taskable.onState) {\n return;\n }\n\n const { guid } = taskable;\n\n if (\n LAST_APPLIED_TAGS.has(guid) &&\n state.tag < LAST_APPLIED_TAGS.get(guid)\n ) {\n return;\n }\n\n let props = Object.assign(\n {\n numRunning: state.numRunning,\n numQueued: state.numQueued,\n numPerformedInc: state.numPerformedInc,\n },\n state.attrs,\n );\n\n taskable.onState(props, taskable);\n\n LAST_APPLIED_TAGS.set(guid, state.tag);\n }\n}\n\nexport default Refresh;\n","import {\n COMPLETION_SUCCESS,\n COMPLETION_ERROR,\n COMPLETION_CANCEL,\n} from '../../task-instance/completion-states';\n\nclass RefreshState {\n constructor(taskable, tag) {\n this.taskable = taskable;\n this.group = taskable.group;\n this.numRunning = 0;\n this.numQueued = 0;\n this.numPerformedInc = 0;\n this.attrs = {};\n this.tag = tag;\n }\n\n onCompletion(taskInstance) {\n let state = taskInstance.completionState;\n this.attrs.lastRunning = null;\n this.attrs.lastComplete = taskInstance;\n if (state === COMPLETION_SUCCESS) {\n this.attrs.lastSuccessful = taskInstance;\n } else {\n if (state === COMPLETION_ERROR) {\n this.attrs.lastErrored = taskInstance;\n } else if (state === COMPLETION_CANCEL) {\n this.attrs.lastCanceled = taskInstance;\n }\n this.attrs.lastIncomplete = taskInstance;\n }\n }\n\n onPerformed(taskInstance) {\n this.numPerformedInc += 1;\n this.attrs.lastPerformed = taskInstance;\n }\n\n onStart(taskInstance) {\n this.attrs.last = taskInstance;\n }\n\n onRunning(taskInstance) {\n this.attrs.lastRunning = taskInstance;\n this.numRunning += 1;\n }\n\n onQueued() {\n this.numQueued += 1;\n }\n\n recurseTaskGroups(callback) {\n let group = this.group;\n while (group) {\n callback(group);\n group = group.group;\n }\n }\n\n applyStateFrom(other) {\n Object.assign(this.attrs, other.attrs);\n this.numRunning += other.numRunning;\n this.numQueued += other.numQueued;\n this.numPerformedInc += other.numPerformedInc;\n }\n}\n\nexport default RefreshState;\n","import RefreshState from './state';\n\nconst CURRENT_REFRESH_TAGS = new Map();\n\nclass StateTracker {\n constructor() {\n this.states = new Map();\n }\n\n stateFor(taskable) {\n let guid = taskable.guid;\n let taskState = this.states.get(guid);\n if (!taskState) {\n let currentTag = CURRENT_REFRESH_TAGS.has(guid)\n ? CURRENT_REFRESH_TAGS.get(guid)\n : 0;\n taskState = new RefreshState(taskable, ++currentTag);\n this.states.set(guid, taskState);\n CURRENT_REFRESH_TAGS.set(guid, currentTag);\n }\n return taskState;\n }\n\n // After cancelling/queueing task instances, we have to recompute the derived state\n // of all the tasks that had/have task instances in this scheduler. We do this by\n // looping through all the Tasks that we've accumulated state for, and then recursively\n // applying/adding to the state of any TaskGroups they belong to.\n computeFinalStates(callback) {\n this.computeRecursiveState();\n this.forEachState((state) => callback(state));\n }\n\n computeRecursiveState() {\n this.forEachState((taskState) => {\n let lastState = taskState;\n taskState.recurseTaskGroups((taskGroup) => {\n let state = this.stateFor(taskGroup);\n state.applyStateFrom(lastState);\n lastState = state;\n });\n });\n }\n\n forEachState(callback) {\n this.states.forEach((state) => callback(state));\n }\n}\n\nexport default StateTracker;\n","import NullState from './null-state';\n\nconst NULL_STATE = new NullState();\n\nclass NullStateTracker {\n stateFor() {\n return NULL_STATE;\n }\n\n computeFinalStates() {}\n}\n\nexport default NullStateTracker;\n","class NullState {\n onCompletion() {}\n onPerformed() {}\n onStart() {}\n onRunning() {}\n onQueued() {}\n}\n\nexport default NullState;\n","import SchedulerRefresh from './refresh';\nimport StateTracker from './state-tracker/state-tracker';\nimport NullStateTracker from './state-tracker/null-state-tracker';\n\n// Scheduler base class\n\n// When a Task is performed, it creates an unstarted TaskInstance and\n// passes it to the Scheduler to determine when it should run. The\n// scheduler consults the schedulerPolicy (e.g. DropPolicy, RestartablePolicy, etc)\n// to determine whether the task instance should start executing, be enqueued\n// for later execution, or be immediately cancelled. As TaskInstances start\n// and run to completion, the Scheduler's `refresh()` method is called to\n// give it an opportunity to start (or cancel) previously enqueued task instances,\n// as well as update the derived state on Tasks and TaskGroups.\n\n// Every Task has its own Scheduler instance, unless it is part of a group,\n// in which case all the Tasks in a group share a single Scheduler.\n\nclass Scheduler {\n constructor(schedulerPolicy, stateTrackingEnabled) {\n this.schedulerPolicy = schedulerPolicy;\n this.stateTrackingEnabled = stateTrackingEnabled;\n this.taskInstances = [];\n }\n\n cancelAll(guid, cancelRequest) {\n let cancelations = this.taskInstances\n .map((taskInstance) => {\n if (taskInstance.task.guids[guid]) {\n taskInstance.executor.cancel(cancelRequest);\n }\n })\n .filter((cancelation) => !!cancelation);\n\n return Promise.all(cancelations);\n }\n\n perform(taskInstance) {\n taskInstance.onFinalize(() => this.scheduleRefresh());\n this.taskInstances.push(taskInstance);\n this.refresh();\n }\n\n scheduleRefresh() {\n Promise.resolve().then(() => this.refresh());\n }\n\n refresh() {\n let stateTracker = this.stateTrackingEnabled\n ? new StateTracker()\n : new NullStateTracker();\n let refresh = new SchedulerRefresh(\n this.schedulerPolicy,\n stateTracker,\n this.taskInstances,\n );\n this.taskInstances = refresh.process();\n }\n}\n\nexport default Scheduler;\n","import { STARTED } from './execution-states';\n\nclass UnboundedReducer {\n step() {\n return STARTED;\n }\n}\n\nconst SINGLETON_REDUCER = new UnboundedReducer();\n\nclass UnboundedPolicy {\n makeReducer() {\n return SINGLETON_REDUCER;\n }\n}\n\nexport default UnboundedPolicy;\n","import Scheduler from './scheduler/scheduler';\nimport UnboundedSchedulerPolicy from './scheduler/policies/unbounded-policy';\nimport EnqueueSchedulerPolicy from './scheduler/policies/enqueued-policy';\nimport DropSchedulerPolicy from './scheduler/policies/drop-policy';\nimport KeepLatestSchedulerPolicy from './scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './scheduler/policies/restartable-policy';\nimport { Task } from './task/task';\nimport { TaskGroup } from './task/task-group';\nimport { DEFAULT_ENVIRONMENT } from './environment';\n\nfunction assertModifiersNotMixedWithGroup(obj) {\n if (obj._hasSetConcurrencyConstraint && obj._taskGroupPath) {\n throw new Error(\n `Cannot use both 'group' and other concurrency-constraining task modifiers (e.g. 'drop', 'enqueue', 'restartable')`,\n );\n }\n}\n\nfunction assertUnsetBufferPolicy(obj) {\n if (obj._hasSetBufferPolicy) {\n throw new Error(\n `Cannot set multiple buffer policies on a task or task group. ${obj._schedulerPolicyClass} has already been set for task or task group '${obj.name}'`,\n );\n }\n}\n\nconst MODIFIER_REGISTRY = {\n enqueue: (factory, value) =>\n value && factory.setBufferPolicy(EnqueueSchedulerPolicy),\n evented: (factory, value) => value && factory.setEvented(value),\n debug: (factory, value) => value && factory.setDebug(value),\n drop: (factory, value) =>\n value && factory.setBufferPolicy(DropSchedulerPolicy),\n group: (factory, groupName) => factory.setGroup(groupName),\n keepLatest: (factory, value) =>\n value && factory.setBufferPolicy(KeepLatestSchedulerPolicy),\n maxConcurrency: (factory, maxConcurrency) =>\n factory.setMaxConcurrency(maxConcurrency),\n onState: (factory, onStateCallback) => factory.setOnState(onStateCallback),\n restartable: (factory, value) =>\n value && factory.setBufferPolicy(RestartableSchedulerPolicy),\n};\n\n/**\n * Callback type defining a task modifier\n *\n * @callback TaskFactory~TaskModifier\n * @param {TaskFactory} factory\n * @param {*} taskModifierOption\n */\n\n/**\n * Registers a new modifier with the modifier registry\n *\n * @param {string} name Name of the modifier\n * @param {TaskFactory~TaskModifier} callback\n */\nexport function registerModifier(name, callback) {\n if (MODIFIER_REGISTRY[name]) {\n throw new Error(\n `A modifier with the name '${name}' has already been defined.`,\n );\n }\n\n MODIFIER_REGISTRY[name] = callback;\n}\n\n/**\n * Returns a specified modifier, if it exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {TaskFactory~TaskModifier?}\n */\nexport function getModifier(name) {\n return MODIFIER_REGISTRY[name];\n}\n\n/**\n * Returns whether a specified modifier exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {boolean}\n */\nexport function hasModifier(name) {\n return name in MODIFIER_REGISTRY;\n}\n\n/**\n * Factory used for instantiating Tasks and Task Groups. Mostly for internal\n * use, but some public APIs exposed via the Task Modifier APIs.\n *\n * <style>\n * .ignore-this--this-is-here-to-hide-constructor,\n * #TaskFactory { display: none }\n * </style>\n *\n * @class TaskFactory\n */\nexport class TaskFactory {\n env = DEFAULT_ENVIRONMENT;\n\n _debug = null;\n _enabledModifiers = [];\n _hasSetConcurrencyConstraint = false;\n _hasSetBufferPolicy = false;\n _hasEnabledEvents = false;\n _maxConcurrency = null;\n _onStateCallback = (state, taskable) => taskable.setState(state);\n _schedulerPolicyClass = UnboundedSchedulerPolicy;\n _taskGroupPath = null;\n\n constructor(name = '<unknown>', taskDefinition = null, options = {}) {\n this.name = name;\n this.taskDefinition = taskDefinition;\n this.options = options;\n this._processModifierOptions(options);\n }\n\n /**\n * Returns a new Task bound to the given context\n *\n * @protected\n * @param {*} context\n * @returns {Task}\n */\n createTask(context) {\n let options = this.getTaskOptions(context);\n\n return new Task(\n Object.assign(\n {\n generatorFactory: (args) => this.taskDefinition.apply(context, args),\n },\n options,\n ),\n );\n }\n\n /**\n * Returns a new TaskGroup bound to the given context\n *\n * @protected\n * @param {*} context\n * @returns {Task}\n */\n createTaskGroup(context) {\n let options = this.getTaskOptions(context);\n\n return new TaskGroup(options);\n }\n\n /**\n * Returns a modifier callback with the given name bound to this TaskFactory,\n * if registered.\n *\n * @protected\n * @param {string} name\n * @returns {TaskFactory~TaskModifier?}\n */\n getModifier(name) {\n if (hasModifier(name)) {\n return MODIFIER_REGISTRY[name].bind(null, this);\n }\n }\n\n /**\n * Returns the options provided to TaskFactory\n *\n * @public\n * @returns {object}\n */\n getOptions() {\n return this.options;\n }\n\n /**\n * Returns a new Scheduler instance\n *\n * @protected\n * @param {*} schedulerPolicy\n * @param {boolean} stateTrackingEnabled\n * @returns {Scheduler}\n */\n getScheduler(schedulerPolicy, stateTrackingEnabled) {\n return new Scheduler(schedulerPolicy, stateTrackingEnabled);\n }\n\n /**\n * Returns the options to pass to a Task or TaskGroup constructor\n *\n * @protected\n * @param {*} context\n * @returns {object}\n */\n getTaskOptions(context) {\n let group, scheduler;\n let onStateCallback = this._onStateCallback;\n\n if (this._taskGroupPath) {\n group = context[this._taskGroupPath];\n if (!(group instanceof TaskGroup)) {\n throw new Error(\n `Expected group '${this._taskGroupPath}' to be defined but was not found.`,\n );\n }\n\n scheduler = group.scheduler;\n } else {\n let schedulerPolicy = new this._schedulerPolicyClass(\n this._maxConcurrency,\n );\n scheduler = this.getScheduler(\n schedulerPolicy,\n onStateCallback && typeof onStateCallback === 'function',\n );\n }\n\n return {\n context,\n debug: this._debug,\n env: this.env,\n name: this.name,\n group,\n scheduler,\n hasEnabledEvents: this._hasEnabledEvents,\n onStateCallback,\n enabledModifiers: this._enabledModifiers,\n modifierOptions: this.getOptions(),\n };\n }\n\n /**\n * Sets the Scheduler buffer policy class to the specified value.\n *\n * Will raise an assertion if a buffer policy has already been specified\n *\n * @param {*} policy\n * @returns {TaskFactory}\n */\n setBufferPolicy(policy) {\n assertUnsetBufferPolicy(this);\n this._hasSetBufferPolicy = true;\n this._hasSetConcurrencyConstraint = true;\n this._schedulerPolicyClass = policy;\n assertModifiersNotMixedWithGroup(this);\n\n return this;\n }\n\n /**\n * Sets debug mode\n *\n * @param {boolean} enabled\n * @returns {TaskFactory}\n */\n setDebug(enabled) {\n this._debug = enabled;\n return this;\n }\n\n /**\n * Sets whether Task will dispatch Task events or not\n *\n * @param {boolean} enabled\n * @returns {TaskFactory}\n */\n setEvented(enabled) {\n this._hasEnabledEvents = enabled;\n return this;\n }\n\n /**\n * Sets Scheduling policy's `maxConcurrency`\n *\n * @param {number} maxConcurrency\n * @returns {TaskFactory}\n */\n setMaxConcurrency(maxConcurrency) {\n this._hasSetConcurrencyConstraint = true;\n this._maxConcurrency = maxConcurrency;\n return this;\n }\n\n /**\n * Assigns Task created from this factory to the specified group name\n *\n * @param {string} group\n * @returns {TaskFactory}\n */\n setGroup(group) {\n this._taskGroupPath = group;\n return this;\n }\n\n /**\n * Sets the name of tasks created from this factory\n *\n * @param {string} name\n * @returns {TaskFactory}\n */\n setName(name) {\n this.name = name;\n return this;\n }\n\n /**\n * Sets the callback used on state updates. Can be set to null to disable\n * state tracking on tasks.\n *\n * @param {function} onStateCallback\n * @returns {TaskFactory}\n */\n setOnState(onStateCallback) {\n this._onStateCallback = onStateCallback;\n return this;\n }\n\n /**\n * Sets the definition for tasks created from this factory\n *\n * @param {*} taskDefinition\n * @returns {TaskFactory}\n */\n setTaskDefinition(taskDefinition) {\n this.taskDefinition = taskDefinition;\n return this;\n }\n\n _processModifierOptions(options) {\n if (!options) {\n return;\n }\n\n for (let key of Object.keys(options)) {\n let value = options[key];\n let modifier = this.getModifier(key);\n\n if (typeof modifier === 'function' && modifier(value)) {\n this._enabledModifiers.push(key);\n }\n }\n }\n}\n","export const TASK_CANCELATION_NAME = 'TaskCancelation';\n\n/**\n * Returns true if the object passed to it is a TaskCancelation error.\n * If you call `someTask.perform().catch(...)` or otherwise treat\n * a {@linkcode TaskInstance} like a promise, you may need to\n * handle the cancelation of a TaskInstance differently from\n * other kinds of errors it might throw, and you can use this\n * convenience function to distinguish cancelation from errors.\n *\n * ```js\n * click() {\n * this.myTask.perform().catch(e => {\n * if (!didCancel(e)) { throw e; }\n * });\n * }\n * ```\n *\n * @param {object} error the caught error, which might be a TaskCancelation\n * @returns {boolean}\n */\nexport function didCancel(e) {\n return e && e.name === TASK_CANCELATION_NAME;\n}\n\nexport const CANCEL_KIND_EXPLICIT = 'explicit';\nexport const CANCEL_KIND_YIELDABLE_CANCEL = 'yielded';\nexport const CANCEL_KIND_LIFESPAN_END = 'lifespan_end';\nexport const CANCEL_KIND_PARENT_CANCEL = 'parent_cancel';\n\nexport class CancelRequest {\n constructor(kind, reason) {\n this.kind = kind;\n this.reason = reason;\n this.promise = new Promise((resolve) => {\n this.finalize = resolve;\n });\n }\n}\n","export const COMPLETION_PENDING = 0;\nexport const COMPLETION_SUCCESS = 1;\nexport const COMPLETION_ERROR = 2;\nexport const COMPLETION_CANCEL = 3;\n","export class GeneratorStepResult {\n constructor(value, done, errored) {\n this.value = value;\n this.done = done;\n this.errored = errored;\n }\n}\n\nexport class GeneratorState {\n constructor(generatorFactory) {\n this.done = false;\n this.generatorFactory = generatorFactory;\n this.iterator = null;\n }\n\n step(resolvedValue, iteratorMethod) {\n try {\n let iterator = this.getIterator();\n let { value, done } = iterator[iteratorMethod](resolvedValue);\n\n if (done) {\n return this.finalize(value, false);\n } else {\n return new GeneratorStepResult(value, false, false);\n }\n } catch (e) {\n return this.finalize(e, true);\n }\n }\n\n getIterator() {\n if (!this.iterator && !this.done) {\n this.iterator = this.generatorFactory();\n }\n return this.iterator;\n }\n\n finalize(value, errored) {\n this.done = true;\n this.iterator = null;\n return new GeneratorStepResult(value, true, errored);\n }\n}\n","import { GeneratorState } from '../generator-state';\nimport { INITIAL_STATE } from './initial-state';\nimport {\n yieldableSymbol,\n YIELDABLE_CONTINUE,\n YIELDABLE_THROW,\n YIELDABLE_RETURN,\n YIELDABLE_CANCEL,\n cancelableSymbol,\n} from '../yieldables';\n\nimport {\n COMPLETION_SUCCESS,\n COMPLETION_ERROR,\n COMPLETION_CANCEL,\n} from './completion-states';\nimport {\n CancelRequest,\n CANCEL_KIND_YIELDABLE_CANCEL,\n CANCEL_KIND_LIFESPAN_END,\n CANCEL_KIND_PARENT_CANCEL,\n didCancel,\n TASK_CANCELATION_NAME,\n} from './cancelation';\n\nexport const PERFORM_TYPE_DEFAULT = 'PERFORM_TYPE_DEFAULT';\nexport const PERFORM_TYPE_UNLINKED = 'PERFORM_TYPE_UNLINKED';\nexport const PERFORM_TYPE_LINKED = 'PERFORM_TYPE_LINKED';\n\nconst CANCEL_RETURN_VALUE_SENTINEL = {};\nlet TASK_INSTANCE_STACK = [];\n\nexport function getRunningInstance() {\n return TASK_INSTANCE_STACK[TASK_INSTANCE_STACK.length - 1];\n}\n\nexport class TaskInstanceExecutor {\n constructor({ generatorFactory, env, debug }) {\n this.generatorState = new GeneratorState(generatorFactory);\n this.state = Object.assign({}, INITIAL_STATE);\n this.index = 1;\n this.disposers = [];\n this.finalizeCallbacks = [];\n this.env = env;\n this.debug = debug;\n this.cancelRequest = null;\n }\n\n start() {\n if (this.state.hasStarted || this.cancelRequest) {\n return;\n }\n this.setState({ hasStarted: true });\n this.proceedSync(YIELDABLE_CONTINUE, undefined);\n this.taskInstance.onStarted();\n }\n\n cancel(cancelRequest) {\n if (!this.requestCancel(cancelRequest)) {\n cancelRequest.finalize();\n return cancelRequest.promise;\n }\n\n if (this.state.hasStarted) {\n this.proceedWithCancelAsync();\n } else {\n this.finalizeWithCancel();\n }\n\n return this.cancelRequest.promise;\n }\n\n setState(state) {\n Object.assign(this.state, state);\n this.taskInstance.setState(this.state);\n }\n\n proceedChecked(index, yieldResumeType, value) {\n if (this.state.isFinished) {\n return;\n }\n if (!this.advanceIndex(index)) {\n return;\n }\n\n if (yieldResumeType === YIELDABLE_CANCEL) {\n this.requestCancel(\n new CancelRequest(CANCEL_KIND_YIELDABLE_CANCEL),\n value,\n );\n this.proceedWithCancelAsync();\n } else {\n this.proceedAsync(yieldResumeType, value);\n }\n }\n\n proceedWithCancelAsync() {\n this.proceedAsync(YIELDABLE_RETURN, CANCEL_RETURN_VALUE_SENTINEL);\n }\n\n proceedAsync(yieldResumeType, value) {\n this.advanceIndex(this.index);\n this.env.async(() => this.proceedSync(yieldResumeType, value));\n }\n\n proceedSync(yieldResumeType, value) {\n if (this.state.isFinished) {\n return;\n }\n\n this.dispose();\n\n if (this.generatorState.done) {\n this.handleResolvedReturnedValue(yieldResumeType, value);\n } else {\n this.handleResolvedContinueValue(yieldResumeType, value);\n }\n }\n\n /**\n * This method is called when a previously yielded value from\n * the generator has been resolved, and now it's time to pass\n * it back into the generator. There are 3 ways to \"resume\" a\n * generator:\n *\n * - call `.next(value)` on it, which is used to pass in a resolved\n * value (the fulfilled value of a promise), e.g. if a task generator fn\n * does `yield Promise.resolve(5)`, then we take that promise yielded\n * by the generator, detect that it's a promise, resolve it, and then\n * pass its fulfilled value `5` back into the generator function so\n * that it can continue executing.\n * - call `.throw(error)` on it, which throw an exception from where the\n * the generator previously yielded. We do this when the previously\n * yielded value resolves to an error value (e.g. a rejected promise\n * or a TaskInstance that finished with an error). Note that when you\n * resume a generator with a `.throw()`, it can still recover from that\n * thrown error and continue executing normally so long as the `yield`\n * was inside a `try/catch` statement.\n * - call `.return(value)` on it, causes the generator function to return\n * from where it previously `yield`ed. We use `.return()` when cancelling\n * a TaskInstance; by `.return`ing, rather than `.throw`ing, it allows\n * the generator function to skip `catch(e) {}` blocks, which is usually\n * reserved for actual errors/exceptions; if we `.throw`'d cancellations,\n * it would require all tasks that used try/catch to conditionally ignore\n * cancellations, which is annoying. So we `.return()` from generator functions\n * in the case of errors as a matter of convenience.\n *\n * @private\n */\n handleResolvedContinueValue(iteratorMethod, resumeValue) {\n let beforeIndex = this.index;\n let stepResult = this.generatorStep(resumeValue, iteratorMethod);\n\n // TODO: what is this doing? write breaking test.\n if (!this.advanceIndex(beforeIndex)) {\n return;\n }\n\n if (stepResult.errored) {\n this.finalize(stepResult.value, COMPLETION_ERROR);\n return;\n }\n\n this.handleYieldedValue(stepResult);\n }\n\n /**\n * This method is called when the generator function is all\n * out of values, and the last value returned from the function\n * (possible a thenable/yieldable/promise/etc) has been resolved.\n *\n * Possible cases:\n * - `return \"simple value\";` // resolved value is \"simple value\"\n * - `return undefined;` // (or omitted return) resolved value is undefined\n * - `return someTask.perform()` // resolved value is the value returned/resolved from someTask\n *\n * @private\n */\n handleResolvedReturnedValue(yieldResumeType, value) {\n switch (yieldResumeType) {\n case YIELDABLE_CONTINUE:\n case YIELDABLE_RETURN:\n this.finalize(value, COMPLETION_SUCCESS);\n break;\n case YIELDABLE_THROW:\n this.finalize(value, COMPLETION_ERROR);\n break;\n }\n }\n\n handleYieldedUnknownThenable(thenable) {\n let resumeIndex = this.index;\n thenable.then(\n (value) => {\n this.proceedChecked(resumeIndex, YIELDABLE_CONTINUE, value);\n },\n (error) => {\n this.proceedChecked(resumeIndex, YIELDABLE_THROW, error);\n },\n );\n }\n\n /**\n * The TaskInstance internally tracks an index/sequence number\n * (the `index` property) which gets incremented every time the\n * task generator function iterator takes a step. When a task\n * function is paused at a `yield`, there are two events that\n * cause the TaskInstance to take a step: 1) the yielded value\n * \"resolves\", thus resuming the TaskInstance's execution, or\n * 2) the TaskInstance is canceled. We need some mechanism to prevent\n * stale yielded value resolutions from resuming the TaskFunction\n * after the TaskInstance has already moved on (either because\n * the TaskInstance has since been canceled or because an\n * implementation of the Yieldable API tried to resume the\n * TaskInstance more than once). The `index` serves as\n * that simple mechanism: anyone resuming a TaskInstance\n * needs to pass in the `index` they were provided that acts\n * as a ticket to resume the TaskInstance that expires once\n * the TaskInstance has moved on.\n *\n * @private\n */\n advanceIndex(index) {\n if (this.index === index) {\n return ++this.index;\n }\n }\n\n handleYieldedValue(stepResult) {\n let yieldedValue = stepResult.value;\n if (!yieldedValue) {\n this.proceedWithSimpleValue(yieldedValue);\n return;\n }\n\n this.addDisposer(yieldedValue[cancelableSymbol]);\n\n if (yieldedValue[yieldableSymbol]) {\n this.invokeYieldable(yieldedValue);\n } else if (typeof yieldedValue.then === 'function') {\n this.handleYieldedUnknownThenable(yieldedValue);\n } else {\n this.proceedWithSimpleValue(yieldedValue);\n }\n }\n\n proceedWithSimpleValue(yieldedValue) {\n this.proceedAsync(YIELDABLE_CONTINUE, yieldedValue);\n }\n\n addDisposer(maybeDisposer) {\n if (typeof maybeDisposer !== 'function') {\n return;\n }\n\n this.disposers.push(maybeDisposer);\n }\n\n /**\n * Runs any disposers attached to the task's most recent `yield`.\n * For instance, when a task yields a TaskInstance, it registers that\n * child TaskInstance's disposer, so that if the parent task is canceled,\n * dispose() will run that disposer and cancel the child TaskInstance.\n *\n * @private\n */\n dispose() {\n let disposers = this.disposers;\n if (disposers.length === 0) {\n return;\n }\n this.disposers = [];\n disposers.forEach((disposer) => disposer());\n }\n\n /**\n * Calls .next()/.throw()/.return() on the task's generator function iterator,\n * essentially taking a single step of execution on the task function.\n *\n * @private\n */\n generatorStep(nextValue, iteratorMethod) {\n TASK_INSTANCE_STACK.push(this);\n let stepResult = this.generatorState.step(nextValue, iteratorMethod);\n TASK_INSTANCE_STACK.pop();\n\n // TODO: fix this!\n if (this._expectsLinkedYield) {\n let value = stepResult.value;\n if (!value || value.performType !== PERFORM_TYPE_LINKED) {\n // eslint-disable-next-line no-console\n console.warn(\n 'You performed a .linked() task without immediately yielding/returning it. This is currently unsupported (but might be supported in future version of ember-concurrency).',\n );\n }\n this._expectsLinkedYield = false;\n }\n\n return stepResult;\n }\n\n maybeResolveDefer() {\n if (!this.defer || !this.state.isFinished) {\n return;\n }\n\n if (this.state.completionState === COMPLETION_SUCCESS) {\n this.defer.resolve(this.state.value);\n } else {\n this.defer.reject(this.state.error);\n }\n }\n\n onFinalize(callback) {\n this.finalizeCallbacks.push(callback);\n\n if (this.state.isFinished) {\n this.runFinalizeCallbacks();\n }\n }\n\n runFinalizeCallbacks() {\n this.finalizeCallbacks.forEach((cb) => cb());\n this.finalizeCallbacks = [];\n this.maybeResolveDefer();\n this.maybeThrowUnhandledTaskErrorLater();\n }\n\n promise() {\n if (!this.defer) {\n this.defer = this.env.defer();\n this.asyncErrorsHandled = true;\n this.maybeResolveDefer();\n }\n return this.defer.promise;\n }\n\n maybeThrowUnhandledTaskErrorLater() {\n if (\n !this.asyncErrorsHandled &&\n this.state.completionState === COMPLETION_ERROR &&\n !didCancel(this.state.error)\n ) {\n this.env.async(() => {\n if (!this.asyncErrorsHandled) {\n this.env.reportUncaughtRejection(this.state.error);\n }\n });\n }\n }\n\n requestCancel(request) {\n if (this.cancelRequest || this.state.isFinished) {\n return false;\n }\n this.cancelRequest = request;\n return true;\n }\n\n finalize(value, completionState) {\n if (this.cancelRequest) {\n return this.finalizeWithCancel();\n }\n\n let state = { completionState };\n\n if (completionState === COMPLETION_SUCCESS) {\n state.isSuccessful = true;\n state.value = value;\n } else if (completionState === COMPLETION_ERROR) {\n state.isError = true;\n state.error = value;\n } else if (completionState === COMPLETION_CANCEL) {\n state.error = value;\n }\n\n this.finalizeShared(state);\n }\n\n finalizeWithCancel() {\n let cancelReason = this.taskInstance.formatCancelReason(\n this.cancelRequest.reason,\n );\n let error = new Error(cancelReason);\n\n if (this.debugEnabled()) {\n // eslint-disable-next-line no-console\n console.log(cancelReason);\n }\n\n error.name = TASK_CANCELATION_NAME;\n\n this.finalizeShared({\n isCanceled: true,\n completionState: COMPLETION_CANCEL,\n error,\n cancelReason,\n });\n\n this.cancelRequest.finalize();\n }\n\n debugEnabled() {\n return this.debug || this.env.globalDebuggingEnabled();\n }\n\n finalizeShared(state) {\n this.index++;\n state.isFinished = true;\n this.setState(state);\n this.runFinalizeCallbacks();\n this.dispatchFinalizeEvents(state.completionState);\n }\n\n dispatchFinalizeEvents(completionState) {\n switch (completionState) {\n case COMPLETION_SUCCESS:\n this.taskInstance.onSuccess();\n break;\n case COMPLETION_ERROR:\n this.taskInstance.onError(this.state.error);\n break;\n case COMPLETION_CANCEL:\n this.taskInstance.onCancel(this.state.cancelReason);\n break;\n }\n }\n\n invokeYieldable(yieldedValue) {\n try {\n let maybeDisposer = yieldedValue[yieldableSymbol](\n this.taskInstance,\n this.index,\n );\n this.addDisposer(maybeDisposer);\n } catch (e) {\n this.env.reportUncaughtRejection(e);\n }\n }\n\n /**\n * `onYielded` is called when this task instance has been\n * yielded in another task instance's execution. We take\n * this opportunity to conditionally link up the tasks\n * so that when the parent or child cancels, the other\n * is cancelled.\n *\n * Given the following case:\n *\n * ```js\n * parentTask: task(function * () {\n * yield otherTask.perform();\n * })\n * ```\n *\n * Then the `parent` param is the task instance that is executing, `this`\n * is the `otherTask` task instance that was yielded.\n *\n * @private\n */\n onYielded(parent, resumeIndex) {\n this.asyncErrorsHandled = true;\n\n this.onFinalize(() => {\n let completionState = this.state.completionState;\n if (completionState === COMPLETION_SUCCESS) {\n parent.proceed(resumeIndex, YIELDABLE_CONTINUE, this.state.value);\n } else if (completionState === COMPLETION_ERROR) {\n parent.proceed(resumeIndex, YIELDABLE_THROW, this.state.error);\n } else if (completionState === COMPLETION_CANCEL) {\n parent.proceed(resumeIndex, YIELDABLE_CANCEL, null);\n }\n });\n\n let performType = this.getPerformType();\n if (performType === PERFORM_TYPE_UNLINKED) {\n return;\n }\n\n return () => {\n this.detectSelfCancelLoop(performType, parent);\n this.cancel(new CancelRequest(CANCEL_KIND_PARENT_CANCEL));\n };\n }\n\n getPerformType() {\n return this.taskInstance.performType || PERFORM_TYPE_DEFAULT;\n }\n\n detectSelfCancelLoop(performType, parent) {\n if (performType !== PERFORM_TYPE_DEFAULT) {\n return;\n }\n\n let parentCancelRequest = parent.executor && parent.executor.cancelRequest;\n\n // Detect that the parent was cancelled by a lifespan ending and\n // that the child is still running and not cancelled.\n if (\n parentCancelRequest &&\n parentCancelRequest.kind === CANCEL_KIND_LIFESPAN_END &&\n !this.cancelRequest &&\n !this.state.isFinished\n ) {\n this.taskInstance.selfCancelLoopWarning(parent);\n }\n }\n}\n","import { COMPLETION_PENDING } from './completion-states';\n\nexport const INITIAL_STATE = {\n completionState: COMPLETION_PENDING,\n\n /**\n * If this TaskInstance runs to completion by returning a property\n * other than a rejecting promise, this property will be set\n * with that value.\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n value: null,\n\n /**\n * If this TaskInstance is canceled or throws an error (or yields\n * a promise that rejects), this property will be set with that error.\n * Otherwise, it is null.\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n error: null,\n\n /**\n * True if the task instance is fulfilled.\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n isSuccessful: false,\n\n /**\n * True if the task instance resolves to a rejection.\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n isError: false,\n\n /**\n * True if the task instance is canceled\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n isCanceled: false,\n\n /**\n * True if the task instance has started, else false.\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n hasStarted: false,\n\n /**\n * True if the task has run to completion.\n *\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n isFinished: false,\n};\n","export const DEFAULT_STATE = {\n last: null,\n lastRunning: null,\n lastPerformed: null,\n lastSuccessful: null,\n lastComplete: null,\n lastErrored: null,\n lastCanceled: null,\n lastIncomplete: null,\n performCount: 0,\n};\n\nObject.freeze(DEFAULT_STATE);\n","import { Taskable } from './taskable';\n\nexport class TaskGroup extends Taskable {}\n","import { Taskable } from './taskable';\nimport {\n PERFORM_TYPE_DEFAULT,\n PERFORM_TYPE_LINKED,\n PERFORM_TYPE_UNLINKED,\n getRunningInstance,\n TaskInstanceExecutor,\n} from '../task-instance/executor';\n\nclass TaskLinkProxy {\n constructor(task, performType, linkedObject) {\n this.task = task;\n this.performType = performType;\n this.linkedObject = linkedObject;\n }\n\n perform(...args) {\n return this.task._performShared(args, this.performType, this.linkedObject);\n }\n}\n\nexport class Task extends Taskable {\n constructor(options) {\n super(options);\n this.generatorFactory = options.generatorFactory;\n this.perform = this._perform.bind(this);\n }\n\n linked() {\n let linkedObject = getRunningInstance();\n if (!linkedObject) {\n throw new Error(`You can only call .linked() from within a task.`);\n }\n\n return new TaskLinkProxy(this, PERFORM_TYPE_LINKED, linkedObject);\n }\n\n unlinked() {\n return new TaskLinkProxy(this, PERFORM_TYPE_UNLINKED, null);\n }\n\n toString() {\n return `<Task:${this.name}>`;\n }\n\n _clone() {\n return new Task({\n context: this.context,\n debug: this.debug,\n env: this.env,\n generatorFactory: this.generatorFactory,\n group: this.group,\n hasEnabledEvents: this.hasEnabledEvents,\n name: this.name,\n onStateCallback: this.onStateCallback,\n scheduler: this.scheduler,\n });\n }\n\n _curry(...args) {\n let task = this._clone();\n task._curryArgs = [...(this._curryArgs || []), ...args];\n return task;\n }\n\n _perform(...args) {\n return this._performShared(args, PERFORM_TYPE_DEFAULT, null);\n }\n\n _performShared(args, performType, linkedObject) {\n let fullArgs = this._curryArgs ? [...this._curryArgs, ...args] : args;\n let taskInstance = this._taskInstanceFactory(\n fullArgs,\n performType,\n linkedObject,\n );\n\n if (performType === PERFORM_TYPE_LINKED) {\n linkedObject._expectsLinkedYield = true;\n }\n\n if (!this._isAlive) {\n // a task linked to a dead lifetime should immediately cancel.\n taskInstance.cancel();\n }\n\n this.scheduler.perform(taskInstance);\n return taskInstance;\n }\n\n // eslint-disable-next-line no-unused-vars\n _taskInstanceOptions(args, performType, _linkedObject) {\n let generatorFactory = () => this.generatorFactory(args);\n let taskInstanceOptions = {\n task: this,\n args,\n executor: new TaskInstanceExecutor({\n generatorFactory,\n env: this.env,\n debug: this.debug,\n }),\n performType,\n hasEnabledEvents: this.hasEnabledEvents,\n };\n\n return taskInstanceOptions;\n }\n}\n","import { DEFAULT_STATE } from './default-state';\nimport {\n CancelRequest,\n CANCEL_KIND_EXPLICIT,\n} from '../task-instance/cancelation';\n\nlet guidId = 0;\nfunction makeGuid() {\n return `ec_${guidId++}`;\n}\n\nexport class Taskable {\n constructor(options) {\n this.context = options.context;\n this.debug = options.debug || false;\n this.enabledModifiers = options.enabledModifiers;\n this.env = options.env;\n this.group = options.group;\n this.hasEnabledEvents = options.hasEnabledEvents;\n this.modifierOptions = options.modifierOptions;\n this.name = options.name;\n this.onStateCallback = options.onStateCallback;\n this.scheduler = options.scheduler;\n\n this.guid = makeGuid();\n this.guids = {};\n this.guids[this.guid] = true;\n if (this.group) {\n Object.assign(this.guids, this.group.guids);\n }\n }\n\n cancelAll(options) {\n let { reason, cancelRequestKind, resetState } = options || {};\n reason = reason || '.cancelAll() was explicitly called on the Task';\n\n let cancelRequest = new CancelRequest(\n cancelRequestKind || CANCEL_KIND_EXPLICIT,\n reason,\n );\n return this.scheduler.cancelAll(this.guid, cancelRequest).then(() => {\n if (resetState) {\n this._resetState();\n }\n });\n }\n\n get _isAlive() {\n return true;\n }\n\n _resetState() {\n this.setState(DEFAULT_STATE);\n }\n\n // override\n setState() {}\n}\n\nObject.assign(Taskable.prototype, DEFAULT_STATE);\nObject.assign(Taskable.prototype, {\n numRunning: 0,\n numQueued: 0,\n isRunning: false,\n isQueued: false,\n isIdle: true,\n state: 'idle',\n});\n","export const cancelableSymbol = '__ec_cancel__';\nexport const yieldableSymbol = '__ec_yieldable__';\nexport const YIELDABLE_CONTINUE = 'next';\nexport const YIELDABLE_THROW = 'throw';\nexport const YIELDABLE_RETURN = 'return';\nexport const YIELDABLE_CANCEL = 'cancel';\n\n/**\n * @class YieldableState\n * @hideconstructor\n */\nclass YieldableState {\n constructor(taskInstance, resumeIndex) {\n this._taskInstance = taskInstance;\n this._resumeIndex = resumeIndex;\n }\n\n /**\n * Return yielded TaskInstance. Useful for introspection on instance state.\n * @method getTaskInstance\n * @memberof YieldableState\n * @public\n * @instance\n */\n getTaskInstance() {\n return this._taskInstance;\n }\n\n /**\n * Cancel the yielded TaskInstance.\n * @method cancel\n * @memberof YieldableState\n * @public\n * @instance\n */\n cancel() {\n let taskInstance = this._taskInstance;\n taskInstance.proceed.call(\n taskInstance,\n this._resumeIndex,\n YIELDABLE_CANCEL,\n );\n }\n\n /**\n * Cause the TaskInstance to return from its yield with an optional value,\n * and continue executing.\n * @method next\n * @memberof YieldableState\n * @param value\n * @public\n * @instance\n */\n next(value) {\n let taskInstance = this._taskInstance;\n taskInstance.proceed.call(\n taskInstance,\n this._resumeIndex,\n YIELDABLE_CONTINUE,\n value,\n );\n }\n\n /**\n * Short-circuit TaskInstance execution and have it return with an optional\n * value.\n * @method return\n * @memberof YieldableState\n * @param value\n * @public\n * @instance\n */\n return(value) {\n let taskInstance = this._taskInstance;\n taskInstance.proceed.call(\n taskInstance,\n this._resumeIndex,\n YIELDABLE_RETURN,\n value,\n );\n }\n\n /**\n * Raise a given error within the given task instance and halt execution\n * @method throw\n * @memberof YieldableState\n * @param error\n * @public\n * @instance\n */\n throw(error) {\n let taskInstance = this._taskInstance;\n taskInstance.proceed.call(\n taskInstance,\n this._resumeIndex,\n YIELDABLE_THROW,\n error,\n );\n }\n}\n\n/**\n * Yieldables are a primitive for building safe, cancelation-aware ways to\n * instrument and introspect the runtime of a task. Many Yieldables are built-in\n * to ember-concurrency today, such as `timeout`, `animationFrame`, and\n * `rawTimeout`.\n *\n * For example, if I wanted to implement a yieldable for `requestIdleCallback`,\n * I could do the following:\n *\n * ```javascript\n * import Component from '@glimmer/component';\n * import { task, Yieldable } from 'ember-concurrency';\n *\n * class IdleCallbackYieldable extends Yieldable {\n * onYield(state) {\n * let callbackId = requestIdleCallback(() => state.next());\n *\n * return () => cancelIdleCallback(callbackId);\n * }\n * }\n *\n * const idleCallback = () => new IdleCallbackYieldable();\n *\n * class MyComponent extends Component {\n * @task *backgroundTask() {\n * while (1) {\n * yield idleCallback();\n *\n * const data = this.complicatedNumberCrunching();\n * yield this.sendData(data);\n * }\n * }\n * }\n * ```\n *\n * In general, `Yieldable` instances **should** be reusable across calls, and thus\n * care should be taken to ensure that teardown is provided and state not\n * intended to be shared across calls stay inside `onYield`.\n *\n * `Yieldable` also provides automatic Promise-casting.\n *\n * <style>\n * .ignore-this--this-is-here-to-hide-constructor,\n * #Yieldable { display: none }\n * </style>\n *\n * @class Yieldable\n */\nexport class Yieldable {\n constructor() {\n this[yieldableSymbol] = this[yieldableSymbol].bind(this);\n }\n\n /**\n * Defines what happens when the task encounters `yield myYieldable` and returns\n * a disposer function that handles any cleanup.\n *\n * The state parameter is provided by the runtime, and provides operations for\n * interacting with the yielding task instance and advancing, returning,\n * throwing, or canceling its execution.\n *\n * @method onYield\n * @memberof Yieldable\n * @param {YieldableState} state\n * @instance\n * @public\n */\n onYield() {}\n\n _deferable() {\n let def = { resolve: undefined, reject: undefined };\n\n def.promise = new Promise((resolve, reject) => {\n def.resolve = resolve;\n def.reject = reject;\n });\n\n return def;\n }\n\n _toPromise() {\n let def = this._deferable();\n\n let thinInstance = {\n proceed(_index, resumeType, value) {\n if (\n resumeType == YIELDABLE_CONTINUE ||\n resumeType == YIELDABLE_RETURN\n ) {\n def.resolve(value);\n } else {\n def.reject(value);\n }\n },\n };\n\n let maybeDisposer = this[yieldableSymbol](thinInstance, 0);\n def.promise[cancelableSymbol] = maybeDisposer;\n\n return def.promise;\n }\n\n /**\n * Returns a promise that resolves with the value yielded back to or returned\n * to the yielded task, or rejects with either the exception thrown from the\n * Yieldable, or an error with a `.name` property with value `\"TaskCancelation\"`.\n *\n * @method then\n * @memberof Yieldable\n * @instance\n * @return {Promise}\n */\n then(...args) {\n return this._toPromise().then(...args);\n }\n\n /**\n * @method catch\n * @memberof Yieldable\n * @instance\n * @return {Promise}\n */\n catch(...args) {\n return this._toPromise().catch(...args);\n }\n\n /**\n * @method finally\n * @memberof Yieldable\n * @instance\n * @return {Promise}\n */\n finally(...args) {\n return this._toPromise().finally(...args);\n }\n\n [yieldableSymbol](taskInstance, resumeIndex) {\n let state = new YieldableState(taskInstance, resumeIndex);\n\n return this.onYield(state);\n }\n}\n\nclass AnimationFrameYieldable extends Yieldable {\n onYield(state) {\n let timerId = requestAnimationFrame(() => state.next());\n\n return () => cancelAnimationFrame(timerId);\n }\n}\n\nclass ForeverYieldable extends Yieldable {\n onYield() {}\n}\n\nclass RawTimeoutYieldable extends Yieldable {\n constructor(ms) {\n super();\n this.ms = ms;\n }\n\n onYield(state) {\n let timerId = setTimeout(() => state.next(), this.ms);\n\n return () => clearTimeout(timerId);\n }\n}\n\n/**\n * Yielding `animationFrame()` will pause a task until after the next animation\n * frame using the native `requestAnimationFrame()` browser API.\n *\n * The task below, when performed, will print the time since the last loop run\n * for every animation frame.\n *\n * ```js\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * let lastNow = performance.now();\n * while (true) {\n * yield animationFrame();\n *\n * let now = performance.now();\n * let dt = now - lastNow;\n * lastNow = now;\n *\n * console.log(dt);\n * }\n * }\n * }\n * ```\n */\nexport function animationFrame() {\n return new AnimationFrameYieldable();\n}\n\n/**\n *\n * Yielding `forever` will pause a task indefinitely until\n * it is cancelled (i.e. via host object destruction, the restartable modifier,\n * or manual cancellation).\n *\n * This is often useful in cases involving animation: if you're\n * using Liquid Fire, or some other animation scheme, sometimes you'll\n * notice buttons visibly reverting to their inactive states during\n * a route transition. By yielding `forever` in a Component task that drives a\n * button's active state, you can keep a task indefinitely running\n * until the animation runs to completion.\n *\n * NOTE: Liquid Fire also includes a useful `waitUntilIdle()` method\n * on the `liquid-fire-transitions` service that you can use in a lot\n * of these cases, but it won't cover cases of asynchrony that are\n * unrelated to animation, in which case `forever` might be better suited\n * to your needs.\n *\n * ```js\n * import { task, forever } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n * @service myService;\n * @task *myTask() {\n * yield this.myService.doSomethingThatCausesATransition();\n * yield forever;\n * }\n * }\n * ```\n */\nexport const forever = new ForeverYieldable();\n\n/**\n *\n * Yielding `rawTimeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * The timeout will use the native `setTimeout()` browser API,\n * instead of the Ember runloop, which means that test helpers\n * will *not* wait for it to complete.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * while (true) {\n * console.log(\"Hello!\");\n * yield rawTimeout(1000);\n * }\n * }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n * the task, in milliseconds\n */\nexport function rawTimeout(ms) {\n return new RawTimeoutYieldable(ms);\n}\n","import { get } from '@ember/object';\nimport { assert } from '@ember/debug';\n\nexport function taskHelperClosure(helperName, taskMethod, _args, hash) {\n let task = _args[0];\n let outerArgs = _args.slice(1);\n\n return function (...innerArgs) {\n if (!task || typeof task[taskMethod] !== 'function') {\n assert(\n `The first argument passed to the \\`${helperName}\\` helper should be a Task object (without quotes); you passed ${task}`,\n false,\n );\n return;\n }\n\n if (hash && hash.value) {\n let event = innerArgs.pop();\n innerArgs.push(get(event, hash.value));\n }\n\n return task[taskMethod](...outerArgs, ...innerArgs);\n };\n}\n","import Scheduler from '../external/scheduler/scheduler';\nimport { once } from '@ember/runloop';\n\nclass EmberScheduler extends Scheduler {\n scheduleRefresh() {\n once(this, this.refresh);\n }\n}\n\nexport default EmberScheduler;\n","import { assert } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { addListener } from '@ember/object/events';\nimport { addObserver } from '@ember/object/observers';\nimport { scheduleOnce } from '@ember/runloop';\nimport {\n registerModifier,\n TaskFactory as BaseTaskFactory,\n} from './external/task-factory';\n\nimport { Task, EncapsulatedTask } from './task';\nimport { TaskProperty } from './task-properties';\nimport { TaskGroup } from './task-group';\nimport EmberScheduler from './scheduler/ember-scheduler';\nimport { EMBER_ENVIRONMENT } from './ember-environment';\n\nlet handlerCounter = 0;\n\nfunction registerOnPrototype(\n addListenerOrObserver,\n proto,\n names,\n taskName,\n taskMethod,\n once,\n) {\n if (names && names.length > 0) {\n for (let i = 0; i < names.length; ++i) {\n let name = names[i];\n\n let handlerName = `__ember_concurrency_handler_${handlerCounter++}`;\n proto[handlerName] = makeTaskCallback(taskName, taskMethod, once);\n addListenerOrObserver(proto, name, null, handlerName);\n }\n }\n}\n\nfunction makeTaskCallback(taskName, method, once) {\n return function () {\n let task = get(this, taskName);\n\n if (once) {\n scheduleOnce('actions', task, method, ...arguments);\n } else {\n task[method].apply(task, arguments);\n }\n };\n}\n\nconst ensureArray = (possibleArr) =>\n Array.isArray(possibleArr) ? possibleArr : [possibleArr];\n\nregisterModifier('cancelOn', (factory, eventNames) =>\n factory.addCancelEvents(...ensureArray(eventNames)),\n);\nregisterModifier('observes', (factory, propertyPaths) =>\n factory.addObserverKeys(...ensureArray(propertyPaths)),\n);\nregisterModifier('on', (factory, eventNames) =>\n factory.addPerformEvents(...ensureArray(eventNames)),\n);\n\nexport class TaskFactory extends BaseTaskFactory {\n env = EMBER_ENVIRONMENT;\n\n createTask(context) {\n assert(\n `Cannot create task if a task definition is not provided as generator function or encapsulated task.`,\n this.taskDefinition,\n );\n\n let options = this.getTaskOptions(context);\n\n if (typeof this.taskDefinition === 'object') {\n return new EncapsulatedTask(\n Object.assign({ taskObj: this.taskDefinition }, options),\n );\n } else {\n return new Task(\n Object.assign(\n {\n generatorFactory: (args) =>\n this.taskDefinition.apply(context, args),\n },\n options,\n ),\n );\n }\n }\n\n createTaskGroup(context) {\n assert(\n `A task definition is not expected for a task group.`,\n !this.taskDefinition,\n );\n let options = this.getTaskOptions(context);\n\n return new TaskGroup(options);\n }\n\n addCancelEvents(...cancelEventNames) {\n this._cancelEventNames = this._cancelEventNames || [];\n this._cancelEventNames.push(...cancelEventNames);\n return this;\n }\n\n addObserverKeys(...keys) {\n this._observes = this._observes || [];\n this._observes.push(...keys);\n return this;\n }\n\n addPerformEvents(...eventNames) {\n this._eventNames = this._eventNames || [];\n this._eventNames.push(...eventNames);\n return this;\n }\n\n getModifier(name) {\n let modifier = super.getModifier(name);\n if (!modifier && typeof TaskProperty.prototype[name] === 'function') {\n // Shim for compatibility with user-defined TaskProperty prototype\n // extensions. To be removed when replaced with proper public API.\n modifier = TaskProperty.prototype[name].bind(this);\n }\n\n assert(\n `Task option '${name}' is not recognized as a supported option.`,\n modifier,\n );\n\n return modifier;\n }\n\n getScheduler(schedulerPolicy, stateTrackingEnabled) {\n return new EmberScheduler(schedulerPolicy, stateTrackingEnabled);\n }\n\n _setupEmberKVO(proto) {\n // TODO: Does this make sense in a post-Ember object world?\n\n registerOnPrototype(\n addListener,\n proto,\n this._eventNames,\n this.name,\n 'perform',\n false,\n );\n registerOnPrototype(\n addListener,\n proto,\n this._cancelEventNames,\n this.name,\n 'cancelAll',\n false,\n );\n registerOnPrototype(\n addObserver,\n proto,\n this._observes,\n this.name,\n 'perform',\n true,\n );\n }\n\n // Provided for compatibility with ember-concurrency TaskProperty extension\n // methods\n get taskFn() {\n return this.taskDefinition;\n }\n\n set taskFn(fn) {\n this.setTaskDefinition(fn);\n }\n}\n","import { TaskGroup as TaskGroupBase } from './external/task/task-group';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @taskGroup({ maxConcurrency: 5 }) chores;\n *\n * @task({ group: 'chores' })\n * *mowLawn() {}\n *\n * @task({ group: 'chores' })\n * *doDishes() {}\n * }\n * ```\n *\n * <style>\n * .ignore-this--this-is-here-to-hide-constructor,\n * #TaskGroup { display: none }\n * </style>\n *\n * @class TaskGroup\n */\nexport class TaskGroup extends TaskGroupBase {\n /**\n * Cancels all running or queued `TaskInstance`s for this task group.\n * If you're trying to cancel a specific TaskInstance (rather\n * than all of the instances running under this task group) call\n * `.cancel()` on the specific TaskInstance.\n *\n * @method cancelAll\n * @memberof TaskGroup\n * @param options.reason A descriptive reason the task group was\n * cancelled. Defaults to `\".cancelAll() was explicitly called\n * on the Task\"`.\n * @param options.resetState If true, will clear the task group state\n * (`last*` and `performCount` properties will be set to initial\n * values). Defaults to false.\n * @instance\n * @async\n *\n */\n /**\n * `true` if any current task instances are running.\n *\n * @memberof TaskGroup\n * @member {boolean} isRunning\n * @instance\n * @readOnly\n */\n /**\n * `true` if any future task instances are queued.\n *\n * @memberof TaskGroup\n * @member {boolean} isQueued\n * @instance\n * @readOnly\n */\n /**\n * `true` if the task is not in the running or queued state.\n *\n * @memberof TaskGroup\n * @member {boolean} isIdle\n * @instance\n * @readOnly\n */\n /**\n * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n *\n * @memberof TaskGroup\n * @member {string} state\n * @instance\n * @readOnly\n */\n /**\n * The most recently started task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} last\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is currently running.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastRunning\n * @instance\n * @readOnly\n */\n /**\n * The most recently performed task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastPerformed\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that succeeded.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastSuccessful\n * @instance\n * @readOnly\n */\n /**\n * The most recently completed task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastComplete\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that errored.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastErrored\n * @instance\n * @readOnly\n */\n /**\n * The most recently canceled task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastCanceled\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is incomplete.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastIncomplete\n * @instance\n * @readOnly\n */\n /**\n * The number of times this task has been performed.\n *\n * @memberof TaskGroup\n * @member {number} performCount\n * @instance\n * @readOnly\n */\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n Object.defineProperties(TaskGroup.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(TaskGroup.prototype, TASKABLE_MIXIN);\n","import { INITIAL_STATE } from './initial-state';\nimport { yieldableSymbol } from '../yieldables';\nimport { CancelRequest, CANCEL_KIND_EXPLICIT } from './cancelation';\nconst EXPLICIT_CANCEL_REASON = '.cancel() was explicitly called';\n\nexport class BaseTaskInstance {\n constructor({ task, args, executor, performType, hasEnabledEvents }) {\n this.task = task;\n this.args = args;\n this.performType = performType;\n this.executor = executor;\n this.executor.taskInstance = this;\n this.hasEnabledEvents = hasEnabledEvents;\n }\n\n setState() {}\n onStarted() {}\n onSuccess() {}\n onError() {}\n onCancel() {}\n formatCancelReason() {}\n selfCancelLoopWarning() {}\n\n onFinalize(callback) {\n this.executor.onFinalize(callback);\n }\n\n proceed(index, yieldResumeType, value) {\n this.executor.proceedChecked(index, yieldResumeType, value);\n }\n\n [yieldableSymbol](parentTaskInstance, resumeIndex) {\n return this.executor.onYielded(parentTaskInstance, resumeIndex);\n }\n\n cancel(cancelReason = EXPLICIT_CANCEL_REASON) {\n this.executor.cancel(new CancelRequest(CANCEL_KIND_EXPLICIT, cancelReason));\n }\n\n then(...args) {\n return this.executor.promise().then(...args);\n }\n\n catch(...args) {\n return this.executor.promise().catch(...args);\n }\n\n finally(...args) {\n return this.executor.promise().finally(...args);\n }\n\n toString() {\n return `${this.task} TaskInstance`;\n }\n\n start() {\n this.executor.start();\n return this;\n }\n}\n\nObject.assign(BaseTaskInstance.prototype, INITIAL_STATE);\nObject.assign(BaseTaskInstance.prototype, {\n state: 'waiting',\n isDropped: false,\n isRunning: true,\n});\n","import { BaseTaskInstance } from './external/task-instance/base';\nimport { TRACKED_INITIAL_INSTANCE_STATE } from './tracked-state';\n\n/**\n A `TaskInstance` represent a single execution of a\n {@linkcode Task}. Every call to {@linkcode Task#perform} returns\n a `TaskInstance`.\n\n `TaskInstance`s are cancelable, either explicitly\n via {@linkcode TaskInstance#cancel} or {@linkcode Task#cancelAll},\n or automatically due to the host object being destroyed, or\n because concurrency policy enforced by a\n {@linkcode TaskProperty Task Modifier} canceled the task instance.\n\n <style>\n .ignore-this--this-is-here-to-hide-constructor,\n #TaskInstance { display: none }\n </style>\n\n @class TaskInstance\n*/\n\nexport class TaskInstance extends BaseTaskInstance {\n setState(props) {\n let state = this._recomputeState(props);\n Object.assign(this, {\n ...props,\n isRunning: !props.isFinished,\n isDropped: state === 'dropped',\n state,\n });\n }\n\n _recomputeState(props) {\n if (props.isDropped) {\n return 'dropped';\n } else if (props.isCanceled) {\n if (props.hasStarted) {\n return 'canceled';\n } else {\n return 'dropped';\n }\n } else if (props.isFinished) {\n return 'finished';\n } else if (props.hasStarted) {\n return 'running';\n } else {\n return 'waiting';\n }\n }\n\n onStarted() {\n this.triggerEvent('started', this);\n }\n\n onSuccess() {\n this.triggerEvent('succeeded', this);\n }\n\n onError(error) {\n this.triggerEvent('errored', this, error);\n }\n\n onCancel(cancelReason) {\n this.triggerEvent('canceled', this, cancelReason);\n }\n\n formatCancelReason(reason) {\n return `TaskInstance '${this.getName()}' was canceled because ${reason}. For more information, see: http://ember-concurrency.com/docs/task-cancelation-help`;\n }\n\n getName() {\n if (!this.name) {\n this.name = (this.task && this.task.name) || '<unknown>';\n }\n return this.name;\n }\n\n selfCancelLoopWarning(parent) {\n let parentName = `\\`${parent.getName()}\\``;\n let childName = `\\`${this.getName()}\\``;\n // eslint-disable-next-line no-console\n console.warn(\n `ember-concurrency detected a potentially hazardous \"self-cancel loop\" between parent task ${parentName} and child task ${childName}. If you want child task ${childName} to be canceled when parent task ${parentName} is canceled, please change \\`.perform()\\` to \\`.linked().perform()\\`. If you want child task ${childName} to keep running after parent task ${parentName} is canceled, change it to \\`.unlinked().perform()\\``,\n );\n }\n\n triggerEvent(...allArgs) {\n if (!this.hasEnabledEvents) {\n return;\n }\n\n let taskInstance = this;\n let task = taskInstance.task;\n let host = task.context;\n let eventNamespace = task && task.name;\n\n if (host && host.trigger && eventNamespace) {\n let [eventType, ...args] = allArgs;\n host.trigger(`${eventNamespace}:${eventType}`, ...args);\n }\n }\n\n /**\n * Describes the state that the task instance is in. Can be used for debugging,\n * or potentially driving some UI state. Possible values are:\n *\n * - `\"dropped\"`: task instance was canceled before it started\n * - `\"canceled\"`: task instance was canceled before it could finish\n * - `\"finished\"`: task instance ran to completion (even if an exception was thrown)\n * - `\"running\"`: task instance is currently running (returns true even if\n * is paused on a yielded promise)\n * - `\"waiting\"`: task instance hasn't begun running yet (usually\n * because the task is using the {@linkcode TaskProperty#enqueue enqueue}\n * task modifier)\n *\n * The animated timeline examples on the [Task Concurrency](/docs/task-concurrency)\n * docs page make use of this property.\n *\n * @name state\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n\n /**\n * True if the TaskInstance was canceled before it could\n * ever start running. For example, calling\n * {@linkcode Task#perform .perform()} twice on a\n * task with the {@linkcode TaskProperty#drop drop} modifier applied\n * will result in the second task instance being dropped.\n *\n * @name isDropped\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n\n /**\n * True if the task is still running.\n *\n * @name isRunning\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n\n /**\n * Event emitted when a new {@linkcode TaskInstance} starts executing.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingStarted: on('doSomething:started', function (taskInstance) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:started\n * @param {TaskInstance} taskInstance - Task instance that was started\n */\n\n /**\n * Event emitted when a {@linkcode TaskInstance} succeeds.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingSucceeded: on('doSomething:succeeded', function (taskInstance) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:succeeded\n * @param {TaskInstance} taskInstance - Task instance that was succeeded\n */\n\n /**\n * Event emitted when a {@linkcode TaskInstance} throws an an error that is\n * not handled within the task itself.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingErrored: on('doSomething:errored', function (taskInstance, error) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:errored\n * @param {TaskInstance} taskInstance - Task instance that was started\n * @param {Error} error - Error that was thrown by the task instance\n */\n\n /**\n * Event emitted when a {@linkcode TaskInstance} is canceled.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingCanceled: on('doSomething:canceled', function (taskInstance, cancelationReason) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:canceled\n * @param {TaskInstance} taskInstance - Task instance that was started\n * @param {string} cancelationReason - Cancelation reason that was was provided to {@linkcode TaskInstance#cancel}\n */\n\n /**\n * Cancels the task instance. Has no effect if the task instance has\n * already been canceled or has already finished running.\n *\n * @method cancel\n * @memberof TaskInstance\n * @instance\n * @async\n */\n\n /**\n * Returns a promise that resolves with the value returned\n * from the task's (generator) function, or rejects with\n * either the exception thrown from the task function, or\n * an error with a `.name` property with value `\"TaskCancelation\"`.\n *\n * @method then\n * @memberof TaskInstance\n * @instance\n * @return {Promise}\n */\n\n /**\n * @method catch\n * @memberof TaskInstance\n * @instance\n * @return {Promise}\n */\n\n /**\n * @method finally\n * @memberof TaskInstance\n * @instance\n * @return {Promise}\n */\n}\n\nif (TRACKED_INITIAL_INSTANCE_STATE) {\n Object.defineProperties(\n TaskInstance.prototype,\n TRACKED_INITIAL_INSTANCE_STATE,\n );\n}\n","import Ember from 'ember';\n\nimport { computed } from '@ember/object';\n\nimport EnqueueSchedulerPolicy from './external/scheduler/policies/enqueued-policy';\nimport DropSchedulerPolicy from './external/scheduler/policies/drop-policy';\nimport KeepLatestSchedulerPolicy from './external/scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './external/scheduler/policies/restartable-policy';\n\nexport let taskFactorySymbol = '__ec_task_factory';\n\nexport const propertyModifiers = {\n /**\n * Configures the task to cancel old currently task instances\n * to make room for a new one to perform. Sets default\n * maxConcurrency to 1.\n *\n * [See the Live Example](/docs/examples/route-tasks/1)\n *\n * @method restartable\n * @memberof TaskProperty\n * @instance\n */\n restartable() {\n this[taskFactorySymbol].setBufferPolicy(RestartableSchedulerPolicy);\n return this;\n },\n\n /**\n * Configures the task to run task instances one-at-a-time in\n * the order they were `.perform()`ed. Sets default\n * maxConcurrency to 1.\n *\n * @method enqueue\n * @memberof TaskProperty\n * @instance\n */\n enqueue() {\n this[taskFactorySymbol].setBufferPolicy(EnqueueSchedulerPolicy);\n return this;\n },\n\n /**\n * Configures the task to immediately cancel (i.e. drop) any\n * task instances performed when the task is already running\n * at maxConcurrency. Sets default maxConcurrency to 1.\n *\n * @method drop\n * @memberof TaskProperty\n * @instance\n */\n drop() {\n this[taskFactorySymbol].setBufferPolicy(DropSchedulerPolicy);\n return this;\n },\n\n /**\n * Configures the task to drop all but the most recently\n * performed {@linkcode TaskInstance }.\n *\n * @method keepLatest\n * @memberof TaskProperty\n * @instance\n */\n keepLatest() {\n this[taskFactorySymbol].setBufferPolicy(KeepLatestSchedulerPolicy);\n return this;\n },\n\n /**\n * Sets the maximum number of task instances that are allowed\n * to run at the same time. By default, with no task modifiers\n * applied, this number is Infinity (there is no limit\n * to the number of tasks that can run at the same time).\n * {@linkcode TaskProperty#restartable .restartable},\n * {@linkcode TaskProperty#enqueue .enqueue}, and\n * {@linkcode TaskProperty#drop .drop} set the default\n * maxConcurrency to 1, but you can override this value\n * to set the maximum number of concurrently running tasks\n * to a number greater than 1.\n *\n * [See the AJAX Throttling example](/docs/examples/ajax-throttling)\n *\n * The example below uses a task with `maxConcurrency(3)` to limit\n * the number of concurrent AJAX requests (for anyone using this task)\n * to 3.\n *\n * ```js\n * doSomeAjax: task(function * (url) {\n * return fetch(url);\n * }).maxConcurrency(3),\n *\n * elsewhere() {\n * this.doSomeAjax.perform(\"http://www.example.com/json\");\n * },\n * ```\n *\n * @method maxConcurrency\n * @memberof TaskProperty\n * @param {Number} n The maximum number of concurrently running tasks\n * @instance\n */\n maxConcurrency(n) {\n this[taskFactorySymbol].setMaxConcurrency(n);\n return this;\n },\n\n /**\n * Adds this task to a TaskGroup so that concurrency constraints\n * can be shared between multiple tasks.\n *\n * [See the Task Group docs for more information](/docs/task-groups)\n *\n * @method group\n * @memberof TaskProperty\n * @param {String} groupPath A path to the TaskGroup property\n * @instance\n */\n group(taskGroupPath) {\n this[taskFactorySymbol].setGroup(taskGroupPath);\n return this;\n },\n\n /**\n * Activates lifecycle events, allowing Evented host objects to react to task state\n * changes.\n *\n * ```js\n *\n * export default Component.extend({\n * uploadTask: task(function* (file) {\n * // ... file upload stuff\n * }).evented(),\n *\n * uploadedStarted: on('uploadTask:started', function(taskInstance) {\n * this.analytics.track(\"User Photo: upload started\");\n * }),\n * });\n * ```\n *\n * @method evented\n * @memberof TaskProperty\n * @instance\n */\n evented() {\n this[taskFactorySymbol].setEvented(true);\n return this;\n },\n\n /**\n * Logs lifecycle events to aid in debugging unexpected Task behavior.\n * Presently only logs cancelation events and the reason for the cancelation,\n * e.g. \"TaskInstance 'doStuff' was canceled because the object it lives on was destroyed or unrendered\"\n *\n * @method debug\n * @memberof TaskProperty\n * @instance\n */\n debug() {\n this[taskFactorySymbol].setDebug(true);\n return this;\n },\n\n /**\n * Configures the task to call the passed in callback for derived state updates,\n * overriding the default derived state tracking. You may call with `null` to\n * completely opt-out of derived state tracking.\n *\n * @method onState\n * @memberof TaskProperty\n * @param {function?} callback Callback to be called. Receives an object argument with the new state.\n * @instance\n */\n onState(callback) {\n this[taskFactorySymbol].setOnState(callback);\n return this;\n },\n};\n\n/**\n A {@link TaskProperty} is the Computed Property-like object returned\n from the {@linkcode task} function. You can call Task Modifier methods\n on this object to configure the behavior of the {@link Task}.\n\n See [Managing Task Concurrency](/docs/task-concurrency) for an\n overview of all the different task modifiers you can use and how\n they impact automatic cancelation / enqueueing of task instances.\n\n {@link TaskProperty} is only used for supporting \"classic\" Ember objects.\n When using Native JavaScript or TypeScript classes, you will use [task decorators](/docs/task-decorators)\n on methods instead.\n\n @class TaskProperty\n*/\nexport class TaskProperty {}\nexport class TaskGroupProperty {}\n\nObject.assign(TaskGroupProperty.prototype, propertyModifiers);\nObject.assign(TaskProperty.prototype, propertyModifiers, {\n setup(proto, key) {\n if (this.callSuperSetup) {\n this.callSuperSetup(...arguments);\n }\n\n this[taskFactorySymbol].setName(key);\n this[taskFactorySymbol]._setupEmberKVO(proto);\n },\n\n /**\n * Calling `task(...).on(eventName)` configures the task to be\n * automatically performed when the specified events fire. In\n * this way, it behaves like\n * [Ember.on](http://emberjs.com/api/classes/Ember.html#method_on).\n *\n * You can use `task(...).on('init')` to perform the task\n * when the host object is initialized.\n *\n * ```js\n * export default Component.extend({\n * pollForUpdates: task(function * () {\n * // ... this runs when the Component is first created\n * // because we specified .on('init')\n * }).on('init'),\n *\n * handleFoo: task(function * (a, b, c) {\n * // this gets performed automatically if the 'foo'\n * // event fires on this Component,\n * // e.g., if someone called component.trigger('foo')\n * }).on('foo'),\n * });\n * ```\n *\n * @method on\n * @memberof TaskProperty\n * @param {String} eventNames*\n * @instance\n */\n on() {\n this[taskFactorySymbol].addPerformEvents(...arguments);\n return this;\n },\n\n /**\n * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n * but instead will cause the task to be canceled if any of the\n * specified events fire on the parent object.\n *\n * [See the Live Example](/docs/examples/route-tasks/1)\n *\n * @method cancelOn\n * @memberof TaskProperty\n * @param {String} eventNames*\n * @instance\n */\n cancelOn() {\n this[taskFactorySymbol].addCancelEvents(...arguments);\n return this;\n },\n\n /**\n * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n * but instead will cause the task to be performed if any of the\n * specified properties on the parent object change.\n *\n * @method observes\n * @memberof TaskProperty\n * @param {String} keys*\n * @instance\n */\n observes() {\n this[taskFactorySymbol].addObserverKeys(...arguments);\n return this;\n },\n});\n\nconst setDecorator = Ember._setClassicDecorator || Ember._setComputedDecorator;\nexport function taskComputed(fn) {\n let cp = function (proto, key) {\n if (cp.setup !== undefined) {\n cp.setup(proto, key);\n }\n\n return computed(fn)(...arguments);\n };\n\n setDecorator(cp);\n\n return cp;\n}\n","import { setOwner, getOwner } from '@ember/application';\nimport EmberObject, { get, set } from '@ember/object';\nimport { isDestroying, registerDestructor } from '@ember/destroyable';\nimport { Task as BaseTask } from './external/task/task';\nimport { TaskInstance } from './task-instance';\nimport { TaskInstanceExecutor } from './external/task-instance/executor';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\nimport { CANCEL_KIND_LIFESPAN_END } from './external/task-instance/cancelation';\n\n/**\n The `Task` object lives on a host Ember object (e.g.\n a Component, Route, or Controller). You call the\n {@linkcode Task#perform .perform()} method on this object\n to create run individual {@linkcode TaskInstance}s,\n and at any point, you can call the {@linkcode Task#cancelAll .cancelAll()}\n method on this object to cancel all running or enqueued\n {@linkcode TaskInstance}s.\n\n <style>\n .ignore-this--this-is-here-to-hide-constructor,\n #Task { display: none }\n </style>\n\n @class Task\n*/\nexport class Task extends BaseTask {\n /**\n * `true` if any current task instances are running.\n *\n * @memberof Task\n * @member {boolean} isRunning\n * @instance\n * @readOnly\n */\n /**\n * `true` if any future task instances are queued.\n *\n * @memberof Task\n * @member {boolean} isQueued\n * @instance\n * @readOnly\n */\n /**\n * `true` if the task is not in the running or queued state.\n *\n * @memberof Task\n * @member {boolean} isIdle\n * @instance\n * @readOnly\n */\n /**\n * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n *\n * @memberof Task\n * @member {string} state\n * @instance\n * @readOnly\n */\n /**\n * The most recently started task instance.\n *\n * @memberof Task\n * @member {TaskInstance} last\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is currently running.\n *\n * @memberof Task\n * @member {TaskInstance} lastRunning\n * @instance\n * @readOnly\n */\n /**\n * The most recently performed task instance.\n *\n * @memberof Task\n * @member {TaskInstance} lastPerformed\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that succeeded.\n *\n * @memberof Task\n * @member {TaskInstance} lastSuccessful\n * @instance\n * @readOnly\n */\n /**\n * The most recently completed task instance.\n *\n * @memberof Task\n * @member {TaskInstance} lastComplete\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that errored.\n *\n * @memberof Task\n * @member {TaskInstance} lastErrored\n * @instance\n * @readOnly\n */\n /**\n * The most recently canceled task instance.\n *\n * @memberof Task\n * @member {TaskInstance} lastCanceled\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is incomplete.\n *\n * @memberof Task\n * @member {TaskInstance} lastIncomplete\n * @instance\n * @readOnly\n */\n /**\n * The number of times this task has been performed.\n *\n * @memberof Task\n * @member {number} performCount\n * @instance\n * @readOnly\n */\n\n constructor(options) {\n super(options);\n\n if (!isDestroying(this.context)) {\n registerDestructor(this.context, () => {\n this.cancelAll({\n reason: 'the object it lives on was destroyed or unrendered',\n cancelRequestKind: CANCEL_KIND_LIFESPAN_END,\n });\n });\n }\n }\n\n /**\n * Flags the task as linked to the parent task's lifetime. Must be called\n * within another task's perform function. The task will be cancelled if the\n * parent task is canceled as well.\n *\n * ember-concurrency will indicate when this may be needed.\n *\n * @method linked\n * @memberof Task\n * @instance\n *\n */\n\n /**\n * Flags the task as not linked to the parent task's lifetime. Must be called\n * within another task's perform function. The task will NOT be cancelled if the\n * parent task is canceled.\n *\n * This is useful for avoiding the so-called \"self-cancel loop\" for tasks.\n * ember-concurrency will indicate when this may be needed.\n *\n * @method unlinked\n * @memberof Task\n * @instance\n *\n */\n\n /**\n * Creates a new {@linkcode TaskInstance} and attempts to run it right away.\n * If running this task instance would increase the task's concurrency\n * to a number greater than the task's maxConcurrency, this task\n * instance might be immediately canceled (dropped), or enqueued\n * to run at later time, after the currently running task(s) have finished.\n *\n * @method perform\n * @memberof Task\n * @param {*} arg* - args to pass to the task function\n * @instance\n *\n * @fires TaskInstance#TASK_NAME:started\n * @fires TaskInstance#TASK_NAME:succeeded\n * @fires TaskInstance#TASK_NAME:errored\n * @fires TaskInstance#TASK_NAME:canceled\n *\n */\n\n /**\n * Cancels all running or queued `TaskInstance`s for this Task.\n * If you're trying to cancel a specific TaskInstance (rather\n * than all of the instances running under this task) call\n * `.cancel()` on the specific TaskInstance.\n *\n * @method cancelAll\n * @memberof Task\n * @param options.reason A descriptive reason the task was\n * cancelled. Defaults to `\".cancelAll() was explicitly called\n * on the Task\"`.\n * @param options.resetState If true, will clear the task state\n * (`last*` and `performCount` properties will be set to initial\n * values). Defaults to false.\n * @instance\n * @async\n *\n */\n\n get _isAlive() {\n return !isDestroying(this.context);\n }\n\n _taskInstanceFactory(args, performType, linkedObject) {\n let options = this._taskInstanceOptions(args, performType, linkedObject);\n let taskInstance = new TaskInstance(options);\n return taskInstance;\n }\n\n _clone() {\n return new Task({\n context: this.context,\n debug: this.debug,\n env: this.env,\n generatorFactory: this.generatorFactory,\n group: this.group,\n hasEnabledEvents: this.hasEnabledEvents,\n name: this.name,\n onStateCallback: this.onStateCallback,\n scheduler: this.scheduler,\n });\n }\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n Object.defineProperties(Task.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(Task.prototype, TASKABLE_MIXIN);\n\nconst currentTaskInstanceSymbol = '__ec__encap_current_ti';\nexport class EncapsulatedTask extends Task {\n constructor(options) {\n super(options);\n this.taskObj = options.taskObj;\n this._encapsulatedTaskStates = new WeakMap();\n this._encapsulatedTaskInstanceProxies = new WeakMap();\n }\n\n _getEncapsulatedTaskClass() {\n let encapsulatedTaskImplClass = this._encapsulatedTaskImplClass;\n\n if (!encapsulatedTaskImplClass) {\n // eslint-disable-next-line ember/no-classic-classes\n encapsulatedTaskImplClass = EmberObject.extend(this.taskObj, {\n unknownProperty(key) {\n let currentInstance = this[currentTaskInstanceSymbol];\n return currentInstance ? currentInstance[key] : undefined;\n },\n });\n }\n\n return encapsulatedTaskImplClass;\n }\n\n _taskInstanceFactory(args, performType) {\n let owner = getOwner(this.context);\n let taskInstanceProxy;\n let encapsulatedTaskImpl = this._getEncapsulatedTaskClass().create({\n context: this.context,\n });\n setOwner(encapsulatedTaskImpl, owner);\n\n let generatorFactory = () =>\n encapsulatedTaskImpl.perform.apply(taskInstanceProxy, args);\n let taskInstance = new TaskInstance({\n task: this,\n args,\n executor: new TaskInstanceExecutor({\n generatorFactory,\n env: this.env,\n debug: this.debug,\n }),\n performType,\n hasEnabledEvents: this.hasEnabledEvents,\n });\n encapsulatedTaskImpl[currentTaskInstanceSymbol] = taskInstance;\n\n this._encapsulatedTaskStates.set(taskInstance, encapsulatedTaskImpl);\n\n taskInstanceProxy = this._wrappedEncapsulatedTaskInstance(taskInstance);\n\n return taskInstanceProxy;\n }\n\n _wrappedEncapsulatedTaskInstance(taskInstance) {\n if (!taskInstance) {\n return null;\n }\n\n let _encapsulatedTaskInstanceProxies =\n this._encapsulatedTaskInstanceProxies;\n let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n\n if (!proxy) {\n let encapsulatedTaskImpl = this._encapsulatedTaskStates.get(taskInstance);\n\n proxy = new Proxy(taskInstance, {\n get(obj, prop) {\n return prop in obj\n ? obj[prop]\n : get(encapsulatedTaskImpl, prop.toString());\n },\n set(obj, prop, value) {\n if (prop in obj) {\n obj[prop] = value;\n } else {\n set(encapsulatedTaskImpl, prop.toString(), value);\n }\n return true;\n },\n has(obj, prop) {\n return prop in obj || prop in encapsulatedTaskImpl;\n },\n ownKeys(obj) {\n return Reflect.ownKeys(obj).concat(\n Reflect.ownKeys(encapsulatedTaskImpl),\n );\n },\n defineProperty(obj, prop, descriptor) {\n // Ember < 3.16 uses a WeakMap for value storage, keyed to the proxy.\n // We need to ensure that when we use setProperties to update it, and\n // it creates Meta, that it uses the proxy to key, otherwise we'll\n // have two different values stores in Meta, one which won't render.\n let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n if (proxy) {\n if (descriptor.get) {\n descriptor.get = descriptor.get.bind(proxy);\n } else if (proxy && descriptor.set) {\n descriptor.set = descriptor.set.bind(proxy);\n }\n }\n\n return Reflect.defineProperty(encapsulatedTaskImpl, prop, descriptor);\n },\n getOwnPropertyDescriptor(obj, prop) {\n return prop in obj\n ? Reflect.getOwnPropertyDescriptor(obj, prop)\n : Reflect.getOwnPropertyDescriptor(encapsulatedTaskImpl, prop);\n },\n });\n\n _encapsulatedTaskInstanceProxies.set(taskInstance, proxy);\n }\n\n return proxy;\n }\n}\n","export const TASKABLE_MIXIN = {\n _performCount: 0,\n\n setState(state) {\n this._performCount = this._performCount + (state.numPerformedInc || 0);\n\n let isRunning = state.numRunning > 0;\n let isQueued = state.numQueued > 0;\n let derivedState = Object.assign({}, state, {\n performCount: this._performCount,\n isRunning,\n isQueued,\n isIdle: !isRunning && !isQueued,\n state: isRunning ? 'running' : 'idle',\n });\n Object.assign(this, derivedState);\n },\n\n onState(state, task) {\n if (task.onStateCallback) {\n task.onStateCallback(state, task);\n }\n },\n};\n","import { tracked } from '@glimmer/tracking';\nimport { DEFAULT_STATE as INITIAL_TASK_STATE } from './external/task/default-state';\nimport { INITIAL_STATE as INITIAL_INSTANCE_STATE } from './external/task-instance/initial-state';\n\nfunction trackMixin(proto, obj, key) {\n const propDesc = Object.getOwnPropertyDescriptor(proto, key);\n propDesc.initializer = propDesc.initializer || (() => proto[key]);\n delete propDesc.value;\n const desc = tracked(obj, key, propDesc);\n obj[key] = desc;\n return obj;\n}\n\nfunction applyTracked(proto, initial) {\n return Object.keys(proto).reduce((acc, key) => {\n return trackMixin(proto, acc, key);\n }, initial);\n}\n\nexport let TRACKED_INITIAL_TASK_STATE;\nexport let TRACKED_INITIAL_INSTANCE_STATE;\n\nTRACKED_INITIAL_TASK_STATE = applyTracked(INITIAL_TASK_STATE, {});\nTRACKED_INITIAL_TASK_STATE = applyTracked(\n {\n numRunning: 0,\n numQueued: 0,\n isRunning: false,\n isQueued: false,\n isIdle: true,\n state: 'idle',\n },\n TRACKED_INITIAL_TASK_STATE,\n);\n\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(INITIAL_INSTANCE_STATE, {});\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(\n {\n state: 'waiting',\n isDropped: false,\n isRunning: false,\n },\n TRACKED_INITIAL_INSTANCE_STATE,\n);\n\nObject.freeze(TRACKED_INITIAL_TASK_STATE);\nObject.freeze(TRACKED_INITIAL_INSTANCE_STATE);\n","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { taskHelperClosure } from '../-private/helpers';\nimport type { Task } from '../index';\n\nfunction maybeReportError(\n onError: (error: unknown) => void | null | undefined,\n) {\n return function (e: unknown) {\n if (typeof onError === 'function') {\n onError(e);\n } else if (onError === null) {\n // Do nothing\n } else {\n assert(\n `The onError argument passed to the \\`perform\\` helper should be a function or null; you passed ${onError}`,\n false,\n );\n }\n };\n}\n\ntype PerformParams = [task: Task<any, any[]>, ...args: any[]];\n\nexport function performHelper(args: PerformParams, hash: any) {\n let perform = taskHelperClosure('perform', 'perform', args, hash);\n\n if (hash && typeof hash.onError !== 'undefined') {\n return function (...innerArgs: any[]) {\n try {\n let taskInstance = perform(...innerArgs);\n return taskInstance.catch(maybeReportError(hash.onError));\n // eslint-disable-next-line no-empty\n } catch {\n maybeReportError(hash.onError);\n }\n };\n } else {\n return perform;\n }\n}\n\nexport default helper(performHelper);\n","import { TaskFactory } from './task-factory';\n\n/**\n * This builder function is called by the transpiled code from\n * `task(async () => {})`. See async-arrow-task-transform.js\n *\n * @private\n */\nexport function buildTask(contextFn, options, taskName, bufferPolicyName) {\n let optionsWithBufferPolicy = options;\n\n if (bufferPolicyName) {\n optionsWithBufferPolicy = Object.assign({}, optionsWithBufferPolicy);\n optionsWithBufferPolicy[bufferPolicyName] = true;\n }\n\n const result = contextFn();\n\n const taskFactory = new TaskFactory(\n taskName || '<unknown>',\n result.generator,\n optionsWithBufferPolicy,\n );\n return taskFactory.createTask(result.context);\n}\n","import { later, cancel } from '@ember/runloop';\nimport { EMBER_ENVIRONMENT } from './ember-environment';\nimport { Yieldable } from './external/yieldables';\n\nexport function isEventedObject(c) {\n return (\n c &&\n ((typeof c.one === 'function' && typeof c.off === 'function') ||\n (typeof c.on === 'function' && typeof c.off === 'function') ||\n (typeof c.addEventListener === 'function' &&\n typeof c.removeEventListener === 'function'))\n );\n}\n\nexport class EmberYieldable extends Yieldable {\n _deferable() {\n return EMBER_ENVIRONMENT.defer();\n }\n}\n\nclass TimeoutYieldable extends EmberYieldable {\n constructor(ms) {\n super();\n this.ms = ms;\n }\n\n onYield(state) {\n let timerId = later(() => state.next(), this.ms);\n\n return () => cancel(timerId);\n }\n}\n\n/**\n *\n * Yielding `timeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * This timeout will be scheduled on the Ember runloop, which\n * means that test helpers will wait for it to complete before\n * continuing with the test. See `rawTimeout()` if you need\n * different behavior.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * while (true) {\n * console.log(\"Hello!\");\n * yield timeout(1000);\n * }\n * }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n * the task, in milliseconds\n */\nexport function timeout(ms) {\n return new TimeoutYieldable(ms);\n}\n\nexport function deprecatePrivateModule(moduleName) {\n // eslint-disable-next-line no-console\n console.warn(\n `an Ember addon is importing a private ember-concurrency module '${moduleName}' that has moved`,\n );\n}\n","import { TaskFactory } from './task-factory';\n\nfunction taskFromPropertyDescriptor(\n target,\n key,\n descriptor,\n params = [],\n factoryClass = TaskFactory,\n) {\n let { initializer, get, value } = descriptor;\n let taskFn;\n\n if (initializer) {\n taskFn = initializer.call(undefined);\n } else if (get) {\n taskFn = get.call(undefined);\n } else if (value) {\n taskFn = value;\n }\n\n taskFn.displayName = `${key} (task)`;\n\n let tasks = new WeakMap();\n let options = params[0] || {};\n let factory = new factoryClass(key, taskFn, options);\n factory._setupEmberKVO(target);\n\n return {\n get() {\n let task = tasks.get(this);\n\n if (!task) {\n task = factory.createTask(this);\n tasks.set(this, task);\n }\n\n return task;\n },\n };\n}\n\nfunction taskGroupPropertyDescriptor(\n _target,\n key,\n _descriptor,\n params = [],\n factoryClass = TaskFactory,\n) {\n let taskGroups = new WeakMap();\n let options = params[0] || {};\n let factory = new factoryClass(key, null, options);\n\n return {\n get() {\n let task = taskGroups.get(this);\n\n if (!task) {\n task = factory.createTaskGroup(this);\n taskGroups.set(this, task);\n }\n\n return task;\n },\n };\n}\n\n// Cribbed from @ember-decorators/utils\nfunction isFieldDescriptor(possibleDesc) {\n let [target, key, desc] = possibleDesc;\n\n return (\n possibleDesc.length === 3 &&\n typeof target === 'object' &&\n target !== null &&\n typeof key === 'string' &&\n ((typeof desc === 'object' &&\n desc !== null &&\n 'enumerable' in desc &&\n 'configurable' in desc) ||\n desc === undefined) // TS compatibility ???\n );\n}\n\nexport function decoratorWithParams(descriptorFn) {\n return function (...params) {\n if (isFieldDescriptor(params)) {\n return descriptorFn(...params);\n } else {\n return (...desc) => descriptorFn(...desc, params);\n }\n };\n}\n\nfunction createDecorator(fn, baseOptions = {}, factoryClass = TaskFactory) {\n return decoratorWithParams((target, key, descriptor, [userOptions] = []) => {\n let mergedOptions = Object.assign({}, { ...baseOptions, ...userOptions });\n\n return fn(target, key, descriptor, [mergedOptions], factoryClass);\n });\n}\n\nexport function createTaskDecorator(\n baseOptions = {},\n factoryClass = TaskFactory,\n) {\n return createDecorator(taskFromPropertyDescriptor, baseOptions, factoryClass);\n}\n\nexport function createTaskGroupDecorator(\n baseOptions = {},\n factoryClass = TaskFactory,\n) {\n return createDecorator(\n taskGroupPropertyDescriptor,\n baseOptions,\n factoryClass,\n );\n}\n\nexport const lastValue = decoratorWithParams(\n (_target, _key, descriptor, [taskName] = []) => {\n const { initializer } = descriptor;\n delete descriptor.initializer;\n\n return {\n get() {\n let lastInstance = this[taskName].lastSuccessful;\n\n if (lastInstance) {\n return lastInstance.value;\n }\n\n if (initializer) {\n return initializer.call(this);\n }\n\n return undefined;\n },\n };\n },\n);\n","import {\n createTaskDecorator,\n createTaskGroupDecorator,\n lastValue as nativeLastValue,\n} from './external/task-decorators';\nimport { TaskFactory as EmberTaskFactory } from './task-factory';\n\nexport const lastValue = nativeLastValue;\n\n/**\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by a generator function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * Turns the decorated generator function into a task.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, `group` or `keepLatest`.\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @task({ maxConcurrency: 5, keepLatest: true, cancelOn: 'click' })\n * *taskWithModifiers() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options\n * @param {string|string[]} [options.cancelOn] Events to cancel task on. Applies only to `@ember/component`\n * @param {boolean} [options.enqueue] Sets `enqueue` modifier on task if `true`\n * @param {boolean} [options.evented] Enables [task lifecycle events](/docs/advanced/lifecycle-events) for this Task, if `true`\n * @param {boolean} [options.debug] Enables task debugging if `true`\n * @param {boolean} [options.drop] Sets `drop` modifier on task if `true`\n * @param {string} [options.group] Associates task with the group specified\n * @param {boolean} [options.keepLatest] Sets `keepLatest` modifier on task if `true`\n * @param {number} [options.maxConcurrency] Sets the maximum number of running task instances for the task\n * @param {string|string[]} [options.observes] Properties to watch and cause task to be performed when they change\n * @param {string|string[]} [options.on] Events to perform task on. Applies only to `@ember/component`\n * @param {function?} [options.onState] Callback to use for state tracking. May be set to `null` to disable state tracking.\n * @param {boolean} [options.restartable] Sets `restartable` modifier on task if `true`\n * @return {Task}\n */\nexport const task = createTaskDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, dropTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @dropTask({ cancelOn: 'click' })\n * *myDropTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const dropTask = createTaskDecorator({ drop: true }, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, enqueueTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @enqueueTask({ cancelOn: 'click' })\n * *myEnqueueTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const enqueueTask = createTaskDecorator(\n {\n enqueue: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, keepLatestTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @keepLatestTask({ cancelOn: 'click' })\n * *myKeepLatestTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const keepLatestTask = createTaskDecorator(\n {\n keepLatest: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, restartableTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @restartableTask({ cancelOn: 'click' })\n * *myRestartableTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const restartableTask = createTaskDecorator(\n {\n restartable: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @taskGroup({ maxConcurrency: 5 }) chores;\n *\n * @task({ group: 'chores' })\n * *mowLawn() {}\n *\n * @task({ group: 'chores' })\n * *doDishes() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const taskGroup = createTaskGroupDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const dropTaskGroup = createTaskGroupDecorator(\n {\n drop: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const enqueueTaskGroup = createTaskGroupDecorator(\n {\n enqueue: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const keepLatestTaskGroup = createTaskGroupDecorator(\n { keepLatest: true },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const restartableTaskGroup = createTaskGroupDecorator(\n { restartable: true },\n EmberTaskFactory,\n);\n","import { TaskFactory } from './task-factory';\nimport {\n TaskProperty,\n TaskGroupProperty,\n taskComputed,\n taskFactorySymbol,\n} from './task-properties';\nimport {\n task as taskDecorator,\n taskGroup as taskGroupDecorator,\n} from './task-decorators';\nimport { assert } from '@ember/debug';\n\n// eslint-disable-next-line no-unused-vars\nimport { TaskGroup } from './task-group';\n\n/**\n * TODO: update docs to reflect both old and new ES6 styles\n *\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by a generator function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * To define a task, use the `task(...)` function, and pass in\n * a generator function, which will be invoked when the task\n * is performed. The reason generator functions are used is\n * that they (like the proposed ES7 async-await syntax) can\n * be used to elegantly express asynchronous, cancelable\n * operations.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by passing in an object that defined a `perform` generator\n * function property.\n *\n * The following Component defines a task called `myTask` that,\n * when performed, prints a message to the console, sleeps for 1 second,\n * prints a final message to the console, and then completes.\n *\n * ```js\n * import { task, timeout } from 'ember-concurrency';\n * export default Component.extend({\n * myTask: task(function * () {\n * console.log(\"Pausing for a second...\");\n * yield timeout(1000);\n * console.log(\"Done!\");\n * })\n * });\n * ```\n *\n * ```hbs\n * <button {{action myTask.perform}}>Perform Task</button>\n * ```\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * @param {function} generatorFunction the generator function backing the task.\n * @returns {TaskProperty}\n */\nexport function task(taskFnOrProtoOrDecoratorOptions, key, descriptor) {\n assert(\n `It appears you're attempting to use the new task(async () => { ... }) syntax, but the async arrow task function you've provided is not being properly compiled by Babel.\\n\\nPossible causes / remedies:\\n\\n1. You must pass the async function expression directly to the task() function (it is not currently supported to pass in a variable containing the async arrow fn, or any other kind of indirection)\\n2. The new task syntax is only supported by native classes. Ensure that this is one.\\n3. If this code is in an addon, please ensure the addon specifies ember-concurrency \"2.3.0\" or higher in \"dependencies\" (not \"devDependencies\")\\n4. Ensure that there is only one version of ember-concurrency v2.3.0+ being used in your project (including nested dependencies) and consider using npm/yarn/pnpm resolutions to enforce a single version is used\\n5. Ensure that you have registered the Babel transform that Ember Concurrency uses to transform tasks in the \"async-arrow\" notation, see https://ember-concurrency.com/docs/v4-upgrade`,\n !isUntranspiledAsyncFn(arguments[arguments.length - 1]),\n );\n\n if (\n isDecoratorOptions(taskFnOrProtoOrDecoratorOptions) ||\n (key && descriptor)\n ) {\n return taskDecorator(...arguments);\n } else {\n return buildClassicTaskProperty(taskFnOrProtoOrDecoratorOptions);\n }\n}\n\nfunction isUntranspiledAsyncFn(obj) {\n return obj && obj.constructor && obj.constructor.name === 'AsyncFunction';\n}\n\n/**\n * Build and return a \"classic\" TaskProperty, which is essentially a subclass of a Computed Property\n * descriptor that can be used to define Tasks on classic Ember.Objects.\n *\n * @private\n */\nfunction buildClassicTaskProperty(taskFn) {\n const taskProperty = taskComputed(function () {\n taskProperty[taskFactorySymbol].setTaskDefinition(taskProperty.taskFn);\n return taskProperty[taskFactorySymbol].createTask(this);\n });\n\n taskProperty.taskFn = taskFn;\n\n taskProperty[taskFactorySymbol] = new TaskFactory();\n\n Object.setPrototypeOf(taskProperty, TaskProperty.prototype);\n\n return taskProperty;\n}\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * ```js\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * export default class MyController extends Controller {\n * @taskGroup({ drop: true }) chores;\n *\n * @task({ group: 'chores' }) mowLawn = taskFn;\n * @task({ group: 'chores' }) doDishes = taskFn;\n * @task({ group: 'chores' }) changeDiapers = taskFn;\n * }\n * ```\n *\n * @returns {TaskGroup}\n */\nexport function taskGroup(possibleDecoratorOptions, key, descriptor) {\n if (isDecoratorOptions(possibleDecoratorOptions) || (key && descriptor)) {\n return taskGroupDecorator(...arguments);\n } else {\n let tp = taskComputed(function (key) {\n tp[taskFactorySymbol].setName(key);\n return tp[taskFactorySymbol].createTaskGroup(this);\n });\n\n tp[taskFactorySymbol] = new TaskFactory();\n\n Object.setPrototypeOf(tp, TaskGroupProperty.prototype);\n\n return tp;\n }\n}\n\nfunction isDecoratorOptions(possibleOptions) {\n if (!possibleOptions) {\n return false;\n }\n if (typeof possibleOptions === 'function') {\n return false;\n }\n\n if (\n typeof possibleOptions === 'object' &&\n 'perform' in possibleOptions &&\n typeof possibleOptions.perform === 'function'\n ) {\n return false;\n }\n\n return Object.getPrototypeOf(possibleOptions) === Object.prototype;\n}\n","import { assert } from '@ember/debug';\nimport RSVP, { Promise } from 'rsvp';\nimport { TaskInstance } from './task-instance';\nimport { cancelableSymbol, Yieldable } from './external/yieldables';\n\n/**\n * A cancelation-aware variant of [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).\n * The normal version of a `Promise.all` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `all()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `all()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `all` will be canceled\n * - if any of the {@linkcode TaskInstance}s (or regular promises) passed in reject (or\n * are canceled), all of the other unfinished `TaskInstance`s will\n * be automatically canceled.\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const all = taskAwareVariantOf(RSVP.Promise, 'all', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.allSettled](https://api.emberjs.com/ember/release/functions/rsvp/allSettled).\n * The normal version of a `RSVP.allSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `allSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `allSettled()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `allSettled` will be canceled\n */\nexport const allSettled = taskAwareVariantOf(RSVP, 'allSettled', identity);\n\n/**\n * A cancelation-aware variant of [Promise.race](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race).\n * The normal version of a `Promise.race` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `race()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `race()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `race` will be canceled\n * - once any of the tasks/promises passed in complete (either success, failure,\n * or cancelation), any of the {@linkcode TaskInstance}s passed in will be canceled\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const race = taskAwareVariantOf(Promise, 'race', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.hash](https://api.emberjs.com/ember/release/functions/rsvp/hash).\n * The normal version of a `RSVP.hash` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hash()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hash()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `hash` will be canceled\n * - if any of the items rejects/cancels, all other cancelable items\n * (e.g. {@linkcode TaskInstance}s) will be canceled\n */\nexport const hash = taskAwareVariantOf(RSVP, 'hash', getValues);\n\n/**\n * A cancelation-aware variant of [RSVP.hashSettled](https://api.emberjs.com/ember/release/functions/rsvp/hashSettled).\n * The normal version of a `RSVP.hashSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hashSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hashSettled()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `hashSettled` will be canceled\n */\nexport const hashSettled = taskAwareVariantOf(RSVP, 'hashSettled', getValues);\n\nfunction identity(obj) {\n return obj;\n}\n\nfunction getValues(obj) {\n return Object.keys(obj).map((k) => obj[k]);\n}\n\nfunction castForPromiseHelper(castable) {\n if (castable) {\n if (castable instanceof TaskInstance) {\n // Mark TaskInstances, including those that performed synchronously and\n // have finished already, as having their errors handled, as if they had\n // been then'd, which this is emulating.\n castable.executor.asyncErrorsHandled = true;\n } else if (castable instanceof Yieldable) {\n // Cast to promise\n return castable._toPromise();\n }\n }\n\n return castable;\n}\n\nfunction castAwaitables(arrOrHash, callback) {\n if (Array.isArray(arrOrHash)) {\n return arrOrHash.map(callback);\n } else if (typeof arrOrHash === 'object' && arrOrHash !== null) {\n let obj = {};\n Object.keys(arrOrHash).forEach((key) => {\n obj[key] = callback(arrOrHash[key]);\n });\n return obj;\n } else {\n // :shruggie:\n return arrOrHash;\n }\n}\n\nfunction taskAwareVariantOf(obj, method, getItems) {\n return function (awaitable) {\n let awaitables = castAwaitables(awaitable, castForPromiseHelper);\n\n let items = getItems(awaitables);\n assert(`'${method}' expects an array.`, Array.isArray(items));\n\n let defer = RSVP.defer();\n\n obj[method](awaitables).then(defer.resolve, defer.reject);\n\n let hasCancelled = false;\n let cancelAll = () => {\n if (hasCancelled) {\n return;\n }\n hasCancelled = true;\n items.forEach((it) => {\n if (it) {\n if (it instanceof TaskInstance) {\n it.cancel();\n } else if (typeof it[cancelableSymbol] === 'function') {\n it[cancelableSymbol]();\n }\n }\n });\n };\n\n let promise = defer.promise.finally(cancelAll);\n promise[cancelableSymbol] = cancelAll;\n return promise;\n };\n}\n","import { assert } from '@ember/debug';\nimport { schedule, cancel } from '@ember/runloop';\nimport { get } from '@ember/object';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { EmberYieldable, isEventedObject } from './utils';\n\nclass WaitForQueueYieldable extends EmberYieldable {\n constructor(queueName) {\n super();\n this.queueName = queueName;\n }\n\n onYield(state) {\n let timerId;\n\n try {\n timerId = schedule(this.queueName, () => state.next());\n } catch (error) {\n state.throw(error);\n }\n\n return () => cancel(timerId);\n }\n}\n\nclass WaitForEventYieldable extends EmberYieldable {\n constructor(object, eventName) {\n super();\n this.object = object;\n this.eventName = eventName;\n this.usesDOMEvents = false;\n }\n\n on(callback) {\n if (typeof this.object.addEventListener === 'function') {\n // assume that we're dealing with a DOM `EventTarget`.\n this.usesDOMEvents = true;\n this.object.addEventListener(this.eventName, callback);\n } else {\n this.object.on(this.eventName, callback);\n }\n }\n\n off(callback) {\n if (this.usesDOMEvents) {\n this.object.removeEventListener(this.eventName, callback);\n } else {\n this.object.off(this.eventName, callback);\n }\n }\n\n onYield(state) {\n let fn = null;\n let disposer = () => {\n fn && this.off(fn);\n fn = null;\n };\n\n fn = (event) => {\n disposer();\n state.next(event);\n };\n\n this.on(fn);\n\n return disposer;\n }\n}\n\nclass WaitForPropertyYieldable extends EmberYieldable {\n constructor(object, key, predicateCallback = Boolean) {\n super();\n this.object = object;\n this.key = key;\n\n if (typeof predicateCallback === 'function') {\n this.predicateCallback = predicateCallback;\n } else {\n this.predicateCallback = (v) => v === predicateCallback;\n }\n }\n\n onYield(state) {\n let observerBound = false;\n let observerFn = () => {\n let value = get(this.object, this.key);\n let predicateValue = this.predicateCallback(value);\n if (predicateValue) {\n state.next(value);\n return true;\n }\n };\n\n if (!observerFn()) {\n // eslint-disable-next-line ember/no-observers\n addObserver(this.object, this.key, null, observerFn);\n observerBound = true;\n }\n\n return () => {\n if (observerBound && observerFn) {\n removeObserver(this.object, this.key, null, observerFn);\n }\n };\n }\n}\n\n/**\n * Use `waitForQueue` to pause the task until a certain run loop queue is reached.\n *\n * ```js\n * import { task, waitForQueue } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * yield waitForQueue('afterRender');\n * console.log(\"now we're in the afterRender queue\");\n * }\n * }\n * ```\n *\n * @param {string} queueName the name of the Ember run loop queue\n */\nexport function waitForQueue(queueName) {\n return new WaitForQueueYieldable(queueName);\n}\n\n/**\n * Use `waitForEvent` to pause the task until an event is fired. The event\n * can either be a jQuery event or an Ember.Evented event (or any event system\n * where the object supports `.on()` `.one()` and `.off()`).\n *\n * ```js\n * import { task, waitForEvent } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * console.log(\"Please click anywhere..\");\n * let clickEvent = yield waitForEvent($('body'), 'click');\n * console.log(\"Got event\", clickEvent);\n *\n * let emberEvent = yield waitForEvent(this, 'foo');\n * console.log(\"Got foo event\", emberEvent);\n *\n * // somewhere else: component.trigger('foo', { value: 123 });\n * }\n * }\n * ```\n *\n * @param {object} object the Ember Object, jQuery element, or other object with .on() and .off() APIs\n * that the event fires from\n * @param {function} eventName the name of the event to wait for\n */\nexport function waitForEvent(object, eventName) {\n assert(\n `${object} must include Ember.Evented (or support \\`.on()\\` and \\`.off()\\`) or DOM EventTarget (or support \\`addEventListener\\` and \\`removeEventListener\\`) to be able to use \\`waitForEvent\\``,\n isEventedObject(object),\n );\n return new WaitForEventYieldable(object, eventName);\n}\n\n/**\n * Use `waitForProperty` to pause the task until a property on an object\n * changes to some expected value. This can be used for a variety of use\n * cases, including synchronizing with another task by waiting for it\n * to become idle, or change state in some other way. If you omit the\n * callback, `waitForProperty` will resume execution when the observed\n * property becomes truthy. If you provide a callback, it'll be called\n * immediately with the observed property's current value, and multiple\n * times thereafter whenever the property changes, until you return\n * a truthy value from the callback, or the current task is canceled.\n * You can also pass in a non-Function value in place of the callback,\n * in which case the task will continue executing when the property's\n * value becomes the value that you passed in.\n *\n * ```js\n * import { task, waitForProperty } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n * @tracked foo = 0;\n *\n * @task *myTask() {\n * console.log(\"Waiting for `foo` to become 5\");\n *\n * yield waitForProperty(this, 'foo', v => v === 5);\n * // alternatively: yield waitForProperty(this, 'foo', 5);\n *\n * // somewhere else: this.foo = 5;\n *\n * console.log(\"`foo` is 5!\");\n *\n * // wait for another task to be idle before running:\n * yield waitForProperty(this, 'otherTask.isIdle');\n * console.log(\"otherTask is idle!\");\n * }\n * }\n * ```\n *\n * @param {object} object an object (most likely an Ember Object)\n * @param {string} key the property name that is observed for changes\n * @param {function} callbackOrValue a Function that should return a truthy value\n * when the task should continue executing, or\n * a non-Function value that the watched property\n * needs to equal before the task will continue running\n */\nexport function waitForProperty(object, key, predicateCallback) {\n return new WaitForPropertyYieldable(object, key, predicateCallback);\n}\n","const candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]:not(slot)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n ? function () {}\n : Element.prototype.matches ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n !NoElement && Element.prototype.getRootNode\n ? (element) => element.getRootNode()\n : (element) => element.ownerDocument;\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n let candidates = Array.prototype.slice.apply(\n el.querySelectorAll(candidateSelector)\n );\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidatesScope>}\n */\nconst getCandidatesIteratively = function (\n elements,\n includeContainer,\n options\n) {\n const candidates = [];\n const elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n const element = elementsToCheck.shift();\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n const assigned = element.assignedElements();\n const content = assigned.length ? assigned : element.children;\n const nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // check candidate element\n const validCandidate = matches.call(element, candidateSelector);\n if (\n validCandidate &&\n options.filter(element) &&\n (includeContainer || !elements.includes(element))\n ) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n const shadowRoot =\n element.shadowRoot ||\n // check for an undisclosed shadow\n (typeof options.getShadowRoot === 'function' &&\n options.getShadowRoot(element));\n\n const validShadowRoot =\n !options.shadowRootFilter || options.shadowRootFilter(element);\n\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n const nestedCandidates = getCandidatesIteratively(\n shadowRoot === true ? element.children : shadowRoot.children,\n true,\n options\n );\n\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift(...element.children);\n }\n }\n }\n return candidates;\n};\n\nconst getTabindex = function (node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n //\n // isScope is positive for custom element with shadow root or slot that by default\n // have tabIndex -1, but need to be sorted by document order in order for their\n // content to be inserted in the correct position\n if (\n (isScope ||\n /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) ||\n node.isContentEditable) &&\n isNaN(parseInt(node.getAttribute('tabindex'), 10))\n ) {\n return 0;\n }\n }\n\n return node.tabIndex;\n};\n\nconst sortOrderedTabbables = function (a, b) {\n return a.tabIndex === b.tabIndex\n ? a.documentOrder - b.documentOrder\n : a.tabIndex - b.tabIndex;\n};\n\nconst isInput = function (node) {\n return node.tagName === 'INPUT';\n};\n\nconst isHiddenInput = function (node) {\n return isInput(node) && node.type === 'hidden';\n};\n\nconst isDetailsWithSummary = function (node) {\n const r =\n node.tagName === 'DETAILS' &&\n Array.prototype.slice\n .apply(node.children)\n .some((child) => child.tagName === 'SUMMARY');\n return r;\n};\n\nconst getCheckedRadio = function (nodes, form) {\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\n\nconst isTabbableRadio = function (node) {\n if (!node.name) {\n return true;\n }\n const radioScope = node.form || getRootNode(node);\n const queryRadios = function (name) {\n return radioScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + name + '\"]'\n );\n };\n\n let radioSet;\n if (\n typeof window !== 'undefined' &&\n typeof window.CSS !== 'undefined' &&\n typeof window.CSS.escape === 'function'\n ) {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(\n 'Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s',\n err.message\n );\n return false;\n }\n }\n\n const checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\n\nconst isRadio = function (node) {\n return isInput(node) && node.type === 'radio';\n};\n\nconst isNonTabbableRadio = function (node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\nconst isZeroArea = function (node) {\n const { width, height } = node.getBoundingClientRect();\n return width === 0 && height === 0;\n};\nconst isHidden = function (node, { displayCheck, getShadowRoot }) {\n // NOTE: visibility will be `undefined` if node is detached from the document\n // (see notes about this further down), which means we will consider it visible\n // (this is legacy behavior from a very long way back)\n // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n // _visibility_ check, not a _display_ check\n if (getComputedStyle(node).visibility === 'hidden') {\n return true;\n }\n\n const isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n const nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n\n // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n // (but NOT _the_ document; see second 'If' comment below for more).\n // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n // is attached, and the one we need to check if it's in the document or not (because the\n // shadow, and all nodes it contains, is never considered in the document since shadows\n // behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n // is hidden, or is not in the document itself but is detached, it will affect the shadow's\n // visibility, including all the nodes it contains). The host could be any normal node,\n // or a custom element (i.e. web component). Either way, that's the one that is considered\n // part of the document, not the shadow root, nor any of its children (i.e. the node being\n // tested).\n // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n // document (per the docs) and while it's a Document-type object, that document does not\n // appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n // to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n // using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n // node is actually detached.\n const nodeRootHost = getRootNode(node).host;\n const nodeIsAttached =\n nodeRootHost?.ownerDocument.contains(nodeRootHost) ||\n node.ownerDocument.contains(node);\n\n if (!displayCheck || displayCheck === 'full') {\n if (typeof getShadowRoot === 'function') {\n // figure out if we should consider the node to be in an undisclosed shadow and use the\n // 'non-zero-area' fallback\n const originalNode = node;\n while (node) {\n const parentElement = node.parentElement;\n const rootNode = getRootNode(node);\n if (\n parentElement &&\n !parentElement.shadowRoot &&\n getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n ) {\n // node has an undisclosed shadow which means we can only treat it as a black box, so we\n // fall back to a non-zero-area test\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n // iterate up slot\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n // cross shadow boundary\n node = rootNode.host;\n } else {\n // iterate up normal dom\n node = parentElement;\n }\n }\n\n node = originalNode;\n }\n // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n // (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n // it might be a falsy value, which means shadow DOM support is disabled\n\n // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n // now we can just test to see if it would normally be visible or not, provided it's\n // attached to the main document.\n // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n // `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n if (nodeIsAttached) {\n // this works wherever the node is: if there's at least one client rect, it's\n // somehow displayed; it also covers the CSS 'display: contents' case where the\n // node itself is hidden in place of its contents; and there's no need to search\n // up the hierarchy either\n return !node.getClientRects().length;\n }\n\n // Else, the node isn't attached to the document, which means the `getClientRects()`\n // API will __always__ return zero rects (this can happen, for example, if React\n // is used to render nodes onto a detached tree, as confirmed in this thread:\n // https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n //\n // It also means that even window.getComputedStyle(node).display will return `undefined`\n // because styles are only computed for nodes that are in the document.\n //\n // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n // somehow. Though it was never stated officially, anyone who has ever used tabbable\n // APIs on nodes in detached containers has actually implicitly used tabbable in what\n // was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n // considering __everything__ to be visible because of the innability to determine styles.\n } else if (displayCheck === 'non-zero-area') {\n // NOTE: Even though this tests that the node's client rect is non-zero to determine\n // whether it's displayed, and that a detached node will __always__ have a zero-area\n // client rect, we don't special-case for whether the node is attached or not. In\n // this mode, we do want to consider nodes that have a zero area to be hidden at all\n // times, and that includes attached or not.\n return isZeroArea(node);\n }\n\n // visible, as far as we can tell, or per current `displayCheck` mode\n return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\nconst isDisabledFromFieldset = function (node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n let parentNode = node.parentElement;\n // check if `node` is contained in a disabled <fieldset>\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> among the children of the disabled <fieldset>\n for (let i = 0; i < parentNode.children.length; i++) {\n const child = parentNode.children.item(i);\n // when the first <legend> (in document order) is found\n if (child.tagName === 'LEGEND') {\n // if its parent <fieldset> is not nested in another disabled <fieldset>,\n // return whether `node` is a descendant of its first <legend>\n return matches.call(parentNode, 'fieldset[disabled] *')\n ? true\n : !child.contains(node);\n }\n }\n // the disabled <fieldset> containing `node` has no <legend>\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n\n // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n return false;\n};\n\nconst isNodeMatchingSelectorFocusable = function (options, node) {\n if (\n node.disabled ||\n isHiddenInput(node) ||\n isHidden(node, options) ||\n // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) ||\n isDisabledFromFieldset(node)\n ) {\n return false;\n }\n return true;\n};\n\nconst isNodeMatchingSelectorTabbable = function (options, node) {\n if (\n isNonTabbableRadio(node) ||\n getTabindex(node) < 0 ||\n !isNodeMatchingSelectorFocusable(options, node)\n ) {\n return false;\n }\n return true;\n};\n\nconst isValidShadowRootTabbable = function (shadowHostNode) {\n const tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n // If a custom element has an explicit negative tabindex,\n // browsers will not allow tab targeting said element's children.\n return false;\n};\n\n/**\n * @param {Array.<Element|CandidatesScope>} candidates\n * @returns Element[]\n */\nconst sortByOrder = function (candidates) {\n const regularTabbables = [];\n const orderedTabbables = [];\n candidates.forEach(function (item, i) {\n const isScope = !!item.scope;\n const element = isScope ? item.scope : item;\n const candidateTabindex = getTabindex(element, isScope);\n const elements = isScope ? sortByOrder(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope\n ? regularTabbables.push(...elements)\n : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item: item,\n isScope: isScope,\n content: elements,\n });\n }\n });\n\n return orderedTabbables\n .sort(sortOrderedTabbables)\n .reduce((acc, sortable) => {\n sortable.isScope\n ? acc.push(...sortable.content)\n : acc.push(sortable.content);\n return acc;\n }, [])\n .concat(regularTabbables);\n};\n\nconst tabbable = function (el, options) {\n options = options || {};\n\n let candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable,\n });\n } else {\n candidates = getCandidates(\n el,\n options.includeContainer,\n isNodeMatchingSelectorTabbable.bind(null, options)\n );\n }\n return sortByOrder(candidates);\n};\n\nconst focusable = function (el, options) {\n options = options || {};\n\n let candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot,\n });\n } else {\n candidates = getCandidates(\n el,\n options.includeContainer,\n isNodeMatchingSelectorFocusable.bind(null, options)\n );\n }\n\n return candidates;\n};\n\nconst isTabbable = function (node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\n\nconst focusableCandidateSelector = /* #__PURE__ */ candidateSelectors\n .concat('iframe')\n .join(',');\n\nconst isFocusable = function (node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { tabbable, focusable, isTabbable, isFocusable };\n","import { tabbable, focusable, isFocusable, isTabbable } from 'tabbable';\n\nconst activeFocusTraps = (function () {\n const trapQueue = [];\n return {\n activateTrap(trap) {\n if (trapQueue.length > 0) {\n const activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n const trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap(trap) {\n const trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n },\n };\n})();\n\nconst isSelectableInput = function (node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n};\n\nconst isEscapeEvent = function (e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n return e.key === 'Tab' || e.keyCode === 9;\n};\n\nconst delay = function (fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nconst findIndex = function (arr, fn) {\n let idx = -1;\n\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function'\n ? event.composedPath()[0]\n : event.target;\n};\n\nconst createFocusTrap = function (elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n const doc = userOptions?.document || document;\n\n const config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n ...userOptions,\n };\n\n const state = {\n // containers given to createFocusTrap()\n // @type {Array<HTMLElement>}\n containers: [],\n\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // empty if none\n // firstTabbableNode: HTMLElement|null,\n // lastTabbableNode: HTMLElement|null,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [], // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined,\n };\n\n let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n const getOption = (configOverrideOptions, optionName, configOptionName) => {\n return configOverrideOptions &&\n configOverrideOptions[optionName] !== undefined\n ? configOverrideOptions[optionName]\n : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n const findContainerIndex = function (element) {\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(\n ({ container, tabbableNodes }) =>\n container.contains(element) ||\n // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n tabbableNodes.find((node) => node === element)\n );\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @returns {undefined | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `false` if the option\n * resolved to `false` (node explicitly not given); otherwise, the resolved\n * DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node.\n */\n const getNodeForOption = function (optionName, ...params) {\n let optionValue = config[optionName];\n\n if (typeof optionValue === 'function') {\n optionValue = optionValue(...params);\n }\n\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\n `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n );\n }\n\n let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n if (!node) {\n throw new Error(\n `\\`${optionName}\\` as selector refers to no known node`\n );\n }\n }\n\n return node;\n };\n\n const getInitialFocusNode = function () {\n let node = getNodeForOption('initialFocus');\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n\n if (node === undefined) {\n // option not specified: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n const firstTabbableGroup = state.tabbableGroups[0];\n const firstTabbableNode =\n firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n };\n\n const updateTabbableNodes = function () {\n state.containerGroups = state.containers.map((container) => {\n const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes\n const focusableNodes = focusable(container, config.tabbableOptions);\n\n return {\n container,\n tabbableNodes,\n focusableNodes,\n firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n lastTabbableNode:\n tabbableNodes.length > 0\n ? tabbableNodes[tabbableNodes.length - 1]\n : null,\n\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode(node, forward = true) {\n // NOTE: If tabindex is positive (in order to manipulate the tab order separate\n // from the DOM order), this __will not work__ because the list of focusableNodes,\n // while it contains tabbable nodes, does not sort its nodes in any order other\n // than DOM order, because it can't: Where would you place focusable (but not\n // tabbable) nodes in that order? They have no order, because they aren't tabbale...\n // Support for positive tabindex is already broken and hard to manage (possibly\n // not supportable, TBD), so this isn't going to make things worse than they\n // already are, and at least makes things better for the majority of cases where\n // tabindex is either 0/unset or negative.\n // FYI, positive tabindex issue: https://github.com/focus-trap/focus-trap/issues/375\n const nodeIdx = focusableNodes.findIndex((n) => n === node);\n if (nodeIdx < 0) {\n return undefined;\n }\n\n if (forward) {\n return focusableNodes\n .slice(nodeIdx + 1)\n .find((n) => isTabbable(n, config.tabbableOptions));\n }\n\n return focusableNodes\n .slice(0, nodeIdx)\n .reverse()\n .find((n) => isTabbable(n, config.tabbableOptions));\n },\n };\n });\n\n state.tabbableGroups = state.containerGroups.filter(\n (group) => group.tabbableNodes.length > 0\n );\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (\n state.tabbableGroups.length <= 0 &&\n !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error(\n 'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n );\n }\n };\n\n const tryFocus = function (node) {\n if (node === false) {\n return;\n }\n\n if (node === doc.activeElement) {\n return;\n }\n\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus({ preventScroll: !!config.preventScroll });\n state.mostRecentlyFocusedNode = node;\n\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n\n const getReturnFocusNode = function (previousActiveElement) {\n const node = getNodeForOption('setReturnFocus', previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n const checkPointerDown = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus:\n config.returnFocusOnDeactivate &&\n !isFocusable(target, config.tabbableOptions),\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n const checkFocusIn = function (e) {\n const target = getActualTarget(e);\n const targetContained = findContainerIndex(target) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n };\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n const checkTab = function (e) {\n const target = getActualTarget(e);\n updateTabbableNodes();\n\n let destinationNode = null;\n\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n const containerIndex = findContainerIndex(target);\n const containerGroup =\n containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back in to...\n if (e.shiftKey) {\n // ...the last node in the last group\n destinationNode =\n state.tabbableGroups[state.tabbableGroups.length - 1]\n .lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (e.shiftKey) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n let startOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ firstTabbableNode }) => target === firstTabbableNode\n );\n\n if (\n startOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target, false)))\n ) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n const destinationGroupIndex =\n startOfGroupIndex === 0\n ? state.tabbableGroups.length - 1\n : startOfGroupIndex - 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n let lastOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ lastTabbableNode }) => target === lastTabbableNode\n );\n\n if (\n lastOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target)))\n ) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n const destinationGroupIndex =\n lastOfGroupIndex === state.tabbableGroups.length - 1\n ? 0\n : lastOfGroupIndex + 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.firstTabbableNode;\n }\n }\n } else {\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n\n if (destinationNode) {\n e.preventDefault();\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n const checkKey = function (e) {\n if (\n isEscapeEvent(e) &&\n valueOrHandler(config.escapeDeactivates, e) !== false\n ) {\n e.preventDefault();\n trap.deactivate();\n return;\n }\n\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n };\n\n const checkClick = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target) >= 0) {\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n const addListeners = function () {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false,\n });\n\n return trap;\n };\n\n const removeListeners = function () {\n if (!state.active) {\n return;\n }\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n\n get paused() {\n return state.paused;\n },\n\n activate(activateOptions) {\n if (state.active) {\n return this;\n }\n\n const onActivate = getOption(activateOptions, 'onActivate');\n const onPostActivate = getOption(activateOptions, 'onPostActivate');\n const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n if (onActivate) {\n onActivate();\n }\n\n const finishActivation = () => {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n if (onPostActivate) {\n onPostActivate();\n }\n };\n\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(\n finishActivation,\n finishActivation\n );\n return this;\n }\n\n finishActivation();\n return this;\n },\n\n deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n\n const options = {\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus,\n ...deactivateOptions,\n };\n\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n const onDeactivate = getOption(options, 'onDeactivate');\n const onPostDeactivate = getOption(options, 'onPostDeactivate');\n const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n const returnFocus = getOption(\n options,\n 'returnFocus',\n 'returnFocusOnDeactivate'\n );\n\n if (onDeactivate) {\n onDeactivate();\n }\n\n const finishDeactivation = () => {\n delay(() => {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(\n getReturnFocusNode(state.nodeFocusedBeforeActivation)\n ).then(finishDeactivation, finishDeactivation);\n return this;\n }\n\n finishDeactivation();\n return this;\n },\n\n pause() {\n if (state.paused || !state.active) {\n return this;\n }\n\n state.paused = true;\n removeListeners();\n\n return this;\n },\n\n unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n\n return this;\n },\n\n updateContainerElements(containerElements) {\n const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n state.containers = elementsAsArray.map((element) =>\n typeof element === 'string' ? doc.querySelector(element) : element\n );\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n return this;\n },\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n\n return trap;\n};\n\nexport { createFocusTrap };\n","import { capabilities, setModifierManager } from '@ember/modifier';\nimport { createFocusTrap } from 'focus-trap';\n\nlet cap;\ntry {\n cap = capabilities('3.22');\n} catch {\n cap = capabilities('3.13');\n}\nvar focusTrap = setModifierManager(() => {\n return {\n capabilities: cap,\n createModifier() {\n return {\n focusTrapOptions: undefined,\n isActive: true,\n isPaused: false,\n shouldSelfFocus: false,\n focusTrap: undefined\n };\n },\n installModifier(state, element, {\n named: {\n isActive,\n isPaused,\n shouldSelfFocus,\n focusTrapOptions,\n additionalElements,\n _createFocusTrap\n }\n }) {\n // treat the original focusTrapOptions as immutable, so do a shallow copy here\n state.focusTrapOptions = {\n ...focusTrapOptions\n } || {};\n if (typeof isActive !== 'undefined') {\n state.isActive = isActive;\n }\n if (typeof isPaused !== 'undefined') {\n state.isPaused = isPaused;\n }\n if (state.focusTrapOptions && typeof state.focusTrapOptions.initialFocus === 'undefined' && shouldSelfFocus) {\n state.focusTrapOptions.initialFocus = element;\n }\n\n // Private to allow mocking FocusTrap in tests\n let createFocusTrap$1 = createFocusTrap;\n if (_createFocusTrap) {\n createFocusTrap$1 = _createFocusTrap;\n }\n if (state.focusTrapOptions.returnFocusOnDeactivate !== false) {\n state.focusTrapOptions.returnFocusOnDeactivate = true;\n }\n state.focusTrap = createFocusTrap$1(typeof additionalElements !== 'undefined' ? [element, ...additionalElements] : element, state.focusTrapOptions);\n if (state.isActive) {\n state.focusTrap.activate();\n }\n if (state.isPaused) {\n state.focusTrap.pause();\n }\n },\n updateModifier(state, {\n named: params\n }) {\n const focusTrapOptions = params.focusTrapOptions || {};\n if (state.isActive && !params.isActive) {\n const {\n returnFocusOnDeactivate\n } = focusTrapOptions;\n const returnFocus = typeof returnFocusOnDeactivate === 'undefined' ? true : false;\n state.focusTrap.deactivate({\n returnFocus\n });\n } else if (!state.isActive && params.isActive) {\n state.focusTrap.activate();\n }\n if (state.isPaused && !params.isPaused) {\n state.focusTrap.unpause();\n } else if (!state.isPaused && params.isPaused) {\n state.focusTrap.pause();\n }\n\n // Update state\n state.focusTrapOptions = focusTrapOptions;\n if (typeof params.isActive !== 'undefined') {\n state.isActive = params.isActive;\n }\n if (typeof params.isPaused !== 'undefined') {\n state.isPaused = params.isPaused;\n }\n },\n destroyModifier({\n focusTrap\n }) {\n focusTrap.deactivate();\n }\n };\n}, class FocusTrapModifier {});\n\nexport { focusTrap as default };\n","/**\n * @function getTask\n * @param obj\n * @param taskOrName\n * @param taskName\n */\nfunction getTask(obj, taskOrName, taskName) {\n let type = typeof taskOrName;\n let task;\n\n if (type === 'function') {\n task = taskOrName;\n } else if (type === 'string') {\n task = obj[taskOrName];\n\n if (typeof task !== 'function') {\n throw new TypeError(`The method name '${taskOrName}' passed to ${taskName} does not resolve to a valid function.`);\n }\n } else {\n throw new TypeError(`You must pass a task function or method name to '${taskName}'.`);\n }\n\n return task;\n}\n\nexport { getTask as default };\n","import { cancel } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\n\nconst NULL_TIMER_ID = -1;\n/**\n * A map of instances/timers that allows us to\n * store cancelIds for scheduled timers per instance.\n *\n * @private\n */\n\nlet registeredTimers = new WeakMap();\n/**\n * Test use only. Allows for swapping out the WeakMap to a Map, giving\n * us the ability to detect whether the timers set is empty.\n *\n * @private\n * @param {*} mapForTesting A map used to ensure correctness when testing.\n */\n\nfunction _setRegisteredTimers(mapForTesting) {\n registeredTimers = mapForTesting;\n}\nfunction getTimersDisposable(destroyable, timers) {\n return function () {\n timers.forEach(cancelId => {\n cancelTask(destroyable, cancelId);\n });\n timers.clear();\n };\n}\nfunction getTimers(destroyable) {\n let timers = registeredTimers.get(destroyable);\n\n if (!timers) {\n timers = new Set();\n registeredTimers.set(destroyable, timers);\n registerDestructor(destroyable, getTimersDisposable(destroyable, timers));\n }\n\n return timers;\n}\n/**\n * Cancel a previously scheduled task.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { runTask, cancelTask } from 'ember-lifeline';\n *\n * export default CancelableComponent extends Component {\n * start() {\n * this._cancelId = runTask(this, () => {\n * console.log('This runs after 5 seconds if this component is still displayed');\n * }, 5000)\n * },\n *\n * disable() {\n * cancelTask(this, this._cancelId);\n * },\n * }\n * ```\n *\n * @function cancelTask\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { Number } cancelId the id returned from the *Task call\n * @public\n */\n\nfunction cancelTask(destroyable, cancelId) {\n let timers = getTimers(destroyable);\n timers.delete(cancelId);\n cancel(cancelId);\n}\n\nexport { NULL_TIMER_ID, _setRegisteredTimers, cancelTask, getTimers, getTimersDisposable };\n","import { later } from '@ember/runloop';\nimport { isDestroying } from '@ember/destroyable';\nimport getTask from './utils/get-task.js';\nimport { NULL_TIMER_ID, getTimers } from './cancel-task.js';\n\n/**\n * Registers and runs the provided task function for the provided object at the specified\n * timeout (defaulting to 0). The timer is properly canceled if the object is destroyed\n * before it is invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { runTask } from 'ember-lifeline';\n *\n * export default RunComponent extends Component {\n * start() {\n * runTask(this, () => {\n * console.log('This runs after 5 seconds if this component is still displayed');\n * }, 5000)\n * },\n * });\n * ```\n *\n * @function runTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { Function | String } taskOrName a function representing the task, or string\n * specifying a property representing the task,\n * which is run at the provided time specified\n * by timeout\n * @param { Number } [timeout=0] the time in the future to run the task\n * @public\n */\n\nfunction runTask(destroyable, taskOrName, timeout = 0) {\n if (isDestroying(destroyable)) {\n return NULL_TIMER_ID;\n }\n\n let task = getTask(destroyable, taskOrName, 'runTask');\n let timers = getTimers(destroyable);\n let cancelId = later(() => {\n timers.delete(cancelId);\n task.call(destroyable);\n }, timeout);\n timers.add(cancelId);\n return cancelId;\n}\n\nexport { runTask };\n","import { assert } from '@ember/debug';\nimport { schedule } from '@ember/runloop';\nimport { isDestroying } from '@ember/destroyable';\nimport { NULL_TIMER_ID, getTimers } from './cancel-task.js';\nimport getTask from './utils/get-task.js';\n\n/**\n * Adds the provided function to the named queue for the provided object. The timer is\n * properly canceled if the object is destroyed before it is invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { scheduleTask } from 'ember-lifeline';\n *\n * export default ScheduledComponent extends Component {\n * start() {\n * scheduleTask(this, 'actions', () => {\n * console.log('This runs at the end of the run loop (via the actions queue) if this component is still displayed');\n * })\n * },\n * });\n * ```\n *\n * @function scheduleTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } queueName the queue to schedule the task into\n * @param { Function | String } taskOrName a function representing the task, or string\n * specifying a property representing the task,\n * which is run at the provided time specified\n * by timeout\n * @param { ...* } args arguments to pass to the task\n * @public\n */\n\nfunction scheduleTask(destroyable, queueName, taskOrName, ...args) {\n assert(`Called \\`scheduleTask\\` without a string as the first argument on ${destroyable}.`, typeof queueName === 'string');\n assert(`Called \\`scheduleTask\\` while trying to schedule to the \\`afterRender\\` queue on ${destroyable}.`, queueName !== 'afterRender');\n\n if (isDestroying(destroyable)) {\n return NULL_TIMER_ID;\n }\n\n let task = getTask(destroyable, taskOrName, 'scheduleTask');\n let timers = getTimers(destroyable);\n let cancelId;\n\n let taskWrapper = (...taskArgs) => {\n timers.delete(cancelId);\n task.call(destroyable, ...taskArgs);\n };\n\n cancelId = schedule(queueName, destroyable, taskWrapper, ...args);\n timers.add(cancelId);\n return cancelId;\n}\n\nexport { scheduleTask };\n","import { assert } from '@ember/debug';\nimport { throttle } from '@ember/runloop';\nimport { isDestroying } from '@ember/destroyable';\nimport { NULL_TIMER_ID, getTimers } from './cancel-task.js';\n\n/**\n * Runs the function with the provided name immediately, and only once in the time window\n * specified by the spacing argument.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { throttleTask } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n * logMe() {\n * console.log('This will run once immediately, then only once every 300ms.');\n * },\n *\n * click() {\n * throttleTask(this, 'logMe', 300);\n * },\n * });\n * ```\n *\n * @function throttleTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } taskName the name of the task to throttle\n * @param { ...* } [throttleArgs] arguments to pass to the throttled method\n * @param { Number } spacing the time in the future to run the task\n * @param { Boolean } [immediate] Trigger the function on the leading instead of the trailing edge of the wait interval. Defaults to true.\n * @public\n */\n\nfunction throttleTask(destroyable, taskName, ...throttleArgs) {\n assert(`Called \\`throttleTask\\` without a string as the first argument on ${destroyable}.`, typeof taskName === 'string');\n assert(`Called \\`throttleTask('${taskName}')\\` where '${taskName}' is not a function.`, typeof destroyable[taskName] === 'function');\n\n if (isDestroying(destroyable)) {\n return NULL_TIMER_ID;\n }\n\n const lastArgument = throttleArgs[throttleArgs.length - 1];\n const spacing = typeof lastArgument === 'boolean' ? throttleArgs[throttleArgs.length - 2] : lastArgument;\n assert(`Called \\`throttleTask\\` with incorrect \\`spacing\\` argument. Expected Number and received \\`${spacing}\\``, typeof spacing === 'number');\n let timers = getTimers(destroyable);\n let cancelId = throttle(destroyable, // @ts-ignore Ignores type mismatch issues with passing rest arguments to throttle.\n taskName, ...throttleArgs);\n timers.add(cancelId);\n return cancelId;\n}\n\nexport { throttleTask };\n","import Ember from 'ember';\nimport getTask from './utils/get-task.js';\nimport { registerDestructor } from '@ember/destroyable';\n\nfunction indexable(input) {\n return input;\n}\n/**\n * A map of instances/poller functions that allows us to\n * store poller tokens per instance.\n *\n * @private\n *\n */\n\n\nlet registeredPollers = new WeakMap();\n/**\n * Test use only. Allows for swapping out the WeakMap to a Map, giving\n * us the ability to detect whether the pollers set is empty.\n *\n * @private\n * @param {*} mapForTesting A map used to ensure correctness when testing.\n */\n\nfunction _setRegisteredPollers(mapForTesting) {\n registeredPollers = mapForTesting;\n}\nlet token = 0;\n\nlet _shouldPollOverride;\n\nfunction shouldPoll() {\n if (_shouldPollOverride) {\n return _shouldPollOverride();\n }\n\n return !Ember.testing;\n}\n/**\n * Allows for overriding of the polling behavior to explicitly control\n * whether polling should occur or not.\n *\n * @param { Function } callback\n * @public\n */\n\n\nfunction setShouldPoll(callback) {\n _shouldPollOverride = callback;\n}\nfunction getQueuedPollTasks() {\n let symbol = Symbol.for('LIFELINE_QUEUED_POLL_TASKS');\n let globalObj = getGlobal();\n let queuedPollTasks = globalObj[symbol];\n\n if (!queuedPollTasks) {\n queuedPollTasks = globalObj[symbol] = new Map();\n }\n\n return queuedPollTasks;\n}\n/**\n * Sets up a function that can perform polling logic in a testing safe way.\n * The task is invoked synchronously with an argument (generally called `next`).\n * In normal development/production when `next` is invoked, it will trigger the\n * task again (recursively). However, when in test mode the recursive polling\n * functionality is disabled, and usage of the `pollTaskFor` helper is required.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { pollTask, runTask } from 'ember-lifeline';\n *\n * export default PollingComponent extends Component {\n * api: injectService(),\n *\n * init() {\n * this._super(...arguments);\n *\n * let token = pollTask(this, (next) => {\n * this.get('api').request('get', 'some/path')\n * .then(() => {\n * runTask(this, next, 1800);\n * })\n * });\n *\n * this._pollToken = token;\n * },\n * });\n * ```\n *\n * Test Example:\n *\n * ```js\n * import { settled } from '@ember/test-helpers';\n * import { pollTaskFor } from 'ember-lifeline';\n *\n *\n * test('foo-bar watches things', async function(assert) {\n * await render(hbs`{{foo-bar}}`);\n *\n * assert.strictEqual(serverRequests, 1, 'called initially');\n *\n * pollTaskFor(this._pollToken);\n *\n * await settled();\n *\n * assert.strictEqual(serverRequests, 2, 'called again');\n *\n * await settled();\n * });\n * ```\n *\n * @method pollTask\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { TaskOrName } taskOrName a function representing the task, or string\n * specifying a property representing the task,\n * which is run at the provided time specified\n * by timeout\n * @param { Token } token the Token for the pollTask, either a string or number\n * @public\n */\n\nfunction pollTask(destroyable, taskOrName, token = getNextToken()) {\n let next;\n let task = getTask(destroyable, taskOrName, 'pollTask');\n\n let tick = () => task.call(destroyable, next);\n\n let pollers = registeredPollers.get(destroyable);\n\n if (!pollers) {\n pollers = new Set();\n registeredPollers.set(destroyable, pollers);\n registerDestructor(destroyable, getPollersDisposable(destroyable, pollers));\n }\n\n pollers.add(token);\n\n if (shouldPoll()) {\n next = tick;\n } else {\n next = () => {\n getQueuedPollTasks().set(token, tick);\n };\n }\n\n task.call(destroyable, next);\n return token;\n}\n/**\n * Clears a previously setup polling task.\n *\n * NOTE: This does not cancel any nested `runTask` calls. You're required to cancel any\n * cancelable behaviors, including any calls to `runTask` using `cancelTask`.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { inject as service } from '@ember/service';\n * import { pollTask, runTask } from 'ember-lifeline';\n *\n * export default AutoRefreshComponent extends Component {\n * @service api;\n *\n * enableAutoRefresh() {\n * this._pollToken = pollTask(this, (next) => {\n * this.get('api').request('get', 'some/path')\n * .then(() => {\n * runTask(this, next, 1800);\n * })\n * });\n * },\n *\n * disableAutoRefresh() {\n * cancelPoll(this, this._pollToken);\n * },\n * }\n * ```\n *\n * @method cancelPoll\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { Token } token the Token for the pollTask to be cleared, either a string or number\n * @public\n */\n\nfunction cancelPoll(destroyable, token) {\n let pollToken;\n let pollers = registeredPollers.get(destroyable);\n pollToken = token;\n\n if (pollers !== undefined) {\n pollers.delete(pollToken);\n }\n\n getQueuedPollTasks().delete(pollToken);\n}\n\nfunction getGlobal() {\n // eslint-disable-next-line n/no-unsupported-features/es-builtins\n if (typeof globalThis !== 'undefined') return indexable(globalThis);\n if (typeof self !== 'undefined') return indexable(self);\n if (typeof window !== 'undefined') return indexable(window);\n if (typeof global !== 'undefined') return indexable(global);\n throw new Error('unable to locate global object');\n}\n\nfunction getPollersDisposable(destroyable, pollers) {\n return function () {\n pollers.forEach(token => {\n cancelPoll(destroyable, token);\n });\n };\n}\n\nfunction getNextToken() {\n return token++;\n}\n\nexport { _setRegisteredPollers, cancelPoll, getQueuedPollTasks, pollTask, setShouldPoll };\n","import { assert } from '@ember/debug';\nimport { cancel, debounce } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\n\n/**\n * A map of instances/debounce functions that allows us to\n * store pending debounces per instance.\n *\n * @private\n */\n\nconst registeredDebounces = new WeakMap();\n/**\n * Runs the function with the provided name after the timeout has expired on the last\n * invocation. The timer is properly canceled if the object is destroyed before it is\n * invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { debounceTask } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n * logMe() {\n * console.log('This will only run once every 300ms.');\n * },\n *\n * click() {\n * debounceTask(this, 'logMe', 300);\n * },\n * }\n * ```\n *\n * @function debounceTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } name the name of the task to debounce\n * @param { ...* } debounceArgs arguments to pass to the debounced method\n * @param { Number } spacing the amount of time to wait before calling the method (in milliseconds)\n * @param { Boolean } [immediate] Trigger the function on the leading instead of the trailing edge of the wait interval. Defaults to false.\n * @public\n */\n\nfunction debounceTask(destroyable, name, ...debounceArgs) {\n assert(`Called \\`debounceTask\\` without a string as the first argument on ${destroyable}.`, typeof name === 'string');\n assert(`Called \\`destroyable.debounceTask('${name}', ...)\\` where 'destroyable.${name}' is not a function.`, typeof destroyable[name] === 'function');\n\n if (destroyable.isDestroying) {\n return;\n }\n\n const lastArgument = debounceArgs[debounceArgs.length - 1];\n const spacing = typeof lastArgument === 'boolean' ? debounceArgs[debounceArgs.length - 2] : lastArgument;\n assert(`Called \\`debounceTask\\` with incorrect \\`spacing\\` argument. Expected Number and received \\`${spacing}\\``, typeof spacing === 'number');\n let pendingDebounces = registeredDebounces.get(destroyable);\n\n if (!pendingDebounces) {\n pendingDebounces = new Map();\n registeredDebounces.set(destroyable, pendingDebounces);\n registerDestructor(destroyable, getDebouncesDisposable(pendingDebounces));\n }\n\n let debouncedTask;\n\n if (!pendingDebounces.has(name)) {\n debouncedTask = (...args) => {\n pendingDebounces.delete(name);\n destroyable[name](...args);\n };\n } else {\n debouncedTask = pendingDebounces.get(name).debouncedTask;\n } // cancelId is new, even if the debounced function was already present\n\n\n let cancelId = debounce(destroyable, debouncedTask, ...debounceArgs);\n pendingDebounces.set(name, {\n debouncedTask,\n cancelId\n });\n}\n/**\n * Cancel a previously debounced task.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { debounceTask, cancelDebounce } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n * logMe() {\n * console.log('This will only run once every 300ms.');\n * },\n *\n * click() {\n * debounceTask(this, 'logMe', 300);\n * },\n *\n * disable() {\n * cancelDebounce(this, 'logMe');\n * },\n * }\n * ```\n *\n * @function cancelDebounce\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } methodName the name of the debounced method to cancel\n * @public\n */\n\nfunction cancelDebounce(destroyable, methodName) {\n if (!registeredDebounces.has(destroyable)) {\n return;\n }\n\n const pendingDebounces = registeredDebounces.get(destroyable);\n\n if (!pendingDebounces.has(methodName)) {\n return;\n }\n\n const {\n cancelId\n } = pendingDebounces.get(methodName);\n pendingDebounces.delete(methodName);\n cancel(cancelId);\n}\n\nfunction getDebouncesDisposable(debounces) {\n return function () {\n if (debounces.size === 0) {\n return;\n }\n\n debounces.forEach(p => cancel(p.cancelId));\n };\n}\n\nexport { cancelDebounce, debounceTask };\n","import { capabilities } from '@ember/modifier';\nimport { destroy } from '@ember/destroyable';\nimport type Owner from '@ember/owner';\n\nimport type ClassBasedModifier from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\ninterface State<S> {\n instance: ClassBasedModifier<S>;\n}\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\ninterface CreatedState<S> extends State<S> {\n element: null;\n}\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\ninterface InstalledState<S> extends State<S> {\n element: ElementFor<S>;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n state: CreatedState<S>,\n element: ElementFor<S>,\n): InstalledState<S> {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState<S>`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state as State<S> as InstalledState<S>;\n installedState.element = element;\n return installedState;\n}\n\nexport default class ClassBasedModifierManager<S> {\n capabilities = capabilities('3.22');\n\n constructor(private owner: Owner) {}\n\n createModifier(\n modifierClass: typeof ClassBasedModifier,\n args: ArgsFor<S>,\n ): CreatedState<S> {\n const instance = new modifierClass(this.owner, args);\n return { instance, element: null };\n }\n\n installModifier(\n createdState: CreatedState<S>,\n element: ElementFor<S>,\n args: ArgsFor<S>,\n ): void {\n const state = installElement(createdState, element);\n state.instance.modify(element, args.positional, args.named);\n }\n\n updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n state.instance.modify(state.element, args.positional, args.named);\n }\n\n destroyModifier({ instance }: InstalledState<S>): void {\n destroy(instance);\n }\n}\n","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport type Owner from '@ember/owner';\nimport Manager from './modifier-manager.ts';\nimport type {\n ElementFor,\n ArgsFor,\n DefaultSignature,\n PositionalArgs,\n NamedArgs,\n} from '../signature';\nimport type Opaque from '../opaque';\n\n// Preserve the signature on a class-based modifier, so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport default interface ClassBasedModifier<S = DefaultSignature>\n extends Opaque<S> {}\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n * convenience reasons, and don't want to teardown the state of your modifier\n * every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport default class ClassBasedModifier<S = DefaultSignature> {\n // `args` is passed here for the sake of subclasses to have access to args in\n // their constructors while having constructors which are properly asssignable\n // for the superclass.\n /**\n *\n * @param owner An instance of an Owner (for service injection etc.).\n * @param args The positional and named arguments passed to the modifier.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n constructor(owner: Owner, args: ArgsFor<S>) {\n setOwner(this, owner);\n }\n\n /**\n * Called when the modifier is installed and any time any tracked state used\n * in the modifier changes.\n *\n * If you need to do first-time-only setup, create a class field representing\n * the initialization state and check it when running the hook. That is also\n * where and when you should use `registerDestructor` for any teardown you\n * need to do. For example:\n *\n * ```js\n * function disconnect(instance) {\n * instance.observer?.disconnect();\n * }\n *\n * class IntersectionObserver extends Modifier {\n * observer;\n *\n * constructor(owner, args) {\n * super(owner, args);\n * registerDestructor(this, disconnect);\n * }\n *\n * modify(element, callback, options) {\n * disconnect(this);\n *\n * this.observer = new IntersectionObserver(callback, options);\n * this.observer.observe(element);\n * }\n * }\n * ```\n *\n * @param element The element to which the modifier is applied.\n * @param positional The positional arguments to the modifier.\n * @param named The named arguments to the modifier.\n */\n modify(\n /* eslint-disable @typescript-eslint/no-unused-vars */\n element: ElementFor<S>,\n positional: PositionalArgs<S>,\n named: NamedArgs<S>,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ): void {\n /* no op, for subclassing */\n }\n}\n\nsetModifierManager((owner) => new Manager(owner), ClassBasedModifier);\n","import { setModifierManager } from '@ember/modifier';\nimport type {\n ElementFor,\n EmptyObject,\n NamedArgs,\n PositionalArgs,\n} from '../signature';\nimport type Modifier from '../class-based/modifier';\nimport FunctionBasedModifierManager from './modifier-manager.ts';\n\n// Provide a singleton manager.\nconst MANAGER = new FunctionBasedModifierManager();\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier<S>`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\nexport declare abstract class FunctionBasedModifierInstance<\n S,\n> extends Modifier<S> {\n protected abstract __concrete__: never;\n}\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\nexport type FunctionBasedModifier<S> =\n abstract new () => FunctionBasedModifierInstance<S>;\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\nexport type Teardown = () => unknown;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\nexport default function modifier<\n E extends Element,\n P extends unknown[],\n N = EmptyObject,\n>(\n fn: (element: E, positional: P, named: N) => void | Teardown,\n): FunctionBasedModifier<{\n Args: {\n Positional: P;\n Named: N;\n };\n Element: E;\n}>;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier<Sig>((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\nexport default function modifier<S>(\n fn: (\n element: ElementFor<S>,\n positional: PositionalArgs<S>,\n named: NamedArgs<S>,\n ) => void | Teardown,\n): FunctionBasedModifier<{\n Element: ElementFor<S>;\n Args: {\n Named: NamedArgs<S>;\n Positional: PositionalArgs<S>;\n };\n}>;\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(\n fn: (\n element: Element,\n positional: unknown[],\n named: object,\n ) => void | Teardown,\n options?: {\n name: string;\n },\n): FunctionBasedModifier<{\n Element: Element;\n Args: {\n Named: object;\n Positional: unknown[];\n };\n}> {\n fn.toString = () => options?.name || fn.name;\n // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n // type of `setModifierManager` today is `void`; we pretend it actually\n // returns an opaque `Modifier` type so that we can provide a result from this\n // type which is useful to TS-aware tooling (e.g. Glint).\n return setModifierManager(\n () => MANAGER,\n fn,\n ) as unknown as FunctionBasedModifier<{\n Element: Element;\n Args: {\n Named: object;\n Positional: unknown[];\n };\n }>;\n}\n\n/**\n * @internal\n */\nexport type FunctionBasedModifierDefinition<S> = (\n element: ElementFor<S>,\n positional: PositionalArgs<S>,\n named: NamedArgs<S>,\n) => void | Teardown;\n","import { capabilities } from '@ember/modifier';\nimport type { FunctionBasedModifierDefinition, Teardown } from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\ninterface State<S> {\n instance: FunctionBasedModifierDefinition<S>;\n}\n\ninterface CreatedState<S> extends State<S> {\n element: null;\n}\n\ninterface InstalledState<S> extends State<S> {\n element: ElementFor<S>;\n teardown?: Teardown;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n state: CreatedState<S>,\n element: ElementFor<S>,\n): InstalledState<S> {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState<S>`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state as State<S> as InstalledState<S>;\n installedState.element = element;\n return installedState;\n}\n\nexport default class FunctionBasedModifierManager<S> {\n capabilities = capabilities('3.22');\n\n createModifier(\n instance: FunctionBasedModifierDefinition<S>,\n ): CreatedState<S> {\n return { element: null, instance };\n }\n\n installModifier(\n createdState: CreatedState<S>,\n element: ElementFor<S>,\n args: ArgsFor<S>,\n ): void {\n const state = installElement(createdState, element);\n\n const { positional, named } = args;\n const teardown = createdState.instance(element, positional, named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n }\n\n updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n\n const teardown = state.instance(state.element, args.positional, args.named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n }\n\n destroyModifier(state: InstalledState<S>): void {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n }\n\n getDebugName(state: InstalledState<S>): string {\n return state.instance.toString();\n }\n\n getDebugInstance(state: InstalledState<S>): InstalledState<S> {\n return state;\n }\n}\n","var naiveFallback = function () {\n\tif (typeof self === \"object\" && self) return self;\n\tif (typeof window === \"object\" && window) return window;\n\tthrow new Error(\"Unable to resolve global `this`\");\n};\n\nmodule.exports = (function () {\n\tif (this) return this;\n\n\t// Unexpected strict mode (may happen if e.g. bundled into ESM module)\n\n\t// Fallback to standard globalThis if available\n\tif (typeof globalThis === \"object\" && globalThis) return globalThis;\n\n\t// Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis\n\t// In all ES5+ engines global object inherits from Object.prototype\n\t// (if you approached one that doesn't please report)\n\ttry {\n\t\tObject.defineProperty(Object.prototype, \"__global__\", {\n\t\t\tget: function () { return this; },\n\t\t\tconfigurable: true\n\t\t});\n\t} catch (error) {\n\t\t// Unfortunate case of updates to Object.prototype being restricted\n\t\t// via preventExtensions, seal or freeze\n\t\treturn naiveFallback();\n\t}\n\ttry {\n\t\t// Safari case (window.__global__ works, but __global__ does not)\n\t\tif (!__global__) return naiveFallback();\n\t\treturn __global__;\n\t} finally {\n\t\tdelete Object.prototype.__global__;\n\t}\n})();\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.fastUniqueNumbers = {}));\n})(this, (function (exports) { 'use strict';\n\n var createAddUniqueNumber = function createAddUniqueNumber(generateUniqueNumber) {\n return function (set) {\n var number = generateUniqueNumber(set);\n set.add(number);\n return number;\n };\n };\n\n var createCache = function createCache(lastNumberWeakMap) {\n return function (collection, nextNumber) {\n lastNumberWeakMap.set(collection, nextNumber);\n return nextNumber;\n };\n };\n\n /*\n * The value of the constant Number.MAX_SAFE_INTEGER equals (2 ** 53 - 1) but it\n * is fairly new.\n */\n var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER === undefined ? 9007199254740991 : Number.MAX_SAFE_INTEGER;\n var TWO_TO_THE_POWER_OF_TWENTY_NINE = 536870912;\n var TWO_TO_THE_POWER_OF_THIRTY = TWO_TO_THE_POWER_OF_TWENTY_NINE * 2;\n var createGenerateUniqueNumber = function createGenerateUniqueNumber(cache, lastNumberWeakMap) {\n return function (collection) {\n var lastNumber = lastNumberWeakMap.get(collection);\n /*\n * Let's try the cheapest algorithm first. It might fail to produce a new\n * number, but it is so cheap that it is okay to take the risk. Just\n * increase the last number by one or reset it to 0 if we reached the upper\n * bound of SMIs (which stands for small integers). When the last number is\n * unknown it is assumed that the collection contains zero based consecutive\n * numbers.\n */\n var nextNumber = lastNumber === undefined ? collection.size : lastNumber < TWO_TO_THE_POWER_OF_THIRTY ? lastNumber + 1 : 0;\n if (!collection.has(nextNumber)) {\n return cache(collection, nextNumber);\n }\n /*\n * If there are less than half of 2 ** 30 numbers stored in the collection,\n * the chance to generate a new random number in the range from 0 to 2 ** 30\n * is at least 50%. It's benifitial to use only SMIs because they perform\n * much better in any environment based on V8.\n */\n if (collection.size < TWO_TO_THE_POWER_OF_TWENTY_NINE) {\n while (collection.has(nextNumber)) {\n nextNumber = Math.floor(Math.random() * TWO_TO_THE_POWER_OF_THIRTY);\n }\n return cache(collection, nextNumber);\n }\n // Quickly check if there is a theoretical chance to generate a new number.\n if (collection.size > MAX_SAFE_INTEGER) {\n throw new Error('Congratulations, you created a collection of unique numbers which uses all available integers!');\n }\n // Otherwise use the full scale of safely usable integers.\n while (collection.has(nextNumber)) {\n nextNumber = Math.floor(Math.random() * MAX_SAFE_INTEGER);\n }\n return cache(collection, nextNumber);\n };\n };\n\n var LAST_NUMBER_WEAK_MAP = new WeakMap();\n var cache = createCache(LAST_NUMBER_WEAK_MAP);\n var generateUniqueNumber = createGenerateUniqueNumber(cache, LAST_NUMBER_WEAK_MAP);\n var addUniqueNumber = createAddUniqueNumber(generateUniqueNumber);\n\n exports.addUniqueNumber = addUniqueNumber;\n exports.generateUniqueNumber = generateUniqueNumber;\n\n}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestMediaPermissions = exports.MediaPermissionsErrorType = void 0;\nvar requestMediaPermissions_1 = require(\"./requestMediaPermissions\");\nObject.defineProperty(exports, \"MediaPermissionsErrorType\", { enumerable: true, get: function () { return requestMediaPermissions_1.MediaPermissionsErrorType; } });\nObject.defineProperty(exports, \"requestMediaPermissions\", { enumerable: true, get: function () { return requestMediaPermissions_1.requestMediaPermissions; } });\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestVideoPermissions = exports.requestAudioPermissions = exports.requestMediaPermissions = exports.MediaPermissionsErrorType = void 0;\nconst bowser_1 = __importDefault(require(\"bowser\"));\nvar MediaPermissionsErrorType;\n(function (MediaPermissionsErrorType) {\n /** (macOS) browser does not have permission to access cam/mic */\n MediaPermissionsErrorType[\"SystemPermissionDenied\"] = \"SystemPermissionDenied\";\n /** user denied permission for site to access cam/mic */\n MediaPermissionsErrorType[\"UserPermissionDenied\"] = \"UserPermissionDenied\";\n /** (Windows) browser does not have permission to access cam/mic OR camera is in use by another application or browser tab */\n MediaPermissionsErrorType[\"CouldNotStartVideoSource\"] = \"CouldNotStartVideoSource\";\n /** all other errors */\n MediaPermissionsErrorType[\"Generic\"] = \"Generic\";\n})(MediaPermissionsErrorType = exports.MediaPermissionsErrorType || (exports.MediaPermissionsErrorType = {}));\n/**\n * Request camera and mic permissions from the browser.\n * @returns\n */\nconst requestMediaPermissions = (constraints) => {\n return new Promise((resolve, reject) => {\n navigator.mediaDevices\n .getUserMedia(constraints !== null && constraints !== void 0 ? constraints : { audio: true, video: true })\n .then((stream) => {\n stream.getTracks().forEach((t) => {\n t.stop();\n });\n resolve(true);\n })\n .catch((err) => {\n const browser = bowser_1.default.getParser(window.navigator.userAgent);\n const browserName = browser.getBrowserName();\n const errName = err.name;\n const errMessage = err.message;\n let errorType = MediaPermissionsErrorType.Generic;\n if (browserName === 'Chrome') {\n if (errName === 'NotAllowedError') {\n if (errMessage === 'Permission denied by system') {\n errorType =\n MediaPermissionsErrorType.SystemPermissionDenied;\n }\n else if (errMessage === 'Permission denied') {\n errorType =\n MediaPermissionsErrorType.UserPermissionDenied;\n }\n }\n else if (errName === 'NotReadableError') {\n errorType =\n MediaPermissionsErrorType.CouldNotStartVideoSource;\n }\n }\n else if (browserName === 'Safari') {\n if (errName === 'NotAllowedError') {\n errorType =\n MediaPermissionsErrorType.UserPermissionDenied;\n }\n }\n else if (browserName === 'Microsoft Edge') {\n if (errName === 'NotAllowedError') {\n errorType =\n MediaPermissionsErrorType.UserPermissionDenied;\n }\n else if (errName === 'NotReadableError') {\n errorType =\n MediaPermissionsErrorType.CouldNotStartVideoSource;\n }\n }\n else if (browserName === 'Firefox') {\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#exceptions\n if (errName === 'NotFoundError') {\n errorType =\n MediaPermissionsErrorType.SystemPermissionDenied;\n }\n else if (errName === 'NotReadableError') {\n errorType =\n MediaPermissionsErrorType.SystemPermissionDenied;\n }\n else if (errName === 'NotAllowedError') {\n errorType =\n MediaPermissionsErrorType.UserPermissionDenied;\n }\n else if (errName === 'AbortError') {\n errorType =\n MediaPermissionsErrorType.CouldNotStartVideoSource;\n }\n }\n reject({\n type: errorType,\n name: err.name,\n message: err.message,\n });\n // Brave cannot be detected by the bowser library because they removed Brave from the User Agent to reduce fingerprinting\n // https://github.com/brave/browser-laptop/blob/master/CHANGELOG.md#090\n });\n });\n};\nexports.requestMediaPermissions = requestMediaPermissions;\nconst requestAudioPermissions = () => (0, exports.requestMediaPermissions)({ audio: true, video: false });\nexports.requestAudioPermissions = requestAudioPermissions;\nconst requestVideoPermissions = () => (0, exports.requestMediaPermissions)({ audio: false, video: true });\nexports.requestVideoPermissions = requestVideoPermissions;\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var af = moment.defineLocale('af', {\n months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n '_'\n ),\n weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n meridiemParse: /vm|nm/i,\n isPM: function (input) {\n return /^nm$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'vm' : 'VM';\n } else {\n return isLower ? 'nm' : 'NM';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Vandag om] LT',\n nextDay: '[Môre om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[Gister om] LT',\n lastWeek: '[Laas] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'oor %s',\n past: '%s gelede',\n s: \"'n paar sekondes\",\n ss: '%d sekondes',\n m: \"'n minuut\",\n mm: '%d minute',\n h: \"'n uur\",\n hh: '%d ure',\n d: \"'n dag\",\n dd: '%d dae',\n M: \"'n maand\",\n MM: '%d maande',\n y: \"'n jaar\",\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n ); // Thanks to Joris Röling : https://github.com/jjupiter\n },\n week: {\n dow: 1, // Maandag is die eerste dag van die week.\n doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n },\n });\n\n return af;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'جانفي',\n 'فيفري',\n 'مارس',\n 'أفريل',\n 'ماي',\n 'جوان',\n 'جويلية',\n 'أوت',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var arDz = moment.defineLocale('ar-dz', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arDz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arKw = moment.defineLocale('ar-kw', {\n months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n monthsShort:\n 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return arKw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 0: '0',\n },\n pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var arLy = moment.defineLocale('ar-ly', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arMa = moment.defineLocale('ar-ma', {\n months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n monthsShort:\n 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Palestine) [ar-ps]\n//! author : Majd Al-Shihabi : https://github.com/majdal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n };\n\n var arPs = moment.defineLocale('ar-ps', {\n months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(\n '_'\n ),\n monthsShort:\n 'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n preparse: function (string) {\n return string\n .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .split('') // reversed since negative lookbehind not supported everywhere\n .reverse()\n .join('')\n .replace(/[١٢](?![\\u062a\\u0643])/g, function (match) {\n return numberMap[match];\n })\n .split('')\n .reverse()\n .join('')\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return arPs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n };\n\n var arSa = moment.defineLocale('ar-sa', {\n months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n monthsShort:\n 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arTn = moment.defineLocale('ar-tn', {\n months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n monthsShort:\n 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n },\n pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var ar = moment.defineLocale('ar', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: '-inci',\n 5: '-inci',\n 8: '-inci',\n 70: '-inci',\n 80: '-inci',\n 2: '-nci',\n 7: '-nci',\n 20: '-nci',\n 50: '-nci',\n 3: '-üncü',\n 4: '-üncü',\n 100: '-üncü',\n 6: '-ncı',\n 9: '-uncu',\n 10: '-uncu',\n 30: '-uncu',\n 60: '-ıncı',\n 90: '-ıncı',\n };\n\n var az = moment.defineLocale('az', {\n months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n '_'\n ),\n monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n weekdays:\n 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n '_'\n ),\n weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün saat] LT',\n nextDay: '[sabah saat] LT',\n nextWeek: '[gələn həftə] dddd [saat] LT',\n lastDay: '[dünən] LT',\n lastWeek: '[keçən həftə] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s sonra',\n past: '%s əvvəl',\n s: 'bir neçə saniyə',\n ss: '%d saniyə',\n m: 'bir dəqiqə',\n mm: '%d dəqiqə',\n h: 'bir saat',\n hh: '%d saat',\n d: 'bir gün',\n dd: '%d gün',\n M: 'bir ay',\n MM: '%d ay',\n y: 'bir il',\n yy: '%d il',\n },\n meridiemParse: /gecə|səhər|gündüz|axşam/,\n isPM: function (input) {\n return /^(gündüz|axşam)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'gecə';\n } else if (hour < 12) {\n return 'səhər';\n } else if (hour < 17) {\n return 'gündüz';\n } else {\n return 'axşam';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n ordinal: function (number) {\n if (number === 0) {\n // special case for zero\n return number + '-ıncı';\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n dd: 'дзень_дні_дзён',\n MM: 'месяц_месяцы_месяцаў',\n yy: 'год_гады_гадоў',\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвіліна' : 'хвіліну';\n } else if (key === 'h') {\n return withoutSuffix ? 'гадзіна' : 'гадзіну';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n\n var be = moment.defineLocale('be', {\n months: {\n format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n '_'\n ),\n standalone:\n 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n '_'\n ),\n },\n monthsShort:\n 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n weekdays: {\n format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n '_'\n ),\n standalone:\n 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n '_'\n ),\n isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n },\n weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY г.',\n LLL: 'D MMMM YYYY г., HH:mm',\n LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n },\n calendar: {\n sameDay: '[Сёння ў] LT',\n nextDay: '[Заўтра ў] LT',\n lastDay: '[Учора ў] LT',\n nextWeek: function () {\n return '[У] dddd [ў] LT';\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return '[У мінулую] dddd [ў] LT';\n case 1:\n case 2:\n case 4:\n return '[У мінулы] dddd [ў] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'праз %s',\n past: '%s таму',\n s: 'некалькі секунд',\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithPlural,\n hh: relativeTimeWithPlural,\n d: 'дзень',\n dd: relativeTimeWithPlural,\n M: 'месяц',\n MM: relativeTimeWithPlural,\n y: 'год',\n yy: relativeTimeWithPlural,\n },\n meridiemParse: /ночы|раніцы|дня|вечара/,\n isPM: function (input) {\n return /^(дня|вечара)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночы';\n } else if (hour < 12) {\n return 'раніцы';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечара';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return (number % 10 === 2 || number % 10 === 3) &&\n number % 100 !== 12 &&\n number % 100 !== 13\n ? number + '-і'\n : number + '-ы';\n case 'D':\n return number + '-га';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var bg = moment.defineLocale('bg', {\n months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Днес в] LT',\n nextDay: '[Утре в] LT',\n nextWeek: 'dddd [в] LT',\n lastDay: '[Вчера в] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Миналата] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Миналия] dddd [в] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'след %s',\n past: 'преди %s',\n s: 'няколко секунди',\n ss: '%d секунди',\n m: 'минута',\n mm: '%d минути',\n h: 'час',\n hh: '%d часа',\n d: 'ден',\n dd: '%d дена',\n w: 'седмица',\n ww: '%d седмици',\n M: 'месец',\n MM: '%d месеца',\n y: 'година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var bm = moment.defineLocale('bm', {\n months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n '_'\n ),\n monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'MMMM [tile] D [san] YYYY',\n LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n },\n calendar: {\n sameDay: '[Bi lɛrɛ] LT',\n nextDay: '[Sini lɛrɛ] LT',\n nextWeek: 'dddd [don lɛrɛ] LT',\n lastDay: '[Kunu lɛrɛ] LT',\n lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s kɔnɔ',\n past: 'a bɛ %s bɔ',\n s: 'sanga dama dama',\n ss: 'sekondi %d',\n m: 'miniti kelen',\n mm: 'miniti %d',\n h: 'lɛrɛ kelen',\n hh: 'lɛrɛ %d',\n d: 'tile kelen',\n dd: 'tile %d',\n M: 'kalo kelen',\n MM: 'kalo %d',\n y: 'san kelen',\n yy: 'san %d',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return bm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '১',\n 2: '২',\n 3: '৩',\n 4: '৪',\n 5: '৫',\n 6: '৬',\n 7: '৭',\n 8: '৮',\n 9: '৯',\n 0: '০',\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0',\n };\n\n var bnBd = moment.defineLocale('bn-bd', {\n months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n '_'\n ),\n monthsShort:\n 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n '_'\n ),\n weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n '_'\n ),\n weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n longDateFormat: {\n LT: 'A h:mm সময়',\n LTS: 'A h:mm:ss সময়',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm সময়',\n LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n },\n calendar: {\n sameDay: '[আজ] LT',\n nextDay: '[আগামীকাল] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[গতকাল] LT',\n lastWeek: '[গত] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s পরে',\n past: '%s আগে',\n s: 'কয়েক সেকেন্ড',\n ss: '%d সেকেন্ড',\n m: 'এক মিনিট',\n mm: '%d মিনিট',\n h: 'এক ঘন্টা',\n hh: '%d ঘন্টা',\n d: 'এক দিন',\n dd: '%d দিন',\n M: 'এক মাস',\n MM: '%d মাস',\n y: 'এক বছর',\n yy: '%d বছর',\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n\n meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'রাত') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ভোর') {\n return hour;\n } else if (meridiem === 'সকাল') {\n return hour;\n } else if (meridiem === 'দুপুর') {\n return hour >= 3 ? hour : hour + 12;\n } else if (meridiem === 'বিকাল') {\n return hour + 12;\n } else if (meridiem === 'সন্ধ্যা') {\n return hour + 12;\n }\n },\n\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 6) {\n return 'ভোর';\n } else if (hour < 12) {\n return 'সকাল';\n } else if (hour < 15) {\n return 'দুপুর';\n } else if (hour < 18) {\n return 'বিকাল';\n } else if (hour < 20) {\n return 'সন্ধ্যা';\n } else {\n return 'রাত';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '১',\n 2: '২',\n 3: '৩',\n 4: '৪',\n 5: '৫',\n 6: '৬',\n 7: '৭',\n 8: '৮',\n 9: '৯',\n 0: '০',\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0',\n };\n\n var bn = moment.defineLocale('bn', {\n months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n '_'\n ),\n monthsShort:\n 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n '_'\n ),\n weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n '_'\n ),\n weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n longDateFormat: {\n LT: 'A h:mm সময়',\n LTS: 'A h:mm:ss সময়',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm সময়',\n LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n },\n calendar: {\n sameDay: '[আজ] LT',\n nextDay: '[আগামীকাল] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[গতকাল] LT',\n lastWeek: '[গত] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s পরে',\n past: '%s আগে',\n s: 'কয়েক সেকেন্ড',\n ss: '%d সেকেন্ড',\n m: 'এক মিনিট',\n mm: '%d মিনিট',\n h: 'এক ঘন্টা',\n hh: '%d ঘন্টা',\n d: 'এক দিন',\n dd: '%d দিন',\n M: 'এক মাস',\n MM: '%d মাস',\n y: 'এক বছর',\n yy: '%d বছর',\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'রাত' && hour >= 4) ||\n (meridiem === 'দুপুর' && hour < 5) ||\n meridiem === 'বিকাল'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 10) {\n return 'সকাল';\n } else if (hour < 17) {\n return 'দুপুর';\n } else if (hour < 20) {\n return 'বিকাল';\n } else {\n return 'রাত';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '༡',\n 2: '༢',\n 3: '༣',\n 4: '༤',\n 5: '༥',\n 6: '༦',\n 7: '༧',\n 8: '༨',\n 9: '༩',\n 0: '༠',\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0',\n };\n\n var bo = moment.defineLocale('bo', {\n months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n '_'\n ),\n monthsShort:\n 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n '_'\n ),\n monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n monthsParseExact: true,\n weekdays:\n 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n '_'\n ),\n weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n '_'\n ),\n weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[དི་རིང] LT',\n nextDay: '[སང་ཉིན] LT',\n nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay: '[ཁ་སང] LT',\n lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ལ་',\n past: '%s སྔན་ལ',\n s: 'ལམ་སང',\n ss: '%d སྐར་ཆ།',\n m: 'སྐར་མ་གཅིག',\n mm: '%d སྐར་མ',\n h: 'ཆུ་ཚོད་གཅིག',\n hh: '%d ཆུ་ཚོད',\n d: 'ཉིན་གཅིག',\n dd: '%d ཉིན་',\n M: 'ཟླ་བ་གཅིག',\n MM: '%d ཟླ་བ',\n y: 'ལོ་གཅིག',\n yy: '%d ལོ',\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'མཚན་མོ' && hour >= 4) ||\n (meridiem === 'ཉིན་གུང' && hour < 5) ||\n meridiem === 'དགོང་དག'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithMutation(number, withoutSuffix, key) {\n var format = {\n mm: 'munutenn',\n MM: 'miz',\n dd: 'devezh',\n };\n return number + ' ' + mutation(format[key], number);\n }\n function specialMutationForYears(number) {\n switch (lastNumber(number)) {\n case 1:\n case 3:\n case 4:\n case 5:\n case 9:\n return number + ' bloaz';\n default:\n return number + ' vloaz';\n }\n }\n function lastNumber(number) {\n if (number > 9) {\n return lastNumber(number % 10);\n }\n return number;\n }\n function mutation(text, number) {\n if (number === 2) {\n return softMutation(text);\n }\n return text;\n }\n function softMutation(text) {\n var mutationTable = {\n m: 'v',\n b: 'v',\n d: 'z',\n };\n if (mutationTable[text.charAt(0)] === undefined) {\n return text;\n }\n return mutationTable[text.charAt(0)] + text.substring(1);\n }\n\n var monthsParse = [\n /^gen/i,\n /^c[ʼ\\']hwe/i,\n /^meu/i,\n /^ebr/i,\n /^mae/i,\n /^(mez|eve)/i,\n /^gou/i,\n /^eos/i,\n /^gwe/i,\n /^her/i,\n /^du/i,\n /^ker/i,\n ],\n monthsRegex =\n /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n monthsStrictRegex =\n /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n monthsShortStrictRegex =\n /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n fullWeekdaysParse = [\n /^sul/i,\n /^lun/i,\n /^meurzh/i,\n /^merc[ʼ\\']her/i,\n /^yaou/i,\n /^gwener/i,\n /^sadorn/i,\n ],\n shortWeekdaysParse = [\n /^Sul/i,\n /^Lun/i,\n /^Meu/i,\n /^Mer/i,\n /^Yao/i,\n /^Gwe/i,\n /^Sad/i,\n ],\n minWeekdaysParse = [\n /^Su/i,\n /^Lu/i,\n /^Me([^r]|$)/i,\n /^Mer/i,\n /^Ya/i,\n /^Gw/i,\n /^Sa/i,\n ];\n\n var br = moment.defineLocale('br', {\n months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n '_'\n ),\n monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n weekdaysParse: minWeekdaysParse,\n fullWeekdaysParse: fullWeekdaysParse,\n shortWeekdaysParse: shortWeekdaysParse,\n minWeekdaysParse: minWeekdaysParse,\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: monthsStrictRegex,\n monthsShortStrictRegex: monthsShortStrictRegex,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [a viz] MMMM YYYY',\n LLL: 'D [a viz] MMMM YYYY HH:mm',\n LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hiziv da] LT',\n nextDay: '[Warcʼhoazh da] LT',\n nextWeek: 'dddd [da] LT',\n lastDay: '[Decʼh da] LT',\n lastWeek: 'dddd [paset da] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'a-benn %s',\n past: '%s ʼzo',\n s: 'un nebeud segondennoù',\n ss: '%d eilenn',\n m: 'ur vunutenn',\n mm: relativeTimeWithMutation,\n h: 'un eur',\n hh: '%d eur',\n d: 'un devezh',\n dd: relativeTimeWithMutation,\n M: 'ur miz',\n MM: relativeTimeWithMutation,\n y: 'ur bloaz',\n yy: specialMutationForYears,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n ordinal: function (number) {\n var output = number === 1 ? 'añ' : 'vet';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n isPM: function (token) {\n return token === 'g.m.';\n },\n meridiem: function (hour, minute, isLower) {\n return hour < 12 ? 'a.m.' : 'g.m.';\n },\n });\n\n return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! author : Rasid Redzic : https://github.com/rasidre\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 'm':\n return withoutSuffix\n ? 'jedna minuta'\n : isFuture\n ? 'jednu minutu'\n : 'jedne minute';\n }\n }\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jedan sat';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var bs = moment.defineLocale('bs', {\n months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[jučer u] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'par sekundi',\n ss: translate,\n m: processRelativeTime,\n mm: translate,\n h: translate,\n hh: translate,\n d: 'dan',\n dd: translate,\n M: 'mjesec',\n MM: translate,\n y: 'godinu',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ca = moment.defineLocale('ca', {\n months: {\n standalone:\n 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n '_'\n ),\n format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort:\n 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a les] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextDay: function () {\n return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastDay: function () {\n return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [passat a ' +\n (this.hours() !== 1 ? 'les' : 'la') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'uns segons',\n ss: '%d segons',\n m: 'un minut',\n mm: '%d minuts',\n h: 'una hora',\n hh: '%d hores',\n d: 'un dia',\n dd: '%d dies',\n M: 'un mes',\n MM: '%d mesos',\n y: 'un any',\n yy: '%d anys',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = {\n standalone:\n 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n '_'\n ),\n format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n '_'\n ),\n isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n },\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n monthsParse = [\n /^led/i,\n /^úno/i,\n /^bře/i,\n /^dub/i,\n /^kvě/i,\n /^(čvn|červen$|června)/i,\n /^(čvc|červenec|července)/i,\n /^srp/i,\n /^zář/i,\n /^říj/i,\n /^lis/i,\n /^pro/i,\n ],\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsRegex =\n /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n function plural(n) {\n return n > 1 && n < 5 && ~~(n / 10) !== 1;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekund');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months: months,\n monthsShort: monthsShort,\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsStrictRegex:\n /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n monthsShortStrictRegex:\n /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n l: 'D. M. YYYY',\n },\n calendar: {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'před %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cv = moment.defineLocale('cv', {\n months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n '_'\n ),\n monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays:\n 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n '_'\n ),\n weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n },\n calendar: {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (output) {\n var affix = /сехет$/i.exec(output)\n ? 'рен'\n : /ҫул$/i.exec(output)\n ? 'тан'\n : 'ран';\n return output + affix;\n },\n past: '%s каялла',\n s: 'пӗр-ик ҫеккунт',\n ss: '%d ҫеккунт',\n m: 'пӗр минут',\n mm: '%d минут',\n h: 'пӗр сехет',\n hh: '%d сехет',\n d: 'пӗр кун',\n dd: '%d кун',\n M: 'пӗр уйӑх',\n MM: '%d уйӑх',\n y: 'пӗр ҫул',\n yy: '%d ҫул',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n ordinal: '%d-мӗш',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cy = moment.defineLocale('cy', {\n months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n '_'\n ),\n monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n '_'\n ),\n weekdays:\n 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n '_'\n ),\n weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n weekdaysParseExact: true,\n // time formats are the same as en-gb\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Heddiw am] LT',\n nextDay: '[Yfory am] LT',\n nextWeek: 'dddd [am] LT',\n lastDay: '[Ddoe am] LT',\n lastWeek: 'dddd [diwethaf am] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'mewn %s',\n past: '%s yn ôl',\n s: 'ychydig eiliadau',\n ss: '%d eiliad',\n m: 'munud',\n mm: '%d munud',\n h: 'awr',\n hh: '%d awr',\n d: 'diwrnod',\n dd: '%d diwrnod',\n M: 'mis',\n MM: '%d mis',\n y: 'blwyddyn',\n yy: '%d flynedd',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n ordinal: function (number) {\n var b = number,\n output = '',\n lookup = [\n '',\n 'af',\n 'il',\n 'ydd',\n 'ydd',\n 'ed',\n 'ed',\n 'ed',\n 'fed',\n 'fed',\n 'fed', // 1af to 10fed\n 'eg',\n 'fed',\n 'eg',\n 'eg',\n 'fed',\n 'eg',\n 'eg',\n 'fed',\n 'eg',\n 'fed', // 11eg to 20fed\n ];\n if (b > 20) {\n if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n output = 'fed'; // not 30ain, 70ain or 90ain\n } else {\n output = 'ain';\n }\n } else if (b > 0) {\n output = lookup[b];\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var da = moment.defineLocale('da', {\n months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'på dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[i] dddd[s kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s siden',\n s: 'få sekunder',\n ss: '%d sekunder',\n m: 'et minut',\n mm: '%d minutter',\n h: 'en time',\n hh: '%d timer',\n d: 'en dag',\n dd: '%d dage',\n M: 'en måned',\n MM: '%d måneder',\n y: 'et år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return da;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deAt = moment.defineLocale('de-at', {\n months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return deAt;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deCh = moment.defineLocale('de-ch', {\n months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return deCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var de = moment.defineLocale('de', {\n months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return de;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'ޖެނުއަރީ',\n 'ފެބްރުއަރީ',\n 'މާރިޗު',\n 'އޭޕްރީލު',\n 'މޭ',\n 'ޖޫން',\n 'ޖުލައި',\n 'އޯގަސްޓު',\n 'ސެޕްޓެމްބަރު',\n 'އޮކްޓޯބަރު',\n 'ނޮވެމްބަރު',\n 'ޑިސެމްބަރު',\n ],\n weekdays = [\n 'އާދިއްތަ',\n 'ހޯމަ',\n 'އަންގާރަ',\n 'ބުދަ',\n 'ބުރާސްފަތި',\n 'ހުކުރު',\n 'ހޮނިހިރު',\n ];\n\n var dv = moment.defineLocale('dv', {\n months: months,\n monthsShort: months,\n weekdays: weekdays,\n weekdaysShort: weekdays,\n weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/M/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /މކ|މފ/,\n isPM: function (input) {\n return 'މފ' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'މކ';\n } else {\n return 'މފ';\n }\n },\n calendar: {\n sameDay: '[މިއަދު] LT',\n nextDay: '[މާދަމާ] LT',\n nextWeek: 'dddd LT',\n lastDay: '[އިއްޔެ] LT',\n lastWeek: '[ފާއިތުވި] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ތެރޭގައި %s',\n past: 'ކުރިން %s',\n s: 'ސިކުންތުކޮޅެއް',\n ss: 'd% ސިކުންތު',\n m: 'މިނިޓެއް',\n mm: 'މިނިޓު %d',\n h: 'ގަޑިއިރެއް',\n hh: 'ގަޑިއިރު %d',\n d: 'ދުވަހެއް',\n dd: 'ދުވަސް %d',\n M: 'މަހެއް',\n MM: 'މަސް %d',\n y: 'އަހަރެއް',\n yy: 'އަހަރު %d',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 7, // Sunday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n var el = moment.defineLocale('el', {\n monthsNominativeEl:\n 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n '_'\n ),\n monthsGenitiveEl:\n 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n '_'\n ),\n months: function (momentToFormat, format) {\n if (!momentToFormat) {\n return this._monthsNominativeEl;\n } else if (\n typeof format === 'string' &&\n /D/.test(format.substring(0, format.indexOf('MMMM')))\n ) {\n // if there is a day number before 'MMMM'\n return this._monthsGenitiveEl[momentToFormat.month()];\n } else {\n return this._monthsNominativeEl[momentToFormat.month()];\n }\n },\n monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n '_'\n ),\n weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'μμ' : 'ΜΜ';\n } else {\n return isLower ? 'πμ' : 'ΠΜ';\n }\n },\n isPM: function (input) {\n return (input + '').toLowerCase()[0] === 'μ';\n },\n meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendarEl: {\n sameDay: '[Σήμερα {}] LT',\n nextDay: '[Αύριο {}] LT',\n nextWeek: 'dddd [{}] LT',\n lastDay: '[Χθες {}] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 6:\n return '[το προηγούμενο] dddd [{}] LT';\n default:\n return '[την προηγούμενη] dddd [{}] LT';\n }\n },\n sameElse: 'L',\n },\n calendar: function (key, mom) {\n var output = this._calendarEl[key],\n hours = mom && mom.hours();\n if (isFunction(output)) {\n output = output.apply(mom);\n }\n return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n },\n relativeTime: {\n future: 'σε %s',\n past: '%s πριν',\n s: 'λίγα δευτερόλεπτα',\n ss: '%d δευτερόλεπτα',\n m: 'ένα λεπτό',\n mm: '%d λεπτά',\n h: 'μία ώρα',\n hh: '%d ώρες',\n d: 'μία μέρα',\n dd: '%d μέρες',\n M: 'ένας μήνας',\n MM: '%d μήνες',\n y: 'ένας χρόνος',\n yy: '%d χρόνια',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}η/,\n ordinal: '%dη',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4st is the first week of the year.\n },\n });\n\n return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enAu = moment.defineLocale('en-au', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enCa = moment.defineLocale('en-ca', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'YYYY-MM-DD',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enGb = moment.defineLocale('en-gb', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIe = moment.defineLocale('en-ie', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enIe;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIl = moment.defineLocale('en-il', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n return enIl;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIn = moment.defineLocale('en-in', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enNz = moment.defineLocale('en-nz', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enSg = moment.defineLocale('en-sg', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var eo = moment.defineLocale('eo', {\n months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: '[la] D[-an de] MMMM, YYYY',\n LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n },\n meridiemParse: /[ap]\\.t\\.m/i,\n isPM: function (input) {\n return input.charAt(0).toLowerCase() === 'p';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'p.t.m.' : 'P.T.M.';\n } else {\n return isLower ? 'a.t.m.' : 'A.T.M.';\n }\n },\n calendar: {\n sameDay: '[Hodiaŭ je] LT',\n nextDay: '[Morgaŭ je] LT',\n nextWeek: 'dddd[n je] LT',\n lastDay: '[Hieraŭ je] LT',\n lastWeek: '[pasintan] dddd[n je] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'post %s',\n past: 'antaŭ %s',\n s: 'kelkaj sekundoj',\n ss: '%d sekundoj',\n m: 'unu minuto',\n mm: '%d minutoj',\n h: 'unu horo',\n hh: '%d horoj',\n d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n dd: '%d tagoj',\n M: 'unu monato',\n MM: '%d monatoj',\n y: 'unu jaro',\n yy: '%d jaroj',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}a/,\n ordinal: '%da',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esDo = moment.defineLocale('es-do', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY h:mm A',\n LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esMx = moment.defineLocale('es-mx', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY H:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n invalidDate: 'Fecha inválida',\n });\n\n return esMx;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esUs = moment.defineLocale('es-us', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'MM/DD/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY h:mm A',\n LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var es = moment.defineLocale('es', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY H:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n invalidDate: 'Fecha inválida',\n });\n\n return es;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n ss: [number + 'sekundi', number + 'sekundit'],\n m: ['ühe minuti', 'üks minut'],\n mm: [number + ' minuti', number + ' minutit'],\n h: ['ühe tunni', 'tund aega', 'üks tund'],\n hh: [number + ' tunni', number + ' tundi'],\n d: ['ühe päeva', 'üks päev'],\n M: ['kuu aja', 'kuu aega', 'üks kuu'],\n MM: [number + ' kuu', number + ' kuud'],\n y: ['ühe aasta', 'aasta', 'üks aasta'],\n yy: [number + ' aasta', number + ' aastat'],\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n '_'\n ),\n monthsShort:\n 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n weekdays:\n 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n '_'\n ),\n weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Täna,] LT',\n nextDay: '[Homme,] LT',\n nextWeek: '[Järgmine] dddd LT',\n lastDay: '[Eile,] LT',\n lastWeek: '[Eelmine] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s pärast',\n past: '%s tagasi',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: '%d päeva',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var eu = moment.defineLocale('eu', {\n months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n '_'\n ),\n monthsShort:\n 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n '_'\n ),\n weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY[ko] MMMM[ren] D[a]',\n LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n l: 'YYYY-M-D',\n ll: 'YYYY[ko] MMM D[a]',\n lll: 'YYYY[ko] MMM D[a] HH:mm',\n llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n },\n calendar: {\n sameDay: '[gaur] LT[etan]',\n nextDay: '[bihar] LT[etan]',\n nextWeek: 'dddd LT[etan]',\n lastDay: '[atzo] LT[etan]',\n lastWeek: '[aurreko] dddd LT[etan]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s barru',\n past: 'duela %s',\n s: 'segundo batzuk',\n ss: '%d segundo',\n m: 'minutu bat',\n mm: '%d minutu',\n h: 'ordu bat',\n hh: '%d ordu',\n d: 'egun bat',\n dd: '%d egun',\n M: 'hilabete bat',\n MM: '%d hilabete',\n y: 'urte bat',\n yy: '%d urte',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '۱',\n 2: '۲',\n 3: '۳',\n 4: '۴',\n 5: '۵',\n 6: '۶',\n 7: '۷',\n 8: '۸',\n 9: '۹',\n 0: '۰',\n },\n numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0',\n };\n\n var fa = moment.defineLocale('fa', {\n months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n '_'\n ),\n monthsShort:\n 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n '_'\n ),\n weekdays:\n 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n '_'\n ),\n weekdaysShort:\n 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n '_'\n ),\n weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function (input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar: {\n sameDay: '[امروز ساعت] LT',\n nextDay: '[فردا ساعت] LT',\n nextWeek: 'dddd [ساعت] LT',\n lastDay: '[دیروز ساعت] LT',\n lastWeek: 'dddd [پیش] [ساعت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'در %s',\n past: '%s پیش',\n s: 'چند ثانیه',\n ss: '%d ثانیه',\n m: 'یک دقیقه',\n mm: '%d دقیقه',\n h: 'یک ساعت',\n hh: '%d ساعت',\n d: 'یک روز',\n dd: '%d روز',\n M: 'یک ماه',\n MM: '%d ماه',\n y: 'یک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string\n .replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n dayOfMonthOrdinalParse: /\\d{1,2}م/,\n ordinal: '%dم',\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersPast =\n 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n ' '\n ),\n numbersFuture = [\n 'nolla',\n 'yhden',\n 'kahden',\n 'kolmen',\n 'neljän',\n 'viiden',\n 'kuuden',\n numbersPast[7],\n numbersPast[8],\n numbersPast[9],\n ];\n function translate(number, withoutSuffix, key, isFuture) {\n var result = '';\n switch (key) {\n case 's':\n return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n case 'ss':\n result = isFuture ? 'sekunnin' : 'sekuntia';\n break;\n case 'm':\n return isFuture ? 'minuutin' : 'minuutti';\n case 'mm':\n result = isFuture ? 'minuutin' : 'minuuttia';\n break;\n case 'h':\n return isFuture ? 'tunnin' : 'tunti';\n case 'hh':\n result = isFuture ? 'tunnin' : 'tuntia';\n break;\n case 'd':\n return isFuture ? 'päivän' : 'päivä';\n case 'dd':\n result = isFuture ? 'päivän' : 'päivää';\n break;\n case 'M':\n return isFuture ? 'kuukauden' : 'kuukausi';\n case 'MM':\n result = isFuture ? 'kuukauden' : 'kuukautta';\n break;\n case 'y':\n return isFuture ? 'vuoden' : 'vuosi';\n case 'yy':\n result = isFuture ? 'vuoden' : 'vuotta';\n break;\n }\n result = verbalNumber(number, isFuture) + ' ' + result;\n return result;\n }\n function verbalNumber(number, isFuture) {\n return number < 10\n ? isFuture\n ? numbersFuture[number]\n : numbersPast[number]\n : number;\n }\n\n var fi = moment.defineLocale('fi', {\n months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n '_'\n ),\n monthsShort:\n 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n '_'\n ),\n weekdays:\n 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n '_'\n ),\n weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM[ta] YYYY',\n LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n l: 'D.M.YYYY',\n ll: 'Do MMM YYYY',\n lll: 'Do MMM YYYY, [klo] HH.mm',\n llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n },\n calendar: {\n sameDay: '[tänään] [klo] LT',\n nextDay: '[huomenna] [klo] LT',\n nextWeek: 'dddd [klo] LT',\n lastDay: '[eilen] [klo] LT',\n lastWeek: '[viime] dddd[na] [klo] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s päästä',\n past: '%s sitten',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fil = moment.defineLocale('fil', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fo = moment.defineLocale('fo', {\n months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays:\n 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D. MMMM, YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Í dag kl.] LT',\n nextDay: '[Í morgin kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[Í gjár kl.] LT',\n lastWeek: '[síðstu] dddd [kl] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'um %s',\n past: '%s síðani',\n s: 'fá sekund',\n ss: '%d sekundir',\n m: 'ein minuttur',\n mm: '%d minuttir',\n h: 'ein tími',\n hh: '%d tímar',\n d: 'ein dagur',\n dd: '%d dagar',\n M: 'ein mánaður',\n MM: '%d mánaðir',\n y: 'eitt ár',\n yy: '%d ár',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCa = moment.defineLocale('fr-ca', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort:\n 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n });\n\n return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCh = moment.defineLocale('fr-ch', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort:\n 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsStrictRegex =\n /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n monthsShortStrictRegex =\n /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n monthsRegex =\n /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n monthsParse = [\n /^janv/i,\n /^févr/i,\n /^mars/i,\n /^avr/i,\n /^mai/i,\n /^juin/i,\n /^juil/i,\n /^août/i,\n /^sept/i,\n /^oct/i,\n /^nov/i,\n /^déc/i,\n ];\n\n var fr = moment.defineLocale('fr', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort:\n 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: monthsStrictRegex,\n monthsShortStrictRegex: monthsShortStrictRegex,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n w: 'une semaine',\n ww: '%d semaines',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n ordinal: function (number, period) {\n switch (period) {\n // TODO: Return 'e' when day of month > 1. Move this case inside\n // block for masculine words below.\n // See https://github.com/moment/moment/issues/3375\n case 'D':\n return number + (number === 1 ? 'er' : '');\n\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n var fy = moment.defineLocale('fy', {\n months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n monthsParseExact: true,\n weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n '_'\n ),\n weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[hjoed om] LT',\n nextDay: '[moarn om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[juster om] LT',\n lastWeek: '[ôfrûne] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'oer %s',\n past: '%s lyn',\n s: 'in pear sekonden',\n ss: '%d sekonden',\n m: 'ien minút',\n mm: '%d minuten',\n h: 'ien oere',\n hh: '%d oeren',\n d: 'ien dei',\n dd: '%d dagen',\n M: 'ien moanne',\n MM: '%d moannen',\n y: 'ien jier',\n yy: '%d jierren',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Eanáir',\n 'Feabhra',\n 'Márta',\n 'Aibreán',\n 'Bealtaine',\n 'Meitheamh',\n 'Iúil',\n 'Lúnasa',\n 'Meán Fómhair',\n 'Deireadh Fómhair',\n 'Samhain',\n 'Nollaig',\n ],\n monthsShort = [\n 'Ean',\n 'Feabh',\n 'Márt',\n 'Aib',\n 'Beal',\n 'Meith',\n 'Iúil',\n 'Lún',\n 'M.F.',\n 'D.F.',\n 'Samh',\n 'Noll',\n ],\n weekdays = [\n 'Dé Domhnaigh',\n 'Dé Luain',\n 'Dé Máirt',\n 'Dé Céadaoin',\n 'Déardaoin',\n 'Dé hAoine',\n 'Dé Sathairn',\n ],\n weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n var ga = moment.defineLocale('ga', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Inniu ag] LT',\n nextDay: '[Amárach ag] LT',\n nextWeek: 'dddd [ag] LT',\n lastDay: '[Inné ag] LT',\n lastWeek: 'dddd [seo caite] [ag] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i %s',\n past: '%s ó shin',\n s: 'cúpla soicind',\n ss: '%d soicind',\n m: 'nóiméad',\n mm: '%d nóiméad',\n h: 'uair an chloig',\n hh: '%d uair an chloig',\n d: 'lá',\n dd: '%d lá',\n M: 'mí',\n MM: '%d míonna',\n y: 'bliain',\n yy: '%d bliain',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Am Faoilleach',\n 'An Gearran',\n 'Am Màrt',\n 'An Giblean',\n 'An Cèitean',\n 'An t-Ògmhios',\n 'An t-Iuchar',\n 'An Lùnastal',\n 'An t-Sultain',\n 'An Dàmhair',\n 'An t-Samhain',\n 'An Dùbhlachd',\n ],\n monthsShort = [\n 'Faoi',\n 'Gear',\n 'Màrt',\n 'Gibl',\n 'Cèit',\n 'Ògmh',\n 'Iuch',\n 'Lùn',\n 'Sult',\n 'Dàmh',\n 'Samh',\n 'Dùbh',\n ],\n weekdays = [\n 'Didòmhnaich',\n 'Diluain',\n 'Dimàirt',\n 'Diciadain',\n 'Diardaoin',\n 'Dihaoine',\n 'Disathairne',\n ],\n weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n var gd = moment.defineLocale('gd', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[An-diugh aig] LT',\n nextDay: '[A-màireach aig] LT',\n nextWeek: 'dddd [aig] LT',\n lastDay: '[An-dè aig] LT',\n lastWeek: 'dddd [seo chaidh] [aig] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ann an %s',\n past: 'bho chionn %s',\n s: 'beagan diogan',\n ss: '%d diogan',\n m: 'mionaid',\n mm: '%d mionaidean',\n h: 'uair',\n hh: '%d uairean',\n d: 'latha',\n dd: '%d latha',\n M: 'mìos',\n MM: '%d mìosan',\n y: 'bliadhna',\n yy: '%d bliadhna',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return gd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var gl = moment.defineLocale('gl', {\n months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n '_'\n ),\n monthsShort:\n 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY H:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n },\n nextDay: function () {\n return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n },\n lastDay: function () {\n return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n },\n lastWeek: function () {\n return (\n '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: function (str) {\n if (str.indexOf('un') === 0) {\n return 'n' + str;\n }\n return 'en ' + str;\n },\n past: 'hai %s',\n s: 'uns segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'unha hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n M: 'un mes',\n MM: '%d meses',\n y: 'un ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n m: ['एका मिणटान', 'एक मिनूट'],\n mm: [number + ' मिणटांनी', number + ' मिणटां'],\n h: ['एका वरान', 'एक वर'],\n hh: [number + ' वरांनी', number + ' वरां'],\n d: ['एका दिसान', 'एक दीस'],\n dd: [number + ' दिसांनी', number + ' दीस'],\n M: ['एका म्हयन्यान', 'एक म्हयनो'],\n MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n y: ['एका वर्सान', 'एक वर्स'],\n yy: [number + ' वर्सांनी', number + ' वर्सां'],\n };\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var gomDeva = moment.defineLocale('gom-deva', {\n months: {\n standalone:\n 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n '_'\n ),\n format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n '_'\n ),\n isFormat: /MMMM(\\s)+D[oD]?/,\n },\n monthsShort:\n 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'A h:mm [वाजतां]',\n LTS: 'A h:mm:ss [वाजतां]',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n },\n calendar: {\n sameDay: '[आयज] LT',\n nextDay: '[फाल्यां] LT',\n nextWeek: '[फुडलो] dddd[,] LT',\n lastDay: '[काल] LT',\n lastWeek: '[फाटलो] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s',\n past: '%s आदीं',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n ordinal: function (number, period) {\n switch (period) {\n // the ordinal 'वेर' only applies to day of the month\n case 'D':\n return number + 'वेर';\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n case 'w':\n case 'W':\n return number;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week\n doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n },\n meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राती') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सकाळीं') {\n return hour;\n } else if (meridiem === 'दनपारां') {\n return hour > 12 ? hour : hour + 12;\n } else if (meridiem === 'सांजे') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'राती';\n } else if (hour < 12) {\n return 'सकाळीं';\n } else if (hour < 16) {\n return 'दनपारां';\n } else if (hour < 20) {\n return 'सांजे';\n } else {\n return 'राती';\n }\n },\n });\n\n return gomDeva;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['thoddea sekondamni', 'thodde sekond'],\n ss: [number + ' sekondamni', number + ' sekond'],\n m: ['eka mintan', 'ek minut'],\n mm: [number + ' mintamni', number + ' mintam'],\n h: ['eka voran', 'ek vor'],\n hh: [number + ' voramni', number + ' voram'],\n d: ['eka disan', 'ek dis'],\n dd: [number + ' disamni', number + ' dis'],\n M: ['eka mhoinean', 'ek mhoino'],\n MM: [number + ' mhoineamni', number + ' mhoine'],\n y: ['eka vorsan', 'ek voros'],\n yy: [number + ' vorsamni', number + ' vorsam'],\n };\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var gomLatn = moment.defineLocale('gom-latn', {\n months: {\n standalone:\n 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n '_'\n ),\n format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n '_'\n ),\n isFormat: /MMMM(\\s)+D[oD]?/,\n },\n monthsShort:\n 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'A h:mm [vazta]',\n LTS: 'A h:mm:ss [vazta]',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY A h:mm [vazta]',\n LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n },\n calendar: {\n sameDay: '[Aiz] LT',\n nextDay: '[Faleam] LT',\n nextWeek: '[Fuddlo] dddd[,] LT',\n lastDay: '[Kal] LT',\n lastWeek: '[Fattlo] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s',\n past: '%s adim',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n ordinal: function (number, period) {\n switch (period) {\n // the ordinal 'er' only applies to day of the month\n case 'D':\n return number + 'er';\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n case 'w':\n case 'W':\n return number;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week\n doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n },\n meridiemParse: /rati|sokallim|donparam|sanje/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'rati') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'sokallim') {\n return hour;\n } else if (meridiem === 'donparam') {\n return hour > 12 ? hour : hour + 12;\n } else if (meridiem === 'sanje') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'rati';\n } else if (hour < 12) {\n return 'sokallim';\n } else if (hour < 16) {\n return 'donparam';\n } else if (hour < 20) {\n return 'sanje';\n } else {\n return 'rati';\n }\n },\n });\n\n return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '૧',\n 2: '૨',\n 3: '૩',\n 4: '૪',\n 5: '૫',\n 6: '૬',\n 7: '૭',\n 8: '૮',\n 9: '૯',\n 0: '૦',\n },\n numberMap = {\n '૧': '1',\n '૨': '2',\n '૩': '3',\n '૪': '4',\n '૫': '5',\n '૬': '6',\n '૭': '7',\n '૮': '8',\n '૯': '9',\n '૦': '0',\n };\n\n var gu = moment.defineLocale('gu', {\n months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n '_'\n ),\n monthsShort:\n 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n '_'\n ),\n weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm વાગ્યે',\n LTS: 'A h:mm:ss વાગ્યે',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n },\n calendar: {\n sameDay: '[આજ] LT',\n nextDay: '[કાલે] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ગઇકાલે] LT',\n lastWeek: '[પાછલા] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s મા',\n past: '%s પહેલા',\n s: 'અમુક પળો',\n ss: '%d સેકંડ',\n m: 'એક મિનિટ',\n mm: '%d મિનિટ',\n h: 'એક કલાક',\n hh: '%d કલાક',\n d: 'એક દિવસ',\n dd: '%d દિવસ',\n M: 'એક મહિનો',\n MM: '%d મહિનો',\n y: 'એક વર્ષ',\n yy: '%d વર્ષ',\n },\n preparse: function (string) {\n return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'રાત') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'સવાર') {\n return hour;\n } else if (meridiem === 'બપોર') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'સાંજ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'રાત';\n } else if (hour < 10) {\n return 'સવાર';\n } else if (hour < 17) {\n return 'બપોર';\n } else if (hour < 20) {\n return 'સાંજ';\n } else {\n return 'રાત';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var he = moment.defineLocale('he', {\n months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n '_'\n ),\n monthsShort:\n 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [ב]MMMM YYYY',\n LLL: 'D [ב]MMMM YYYY HH:mm',\n LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n l: 'D/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[היום ב־]LT',\n nextDay: '[מחר ב־]LT',\n nextWeek: 'dddd [בשעה] LT',\n lastDay: '[אתמול ב־]LT',\n lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'בעוד %s',\n past: 'לפני %s',\n s: 'מספר שניות',\n ss: '%d שניות',\n m: 'דקה',\n mm: '%d דקות',\n h: 'שעה',\n hh: function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d: 'יום',\n dd: function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M: 'חודש',\n MM: function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y: 'שנה',\n yy: function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n },\n },\n meridiemParse:\n /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n isPM: function (input) {\n return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 5) {\n return 'לפנות בוקר';\n } else if (hour < 10) {\n return 'בבוקר';\n } else if (hour < 12) {\n return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n } else if (hour < 18) {\n return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n } else {\n return 'בערב';\n }\n },\n });\n\n return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n },\n monthsParse = [\n /^जन/i,\n /^फ़र|फर/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सितं|सित/i,\n /^अक्टू/i,\n /^नव|नवं/i,\n /^दिसं|दिस/i,\n ],\n shortMonthsParse = [\n /^जन/i,\n /^फ़र/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सित/i,\n /^अक्टू/i,\n /^नव/i,\n /^दिस/i,\n ];\n\n var hi = moment.defineLocale('hi', {\n months: {\n format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n '_'\n ),\n standalone:\n 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n '_'\n ),\n },\n monthsShort:\n 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm बजे',\n LTS: 'A h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n },\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: shortMonthsParse,\n\n monthsRegex:\n /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsShortRegex:\n /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsStrictRegex:\n /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n monthsShortStrictRegex:\n /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[कल] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[कल] LT',\n lastWeek: '[पिछले] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s में',\n past: '%s पहले',\n s: 'कुछ ही क्षण',\n ss: '%d सेकंड',\n m: 'एक मिनट',\n mm: '%d मिनट',\n h: 'एक घंटा',\n hh: '%d घंटे',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महीने',\n MM: '%d महीने',\n y: 'एक वर्ष',\n yy: '%d वर्ष',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return hi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var hr = moment.defineLocale('hr', {\n months: {\n format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n '_'\n ),\n standalone:\n 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n '_'\n ),\n },\n monthsShort:\n 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM YYYY',\n LLL: 'Do MMMM YYYY H:mm',\n LLLL: 'dddd, Do MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[jučer u] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prošlu] [nedjelju] [u] LT';\n case 3:\n return '[prošlu] [srijedu] [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'par sekundi',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: 'dan',\n dd: translate,\n M: 'mjesec',\n MM: translate,\n y: 'godinu',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt : https://github.com/passatgt\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var weekEndings =\n 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n function translate(number, withoutSuffix, key, isFuture) {\n var num = number;\n switch (key) {\n case 's':\n return isFuture || withoutSuffix\n ? 'néhány másodperc'\n : 'néhány másodperce';\n case 'ss':\n return num + (isFuture || withoutSuffix)\n ? ' másodperc'\n : ' másodperce';\n case 'm':\n return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'mm':\n return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'h':\n return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'hh':\n return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'd':\n return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'dd':\n return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'M':\n return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'MM':\n return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'y':\n return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n case 'yy':\n return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n }\n return '';\n }\n function week(isFuture) {\n return (\n (isFuture ? '' : '[múlt] ') +\n '[' +\n weekEndings[this.day()] +\n '] LT[-kor]'\n );\n }\n\n var hu = moment.defineLocale('hu', {\n months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'YYYY.MM.DD.',\n LL: 'YYYY. MMMM D.',\n LLL: 'YYYY. MMMM D. H:mm',\n LLLL: 'YYYY. MMMM D., dddd H:mm',\n },\n meridiemParse: /de|du/i,\n isPM: function (input) {\n return input.charAt(1).toLowerCase() === 'u';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower === true ? 'de' : 'DE';\n } else {\n return isLower === true ? 'du' : 'DU';\n }\n },\n calendar: {\n sameDay: '[ma] LT[-kor]',\n nextDay: '[holnap] LT[-kor]',\n nextWeek: function () {\n return week.call(this, true);\n },\n lastDay: '[tegnap] LT[-kor]',\n lastWeek: function () {\n return week.call(this, false);\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s múlva',\n past: '%s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var hyAm = moment.defineLocale('hy-am', {\n months: {\n format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n '_'\n ),\n standalone:\n 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n '_'\n ),\n },\n monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n weekdays:\n 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n '_'\n ),\n weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY թ.',\n LLL: 'D MMMM YYYY թ., HH:mm',\n LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n },\n calendar: {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s հետո',\n past: '%s առաջ',\n s: 'մի քանի վայրկյան',\n ss: '%d վայրկյան',\n m: 'րոպե',\n mm: '%d րոպե',\n h: 'ժամ',\n hh: '%d ժամ',\n d: 'օր',\n dd: '%d օր',\n M: 'ամիս',\n MM: '%d ամիս',\n y: 'տարի',\n yy: '%d տարի',\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem: function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var id = moment.defineLocale('id', {\n months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Besok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kemarin pukul] LT',\n lastWeek: 'dddd [lalu pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lalu',\n s: 'beberapa detik',\n ss: '%d detik',\n m: 'semenit',\n mm: '%d menit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(n) {\n if (n % 100 === 11) {\n return true;\n } else if (n % 10 === 1) {\n return false;\n }\n return true;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nokkrar sekúndur'\n : 'nokkrum sekúndum';\n case 'ss':\n if (plural(number)) {\n return (\n result +\n (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n );\n }\n return result + 'sekúnda';\n case 'm':\n return withoutSuffix ? 'mínúta' : 'mínútu';\n case 'mm':\n if (plural(number)) {\n return (\n result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n );\n } else if (withoutSuffix) {\n return result + 'mínúta';\n }\n return result + 'mínútu';\n case 'hh':\n if (plural(number)) {\n return (\n result +\n (withoutSuffix || isFuture\n ? 'klukkustundir'\n : 'klukkustundum')\n );\n }\n return result + 'klukkustund';\n case 'd':\n if (withoutSuffix) {\n return 'dagur';\n }\n return isFuture ? 'dag' : 'degi';\n case 'dd':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'dagar';\n }\n return result + (isFuture ? 'daga' : 'dögum');\n } else if (withoutSuffix) {\n return result + 'dagur';\n }\n return result + (isFuture ? 'dag' : 'degi');\n case 'M':\n if (withoutSuffix) {\n return 'mánuður';\n }\n return isFuture ? 'mánuð' : 'mánuði';\n case 'MM':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'mánuðir';\n }\n return result + (isFuture ? 'mánuði' : 'mánuðum');\n } else if (withoutSuffix) {\n return result + 'mánuður';\n }\n return result + (isFuture ? 'mánuð' : 'mánuði');\n case 'y':\n return withoutSuffix || isFuture ? 'ár' : 'ári';\n case 'yy':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n }\n return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n }\n }\n\n var is = moment.defineLocale('is', {\n months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n weekdays:\n 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n },\n calendar: {\n sameDay: '[í dag kl.] LT',\n nextDay: '[á morgun kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[í gær kl.] LT',\n lastWeek: '[síðasta] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'eftir %s',\n past: 'fyrir %s síðan',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: 'klukkustund',\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var itCh = moment.defineLocale('it-ch', {\n months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n '_'\n ),\n monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n '_'\n ),\n weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: function (s) {\n return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past: '%s fa',\n s: 'alcuni secondi',\n ss: '%d secondi',\n m: 'un minuto',\n mm: '%d minuti',\n h: \"un'ora\",\n hh: '%d ore',\n d: 'un giorno',\n dd: '%d giorni',\n M: 'un mese',\n MM: '%d mesi',\n y: 'un anno',\n yy: '%d anni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var it = moment.defineLocale('it', {\n months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n '_'\n ),\n monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n '_'\n ),\n weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: function () {\n return (\n '[Oggi a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n nextDay: function () {\n return (\n '[Domani a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n nextWeek: function () {\n return (\n 'dddd [a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n lastDay: function () {\n return (\n '[Ieri a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return (\n '[La scorsa] dddd [a' +\n (this.hours() > 1\n ? 'lle '\n : this.hours() === 0\n ? ' '\n : \"ll'\") +\n ']LT'\n );\n default:\n return (\n '[Lo scorso] dddd [a' +\n (this.hours() > 1\n ? 'lle '\n : this.hours() === 0\n ? ' '\n : \"ll'\") +\n ']LT'\n );\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'tra %s',\n past: '%s fa',\n s: 'alcuni secondi',\n ss: '%d secondi',\n m: 'un minuto',\n mm: '%d minuti',\n h: \"un'ora\",\n hh: '%d ore',\n d: 'un giorno',\n dd: '%d giorni',\n w: 'una settimana',\n ww: '%d settimane',\n M: 'un mese',\n MM: '%d mesi',\n y: 'un anno',\n yy: '%d anni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ja = moment.defineLocale('ja', {\n eras: [\n {\n since: '2019-05-01',\n offset: 1,\n name: '令和',\n narrow: '㋿',\n abbr: 'R',\n },\n {\n since: '1989-01-08',\n until: '2019-04-30',\n offset: 1,\n name: '平成',\n narrow: '㍻',\n abbr: 'H',\n },\n {\n since: '1926-12-25',\n until: '1989-01-07',\n offset: 1,\n name: '昭和',\n narrow: '㍼',\n abbr: 'S',\n },\n {\n since: '1912-07-30',\n until: '1926-12-24',\n offset: 1,\n name: '大正',\n narrow: '㍽',\n abbr: 'T',\n },\n {\n since: '1873-01-01',\n until: '1912-07-29',\n offset: 6,\n name: '明治',\n narrow: '㍾',\n abbr: 'M',\n },\n {\n since: '0001-01-01',\n until: '1873-12-31',\n offset: 1,\n name: '西暦',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: '紀元前',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n eraYearOrdinalRegex: /(元|\\d+)年/,\n eraYearOrdinalParse: function (input, match) {\n return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n },\n months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日 dddd HH:mm',\n l: 'YYYY/MM/DD',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日(ddd) HH:mm',\n },\n meridiemParse: /午前|午後/i,\n isPM: function (input) {\n return input === '午後';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar: {\n sameDay: '[今日] LT',\n nextDay: '[明日] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[来週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n lastDay: '[昨日] LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[先週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}日/,\n ordinal: function (number, period) {\n switch (period) {\n case 'y':\n return number === 1 ? '元年' : number + '年';\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '数秒',\n ss: '%d秒',\n m: '1分',\n mm: '%d分',\n h: '1時間',\n hh: '%d時間',\n d: '1日',\n dd: '%d日',\n M: '1ヶ月',\n MM: '%dヶ月',\n y: '1年',\n yy: '%d年',\n },\n });\n\n return ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var jv = moment.defineLocale('jv', {\n months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /enjing|siyang|sonten|ndalu/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'enjing') {\n return hour;\n } else if (meridiem === 'siyang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'enjing';\n } else if (hours < 15) {\n return 'siyang';\n } else if (hours < 19) {\n return 'sonten';\n } else {\n return 'ndalu';\n }\n },\n calendar: {\n sameDay: '[Dinten puniko pukul] LT',\n nextDay: '[Mbenjang pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kala wingi pukul] LT',\n lastWeek: 'dddd [kepengker pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'wonten ing %s',\n past: '%s ingkang kepengker',\n s: 'sawetawis detik',\n ss: '%d detik',\n m: 'setunggal menit',\n mm: '%d menit',\n h: 'setunggal jam',\n hh: '%d jam',\n d: 'sedinten',\n dd: '%d dinten',\n M: 'sewulan',\n MM: '%d wulan',\n y: 'setaun',\n yy: '%d taun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ka = moment.defineLocale('ka', {\n months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n '_'\n ),\n monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n weekdays: {\n standalone:\n 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n '_'\n ),\n format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n '_'\n ),\n isFormat: /(წინა|შემდეგ)/,\n },\n weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[დღეს] LT[-ზე]',\n nextDay: '[ხვალ] LT[-ზე]',\n lastDay: '[გუშინ] LT[-ზე]',\n nextWeek: '[შემდეგ] dddd LT[-ზე]',\n lastWeek: '[წინა] dddd LT-ზე',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (s) {\n return s.replace(\n /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n function ($0, $1, $2) {\n return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n }\n );\n },\n past: function (s) {\n if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n return s.replace(/(ი|ე)$/, 'ის წინ');\n }\n if (/წელი/.test(s)) {\n return s.replace(/წელი$/, 'წლის წინ');\n }\n return s;\n },\n s: 'რამდენიმე წამი',\n ss: '%d წამი',\n m: 'წუთი',\n mm: '%d წუთი',\n h: 'საათი',\n hh: '%d საათი',\n d: 'დღე',\n dd: '%d დღე',\n M: 'თვე',\n MM: '%d თვე',\n y: 'წელი',\n yy: '%d წელი',\n },\n dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n ordinal: function (number) {\n if (number === 0) {\n return number;\n }\n if (number === 1) {\n return number + '-ლი';\n }\n if (\n number < 20 ||\n (number <= 100 && number % 20 === 0) ||\n number % 100 === 0\n ) {\n return 'მე-' + number;\n }\n return number + '-ე';\n },\n week: {\n dow: 1,\n doy: 7,\n },\n });\n\n return ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-ші',\n 1: '-ші',\n 2: '-ші',\n 3: '-ші',\n 4: '-ші',\n 5: '-ші',\n 6: '-шы',\n 7: '-ші',\n 8: '-ші',\n 9: '-шы',\n 10: '-шы',\n 20: '-шы',\n 30: '-шы',\n 40: '-шы',\n 50: '-ші',\n 60: '-шы',\n 70: '-ші',\n 80: '-ші',\n 90: '-шы',\n 100: '-ші',\n };\n\n var kk = moment.defineLocale('kk', {\n months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n '_'\n ),\n monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n '_'\n ),\n weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Бүгін сағат] LT',\n nextDay: '[Ертең сағат] LT',\n nextWeek: 'dddd [сағат] LT',\n lastDay: '[Кеше сағат] LT',\n lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ішінде',\n past: '%s бұрын',\n s: 'бірнеше секунд',\n ss: '%d секунд',\n m: 'бір минут',\n mm: '%d минут',\n h: 'бір сағат',\n hh: '%d сағат',\n d: 'бір күн',\n dd: '%d күн',\n M: 'бір ай',\n MM: '%d ай',\n y: 'бір жыл',\n yy: '%d жыл',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '១',\n 2: '២',\n 3: '៣',\n 4: '៤',\n 5: '៥',\n 6: '៦',\n 7: '៧',\n 8: '៨',\n 9: '៩',\n 0: '០',\n },\n numberMap = {\n '១': '1',\n '២': '2',\n '៣': '3',\n '៤': '4',\n '៥': '5',\n '៦': '6',\n '៧': '7',\n '៨': '8',\n '៩': '9',\n '០': '0',\n };\n\n var km = moment.defineLocale('km', {\n months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n monthsShort:\n 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /ព្រឹក|ល្ងាច/,\n isPM: function (input) {\n return input === 'ល្ងាច';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ព្រឹក';\n } else {\n return 'ល្ងាច';\n }\n },\n calendar: {\n sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n nextDay: '[ស្អែក ម៉ោង] LT',\n nextWeek: 'dddd [ម៉ោង] LT',\n lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sទៀត',\n past: '%sមុន',\n s: 'ប៉ុន្មានវិនាទី',\n ss: '%d វិនាទី',\n m: 'មួយនាទី',\n mm: '%d នាទី',\n h: 'មួយម៉ោង',\n hh: '%d ម៉ោង',\n d: 'មួយថ្ងៃ',\n dd: '%d ថ្ងៃ',\n M: 'មួយខែ',\n MM: '%d ខែ',\n y: 'មួយឆ្នាំ',\n yy: '%d ឆ្នាំ',\n },\n dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n ordinal: 'ទី%d',\n preparse: function (string) {\n return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return km;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '೧',\n 2: '೨',\n 3: '೩',\n 4: '೪',\n 5: '೫',\n 6: '೬',\n 7: '೭',\n 8: '೮',\n 9: '೯',\n 0: '೦',\n },\n numberMap = {\n '೧': '1',\n '೨': '2',\n '೩': '3',\n '೪': '4',\n '೫': '5',\n '೬': '6',\n '೭': '7',\n '೮': '8',\n '೯': '9',\n '೦': '0',\n };\n\n var kn = moment.defineLocale('kn', {\n months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n '_'\n ),\n monthsShort:\n 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n '_'\n ),\n weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[ಇಂದು] LT',\n nextDay: '[ನಾಳೆ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ನಿನ್ನೆ] LT',\n lastWeek: '[ಕೊನೆಯ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ನಂತರ',\n past: '%s ಹಿಂದೆ',\n s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n ss: '%d ಸೆಕೆಂಡುಗಳು',\n m: 'ಒಂದು ನಿಮಿಷ',\n mm: '%d ನಿಮಿಷ',\n h: 'ಒಂದು ಗಂಟೆ',\n hh: '%d ಗಂಟೆ',\n d: 'ಒಂದು ದಿನ',\n dd: '%d ದಿನ',\n M: 'ಒಂದು ತಿಂಗಳು',\n MM: '%d ತಿಂಗಳು',\n y: 'ಒಂದು ವರ್ಷ',\n yy: '%d ವರ್ಷ',\n },\n preparse: function (string) {\n return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ರಾತ್ರಿ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n return hour;\n } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ಸಂಜೆ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ರಾತ್ರಿ';\n } else if (hour < 10) {\n return 'ಬೆಳಿಗ್ಗೆ';\n } else if (hour < 17) {\n return 'ಮಧ್ಯಾಹ್ನ';\n } else if (hour < 20) {\n return 'ಸಂಜೆ';\n } else {\n return 'ರಾತ್ರಿ';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n ordinal: function (number) {\n return number + 'ನೇ';\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return kn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ko = moment.defineLocale('ko', {\n months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n '_'\n ),\n weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'YYYY.MM.DD.',\n LL: 'YYYY년 MMMM D일',\n LLL: 'YYYY년 MMMM D일 A h:mm',\n LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n l: 'YYYY.MM.DD.',\n ll: 'YYYY년 MMMM D일',\n lll: 'YYYY년 MMMM D일 A h:mm',\n llll: 'YYYY년 MMMM D일 dddd A h:mm',\n },\n calendar: {\n sameDay: '오늘 LT',\n nextDay: '내일 LT',\n nextWeek: 'dddd LT',\n lastDay: '어제 LT',\n lastWeek: '지난주 dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s 후',\n past: '%s 전',\n s: '몇 초',\n ss: '%d초',\n m: '1분',\n mm: '%d분',\n h: '한 시간',\n hh: '%d시간',\n d: '하루',\n dd: '%d일',\n M: '한 달',\n MM: '%d달',\n y: '일 년',\n yy: '%d년',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '일';\n case 'M':\n return number + '월';\n case 'w':\n case 'W':\n return number + '주';\n default:\n return number;\n }\n },\n meridiemParse: /오전|오후/,\n isPM: function (token) {\n return token === '오후';\n },\n meridiem: function (hour, minute, isUpper) {\n return hour < 12 ? '오전' : '오후';\n },\n });\n\n return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Kurdish [ku-kmr]\n//! authors : Mazlum Özdogan : https://github.com/mergehez\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(num, withoutSuffix, key, isFuture) {\n var format = {\n s: ['çend sanîye', 'çend sanîyeyan'],\n ss: [num + ' sanîye', num + ' sanîyeyan'],\n m: ['deqîqeyek', 'deqîqeyekê'],\n mm: [num + ' deqîqe', num + ' deqîqeyan'],\n h: ['saetek', 'saetekê'],\n hh: [num + ' saet', num + ' saetan'],\n d: ['rojek', 'rojekê'],\n dd: [num + ' roj', num + ' rojan'],\n w: ['hefteyek', 'hefteyekê'],\n ww: [num + ' hefte', num + ' hefteyan'],\n M: ['mehek', 'mehekê'],\n MM: [num + ' meh', num + ' mehan'],\n y: ['salek', 'salekê'],\n yy: [num + ' sal', num + ' salan'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n // function obliqueNumSuffix(num) {\n // if(num.includes(':'))\n // num = parseInt(num.split(':')[0]);\n // else\n // num = parseInt(num);\n // return num == 0 || num % 10 == 1 ? 'ê'\n // : (num > 10 && num % 10 == 0 ? 'î' : 'an');\n // }\n function ezafeNumSuffix(num) {\n num = '' + num;\n var l = num.substring(num.length - 1),\n ll = num.length > 1 ? num.substring(num.length - 2) : '';\n if (\n !(ll == 12 || ll == 13) &&\n (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')\n )\n return 'yê';\n return 'ê';\n }\n\n var kuKmr = moment.defineLocale('ku-kmr', {\n // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)\n // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'\n // But the names below are more well known and handy\n months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(\n '_'\n ),\n monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),\n monthsParseExact: true,\n weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),\n weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),\n weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'bn' : 'BN';\n } else {\n return isLower ? 'pn' : 'PN';\n }\n },\n meridiemParse: /bn|BN|pn|PN/,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM[a] YYYY[an]',\n LLL: 'Do MMMM[a] YYYY[an] HH:mm',\n LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',\n ll: 'Do MMM[.] YYYY[an]',\n lll: 'Do MMM[.] YYYY[an] HH:mm',\n llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',\n },\n calendar: {\n sameDay: '[Îro di saet] LT [de]',\n nextDay: '[Sibê di saet] LT [de]',\n nextWeek: 'dddd [di saet] LT [de]',\n lastDay: '[Duh di saet] LT [de]',\n lastWeek: 'dddd[a borî di saet] LT [de]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'di %s de',\n past: 'berî %s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(?:yê|ê|\\.)/,\n ordinal: function (num, period) {\n var p = period.toLowerCase();\n if (p.includes('w') || p.includes('m')) return num + '.';\n\n return num + ezafeNumSuffix(num);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return kuKmr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n },\n months = [\n 'کانونی دووەم',\n 'شوبات',\n 'ئازار',\n 'نیسان',\n 'ئایار',\n 'حوزەیران',\n 'تەمموز',\n 'ئاب',\n 'ئەیلوول',\n 'تشرینی یەكەم',\n 'تشرینی دووەم',\n 'كانونی یەکەم',\n ];\n\n var ku = moment.defineLocale('ku', {\n months: months,\n monthsShort: months,\n weekdays:\n 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n '_'\n ),\n weekdaysShort:\n 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /ئێواره‌|به‌یانی/,\n isPM: function (input) {\n return /ئێواره‌/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'به‌یانی';\n } else {\n return 'ئێواره‌';\n }\n },\n calendar: {\n sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n nextDay: '[به‌یانی كاتژمێر] LT',\n nextWeek: 'dddd [كاتژمێر] LT',\n lastDay: '[دوێنێ كاتژمێر] LT',\n lastWeek: 'dddd [كاتژمێر] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'له‌ %s',\n past: '%s',\n s: 'چه‌ند چركه‌یه‌ك',\n ss: 'چركه‌ %d',\n m: 'یه‌ك خوله‌ك',\n mm: '%d خوله‌ك',\n h: 'یه‌ك كاتژمێر',\n hh: '%d كاتژمێر',\n d: 'یه‌ك ڕۆژ',\n dd: '%d ڕۆژ',\n M: 'یه‌ك مانگ',\n MM: '%d مانگ',\n y: 'یه‌ك ساڵ',\n yy: '%d ساڵ',\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return ku;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-чү',\n 1: '-чи',\n 2: '-чи',\n 3: '-чү',\n 4: '-чү',\n 5: '-чи',\n 6: '-чы',\n 7: '-чи',\n 8: '-чи',\n 9: '-чу',\n 10: '-чу',\n 20: '-чы',\n 30: '-чу',\n 40: '-чы',\n 50: '-чү',\n 60: '-чы',\n 70: '-чи',\n 80: '-чи',\n 90: '-чу',\n 100: '-чү',\n };\n\n var ky = moment.defineLocale('ky', {\n months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n '_'\n ),\n monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n '_'\n ),\n weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n '_'\n ),\n weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Бүгүн саат] LT',\n nextDay: '[Эртең саат] LT',\n nextWeek: 'dddd [саат] LT',\n lastDay: '[Кечээ саат] LT',\n lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ичинде',\n past: '%s мурун',\n s: 'бирнече секунд',\n ss: '%d секунд',\n m: 'бир мүнөт',\n mm: '%d мүнөт',\n h: 'бир саат',\n hh: '%d саат',\n d: 'бир күн',\n dd: '%d күн',\n M: 'бир ай',\n MM: '%d ай',\n y: 'бир жыл',\n yy: '%d жыл',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eng Minutt', 'enger Minutt'],\n h: ['eng Stonn', 'enger Stonn'],\n d: ['een Dag', 'engem Dag'],\n M: ['ee Mount', 'engem Mount'],\n y: ['ee Joer', 'engem Joer'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n function processFutureTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'a ' + string;\n }\n return 'an ' + string;\n }\n function processPastTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'viru ' + string;\n }\n return 'virun ' + string;\n }\n /**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\n function eifelerRegelAppliesToNumber(number) {\n number = parseInt(number, 10);\n if (isNaN(number)) {\n return false;\n }\n if (number < 0) {\n // Negative Number --> always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10,\n firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n '_'\n ),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n },\n },\n relativeTime: {\n future: processFutureTime,\n past: processPastTime,\n s: 'e puer Sekonnen',\n ss: '%d Sekonnen',\n m: processRelativeTime,\n mm: '%d Minutten',\n h: processRelativeTime,\n hh: '%d Stonnen',\n d: processRelativeTime,\n dd: '%d Deeg',\n M: processRelativeTime,\n MM: '%d Méint',\n y: processRelativeTime,\n yy: '%d Joer',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var lo = moment.defineLocale('lo', {\n months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n '_'\n ),\n monthsShort:\n 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n '_'\n ),\n weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n isPM: function (input) {\n return input === 'ຕອນແລງ';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ຕອນເຊົ້າ';\n } else {\n return 'ຕອນແລງ';\n }\n },\n calendar: {\n sameDay: '[ມື້ນີ້ເວລາ] LT',\n nextDay: '[ມື້ອື່ນເວລາ] LT',\n nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ອີກ %s',\n past: '%sຜ່ານມາ',\n s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n ss: '%d ວິນາທີ',\n m: '1 ນາທີ',\n mm: '%d ນາທີ',\n h: '1 ຊົ່ວໂມງ',\n hh: '%d ຊົ່ວໂມງ',\n d: '1 ມື້',\n dd: '%d ມື້',\n M: '1 ເດືອນ',\n MM: '%d ເດືອນ',\n y: '1 ປີ',\n yy: '%d ປີ',\n },\n dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n ordinal: function (number) {\n return 'ທີ່' + number;\n },\n });\n\n return lo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundė_sekundžių_sekundes',\n m: 'minutė_minutės_minutę',\n mm: 'minutės_minučių_minutes',\n h: 'valanda_valandos_valandą',\n hh: 'valandos_valandų_valandas',\n d: 'diena_dienos_dieną',\n dd: 'dienos_dienų_dienas',\n M: 'mėnuo_mėnesio_mėnesį',\n MM: 'mėnesiai_mėnesių_mėnesius',\n y: 'metai_metų_metus',\n yy: 'metai_metų_metus',\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix\n ? forms(key)[0]\n : isFuture\n ? forms(key)[1]\n : forms(key)[2];\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return (\n result + translateSingular(number, withoutSuffix, key[0], isFuture)\n );\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months: {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n '_'\n ),\n standalone:\n 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n '_'\n ),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n },\n monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays: {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n '_'\n ),\n standalone:\n 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n '_'\n ),\n isFormat: /dddd HH:mm/,\n },\n weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY [m.] MMMM D [d.]',\n LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l: 'YYYY-MM-DD',\n ll: 'YYYY [m.] MMMM D [d.]',\n lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n },\n calendar: {\n sameDay: '[Šiandien] LT',\n nextDay: '[Rytoj] LT',\n nextWeek: 'dddd LT',\n lastDay: '[Vakar] LT',\n lastWeek: '[Praėjusį] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'po %s',\n past: 'prieš %s',\n s: translateSeconds,\n ss: translate,\n m: translateSingular,\n mm: translate,\n h: translateSingular,\n hh: translate,\n d: translateSingular,\n dd: translate,\n M: translateSingular,\n MM: translate,\n y: translateSingular,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal: function (number) {\n return number + '-oji';\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n h: 'stundas_stundām_stunda_stundas'.split('_'),\n hh: 'stundas_stundām_stunda_stundas'.split('_'),\n d: 'dienas_dienām_diena_dienas'.split('_'),\n dd: 'dienas_dienām_diena_dienas'.split('_'),\n M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n y: 'gada_gadiem_gads_gadi'.split('_'),\n yy: 'gada_gadiem_gads_gadi'.split('_'),\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays:\n 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n '_'\n ),\n weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY.',\n LL: 'YYYY. [gada] D. MMMM',\n LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n },\n calendar: {\n sameDay: '[Šodien pulksten] LT',\n nextDay: '[Rīt pulksten] LT',\n nextWeek: 'dddd [pulksten] LT',\n lastDay: '[Vakar pulksten] LT',\n lastWeek: '[Pagājušā] dddd [pulksten] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'pēc %s',\n past: 'pirms %s',\n s: relativeSeconds,\n ss: relativeTimeWithPlural,\n m: relativeTimeWithSingular,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithSingular,\n hh: relativeTimeWithPlural,\n d: relativeTimeWithSingular,\n dd: relativeTimeWithPlural,\n M: relativeTimeWithSingular,\n MM: relativeTimeWithPlural,\n y: relativeTimeWithSingular,\n yy: relativeTimeWithPlural,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'dan',\n dd: translator.translate,\n M: 'mjesec',\n MM: translator.translate,\n y: 'godinu',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return me;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n '_'\n ),\n monthsShort:\n 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n '_'\n ),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mk = moment.defineLocale('mk', {\n months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Денес во] LT',\n nextDay: '[Утре во] LT',\n nextWeek: '[Во] dddd [во] LT',\n lastDay: '[Вчера во] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пред %s',\n s: 'неколку секунди',\n ss: '%d секунди',\n m: 'една минута',\n mm: '%d минути',\n h: 'еден час',\n hh: '%d часа',\n d: 'еден ден',\n dd: '%d дена',\n M: 'еден месец',\n MM: '%d месеци',\n y: 'една година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ml = moment.defineLocale('ml', {\n months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n '_'\n ),\n monthsShort:\n 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n '_'\n ),\n weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm -നു',\n LTS: 'A h:mm:ss -നു',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm -നു',\n LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n },\n calendar: {\n sameDay: '[ഇന്ന്] LT',\n nextDay: '[നാളെ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ഇന്നലെ] LT',\n lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s കഴിഞ്ഞ്',\n past: '%s മുൻപ്',\n s: 'അൽപ നിമിഷങ്ങൾ',\n ss: '%d സെക്കൻഡ്',\n m: 'ഒരു മിനിറ്റ്',\n mm: '%d മിനിറ്റ്',\n h: 'ഒരു മണിക്കൂർ',\n hh: '%d മണിക്കൂർ',\n d: 'ഒരു ദിവസം',\n dd: '%d ദിവസം',\n M: 'ഒരു മാസം',\n MM: '%d മാസം',\n y: 'ഒരു വർഷം',\n yy: '%d വർഷം',\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n },\n });\n\n return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 's':\n return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n case 'ss':\n return number + (withoutSuffix ? ' секунд' : ' секундын');\n case 'm':\n case 'mm':\n return number + (withoutSuffix ? ' минут' : ' минутын');\n case 'h':\n case 'hh':\n return number + (withoutSuffix ? ' цаг' : ' цагийн');\n case 'd':\n case 'dd':\n return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n case 'M':\n case 'MM':\n return number + (withoutSuffix ? ' сар' : ' сарын');\n case 'y':\n case 'yy':\n return number + (withoutSuffix ? ' жил' : ' жилийн');\n default:\n return number;\n }\n }\n\n var mn = moment.defineLocale('mn', {\n months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n '_'\n ),\n monthsShort:\n '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY оны MMMMын D',\n LLL: 'YYYY оны MMMMын D HH:mm',\n LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n },\n meridiemParse: /ҮӨ|ҮХ/i,\n isPM: function (input) {\n return input === 'ҮХ';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ҮӨ';\n } else {\n return 'ҮХ';\n }\n },\n calendar: {\n sameDay: '[Өнөөдөр] LT',\n nextDay: '[Маргааш] LT',\n nextWeek: '[Ирэх] dddd LT',\n lastDay: '[Өчигдөр] LT',\n lastWeek: '[Өнгөрсөн] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s дараа',\n past: '%s өмнө',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + ' өдөр';\n default:\n return number;\n }\n },\n });\n\n return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n var output = '';\n if (withoutSuffix) {\n switch (string) {\n case 's':\n output = 'काही सेकंद';\n break;\n case 'ss':\n output = '%d सेकंद';\n break;\n case 'm':\n output = 'एक मिनिट';\n break;\n case 'mm':\n output = '%d मिनिटे';\n break;\n case 'h':\n output = 'एक तास';\n break;\n case 'hh':\n output = '%d तास';\n break;\n case 'd':\n output = 'एक दिवस';\n break;\n case 'dd':\n output = '%d दिवस';\n break;\n case 'M':\n output = 'एक महिना';\n break;\n case 'MM':\n output = '%d महिने';\n break;\n case 'y':\n output = 'एक वर्ष';\n break;\n case 'yy':\n output = '%d वर्षे';\n break;\n }\n } else {\n switch (string) {\n case 's':\n output = 'काही सेकंदां';\n break;\n case 'ss':\n output = '%d सेकंदां';\n break;\n case 'm':\n output = 'एका मिनिटा';\n break;\n case 'mm':\n output = '%d मिनिटां';\n break;\n case 'h':\n output = 'एका तासा';\n break;\n case 'hh':\n output = '%d तासां';\n break;\n case 'd':\n output = 'एका दिवसा';\n break;\n case 'dd':\n output = '%d दिवसां';\n break;\n case 'M':\n output = 'एका महिन्या';\n break;\n case 'MM':\n output = '%d महिन्यां';\n break;\n case 'y':\n output = 'एका वर्षा';\n break;\n case 'yy':\n output = '%d वर्षां';\n break;\n }\n }\n return output.replace(/%d/i, number);\n }\n\n var mr = moment.defineLocale('mr', {\n months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n '_'\n ),\n monthsShort:\n 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm वाजता',\n LTS: 'A h:mm:ss वाजता',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm वाजता',\n LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[उद्या] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमध्ये',\n past: '%sपूर्वी',\n s: relativeTimeMr,\n ss: relativeTimeMr,\n m: relativeTimeMr,\n mm: relativeTimeMr,\n h: relativeTimeMr,\n hh: relativeTimeMr,\n d: relativeTimeMr,\n dd: relativeTimeMr,\n M: relativeTimeMr,\n MM: relativeTimeMr,\n y: relativeTimeMr,\n yy: relativeTimeMr,\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n return hour;\n } else if (\n meridiem === 'दुपारी' ||\n meridiem === 'सायंकाळी' ||\n meridiem === 'रात्री'\n ) {\n return hour >= 12 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour >= 0 && hour < 6) {\n return 'पहाटे';\n } else if (hour < 12) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var msMy = moment.defineLocale('ms-my', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return msMy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ms = moment.defineLocale('ms', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mt = moment.defineLocale('mt', {\n months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n weekdays:\n 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n '_'\n ),\n weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Illum fil-]LT',\n nextDay: '[Għada fil-]LT',\n nextWeek: 'dddd [fil-]LT',\n lastDay: '[Il-bieraħ fil-]LT',\n lastWeek: 'dddd [li għadda] [fil-]LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'f’ %s',\n past: '%s ilu',\n s: 'ftit sekondi',\n ss: '%d sekondi',\n m: 'minuta',\n mm: '%d minuti',\n h: 'siegħa',\n hh: '%d siegħat',\n d: 'ġurnata',\n dd: '%d ġranet',\n M: 'xahar',\n MM: '%d xhur',\n y: 'sena',\n yy: '%d sni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '၁',\n 2: '၂',\n 3: '၃',\n 4: '၄',\n 5: '၅',\n 6: '၆',\n 7: '၇',\n 8: '၈',\n 9: '၉',\n 0: '၀',\n },\n numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0',\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n '_'\n ),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n '_'\n ),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss: '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်',\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//! Sigurd Gartmann : https://github.com/sigurdga\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nb = moment.defineLocale('nb', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact: true,\n weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s siden',\n s: 'noen sekunder',\n ss: '%d sekunder',\n m: 'ett minutt',\n mm: '%d minutter',\n h: 'én time',\n hh: '%d timer',\n d: 'én dag',\n dd: '%d dager',\n w: 'én uke',\n ww: '%d uker',\n M: 'én måned',\n MM: '%d måneder',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n var ne = moment.defineLocale('ne', {\n months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n '_'\n ),\n monthsShort:\n 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n '_'\n ),\n weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'Aको h:mm बजे',\n LTS: 'Aको h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, Aको h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[भोलि] LT',\n nextWeek: '[आउँदो] dddd[,] LT',\n lastDay: '[हिजो] LT',\n lastWeek: '[गएको] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमा',\n past: '%s अगाडि',\n s: 'केही क्षण',\n ss: '%d सेकेण्ड',\n m: 'एक मिनेट',\n mm: '%d मिनेट',\n h: 'एक घण्टा',\n hh: '%d घण्टा',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महिना',\n MM: '%d महिना',\n y: 'एक बर्ष',\n yy: '%d बर्ष',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^(maart|mrt\\.?)$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex =\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex:\n /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays:\n 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nlBe;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^(maart|mrt\\.?)$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex =\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex:\n /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays:\n 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n w: 'één week',\n ww: '%d weken',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nn = moment.defineLocale('nn', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact: true,\n weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s sidan',\n s: 'nokre sekund',\n ss: '%d sekund',\n m: 'eit minutt',\n mm: '%d minutt',\n h: 'ein time',\n hh: '%d timar',\n d: 'ein dag',\n dd: '%d dagar',\n w: 'ei veke',\n ww: '%d veker',\n M: 'ein månad',\n MM: '%d månader',\n y: 'eit år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ocLnc = moment.defineLocale('oc-lnc', {\n months: {\n standalone:\n 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n '_'\n ),\n format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort:\n 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: '[uèi a] LT',\n nextDay: '[deman a] LT',\n nextWeek: 'dddd [a] LT',\n lastDay: '[ièr a] LT',\n lastWeek: 'dddd [passat a] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'unas segondas',\n ss: '%d segondas',\n m: 'una minuta',\n mm: '%d minutas',\n h: 'una ora',\n hh: '%d oras',\n d: 'un jorn',\n dd: '%d jorns',\n M: 'un mes',\n MM: '%d meses',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4,\n },\n });\n\n return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '੧',\n 2: '੨',\n 3: '੩',\n 4: '੪',\n 5: '੫',\n 6: '੬',\n 7: '੭',\n 8: '੮',\n 9: '੯',\n 0: '੦',\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0',\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n monthsShort:\n 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n '_'\n ),\n weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm ਵਜੇ',\n LTS: 'A h:mm:ss ਵਜੇ',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n },\n calendar: {\n sameDay: '[ਅਜ] LT',\n nextDay: '[ਕਲ] LT',\n nextWeek: '[ਅਗਲਾ] dddd, LT',\n lastDay: '[ਕਲ] LT',\n lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ਵਿੱਚ',\n past: '%s ਪਿਛਲੇ',\n s: 'ਕੁਝ ਸਕਿੰਟ',\n ss: '%d ਸਕਿੰਟ',\n m: 'ਇਕ ਮਿੰਟ',\n mm: '%d ਮਿੰਟ',\n h: 'ਇੱਕ ਘੰਟਾ',\n hh: '%d ਘੰਟੇ',\n d: 'ਇੱਕ ਦਿਨ',\n dd: '%d ਦਿਨ',\n M: 'ਇੱਕ ਮਹੀਨਾ',\n MM: '%d ਮਹੀਨੇ',\n y: 'ਇੱਕ ਸਾਲ',\n yy: '%d ਸਾਲ',\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return paIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsNominative =\n 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n '_'\n ),\n monthsSubjective =\n 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n '_'\n ),\n monthsParse = [\n /^sty/i,\n /^lut/i,\n /^mar/i,\n /^kwi/i,\n /^maj/i,\n /^cze/i,\n /^lip/i,\n /^sie/i,\n /^wrz/i,\n /^paź/i,\n /^lis/i,\n /^gru/i,\n ];\n function plural(n) {\n return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n return result + (plural(number) ? 'sekundy' : 'sekund');\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'ww':\n return result + (plural(number) ? 'tygodnie' : 'tygodni');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months: function (momentToFormat, format) {\n if (!momentToFormat) {\n return monthsNominative;\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays:\n 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W niedzielę o] LT';\n\n case 2:\n return '[We wtorek o] LT';\n\n case 3:\n return '[W środę o] LT';\n\n case 6:\n return '[W sobotę o] LT';\n\n default:\n return '[W] dddd [o] LT';\n }\n },\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: '%s temu',\n s: 'kilka sekund',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: '1 dzień',\n dd: '%d dni',\n w: 'tydzień',\n ww: translate,\n M: 'miesiąc',\n MM: translate,\n y: 'rok',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ptBr = moment.defineLocale('pt-br', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays:\n 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n '_'\n ),\n weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'poucos segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n invalidDate: 'Data inválida',\n });\n\n return ptBr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var pt = moment.defineLocale('pt', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays:\n 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n '_'\n ),\n weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n w: 'uma semana',\n ww: '%d semanas',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: 'secunde',\n mm: 'minute',\n hh: 'ore',\n dd: 'zile',\n ww: 'săptămâni',\n MM: 'luni',\n yy: 'ani',\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n '_'\n ),\n monthsShort:\n 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'peste %s',\n past: '%s în urmă',\n s: 'câteva secunde',\n ss: relativeTimeWithPlural,\n m: 'un minut',\n mm: relativeTimeWithPlural,\n h: 'o oră',\n hh: relativeTimeWithPlural,\n d: 'o zi',\n dd: relativeTimeWithPlural,\n w: 'o săptămână',\n ww: relativeTimeWithPlural,\n M: 'o lună',\n MM: relativeTimeWithPlural,\n y: 'un an',\n yy: relativeTimeWithPlural,\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n hh: 'час_часа_часов',\n dd: 'день_дня_дней',\n ww: 'неделя_недели_недель',\n MM: 'месяц_месяца_месяцев',\n yy: 'год_года_лет',\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n var monthsParse = [\n /^янв/i,\n /^фев/i,\n /^мар/i,\n /^апр/i,\n /^ма[йя]/i,\n /^июн/i,\n /^июл/i,\n /^авг/i,\n /^сен/i,\n /^окт/i,\n /^ноя/i,\n /^дек/i,\n ];\n\n // http://new.gramota.ru/spravka/rules/139-prop : § 103\n // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n var ru = moment.defineLocale('ru', {\n months: {\n format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n '_'\n ),\n standalone:\n 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n '_'\n ),\n },\n monthsShort: {\n // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n '_'\n ),\n standalone:\n 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n '_'\n ),\n },\n weekdays: {\n standalone:\n 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n '_'\n ),\n format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n '_'\n ),\n isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n },\n weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n monthsRegex:\n /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // копия предыдущего\n monthsShortRegex:\n /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // полные названия с падежами\n monthsStrictRegex:\n /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n // Выражение, которое соответствует только сокращённым формам\n monthsShortStrictRegex:\n /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY г.',\n LLL: 'D MMMM YYYY г., H:mm',\n LLLL: 'dddd, D MMMM YYYY г., H:mm',\n },\n calendar: {\n sameDay: '[Сегодня, в] LT',\n nextDay: '[Завтра, в] LT',\n lastDay: '[Вчера, в] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В следующее] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В следующий] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В следующую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'через %s',\n past: '%s назад',\n s: 'несколько секунд',\n ss: relativeTimeWithPlural,\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: 'час',\n hh: relativeTimeWithPlural,\n d: 'день',\n dd: relativeTimeWithPlural,\n w: 'неделя',\n ww: relativeTimeWithPlural,\n M: 'месяц',\n MM: relativeTimeWithPlural,\n y: 'год',\n yy: relativeTimeWithPlural,\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM: function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر',\n ],\n days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n var sd = moment.defineLocale('sd', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[اڄ] LT',\n nextDay: '[سڀاڻي] LT',\n nextWeek: 'dddd [اڳين هفتي تي] LT',\n lastDay: '[ڪالهه] LT',\n lastWeek: '[گزريل هفتي] dddd [تي] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s پوء',\n past: '%s اڳ',\n s: 'چند سيڪنڊ',\n ss: '%d سيڪنڊ',\n m: 'هڪ منٽ',\n mm: '%d منٽ',\n h: 'هڪ ڪلاڪ',\n hh: '%d ڪلاڪ',\n d: 'هڪ ڏينهن',\n dd: '%d ڏينهن',\n M: 'هڪ مهينو',\n MM: '%d مهينا',\n y: 'هڪ سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var se = moment.defineLocale('se', {\n months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n '_'\n ),\n monthsShort:\n 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n weekdays:\n 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n '_'\n ),\n weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'MMMM D. [b.] YYYY',\n LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n },\n calendar: {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s geažes',\n past: 'maŋit %s',\n s: 'moadde sekunddat',\n ss: '%d sekunddat',\n m: 'okta minuhta',\n mm: '%d minuhtat',\n h: 'okta diimmu',\n hh: '%d diimmut',\n d: 'okta beaivi',\n dd: '%d beaivvit',\n M: 'okta mánnu',\n MM: '%d mánut',\n y: 'okta jahki',\n yy: '%d jagit',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return se;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n '_'\n ),\n monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n '_'\n ),\n weekdays:\n 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n '_'\n ),\n weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'a h:mm',\n LTS: 'a h:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY MMMM D',\n LLL: 'YYYY MMMM D, a h:mm',\n LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n },\n calendar: {\n sameDay: '[අද] LT[ට]',\n nextDay: '[හෙට] LT[ට]',\n nextWeek: 'dddd LT[ට]',\n lastDay: '[ඊයේ] LT[ට]',\n lastWeek: '[පසුගිය] dddd LT[ට]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sකින්',\n past: '%sකට පෙර',\n s: 'තත්පර කිහිපය',\n ss: 'තත්පර %d',\n m: 'මිනිත්තුව',\n mm: 'මිනිත්තු %d',\n h: 'පැය',\n hh: 'පැය %d',\n d: 'දිනය',\n dd: 'දින %d',\n M: 'මාසය',\n MM: 'මාස %d',\n y: 'වසර',\n yy: 'වසර %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal: function (number) {\n return number + ' වැනි';\n },\n meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM: function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n },\n });\n\n return si;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months =\n 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n '_'\n ),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return n > 1 && n < 5;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months: months,\n monthsShort: monthsShort,\n weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pred %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nekaj sekund'\n : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danes ob] LT',\n nextDay: '[jutri ob] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay: '[včeraj ob] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'čez %s',\n past: 'pred %s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sq = moment.defineLocale('sq', {\n months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n '_'\n ),\n monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n '_'\n ),\n weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem: function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Sot në] LT',\n nextDay: '[Nesër në] LT',\n nextWeek: 'dddd [në] LT',\n lastDay: '[Dje në] LT',\n lastWeek: 'dddd [e kaluar në] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'në %s',\n past: '%s më parë',\n s: 'disa sekonda',\n ss: '%d sekonda',\n m: 'një minutë',\n mm: '%d minuta',\n h: 'një orë',\n hh: '%d orë',\n d: 'një ditë',\n dd: '%d ditë',\n M: 'një muaj',\n MM: '%d muaj',\n y: 'një vit',\n yy: '%d vite',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sq;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једног минута'],\n mm: ['минут', 'минута', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n d: ['један дан', 'једног дана'],\n dd: ['дан', 'дана', 'дана'],\n M: ['један месец', 'једног месеца'],\n MM: ['месец', 'месеца', 'месеци'],\n y: ['једну годину', 'једне године'],\n yy: ['годину', 'године', 'година'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n if (\n number % 10 >= 1 &&\n number % 10 <= 4 &&\n (number % 100 < 10 || number % 100 >= 20)\n ) {\n return number % 10 === 1 ? wordKey[0] : wordKey[1];\n }\n return wordKey[2];\n },\n translate: function (number, withoutSuffix, key, isFuture) {\n var wordKey = translator.words[key],\n word;\n\n if (key.length === 1) {\n // Nominativ\n if (key === 'y' && withoutSuffix) return 'једна година';\n return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n }\n\n word = translator.correctGrammaticalCase(number, wordKey);\n // Nominativ\n if (key === 'yy' && withoutSuffix && word === 'годину') {\n return number + ' година';\n }\n\n return number + ' ' + word;\n },\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n '_'\n ),\n monthsShort:\n 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay: '[јуче у] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пре %s',\n s: 'неколико секунди',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: translator.translate,\n dd: translator.translate,\n M: translator.translate,\n MM: translator.translate,\n y: translator.translate,\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n d: ['jedan dan', 'jednog dana'],\n dd: ['dan', 'dana', 'dana'],\n M: ['jedan mesec', 'jednog meseca'],\n MM: ['mesec', 'meseca', 'meseci'],\n y: ['jednu godinu', 'jedne godine'],\n yy: ['godinu', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n if (\n number % 10 >= 1 &&\n number % 10 <= 4 &&\n (number % 100 < 10 || number % 100 >= 20)\n ) {\n return number % 10 === 1 ? wordKey[0] : wordKey[1];\n }\n return wordKey[2];\n },\n translate: function (number, withoutSuffix, key, isFuture) {\n var wordKey = translator.words[key],\n word;\n\n if (key.length === 1) {\n // Nominativ\n if (key === 'y' && withoutSuffix) return 'jedna godina';\n return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n }\n\n word = translator.correctGrammaticalCase(number, wordKey);\n // Nominativ\n if (key === 'yy' && withoutSuffix && word === 'godinu') {\n return number + ' godina';\n }\n\n return number + ' ' + word;\n },\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pre %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: translator.translate,\n dd: translator.translate,\n M: translator.translate,\n MM: translator.translate,\n y: translator.translate,\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ss = moment.defineLocale('ss', {\n months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n '_'\n ),\n monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays:\n 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n '_'\n ),\n weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Namuhla nga] LT',\n nextDay: '[Kusasa nga] LT',\n nextWeek: 'dddd [nga] LT',\n lastDay: '[Itolo nga] LT',\n lastWeek: 'dddd [leliphelile] [nga] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'nga %s',\n past: 'wenteka nga %s',\n s: 'emizuzwana lomcane',\n ss: '%d mzuzwana',\n m: 'umzuzu',\n mm: '%d emizuzu',\n h: 'lihora',\n hh: '%d emahora',\n d: 'lilanga',\n dd: '%d emalanga',\n M: 'inyanga',\n MM: '%d tinyanga',\n y: 'umnyaka',\n yy: '%d iminyaka',\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: '%d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ss;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sv = moment.defineLocale('sv', {\n months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: 'för %s sedan',\n s: 'några sekunder',\n ss: '%d sekunder',\n m: 'en minut',\n mm: '%d minuter',\n h: 'en timme',\n hh: '%d timmar',\n d: 'en dag',\n dd: '%d dagar',\n M: 'en månad',\n MM: '%d månader',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? ':e'\n : b === 1\n ? ':a'\n : b === 2\n ? ':a'\n : b === 3\n ? ':e'\n : ':e';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sw = moment.defineLocale('sw', {\n months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays:\n 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n '_'\n ),\n weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'hh:mm A',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[leo saa] LT',\n nextDay: '[kesho saa] LT',\n nextWeek: '[wiki ijayo] dddd [saat] LT',\n lastDay: '[jana] LT',\n lastWeek: '[wiki iliyopita] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s baadaye',\n past: 'tokea %s',\n s: 'hivi punde',\n ss: 'sekunde %d',\n m: 'dakika moja',\n mm: 'dakika %d',\n h: 'saa limoja',\n hh: 'masaa %d',\n d: 'siku moja',\n dd: 'siku %d',\n M: 'mwezi mmoja',\n MM: 'miezi %d',\n y: 'mwaka mmoja',\n yy: 'miaka %d',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '௧',\n 2: '௨',\n 3: '௩',\n 4: '௪',\n 5: '௫',\n 6: '௬',\n 7: '௭',\n 8: '௮',\n 9: '௯',\n 0: '௦',\n },\n numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0',\n };\n\n var ta = moment.defineLocale('ta', {\n months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n monthsShort:\n 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n weekdays:\n 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n '_'\n ),\n weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n '_'\n ),\n weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, HH:mm',\n LLLL: 'dddd, D MMMM YYYY, HH:mm',\n },\n calendar: {\n sameDay: '[இன்று] LT',\n nextDay: '[நாளை] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[நேற்று] LT',\n lastWeek: '[கடந்த வாரம்] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s இல்',\n past: '%s முன்',\n s: 'ஒரு சில விநாடிகள்',\n ss: '%d விநாடிகள்',\n m: 'ஒரு நிமிடம்',\n mm: '%d நிமிடங்கள்',\n h: 'ஒரு மணி நேரம்',\n hh: '%d மணி நேரம்',\n d: 'ஒரு நாள்',\n dd: '%d நாட்கள்',\n M: 'ஒரு மாதம்',\n MM: '%d மாதங்கள்',\n y: 'ஒரு வருடம்',\n yy: '%d ஆண்டுகள்',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal: function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem: function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var te = moment.defineLocale('te', {\n months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n '_'\n ),\n monthsShort:\n 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n '_'\n ),\n weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[నేడు] LT',\n nextDay: '[రేపు] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[నిన్న] LT',\n lastWeek: '[గత] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s లో',\n past: '%s క్రితం',\n s: 'కొన్ని క్షణాలు',\n ss: '%d సెకన్లు',\n m: 'ఒక నిమిషం',\n mm: '%d నిమిషాలు',\n h: 'ఒక గంట',\n hh: '%d గంటలు',\n d: 'ఒక రోజు',\n dd: '%d రోజులు',\n M: 'ఒక నెల',\n MM: '%d నెలలు',\n y: 'ఒక సంవత్సరం',\n yy: '%d సంవత్సరాలు',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n ordinal: '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return te;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tet = moment.defineLocale('tet', {\n months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'iha %s',\n past: '%s liuba',\n s: 'segundu balun',\n ss: 'segundu %d',\n m: 'minutu ida',\n mm: 'minutu %d',\n h: 'oras ida',\n hh: 'oras %d',\n d: 'loron ida',\n dd: 'loron %d',\n M: 'fulan ida',\n MM: 'fulan %d',\n y: 'tinan ida',\n yy: 'tinan %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tet;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-ум',\n 1: '-ум',\n 2: '-юм',\n 3: '-юм',\n 4: '-ум',\n 5: '-ум',\n 6: '-ум',\n 7: '-ум',\n 8: '-ум',\n 9: '-ум',\n 10: '-ум',\n 12: '-ум',\n 13: '-ум',\n 20: '-ум',\n 30: '-юм',\n 40: '-ум',\n 50: '-ум',\n 60: '-ум',\n 70: '-ум',\n 80: '-ум',\n 90: '-ум',\n 100: '-ум',\n };\n\n var tg = moment.defineLocale('tg', {\n months: {\n format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n '_'\n ),\n standalone:\n 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n },\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n '_'\n ),\n weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Имрӯз соати] LT',\n nextDay: '[Фардо соати] LT',\n lastDay: '[Дирӯз соати] LT',\n nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'баъди %s',\n past: '%s пеш',\n s: 'якчанд сония',\n m: 'як дақиқа',\n mm: '%d дақиқа',\n h: 'як соат',\n hh: '%d соат',\n d: 'як рӯз',\n dd: '%d рӯз',\n M: 'як моҳ',\n MM: '%d моҳ',\n y: 'як сол',\n yy: '%d сол',\n },\n meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'шаб') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'субҳ') {\n return hour;\n } else if (meridiem === 'рӯз') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'бегоҳ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'шаб';\n } else if (hour < 11) {\n return 'субҳ';\n } else if (hour < 16) {\n return 'рӯз';\n } else if (hour < 19) {\n return 'бегоҳ';\n } else {\n return 'шаб';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1th is the first week of the year.\n },\n });\n\n return tg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var th = moment.defineLocale('th', {\n months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n '_'\n ),\n monthsShort:\n 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY เวลา H:mm',\n LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar: {\n sameDay: '[วันนี้ เวลา] LT',\n nextDay: '[พรุ่งนี้ เวลา] LT',\n nextWeek: 'dddd[หน้า เวลา] LT',\n lastDay: '[เมื่อวานนี้ เวลา] LT',\n lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'อีก %s',\n past: '%sที่แล้ว',\n s: 'ไม่กี่วินาที',\n ss: '%d วินาที',\n m: '1 นาที',\n mm: '%d นาที',\n h: '1 ชั่วโมง',\n hh: '%d ชั่วโมง',\n d: '1 วัน',\n dd: '%d วัน',\n w: '1 สัปดาห์',\n ww: '%d สัปดาห์',\n M: '1 เดือน',\n MM: '%d เดือน',\n y: '1 ปี',\n yy: '%d ปี',\n },\n });\n\n return th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inji\",\n 5: \"'inji\",\n 8: \"'inji\",\n 70: \"'inji\",\n 80: \"'inji\",\n 2: \"'nji\",\n 7: \"'nji\",\n 20: \"'nji\",\n 50: \"'nji\",\n 3: \"'ünji\",\n 4: \"'ünji\",\n 100: \"'ünji\",\n 6: \"'njy\",\n 9: \"'unjy\",\n 10: \"'unjy\",\n 30: \"'unjy\",\n 60: \"'ynjy\",\n 90: \"'ynjy\",\n };\n\n var tk = moment.defineLocale('tk', {\n months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n '_'\n ),\n weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün sagat] LT',\n nextDay: '[ertir sagat] LT',\n nextWeek: '[indiki] dddd [sagat] LT',\n lastDay: '[düýn] LT',\n lastWeek: '[geçen] dddd [sagat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s soň',\n past: '%s öň',\n s: 'birnäçe sekunt',\n m: 'bir minut',\n mm: '%d minut',\n h: 'bir sagat',\n hh: '%d sagat',\n d: 'bir gün',\n dd: '%d gün',\n M: 'bir aý',\n MM: '%d aý',\n y: 'bir ýyl',\n yy: '%d ýyl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'unjy\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tlPh = moment.defineLocale('tl-ph', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlPh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'leS'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'waQ'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'nem'\n : time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'Hu’'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'wen'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'ben'\n : time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[one];\n }\n return word === '' ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n '_'\n ),\n monthsShort:\n 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysShort:\n 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysMin:\n 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L',\n },\n relativeTime: {\n future: translateFuture,\n past: translatePast,\n s: 'puS lup',\n ss: translate,\n m: 'wa’ tup',\n mm: translate,\n h: 'wa’ rep',\n hh: translate,\n d: 'wa’ jaj',\n dd: translate,\n M: 'wa’ jar',\n MM: translate,\n y: 'wa’ DIS',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//! Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inci\",\n 5: \"'inci\",\n 8: \"'inci\",\n 70: \"'inci\",\n 80: \"'inci\",\n 2: \"'nci\",\n 7: \"'nci\",\n 20: \"'nci\",\n 50: \"'nci\",\n 3: \"'üncü\",\n 4: \"'üncü\",\n 100: \"'üncü\",\n 6: \"'ncı\",\n 9: \"'uncu\",\n 10: \"'uncu\",\n 30: \"'uncu\",\n 60: \"'ıncı\",\n 90: \"'ıncı\",\n };\n\n var tr = moment.defineLocale('tr', {\n months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n '_'\n ),\n monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n '_'\n ),\n weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'öö' : 'ÖÖ';\n } else {\n return isLower ? 'ös' : 'ÖS';\n }\n },\n meridiemParse: /öö|ÖÖ|ös|ÖS/,\n isPM: function (input) {\n return input === 'ös' || input === 'ÖS';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün saat] LT',\n nextDay: '[yarın saat] LT',\n nextWeek: '[gelecek] dddd [saat] LT',\n lastDay: '[dün] LT',\n lastWeek: '[geçen] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s sonra',\n past: '%s önce',\n s: 'birkaç saniye',\n ss: '%d saniye',\n m: 'bir dakika',\n mm: '%d dakika',\n h: 'bir saat',\n hh: '%d saat',\n d: 'bir gün',\n dd: '%d gün',\n w: 'bir hafta',\n ww: '%d hafta',\n M: 'bir ay',\n MM: '%d ay',\n y: 'bir yıl',\n yy: '%d yıl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'ıncı\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM [dallas] YYYY',\n LLL: 'D. MMMM [dallas] YYYY HH.mm',\n LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM: function (input) {\n return \"d'o\" === input.toLowerCase();\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? \"d'o\" : \"D'O\";\n } else {\n return isLower ? \"d'a\" : \"D'A\";\n }\n },\n calendar: {\n sameDay: '[oxhi à] LT',\n nextDay: '[demà à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[ieiri à] LT',\n lastWeek: '[sür el] dddd [lasteu à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'osprei %s',\n past: 'ja%s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['viensas secunds', \"'iensas secunds\"],\n ss: [number + ' secunds', '' + number + ' secunds'],\n m: [\"'n míut\", \"'iens míut\"],\n mm: [number + ' míuts', '' + number + ' míuts'],\n h: [\"'n þora\", \"'iensa þora\"],\n hh: [number + ' þoras', '' + number + ' þoras'],\n d: [\"'n ziua\", \"'iensa ziua\"],\n dd: [number + ' ziuas', '' + number + ' ziuas'],\n M: [\"'n mes\", \"'iens mes\"],\n MM: [number + ' mesen', '' + number + ' mesen'],\n y: [\"'n ar\", \"'iens ar\"],\n yy: [number + ' ars', '' + number + ' ars'],\n };\n return isFuture\n ? format[key][0]\n : withoutSuffix\n ? format[key][0]\n : format[key][1];\n }\n\n return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tzmLatn = moment.defineLocale('tzm-latn', {\n months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n '_'\n ),\n monthsShort:\n 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n '_'\n ),\n weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[asdkh g] LT',\n nextDay: '[aska g] LT',\n nextWeek: 'dddd [g] LT',\n lastDay: '[assant g] LT',\n lastWeek: 'dddd [g] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dadkh s yan %s',\n past: 'yan %s',\n s: 'imik',\n ss: '%d imik',\n m: 'minuḍ',\n mm: '%d minuḍ',\n h: 'saɛa',\n hh: '%d tassaɛin',\n d: 'ass',\n dd: '%d ossan',\n M: 'ayowr',\n MM: '%d iyyirn',\n y: 'asgas',\n yy: '%d isgasn',\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tzm = moment.defineLocale('tzm', {\n months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n monthsShort:\n 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past: 'ⵢⴰⵏ %s',\n s: 'ⵉⵎⵉⴽ',\n ss: '%d ⵉⵎⵉⴽ',\n m: 'ⵎⵉⵏⵓⴺ',\n mm: '%d ⵎⵉⵏⵓⴺ',\n h: 'ⵙⴰⵄⴰ',\n hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d: 'ⴰⵙⵙ',\n dd: '%d oⵙⵙⴰⵏ',\n M: 'ⴰⵢoⵓⵔ',\n MM: '%d ⵉⵢⵢⵉⵔⵏ',\n y: 'ⴰⵙⴳⴰⵙ',\n yy: '%d ⵉⵙⴳⴰⵙⵏ',\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return tzm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort:\n 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل',\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return ugCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n dd: 'день_дні_днів',\n MM: 'місяць_місяці_місяців',\n yy: 'рік_роки_років',\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n } else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n nominative:\n 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n '_'\n ),\n accusative:\n 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n '_'\n ),\n genitive:\n 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n '_'\n ),\n },\n nounCase;\n\n if (m === true) {\n return weekdays['nominative']\n .slice(1, 7)\n .concat(weekdays['nominative'].slice(0, 1));\n }\n if (!m) {\n return weekdays['nominative'];\n }\n\n nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n ? 'accusative'\n : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n ? 'genitive'\n : 'nominative';\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months: {\n format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n '_'\n ),\n standalone:\n 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n '_'\n ),\n },\n monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n '_'\n ),\n weekdays: weekdaysCaseReplace,\n weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY р.',\n LLL: 'D MMMM YYYY р., HH:mm',\n LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n },\n calendar: {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: '%s тому',\n s: 'декілька секунд',\n ss: relativeTimeWithPlural,\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: 'годину',\n hh: relativeTimeWithPlural,\n d: 'день',\n dd: relativeTimeWithPlural,\n M: 'місяць',\n MM: relativeTimeWithPlural,\n y: 'рік',\n yy: relativeTimeWithPlural,\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر',\n ],\n days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n var ur = moment.defineLocale('ur', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[آج بوقت] LT',\n nextDay: '[کل بوقت] LT',\n nextWeek: 'dddd [بوقت] LT',\n lastDay: '[گذشتہ روز بوقت] LT',\n lastWeek: '[گذشتہ] dddd [بوقت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s بعد',\n past: '%s قبل',\n s: 'چند سیکنڈ',\n ss: '%d سیکنڈ',\n m: 'ایک منٹ',\n mm: '%d منٹ',\n h: 'ایک گھنٹہ',\n hh: '%d گھنٹے',\n d: 'ایک دن',\n dd: '%d دن',\n M: 'ایک ماہ',\n MM: '%d ماہ',\n y: 'ایک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays:\n 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n '_'\n ),\n weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Bugun soat] LT [da]',\n nextDay: '[Ertaga] LT [da]',\n nextWeek: 'dddd [kuni soat] LT [da]',\n lastDay: '[Kecha soat] LT [da]',\n lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Yaqin %s ichida',\n past: 'Bir necha %s oldin',\n s: 'soniya',\n ss: '%d soniya',\n m: 'bir daqiqa',\n mm: '%d daqiqa',\n h: 'bir soat',\n hh: '%d soat',\n d: 'bir kun',\n dd: '%d kun',\n M: 'bir oy',\n MM: '%d oy',\n y: 'bir yil',\n yy: '%d yil',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uz = moment.defineLocale('uz', {\n months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Бугун соат] LT [да]',\n nextDay: '[Эртага] LT [да]',\n nextWeek: 'dddd [куни соат] LT [да]',\n lastDay: '[Кеча соат] LT [да]',\n lastWeek: '[Утган] dddd [куни соат] LT [да]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Якин %s ичида',\n past: 'Бир неча %s олдин',\n s: 'фурсат',\n ss: '%d фурсат',\n m: 'бир дакика',\n mm: '%d дакика',\n h: 'бир соат',\n hh: '%d соат',\n d: 'бир кун',\n dd: '%d кун',\n M: 'бир ой',\n MM: '%d ой',\n y: 'бир йил',\n yy: '%d йил',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return uz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var vi = moment.defineLocale('vi', {\n months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n '_'\n ),\n monthsShort:\n 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n '_'\n ),\n weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /sa|ch/i,\n isPM: function (input) {\n return /^ch$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [năm] YYYY',\n LLL: 'D MMMM [năm] YYYY HH:mm',\n LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n l: 'DD/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần trước lúc] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s tới',\n past: '%s trước',\n s: 'vài giây',\n ss: '%d giây',\n m: 'một phút',\n mm: '%d phút',\n h: 'một giờ',\n hh: '%d giờ',\n d: 'một ngày',\n dd: '%d ngày',\n w: 'một tuần',\n ww: '%d tuần',\n M: 'một tháng',\n MM: '%d tháng',\n y: 'một năm',\n yy: '%d năm',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n '_'\n ),\n monthsShort:\n 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n '_'\n ),\n weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[T~ódá~ý át] LT',\n nextDay: '[T~ómó~rró~w át] LT',\n nextWeek: 'dddd [át] LT',\n lastDay: '[Ý~ést~érdá~ý át] LT',\n lastWeek: '[L~ást] dddd [át] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'í~ñ %s',\n past: '%s á~gó',\n s: 'á ~féw ~sécó~ñds',\n ss: '%d s~écóñ~ds',\n m: 'á ~míñ~úté',\n mm: '%d m~íñú~tés',\n h: 'á~ñ hó~úr',\n hh: '%d h~óúrs',\n d: 'á ~dáý',\n dd: '%d d~áýs',\n M: 'á ~móñ~th',\n MM: '%d m~óñt~hs',\n y: 'á ~ýéár',\n yy: '%d ý~éárs',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var yo = moment.defineLocale('yo', {\n months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n '_'\n ),\n monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Ònì ni] LT',\n nextDay: '[Ọ̀la ni] LT',\n nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n lastDay: '[Àna ni] LT',\n lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ní %s',\n past: '%s kọjá',\n s: 'ìsẹjú aayá die',\n ss: 'aayá %d',\n m: 'ìsẹjú kan',\n mm: 'ìsẹjú %d',\n h: 'wákati kan',\n hh: 'wákati %d',\n d: 'ọjọ́ kan',\n dd: 'ọjọ́ %d',\n M: 'osù kan',\n MM: 'osù %d',\n y: 'ọdún kan',\n yy: 'ọdún %d',\n },\n dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n ordinal: 'ọjọ́ %d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhCn = moment.defineLocale('zh-cn', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日Ah点mm分',\n LLLL: 'YYYY年M月D日ddddAh点mm分',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[下]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n lastDay: '[昨天]LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[上]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s后',\n past: '%s前',\n s: '几秒',\n ss: '%d 秒',\n m: '1 分钟',\n mm: '%d 分钟',\n h: '1 小时',\n hh: '%d 小时',\n d: '1 天',\n dd: '%d 天',\n w: '1 周',\n ww: '%d 周',\n M: '1 个月',\n MM: '%d 个月',\n y: '1 年',\n yy: '%d 年',\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhHk = moment.defineLocale('zh-hk', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1200) {\n return '上午';\n } else if (hm === 1200) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: '[下]ddddLT',\n lastDay: '[昨天]LT',\n lastWeek: '[上]ddddLT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhMo = moment.defineLocale('zh-mo', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'D/M/YYYY',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s內',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhMo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhTw = moment.defineLocale('zh-tw', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhTw;\n\n})));\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@babel/runtime/helpers/slicedToArray'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass')) :\n typeof define === 'function' && define.amd ? define(['exports', '@babel/runtime/helpers/slicedToArray', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.multiBufferDataView = {}, global._slicedToArray, global._classCallCheck, global._createClass));\n})(this, (function (exports, _slicedToArray, _classCallCheck, _createClass) { 'use strict';\n\n function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n var MultiBufferDataView = /*#__PURE__*/function () {\n function MultiBufferDataView(buffers) {\n var byteOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var byteLength = arguments.length > 2 ? arguments[2] : undefined;\n _classCallCheck(this, MultiBufferDataView);\n if (byteOffset < 0 || byteLength !== undefined && byteLength < 0) {\n throw new RangeError();\n }\n var availableBytes = buffers.reduce(function (length, buffer) {\n return length + buffer.byteLength;\n }, 0);\n if (byteOffset > availableBytes || byteLength !== undefined && byteOffset + byteLength > availableBytes) {\n throw new RangeError();\n }\n var dataViews = [];\n var effectiveByteLength = byteLength === undefined ? availableBytes - byteOffset : byteLength;\n var truncatedBuffers = [];\n var consumedByteLength = 0;\n var truncatedByteOffset = byteOffset;\n var _iterator = _createForOfIteratorHelper(buffers),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var buffer = _step.value;\n if (truncatedBuffers.length === 0) {\n if (buffer.byteLength > truncatedByteOffset) {\n consumedByteLength = buffer.byteLength - truncatedByteOffset;\n var byteLengthOfDataView = consumedByteLength > effectiveByteLength ? effectiveByteLength : consumedByteLength;\n dataViews.push(new DataView(buffer, truncatedByteOffset, byteLengthOfDataView));\n truncatedBuffers.push(buffer);\n } else {\n truncatedByteOffset -= buffer.byteLength;\n }\n } else if (consumedByteLength < effectiveByteLength) {\n consumedByteLength += buffer.byteLength;\n var _byteLengthOfDataView = consumedByteLength > effectiveByteLength ? buffer.byteLength - consumedByteLength + effectiveByteLength : buffer.byteLength;\n dataViews.push(new DataView(buffer, 0, _byteLengthOfDataView));\n truncatedBuffers.push(buffer);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n this._buffers = truncatedBuffers;\n this._byteLength = effectiveByteLength;\n this._byteOffset = truncatedByteOffset;\n this._dataViews = dataViews;\n this._internalBuffer = new DataView(new ArrayBuffer(8));\n }\n _createClass(MultiBufferDataView, [{\n key: \"buffers\",\n get: function get() {\n return this._buffers;\n }\n }, {\n key: \"byteLength\",\n get: function get() {\n return this._byteLength;\n }\n }, {\n key: \"byteOffset\",\n get: function get() {\n return this._byteOffset;\n }\n }, {\n key: \"getFloat32\",\n value: function getFloat32(byteOffset, littleEndian) {\n this._internalBuffer.setUint8(0, this.getUint8(byteOffset + 0));\n this._internalBuffer.setUint8(1, this.getUint8(byteOffset + 1));\n this._internalBuffer.setUint8(2, this.getUint8(byteOffset + 2));\n this._internalBuffer.setUint8(3, this.getUint8(byteOffset + 3));\n return this._internalBuffer.getFloat32(0, littleEndian);\n }\n }, {\n key: \"getFloat64\",\n value: function getFloat64(byteOffset, littleEndian) {\n this._internalBuffer.setUint8(0, this.getUint8(byteOffset + 0));\n this._internalBuffer.setUint8(1, this.getUint8(byteOffset + 1));\n this._internalBuffer.setUint8(2, this.getUint8(byteOffset + 2));\n this._internalBuffer.setUint8(3, this.getUint8(byteOffset + 3));\n this._internalBuffer.setUint8(4, this.getUint8(byteOffset + 4));\n this._internalBuffer.setUint8(5, this.getUint8(byteOffset + 5));\n this._internalBuffer.setUint8(6, this.getUint8(byteOffset + 6));\n this._internalBuffer.setUint8(7, this.getUint8(byteOffset + 7));\n return this._internalBuffer.getFloat64(0, littleEndian);\n }\n }, {\n key: \"getInt16\",\n value: function getInt16(byteOffset, littleEndian) {\n this._internalBuffer.setUint8(0, this.getUint8(byteOffset + 0));\n this._internalBuffer.setUint8(1, this.getUint8(byteOffset + 1));\n return this._internalBuffer.getInt16(0, littleEndian);\n }\n }, {\n key: \"getInt32\",\n value: function getInt32(byteOffset, littleEndian) {\n this._internalBuffer.setUint8(0, this.getUint8(byteOffset + 0));\n this._internalBuffer.setUint8(1, this.getUint8(byteOffset + 1));\n this._internalBuffer.setUint8(2, this.getUint8(byteOffset + 2));\n this._internalBuffer.setUint8(3, this.getUint8(byteOffset + 3));\n return this._internalBuffer.getInt32(0, littleEndian);\n }\n }, {\n key: \"getInt8\",\n value: function getInt8(byteOffset) {\n var _this$_findDataViewWi = this._findDataViewWithOffset(byteOffset),\n _this$_findDataViewWi2 = _slicedToArray(_this$_findDataViewWi, 2),\n dataView = _this$_findDataViewWi2[0],\n byteOffsetOfDataView = _this$_findDataViewWi2[1];\n return dataView.getInt8(byteOffset - byteOffsetOfDataView);\n }\n }, {\n key: \"getUint16\",\n value: function getUint16(byteOffset, littleEndian) {\n this._internalBuffer.setUint8(0, this.getUint8(byteOffset + 0));\n this._internalBuffer.setUint8(1, this.getUint8(byteOffset + 1));\n return this._internalBuffer.getUint16(0, littleEndian);\n }\n }, {\n key: \"getUint32\",\n value: function getUint32(byteOffset, littleEndian) {\n this._internalBuffer.setUint8(0, this.getUint8(byteOffset + 0));\n this._internalBuffer.setUint8(1, this.getUint8(byteOffset + 1));\n this._internalBuffer.setUint8(2, this.getUint8(byteOffset + 2));\n this._internalBuffer.setUint8(3, this.getUint8(byteOffset + 3));\n return this._internalBuffer.getUint32(0, littleEndian);\n }\n }, {\n key: \"getUint8\",\n value: function getUint8(byteOffset) {\n var _this$_findDataViewWi3 = this._findDataViewWithOffset(byteOffset),\n _this$_findDataViewWi4 = _slicedToArray(_this$_findDataViewWi3, 2),\n dataView = _this$_findDataViewWi4[0],\n byteOffsetOfDataView = _this$_findDataViewWi4[1];\n return dataView.getUint8(byteOffset - byteOffsetOfDataView);\n }\n }, {\n key: \"setFloat32\",\n value: function setFloat32(byteOffset, value, littleEndian) {\n this._internalBuffer.setFloat32(0, value, littleEndian);\n this.setUint8(byteOffset, this._internalBuffer.getUint8(0));\n this.setUint8(byteOffset + 1, this._internalBuffer.getUint8(1));\n this.setUint8(byteOffset + 2, this._internalBuffer.getUint8(2));\n this.setUint8(byteOffset + 3, this._internalBuffer.getUint8(3));\n }\n }, {\n key: \"setFloat64\",\n value: function setFloat64(byteOffset, value, littleEndian) {\n this._internalBuffer.setFloat64(0, value, littleEndian);\n this.setUint8(byteOffset, this._internalBuffer.getUint8(0));\n this.setUint8(byteOffset + 1, this._internalBuffer.getUint8(1));\n this.setUint8(byteOffset + 2, this._internalBuffer.getUint8(2));\n this.setUint8(byteOffset + 3, this._internalBuffer.getUint8(3));\n this.setUint8(byteOffset + 4, this._internalBuffer.getUint8(4));\n this.setUint8(byteOffset + 5, this._internalBuffer.getUint8(5));\n this.setUint8(byteOffset + 6, this._internalBuffer.getUint8(6));\n this.setUint8(byteOffset + 7, this._internalBuffer.getUint8(7));\n }\n }, {\n key: \"setInt16\",\n value: function setInt16(byteOffset, value, littleEndian) {\n this._internalBuffer.setInt16(0, value, littleEndian);\n this.setUint8(byteOffset, this._internalBuffer.getUint8(0));\n this.setUint8(byteOffset + 1, this._internalBuffer.getUint8(1));\n }\n }, {\n key: \"setInt32\",\n value: function setInt32(byteOffset, value, littleEndian) {\n this._internalBuffer.setInt32(0, value, littleEndian);\n this.setUint8(byteOffset, this._internalBuffer.getUint8(0));\n this.setUint8(byteOffset + 1, this._internalBuffer.getUint8(1));\n this.setUint8(byteOffset + 2, this._internalBuffer.getUint8(2));\n this.setUint8(byteOffset + 3, this._internalBuffer.getUint8(3));\n }\n }, {\n key: \"setInt8\",\n value: function setInt8(byteOffset, value) {\n var _this$_findDataViewWi5 = this._findDataViewWithOffset(byteOffset),\n _this$_findDataViewWi6 = _slicedToArray(_this$_findDataViewWi5, 2),\n dataView = _this$_findDataViewWi6[0],\n byteOffsetOfDataView = _this$_findDataViewWi6[1];\n dataView.setInt8(byteOffset - byteOffsetOfDataView, value);\n }\n }, {\n key: \"setUint16\",\n value: function setUint16(byteOffset, value, littleEndian) {\n this._internalBuffer.setUint16(0, value, littleEndian);\n this.setUint8(byteOffset, this._internalBuffer.getUint8(0));\n this.setUint8(byteOffset + 1, this._internalBuffer.getUint8(1));\n }\n }, {\n key: \"setUint32\",\n value: function setUint32(byteOffset, value, littleEndian) {\n this._internalBuffer.setUint32(0, value, littleEndian);\n this.setUint8(byteOffset, this._internalBuffer.getUint8(0));\n this.setUint8(byteOffset + 1, this._internalBuffer.getUint8(1));\n this.setUint8(byteOffset + 2, this._internalBuffer.getUint8(2));\n this.setUint8(byteOffset + 3, this._internalBuffer.getUint8(3));\n }\n }, {\n key: \"setUint8\",\n value: function setUint8(byteOffset, value) {\n var _this$_findDataViewWi7 = this._findDataViewWithOffset(byteOffset),\n _this$_findDataViewWi8 = _slicedToArray(_this$_findDataViewWi7, 2),\n dataView = _this$_findDataViewWi8[0],\n byteOffsetOfDataView = _this$_findDataViewWi8[1];\n dataView.setUint8(byteOffset - byteOffsetOfDataView, value);\n }\n }, {\n key: \"_findDataViewWithOffset\",\n value: function _findDataViewWithOffset(byteOffset) {\n var byteOffsetOfDataView = 0;\n var _iterator2 = _createForOfIteratorHelper(this._dataViews),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var dataView = _step2.value;\n var byteOffsetOfNextDataView = byteOffsetOfDataView + dataView.byteLength;\n if (byteOffset >= byteOffsetOfDataView && byteOffset < byteOffsetOfNextDataView) {\n return [dataView, byteOffsetOfDataView];\n }\n byteOffsetOfDataView = byteOffsetOfNextDataView;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n throw new RangeError();\n }\n }]);\n return MultiBufferDataView;\n }();\n\n exports.MultiBufferDataView = MultiBufferDataView;\n\n}));\n","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (typeof exports === 'object') {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require('moment'); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n ariaLabel: 'Use the arrow keys to pick a date',\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // minimum number of days in the week that gets week number one\n // default ISO 8601, week 01 is the week with the first Thursday (4)\n firstWeekOfYearMinDays: 4,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '<td class=\"is-empty\"></td>';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n '<button class=\"pika-button pika-day\" type=\"button\" ' +\n 'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n opts.day +\n '</button>' +\n '</td>';\n },\n\n isoWeek = function(date, firstWeekOfYearMinDays) {\n // Ensure we're at the start of the day.\n date.setHours(0, 0, 0, 0);\n\n // Thursday in current week decides the year because January 4th\n // is always in the first week according to ISO8601.\n var yearDay = date.getDate(),\n weekDay = date.getDay(),\n dayInFirstWeek = firstWeekOfYearMinDays,\n dayShift = dayInFirstWeek - 1, // counting starts at 0\n daysPerWeek = 7,\n prevWeekDay = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n var jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek),\n msPerDay = 24 * 60 * 60 * 1000,\n daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n weekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n return weekNum;\n },\n\n renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n var date = new Date(y, m, d),\n week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n return '<td class=\"pika-week\">' + week + '</td>';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n },\n\n renderBody = function(rows)\n {\n return '<tbody>' + rows.join('') + '</tbody>';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('<th></th>');\n }\n for (i = 0; i < 7; i++) {\n arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n }\n return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '<div id=\"' + randId + '\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n (i === month ? ' selected=\"selected\"': '') +\n ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? ' disabled=\"disabled\"' : '') + '>' +\n opts.i18n.months[i] + '</option>');\n }\n\n monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n }\n }\n yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n }\n\n return html += '</div>';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n case 8:\n case 46:\n self.setDate(null);\n break;\n }\n }\n };\n\n self._parseFieldValue = function()\n {\n if (opts.parse) {\n return opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n var date = moment(opts.field.value, opts.format, opts.formatStrict);\n return (date && date.isValid()) ? date.toDate() : null;\n } else {\n return new Date(Date.parse(opts.field.value));\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n date = self._parseFieldValue();\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, 'keydown', self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n opts.defaultDate = self._parseFieldValue();\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * clear and reset the date\n */\n clear: function()\n {\n this.setDate(null);\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', opts.ariaLabel);\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n leftAligned = true;\n bottomAligned = true;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n leftAligned = false;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n bottomAligned = false;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n\n addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n\n if (!this._o.container) {\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n }\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, 'keydown', this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, 'change', this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, 'click', this._onInputClick);\n removeEvent(opts.trigger, 'focus', this._onInputFocus);\n removeEvent(opts.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}));\n","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`])\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.width;\n const height =\n sizes.height || element.clientHeight || result.height;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop);\n const marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n const isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n return boundaries;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false,\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","var __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nclass TrackedStorageImpl {\n constructor(initialValue, isEqual) {\n this._value = this._lastValue = initialValue;\n this._isEqual = isEqual;\n }\n}\n__decorate([tracked], TrackedStorageImpl.prototype, \"_value\", void 0);\nfunction tripleEq(a, b) {\n return a === b;\n}\nexport function createStorage(initialValue, isEqual = tripleEq) {\n assert('the second parameter to `createStorage` must be an equality function or undefined', typeof isEqual === 'function');\n return new TrackedStorageImpl(initialValue, isEqual);\n}\nexport function getValue(storage) {\n assert('getValue must be passed a tracked store created with `createStorage`.', storage instanceof TrackedStorageImpl);\n return storage._value;\n}\nexport function setValue(storage, value) {\n assert('setValue must be passed a tracked store created with `createStorage`.', storage instanceof TrackedStorageImpl);\n const {\n _isEqual: isEqual,\n _lastValue: lastValue\n } = storage;\n if (!isEqual(value, lastValue)) {\n storage._value = storage._lastValue = value;\n }\n}","import {\n TrackedStorage,\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedMap<K = unknown, V = unknown> implements Map<K, V> {\n private collection = createStorage(null, () => false);\n\n private storages: Map<K, TrackedStorage<null>> = new Map();\n\n private vals: Map<K, V>;\n\n private readStorageFor(key: K): void {\n const { storages } = this;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n getValue(storage);\n }\n\n private dirtyStorageFor(key: K): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor();\n constructor(entries: readonly (readonly [K, V])[] | null);\n constructor(iterable: Iterable<readonly [K, V]>);\n constructor(\n existing?:\n | readonly (readonly [K, V])[]\n | Iterable<readonly [K, V]>\n | null\n | undefined\n ) {\n // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n // constructor for the no-value constructor. This resolves that.\n this.vals = existing ? new Map(existing) : new Map();\n }\n\n // **** KEY GETTERS ****\n get(key: K): V | undefined {\n // entangle the storage for the key\n this.readStorageFor(key);\n\n return this.vals.get(key);\n }\n\n has(key: K): boolean {\n this.readStorageFor(key);\n\n return this.vals.has(key);\n }\n\n // **** ALL GETTERS ****\n entries(): IterableIterator<[K, V]> {\n getValue(this.collection);\n\n return this.vals.entries();\n }\n\n keys(): IterableIterator<K> {\n getValue(this.collection);\n\n return this.vals.keys();\n }\n\n values(): IterableIterator<V> {\n getValue(this.collection);\n\n return this.vals.values();\n }\n\n forEach(fn: (value: V, key: K, map: Map<K, V>) => void): void {\n getValue(this.collection);\n\n this.vals.forEach(fn);\n }\n\n get size(): number {\n getValue(this.collection);\n\n return this.vals.size;\n }\n\n [Symbol.iterator](): IterableIterator<[K, V]> {\n getValue(this.collection);\n\n return this.vals[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n\n // **** KEY SETTERS ****\n set(key: K, value: V): this {\n this.dirtyStorageFor(key);\n setValue(this.collection, null);\n\n this.vals.set(key, value);\n\n return this;\n }\n\n delete(key: K): boolean {\n this.dirtyStorageFor(key);\n setValue(this.collection, null);\n\n return this.vals.delete(key);\n }\n\n // **** ALL SETTERS ****\n clear(): void {\n this.storages.forEach((s) => setValue(s, null));\n setValue(this.collection, null);\n\n this.vals.clear();\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedMap.prototype, Map.prototype);\n\nexport class TrackedWeakMap<K extends object = object, V = unknown>\n implements WeakMap<K, V>\n{\n private storages: WeakMap<K, TrackedStorage<null>> = new WeakMap();\n\n private vals: WeakMap<K, V>;\n\n private readStorageFor(key: K): void {\n const { storages } = this;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n getValue(storage);\n }\n\n private dirtyStorageFor(key: K): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor();\n constructor(iterable: Iterable<readonly [K, V]>);\n constructor(entries: readonly [K, V][] | null);\n constructor(\n existing?: readonly [K, V][] | Iterable<readonly [K, V]> | null | undefined\n ) {\n // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n // constructor for the no-value constructor. This resolves that.\n this.vals = existing ? new WeakMap(existing) : new WeakMap();\n }\n\n get(key: K): V | undefined {\n this.readStorageFor(key);\n\n return this.vals.get(key);\n }\n\n has(key: K): boolean {\n this.readStorageFor(key);\n\n return this.vals.has(key);\n }\n\n set(key: K, value: V): this {\n this.dirtyStorageFor(key);\n\n this.vals.set(key, value);\n\n return this;\n }\n\n delete(key: K): boolean {\n this.dirtyStorageFor(key);\n\n return this.vals.delete(key);\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakMap.prototype, WeakMap.prototype);\n","import {\n TrackedStorage,\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedSet<T = unknown> implements Set<T> {\n private collection = createStorage(null, () => false);\n\n private storages: Map<T, TrackedStorage<null>> = new Map();\n\n private vals: Set<T>;\n\n private storageFor(key: T): TrackedStorage<null> {\n const storages = this.storages;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n return storage;\n }\n\n private dirtyStorageFor(key: T): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor();\n constructor(values: readonly T[] | null);\n constructor(iterable: Iterable<T>);\n constructor(existing?: readonly T[] | Iterable<T> | null | undefined) {\n this.vals = new Set(existing);\n }\n\n // **** KEY GETTERS ****\n has(value: T): boolean {\n getValue(this.storageFor(value));\n\n return this.vals.has(value);\n }\n\n // **** ALL GETTERS ****\n entries(): IterableIterator<[T, T]> {\n getValue(this.collection);\n\n return this.vals.entries();\n }\n\n keys(): IterableIterator<T> {\n getValue(this.collection);\n\n return this.vals.keys();\n }\n\n values(): IterableIterator<T> {\n getValue(this.collection);\n\n return this.vals.values();\n }\n\n forEach(fn: (value1: T, value2: T, set: Set<T>) => void): void {\n getValue(this.collection);\n\n this.vals.forEach(fn);\n }\n\n get size(): number {\n getValue(this.collection);\n\n return this.vals.size;\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n getValue(this.collection);\n\n return this.vals[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n\n // **** KEY SETTERS ****\n add(value: T): this {\n this.dirtyStorageFor(value);\n setValue(this.collection, null);\n\n this.vals.add(value);\n\n return this;\n }\n\n delete(value: T): boolean {\n this.dirtyStorageFor(value);\n setValue(this.collection, null);\n\n return this.vals.delete(value);\n }\n\n // **** ALL SETTERS ****\n clear(): void {\n this.storages.forEach((s) => setValue(s, null));\n setValue(this.collection, null);\n\n this.vals.clear();\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedSet.prototype, Set.prototype);\n\nexport class TrackedWeakSet<T extends object = object> implements WeakSet<T> {\n private storages: WeakMap<T, TrackedStorage<null>> = new WeakMap();\n\n private vals: WeakSet<T>;\n\n private storageFor(key: T): TrackedStorage<null> {\n const storages = this.storages;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n return storage;\n }\n\n private dirtyStorageFor(key: T): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor(values?: readonly T[] | null) {\n this.vals = new WeakSet(values);\n }\n\n has(value: T): boolean {\n getValue(this.storageFor(value));\n\n return this.vals.has(value);\n }\n\n add(value: T): this {\n // Add to vals first to get better error message\n this.vals.add(value);\n\n this.dirtyStorageFor(value);\n\n return this;\n }\n\n delete(value: T): boolean {\n this.dirtyStorageFor(value);\n\n return this.vals.delete(value);\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakSet.prototype, WeakSet.prototype);\n","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n return privateMap.get(receiver);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n return descriptor.value;\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n// Unfortunately, TypeScript's ability to do inference *or* type-checking in a\n// `Proxy`'s body is very limited, so we have to use a number of casts `as any`\n// to make the internal accesses work. The type safety of these is guaranteed at\n// the *call site* instead of within the body: you cannot do `Array.blah` in TS,\n// and it will blow up in JS in exactly the same way, so it is safe to assume\n// that properties within the getter have the correct type in TS.\n\nimport {\n TrackedStorage,\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nconst ARRAY_GETTER_METHODS = new Set<string | symbol | number>([\n Symbol.iterator,\n 'concat',\n 'entries',\n 'every',\n 'filter',\n 'find',\n 'findIndex',\n 'flat',\n 'flatMap',\n 'forEach',\n 'includes',\n 'indexOf',\n 'join',\n 'keys',\n 'lastIndexOf',\n 'map',\n 'reduce',\n 'reduceRight',\n 'slice',\n 'some',\n 'values',\n]);\n\n// For these methods, `Array` itself immediately gets the `.length` to return\n// after invoking them.\nconst ARRAY_WRITE_THEN_READ_METHODS = new Set<string | symbol>([\n 'fill',\n 'push',\n 'unshift',\n]);\n\nfunction convertToInt(prop: number | string | symbol): number | null {\n if (typeof prop === 'symbol') return null;\n\n const num = Number(prop);\n\n if (isNaN(num)) return null;\n\n return num % 1 === 0 ? num : null;\n}\n\nclass TrackedArray<T = unknown> {\n /**\n * Creates an array from an iterable object.\n * @param iterable An iterable object to convert to an array.\n */\n static from<T>(iterable: Iterable<T> | ArrayLike<T>): TrackedArray<T>;\n\n /**\n * Creates an array from an iterable object.\n * @param iterable An iterable object to convert to an array.\n * @param mapfn A mapping function to call on every element of the array.\n * @param thisArg Value of 'this' used to invoke the mapfn.\n */\n static from<T, U>(\n iterable: Iterable<T> | ArrayLike<T>,\n mapfn: (v: T, k: number) => U,\n thisArg?: unknown\n ): TrackedArray<U>;\n\n static from<T, U>(\n iterable: Iterable<T> | ArrayLike<T>,\n mapfn?: (v: T, k: number) => U,\n thisArg?: unknown\n ): TrackedArray<T> | TrackedArray<U> {\n return mapfn\n ? new TrackedArray(Array.from(iterable, mapfn, thisArg))\n : new TrackedArray(Array.from(iterable));\n }\n\n static of<T>(...arr: T[]): TrackedArray<T> {\n return new TrackedArray(arr);\n }\n\n constructor(arr: T[] = []) {\n let clone = arr.slice();\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let self = this;\n\n let boundFns = new Map<string | symbol, (...args: any[]) => any>();\n\n /**\n Flag to track whether we have *just* intercepted a call to `.push()` or\n `.unshift()`, since in those cases (and only those cases!) the `Array`\n itself checks `.length` to return from the function call.\n */\n let nativelyAccessingLengthFromPushOrUnshift = false;\n\n return new Proxy(clone, {\n get(target, prop /*, _receiver */) {\n let index = convertToInt(prop);\n\n if (index !== null) {\n self.#readStorageFor(index);\n getValue(self.#collection);\n\n return target[index];\n }\n\n if (prop === 'length') {\n // If we are reading `.length`, it may be a normal user-triggered\n // read, or it may be a read triggered by Array itself. In the latter\n // case, it is because we have just done `.push()` or `.unshift()`; in\n // that case it is safe not to mark this as a *read* operation, since\n // calling `.push()` or `.unshift()` cannot otherwise be part of a\n // \"read\" operation safely, and if done during an *existing* read\n // (e.g. if the user has already checked `.length` *prior* to this),\n // that will still trigger the mutation-after-consumption assertion.\n if (nativelyAccessingLengthFromPushOrUnshift) {\n nativelyAccessingLengthFromPushOrUnshift = false;\n } else {\n getValue(self.#collection);\n }\n\n return target[prop];\n }\n\n // Here, track that we are doing a `.push()` or `.unshift()` by setting\n // the flag to `true` so that when the `.length` is read by `Array` (see\n // immediately above), it knows not to dirty the collection.\n if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) {\n nativelyAccessingLengthFromPushOrUnshift = true;\n }\n\n if (ARRAY_GETTER_METHODS.has(prop)) {\n let fn = boundFns.get(prop);\n\n if (fn === undefined) {\n fn = (...args) => {\n getValue(self.#collection);\n return (target as any)[prop](...args);\n };\n\n boundFns.set(prop, fn);\n }\n\n return fn;\n }\n\n return (target as any)[prop];\n },\n\n set(target, prop, value /*, _receiver */) {\n (target as any)[prop] = value;\n\n let index = convertToInt(prop);\n\n if (index !== null) {\n self.#dirtyStorageFor(index);\n setValue(self.#collection, null);\n } else if (prop === 'length') {\n setValue(self.#collection, null);\n }\n\n return true;\n },\n\n getPrototypeOf() {\n return TrackedArray.prototype;\n },\n }) as TrackedArray<T>;\n }\n\n #collection = createStorage(null, () => false);\n\n #storages = new Map<number, TrackedStorage<null>>();\n\n #readStorageFor(index: number) {\n let storage = this.#storages.get(index);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n this.#storages.set(index, storage);\n }\n\n getValue(storage);\n }\n\n #dirtyStorageFor(index: number): void {\n const storage = this.#storages.get(index);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n}\n\n// This rule is correct in the general case, but it doesn't understand\n// declaration merging, which is how we're using the interface here. This says\n// `TrackedArray` acts just like `Array<T>`, but also has the properties\n// declared via the `class` declaration above -- but without the cost of a\n// subclass, which is much slower that the proxied array behavior. That is: a\n// `TrackedArray` *is* an `Array`, just with a proxy in front of accessors and\n// setters, rather than a subclass of an `Array` which would be de-optimized by\n// the browsers.\n//\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface TrackedArray<T = unknown> extends Array<T> {}\n\nexport default TrackedArray;\n\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedArray.prototype, Array.prototype);\n","var _globalThis;\nif (typeof globalThis === 'object') {\n\t_globalThis = globalThis;\n} else {\n\ttry {\n\t\t_globalThis = require('es5-ext/global');\n\t} catch (error) {\n\t} finally {\n\t\tif (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }\n\t\tif (!_globalThis) { throw new Error('Could not determine global this'); }\n\t}\n}\n\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nvar websocket_version = require('./version');\n\n\n/**\n * Expose a W3C WebSocket class with just one or two arguments.\n */\nfunction W3CWebSocket(uri, protocols) {\n\tvar native_instance;\n\n\tif (protocols) {\n\t\tnative_instance = new NativeWebSocket(uri, protocols);\n\t}\n\telse {\n\t\tnative_instance = new NativeWebSocket(uri);\n\t}\n\n\t/**\n\t * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket\n\t * class). Since it is an Object it will be returned as it is when creating an\n\t * instance of W3CWebSocket via 'new W3CWebSocket()'.\n\t *\n\t * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2\n\t */\n\treturn native_instance;\n}\nif (NativeWebSocket) {\n\t['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {\n\t\tObject.defineProperty(W3CWebSocket, prop, {\n\t\t\tget: function() { return NativeWebSocket[prop]; }\n\t\t});\n\t});\n}\n\n/**\n * Module exports.\n */\nmodule.exports = {\n 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,\n 'version' : websocket_version\n};\n","module.exports = require('../package.json').version;\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : String(i);\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export default function _OverloadYield(t, e) {\n this.v = t, this.k = e;\n}","export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}","import OverloadYield from \"./OverloadYield.js\";\nexport default function _awaitAsyncGenerator(e) {\n return new OverloadYield(e, 0);\n}","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : String(i);\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","export default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import OverloadYield from \"./OverloadYield.js\";\nexport default function AsyncGenerator(e) {\n var r, t;\n function resume(r, t) {\n try {\n var n = e[r](t),\n o = n.value,\n u = o instanceof OverloadYield;\n Promise.resolve(u ? o.v : o).then(function (t) {\n if (u) {\n var i = \"return\" === r ? \"return\" : \"next\";\n if (!o.k || t.done) return resume(i, t);\n t = e[i](t).value;\n }\n settle(n.done ? \"return\" : \"normal\", t);\n }, function (e) {\n resume(\"throw\", e);\n });\n } catch (e) {\n settle(\"throw\", e);\n }\n }\n function settle(e, n) {\n switch (e) {\n case \"return\":\n r.resolve({\n value: n,\n done: !0\n });\n break;\n case \"throw\":\n r.reject(n);\n break;\n default:\n r.resolve({\n value: n,\n done: !1\n });\n }\n (r = r.next) ? resume(r.key, r.arg) : t = null;\n }\n this._invoke = function (e, n) {\n return new Promise(function (o, u) {\n var i = {\n key: e,\n arg: n,\n resolve: o,\n reject: u,\n next: null\n };\n t ? t = t.next = i : (r = t = i, resume(e, n));\n });\n }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n return this;\n}, AsyncGenerator.prototype.next = function (e) {\n return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n return this._invoke(\"return\", e);\n};","import AsyncGenerator from \"./AsyncGenerator.js\";\nexport default function _wrapAsyncGenerator(fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n}","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","import OverloadYield from \"./OverloadYield.js\";\nexport default function _asyncGeneratorDelegate(t) {\n var e = {},\n n = !1;\n function pump(e, r) {\n return n = !0, r = new Promise(function (n) {\n n(t[e](r));\n }), {\n done: !1,\n value: new OverloadYield(r, 1)\n };\n }\n return e[\"undefined\" != typeof Symbol && Symbol.iterator || \"@@iterator\"] = function () {\n return this;\n }, e.next = function (t) {\n return n ? (n = !1, t) : pump(\"next\", t);\n }, \"function\" == typeof t[\"throw\"] && (e[\"throw\"] = function (t) {\n if (n) throw n = !1, t;\n return pump(\"throw\", t);\n }), \"function\" == typeof t[\"return\"] && (e[\"return\"] = function (t) {\n return n ? (n = !1, t) : pump(\"return\", t);\n }), e;\n}","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype; \n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n isStreamResponse && onFinish();\n }, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.5\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","/**\n * Use instead of `new Date(Date.UTC(...))` to support years below 100 which doesn't work\n * otherwise due to the nature of the\n * [`Date` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#interpretation_of_two-digit_years.\n *\n * For `Date.UTC(...)`, use `newDateUTC(...).getTime()`.\n */\nexport default function newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n var utcDate = new Date(0)\n utcDate.setUTCFullYear(fullYear, month, day)\n utcDate.setUTCHours(hour, minute, second, millisecond)\n return utcDate\n}\n","/**\r\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\r\n * `date` as it will be rendered in the `timeZone`.\r\n */\r\nexport default function tzTokenizeDate(date, timeZone) {\r\n var dtf = getDateTimeFormat(timeZone)\r\n return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date)\r\n}\r\n\r\nvar typeToPos = {\r\n year: 0,\r\n month: 1,\r\n day: 2,\r\n hour: 3,\r\n minute: 4,\r\n second: 5,\r\n}\r\n\r\nfunction partsOffset(dtf, date) {\r\n try {\r\n var formatted = dtf.formatToParts(date)\r\n var filled = []\r\n for (var i = 0; i < formatted.length; i++) {\r\n var pos = typeToPos[formatted[i].type]\r\n\r\n if (pos >= 0) {\r\n filled[pos] = parseInt(formatted[i].value, 10)\r\n }\r\n }\r\n return filled\r\n } catch (error) {\r\n if (error instanceof RangeError) {\r\n return [NaN]\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nfunction hackyOffset(dtf, date) {\r\n var formatted = dtf.format(date)\r\n var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted)\r\n // var [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\r\n // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\r\n return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]]\r\n}\r\n\r\n// Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\r\n// to get deterministic local date/time output according to the `en-US` locale which\r\n// can be used to extract local time parts as necessary.\r\nvar dtfCache = {}\r\nfunction getDateTimeFormat(timeZone) {\r\n if (!dtfCache[timeZone]) {\r\n // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\r\n var testDateFormatted = new Intl.DateTimeFormat('en-US', {\r\n hourCycle: 'h23',\r\n timeZone: 'America/New_York',\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n }).format(new Date('2014-06-25T04:00:00.123Z'))\r\n var hourCycleSupported =\r\n testDateFormatted === '06/25/2014, 00:00:00' ||\r\n testDateFormatted === '‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00'\r\n\r\n dtfCache[timeZone] = hourCycleSupported\r\n ? new Intl.DateTimeFormat('en-US', {\r\n hourCycle: 'h23',\r\n timeZone: timeZone,\r\n year: 'numeric',\r\n month: 'numeric',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n })\r\n : new Intl.DateTimeFormat('en-US', {\r\n hour12: false,\r\n timeZone: timeZone,\r\n year: 'numeric',\r\n month: 'numeric',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n })\r\n }\r\n return dtfCache[timeZone]\r\n}\r\n","import tzTokenizeDate from '../tzTokenizeDate/index.js'\r\nimport newDateUTC from '../newDateUTC/index.js'\r\n\r\nvar MILLISECONDS_IN_HOUR = 3600000\r\nvar MILLISECONDS_IN_MINUTE = 60000\r\n\r\nvar patterns = {\r\n timezone: /([Z+-].*)$/,\r\n timezoneZ: /^(Z)$/,\r\n timezoneHH: /^([+-]\\d{2})$/,\r\n timezoneHHMM: /^([+-])(\\d{2}):?(\\d{2})$/,\r\n}\r\n\r\n// Parse various time zone offset formats to an offset in milliseconds\r\nexport default function tzParseTimezone(timezoneString, date, isUtcDate) {\r\n var token\r\n var absoluteOffset\r\n\r\n // Empty string\r\n if (!timezoneString) {\r\n return 0\r\n }\r\n\r\n // Z\r\n token = patterns.timezoneZ.exec(timezoneString)\r\n if (token) {\r\n return 0\r\n }\r\n\r\n var hours\r\n\r\n // ±hh\r\n token = patterns.timezoneHH.exec(timezoneString)\r\n if (token) {\r\n hours = parseInt(token[1], 10)\r\n\r\n if (!validateTimezone(hours)) {\r\n return NaN\r\n }\r\n\r\n return -(hours * MILLISECONDS_IN_HOUR)\r\n }\r\n\r\n // ±hh:mm or ±hhmm\r\n token = patterns.timezoneHHMM.exec(timezoneString)\r\n if (token) {\r\n hours = parseInt(token[2], 10)\r\n var minutes = parseInt(token[3], 10)\r\n\r\n if (!validateTimezone(hours, minutes)) {\r\n return NaN\r\n }\r\n\r\n absoluteOffset = Math.abs(hours) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\r\n return token[1] === '+' ? -absoluteOffset : absoluteOffset\r\n }\r\n\r\n // IANA time zone\r\n if (isValidTimezoneIANAString(timezoneString)) {\r\n date = new Date(date || Date.now())\r\n var utcDate = isUtcDate ? date : toUtcDate(date)\r\n\r\n var offset = calcOffset(utcDate, timezoneString)\r\n\r\n var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString)\r\n\r\n return -fixedOffset\r\n }\r\n\r\n return NaN\r\n}\r\n\r\nfunction toUtcDate(date) {\r\n return newDateUTC(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate(),\r\n date.getHours(),\r\n date.getMinutes(),\r\n date.getSeconds(),\r\n date.getMilliseconds()\r\n )\r\n}\r\n\r\nfunction calcOffset(date, timezoneString) {\r\n var tokens = tzTokenizeDate(date, timezoneString)\r\n\r\n // ms dropped because it's not provided by tzTokenizeDate\r\n var asUTC = newDateUTC(\r\n tokens[0],\r\n tokens[1] - 1,\r\n tokens[2],\r\n tokens[3] % 24,\r\n tokens[4],\r\n tokens[5],\r\n 0\r\n ).getTime()\r\n\r\n var asTS = date.getTime()\r\n var over = asTS % 1000\r\n asTS -= over >= 0 ? over : 1000 + over\r\n return asUTC - asTS\r\n}\r\n\r\nfunction fixOffset(date, offset, timezoneString) {\r\n var localTS = date.getTime()\r\n\r\n // Our UTC time is just a guess because our offset is just a guess\r\n var utcGuess = localTS - offset\r\n\r\n // Test whether the zone matches the offset for this ts\r\n var o2 = calcOffset(new Date(utcGuess), timezoneString)\r\n\r\n // If so, offset didn't change, and we're done\r\n if (offset === o2) {\r\n return offset\r\n }\r\n\r\n // If not, change the ts by the difference in the offset\r\n utcGuess -= o2 - offset\r\n\r\n // If that gives us the local time we want, we're done\r\n var o3 = calcOffset(new Date(utcGuess), timezoneString)\r\n if (o2 === o3) {\r\n return o2\r\n }\r\n\r\n // If it's different, we're in a hole time. The offset has changed, but we don't adjust the time\r\n return Math.max(o2, o3)\r\n}\r\n\r\nfunction validateTimezone(hours, minutes) {\r\n return -23 <= hours && hours <= 23 && (minutes == null || (0 <= minutes && minutes <= 59))\r\n}\r\n\r\nvar validIANATimezoneCache = {}\r\nfunction isValidTimezoneIANAString(timeZoneString) {\r\n if (validIANATimezoneCache[timeZoneString]) return true\r\n try {\r\n new Intl.DateTimeFormat(undefined, { timeZone: timeZoneString })\r\n validIANATimezoneCache[timeZoneString] = true\r\n return true\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n","/** Regex to identify the presence of a time zone specifier in a date string */\nvar tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/\n\nexport default tzPattern\n","/**\n * Returns the formatted time zone name of the provided `timeZone` or the current\n * system time zone if omitted, accounting for DST according to the UTC value of\n * the date.\n */\nexport default function tzIntlTimeZoneName(length, date, options) {\n var dtf = getDTF(length, options.timeZone, options.locale)\n return dtf.formatToParts ? partsTimeZone(dtf, date) : hackyTimeZone(dtf, date)\n}\n\nfunction partsTimeZone(dtf, date) {\n var formatted = dtf.formatToParts(date)\n\n for (var i = formatted.length - 1; i >= 0; --i) {\n if (formatted[i].type === 'timeZoneName') {\n return formatted[i].value\n }\n }\n}\n\nfunction hackyTimeZone(dtf, date) {\n var formatted = dtf.format(date).replace(/\\u200E/g, '')\n var tzNameMatch = / [\\w-+ ]+$/.exec(formatted)\n return tzNameMatch ? tzNameMatch[0].substr(1) : ''\n}\n\n// If a locale has been provided `en-US` is used as a fallback in case it is an\n// invalid locale, otherwise the locale is left undefined to use the system locale.\nfunction getDTF(length, timeZone, locale) {\n if (locale && !locale.code) {\n throw new Error(\n \"date-fns-tz error: Please set a language code on the locale object imported from date-fns, e.g. `locale.code = 'en-US'`\"\n )\n }\n return new Intl.DateTimeFormat(locale ? [locale.code, 'en-US'] : undefined, {\n timeZone: timeZone,\n timeZoneName: length,\n })\n}\n","import tzIntlTimeZoneName from '../../_lib/tzIntlTimeZoneName/index.js'\nimport tzParseTimezone from '../../_lib/tzParseTimezone/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60 * 1000\n\nvar formatters = {\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, localize, options) {\n var timezoneOffset = getTimeZoneOffset(options.timeZone, date)\n\n if (timezoneOffset === 0) {\n return 'Z'\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case 'XXXX':\n case 'XX': // Hours and minutes without `:` delimeter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimeter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, localize, options) {\n var timezoneOffset = getTimeZoneOffset(options.timeZone, date)\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case 'xxxx':\n case 'xx': // Hours and minutes without `:` delimeter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimeter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, localize, options) {\n var timezoneOffset = getTimeZoneOffset(options.timeZone, date)\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n // Long\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, localize, options) {\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return tzIntlTimeZoneName('short', date, options)\n // Long\n case 'zzzz':\n default:\n return tzIntlTimeZoneName('long', date, options)\n }\n },\n}\n\nfunction getTimeZoneOffset(timeZone, originalDate) {\n var timeZoneOffset = timeZone\n ? tzParseTimezone(timeZone, originalDate, true) / MILLISECONDS_IN_MINUTE\n : originalDate.getTimezoneOffset()\n if (Number.isNaN(timeZoneOffset)) {\n throw new RangeError('Invalid time zone specified: ' + timeZone)\n }\n return timeZoneOffset\n}\n\nfunction addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : ''\n var output = Math.abs(number).toString()\n while (output.length < targetLength) {\n output = '0' + output\n }\n return sign + output\n}\n\nfunction formatTimezone(offset, dirtyDelimeter) {\n var delimeter = dirtyDelimeter || ''\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n var minutes = addLeadingZeros(Math.floor(absOffset % 60), 2)\n return sign + hours + delimeter + minutes\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimeter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+'\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n }\n return formatTimezone(offset, dirtyDelimeter)\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = Math.floor(absOffset / 60)\n var minutes = absOffset % 60\n if (minutes === 0) {\n return sign + String(hours)\n }\n var delimiter = dirtyDelimiter || ''\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)\n}\n\nexport default formatters\n","import dateFnsFormat from 'date-fns/format/index.js'\nimport formatters from './formatters/index.js'\nimport toDate from '../toDate/index.js'\n\nvar tzFormattingTokensRegExp = /([xXOz]+)|''|'(''|[^'])+('|$)/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 8 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 8 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Su | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Su | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aaa | AM, PM | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bbb | AM, PM, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 0001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | PDT, EST, CEST | 6 |\n * | | zzzz | Pacific Daylight Time | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 05/29/1453 | 7 |\n * | | PP | May 29, 1453 | 7 |\n * | | PPP | May 29th, 1453 | 7 |\n * | | PPPP | Sunday, May 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 05/29/1453, 12:00 AM | 7 |\n * | | PPpp | May 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | May 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Sunday, May 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are created using the Intl browser API. The output is determined by the\n * preferred standard of the current locale (en-US by default) which may not always give the expected result.\n * For this reason it is recommended to supply a `locale` in the format options when formatting a time zone name.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole\n * library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard\n * #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). See [this\n * post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link\n * https://date-fns.org/docs/toDate}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See\n * [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens\n * (`yy`, `yyyy`). See: https://git.io/fxCyr\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @param {Date|Number} [options.originalDate] - can be used to pass the original unmodified date to `format` to\n * improve correctness of the replaced timezone token close to the DST threshold.\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see:\n * https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n var formatStr = String(dirtyFormatStr)\n var options = dirtyOptions || {}\n\n var matches = formatStr.match(tzFormattingTokensRegExp)\n if (matches) {\n var date = toDate(options.originalDate || dirtyDate, options)\n // Work through each match and replace the tz token in the format string with the quoted\n // formatted time zone so the remaining tokens can be filled in by date-fns#format.\n formatStr = matches.reduce(function (result, token) {\n if (token[0] === \"'\") {\n return result // This is a quoted portion, matched only to ensure we don't match inside it\n }\n var pos = result.indexOf(token)\n var precededByQuotedSection = result[pos - 1] === \"'\"\n var replaced = result.replace(\n token,\n \"'\" + formatters[token[0]](date, token, null, options) + \"'\"\n )\n // If the replacement results in two adjoining quoted strings, the back to back quotes\n // are removed, so it doesn't look like an escaped quote.\n return precededByQuotedSection\n ? replaced.substring(0, pos - 1) + replaced.substring(pos + 1)\n : replaced\n }, formatStr)\n }\n\n return dateFnsFormat(dirtyDate, formatStr, options)\n}\n","import toInteger from 'date-fns/_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from 'date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport tzPattern from '../_lib/tzPattern/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n datePattern: /^([0-9W+-]+)(.*)/,\n plainTime: /:/,\n\n // year tokens\n YY: /^(\\d{2})$/,\n YYY: [\n /^([+-]\\d{2})$/, // 0 additional digits\n /^([+-]\\d{3})$/, // 1 additional digit\n /^([+-]\\d{4})$/, // 2 additional digits\n ],\n YYYY: /^(\\d{4})/,\n YYYYY: [\n /^([+-]\\d{4})/, // 0 additional digits\n /^([+-]\\d{5})/, // 1 additional digit\n /^([+-]\\d{6})/, // 2 additional digits\n ],\n\n // date tokens\n MM: /^-(\\d{2})$/,\n DDD: /^-?(\\d{3})$/,\n MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n Www: /^-?W(\\d{2})$/,\n WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n\n HH: /^(\\d{2}([.,]\\d*)?)$/,\n HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n\n // time zone tokens (to identify the presence of a tz)\n timeZone: tzPattern,\n}\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function toDate(argument, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n }\n\n if (argument === null) {\n return new Date(NaN)\n }\n\n var options = dirtyOptions || {}\n\n var additionalDigits =\n options.additionalDigits == null\n ? DEFAULT_ADDITIONAL_DIGITS\n : toInteger(options.additionalDigits)\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2')\n }\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]')\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (\n typeof argument === 'number' ||\n Object.prototype.toString.call(argument) === '[object Number]'\n ) {\n return new Date(argument)\n } else if (\n !(\n typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]'\n )\n ) {\n return new Date(NaN)\n }\n\n var dateStrings = splitDateString(argument)\n\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var year = parseYearResult.year\n var restDateString = parseYearResult.restDateString\n\n var date = parseDate(restDateString, year)\n\n if (isNaN(date)) {\n return new Date(NaN)\n }\n\n if (date) {\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n\n if (isNaN(time)) {\n return new Date(NaN)\n }\n }\n\n if (dateStrings.timeZone || options.timeZone) {\n offset = tzParseTimezone(dateStrings.timeZone || options.timeZone, new Date(timestamp + time))\n if (isNaN(offset)) {\n return new Date(NaN)\n }\n } else {\n // get offset accurate to hour in time zones that change offset\n offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time))\n offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time + offset))\n }\n\n return new Date(timestamp + time + offset)\n } else {\n return new Date(NaN)\n }\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {}\n var parts = patterns.dateTimePattern.exec(dateString)\n var timeString\n\n if (!parts) {\n parts = patterns.datePattern.exec(dateString)\n if (parts) {\n dateStrings.date = parts[1]\n timeString = parts[2]\n } else {\n dateStrings.date = null\n timeString = dateString\n }\n } else {\n dateStrings.date = parts[1]\n timeString = parts[3]\n }\n\n if (timeString) {\n var token = patterns.timeZone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timeZone = token[1].trim()\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var patternYYY = patterns.YYY[additionalDigits]\n var patternYYYYY = patterns.YYYYY[additionalDigits]\n\n var token\n\n // YYYY or ±YYYYY\n token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString)\n if (token) {\n var yearString = token[1]\n return {\n year: parseInt(yearString, 10),\n restDateString: dateString.slice(yearString.length),\n }\n }\n\n // YY or ±YYY\n token = patterns.YY.exec(dateString) || patternYYY.exec(dateString)\n if (token) {\n var centuryString = token[1]\n return {\n year: parseInt(centuryString, 10) * 100,\n restDateString: dateString.slice(centuryString.length),\n }\n }\n\n // Invalid ISO-formatted year\n return {\n year: null,\n }\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) {\n return null\n }\n\n var token\n var date\n var month\n var week\n\n // YYYY\n if (dateString.length === 0) {\n date = new Date(0)\n date.setUTCFullYear(year)\n return date\n }\n\n // YYYY-MM\n token = patterns.MM.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n\n if (!validateDate(year, month)) {\n return new Date(NaN)\n }\n\n date.setUTCFullYear(year, month)\n return date\n }\n\n // YYYY-DDD or YYYYDDD\n token = patterns.DDD.exec(dateString)\n if (token) {\n date = new Date(0)\n var dayOfYear = parseInt(token[1], 10)\n\n if (!validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN)\n }\n\n date.setUTCFullYear(year, 0, dayOfYear)\n return date\n }\n\n // yyyy-MM-dd or YYYYMMDD\n token = patterns.MMDD.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n var day = parseInt(token[2], 10)\n\n if (!validateDate(year, month, day)) {\n return new Date(NaN)\n }\n\n date.setUTCFullYear(year, month, day)\n return date\n }\n\n // YYYY-Www or YYYYWww\n token = patterns.Www.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n\n if (!validateWeekDate(year, week)) {\n return new Date(NaN)\n }\n\n return dayOfISOWeekYear(year, week)\n }\n\n // YYYY-Www-D or YYYYWwwD\n token = patterns.WwwD.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n var dayOfWeek = parseInt(token[2], 10) - 1\n\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN)\n }\n\n return dayOfISOWeekYear(year, week, dayOfWeek)\n }\n\n // Invalid ISO-formatted date\n return null\n}\n\nfunction parseTime(timeString) {\n var token\n var hours\n var minutes\n\n // hh\n token = patterns.HH.exec(timeString)\n if (token) {\n hours = parseFloat(token[1].replace(',', '.'))\n\n if (!validateTime(hours)) {\n return NaN\n }\n\n return (hours % 24) * MILLISECONDS_IN_HOUR\n }\n\n // hh:mm or hhmm\n token = patterns.HHMM.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseFloat(token[2].replace(',', '.'))\n\n if (!validateTime(hours, minutes)) {\n return NaN\n }\n\n return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n }\n\n // hh:mm:ss or hhmmss\n token = patterns.HHMMSS.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseInt(token[2], 10)\n var seconds = parseFloat(token[3].replace(',', '.'))\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN\n }\n\n return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000\n }\n\n // Invalid ISO-formatted time\n return null\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n week = week || 0\n day = day || 0\n var date = new Date(0)\n date.setUTCFullYear(isoWeekYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\n// Validation functions\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\nfunction validateDate(year, month, date) {\n if (month < 0 || month > 11) {\n return false\n }\n\n if (date != null) {\n if (date < 1) {\n return false\n }\n\n var isLeapYear = isLeapYearIndex(year)\n if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n return false\n }\n if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n return false\n }\n }\n\n return true\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n if (dayOfYear < 1) {\n return false\n }\n\n var isLeapYear = isLeapYearIndex(year)\n if (isLeapYear && dayOfYear > 366) {\n return false\n }\n if (!isLeapYear && dayOfYear > 365) {\n return false\n }\n\n return true\n}\n\nfunction validateWeekDate(year, week, day) {\n if (week < 0 || week > 52) {\n return false\n }\n\n if (day != null && (day < 0 || day > 6)) {\n return false\n }\n\n return true\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours != null && (hours < 0 || hours >= 25)) {\n return false\n }\n\n if (minutes != null && (minutes < 0 || minutes >= 60)) {\n return false\n }\n\n if (seconds != null && (seconds < 0 || seconds >= 60)) {\n return false\n }\n\n return true\n}\n","import tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name utcToZonedTime\n * @category Time Zone Helpers\n * @summary Get a date/time representing local time in a given time zone from the UTC date\n *\n * @description\n * Returns a date instance with values representing the local time in the time zone\n * specified of the UTC time from the date provided. In other words, when the new date\n * is formatted it will show the equivalent hours in the target time zone regardless\n * of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with the relevant UTC time\n * @param {String} timeZone - the time zone to get local time for, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am UTC is 6am in New York (-04:00)\n * const result = utcToZonedTime('2014-06-25T10:00:00.000Z', 'America/New_York')\n * //=> Jun 25 2014 06:00:00\n */\nexport default function utcToZonedTime(dirtyDate, timeZone, options) {\n var date = toDate(dirtyDate, options)\n\n var offsetMilliseconds = tzParseTimezone(timeZone, date, true)\n\n var d = new Date(date.getTime() - offsetMilliseconds)\n\n var resultDate = new Date(0)\n\n resultDate.setFullYear(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())\n\n resultDate.setHours(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds())\n\n return resultDate\n}\n","import cloneObject from 'date-fns/_lib/cloneObject/index.js'\nimport toDate from '../toDate/index.js'\nimport tzPattern from '../_lib/tzPattern/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport newDateUTC from '../_lib/newDateUTC/index.js'\n\n/**\n * @name zonedTimeToUtc\n * @category Time Zone Helpers\n * @summary Get the UTC date/time from a date representing local time in a given time zone\n *\n * @description\n * Returns a date instance with the UTC time of the provided date of which the values\n * represented the local time in the time zone specified. In other words, if the input\n * date represented local time in time time zone, the timestamp of the output date will\n * give the equivalent UTC of that local time regardless of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with values representing the local time\n * @param {String} timeZone - the time zone of this local time, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am in Los Angeles is 5pm UTC\n * const result = zonedTimeToUtc(new Date(2014, 5, 25, 10, 0, 0), 'America/Los_Angeles')\n * //=> 2014-06-25T17:00:00.000Z\n */\nexport default function zonedTimeToUtc(date, timeZone, options) {\n if (typeof date === 'string' && !date.match(tzPattern)) {\n var extendedOptions = cloneObject(options)\n extendedOptions.timeZone = timeZone\n return toDate(date, extendedOptions)\n }\n\n var d = toDate(date, options)\n\n var utc = newDateUTC(\n d.getFullYear(),\n d.getMonth(),\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds(),\n d.getMilliseconds()\n ).getTime()\n\n var offsetMilliseconds = tzParseTimezone(timeZone, new Date(utc))\n\n return new Date(utc + offsetMilliseconds)\n}\n","export interface Descriptor {\n configurable?: boolean;\n enumerable?: boolean;\n writable?: boolean;\n get?(): any;\n set?(v: any): void;\n initializer?: null | (() => any);\n value?: any;\n}\nexport type LegacyDecorator = (\n target: object,\n prop: unknown,\n desc: Descriptor\n) => Descriptor | null | undefined | void;\n\nexport type LegacyClassDecorator = (target: new (...args: any) => any) =>\n | {\n new (...args: any): any;\n }\n | null\n | undefined\n | void;\n\nconst deferred: WeakMap<\n object,\n Map<string | number | symbol, Descriptor>\n> = new WeakMap();\n\nfunction deferDecorator(\n proto: object,\n prop: string | number | symbol,\n desc: Descriptor\n): void {\n let map = deferred.get(proto);\n if (!map) {\n map = new Map();\n deferred.set(proto, map);\n }\n map.set(prop, desc);\n}\n\nfunction findDeferredDecorator(\n target: object,\n prop: string | number | symbol\n): Descriptor | undefined {\n let cursor: object = (target as any).prototype;\n while (cursor) {\n let desc = deferred.get(cursor)?.get(prop);\n if (desc) {\n return desc;\n }\n cursor = (cursor as any).prototype;\n }\n}\n\nfunction decorateFieldV1(\n target: { prototype: object },\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n initializer?: () => any\n): void {\n return decorateFieldV2(target.prototype, prop, decorators, initializer);\n}\n\nfunction decorateFieldV2(\n prototype: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n initializer?: () => any\n): void {\n let desc: Descriptor = {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null,\n };\n if (initializer) {\n desc.initializer = initializer;\n }\n for (let decorator of decorators) {\n desc = decorator(prototype, prop, desc) || desc;\n }\n if (desc.initializer === undefined) {\n Object.defineProperty(prototype, prop, desc);\n } else {\n deferDecorator(prototype, prop, desc);\n }\n}\n\nfunction decorateMethodV1(\n { prototype }: { prototype: object },\n prop: string | number | symbol,\n decorators: LegacyDecorator[]\n): void {\n return decorateMethodV2(prototype, prop, decorators);\n}\n\nfunction decorateMethodV2(\n prototype: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[]\n): void {\n const origDesc = Object.getOwnPropertyDescriptor(prototype, prop);\n let desc: Descriptor = { ...origDesc };\n for (let decorator of decorators) {\n desc = decorator(prototype, prop, desc) || desc;\n }\n if (desc.initializer !== undefined) {\n desc.value = desc.initializer ? desc.initializer.call(prototype) : void 0;\n desc.initializer = undefined;\n }\n Object.defineProperty(prototype, prop, desc);\n}\n\nfunction initializeDeferredDecorator(\n target: object,\n prop: string | number | symbol\n): void {\n let desc = findDeferredDecorator(target.constructor, prop);\n if (desc) {\n Object.defineProperty(target, prop, {\n enumerable: desc.enumerable,\n configurable: desc.configurable,\n writable: desc.writable,\n value: desc.initializer ? desc.initializer.call(target) : undefined,\n });\n }\n}\n\nfunction decorateClass(\n target: new (...args: any) => any,\n decorators: LegacyClassDecorator[]\n): new (...args: any) => any {\n return decorators.reduce(\n (accum, decorator) => decorator(accum) || accum,\n target\n );\n}\n\nfunction decoratePOJO(\n pojo: object,\n decorated: [\"field\" | \"method\", string | number | symbol, LegacyDecorator[]][]\n) {\n for (let [type, prop, decorators] of decorated) {\n if (type === \"field\") {\n decoratePojoField(pojo, prop, decorators);\n } else {\n decorateMethodV2(pojo, prop, decorators);\n }\n }\n return pojo;\n}\nfunction decoratePojoField(\n pojo: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[]\n) {\n let desc: Descriptor = {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: () => Object.getOwnPropertyDescriptor(pojo, prop)?.value,\n };\n for (let decorator of decorators) {\n desc = decorator(pojo, prop, desc) || desc;\n }\n if (desc.initializer) {\n desc.value = desc.initializer.call(pojo);\n delete desc.initializer;\n }\n Object.defineProperty(pojo, prop, desc);\n}\n\nexport {\n decorateFieldV1 as f,\n decorateFieldV2 as g,\n decorateMethodV1 as m,\n decorateMethodV2 as n,\n initializeDeferredDecorator as i,\n decorateClass as c,\n decoratePOJO as p,\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n"],"names":["createTemplateFactory","scope","pageView_","promiseHashTracked_","appTroubleConditionsSystemOk_","appTroubleConditionsList_","tc_","buttonSimple_","on","resolveModel_","serviceAppointmentsRequestList_","t_","pageViewEdit_","hash","fn","serviceAppointmentsHeader_","svgSymbol_","buttonIcon_","navigateToRouteName_","await_","t_0","guidFor_","Textarea","not_","toBoolean_","simpleBinaryButtonList_","toString_","multilineTextInput_","tc_0","formatDateTz_","appTroubleConditionsListItemTools_","appTroubleConditionsListContactSupport_","buttonAsync_","isMobileApp_","uiActionableCard_","insetGroup_","expandButton_","PersonalSafetyNavNotes","_class","Component","constructor","arguments","_initializerDefineProperty","_descriptor","_descriptor2","isExpandable","_this$args$notes$leng","_this$args$notes","this","args","notes","length","renderedNotes","showMore","_this$args$notes$slic","_this$args$notes2","renderedNotesLength","slice","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","tracked","_this$args$notes$slic2","_this$args$notes3","action","Object","getOwnPropertyDescriptor","setComponentTemplate","TEMPLATE","or_","appAppNavPersonalSafetyNavNotes_","PersonalSafetyNav","_dec","alias","_descriptor3","_descriptor4","recentNotes","_this$personalSafety$","personalSafety","filter","note","noteType","NoteType","NONE","importantNotes","_this$personalSafety$2","IMPORTANT","alarmPsapContacted","_this$alarm","alarm","isPSAPContacted","value","alarmFalseAlarm","_this$alarm2","isCanceled","_this$personalSafety$3","customerProfile","phoneNumber","canceledBy","saveAlarm","save","openModal","title","promiseFn","cancelOnClickFunction","modals","showPromiseModal","stepConfirm","bodyText","buttonText","intl","t","buttonCss","displayCancel","stepPromise","stepSuccess","successOnClickFunction","closeModal","stepFailure","showError","allowRetry","css","openPsapContactedModal","async","openFalseAlarmModal","simpleList_","simpleListItem_","simpleListDetails_","OperatorPropertyNoteBlock","intlPath","path","_dec2","gt","_dec3","computed","_dec4","_dec5","_dec6","_class2","toggleExpand","expandNotes","triggerShowNotes","showAllNotes","notesToBeRendered","items","moreThanTwoNotes","expandButtonText","isPermanent","_","expirationDate","notesCategoryIcon","PERMANENT_ICON","TEMPORARY_ICON","notesCategoryTitle","tc","contextualInfoPropertyNotesPropertyNoteBlock_","OperatorPropertyNotes","owner","super","_defineProperty","_buildTask","context","generator","propertyNotes","store","findAll","then","res","temporaryPropertyNotes","permanentPropertyNotes","drop","populatePropertyNotes","perform","PersonOnSite","reads","buildPersonOnsiteLabelsObject","deviceType","eventType","newLabel","timestamp","_labelKeyMap$deviceTy","_labelKeyMap$deviceTy2","tooltip","undefined","fnGetItem","key","formatMap","label","String","time","visualVerification","convertTime","Camera","VideoCameraTriggered","VideoEventTriggered","VideoAnalytics2Detection","VideoAnalyticsDetection","Opened","ThirdPartyAnalyticEvent","Partition","Disarmed","ArmedStay","ArmedAway","WrongPinCode","KeypadTamperAlarm","ZwaveLock","DoorUnlocked","DoorLocked","DoorAccessed","BadLockUserCode","AccessCardReader","DoorAccessedDoubleSwipe","DoorFailedAccess","UnknownCardFormatRead","DoorHeldOpen","DoorForcedOpen","ExitButtonPressed","AccessControlDoorAccessGranted","Contact","Closed","Alarm","Motion","GarageDoor","Glassbreak","Tamper","OriginWirelessDevice","personOnsiteProcessedIndicators","filterIndicators","oldIndicators","newIndicators","returnNew","checkIfExists","some","item","labelId","personOnsiteIndicators","newPersonOnsiteIndicators","sort","a","b","eventDateUtc","map","_ref","deviceName","Boolean","flat","_ref2","spinnerSvg_","UnexpectedEventsComponent","_descriptor5","_descriptor6","_descriptor7","unitId","contextManager","getContextId","predictionsLoading","unexpectedEventsData","firstObject","envSettings","isTestEnvironment","timeout","pullUnexpectedEventsData","unexpectedEventsProcessedIndicators","_this$unexpectedEvent","_this$unexpectedEvent2","entries","serialize","k","v","compact","GeoDevices","labelIsNew","fenceCrossedBeforeAlarm","geoFenceLabels","homeFenceCrossedBeforeAlarm","newGeoFenceLabels","fenceCrossedDuringAlarm","homeFenceCrossedDuringAlarm","contextualInfoAdditionalInformationGeoDevices_","AdditionalInformation","expandInfo","asyncLoader_","contextualInfoPropertyNotes_","contextualInfoPersonOnSite_","and_","contextualInfoUnexpectedEvents_","contextualInfoAdditionalInformation_","ContextualInfo","_descriptor8","_descriptor9","sessionError","ajax","apiRequest","headerWithCID","window","location","replace","origin","firstAlarmEventDate","arpFeatures","enableCDQL","sessionNumber","pullIndicatorsDataFunction","pullGeoFenceDataFunction","toggleRefreshData","pullDataTask","checkSessionValidityTask","alarmDate","freshRender","indicators","query","alarmDateUtc","toArray","geoFenceData","apiRequestForValue","concat","_this$visualVerificat","_this$visualVerificat2","firstAlarmDate","alarms","lastObject","_await$this$identityM","_await$this$identityM2","identityManager","getSelectedSystem","onVVOrLatestSession","didUpdate_","dashboardCardsDevicesDeviceListRow_","WarningSoundGroup","IconData","icon","_this$cancelWarningSo","warningSounds","allWarningSounds","warningSound","isActive","activeWarningSounds","now","Date","Promise","all","_warningSound$timesta","_warningSound$timesta2","timestampEndUtc","getTime","removeObject","cancelWarningSoundPromiseResolver","call","restartable","pullWarningSoundData","hasActiveWarningSounds","cancelAllWarningSounds","promise","resolve","cancelAll","triggerAllWarningSounds","showConfirmationDialog","htmlSafe","text","triggerAll","ArrayProxy","modalsDialogModalsPromisePromiseDialog_","math_","SfgModal","perform_","MultiActionSwitch","templateOnlyComponent","ActionSwitchSwitch","ARMAWAY","ARMSTAY","BUZZ","UNLOCK","DEPLOY","ActionSwitch","device","devices","actionKey","state","refreshDevice","refreshState","PartitionModel","LockModel","lock","unlock","GarageModel","open","close","WaterValveModel","Light","turnOn","turnOff","ThermostatModel","setMode","SfgModel","openPromiseDialog","armAway","options","armStay","AccessControlAccessPointDevice","executeStateChange","Open","Buzz","componentToRender","SwitchComponent","getActionsSubset","keys","isReject","actionList","included","includes","btnCss","filteredActions","filteredOffSwitch","filteredOnSwitch","refreshSwitch","filteredActionSwitch","shouldRevealOptions","revealOptions","showModal","reject","deployDevices","deployed","deployedDevices","failed","failedDeploys","notificationManager","addSuccess","addNotification","troubleConditions","getMassFilteredTroubleConditions","fnCss","managedDeviceType","Lock","getLockStateCSS","LightDeviceType","getLightStateCSS","getGarageStateCSS","WaterValve","getWaterValveStateCSS","Thermostat","getThermostatStateCSS","getPartitionStateCSS","eq_","propertyActionsActionSwitch_","PropertyActions","system","allDevices","reduce","result","translationKey","actions","switchKey","customComponent","requiredPermission","allLabels","data","_objectSpread","allDevicesTask","panelLabel","labels","contextualInfo_","propertyActions_","AlarmResponseNav","enableContextualInfo","contextualInfo","propertyActions","renderPropertyActions","renderWarningSounds","showToggleButtons","showContextualInfo","assign","showPropertyActions","didInsert_","preventDefault_","GroupLink","_this$systemGroup","systemItems","systemGroup","find","get","si","isSelected","showGroupLink","isEmpty","backToText","destination","name","changeContextToGroup","group","_this$contextManager$","_routeName$includes","routeName","currentRouteData","_getOwner","isEnterprise","getOwner","lookup","searchLocations","switchContext","changeDescription","_element","isInitialSetupRequired","setDescription","attachWindowListener","dom","addListener","AVAILABLE_SYSTEMS_CHANGED_KEY","Profile","not","profileRouteItem","navigation","getRouteItem","EmberLoginInformation","logout","openLoginInfo","hasNoAction","accessibility","saveFocusedElement","transitionToRoute","focusOnAppContent","toggleHoverState","showHoverState","debounce","updateHoverState","manageAccessSettings","transitionToRouteId","EmberGroupSettingsManagedAccountAccess","EmberSettingsManagedAccountAccess","appGroupLink_","appAppSystemSelect_","appAppNavLink_","isEnterprise_","accessControlLockdownEmergencyLockdownBtn_","appAppProfile_","Navigation","currentRootRouteItemId","_this$args$visitedRou","routeItem","visitedRoutesStack","homeRouteId","EmberHome","showConfigureHomeButton","routeId","hideHomeScreenEditButton","getObjProperties","isMobileBrowser","editHomeScreenAction","editHomeScreen","transitionToIndex","resetToIndex","appAppNavPersonalSafetyNav_","appAppNavAlarmResponseNav_","appAppNavCustomerNav_","or","openCloseNav","focusableElements","getFocusableElements","document","getElementById","firstNavElement","lastNavElement","isOpen","backdropElementPointer","parentNode","removeChild","removeListener","windowResizeListener","navCloseListener","navKeydownCloseListener","focus","backdropElement","createElement","elAppPage","dropdownTriggerParents","Array","from","getElementsByClassName","el","excludedClassNames","operatorNavExists","setAttribute","appendChild","set","innerWidth","ENV","screenBreakpoints","tabletMax","target","className","classList","contains","parent","closest","evt","code","buttonMenu","isTabCode","shiftKey","preventDefault","SystemAndGroupName","selectedSystem","identityModel","description","systemGroupName","systemName","groupName","dropdownActions_","fnGetButton","iconName","iconTitle","cssClass","HeaderButtonsComponent","dealer","isLoading","showHelpMenu","buttons","buttonList","uxEvents","recordActionOnPageEvent","RefreshHeaderButtonClicked","refreshApplication","OperatorRoutes","EmberOperatorPersonalSafety","EmberOperatorSelectAlarm","EmberVisualVerificationFlagging","EmberVisualVerificationLiveView","EmberVisualVerificationResponder","EmberVisualVerificationSD","EmberVisualVerificationSVR","isCurrentRoute","push","helpButton","helpLinks","supportPhone","externalSupportWebsite","hasSupportCenter","helpDocumentationUrl","hasNewsAndUpdatesAccess","EmberNewsAndUpdates","SupportCenter","hasContactUs","EmberSupport","test","routeOrUrl","DropdownActionItem","create","belongsTo","id","_this$navigation$tran","startOnboardingTour","ReferAFriend","media_","HeaderTabs","toggleSubNav","subNavVisible","toggleSubNavKeyPressed","isEnterOrSpaceCode","closeSubNav","stopPropagation_","appSystemAndGroupName_","appAppHeaderHeaderButtons_","appAppHeaderHeaderTabs_","AppHeaderComponent","_dec7","_dec8","_dec9","isVVRoute","OperatorPortalRoutes","defaultPageIfStackIsEmpty","showBackArrow","backButtonText","hideBackArrowWeb","showMenuButton","isMobileOrTablet","isOperatorSite","enableSidebar","hideBackButtonText","showGroupSystemName","showHeaderTabs","isHeaderControl","hideSubNav","coalesce_","RouteAnnouncer","LinkTo","AppFooter","footerLinks","footer","model","hide","link","url","ext","shouldHideTermsAndConditionsLink","externalTerms","shouldHidePrivacyPolicyLink","externalPrivacyPolicy","svgSpriteLoader_","array","notificationManager_","appLoadingIndicator_","appAppNav_","appAppHeader_","routeAnnouncer_","appAppFooter_","modalsHost_","actionSheetHost_","helpTour_","routeViewEditView_","usersItemEditContactInformation_","fieldsetHeader_","simpleBinary_","NewUserContactInformationContactType","deleteContact","address","destroyRecord","IsPointCentral","Helper","compute","_this$identityManager","isPointCentral","usersItemNewUserAddContactInformationContactType_","isPointcentral_","NewUserContactInformationComponent","openSendWelcomeEmailErrorToolTip","_openSendWelcomeEmailErrorToolTip","openSendWelcomeTextErrorToolTip","_openSendWelcomeTextErrorToolTip","isGuestUser","user","deviceAccess","pointCentralUserType","userType","PointCentralGuest","Guest","canAddMoreEmail","hasMany","ids","permissions","maxEmailAddresses","canAddMoreText","maxMobileAddresses","checkboxText","fnTranslation","scheduleKey","defaultKey","scheduleWelcomeEmail","numDays","welcomeEmailDaysOffset","email","emailDescription","textDescription","showSendWelcomeMessagesByDefaultCheckboxes","isNotificationOnlyUser","toggleByDefault","guest","nonGuest","toggleWelcomeEmailByDefault","shouldSendWelcomeEmailByDefault","toggleWelcomeTextByDefault","shouldSendWelcomeTextByDefault","addEmailAddress","createRecord","addMobileAddress","usersItemNewUserAddContactInformation_","MarketingHero","searchToolbar_","safeHtml_","marketingHero_","routeView_","dashboardsThermostatsDetailViewContainer_","dashboardsThermostatsComfortView_","dashboardsThermostatsCycleView_","dashboardsThermostatsEfficiencyView_","dashboardCardsContainerCard_","dashboardCardsCardToolbar_","DashboardCardsSeverityStatus","status","Unknown","A","Ok","createToolbarButton","getSeverityStatusTranslation","getSeverityStatusIcon","goToDetails","transitionRouteId","getDrillToDetailsButton","dashboardCardsSeverityStatus_","dashboardsThermostatsRuntimeView_","DashboardsThermostatsModeToggle","dashboardsThermostatsModeToggle_","appLegacyPageIframe_","drillThroughItem_","newsUpdates_","textInput_","validationError_","handleBinaryChange_","pageViewList_","navigateToRouteId_","getStaticResourcePath_","SmartCoverageErrorMessage","contactUsEmail","contactAnchor","anchorHtml","coverageArea","readFaqs","href","resourceKey","buttonSelected_","SmartCoveragePolicySelection","SmartCoveragePolicyType","smartCoverageErrorMessage_","smartCoveragePolicySelection_","smartCoverageDiscountCard_","smartCoverageRedirectNotificationButton_","keywordSearch_","onViewPage_","buttonSignInGoogle_","simpleBinaryList_","buttonAsyncButtonIcon_","formGroup_","dropdownSelectSingleSelect_","smartTime_","schedulePicker_","actionButtons_","listRowItem_","changePassword_","scrollContainer_","pinInput_","recognizedDeviceListItem_","passwordInput_","inlineAlert_","unassignCredential","accessCard","BadgeManagementController","Controller","addCredential","credential","isAssignCardActive","catch","deleteRecord","BaseUserGroupEditRoute","AdcBaseRoute","getUserGroupModel","groupId","logMissingAbstractMember","params","userGroup","group_id","processStoreData","freshDataCall","type","recordOperationAsync","oldData","peekAll","modelName","freshData","isArray","meta","freshIds","record","toString","oldRecord","isOldRecordInFreshData","next","Application","BaseAdapter","ajaxOptions","credentials","rollbackAttributes","unloadRecord","urlForQueryRecord","buildURL","slug","encodeURIComponent","join","findRecord","snapshot","old","peekRecord","isSaving","shouldBackgroundReloadAll","shouldBackgroundReloadRecord","shouldReloadAll","snapshotRecordArray","doNotReloadRecords","shouldReloadRecord","normalizeErrorResponse","headers","payload","errors","fnEnsureErrorsWithStatus","errorStatus","forEach","error","isInvalidSessionStatusCode","addSessionEnded","handleSessionExpiration","isNoPermissionsForApplicationStatusCode","redirectFromApp","isProcessingErrorStatusCode","isServerProcessingErrorStatusCode","normalizeErrorResponseHelper","BasePresenceStateAdapter","BaseMicroApiAdapter","PresenceStateApi","CurrentPresenceStateAdapter","PresenceStateDisplayAdapter","PresenceStateExplainerDisplayAdapter","PresenceStateSettingsDisplayAdapter","RecordingStatus","ApplicationAdapter","Rule","CustomerSiteJsonApiContentAdapter","overrideDeletionApiRoute","BaseDiscoverAdapter","DiscoverApi","GetDiscoverArticleContentResult","GetDiscoverDashboardResultAdapter","codes","getProcessingErrorStatusCode","getServerProcessingErrorStatusCode","defaultText","detail","addError","AccountInformationAdapter","MarketingCommunicationAdapter","CountryAddressResourceAdapter","BaseMassNotificationsAdapter","MassNotificationsApi","_headers","EverbridgeConfigurationAdapter","EverbridgeTemplateAdapter","DeviceCatalogAdapter","ManagedDeviceAdapter","serializerFor","serializeIntoHash","GetUpsellShoppingCartResultAdapter","DewarpConfigAdapter","updateRecord","_snapshot$adapterOpti","includeId","adapterOptions","failGracefully","DownloadFormat","FamiliarTargetEnrollmentImage","image","_image$adapterOptions","imageModel","moveImage","BaseIntercomAdapter","IntercomApi","IntercomApartmentAdapter","bulkUpdateApartments","request","ensureEndpointAndToken","fromEntries","IntercomContactAdapter","urlForQuery","bulkInsertContacts","IntercomDirectoryListAdapter","renameDirectoryList","queryString","URLSearchParams","IntercomDirectoryAdapter","IntercomPairedUnitAdapter","IntercomQrCodeAdapter","OvRule","createIfDoesNotExist","creatingNew","profileModel","Snapshot","SvrUsageInfo","LiveVideoHighestResSource","LiveVideoSourceAdapter","SvrVideoSourceAdapter","X_VV_CUSTOMER","VisualVerificationAdapter","readOnly","_this$customerId","customerId","VisualVerificationAlarmAdapter","VisualVerificationEventAdapter","PageFeatureAdapter","PersonOnSiteindicator","PropertyNoteAdapter","SessionDeviceLinkAdapter","SessionsAdapter","UnexpectedEventsIndicatorAdapter","VisualVerificationEventIdListAdapter","VisualVerificationEventIdAdapter","modalsDialogModalsSimpleSimpleDialog_","getModalButton_","CameraNotRespondingModal","viewDeviceSettings","VideoWirelessNetworkSettings","search","deviceId","VoiceAccessLevelDialogModal","tcPath","getDismissOptionTranslationKey","tcOption","TroubleConditionMutedOptionEnum","OneDay","SevenDays","FourteenDays","UntilNextOccurrence","AlertsAndIssueBaseController","getDismissActions","troubleConditionDismissActions","option","dismiss","getActionItems","actionItems","extraData","fnPushItem","troubleConditionAction","knowledgeBaseLinkText","troubleConditionType","SensorMalfunction","DeviceMispositioned","knowledgeBaseLinkAction","youTubeButton","watchTutorial","externalLinkButton","externalLinkAction","getTCItems","dismissActions","splice","_tc","_enumVal","handleTroubleResolution","successKey","failureKey","refresh","ex","isAdapterError","getModalConfig","SensorLowBattery","ImageSensorLowBatteryModal","CameraNotReachable","nativeBridge","redirectEnum","redirectIncludesTCId","redirectQueryParams","redirectNativeViewEnum","routeArgs","queryParams","doesSupportTransitionToNativeViewWithId","isMobileApp","transitionToNativeView","redirectUrl","modalConfig","AlarmInMemory","clearAlarmsInMemoryTrouble","SmokeSensorReset","clearSmokeSensorStatus","contactSupport","_await$contextManager","EmberSupportCreateIssue","knowledgeBaseLinkUrl","AlertsAndIssueController","BaseController","alerts","issues","mutes","troubleConditionMutes","unmute","refreshTroubleConditionsAndMutes","send","enumVal","youTubeUrl","externalLinkUrl","troubleConditionMute","AlertsIssuesIndexRoute","EmberAlertsIssues","afterModel","clearVisitedRoutesStack","activate","hideNotifications","reloadModel","ServiceAppointmentsIndexController","dataLoaded","m","hasDirtyAttributes","Route","EmberServiceAppointments","requests","ServiceAppointmentController","onlyOtherReasonAvailable","requestedReasons","r","isValidReasonCard","Other","pathType","EmberServiceAppointmentReasons","cancelAppointment","transitionToPreviousRoute","saveAppointment","buttonAnimation","isSuccess","removeDate","temporaryTimeframeId","times","requestedTimes","timeframeToRemove","temporaryId","setObjects","ServiceAppointmentsIndexRoute","getQueryParam","EmberServiceAppointment","modelFor","serviceAppointment","ServiceReasonsController","reasonItems","resolvedModel","reasons","availableReasons","BinaryListItem","props","back","_this$resolvedModel","updateReasons","updatedReasons","_this$resolvedModel2","_this$resolvedModel$a","_this$resolvedModel3","selectedReasons","AlertsIssuesServiceAppointmentReasons","sortBy","reverse","firstReason","dealerURL","EmberThirdPartyServiceRequest","EmberServiceAppointmentTimeframe","ThirdPartyServiceSchedulingController","navigateToModel","ThirdPartyServiceSchedulingRoute","objectAt","trackEngagement","engagementToken","ServiceAppointmentRoute","refreshModel","id_request","appointment","split","_Object$entries$find","ServiceRequestIssueCategoryMap","_ref3","pushObjects","modal","rollbackModelOnTransition","currentModel","ServiceAppointmentTimeframeIndexRoute","redirect","EmberServiceAppointmentDate","ServiceAppointmentsTimeFrameRoute","id_timeframe","timeframe","availableDates","reasonCodes","batchSize","isBlank","firstRequestReason","TimeframeDateController","gte","_descriptor10","didComeFromReviewPage","stackIndex","previousRoute","EmberServiceAppointmentTimes","dateItems","_this$timeframe","_this$availableDates","currDateString","localStartTime","requestTimes","duration","disableSize","rt","flatMap","disabled","date","displayTimesView","addDate","dateList","_dateList$find$label","_dateList$find","d","_this$timeframe2","setProperties","showNextDates","_this$request","ServiceAppointmentsTimeFrameSelectDateRoute","TimeframeTimeController","isTimeNotSelected","durationItems","_this$availableTimes","sameDayDurationIds","selectedForTimeframe","availableTimes","formattedTime","addTime","timeList","_this$availableTimes$","_this$availableTimes2","tl","saveAndShowAppointments","timeframeCount","ServiceAppointmentsTimeFrameSelectTimesRoute","transition","to","selectedDay","dates","_dates$find","TroubleConditionController","and","isTroubleCondition","TroubleCondition","isNotSensorMalfunction","_this$troubleConditio","troubleCondition","isNotDeviceMispositioned","_this$troubleConditio2","transitionToUrlInNewBrowserWindow","transitionToExternalLink","TroubleConditionRoute","EmberAlertsIssuesTroubleCondition","SmallLeak","MediumLeak","LargeLeak","router","transitionTo","WaterLeakAlertController","exitRoute","pauseMeterBuzzer","meterModel","emberDeviceId","pauseBuzzer","dismissBuzzerUntilNextOccurrence","EmberWaterLeakAlert","id_trouble_condition","AppErrorController","refreshPage","resetAfterError","AppErrorRoute","canUserAccess","didTransition","isEnabled","flushSentry","handleError","e","App","modulePrefix","podModulePrefix","Resolver","dependencies","externalRoutes","addDeviceExitRoute","videoAddNewDevice","wizardNotificationEdit","wizardEngineLaunch","services","twoFactorSetupExitRoute","loadInitializers","getPageTitle","isPreviousRoute","isSubNavHidden","routeData","pageTitle","calculateAndSetRouteData","_currentRouteData$rou","_this$model$arpFeatur","_currentRouteData$rou2","stack","rejectBy","previousRouteData","objectsAt","idx","_previousRouteData","route","skipWhenTransitioningBack","currentRouteText","previousRouteText","prevRouteData","isWizard","EmberAddDeviceCategories","EmberAddDeviceDevices","EmberAddDeviceStart","EmberLocationsSummary","EmberLocationsOverview","EmberLocationsTemperatures","EmberLocationsThermostats","EmberLocationsFleet","EmberLocationsVideo","EmberLocationsOccupancy","parseInt","setTitle","ApplicationController","filterBy","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_dec21","_dec22","_dec23","bool","_dec24","_dec25","_dec26","_dec27","EmberController","cookiesRegularExpressions","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","_descriptor18","_descriptor19","_descriptor20","_descriptor21","_descriptor22","_descriptor23","_descriptor24","_descriptor25","_descriptor26","unusedCookiesRegexes","cookie","trim","prefix","match","expireCookie","destructor","isDarkModeEnabled","darkModeListener","isDarkModeEnabledForWebView","registerDestructor","svgSpriteRoot","rootURL","_this$subRoutes","isFullScreen","subRoutes","siteAppearanceClasses","dark","hc","isHighContrastModeEnabled","viewClasses","hideElements","isTouchScreen","isTouchDevice","isAlarmResponsePortal","currentRouteName","n","hideElementsOnVisualVerification","isAlarmSafetyButtonPortal","hideElementsOnSafetyButton","OperatorLandingPageRoute","isVisualVerification","isEscalatedEvents","appPageClassList","hideHeader","showGroupSystemNameInHeader","_this$currentRouteDat","skipToMainContent","mainContent","focusElements","querySelectorAll","getAttribute","offsetParent","querySelector","remove","updateColorScheme","documentElement","style","setProperty","updateRouteData","once","updateBodyCssClass","toggleClassOnBody","dasherize","updateDealerPath","dealerPath","setUserScalability","viewportMeta","checkModal","_this$contextManager$2","showInModal","intialSetupInProgress","wasTransition","closeLegacyModal","closeNavBar","isNavBarOpen","setApplicationHeaderText","headerText","finishAppLoad","_document$querySelect","ApplicationRoute","enTok","paramsFor","beforeModel","performanceMonitor","markJSEnd","initializeApplicationData","identity","initialize","supportedNativeBridgeFeatures","supportedNativeViewTransitions","setupApplication","restoreVisitedRouteStackIfNeeded","markTTIEnd","videoPreloader","preloadStarted","startAllStreams","scheduleOnce","loading","originRoute","controller","controllerFor","finally","reload","isInvalidSessionError","message","abort","applicationRouteErrorHandler","getEnvironment","useReturnUrl","updateRouteInfo","info","routename","w","define","esc","require","_embroiderRouteBundles_","names","load","_embroiderEngineBundles_","runningTests","default","dealerBrands","adc","light","darkHc","fp","adt","adtIntl","cpi","guardian","aaa","securitas","BaseAutomationController","availableFilterTags","_this$retrievedFilter","retrievedFilterTags","typeText","count","resetQueryParams","filterTags","queryParamConfig","globalDeviceId","BaseAutomationRoute","isCloudRecordingAllowed","_this$permissions","allowedRuleDisplays","VideoRule","JSON","parse","isFullTransition","queryRecord","itemModelPath","setupController","deactivate","RulesBuilderBaseFeatureController","RulesBuilderFilterController","getEnabledTypes","templates","mapBy","uniqBy","updateType","rule","enabledTemplates","allTypes","displayWarningHeader","forceClear","clearActionAndDevices","confirmAction","_props$id","currentId","selectedId","findBy","fnUpdate","fnFinally","displayWarningMessage","incompatibleMessage","RulesBuilderBaseFeatureDetailsController","supportsMultiSelect","isTrigger","typeKey","deviceSelectionKey","typeId","isAny","MultipleDevices","getTemplateDevicesIds","deviceKey","eventKey","eventId","template","td","uniq","getTemplateExtraOptionIds","extraOptionKey","getTemplateStatuses","ruleTriggerExtraOptionIds","templateTriggerExtraDeviceOptions","every","selectionType","deviceIds","templateDeviceIds","availableStatuses","allEvents","enabledEvents","selectedEventId","enabledEventsResolved","color","selectDevice","allExtraOptions","selectedDeviceIds","i","isExtraOption","selectedExtraOptionId","extraOption","selectStatus","_items$findBy","statusKey","selectedEvent","AutomationRulesBuilderFeatureDetailsIndexRoute","featureRoute","getFeatureRoute","isPresent","getFeatureRouteSlugs","BaseRulesBuilderFeatureDetailsRoute","validateRuleModel","_model","indexRouteId","EmberRulesBuilder","transitionToBuilderRoute","validTriggerTemplates","includeEvents","includeDevices","includeExtraOptions","actionType","actionEvent","actionDevices","actionExtraOptionIds","hasMultipleDevices","ruleTemplates","templateDevices","templateExtraOptionDevices","actionSelectionType","validActionTemplates","triggerType","triggerEvent","triggerDevices","triggerExtraOptionIds","triggerSelectionType","checkTriggerForPrePopulation","selectableDevice","getSingleLeft","possibleDeviceCount","selectableExtraDeviceOption","selectableExtraDeviceOptionCount","triggerExtraDeviceOption","checkActionForPrePopulation","actionExtraDeviceOption","_templates$0$hasMany","_templates$0$hasMany2","templateTypes","breakpoints","mobile","mobileMax","tabletPortrait","tabletPortraitMax","tablet","desktop","desktopMax","desktopLarge","desktopLargeMax","desktopGiant","desktopGiantMix","prefersReducedMotion","BuilderTrialAccountExpirationWarningRoute","EmberBuilderTrialAccountExpirationWarning","content","getSelectedSystemId","queryParamsConfig","planType","userId","property","COLOR_MAP","BaseAccessPlanEditRoute","findAccessPlanModel","id_access_plan","createAccessPlanModel","colorName","Math","floor","random","accessPlan","accessPlanType","AllDeviceAccess","canBeModified","operatingModes","users","userTypes","commonPlanUserTypes","accessPoints","holidays","timetables","Personal","firstName","planDetailTotals","_this$identityManager2","getPlanDetailTotals","canPromoteSingleUser","isNew","getAccessControlPermissions","restrictedAccessSetting","getRestrictedAccessSetting","transistion","ModifyPlanName","getRecords","getAccessPlanPendingChanges","isReload","_identityManager$getS","getSelectedSystemGroupId","BaseAccessPlansIndexRoute","AccessPlansFilterManager","applyFilters","_params","_identityManager$iden","_identityManager$iden2","_transition$to","retrievalFunction","isFullReload","includeChildScope","parentRoutePath","includeParentScopeUsers","isPointCentralAccessControl","accessPlans","loadAccessPlans","cookieManager","aeroLocationNames","getAeroLocationNames","accessPlanPendingChanges","accessPlanLimitIssues","filtersManager","updateFilters","qp","defaultFilterValues","filters","validateFilterLength","viewModeCookieName","getAccessPlans","searchString","includeParentScope","accessPlanOperatingMode","DefaultOperatingMode","includeChildScopes","getEssentialCookie","hasEssentialCookieTruthyValue","loadAccessPlansBatched","FilterAccessPlanResultsController","listViewCookie","filterParams","updateViewMode","isListView","stats","logEvent","AccessPlanListViewSelected","AccessPlanCardViewSelected","setEssentialCookie","filterAccessPlans","FilteringAccessPlansController","resetQueryParameterValues","FilteringAccessPlansRoute","resetController","isExiting","BaseFilterManager","getSearchFilter","skip","accessControlPermissions","selectedSystemGroup","isParentGroup","searchEnhancement","filterOptions","childGroups","subs","points","systems","subSubs","point","systemId","isElevatorFloor","secondaryDescription","systemDescription","subitems","getDropdownFilterWithSubitems","placeholder","maxItemCount","getDropdownFilter","ap","getPointsQuery","locations","scopeIds","BaseAccessPointsIndexRoute","EmberRoute","AccessPointsFilterManager","FilteringAccessPointsController","FilteringAccessPointsRoute","useLocationSelectionSheet","hasCommercialInternalBetaAccess","MAX_URL_CHAR_LIMIT","selectItemsAndSubItems","select","affectedItems","_item$subitems","selectItems","pushObject","subItems","subItem","findItem","searchSubitems","foundItem","_item$subitems2","findDuplicateItems","newItems","existingItems","duplicateItems","_item$subitems3","flattenItem","insertAfterParentSorted","parentItem","orderIndex","parentIdx","indexOf","len","min","order","insertAt","addItems","itemsToAdd","itemList","setEach","SELECTED","UNSELECTED","urlParams","serializeQueryParams","getAllSelectedSubitems","allSelectedItems","selectedSubitems","ScrollingListSelectItem","CheckboxTreeItem","isCheckboxTree","_len","_key","BATCH_SIZE","getUsersQuery","startIndex","contactInfo","accessPeriods","userGroups","userAttributes","userStatus","BaseAccessControlUsersIndexController","fetchedUsers","tryParseInt","usersCount","totalCount","enqueue","nonDeletedUsers","u","isDeleted","nonDeletedUsersCount","clearUserData","reloadUsers","loadMoreUsers","lastReached","_this$usersCount","getMobileCredentialUtilization","defaultValue","parsed","isNaN","BaseAccessControlUsersIndexRoute","ContactsFilterManager","optionInt","mobileCredentialUtilization","FilteringContactsController","FilteringContactsRoute","getModels","conflicts","id_user","accessGroups","availableUserAttributeFields","hasLinkedADInstance","getDropdown","allKey","mapOptions","_this$filterOptions$k","_this$filterOptions$k2","_this$queryParams$key","keyPath","placeholderPath","getUserGroupDropdown","_this$queryParams$use","customUserGroups","unshift","getUserTypesDropdown","_this$queryParams$use2","fnGetFilterOption","HasNoBadge","HasNoPinCode","viewMobileCredential","HasNoMobileCredential","HasMultipleCredentials","HasNoMobileNumber","HasNoEmailAddress","ExpiredCredentials","FutureStartDates","PausedUsers","ExtendedUnlockTimeUsers","AntiPassbackExemptionUsers","azureActiveDirectoryIntegration","ActiveDirectoryUsers","MobileCredentialUsers","_ref4","_ref5","BasePromoteUserRoute","duplicateUsers","getDuplicateUsers","ActivityListController","hasNonDateFilterApplied","appliedFilters","f","DateFilter","DateRangeFilter","extendedHistoryLinkText","exportItems","format","export","toLowerCase","changePageSize","pageSize","newPage","page","changePage","exportFormat","startDate","endDate","stringify","eventsHaveRendered","getAppContentWrapper","ActivityListRoute","ActivityFilterManager","extendedHistoryRoute","extendedHistoryLink","invoke","isActivityFilterApplied","willTransition","_getAppContentWrapper","_getAppContentWrapper2","parentName","targetIsCurrent","scrollTop","resetScroll","restoreScrollPosition","activityDays","ad","isExpanded","BaseImageEventController","BaseMediaEventController","selectFrame","frame","BaseImageEventRoute","BaseMediaEventRoute","clipPermissions","DeleteMediaModal","equal","ImageSensorUpload","deleteMedia","event","deleteAtPanel","_getErrorText","getErrorText","replaceRouteWithNativeRoute","EmberEnterpriseEventHistory","EmberEventHistory","id_evt","Number","showPreferredTimezone","days","timezone","ActivityItem","day","events","hideMedia","BaseVideoEventRoute","getVideo","media","Ov2Event","isPackageDetectionEvent","videoEvent","ThirdPartyAnalyticsEvent","clip","videoPermissions","formats","video","ExtendedActivityController","FilteringController","recipients","ExtendedActivityRoute","FilteringRoute","unloadAll","FilterResultsController","filterResultsRouteQueryParams","filteringRouteQueryParams","debounceTimeMs","FilterResultsRoute","p","_objectWithoutProperties","_excluded","storeAccess","startTime","toISOString","endTime","deviceTypes","evtTypes","subDays","setMilliseconds","activityFilterModelPaths","globalDeviceIds","ADCBaseRoute","_Transition","ActivityGroup","BaseCollection","host","groupSize","displayDate","first","firstItem","last","lastItem","hasMedia","_this$items$isAny","isItemEligible","differenceInSeconds","eventDate","ContainerObject","previous","showCommandState","_this$model","commandState","Completed","_this$model$commandSt","_this$model2","Pending","Failed","Cancelled","commandStatusString","canViewVideo","EmberEnterpriseEventVideo","EmberEventVideo","canViewClip","EmberEnterpriseEventImage","EmberEventImage","canViewThumbnail","EmberEventThumbnail","canViewSnapshot","EmberEventSnapshot","_this$model$iconData$","_this$model3","classificationIcons","iconData","hasActivityGap","differenceInHours","mediaDetails","isVideoEvent","DoorbellButtonPress","StoryInProgress","correlatedEventId","_await$model$media$ma","index","preferredTimezone","formatDateTz","hour","minute","timeZone","ActivityLocation","locationItems","collectionItems","showTime","fnGetLocation","_item$model","isUnexpected","hasTimeRange","src","addItem","addObject","limitItemCount","qpKey","optionKey","stageFilterChanges","skipDateFilter","year","getDate","isExtendedActivity","showHighlights","categories","getYearLength","today","feb28","getFullYear","wasLastYearLeap","isYearLeap","isThisYearLeap","canViewActivityFiltersV2","updateCategorizedFilters","camelize","apiRequestForDataRecords","usersFilter","userTypesFilter","eventTypesFilter","deviceTypesFilter","recipientsFilter","getChecklistFilter","getDateRangeFilter","catalog","activityFilterCategories","maxTimePeriod","startDateFilter","endDateFilter","getStartAndEndDateFilters","apply","updateActivityDateRange","minimumDate","applyCategorizedFilterOption","categoryId","subsection","filterVal","currQueryParams","currCategories","categoryKey","CATEGORY_FILTER_SUBSECTIONS","currCategory","currSubsection","updatedQueryParams","getNumFiltersInCategory","removeSubsectionFromQueryParams","applyShowOtherClips","isToggleOn","sum","_filter$key$length","_filter$key","filterApplied","_currCategories$find","_ref6","beginDate","beginDateValue","endDateValue","compareDateOptions","hasQueryParamsFilters","numQueryParamsFilters","resetQueryParamsFilterValues","overrides","applyCleanFilters","total","_a$length","c","startDateValues","getFilterValues","qpBeginDateMinute","defaultDateMinute","errorText","EmberEnterpriseExtendedActivityHistory","EmberExtendedActivityHistory","urlFor","extend","isMediumWidthPage","routes","getChildRoutes","clearVisitedRouteStackMobile","queryParamsKeys","LEGACY_PAGE_ROUTE_NAME","cache","paramKey","parseUrl","legacyPageSrc","setCurrentRouteData","getRouteItemTitle","wasReplaceTransition","updateSlugs","_transition$routeInfo","routeInfos","ri","acc","InfrastructureBaseRoute","userActivity","init","_super","isInactive","isDestroying","slugs","requiresInitialSetupCompleted","useDefaultLoadingStart","useDefaultLoadingEnd","skipAddingRootRouteOnFirstLoadMobile","setIsRouteLoading","setIsLoading","sendRouteInfoToApp","doNotTimeOut","updateSessionTimeout","forceLogout","urlMethod","postLoginRedirect","routeSlugs","addWarning","launchInitialSetup","trigger","clearNonPersistentNotifications","queryParamsDidChange","changedParams","_queryParams$key","BaseSettingsRoute","_this$routeItem$relat","relationship","childRoutes","BaseReportEditController","baaReportEditRoutes","singleSystem","EmberBAAReportEdit","enterprise","EmberEnterpriseBAAReportEdit","reportToRouteMap","AccessHistoryReport","EmberAccessHistoryReportEdit","EmberEnterpriseAccessHistoryReportEdit","AlarmsIssuesReport","EmberAlarmsIssuesReportEdit","EmberEnterpriseAlarmsIssuesReportEdit","BatteryLevelReport","EmberEnterpriseBatteryLevelReportEdit","CrowdGatheringReport","LineMonitoringReport","OccupancyPlusPeopleCountingReport","PeopleCountingReport","TroubleConditionDetailsReport","EmberEnterpriseTroubleConditionDetailsReportEdit","TroubleConditionTrendsReport","EmberEnterpriseTroubleConditionReportEdit","UnattendedShowingsReport","EmberEnterpriseSelfGuidedToursReportEdit","UserActivityReport","EmberUserActivityReportEdit","EmberEnterpriseUserActivityReportEdit","UserSummaryReport","EmberUserSummaryReportEdit","EmberEnterpriseUserSummaryReportEdit","VideoHealthReport","EmberVideoHealthReportEdit","EmberEnterpriseVideoHealthReportEdit","BaseReportEditRoute","notificationTypeId","reportType","id_report","reportPromise","getNewReportModel","report","devicesByType","getDevicesByType","reportSpecificEditRoutes","_reportSpecificEditRo","_reportSpecificEditRo2","EmberEnterpriseReports","EmberReports","defaultReportData","getProperties","attributes","possibleLocations","includedItem","notificationType","allowsDeviceSelection","fnGetDeviceItem","cameras","svrs","subItemIds","arr","svr","getSubItems","isNone","camera","SBTMTemperatureHistoryReport","sensor","HVACHealthReport","supportsHvacAnalytics","s","isMonitoringEnabled","ExtraDataKeyEnum","ExtraDataRoute","extraDataDelegate","BaseUserCredentialManager","mapCredentialDropdownOptions","dropdownOptions","addResendMobileCredential","mobileCredential","canCredentialBeModified","mobileCredentialToEdit","isEditMobileCredentialActive","deleteCredential","DateRange","dateRangesOverlap","that","mergeDateRanges","isFullDayOrGreater","NUM_MILLISECONDS_IN_DAY","splitAtDate","splitPoint","remainder","UserAccessHelper","notEmpty","isAccessControl","selectedCustomerIds","selectedGroup","removeSystemsPath","useAPUMRetainUsers","setOwner","userAccessArgs","userAccessDescriptionKey","movingSystemsWithinSameEnterprise","isRemoveSystems","retainUsersDescription","removeUsersDescription","selectAccessOption","disableRetainAccessOption","removeAccess","parentGroup","retainUsersBulletText","parentGroupName","removeUsersBulletText","numberSelectedCustomerIds","_get","systemIdsUnderEnterprise","selectedCustomerId","BaseEnterpriseAddEnterpriseLoginsOptionsRoute","addEnterpriseLoginOptions","BaseLoginController","displayEmailAddressError","_this$resolvedModel$l","emailAddress","login","shouldDisplayLoginNameError","_this$resolvedModel$l2","loginName","loginNameTrimmed","cultureChanged","cultureId","cultureIdSelection","cultureIdChanged","loginIndexRouteId","English_US","BaseEditScheduledDeviceLoginController","canBeSaved","_login$loginTemporary","_login$loginTemporary2","_login$weeklySchedule","_login$weeklySchedule2","_login$loginName","_login$emailAddress","loginTemporarySchedule","isValid","weeklySchedule","canBeEdited","isScheduledDeviceLogin","systemGroups","assignableLoginRoles","loginPermissionsCollection","enterprises","getEnterprisesAndSystems","updateRoleOnGroup","itemRowObject","loginRolesItems","addingRole","selectedRole","MOBILE_APP_AS_KEY_LOGIN_ROLE_ID","updateRoleOnSelectedRowAndChildElements","updateParentItems","systemGroupLoginRoleToModify","LoginRoleOnSystemOrGroup","removeRole","addRole","childItems","saveLogin","LocationRoleRow","BaseItemRow","availableLoginRolesWithinScope","isSelectable","nodeDepth","showDropdown","canExpand","GroupRoleRow","getChildItems","DS","PromiseArray","childGroup","getRoleRowArgs","EDIT_MULTI_GROUP_LOGIN_RESOURCES","_standaloneSystems$ma","standaloneSystems","selectedSystemGroupId","availableEnterprises","isHighestGroupWithAccess","commonOptions","availableStandaloneSystems","cg","associateLogin","POST","escapeHtml","handleErrorNotification","MultiGroupLoginController","BaseEditLoginController","additionalInstructions","isAssociatingLogin","modifiedRoleAction","rolesChanged","processValidationErrorsFromResponse","resetSelection","values","resetRole","BaseEnterpriseEditMultiGroupLoginRoute","EmberEditMultiGroupLogin","_this$modelFor","onlyRetrieveGrouplessSystems","isEmberEditLoginsPage","parentRoute","loginViewType","EnterpriseLoginsIndexController","BaseLoginsIndexController","_this$viewingLoginsOf","viewingLoginsOfType","VIEWING_SELECTED_GROUP_LOGINS","systemGroupId","loginGetEndpoint","viewType","VIEWING_ONLY_NON_GROUP_LOGINS","VIEWING_ONLY_SUBGROUP_LOGINS","VIEWING_ALL_LOGINS","loginGetEndpointForViewType","includeScheduledLoginProps","loginsCountChanged","activeItems","addNewLogin","usesAccessControlUI","EmberAddEnterpriseAccessControlLoginsOptions","EmberAddEnterpriseLoginsOptions","toolsDropdownButtons","_this","_this$store$peekAll$f","_selectedSystemGroup$","_identityManager$iden3","fnGetLink","updateTypesOfLoginsViewed","isCommercial","viewingParentGroup","loginType","loadLogins","editLogin","_await$identityManage2","_identityManager$iden5","isNonGroupLogin","getModelName","_await$identityManage","_identityManager$iden4","EmberEditScheduledDeviceLoginAccessControl","EmberEditScheduledDeviceLogin","EmberEditMultiGroupAccessControlLogin","cl","BaseEnterpriseLoginsRoute","EnterpriseUsersFilterManager","resetState","isQuickFilterConfig","filtersVisible","showRightNav","userFilterSelection","userFilterOptions","pointCentralIdentity","hasUsersPageAutomaticFilterForGuestsOnly","subtype","maximumDate","getDateTimeFilter","_userFilterSelection$","filteringFieldName","isMultiSelect","toggleRightNav","toggleFilter","filterVisible","openQuickFilterConfig","quickFilterToEdit","closeQuickFilterConfig","FleetFilterManager","vehicles","searchFilter","rangeFilter","deviceNameFilter","FilteringFleetTripHistoryController","areFilterParamsVaildLength","serializedParams","changeFilterValues","newValues","cachedFilterValues","submitFilterValues","updateDateTime","updatedFilter","_updatedFilter$search","selectedDateFieldName","dateValue","searchByDateOnlyFieldName","searchByDateOnly","FilterManager","fnApplyFilter","month","applyFilter","hasCachedChanges","resetFilterValues","selectedValues","_props$maxItemCount","DropdownSelectItem","selectedValue","DropdownFilter","getAnalyticsDropdownFilter","adcFilteringFieldName","thirdPartyFilteringFieldName","adcOptions","thirdPartyOptions","adcSelectedValue","thirdPartySelectedValues","_props$maxItemCount2","adcItems","combinedItems","localeCompare","val","thirdPartyItemsResolved","combined","otherItemIndex","findIndex","otherItem","adcApplyFn","thirdPartyApplyFn","adcValues","thirdPartyValues","_props$maxItemCount3","isCollapsible","subValues","getBitwiseFilter","checklistItem","tooltipText","ChecklistFilter","_item$props","_ref7","SearchFilter","_ref8","updateDateRange","_intl$timeZone","_this$queryParams$sub","DateTimeFilter","showDefaultDate","BaseFilter","_ref9","_ref10","zonedTimeToUtc","startOfDay","utcToZonedTime","endOfDay","_ref11","getFilterByName","toggleDisableState","submitCachedFilterValues","resetCachedFilters","hasAppliedFilters","formatDate","_props$css","_props$skip","isApplied","compare","validateParameters","getRequiredParamsInfo","getResetValues","_props$showDefaultDat","computedValue","_props$validationFn","validationFn","selectedDate","_props$placeholder","_props$isMultiSelect","alwaysShowHeaders","getSystemGroupDropdownSelectItems","isAccessControlSystemGroup","hasNoDeviceAccessModal","denyAction","_contextManager$curre","editDeviceAccessPages","EmberEnterpriseEditUserDeviceAccessLocationDevices","EmberEnterpriseEditUserDeviceAccessAccessType","EmberEditUserDeviceAccess","modalBodyTranslationKey","cancelEditPointCentralUser","modalTranslationKey","_deviceAccess$tempora","_deviceAccess$tempora2","handleRedirectAfterSaveOrCancelPointCentral","temporarySchedule","beginDateTime","endDateTime","previousUserType","shouldRedirectToEditRoute","isCreationFlow","handleAdditionalPointCentralDeviceAccessSaveSteps","syncUserPermissions","replaceWithRouteId","baseUserEditRoute","accessControlUser","accessControlGroupId","_accessControlUser$or","originalAccessPlanIds","originalAccessPlans","any","apid","saveAccessPlansOnDifferentScope","_this$pointCentralSha","_this$pointCentralSha2","pointCentralShareUser","shareUserCodeEmail","sendWelcomeTextUponSave","sendPointCentralWelcomeText","shouldOverrideAndSelectAllExistingAccessPointCentral","accessPointCollectionsSummary","allAccessPointItems","accessPointCollection","AccessPlans","isEvery","isEnterpriseSettingsCategoryRoute","searchStringQuery","routeString","isNewLogin","failedResourceKey","_e$errors","availableLocaleOptions","availableLocales","profile","currentLocale","locale","displayName","newLoginsCount","loginsCount","hasNoLogins","resetItems","loginFilters","BaseManagedAccountAccessRoute","managedAccessRequest","_await$this$currentMo","rollback","getUsersPermissions","permissionsModelName","BaseMergeUsersPreviewRoute","mergePreviewManager","MergePreviewManager","sourceUser","userModelName","id_ssu","targetUser","id_stu","User","setPreviewUserProperties","AccessControlUser","setPreviewAccessControlUserProperties","sourceUserAttributes","targetUserAttributes","setPreviewUserAttributes","ssuId","stuId","userAttributeCollection","BaseUsersAddContactRoute","userEditRouteName","BaseUserEditController","handleNewUserSetup","_savedUser","saveUser","userCode","isNewUser","hasNoDeviceAccess","fnSaveUser","savedUser","saveUserModel","passUser","isDuress","handleRedirect","activeDirectoryFlag","setDeviceAccessInfo","redirectRoute","None","EmberEnterpriseUserEdit","EmberUsersAddContactAddressDuringUserCreation","fnNotify","resolvedUserType","NotificationsOnly","EmberEnterpriseUsersAddContactAddressDuringUserCreation","EmberEnterpriseEditUserDeviceAccessUserCode","userTypeSupportsDeviceAccess","MasterCodeUser","BackupCode","getNextRouteForCreation","_routeId","EmberEnterpriseEditUserAccessPeriod","EmberEditUserAccessPeriod","isTransitionExitingUserCreationProcess","targetName","BaseUserEditRoute","parentRouteModel","baseUsersRouteName","fields","resolvedUser","isEditSupported","canViewUserAttributeValues","userEditNotSupportedRoute","isDestroyed","ContactInformationController","updateAddress","deleteAddress","BaseEditContactInformationRoute","contactType","contact_address","userAddContactAddressRoute","contactAddress","getContactAddress","BaseDeviceAccessRoute","userFullName","lastName","contactAddresses","FiveButtonDuplicateModal","ADDRESS_TYPES","response","source","pointer","errorMessage","fiveButtonDuplicate","processFiveButtonDuplicateError","BaseUsersEditIndexController","canBeDeleted","isSmrfVisible","systemConfig","smrfOptIn","smrfStatus","userHasSmrfImages","isSmrfSupported","showUserTypeDrillThrough","_deviceAccess$availab","availableUserTypes","currentUserType","_deviceAccess$get","_availableUserTypesFo","availableUserTypesForUser","searchVal","isCurrentLoginLinkedToThisUser","canViewPeopleUi","_user$loginId","loginId","setMobileModalOnLoadPropertyTrue","mobileCredentialModalOnLoad","deleteUser","confirmedTransition","credentialCode","getCredentialCode","editCredential","oldCredential","newCredential","_user$pinCodes$find","AccessCardCredential","cardSerial","PinCodeCredential","pinCode","pinCodes","BaseUsersLanguageRoute","LinkLoginBaseController","BaseEditUserController","BaseEditUserLinkLoginRoute","availableLoginsToLink","BaseNewUserAddContactInformationController","EmberUserEdit","emailAddresses","mobileAddresses","_unused","cancelEdit","BaseUserAttributesEditRoute","id_attribute","userAttributeFieldId","userAttributesRouteName","attributeCollection","BaseUserAttributesIndexRoute","editUserAttributeRouteId","BaseUserInformationController","availablePointCentralUserTypes","availableUserCodeTypes","saveUserWithUserCode","selectedUserCodeType","StandardUser","savePointCentralUserType","BaseUsersEditInfoRoute","isAddNewUserRoute","parentModel","fnGetDeviceAccess","createRecordWithServerDefaults","General","accessCards","USERS_BATCH_SIZE","BaseUsersIndexController","displayOrHideCheckbox","usersPageBulkActionsMode","bulkUsers","clearUserSelections","addLoadedUsers","addNewUser","routeMap","editUserInformation","openBulkActions","closeBulkActions","toggleBulkEditMode","selectUserAction","bulkDelete","userIds","numberOfSuccessfullyDeletedUsers","resendCodes","afterUserDeleted","_this$usersCount2","toggleUsersProperty","UniqueContactAddressesSet","Set","addresses","delete","setPreviewLogin","setPreviewContactAddresses","setPreviewAccessPlans","setPreviewLanguage","setPreviewAccessAC","setPreviewActiveDirectoryFlag","setPreviewDeviceAccess","previewDeviceAccessModel","_sourceUser$loginId","previewLoginId","cachedTargetEmailAddresses","cachedSourceEmailAddresses","cachedTargetMobileAddresses","cachedSourceMobileAddresses","previewAccessPlansModel","showAccessPlanScopeName","localeId","atu","previewPinCodes","hasStartDate","hasEndDate","accessGroupId","apbExemptFlag","adaFlag","attributeValues","baseAdvancedSearchDefaultFilterValues","motionSensitivity","activitySensitivity","motionSearchDisabled","activitySearchDisabled","timeInterval","NUM_SECONDS_IN_HOUR","subHours","appContentWrapper","scrollPosition","baseAdvancedSearchModelHook","cameraId","id_camera","svrVideoSource","selectedSystemOrGroupId","videoStreamingPermissions","groupResolution","GET","intervals","earliestRecord","showMotionSearchOptions","sentryWithScopeAndError","aggregateDatesForSearch","aggregatedDates","currentRange","addMinutes","nextRange","splitDateRanges","dateRanges","splitDates","dateRange","newRange","addHours","constructObjectSearchParams","drawing","objectSearchConfig","ObjectSearchConfig","ObjectSearchParams","_linesOfResponseStream","_wrapAsyncGenerator","utf8Decoder","TextDecoder","reader","body","getReader","regex","chunk","done","_awaitAsyncGenerator","read","decode","stream","exec","substring","lastIndex","substr","submitObjectSearchRequest","objectSearchParams","parseResponse","_line","apiEndpoint","osConfig","Headers","fetchResult","fetch","method","line","_iteratorError","_iteratorAbruptCompletion","_didIteratorError","_step","_iterator","_asyncIterator","_x","linesOfResponseStream","err","return","cancelObjectSearchRequest","MotionMaskCoord","x","y","MotionMask","drawings","shapes","Shapes","MotionSearchFilterManager","getText","tokens","activitySearchVisible","round","minutes","hours","motionSensitivityFilterOptions","activitySensitivityFilterOptions","motionSensitivityFilter","activitySensitivityFilter","setActivitySearchVisibility","sensitivityFilter","sizeFilter","mask","sensitivityfilter","sizefilter","ObjectSearchResult","json","baseObject","sourceId","active","imageOffset","isValidDate","maskType","masktype","UiFilterButton","videoClipsActionToolbar_","onClickOutside_","filtersFilterPanel_","dropdownSelectMultiSelect_","uiFilterButton_","timezonesTimezoneSelector_","VideoClipsMainToolbarComponent","selectionStateInfo","fnGetInfo","clearFilters","toggleFilters","filterOpen","cancelFilters","submitFilters","later","changeCamera","_filtersManager$camer","_filtersManager$camer2","camerasFilter","bulkSelectionChanged","checked","navigateToUsageReportPage","EmberVideoClipsUsageReport","clickOutsideFilter","toggleTimezoneSelector","showTimezoneSelector","detailsCookieName","FilterVideoClipResultsController","VideoClipsMainToolbar","sortedMedia","clips","snapshotEvents","MediaItem","mediaFromQueryParams","selectedMediaEditor","MediaEditor","selectedMedia","changeEventId","toggleDetails","showMediaDetails","isGalleryView","updateBulkActions","enableBulkActions","toggleMediaSelection","mediaHasRendered","tourId","SavedVideoClipsPageTour","ClipDetectionOtherTour","helpTours","SavedClipsTour","OtherDetectionTour","start","areFamiliarSubjectFiltersChanged","previouslySelectedSubjects","currentlySelectedSubjects","subject","FilterVideoClipResultsRoute","currentParams","videoUsage","savedClipPermissions","ClipsFilterManager","otherSelected","isBitwiseFilterEnabled","detectionFilters","newQueryParams","oldQueryParams","triggerCookieName","Vehicle","familiarVehicles","AnyUnfamiliarVehicle","Person","familiarFaces","AnyUnfamiliarFace","UnrecognizedPerson","personType","handleFacesFilters","subYears","dirtyDate","dirtyAmount","requiredArgs","amount","toInteger","addMonths","addYears","DefaultObjectDetectionFilterValues","Animal","DeliveryVehicle","Package","FilteringVideoClipsController","thirdPartyDetection","filterValue","nextFilter","Unprotected","Protected","VMD","EventTrigger","ViewedByCentralStation","UserSelected","FilteringVideoClipsRoute","as","thirdPartyAnalyticsEventType","thirdPartyDetectionTypes","supportedEventTypes","fnGetModels","BaseClipsTour","tourName","tourSteps","tourComplete","helpTour","Tour","steps","afterEnd","markHelpTourAsCompleted","VideoClipsDonateClipComponent","urlForDonationTerms","videoClipsDonateClip_","DonateClipModal","donateAction","displayTerms","reviewedTerms","donateCalibrationSnapshots","resetFeedback","donate","getModalFooterButton","showCalibrationSnapshotInfoModal","CalibrationSnapshotInfo","getDropdownActionItem","MediaAction","getCountBasedText","SnapshotEvent","areAnyProtected","num","handleApiError","exitFullScreen","isBrowserFullScreen","toggleFullScreen","ActionGroup","empty","menuItems","DownloadAction","_class3","DownloadOptions","disableBackdropClose","RenameAction","_class4","descriptions","showRenameModal","output","maxLength","rename","ProtectAction","_ProtectAction","hasProtectMediaReminderModalBeenShown","protect","showInfoModal","buildKnowledgeBaseURL","CustomerKnowledgeBase","VideoClipsChangeNumberOfDayBeforeDeletion","disableHeaderClose","_class5","LinkAction","getMediaLinksInfo","_links$firstObject$su","_links$firstObject","links","shareLinkInfo","CopyLink","_class6","navigator","clipboard","writeText","EmailLink","_class7","DonateAction","_class8","feedback","feedbackText","updateFeedback","isCorrect","updateText","hasAgreementBeenAccepted","donateMedia","pushPayload","FamiliarTargetFeedbackAction","_class9","_media$firstObject","isFamiliarVehicleFeedbackEvent","familiarTargetFeedbackEvents","familiarObjectType","_this$media$firstObje","firstMediaId","EmberVideoFamiliarSubjectsClipFeedback","DeleteAction","_class10","postDeleteAction","_this$postDeleteActio","showDeleteModal","_class11","_descriptor27","_descriptor28","_descriptor29","_descriptor30","checkPermissions","isLoginAsLoginRep","downloadAction","renameAction","protectAction","shareAction","familiarTargetFeedbackAction","firstMedia","hasFeedback","isVehicleType","_firstMedia$familiarT","_firstMedia$familiarT2","deleteAction","permittedActions","dropdownActionItems","playAll","VideoClipsModal","selectedIndex","operatorSiteEnum","NotOperatorSite","BaseMediaItem","_class12","canDownload","canViewPictureInPicture","_descriptor31","_descriptor32","_descriptor33","cameraName","_this$intl$timeZone","vaIcon","_class13","_descriptor34","_descriptor35","editor","getMediaKey","isToday","size","formatNumber","stateIcons","isProtected","isDonated","isEventDeleted","isViewedByCentralStation","VVClipItem","_class14","vvEvent","_descriptor36","flagged","getPopoverConfig","attachTo","placement","scrollAlignToTop","Step","StepDisplayType","Popover","StepContent","getWelcomeModal","Modal","fnToolbarCss","selector","fnFooterCss","fnGetText","getAnchorSelector","stepOpened","add","stepClosed","FILTER_CAMERA","FILTER_TRIGGER","FILTER_STATUS","FILTER_DETECTION","FILTER_VEHICLES","FILTER_FACES","FILTER_LOCATION","FILTER_3PC_DETECTION","root","getBitwiseOptions","bitMask","vehiclesPromise","hasFamiliarVehicles","FamiliarVehicle","getFamiliarSubjectsForFiltering","facesPromise","hasFamiliarFaces","FamiliarFace","thirdPartyDetectionPromise","hasThirdPartyCameraAnalytics","canUploadClips","isOnvifCamera","hasVideoAnalytics","canViewDeliveryVehicle","vehicleProfile","vehicle","faceProfile","face","Deleted","isVMDEnabled","canViewCentralMonitoringStationClips","hasUserSelectedFilter","areStatusChangesValid","knowledgeBaseLink","VideoAnalyticsClipOtherClassification","convertResolutionToPixelCount","resolution","verifyCorrectResolutionFormat","getResolutionPixelCount","getResolutionDimensions","str","dimensions","Error","FilterVideoMediaResultsController","FilterVideoMediaResultsRoute","snapshotEventsPromise","resolvedClips","FromVideoEvent","FilteringVideoMediaController","FilteringVideoMediaRoute","ClassificationFilter","ValueFilter","setIsSelected","setIsDisabled","subjectIds","subjectId","CompositeFilter","_this$subItems$filter","CookieManager","VisualVerificationItem","hasBeenViewed","clipItem","BaseReportsCatalogRoute","catalogItems","isTransition","BaseReportsController","sortName","showAddLink","catalogRouteId","REPORT_TYPE_MAP","BusinessActivityAnalytics","EmberBusinessActivityAnalyticsReports","Fleet","EmberConnectedFleetReports","Partitions","EmberPartitionReports","Sensors","EmberSensorReports","Temperatures","EmberCommercialTemperatureReports","Thermostats","EmberThermostatReports","Wellness","EmberWellnessReports","BaseReportsRoute","reports","totalReportsCount","BaseTemperatureController","legalThresholds","lowerThreshold","upperThreshold","lowerThresholdConverted","upperThresholdConverted","isInteger","AccessPlanDetailsCompact","BaseAccessPlanDetails","usersDetails","detailsToRender","accessPointType","accessPointsDetails","popoverMenu_","guidFor_0","scheduleViewCompact_","isCollectionUntouched","collection","canEdit","AccessPlanDetails","detailRows","hidden","isVisible","useRestrictedAccessUI","detailsUsesRestrictedAccessUI","twentyFourSevenAccessPoints","scheduledAccessPoints","showRestrictedAccessUI","togglePopover","mouseEvent","stopPropagation","showPopover","usersUntouched","canModifyUserTypes","userTypesUntouched","accessPointsUntouched","timetablesUntouched","showTimeTables","canViewTimeTables","isPlanInactive","accessPlanStatus","accessPlanAccessStatus","Expired","DEFAULT_PLAN_DETAIL_TOTAL_VAL","DEFAULT_PLAN_DETAIL_TOTALS","partitionTotal","doorTotal","lockTotal","userTotal","elevatorTotal","userTypeTotal","ebsPanelTotal","getAccessPointDetailRows","activeAccessPoints","partitions","doors","isElevatorReader","locks","elevators","activePartitionsCount","isAllAccessWithDefaultOperatingMode","isAllAccess","predefinedPartitionText","predefinedText","createDetailRow","capitalize","scheduleObjects","getScheduleObjectsArray","scheduleTypeView_","AccessPlanCardHeaderDetailsComponent","timetable","_this$args$accessPlan","_this$timetable","formattedDate","_this$timetable2","headerTag","fullTemporaryAccessDateRange","startOnlyText","endOnlyText","customTimesString","first_block","scheduleDictionary","total_minutes","endMinutesLocal","startMinutesLocal","MINUTES_IN_WEEK","temporaryAccessPlanScheduleText","editUsers","transitionToNativeRoute","getAccessPlanEditRouteId","ModifyUsers","RestrictedAccessPopoverComponent","statusToggle_","settingsRestrictedAccessSettingsPopover_","AccessPlanCardHeaderSecondaryComponent","uiColoredIcon_","accessControlAccessPlansItemCardHeaderDetails_","accessControlAccessPlansItemCardHeaderSecondary_","deleteAccessPlanWithWarningModal","afterSuccess","translationPath","accessPlanName","AccessPlanCardHeaderComponent","toolsDropdownItems","_accessPlan$id","canEditTimetables","accessPlanId","itemPath","thisPath","canModifyUsers","ModifyAccessPoints","canModifyAccessPoints","ModifyUserTypes","ModifyTimetables","canModifySchedules","translationKeys","routeEnum","deleteAccessPlan","linkItem","displayRestrictedAccessEnabled","isPersonalAccessPlan","RestrictedAccessOperatingMode","accessControlAccessPlansRowAccessPlan_","AccessPlanScrollingRow","verticalCollection_","accessControlAccessPlansRowAccessPlanScrollingRow_","usersLoadingSpinner_","DEFAULT_BATCH_SIZE","createPairedAccessPlans","accumulator","accessPlanLeft","accessPlanRight","AccessPlanScrollingList","_this$args$initialDat","_this$args$initialDat2","_this$args$initialDat3","initialData","accessPlansIndex","newAccessPlans","usePairedAccessPlansUI","handleOddPlanCount","pairedAccessPlans","rowHeightEstimate","initialDataChanged","_initialData$toArray","loadMoreAccessPlansAction","loadMoreAccessPlans","lastRow","removeAt","accessControlAccessPlansItemCardHeader_","accessControlAccessPlansItemAccessPlanDetailsCompact_","accessControlAccessPlansItemAccessPlanDetails_","AccessPlan","BaseAccessPlanRow","getEditOptions","showEditScheduleOption","LockdownOperatingMode","EmberEnterpriseAccessControlLockdownConfigurationEdit","EmberAccessControlLockdownConfigurationEdit","EmberEnterpriseAccessControlAccessPlanEdit","EmberAccessControlAccessPlanEdit","getPlanStatusAndIcon","statusClass","Active","planStatusAndIcon","EmergencyLockdownModal","initiateLockdown","setSystemMode","Lockdown","systemModel","newSystemMode","setAcSystemMode","warningMessage","isInPartialLockdown","controllerListOfNames","offlineControllerNames","launchCancelLockdownConfirmationModel","baseLockdownIntlKey","Default","EmergencyLockdownBtn","showEmergencyLockdownModal","isCurrentSystemModeInDefault","buttonIcon","handleButtonClick","showCancelLockdownModal","noop_","NavigationLink","goToRouteItem","_closest","_contextManager$visit","_this$args$onClickAct","_this$args","isRootItem","resolveRouteItem","onClickAction","systemSelect_","redirectToSystemOrGroup","systemItem","isSystemParentAccountSuspended","getDealerInfo","dealerInfo","dealerName","dealerContactInfo","providerName","providerNumber","createDropdownItemForSystemItem","expandSubItemsByDefault","SystemSelectItem","selected","showSubItemsOnOpen","createEntryPointItem","linkedSystemEntryPoint","entryPointItem","transitionId","dropdownItem","SystemSelect","filterString","availableSystems","showMsaDropdown","_system$subItems","_group$description","systemAndGroup","updateAvailableSystems","resetFilterStringOnClose","singleSelect_","LanguageSelectComponent","getMessageOrigin","receiveMessage","stopProcessingMessages","console","assert","messageType","ignoreSessionTimeout","modelId","wizardEnum","timeOutMs","persistent","isWizardRunning","fnHandleWizardStopped","fnCloseModal","modalStateChanged","routeItemChanged","startsWith","checkLegacyErrorManagerMessages","redirectToIndex","transitionToUrl","transitionArguments","transitionToWizard","height","verticalScrollPosition","getEnclosureElement","modelType","log","scheduleIframeLoadingStateChanged","fnShowHideElement","element","visibility","fnSendIframeLoadingStateChanged","loadingAction","setIframeSource","iframe","loadingChanged","resetIframeParentHeight","clearIframeEvents","onload","contentWindow","onunload","tagName","classNames","classNameBindings","_this$routeData","_this$routeData2","routeDataObserver","isLoadingObserver","didInsertElement","base","fnUpdateLoading","contentDocument","colorScheme","setupOnUnload","bind","removeAllListeners","willDestroyElement","observer","sendCloseModalObserver","sendCloseModal","postMessage","srcObserver","setIframeHeight","fnGetEnclosingElementHeight","elEnclosure","getBoundingClientRect","LoadingIndicator","ContactSupportComponent","ItemComponent","TroubleConditionMute","stopAlarm","appTroubleConditionsListItem_","TroubleConditionsListComponent","ToolsComponent","SystemOkContainer","stateEnum","SchedulePauseRule","OverQuota","DataCapExceeded","useCameraArmingButtonBar","hasCameraArmingAccess","isOverUploadQuota","recordingRulePauseReasonType","UserScheduledPause","ScheduledPause","isInException","Exception","isPaused","Off","On","scheduleChoices","choiceArray","Hour","hasInternalBetaAccess","returnArray","scheduleChoice","submitCustomApiCall","resumeRuleDropdownActionItem","turnOffRuleDropdownActionItem","isOperatorSession","clear","barColor","RuleArmingStatusEnum","OutOfSchedule","OutOfVacationWatch","Paused","Armed","statusTitle","pausedUntilDateTimeUtc","getTimestampText","dateTime","dropdownTitle","dropdownTitleForCameraArmingBeta","DISARMED","ARM_STAY","ARM_AWAY","ARM_NIGHT","NEXT_DAY_TIME_START","ScheduleCard","isHalfDisarm","schedule","scheduleType","HalfDisarmSchedule","isHalfArm","HalfArmAwaySchedule","HalfArmStaySchedule","HalfNightSchedule","isHybridSchedule","HybridArmingSchedule","scheduleName","firstArmingStateIcon","getArmingIcon","secondArmingStateIcon","rearmingStateIcon","rearmingState","firstArmingText","getArmingText","secondArmingText","rearmingTimeText","isBusinessHours","translation","endMinutes","dayMinutesToTimeString","rearmingStartMinutes","daysOfWeekSelection","selectedWeekdays","selectedWeekends","buttonsDisabled","isProcessing","editSchedule","EmberArmingSchedulesAndAutoRearmingEdit","deleteSchedule","onDelete","toggleSchedule","toggleActiveStatus","isFirstState","firstArmingState","secondArmingState","armingState","startMinutes","MINUTES_IN_DAY","ActiveCardTabIndexComponent","elementsTabIndex","guidFor","homepageManager","getElementTabIndex","isKeyboardInteractive","DashboardCardsCardToolbarButtonPopup","menuOpened","menu","isKeyboard","_menu$focusSelector","focusSelector","clickMenuItem","closeMenu","DashboardCardsToolbarButtons","dashboardCardsCardToolbarButtons_","dashboardCardsCardToolbarButtonPopup_","getDeviceRefreshButton","getDeviceBatteryButton","batteryDetails","skipIfNotLow","details","isLowBattery","lowestBattery","CardToolbar","isInteractive","clickButton","button","_evt$target$closest","pointerType","menuConfig","didResize_","focusTrap_","getCardSelector","cardId","ContainerCard","returnFocusOnDeactivate","escapeDeactivates","elementCss","isHomeCard","adjustCardSizing","fontSize","offsetHeight","offsetWidth","isHero","opacity","activateFocusTrap","isFocusTrapActive","firstElement","isEscapeCode","setActiveCardId","checkActiveCard","dashboardCardsDevicesPromptCard_","dashboardCardsDevicesDeviceIcons_","dashboardCardsDevicesDeviceList_","dashboardCardsDevicesHiddenEditState_","dashboardCardsDevicesEditState_","AccessControlAccessPointDevicesComponent","AccessPointCard","ICON_DOOR","EmberAccessControlAccessPointDevices","showRefreshButton","getAccessPointStateText","getDeviceEditActions","_actions$device$desir","refreshAction","getRefreshDeviceAction","getAccessPointStateCSS","iconType","canBuzz","canLockUnlock","Hidden","desiredState","getDeviceItemAction","BaseDeviceCard","EmberLocationsLocationAccessPoints","drillToDetailsRoute","_this$args$locationId","enterpriseDetailsRoute","locationId","BaseCard","showDrillToDetailsButton","detailsRouteId","leftToolbarButtons","commonLeftToolbarButtons","rightToolbarButtons","commonRightToolbarButtons","_device","startDeviceEditing","endDeviceEditing","isLocked","clearCloseClickListener","editDevice","cardDevices","deviceIndex","isAlwaysListView","isIconCard","level","isLow","showBatteryButton","batteryButton","getDeviceModalButton","detailsRouteItem","editRouteName","getEditDeviceRouteButton","editDeviceActions","isEditingState","closeTargetInfo","isInUnknownState","editDeviceState","canChangeState","isDemoDevice","attachCloseHandler","verifyCloseTarget","canReceiveCommands","remoteCommandsEnabled","hasPermissionToChangeState","saveDeviceState","getUnknownState","closeEditState","BaseDeviceView","_this$args$editDevice","keyUpHandler","iconsCirclesCircleFill_","iconsCirclesDeviceStatus_","dashboardCardsLabelledbySpan_","DeviceIcons","showStateText","_this$args$showStateT","allDevicesLoaded","_this$args$devices","labelCss","_this$args$devices$le","_this$args$devices2","singleDevice","isLightDevice","_this$args$devices3","DeviceList","showScrollIndicator","toggleClassOnElement","disableKeyboardInteraction","DashboardCardDeviceListRow","reqState","EditState","changeState","itemAction","GARAGE_CSS","GarageCard","ICON_GARAGE","EmberGarageDoors","HiddenEditStateComponent","LockCard","ICON_LOCK","EmberLocks","lockModel","canRefreshState","_Unknown$Locked$Unloc","supportsLatchControl","Locked","Unlocked","openRequestTemporaryAccessCodeModal","openRequestCodeModal","canRequestTemporaryAccessCode","totalTemporaryAccessCodes","DashboardCardsDevicesPartitionCardBypassModal","sensors","isBypassed","allBypassed","toggleSelectedState","saveChanges","bypassed","notBypassed","update","autoFocus_","DashboardCardsDevicesPartitionCardIssuesOverlay","goToAlertsIssues","clearIssues","partition","clearPanelFaults","ARMING_ACTIONS","PartitionHiddenEditStateComponent","armingActions","dashboardCardsDevicesPartitionCardIssuesOverlay_","dashboardCardsDevicesPartitionHiddenEditState_","ARMED_AWAY","defaultArmingPayLoad","forceBypass","noEntryDelay","silentArming","nightArming","selectiveBypass","forceArm","DashboardCardsDevicesPartitionCard","ICON_PARTITION","EmberPartitions","EmberLocationsLocationPanel","bypass","unbypass","firstDevice","resetCheckboxPayload","hideOverlay","EmberPartitionsSmartArming","rules","isFrontPoint","allSensors","areAnyBypassed","isDisabled","isArmed","canBypassSensorWhenArmed","getArmingOptions","SelectivelyBypassSensors","bypassSensors","showOverlay","_this$partition","needsClearIssuesPrompt","changeArmingState","partitionModel","armingOptions","selectedArmingOptions","cfg","allArmingOptions","fnChange","_model$data$attribute","restrictedAccessOfflineControllers","showControllerOfflineError","controllerNames","nameList","controllers","_this$editDevice","isSystemDisarmed","validArmingStates","disableArmedAway","disableArmedStay","isSystemUnknown","_this$partition2","_partition$extendedAr","extendedArmingOptions","allArmingStates","BypassSensors","useAlternateForceBypass","isDisarmedOrHiddenState","getInitialCheckboxState","armingOptionId","isChecked","ForceArm","hasForceArm","updateArmingOptions","selectedOptions","invalidExtendedArmingOptions","fnIsOptionDisabled","_invalidExtendedArmin","_extendedArmingOption","combo","PromptCard","cardCss","isPromptOpen","LabelledbySpan","ComfortSlider","hasValidData","lowerTempBound","upperTempBound","temperatureValue","isNumber","normalizedTemperatureValueX","_position","totalDelta","position","rectWidth","rectX","max","normalizedPointerX","pointerWidth","dashboardsThermostatsComfortSlider_","DashboardsThermostatsComfortView","displayMode","ThermostatStatusMap","severityStatus","UnknownSeverity","updateTestData","dashboardsThermostatsHighlightStatistic_","CyclingHighlightStatisticComponent","hasValidLongCyclingData","_this$args$numLongCyc","numLongCycles","hasValidModeCyclingData","_this$args$numModeCyc","numModeCycles","trimNumber","highlightedValue","topString","getDisplayModeKey","heat","cool","bottomString","uiCircleGauge_","dashboardsThermostatsHighlightStatisticHourMinuteHighlightStatistic_","dashboardsThermostatsHighlightStatisticCyclingHighlightStatistic_","DashboardsThermostatsCycleView","avgCycleRuntimeForMode","numLongCyclesForMode","numCyclesForMode","hasValidCycleRuntime","displayMax","_this$model$severeLon","severeLongCyclingThreshold","avgCycleTimeTitle","DashboardsThermostatsDetailView","dashboardsThermostatsDetailView_","DashboardsThermostatsDetailViewContainer","DashboardThermostatsEfficiencyView","Heat","isHeatMode","imageSource","HourMinuteHighlightStatisticComponent","totalMinutes","integerHours","getHours","DashboardsThermostatsHighlightStatistic","DashboardsThermostatsRunTimeView","totalRuntimeMinutes","hasValidTotalRuntime","severeLongRuntimeThreshold","totalRuntimeTitle","modalsEnterpriseGroupsBaseManageGroupsModalWrapper_","RenameSystemGroup","onModalSave","refreshAvailableSystems","isValidGroupDescription","renameGroup","newName","descriptionError","openRenameGroupModal","instructionsTextResource","placeholderTextResource","RenameSystemGroupModal","placeholderResource","newGroupDescription","trimmedName","_this$login","_this$login2","_loginRolesItems$iden","_loginRolesItems$this","_loginRolesItems$iden2","identifierId","role","_loginRolesItems$this2","NO_DIRECT_ACCESS_LOGIN_ROLE_ID","setSelectedRole","_this$login3","_loginRolesItems$iden3","rerenderRole","isPrimaryLoginForSystem","_this$login4","_loginRolesItems$iden4","isSystem","originalRole","Owner","partiallySelected","_this$login5","_this$childItems$leng","_this$childItems","childItem","canRenameOrDelete","getMenuItems","isSystemlessGroup","deleteOption","systemGroupsManager","deleteSystemGroup","canInheritRole","dateRangePicker_","FiltersDateTimeRangeFilter","smartDate_","FiltersDateTimeFilter","changeDateTime","debounceTask","changeSearchByDateOnlyFlag","dateTimeFilter","filtersDateTimeRangeFilter_","uiIconTooltip_","pikadayInput_","filtersDateTimeFilter_","FilterPanelComponent","HelpTourModalComponent","cssClassWithSize","_this$data$cssClass","_this$data","cssClasses","sizeClasses","shouldShowButtons","isPrimary","showButtons","show","stop","HIGHLIGHT_POINTER_CLASS","addElementMask","transparent","containerElement","elementHasPointerEvents","padding","fnCreateSvgElement","createElementNS","svg","class","rect","containerData","containerEl","isWindow","width","svgLeft","svgTop","svgHeight","svgWidth","innerHeight","left","top","fnGetContainerData","isWindowContainer","elementData","diff","isInModal","toggle","fnGenerateRectangle","g","HelpTourComponent","setHelpTourComponent","closeCurrentStep","nextStep","currentStepType","elementWithHighlightPointer","wasPopover","elementMask","elementToHighlight","showStep","newStep","_model$stepOpened","modalData","svgMask","isModal","highlightElement","showHighlightPointer","isMobile","scrollIntoView","scrollIntoViewIfNeeded","getHighlightSelector","EmberObject","onBeforeOpen","onAfterClose","beforeIsStepAvailable","isStepAvailable","beforeStart","DrawChartModifier","Modifier","_this$chartInstance","chartInstance","destroy","cleanup","optionsForAllCharts","isPrefersReducedMotion","chart","animation","numberFormatter","number","decimals","fmtOptions","numDigits","minimumFractionDigits","maximumFractionDigits","clamp","credits","enabled","lang","numericSymbols","plotOptions","series","getTimezoneOffset","msSinceEpoch","getTimezone","tzParseTimezone","NUM_MILLISECONDS_IN_MINUTE","modify","positional","named","highcharts","isHighchartsInitialized","initializeHighcharts","drawChart","renderStateDataAttr","removeAttribute","chartOptions","merge","render","highchartsOptions","ts","setOptions","AST","allowedTags","dateFormats","C","drawChart_","Color","HighchartsSimpleChart","brandedChart","defs","x1","y1","x2","y2","children","offset","styledMode","useAdcBranding","module","_this$args$onHighchar","_this$args$onHighchar2","onHighchartsImported","_this$args$useAdcBran","IconCircleFill","circleIcon_","coalesce_0","ICON_ACCESS_CONTROL","ICON_SENSOR","ICON_WATER_SENSOR","ICON_WATER_VALVE","ICON_SUMP_PUMP","ICON_WATER_METER","ICON_LIGHT","ICON_THERMOSTAT","ICON_TEMPERATURE","ICON_SHADES","ICON_GATE","ICON_SWITCH","ICON_NOISE_SENSOR","ICON_MPERS_DEVICE","ICON_ADDL_ACCESS","ICON_FOG_DEVICE","ICON_ELEVATOR","STATE_HIDDEN","DeviceStatus","useHd","_this$args$useHd","computedIconName","stateCSS","pairedWaterMeter","inListView","displayIssueIcon","_device$getStateIcon","_device$getStateIcon2","managedDeviceIcon","getStateIcon","uniqueIconType","lightCustomIcons","deviceCSS","iconState","fnStateCSS","getSumpPumpStateCSS","getSensorStateCSS","getWaterMeterStateCSS","getWaterSensorStateCSS","getShadeStateCSS","getGateStateCSS","getSwitchStateCSS","getNoiseSensorStateCSS","getMpersDeviceStateCSS","getSFGStateCSS","NewRulesModal","transitionToCreateRule","routeID","NewVideoSchedule","NewRules","createSchedule","videoSchedule","SvrRecordingSchedule","addEditRouteId","addEditPageQueryParameters","EmberVideoSelectSvrSchedule","EnterpriseGroupsBaseManageGroupsModalWrapper","CalibrationSnapshotInfoModal","doneButton","modalsBaseBaseModal_","sitePrefix","cookieName","Cell_download_default","selectedFormatId","token","toUTCString","fnIsOpen","modalIsOpen","DownloadOptionsModal","downloadFile","success","JSON_REQUEST","correlatedId","tokenDownloadTime","totalMediaSizeInMB","toFixed","formatItems","_this$args$model$form","shouldCacheFormat","fmt","videoDownloadFormat","downloadMedia","initiateDownload","updateSelectedFormatId","NewsUpdates","newsUpdates","didReceiveAttrs","ServiceAppointmentsHeader","showConfirmationModal_","ServiceAppointmentsApptCard","deleteAppointment","backgroundReload","serviceAppointmentsApptCard_","ServiceAppointmentsRequestList","sortedRequests","_this$args$requests$s","_this$args$requests","createAppointment","SettingsMonitoringStationPropertyNotesSimpleList","_this$args$items$","deleteNote","noteID","deletePropertyNote","noteName","SmartCoverageDiscountCard","discountData","discount","SimpleListItem","subtitle","discountMapping","SmartCoverageDiscountType","Security","Fire","WaterShutoffValve","ShooterDetectionSystem","WaterSensor","discounts","_discountMapping$disc","SmartCoverageRedirectNotificationButton","UnitIds","eligibleUnitIds","PolicyType","policyType","Source","customerSource","isNoPropertySelected","selectedUnitIds","getQuoteBtnClick","isPropertySelection","resizableOnMobile","EmberSmartCoverageSelectProperties","mktsrc","TimezoneSelector","dropTask","getTimezoneList","initialTimezone","selectedTz","selectedTimezone","timezoneList","timezoneDropdownItems","intlId","desc","_timezones$value","timezones","selectNewTimezone","newTimezone","timezoneId","UiActionableCard","transparentButton","_this$args$transparen","UiBadgeLabel","UiBlueDot","strokeWidth","gaugeAreaSide","fullGauge","circumference","getDasharray","fillValue","CircleGaugeComponent","normalizedCeiling","parseFloat","displayIndicatorKey","showIndicatorDescription","indicatorValue","arcCenterX","isRtl","gaugeArcs","fullDasharray","valueDasharray","indicationValueDasharray","colorStyle","indicatorDashOffset","gauges","strokeDasharray","strokeOffset","lowColorMax","mediumColorMax","ceiling","transform","rotateDegrees","centerX","centerY","normalizedValue","_normalizedValueHelper","normalizedIndicatorValue","highColor","showHighColorFill","lowColor","mediumColor","animationCSS","getAnimationCSS","animationState","updateErrorState","UiColoredIcon","getPage","getComputedPages","scrollOffset","elBox","ulBox","viewportStart","right","viewportWidth","pages","li","end","previousPage","pop","HorizontalList","currentIndex","_this$_currentIndex","_currentIndex","activePage","pageIndex","listTransformStyle","obscureList","scroll","direction","updateTrapFocusHandler","isTrapFocusActive","ensureItemIsVisible","updateCurrentIndex","updateListPagePositions","listResized","isFirstResize","toolTip_","UiIconTooltip","handleKeyUp","isTooltipVisible","modalFooterButton","uiImagesStatelessImage_","isFulfilled_","StateImage","sourceIsLoading","loadHasFailed","showProgressIndicator","errorState","imageLoadComplete","imageLoaded","imageLoadFailed","imageFailed","checkImage","_this$imageSource","StatelessImage","computedImageStyle","imageStyle","imageHasFailed","imageHasLoaded","ProgressBar","barSizeCss","barSize","barColorCss","cssThreshold","goodThresholdValue","bestThresholdValue","textValue","maxTextValue","progressStyle","EMAIL_FORMATS","plainText","TextOnly","html","HtmlAndText","PHONE_TYPE_OPTIONS","home","Home","work","Work","PhoneMobile","other","PATH","EditContactInformationComponent","ContactTypeEnum","Email","Mobile","Phone","addressRolesStrings","addressRoleStrings","addressRoles","addressRole","LoginPrimary","TwoFactorAuthentication","loginContactAddressDescriptionText","_this$contactAddress$","isAddressReadOnly","isPhone","isEmail","addressTypePath","addressLabel","addressPlaceholder","phoneTypes","emailFormats","countryListItems","countries","country","countryName","carriers","getCarriersForSelectedCountry","disableCarrierSelect","countryChanged","selectedCountry","carrierKeys","defaultProvider","providerId","UserAvatarComponent","isEnterpriseUserInSingleSystemContext","isPointCentralResidentViewingSelf","_user$isDuress","userIcon","forceShowIcon","Duress","_this$args$user$avata","_this$args$user","avatar","usersItemUserAvatar_","uiBadgeLabel_","await_0","fnDelete","_user$displayName","_user$deviceAccess","userName","fnGetTranslationValue","confirmDeleteKey","selectedUnchangeablePartitionAccessPoints","BaseUserItemComponent","pauseClass","isResidentVisitor","isAccessPaused","adDisabledOrDeleted","pauseText","lastPauseDate","shareUserService","shareUser","accessSummaryBadge","shouldLoadAccessPointInformation","accessSummaryBadgeNormal","accessSummaryBadgeEnhancedPerformance","getAccessSummaryBadge","extraInfo","isPanelMaster","isPointCentralSTR","isAllAccessUser","hasExistingPlusFutureAccess","hasTemporarySchedule","_this$deviceAccess","isExpired","_this$user","isAccessControlUser","editOnItemClick","anchorSelector","canPauseUnpause","accessControlPausedContacts","showNativeShareOption","showAllSharingOptions","shouldShowShareUserCodeButton","canPromoteUser","canShowPromoteUserOption","isGuestOrResident","Resident","canMergeUser","canBeMerged","canLoginMergeUser","DeleteActionItem","_this$afterUserDelete","EditActionItem","editUser","shareUserCode","shareUserCodeSms","pauseUnpauseUser","navigateToPromoteUser","navigateToMergeUser","visible","ActionItem","pause","EmberEnterpriseAccessControlUserPromoteUser","EmberAccessControlUserPromoteUser","errorReason","EmberEnterpriseAccessControlMergeUsersList","EmberEnterpriseMergeUsersList","EmberAccessControlMergeUsersList","EmberMergeUsersList","SpinnerSize","UsersLoadingSpinner","loaded","inFlight","Large","Medium","spinnerSize","isItem","VideoClipsActionMenu","videoClipsActionMenu_","VideoClipsActionToolbar","VideoClipsAnalyticsIcon","willDestroy_","muteCookieName","PlayableMedia","isPlaying","isMuted","videoSource","getPlaybackUrl","isVideo","VideoEvent","syncPlayState","play","currentTime","timestampToStartClip","skipBack","skipForward","selectVideo","videoItem","indexDifference","videos","videoToPlay","MultiClipPlayer","fullScreenButton","isFullscreen","speeds","playbackSpeed","currentVideo","canSkipForward","canSkipBack","playVideo","selectedVideo","adjustSpeed","playbackRate","syncVideoState","changePlaybackSpeed","speed","videoCanPlay","stopStreams","updateMuteState","muted","selectPreviousVideo","selectNextVideo","toggleFullscreen","switchToFullScreen","setupListeners","evtHandles","addWeakListener","tearDownListeners","_this$evtHandles","contextMenuHandler","isContextMenuEnabled","Info","isOnVVorEE","mediaItem","clipDuration","totalSeconds","clipDurationMs","trunc","seconds","videoClipsSavedClipInfo_","uiImagesStateImage_","VideoClipsSavedClip","videoClipsAnalyticsIcon_","videoClipsMultiPlayer_","automationRulesRuleCollectionPauseBar_","videoClipsSavedClip_","uiHorizontalList_","VisualVerificationOperatorSite","EscalatedEventsOperatorSite","VideoItem","environment","isScreenRecording","clipDescription","retrieveRuleItem","_this$currentVideo","ruleId","transitionToSD","transitionToSVR","emptyContainer_","videoRulesDrawWindowPlayersPlayerInfo_","VideoRulesDrawWindowPlayersSnapshot","refreshRate","snapshotAltText","onReloadImage","milliseconds","reloadSnapshotLater","videoRulesDrawWindowPlayersSnapshot_","videoRulesDrawWindowPlayersAnalyticsLiveViewPlayer_","iconFill_","DARK_GREEN","DARK_BLUE","DARK_ORANGE","SHAPE_0_STYLE","strokeStyle","fillStyle","SHAPE_0_POINT_ARROW_STYLE","SHAPE_1_STYLE","SHAPE_1_POINT_ARROW_STYLE","SHAPE_2_STYLE","SHAPE_2_POINT_ARROW_STYLE","getShapeStyleByIndex","VIDEO_COMPONENT_CLASS","CANVAS_CLASS","redrawAll","canvas","canvasContext","allDrawings","selectedDrawingIndex","closeShape","shapeOfDrawing","clearShape","isLine","Line","denormalizedPoints","denormalize","draw","selectedDrawingDirection","shapeIndex","drawCorners","shapeStyle","shapePointArrowStyle","drawShape","drawSingleCornerPoint","ANALYTICS_POINT_SIZE","drawArrow","showEnterExitText","setShapeResizeProperties","pointsToDraw","normalizedPoints","setNormalizedPoints","pointsForAdjustedCanvas","userHasInteractedWithDraw","resizeMove","canvasHeight","canvasWidth","dictionaryOfDrawings","resizeShapeInfo","getCoordinates","Rectangle","cornerAIndex","cornerBIndex","resizeEnd","drawingCompleted","warningZones","warningZoneInstructions","movedPointIndex","oldPoints","oldNormalizedPoints","pointsForValidRes","resolutionWidth","resolutionHeight","draggedPointError","pointValidation","shapeIntersectsWarningZonesValidation","drawingInstructions","shiftMove","moveShape","shapeShiftInfo","clearDrawingInstructionsOnDesktop","shiftEnd","lastX","lastY","normalize","moveDraw","computeRectanglePoints","startDrag","cX","cY","validResX","validResY","cornerIndex","arePointsClose","move","isPointInShape","mouseX","mouseY","lastValidDeltaX","lastValidDeltaY","startDraw","isTouch","attachCanvasEvents","evtStart","evtMove","evtEnd","fnStartEvent","touches","which","setPoint","detachShapeListeners","clientX","clientY","constrainRange","listeners","setUpCanvas","videoPlayer","didClearCanvas","initialLoad","defaultEntireFieldOfView","canEditPoints","drawingIndexes","aspectRatio","maxAllowableWidth","supportsMultipleDrawings","drawDefaultShapeOnInit","allPointsInitiallyEmpty","getContext","canvasAndButtons","playerInfo","disabledOverlay","clientWidth","cssText","clientHeight","getDefaultAnalyticsShapePoints","editShapeInstructions","infoModalInstructions","LeftToRight","setDrawingCompleted","isAutoComplete","maxPoints","supportsAutoComplete","CustomShape","isRectangle","MINIMUM_NUMBER_OF_GROUND_ZONE_POINTS","getMouseCoordinate","resolutionPoint","drawingErrorMessage","newPointValidation","shapeIsComplete","newNormalizedPoints","normalizedWarningZones","warningZone","Drawing","DrawWindow","_dec28","_dec29","AnyDirection","_dec30","_dec31","displayGroundZoneDurationOptions","supportsDurationAreaOfInterest","displayTripwireDirectionOptions","hideDirectionToggle","shapeIconForDrawingSelectButtons","selectedDrawingButtonsDisabled","allDrawingsEnabled","selectedDrawingButtons","onClearShape","onSelectDrawing","shapeResourceForSelectedDrawingButtons","drawingHasPoints","primaryIcon","primaryIconColor","secondaryIcon","secondaryIconAction","secondaryIconText","selectedDrawing","setDirection","setDuration","mobileDrawingHeaderText","resource","infoModalLearnMore","infoModalLearnMoreOverride","shouldDisplayDrawingInstructions","inlineAlertTypeForDrawingInstructions","newShapeInstructions","moreInfoModalData","moreInfoModalDataOverride","maxPointsOverride","isUsingOvBatteryAnalytics","MAXIMUM_NUMBER_OF_POINTS_FOR_BATTERY_ANALYTICS","MAXIMUM_NUMBER_OF_GROUND_ZONE_POINTS","MAXIMUM_NUMBER_OF_RECTANGLE_POINTS","MAXIMUM_NUMBER_OF_TRIPWIRE_POINTS","editShapeInstructionsOverride","newShapeInstructionsOverride","drawNewShape","customShape","customShapeFinish","entireFieldOfView","detectionDurations","detectionDurationOptions","shouldShowDrawingInstructionsOnCanvas","hideCanvas","displayClearButton","clearButtonText","clearButtonTextOverride","maxHeight","maxWidthBasedOnAspectRatio","sqrt","verifyDrawingIndexAssumptions","deviceModel","firmwareVersion","sentryExtras","sentryTags","fullErrorMessage","hasLineDrawing","resizeListener","clearSelectedShapeEventListener","drawWindowEventBus","EVENT_CLEAR_SELECTED_DRAWING","onWillDestroy","hasIndexesLt0","hasIndexesGteLength","reIndexedDictionaryOfDrawings","oldIndex","arrayIndex","didRender","shouldShowDisabledPopover","keyPressed","newDrawing","onDetectionDurationChange","detectionDuration","onSwitchDirections","usingAnyDirection","RightToLeft","onBothDirectionsClicked","toggleDrawingEnabled","toggleDrawingsDisabledPopover","showMoreInfoModal","logEventIfHasNoOvRules","AnalyticsRulesLearnMoreModalOpened","liveVideoPlayer_","videoVideoPlayerOverlay_","AnalyticsLiveViewPlayer","BaseLivePlayer","StreamUsage","LiveViewAnalytics","analyticsDeviceId","guid","canStreamVideo","NoPermissions","errorEnum","disconnectedButtonText","isDisconnected","hasStreamTimedOut","hasAutoplayFailed","onAttachToOespController","playbackStateController","setupPlayers","useHdStream","startOespLiveRelay","setOespProperties","hasStreamConnected","playerCount","onRetry","webrtcPlayerId","getPlayerId","BaseVideoIdPrefix","initializeVideoSource","task","VideoRulesDrawWindowPlayersPlayerInfo","SHOW_MESSAGE","CLEAR_MESSAGE","RESUME","PAUSE","SEEK","SET_SPEED","RESET","commandNames","PlayersControl","playerCommands","Map","commandName","_baseFunction","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_shouldRunControllerC","playerCommandFunctions","playerFunctionsFailed","shouldRunControllerCommands","_len8","_key8","playerCommandFunction","returnValue","runControllerCommands","controllerFunctionFailed","controllerCommands","deletePlayerCommands","cameraIndex","updateCommands","commandFunctions","commandFunction","resetStreamStatus","shouldResetEndToEndStreamFailed","endToEndStreamFailed","retriedDirectAfterMidstreamIssue","cachedWebRtcLogId","connectionStartTime","currentVideoSource","endToEndWebrtcConnectionInfo","proxyWebrtcConnectionInfo","hasWebrtcIceNegotiationFailed","janusToken","playerState","INITIALIZING_STATE","playerUrl","webRtcLogId","shouldRetryEndToEndMidstream","isEndToEndStreamUsingTurn","haveReceivedWebrtcStats","changeStreamQuality","isMjpeg","currentStreamIsEndToEnd","webrtcStateController","playerUsage","OESP","setStreamQuality","showWarningSoundTourIfFirstTime","shouldShowWarningSoundHelpTour","canSirenBeActivatedByLogin","onWarningSoundTourShown","showWarningSoundHelpTour","tourTextKey","getWarningSoundTourAnchorAndText","warningSoundButtonStep","forceShowWarningSoundForHelpTour","WarningSoundFeatureTour","playerIdHtml","playerElementId","handleEndToEndMidstreamReconnection","hasStreamRestartedMidstream","attemptProxyReconnection","forceProxy","forceEndToEndFromQueryParam","setDisconnectedState","connectedThroughProxy","_this$camera$turnOffI","_this$camera","_this$onPlayEndedForC","WebRtcIceNegotiationFailed","LiveStreamTimeout","StreamDisconnected","AutoplayFailed","shouldForceEndToEndWithExtendedTimeouts","StunReconnectionFailed","LiveStreamConnectionFailed","didTwoWayAudioConnectionRefresh","displayPanTiltOptions","displayPanTiltPopover","forceProxyAfterDbRefresh","retriedDirectAfterMidstreamIceFailure","hasIceFailedAgainUponMidstreamReload","cameraSpeakerAlreadyInUse","displayAssociatedDevicesActionPopover","displayOperatorAudioNotAvailablePopover","cameraRetriedInOperatorSite","DISCONNECTED_STATE","internationalWebRtcEvent","Disconnected","onPlayEndedForCamera","turnOffInactiveCameraLights","ForcedStreamingMethodEnum","ForceWebRTCProxy","ForceWebRTCEndToEnd","ForceOESP","LOADING_STATE","PLAYING_STATE","FROZEN_STATE","BaseVideoPlayer","LiveView","cameraRequestPromise","failedWakeUpBatteryCamera","isLoginAsLogin","cannotDoBrowserUploadsForOperatorSite","hasGoneToPanTiltPreset","currentPreset","forceProxyFromQueryParam","forceEndToEnd","forceOespFromQueryParam","forceOesp","getVideoSource","streamingProperties","reloadVideoSource","apexConnectionInfo","createCurrentWebrtcStateController","areMicrophonePermissionsEnabled","areMicrophonePermissionsAllowed","apexId","oespControllerUpdateResult","getOrCreateOespControllerWithUpdate","playbackStateControllers","forcedStreamingMethodFromQueryParam","apexProxyToken","isMicrophoneConnected","supportsAudio","preferredPanTiltPreset","selectPreset","canPanTilt","FULL_PTZ_PRESET","supportsSiren","isSirenPlaying","sirenInfo","updateWarningSoundDisplayTask","waitForCameraResponse","playerType","playerId","shouldTimeoutEndToEndStream","isStreamingEndToEnd","onPlayStarted","_this$onPlayStartedFo","enableRetryEndToEndMidstreamTask","toggleHdStream","isProxy","isVirtualCamera","WebRTCWaveFrontApiEndpoint","onPlayStartedForCamera","onTimeout","onCameraTimeout","onPlayEnded","onAutoplayFailure","onIceFailure","onFrozen","streamStuckAtFrozen","onCameraSpeakerAlreadyInUse","attemptedDirectAndProxy","usesOesp","attemptedDirectStream","usingWebRtc","usingQueryParam","shouldNotAttemptProxy","attemptProxy","hasBlockedMicrophoneAccess","MICROPHONE_ACCESS_COOKIE_NAME","physicalPtzPosition","panTiltX","panTiltY","zoomLevel","beforeUnloadEventListener","_this$camera$turnOffI2","_this$camera2","addEventListener","willDestroy","_this$camera$turnOffI3","_this$camera3","_this$webrtcStateCont","_this$onPlayEndedForC2","removeEventListener","beforeUnloadEventLisetner","retryConnection","PlayerRetryConnection","_this$envSettings$get","WebrtcEndToEndStateController","WebrtcProxyPlaybackStateController","NoForcedStreamingMethod","MAX_XXSMALL_PLAYER_WIDTH","MAX_XSMALL_PLAYER_WIDTH","MAX_SMALL_PLAYER_WIDTH","MAX_MEDIUM_PLAYER_WIDTH","getRelativeDirections","RelativeDirection","Left","down","Down","Right","up","Up","in","In","out","Out","reset","Reset","doOnPlaybackControllers","WebRtcProxyPlaybackStateController","commandSucceeded","playing","seek","resetPlayers","warn","getPlayerSize","playerDimensions","_playerDimensions$wid","PlayerSize","XXSmall","XSmall","Small","updatePlayerState","newState","NoError","streamConnectionErrorEnum","loadingPercentage","forceDbRefreshOrAttemptProxy","shouldRestartPlayer","restartCount","getGlobalDeviceIdFromPlayerId","incrementProperty","setWebStreamingLogType","Svr","webStreamingLogType","WebStreamType","SDCard","SdCard","LiveViewFieldOfView","logToSentryIfTimingMetricIsNegative","streamIceCompletionTimeMs","streamConnectionTimeMs","streamStartTimeMs","sentryWithScopeAndWarn","MJPEG","WebRTC","isEndToEnd","currentPosition","dynamicVideoPlayerDimensions","yieldTime","digitalPtzPosition","digiPtzPanRightPercent","digiPtzPanDownPercent","digiPtzZoom","scale","percentPanValues","convertAbsolutePtzValuesToPctBased","panDownPct","panRightPct","newPtzParams","usageProtocolMapping","propertiesObserverTrigger","commands","functions","commandFunctionName","relativeDirections","hybridSwapIconToShow","isCameraExpanded","layoutProperties","viewIndex","isHybridWide","layoutType","HybridView","OnePlusFiveView","OnePlusSevenView","TwoPlusEightView","FourPlusTwoPlusFourView","playerSize","setZoomPanOverlaySelector","zoomPanOverlaySelector","computedStreamName","cameraMac","streamName","webrtcStreamingType","StreamingTypePlayback","StreamingTypeLive","oeShouldMuteAudioInfo","oeAudioInfo","player","svrId","shouldMutePlayer","playerIdWithAudio","shouldMuteSVR","svrIdWithAudio","showMessage","clearMessage","onInitialize","onPlayPaused","_this$updatePageAndPl","READY_STATE","_globalDeviceId","_playerId","_args","_this$updatePageAndPl2","onPoorStartingConnection","onToggleFullSize","onProgress","_this$updatePageAndPl3","percentage","onStreamStatus","streamStatus","isRefreshingCameraFromDb","connectionStartTimeForLogging","isInitialLog","iceStartTime","iceCompletionTime","usedTurn","signallingServerUrl","signallingServerNode","streamStartTime","logAttributes","disconnectionReason","globalId","isLogFromMidstreamRestart","retries","webrtcStreamType","direct","isUserCausedDisconnection","mac","firmware","logsArray","hasPlayerDisconnected","connectionResult","lastResponse","EndToEndFailedNoFallback","EndToEndSucceeded","FallbackAndFailedProxy","FallbackAndSucceededProxy","ProxyFailed","ProxySucceeded","isOneMinuteUpdateLog","logId","oeLogId","directFailureReason","relayFailureReason","selectedCandidatePairTypes","oeStats","oeStreamType","onFailedToConnect","onError","shouldRestartWebrtcModule","errorMessageIntro","allowAdvancedWebrtcTroubleshooting","onUpdateOsd","osdProperties","isTimeout","isEndOfStream","webRtcEvent","eventName","matches","Initializing","Connecting","Playing","FailedToConnect","TimedOut","PlayerError","AutoplayFailure","IceFailure","Log","Frozen","PoorStartingConnection","CameraSpeakerAlreadyInUse","oespEvent","UpdateOsd","toggleFullSize","isFullSize","digitalZoomPan","digitalZoomPanMethod","attachDigitalZoomPanMethod","_this$digitalZoomPanM","topLeftValues","convertPctBasedPtzValuesToAbsolute","zoomPanLimitationsUpdated","limitations","saveDigitalZoomLevelTask","toggleDetailedOsd","hasDetailedOsdEnabled","syncDewarpConfig","dewarpConfig","oespPlaybackStateController","retryEndToEndWithAudioRequest","forceEndToEndWithExtendedTimeouts","_this$updateShouldFor","updateShouldForceEndToEndWithExtendedTimeouts","mediaDevices","getUserMedia","audio","getTracks","track","addDays","CENTER_PTZ_PRESET","CENTER_PRESET_ZOOM_AMOUNT","BaseVideoOverlay","hasReachedEndOfStream","panTiltPopoverAnchorSelector","_this$args$camera","buttonSelector","usePanTiltAnchor","disconnectedButtons","supportsDisconnectedButtons","DataUsageCritical","moreThanOneCameraTimedOut","showTroubleshootButton","requestMicrophonePermissionsAndRetry","openMicrophonePermissionInfoPage","retryAllTimedOutCameras","retry","addTroubleshootButton","shouldHideTroubleshootingWizard","troubleshoot","isOespPtzOverlayEnabled","has3PCPanTilt","has3PCZoom","fisheyeMode","FisheyeMode","Ptz","fisheyeModes","has","ptzUsage","WebRTCAdvancedTroubleshooting","currentRouteId","macAddress","returnEnumId","InstallAdvancedTroubleshootingVideoGeneric","PlayerTroubleshootConnection","togglePanTiltOptions","displayCameraButtonsPopover","toggleMoreOptions","reportStreamingErrorToWaveFront","oespPtzOverlay_","zoomPanOverlay_","uiProgressBar_","getSizeStyleClassFromPlayerSize","getErrorMessageStringFromEnum","smallPlayerSize","DeviceNotFound","DeviceNotConnected","PlaybackStreamTimeout","NoPlaybackVideoAvailable","PlaybackEnded","PlaybackServerConnectionFailed","PlaybackStreamConnectionFailed","SdCardNotWorking","SdCardRemoved","StreamNotAvailable","RecentlyAddedRecordingSchedule","SdCardHasRecordingsFromAnotherCamera","SdCardNotSupported","SdCardHasRecordingsFromAnotherCustomer","SdCardIsBusy","SdCardNotSupported4Mp","VideoPlayerOverlay","isHoveringOrClicking","setIsHoveringOrClicking","isLoadingAndNotInGap","isInGap","initializingText","translationString","progressBarSize","svgIcon","handleMouseAction","handleMouseActionTask","updateOverlaySize","WebrtcStreamingDetailsModal","webrtcStreamingKnowledgeBaseUrl","isStreamingInfinitelyUsingStun","urlHash","WebRTCStreamingEndToEnd","timeoutMinutes","isOeStream","isCameraLowDataMode","modalButtons","tryDirectConnectionButton","WebRTCStreamTypeButtonRefreshedStream","okButton","VideoPlayerButtonsArrowButton","videoVideoPlayerOverlayPlayerButtonsArrowButton_","uiBlueDot_","ButtonPanTilt","ButtonRequestRecordingAndSnapshot","ButtonDownload","ButtonSettings","ButtonMoreOptions","ButtonDetailedOsd","ButtonDeterrent","ButtonAdvancedVideoSearch","ButtonOperatorLastViewed","ButtonOperatorAudioNotAvailable","ButtonAssociatedDeviceActions","ButtonLight","ButtonPixelsWide","createButton","classPrefix","shouldDisable","transitionToSettingsRoute","enabledButtons","canViewSettings","transitionToSettings","WarningSoundAndLightButtonsSection","clickWarningSound","lightState","lightAction","isWarningSoundOn","warningSoundLabelKey","warningSoundCssClass","warningSoundLabel","isWarningSoundDisabled","isWarningSoundVisible","isLightOn","lightIconKey","lightLabelKey","lightCssClass","lightLabel","isLightDisabled","isLightVisible","supportsLight","warningSoundAndLightButtons","PlayerButtons","idForPlayerButtons","linkToOtherStreamingPage","areButtonsInPopover","isLiveVideo","neverEllipsizedButtonsToDisplay","pageEnum","captionResource","hasSvrSchedule","EmberVideoSvrTimeline","EmberEnterpriseVideoSvrTimeline","getContextAwareSvrTimelinePage","EmberSDCard","hasSdRecordingSchedule","EmberEnterpriseVideoClips","EmberVideoClips","caption","EmberVideoLiveView","EmberEnterpriseVideoLiveView","webRtcStreamTypeButtonContent","dataUsageMode","DataUsageModeEnum","LowDataMode","availableButtonSections","canZoomPtzOut","isDownloadTaskRunning","operatorAudioNotAvailableButtonContents","ptzIsPhysical","panTiltIcon","warningSoundAndLightButtonsSection","isSectionVisible","clickAssociatedDevicesActionButton","displayOrder","ellipsisPriority","_this$args$goToAvsSea","goToAvsSearch","operatorLastViewedAction","supportsRecording","supportsSnapShot","clickSnapshot","canTakeSnapshot","clickRequestRecording","canRequestRecording","clickDownload","isSpinning","clickOperatorAudioNotAvailable","streamRetryable","clickPanTilt","navigateToSettings","section","sizeOfAllButtonSections","extraSpacePerSection","sizeOfAllSections","buttonSection","streamingPageLinkSize","availableButtonSpace","enoughSpaceForStreamingPageLink","enoughSpaceForWebRtcStreamTypeButton","supportsWebRtc","supportsEndToEndWebRTCStreaming","svrSupportsWebRtc","buttonSections","bottomBarSections","buttonSpaceUsed","popoverSections","nextSectionSize","clickMoreOptions","isLast","onBottomBarUpdate","_this$args$onBottomBa","_this$args2","PlayerPTZ","_this$args$operatorAu","_this$args$operatorAu2","OperatorAudioNotAvailableButtonClicked","buttonAction","showDownloadPopover","warningSoundAction","associatedDevicesAction","PlayerSnapshot","saveSnapshot","PlayerRecordClip","requestRecording","PlayerSettings","VideoCameraSettingsOverview","showAdditionalStreamDetails","canViewKnowledgeBase","WebRTCStreamTypeButtonClicked","navigateToOtherStreamingPage","cameraGroupId","onStreamingPageLinkResize","click","ALL_CAMERAS_ID","ALL_CONNECTED_CAMERAS_ID","cameraItemsIsChanged","cachedCameraItemParameters","cameraItems","newTotalPages","newDeviceSelection","displayedDeviceIds","totalPages","getCameraItemByGlobalDeviceId","cameraItem","cameraModel","saveCameraGroupOrderFromCameraItemsOrder","cameraGroup","newCameraOrder","matchingCameraItem","setCameraIsPlayingProperty","setCameraProperties","properties","LayoutControl","initialLayoutType","maxVideosPerPageAutoView","autoViewMaxVideosPerPageLimit","pageOwner","calculateAvailableSpaceDimensions","showPagination","playersAndSidebarDiv","videoStreamingPlayersDiv","footerHeight","PaginationHeight","availableWidth","availableHeight","MinimumPlayersHeight","getAutoViewZoomMaxCamsPerPage","isZoomIn","activeCameras","bestAutoView","availableSpaceDimensions","columns","rows","adjustedRowsLayout","adjustedColumnsLayout","adjustedRowsLayoutMaxCameras","adjustedColumnsLayoutMaxCameras","adjustedRowsLayoutUsageInfo","getPixelUsageInfoForAutoViewLayout","adjustedColumnsLayoutUsageInfo","newMaxCamerasPerPage","totalPixelUsage","getBestFittedAutoView","camerasAmount","autoViewLayoutOptions","playersDimensions","compatibleAutoViewLayoutOptions","dynamicGridLayout","minSupportedCameras","maxSupportedCameras","bestPixelUsage","bestView","layoutOption","pixelUsageInfoForView","playersDimensionsForLayout","getDimensionsForAspectRatio","aspectRatioForLayoutOption","HdAspectRatio","percentOfCameraSlotsFilled","setFullScreenStatus","_this$pageOwner$looku","setMaxVideosPerPageAndDisparity","disparityValue","_specifiedAutoViewHasGaps","camerasOnPage","autoView","updateMaxVideosPerPageAutoViewToFillGaps","newMaxVideosPerPageAutoView","executeFullScreenChange","fromToolbarButton","logEventConditionToWavefront","FULL_SCREEN_TOGGLE","getAutoViewLayoutOptions","maxRowsOrColumns","getAutoViewZoomAbility","AutoView","zoomInMaxCams","zoomOutMaxCams","getHybridViewZoomAbility","zoomInLayout","zoomOutLayout","cameraCount","usingLiveVideo","preferTwoPlusEightView","layoutIsAllowedForScenario","getLayoutZoomAbility","autoViewZoomAbility","hybridLayoutZoomAbility","cameraExpanded","canZoomIn","canZoomOut","getMaxCamerasByLayout","getPageNumberAfterLayoutChange","maxCamsInCurrentLayout","maxCamsInNewLayout","activeCamerasLength","pagesInNewLayout","getNumberOfPages","indexForMiddleCameraOnPage","handleFullScreenChange","fullScreenChangeMadeByButton","camerasCount","isLiveViewPage","makeSureLayoutIsSetCorrectly","performLayoutZoom","layoutZoomAbility","callback","newLayout","updateLayoutType","_newPage","setExpandedCameraIndex","newExpandedCameraIndex","setPageSizingProperties","useStreamingToolbar","toolbarHeightCached","toolbarEl","toolbarHeight","updatePlayersDimensions","toggleTheaterMode","isTheaterMode","THEATER_MODE_TOGGLE","newLayoutType","currentLayoutType","ToolbarPixelThreshold","maxVideosPerPageDisparity","gridDimensions","wideHybridDimensions","HybridWideAspectRatio","narrowHybridDimensions","HybridNarrowAspectRatio","narrowDimensions","isScreenWide","usersIntendedMaxVideosPagePage","expandedCameraIndex","isTheaterModeOrFullScreen","largeHybridCameraId","VideoStreamingFeaturesType","_playbackStateControl","apexProxyServerAddress","allowWebrtc","stunServer","OespPlaybackStateController","localStorage","setItem","ForceOeWebrtcTimeout","OeRelayFallbackTimeout","ObservedPropertiesCameraIds","CachedProperties","numberOfCameras","maxCameras","ceil","createLocationCameraGroups","currentOrder","locationCameraGroupInfos","locationCameraGroupInfo","locationCameraGroup","addLocationGroupsToCameraGroups","cameraGroups","cur","locationCameraGroups","updateCameraOrderFromCameras","setActiveCameras","newActiveCameras","newCam","componentType","Live","cam","supportsLiveView","updateCameraGroupAndCamera","_this$activeCameras","_this$activeCameras$","cameraGroupOrSingleCameraHasBeenSet","cameraGroupIdHasChanged","updateCamera","updateCameraGroup","selectCameraGroup","orderedCameras","cams","cameraIdsParsed","getStringArrayIfJsonString","cameraIdsFilteredOut","filteredOutCameraIds","layoutControl","storeCookieForPage","COOKIE_SELECTED_CAMERA_GROUP","hasModifiedCameraSelection","COOKIE_SELECTED_CAMERAS","overwriteQueryParamsOnCurrentRoute","setInitialSetupDone","initialSetupDone","showCameraItems","queryParamExists","eventFiredWithModifier","ctrlKey","altKey","metaKey","VideoStreamingFeatures","keyDownHandler","footerCss","maxCamerasPerPage","isLoginRestrictedFromLiveVideo","isManagedAccessLogin","afterCameraItemsProcessing","savePlaybackTimesToCache","_deviceId","cameraItemsProcessing","userSelectedNewCameras","newCameraItems","createCameraItem","isSelectedForKeyboardPress","Playback","storeCachedCameraItemParameters","updateCameraProperties","addDomListenersUponInsert","handleMouseMove","playerDimensionsObserver","cameraSelectorStatusChange","isOpened","CAMERA_GROUPS","camerasSelectorIsOpen","setLargeHybridCamera","toggleStreamResolution","_this$playbackStateCo","canSetDefaultResolution","newResolution","Highest","updateDefaultStreamResolution","refreshStream","HD_TOGGLE","resetExpandedCamera","PlayerRestore","setExpandedCamera","PlayerExpand","_page","setNewActiveCameras","newActiveCameraIds","cameraIdsToStoreToCookie","groupSaved","isNewGroup","newRecord","addNewGroupBeforeSpecialGroups","saveCameraGroupOrderFromCamItemsOrder","setPageNumber","layoutChangeCallback","setAutoPlayWhenReady","COOKIE_LAYOUT","COOKIE_MAX_VIDEOS_PER_PAGE_AUTO_VIEW","onMouseWheelEvent","throttle","layoutZoomFunction","deltaY","updateIsTheaterModeOrFullScreen","onCameraHasPoorStartingConnection","hasLoweredStreamQualityDueToPoorConnection","addInfo","setOEAudioInfo","shouldMute","newUserGroup","specialGroups","groupType","UserCreatedGroup","lowestOrder","cycleExpandedCamera","isForward","_cameraItems$length","newCameraIndex","showToolbar","mouseVerticalCoord","keyCode","avsDataObject","nodeHandlesKeyboardInput","svrTimelineIsHidden","T_KEY","F_KEY","N_KEY","B_KEY","E_KEY","toggleExpandedMode","LEFT_ARROW_KEY","RIGHT_ARROW_KEY","DOWN_ARROW_KEY","UP_ARROW_KEY","SolarIntegration","isOrderable","offerId","oneTimeCost","monthlyFee","priceText","supportsHardwarePricing","supportsServicePackagePricing","oneTimeHardwarePriceString","monthlyPriceString","addToCart","UpsellOfferCart","goToSubmitInquiry","upsellOffer_type","upsellFeatureTypeId","upsellOffer_id","UpsellOfferContact","trackCustomerAsNomoHubLead","leadId","solarIntegrationUrl","EmberCustomerShopItemDetails","_routeData$queryParam","itemId","id_item","UpsellOffersDashboard","stockImageUrl","createImageUrl","heroImageUrl","sectionOneImageUrl","imageUrl","_this$envSettings$get2","rootStaticResourcesServerURL","DashboardsThermostatsIndexRoute","EmberHvacDashboardThermostats","thermostats","BaseHvacDashboardDetailController","isTestMode","activeDiagnostic","diagnosticModel","filteredDiagnostics","diagnosticType","DashboardsThermostatsComfortController","Comfort","DashboardsThermostatsDetailComfortRoute","EmberHvacDashboardComfort","DashboardsThermostatsCycleController","Cycle","DashboardsThermostatsDetailCycleRoute","EmberHvacDashboardCycle","DashboardsThermostatsEfficiencyController","Efficiency","DashboardsThermostatsDetailEfficiencyRoute","EmberHvacDashboardEfficiency","ThermostatDiagnosticsModel","diagnostics","heatModeActive","_this$diagnostics","toggleHeatMode","DashboardsThermostatRoute","EmberHvacDashboardSummary","id_thermostat","globalThermostatId","DashboardsThermostatsRuntimeController","Runtime","DashboardsThermostatsDetailRuntimeRoute","EmberHvacDashboardRuntime","DefaultNotificationRedirect","EmberDefaultNotificationRedirect","NotificationEdit","baseNewGroupRoute","newGroup","BaseLocationsSubrouteController","locationInfos","_this$model$locations","createLocationInfos","resetStartIndexes","groupedLocationsStartIndexes","_this$model$groupedLo","groupedLocationsBatchSize","groups","_get2","_this$model$groupedLo2","allGroups","groupIds","locationInfo","columnHeaders","columnHeadersInfo","header","extraClass","lastGroup","singleSystemRouteNames","BaseLocationsSubrouteRoute","savedScrollTop","locationDataType","showWideFilters","updateExpandAll","keepFilters","SingleSystemDetail","setViewProperties","getLocationsAndFilters","groupStates","LocationAccessPointInfo","LocationInfo","isOccupancy","getNativeViewId","accessPointsButtons","infoDict","accessControlAccessPointDevices","enums","AccessControlUnknown","AccessControlOpen","AccessControlClosed","LockUnknown","garageDoors","GarageDoorClosed","GarageDoorOpen","GarageDoorUnknown","summaryPageDeviceInfo","deviceList","currentKey","deviceButtons","currentEntry","filteredItems","stateText","multipleDevices","changeAccessPointState","switchToSingleSystemSubRoute","LocationDeviceAccessInfo","AccessPointDevicesCard","PartitionCard","devicesList","cardPath","hasNoDevices","LocationFleetInfo","isMetric","loginCurrentDateUtc","hasFleetDevices","numberOfVehiclesDrivenTranslation","numberOfVehicles","vehiclesDrivenToday","fuelUsedTranslation","fuelUsedToday","roundFuelUsed","getAlertItemsMap","alertItemsKey","carMonitors","allCarMonitors","alertItems","carMonitor","entry","editLocation","EmberLocationsEdit","moveInTenant","EmberLocationsEditManualMoveIn","selectSystemOrGroup","nativeViewId","rowClickDestination","singleSystemDestinationPage","contextSwitchType","EnterpriseToSingleSystem","LOCATION_GROUP_PREFIX","didCancel","manageResidents","EmberLocationsManageResidents","manageResidentsV2","EmberLocationsManageResidentsV2","manageDevices","EmberManageDevices","modifiableStateProperties","Cleaned","Inspected","Occupied","Vacant","checkWhetherIsSelectedProperty","createStateOptions","statesPropertyKey","currentState","generateStatusChangerItems","statusType","locationOccupancyInfoInstance","occupancyState","stateHeader","LocationOccupancyInfo","readinessStatusChangerItems","occupancyStatusChangerItems","reservationDateRange","checkInDate","checkOutDate","occupiedByMobileText","statusDescription","statusAddendum","locationReadinessMobileText","locationReadinessDescription","locationReadinessAddendum","LocationPersonalSafetyInfo","mpersDevices","Ambient","activeEmergencyText","devicesWithEmergency","activeEmergencyDevices","totalDevices","lowBatteryDevices","mpersDevice","lowBatteryText","numDevices","LocationSummaryInfo","TenantTurnoverFailed","showBusinessStatus","showAccessPoints","showPanels","showTenantTurnoverStatus","hubStatus","hubOffline","hubData","stateIcon","showPartitionsCardModal","hasOpenSensors","openSensors","numPartitionSensors","SensorOpen","hasActiveAlarm","stateCss","getPartitionStateIcon","getPartitionStateText","openSensorsText","openSensorCount","hasMultiplePartitions","openCloseHistory","getOpenCloseHistory","openCloseEvents","history","mostRecentOpenCloseEvent","showWarningIcon","metaData","hasWarningEvent","isTenantTurnoveInProgress","NotSet","Complete","ManuallyVerifiedComplete","tenantTurnoverStatus","retryResidentReset","LocationTemperaturesInfo","issueItems","cts","isInRange","ambientTemp","lowThreshold","temperature","temperatureText","outOfRangeSensorCount","earliestBreak","aMonthAgo","valueOf","setDate","timeStamp","timeZoneName","getMonth","datetime","LocationThermostatsInfo","thermostatRows","thermostat","PointCentralThermostatRow","ThermostatRow","controlThermostat","EmberLocationsLocationThermostats","LocationVideoInfo","canSelectSingleSystem","getIssueDevices","lastSuccessfulSupervision","lastDate","getOnlineDevices","onlineDevices","allCameras","Video","issueCameras","issueSvrs","onlineSvrsAndCams","cameraDescriptions","unified","joiner","curr","onlineCamerasTranslation","onlineSvrsTranslation","totalRecordedVideoTranslation","allSvrs","svrCachedInfos","sdCardCameras","allSdCardCameras","sdCardCameraUsageInfos","hasRecordedVideoDevice","hasNoVideoDevices","getClipData","cameraTriggeredClips","eventTriggeredClips","videoQuotaClips","alarmTriggeredClips","isExceedingClipRateLimit","clipsUploaded","optionalIcons","scheduleTitle","scheduleTitleShort","localDisplayLockingTitle","getLocalDisplayLockingTitle","iconSrc","isScheduleIcon","useThermostatClass","stateIconClass","getStateIconClass","modifiedStateText","heatSetpoint","coolSetpoint","getModifiedThermostatStateText","AuxHeat","Cool","Auto","toArrayOfNumber","selectedFiltersString","getOccupancyFilterSelection","checkIn","checkOut","occupancyStatus","cleaningStatus","inspectionStatus","propertyStatus","setpoints","getTranslation","fnTranslate","setpoint","EnterpriseActiveDirectorySetupController","siteUrl","authProviderDropdownItems","authProviders","authProvider","hasExistingLinkAndEnabled","adStatus","editEnterpriseGroups","EmberGroupSettingsActiveDirectoryEnterpriseGroupMapping","generateAndViewOAuthToken","selectedAuthProvider","accessToken","showCopyButton","copyToClipboard","copySuccess","copyString","anchorElement","copySuccessString","browser","universalCopyToClipboard","doesSupportLaunchShareActionDialog","dataUrlToFile","fileName","dataUrl","isDataUrl","byteString","atob","fileType","bytes","Uint8Array","charCodeAt","File","buffer","isUrlLink","getRentalTermTypeErrorMessage","selectedGroupTermType","rentalTermType","LTR","STR","getIsPointCentralErrorMessage","iteratedGroupTermType","errMessage","getIsEmptyGroupErrorMessage","getGroupHasDuplicateTemplate","groupsWithDuplicateTemplate","propertyName","getStepTextTranslation","buttonKey","getPopoverStep","modelProps","cssClss","getTourSteps","startQuickFiltersTour","tour","UsersQuickFiltersTour","AIDeterrenceLanguageType","AIDeterrenceMessageType","AIDeterrenceVoiceType","NoAIPerimeterGuard","TextToSpeechWithoutImage","TextToSpeechWithImage","LoiterAreaAction","Pass","PassMarginal","Fail","Ineligible","MarginalVoltage","MarginalPower","InsufficientPower","InvalidPowerSourceType","Success","UnexpectedException","DeviceCommandFailed","NoSdCard","SdCardNotFormatted","SdCardNotCompatible","ContainFootagesFromAnotherCamera","NoEncryptionKey","IncorrectEncryptionKeyInDevice","SdCardNotMounted","IncorrectAudioParameters","ContainBadDataForAudioRecording","ContainUnexpectedFiles","SdrDataNeedsToBeMigrated","IncorrectEncryptionKeyInDb","ContainFootagesFromAnotherCustomer","SdrDatabaseMoveFailed","AccessCheckInProgress","RestrictedAccess","ViewAccessPlan","Locks","Voice","Confirmed","Duplicated","Manager","Vendor","Contractor","Employee","Cleaning","Inspection","Maintenance","OneTimeUser","WorkOrder","ProspectiveResident","Dealer","Installer","Guard","PreloadedCodeInactive","RequestedCode","TwoFourGHz","FiveGHz","DualBandTwoFourAndFiveGHz","Wired","Primary","Enabled","Partial","Disabled","Undefined","Commercial","StandAloneVideo","StandAlone","PointCentral","Custom","ComingHome","GoingAway","Goodnight","WakeUp","Chime","Arming","AccessControl","ImageCapture","Scenes","Siren","Shades","SmartChime","WarningLight","ActivityFilterOptionsCategoryEnum","Audio","DoorbellCamera","EnergyMonitoring","LightingApplianceControl","VideoCamera","ShadeAndShutter","CarConnector","GoogleNest","WaterValveMeter","Solar","Sensor","Detector","Matter","GoogleNestThermostat","WeiserSmartcode10Touchpad","Kwikset916Touchscreen","WeiserSmartcode10Touchscreen","JascoEnbrightenSmartLEDBulb","JascoPlugInSmartSwitch","JascoPlugInSmartDimmer","YRD156Lock","Lutron","Kwikset910Deadbolt","YaleYRL210KeypadLever","ADCS2000RemoteTemperatureSensor","SalusSmartPlug","PhilioPan08RollerShutterController","ClimaxSCM5ZWRollerShutterController","ClimaxPowerSwitchPSM29ZW","ClimaxPowerSwitchPSS29ZW","DanaLockV3","AeotecSmartDimmer6","AeotecSmartSwitch6","AeotecNanoDimmerZW111","AeotecNanoSwitchZW116","ADCT3000SmartThermostat","LUXKONOzwThermostat","PhilioPan03MeterSwitch","GenieAladdinConnect","Deako","Tuya","Everspring500sSwitch","JascoInWallToggleSwitch","JascoInWallToggleDimmer","JascoInWallPaddleSwitch","JascoInWallPaddleDimmer","EcobeeThermostats","YaleAssureLockForAndersen","GoogleNestDevice","LevitonDimmer","LevitonSwitch","KwiksetHomeConnect620","Jasco52190","HavenConnect","Somfy","STZ1_2GIG","Linear_GD00Z8GC","ClimaxGDC3","SchlageJBE109","SchlageJFE109","ClimaxPSS29ZW_JP","ClimaxPSM29ZW_JP","iDevices","Baldwin8252_8285","JascoOutdoorPlugInSmartSwitch","JascoInWallSmartOutlet","ZipatoMultiColorBulb2","HankMultiColorBulb","JascoProSeriesBulb64637","ADCSmartNoiseMonitor","Phyn","Moen","WaterDragon","Orro","PhynKohler","Sensibo","Enphase","AlfredML2","Nami","WeiserHomeConnect620","ClimaxMotionSensorIRP16ZW","ClimaxWaterensorWLS23ZW","ClimaxDoorWindowContactSensorDC23ZW","SomfyEU","MiwaDTRS","MiwaPiACKII","YaleYRD410","YaleYRD420","YaleYRD430","YaleYRD450","InovelliLZW42Bulb","InovelliLZW30Switch","InovelliLZW31Dimmer","SengledV11N13_US","GoControlSwitchWS15Z51","GoControlDimmerWD500Z51","LinearOutletWO15Z1","LocklyPGD728ZPU","KaadasKA211","KaadasKA200","KaadasKA201","GenericSecuritySensor","GenericMatterDevice","Wep","Wpa","Wpa2Personal","Wpa2Enterprise","Wpa3Personal","IncludeAlarmsEvent","IncludeLowBatteryEvent","IncludeLostPowerEvent","IncludeTamperEvent","IncludeWaterAlertEvent","IncludeCameraUnresponsiveEvent","IncludeGeneralFailureEvent","IncludeGunshotDetectedEvent","IncludeSimulatedGunshotDetectedEvent","Intel","ARM","NoEntryDelay","SilentArming","NightArming","ArmedNight","AttributeTypeEnum","ClassifierTypeEnum","VehicleTypeEnum","GlassesEnum","ColorEnum","AvailableSystemItemsFilteringEnum","High","Low","Critical","BrowserEnum","BuildVersionInfoEnum","Priority","VideoDevicePrimaryLink","SnapshotsRequired","ReadyForCalibration","FeedbackRequired","Calibrated","Http","Rtsp","Tcp","Udp","TcpUdp","Normal","AllCameras","Location","Invalid","Activated","Cancelling","Inactive","Hero","RecentActivity","ImageSensors","GarageDoors","Lights","RemoteTemperatureSensors","WaterValves","WaterSensors","SumpPumps","WaterMeters","AccessControlAccessPointDevices","UnconfiguredBoilers","X10Lights","FeatureSuggestions","CommercialTemperatures","Gates","Switches","Wifi","NoiseSensors","CommercialFleet","MpersDevices","AccessControlElevatorDevices","FogDevices","Human","Anything","Parcel","Content","SVR","Reduced","Standard","Fair","Excellent","Good","Better","Best","LowDefault","StandardDefinition","MediumDefault","Hd","FullHd","FourMp","Manual","Weather","AccessPoint","Bridge","Doorbell","AccessController","Connected","ConnectionStatus","LicensePlate","CompanyName","Pets","PointCentralUserType","LostPhysicalAccessDateUtc","OptOutOfExpiredUserRemoval","Temporary","AllAccessUser","ShellContact","ContentBlockSubtype","Title","Paragraph","BulletedList","Image","Feature","Upsell","Series","Generic","Gate","USA","Canada","Brazil","Mexico","Chile","Argentina","Colombia","NewZealand","Turkey","Venezuela","Ecuador","Peru","Australia","Spain","Portugal","Netherlands","Sweden","Fiji","Ireland","Norway","France","Israel","Dominica","Finland","Indonesia","Italy","Guam","Visa","Discover","JCB","French_Canada","Spanish_US","Portuguese_Brazil","Turkish_Turkey","DutchNetherlands","HebrewIsrael","Localization","Contacts","SmokeHeat","ControlPanel","OtherDevices","ZWaveLocks","Bedroom","Bathroom","Kitchen","Occupancy","Water","Panic","RemoteTemperatureSensor","ImageSensor","Repeater","AccessControlDoor","Car","Noise","GunshotSensor","Alarms","ArmDisarm","Logins","SensorActivity","VideoClips","CameraNotResponding","ImageEvents","Battery","LostPower","Bypassed","DoorbellCall","Backup","LocationOpenClose","BusinessHourWarnings","OpenedOnTime","ClosedOnTime","ClosedUnexpectedly","WellnessActivity","PlaybackPagesEventHistoryItems","Failures","PackageAlerts","LocationOpenCloseReport","ArmingDisarmingReport","TemperatureHistoryReport","ResidentSmartHomeActivityReport","NoiseThresholdExceeded","ResidentDiscrepancyReport","VideoIntercomCall","ThermostatSchedule","SceneEdit","ThermostatRuleEdit","EventTriggeredRuleEdit","ScheduleRuleEdit","AccessControlScheduleEdit","AddGarageGatewayV1","LiftMasterInstallation","NotificationsCenter","EnterpriseNotificationsCenter","Users","UserAddEdit","EnterpriseUsers","ExportPanelSlotNumbers","DownloadUsers","ManageLogins","MonitoringStation","NameDevice","RemoveThermostatCover","RecordThermostatWiring","ReconnectThermostatCover","ConfigureThermostat","EnterpriseReportsCenter","ReportsCenter","Logout","ConfigureThermostatSuccess","EventHistory","VideoViewClips","BusinessHours","GeoServices","ManageLoginPermissions","ManageLoginAddLogin","MultiSiteGroupManagement","GroupSettingsThermostatScheduleTemplate","GroupSettingsBusinessHoursTemplate","ImageSensorRulesEdit","ImageSensorEventGallery","VideoAddCloudRecordingSchedule","VideoEditEventTriggeredRecordingSchedule","VideoAddSvrRecordingSchedule","VideoMainSettings","VideoLiveViewSettings","VideoPanTiltSettings","VideoSavedVideoSettings","VideoSvrDriveManagement","VideoSvrDiveCare","VideoNetworkSettings","VideoAddNewDevice","VideoAlexaVoiceServiceSetup","VideoSvrSettingsDisplayMgmt","VideoBusinessActivityAnalyticsReports","UpsellOfferDetail2","UpsellOfferPriceList","UpsellOfferSummary2","EnterpriseLoginTemplate","SingleSystemLoginTemplate","SupportCenterCreateIssue","AppDownload","EmberDailySummary","EmberFeatureSuggestions","EmberWizardLaunch","EmberGenericWizardDeepLinkLanding","EmberGates","EmberSumpPumps","EmberSmartChime","EmberSmartChimeSettings","EmberSmartChimeWirelessNetworks","EmberThermostats","EmberWater","EmberLights","EmberLightsGroupDetails","EmberNoise","EmberNoiseSettings","EmberTemperatures","EmberTemperatureSensors","EmberTemperatureSensorEdit","EmberTemperatureSensorGroups","EmberTemperatureSensorGroupsEdit","EmberVoice","EmberVoiceEdit","EmberShades","EmberCcControl","EmberSwitches","EmberMpersDevices","EmberMpersDevicesEdit","EmberPanelAudio","EmberSensorNames","EmberAccessControlElevatorDevices","EmberRemotesEdit","EmberAccessControlDoorRules","EmberThermostatsSchedules","EmberThermostatsScheduleEdit","EmberThermostatsScheduleEditScheduleType","EmberThermostatsScheduleEditSetpoint","EmberThermostatsSmartScheduleAudit","EmberThermostatsPeakProtect","EmberThermostatsPeakProtectUtility","EmberThermostatsPeakProtectSchedule","EmberRules","EmberRulesBuilderMobileNoSupport","EmberRulesBuilderTrigger","EmberRulesBuilderTriggerDetails","EmberRulesBuilderAction","EmberRulesBuilderActionDetails","EmberRulesBuilderRestrictions","EmberRulesBuilderNotifications","EmberRulesBuilderExtraRuleOption","EmberRulesBuilderNotificationsNewContact","EmberScenes","EmberAutomationSchedules","EmberSmartArming","EmberSmartArmingDisarmEdit","EmberSmartArmingArmEdit","EmberArmingSchedulesAndAutoRearming","EmberArmingSchedulesAndAutoRearmingCreate","EmberPartitionsRules","EmberSensorsRules","EmberLocksRules","EmberGarageDoorsRules","EmberGatesRules","EmberLightsRules","EmberThermostatsRules","EmberWaterRules","EmberImageSensorRules","EmberLightsSchedules","EmberShadesSchedules","EmberBoilers","EmberRemotes","EmberThermostatGrouping","EmberEditWifiSchedules","EmberPartitionArmingSchedules","EmberScheduleBuilder","EmberScheduleBuilderAction","EmberScheduleBuilderActionDetails","EmberScheduleBuilderFollowUp","EmberScheduleBuilderTime","EmberScheduleBuilderAdditionalOption","EmberScheduleBuilderMobileNoSupport","EmberThermostatRewardProgram","EmberActivity","EmberActivityHeatMap","EmberActivityGroupEventHistory","EmberAlarmRecap","EmberVideo","EmberVideoRules","EmberVideoSchedules","EmberVideoSdCardSchedule","EmberVideoCameras","EmberVideoCamera","EmberVideoCameraCalibrate","EmberVideoCameraCalibrateCapture","EmberVideoCameraCalibrateEdit","EmberVideoCameraCalibrateReview","EmberVideoSetupPanelStreaming","EmberOvReadySettings","EmberOvReadyRuleSettings","EmberOvReadyRule","EmberOvReadyRuleSelect","EmberOvReadyRuleDraw","EmberClassifierVisualization","EmberVideoCameraGroups","EmberVideoCameraGroupsEdit","EmberVideoClipFeedback","EmberEnterpriseVideoCameraGroups","EmberEnterpriseVideoCameraGroupsEdit","EmberEnterpriseVideoAdvancedVideoSearch","EmberVideoAddDeviceRedirect","EmberVideoBusinessActivityAnalytics","EmberVideoBusinessActivityAnalyticsRuleList","EmberVideoBusinessActivityAnalyticsRule","EmberVideoBusinessActivityAnalyticsRuleGroup","EmberVideoBusinessActivityAnalyticsRuleGroupList","EmberVideoBusinessActivityAnalyticsHeatMapping","EmberVideoCameraPostInstall","EmberVideoCameraPostInstallPowerCheck","EmberVideoCameraPostInstallWedgeSelect","EmberVideoCameraPostInstallChimeSelect","EmberVideoCameraPostInstallQualitativePowerCheck","EmberVideoSdCardSettings","EmberVideoVarifocalFovSettings","EmberVideoDigitalFovSettings","EmberVideoPrivacyZonesSettings","EmberVideoInternationalTests","EmberOnvifInstallation","EmberOnvifInstallationTermsOfService","EmberOnvifInstallationCredentials","EmberOnvifInstallationNaming","EmberOnvifInstallationNamingEdit","EmberVideoAdvancedVideoSearch","EmberVideoSettingsAdvancedSetup","EmberVideoLightGuardControlSettings","EmberVideoLightGuardMotionDetectionSettings","EmberVideoLightsSettings","EmberVideoLightTriggers","EmberVideoStreamSettings","EmberVideoWebrtcTest","EmberVideoDeviceSignalStrength","EmberVideoSignalStrength","EmberVideoSettingsCamera","EmberVideoSettingsGeneral","EmberVideoSettingsNetworkInfo","EmberVideoSettingsAudio","EmberVideoSettingsVideoConfiguration","EmberVideoFamiliarSubjectsEnrollmentTerms","EmberVideoFamiliarSubjectsEnrollment","EmberVideoFamiliarVehicles","EmberVideoFamiliarSubjectsEnrollmentVehiclesCameraAccess","EmberVideoFamiliarSubjectsEnrollmentVehiclesFeatureManagement","EmberVideoFamiliarSubjectsEnrollmentVehiclesIncorrectPhotos","EmberVideoFamiliarSubjectsEnrollmentVehiclesAdd","EmberVideoFamiliarSubjectsEnrollmentRecentImages","EmberVideoFamiliarSubjectsReview","EmberVideoFamiliarSubjectsReviewProfileEdit","EmberVideoFamiliarSubjectsReviewPhotoList","EmberVideoFamiliarSubjectsReviewSummary","EmberVideoFamiliarSubjectsReviewFAQ","EmberVideoFamiliarSubjectsReviewNotifications","EmberVideoSettingsAlerts","EmberVideoSettingsLightsOverview","EmberVideoSettingsUpdateFirmware","EmberVideoSettingsClipLength","EmberVideoSettingsClipQuality","EmberVideoSettingsImage","EmberOvReadyRuleDrawV2","EmberVideoSettingsSdCardInfo","EmberVideoSettingsStreamVideoPanel","EmberVideoSettingsMotionConfiguration","EmberVideoSettingsPrivacyZones","EmberVideoSettingsThirdPartyStream","EmberVideoSettingsThirdPartyStreamEdit","EmberVideoYoutubePlayer","EmberVideoGallery","EmberEnterpriseVideoGallery","EmberVideoIntercomContact","EmberVideoIntercomContactEnrollment","EmberVideoIntercomContactEnrollmentEdit","EmberVideoDroneInstall","EmberVideoInstallOverview","EmberVideoInstallTutorial","EmberVideoReplaceTutorial","EmberVideoIntercomContactEnrollmentNotifications","EmberVideoIntercomContactEdit","EmberVideoIntercomSetup","EmberVideoIntercomVideoDeviceSelect","EmberVideoSettingsVarifocalFov","EmberVideoSettingsDigitalFov","EmberVideoSvrRecordingSchedule","EmberVideoIntercomAssociatedDeviceSelect","EmberVideoIntercomCustomizeDirectory","EmberVideoIntercomQrCode","EmberVideoIntercomCreateDirectory","EmberVideoSettingsOverview","EmberVideoMotionDetectionTest","EmberVideoSettingsDeviceStatus","EmberVideoSettingsNetworkConfigChangeNetwork","EmberVideoIntercomAddDirectory","EmberVideoBatteryMotionSensitivitySettings","EmberVideoBatteryStatus","EmberVideoIntercomContactNotifications","EmberVideoIntercomEditDirectory","EmberVideoFamiliarFaces","EmberVideoFamiliarSubjectsEnrollmentFacesRecentImages","EmberVideoThumbnailSearch","EmberVideoFamiliarSubjectsEnrollmentFacesCameraAccess","EmberVideoFamiliarSubjectsEnrollmentFacesFeatureManagement","EmberVideoFamiliarSubjectsEnrollmentFacesIncorrectPhotos","EmberEnterpriseVideoThumbnailSearch","EmberVideoAppearanceSearchResults","EmberVideoIntercomConnectUnitToSystem","EmberVideoIntercomSetConcierge","EmberVideoIntercomNameDirectoryList","EmberUsers","EmberUserEditNotSupported","EmberEditUserInformation","EmberEditUserAttributes","EmberEditUserAttributesEdit","EmberEditUserType","EmberUserEditLanguage","EmberEditUserContactInformation","EmberUsersAddContactAddress","EmberUserEditFaceRecognition","EmberUserEditFaceRecognitionReview","EmberUserEditFaceRecognitionModify","EmberUserEditFaceRecognitionInvalid","EmberUsersUserAccessReview","EmberUsersUserAccessReviewEdit","EmberUsersUserAccessReviewEditAssignUser","EmberEnterpriseUsers","EmberEnterpriseUserEditNotSupported","EmberEnterpriseEditUserInformation","EmberEnterpriseEditUserDeviceAccess","EmberEnterpriseEditUserAttributes","EmberEnterpriseEditUserAttributesEdit","EmberEnterpriseEditUserType","EmberEnterpriseUserEditLanguage","EmberEnterpriseEditUserContactInformation","EmberEnterpriseUsersAddContactAddress","EmberEnterpriseUsersLinkLogin","EmberUserSlotManagement","EmberUsersLinkLogin","EmberUsersUsername","EmberEnterpriseUsersUsername","EmberEnterpriseLogins","EmberElevateLogins","EmberEnterpriseAccessControlLogins","EmberElevateAccessControlLogins","EmberEditEnterpriseLogin","EmberNewEnterpriseLogin","EmberNewMultiGroupLogin","EmberAssociateEnterpriseLogin","EmberAssociateMultiGroupLogin","EmberNewScheduledDeviceLogin","EmberNewScheduledDeviceLoginAccessControl","EmberLocations","EmberLocationsDeviceAccess","EmberLocationsPersonalSafety","EmberLocationsLocation","EmberLocationsEditUsers","EmberEnterpriseThermostatSettingsTemplateEdit","EmberEnterpriseGroups","EmberEnterpriseNewGroup","EmberEnterpriseGroupsAddLocation","EmberEnterpriseReportsCatalog","EmberEnterpriseReportEdit","EmberGroupSettings","EmberGroupSettingsAccessSettings","EmberGroupSettingsCommunicationSettings","EmberGroupSettingsEnergySettings","EmberGroupSettingsPanelSettings","EmberGroupSettingsPermissionsAndIntegrations","EmberGroupSettingsTemporaryAccessCodeSettings","EmberGroupSettingsTemporaryAccessCodes","EmberGroupSettingsTemporaryAccessCodesAccessCodeDuration","EmberGroupSettingsTemporaryAccessCodesAccessCodeAvailabilitySchedule","EmberGroupSettingsSelfGuidedToursCheckpointId","EmberGroupSettingsSelfGuidedTours","EmberGroupSettingsSelfGuidedToursAppointmentLength","EmberGroupSettingsSelfGuidedToursCCVerification","EmberGroupSettingsSelfGuidedToursCustomUrl","EmberGroupSettingsSelfGuidedToursCustomerLogo","EmberGroupSettingsSelfGuidedToursWebPrimaryColor","EmberGroupSettingsSelfGuidedToursHoursOfOperation","EmberGroupSettingsSelfGuidedToursSupportPhone","EmberGroupSettingsSelfGuidedToursConfigureKnockCrm","EmberGroupSettingsSelfGuidedToursGeofence","EmberGroupSettingsSelfGuidedToursGateCode","EmberGroupSettingsSelfGuidedToursCommunitySiteMap","EmberGroupSettingsSelfGuidedToursTermsAndConditions","EmberMultiGroupSettings","EmberEnterpriseAccessControlIndex","EmberEnterpriseAccessControlAccessPlans","EmberEnterpriseAccessControlAccessPlanNew","EmberEnterpriseAccessControlAccessPoints","EmberEnterpriseAccessControlAccessPointEdit","EmberEnterpriseAccessControlUsers","EmberEnterpriseAccessControlUserEdit","EmberEnterpriseAccessControlUserEditUserInformation","EmberEnterpriseAccessControlUserEditLanguage","EmberEnterpriseAccessControlUserEditAddContact","EmberEnterpriseAccessControlUserEditContactInformation","EmberEnterpriseAccessControlUserEditExpiringCredentials","EmberEnterpriseAccessControlUserEditUserGroup","EmberEnterpriseAccessControlUserEditAccessPlans","EmberEnterpriseAccessControlEditUserAttributes","EmberEnterpriseAccessControlEditUserAttributesEdit","EmberEnterpriseAccessControlUsersLinkLogin","EmberEnterpriseAccessControlUserBulkCreate","EmberEnterpriseAccessControlUserGroups","EmberEnterpriseAccessControlUserGroupsNew","EmberEnterpriseAccessControlUserGroupsEdit","EmberEnterpriseAccessControlHolidaysEdit","EmberEnterpriseAccessControlElevators","EmberGroupSettingsWelcomeMessage","EmberGroupSettingsWaterSettings","EmberGroupSettingsWaterMeterConfigurationTemplate","EmberGroupSettingsWaterMeterConfigurationTemplateNew","EmberGroupSettingsWaterMeterConfigurationTemplateEdit","EmberBusinessHours","EmberSingleSystemManageLogins","EmberSingleSystemManageLoginsEdit","EmberGroupSettingsAccessControlRestrictedAccess","EmberMultiSystemAccess","EmberMultiSystemAccessSetup","EmberGroupSettingsOBTR","EmberGroupSettingsGuestLoginAccess","EmberGroupSettingsSendFollowUpText","EmberGroupSettingsAutoRelock","EmberGroupSettingsHouseReadyEarly","EmberGroupSettingsBackupCodes","EmberGroupSettingAutomaticallyEnableBackgroundCapture","EmberGroupSettingsSendEmailByDefault","EmberGroupSettingsUserCodeTimes","EmberGroupSettingsThermostatSettingsTemplates","EmberGroupSettingsThermostatScheduleTemplates","EmberGroupSettingsBusinessHourTemplates","EmberGroupSettingsScheduleEmail","EmberGroupSettingsAutomaticPanelArming","EmberGroupSettingsLoginTemplates","EmberGroupSettingsPropertyManagementIntegration","EmberGroupSettingsActiveDirectorySetup","EmberGroupSettingsActiveDirectoryLocationGroupMapping","EmberGroupSettingsActiveDirectoryAuthenticationProviderToken","EmberGroupSettingsActiveDirectoryGroupToPlanMapping","EmberEnterpriseNewEnterprise","EmberGroupSettingsWelcomeEmail","EmberGroupSettingsWelcomeEmailNew","EmberGroupSettingsWelcomeEmailEdit","EmberGroupSettingsOBPCR","EmberGroupSettingsOBPCREdit","EmberGroupSettingsOBPCRNew","EmberGroupSettingsPoolControlFilterPumpSchedule","EmberGroupSettingsPoolControlFilterPumpScheduleEdit","EmberGroupSettingsPoolControlFilterPumpScheduleNew","EmberGroupSettingsNoiseMonitorSettings","EmberGroupSettingsNoiseMonitorSettingsTemplates","EmberEnterpriseNoiseMonitorSettingsTemplateEdit","EmberGroupSettingsSupportPhoneNumber","EmberGroupSettingsCompanyLogo","EmberNewBusinessHourTemplates","EmberNewBusinessHourTemplatesEdit","EmberNewBusinessHourTemplatesApply","EmberGroupSettingsPreloadedCodesForUserCreation","EmberGroupSettingsScheduleWelcomeMessage","EmberArmingScheduleTemplates","EmberArmingScheduleTemplatesEdit","EmberArmingScheduleTemplatesApply","EmberArmingScheduleTemplatesEditArmingSchedule","EmberGroupSettingsOBTREdit","EmberGroupSettingsOBTRNew","EmberGroupSettingsMobileBadge","EmberAccessControlSingleSystemManageLogins","EmberAccessControlSingleSystemManageLoginsEdit","EmberGroupSettingsUserSettings","EmberGroupSettingsDeleteExpiredUsers","EmberGroupSettingsCompanyName","EmberGroupSettingsDeleteInactiveUsers","EmberEnterpriseLtrCommunityDashboard","EmberEnterpriseEnergySaverRuleSettings","EmberEnterpriseAlertsIssues","EmberGroupSettingsSelfGuidedToursConfigureFunnelCrm","EmberGroupSettingsActiveDirectoryBulkPlanMapping","EmberGroupSettingsActiveDirectoryBulkLoginMapping","EmberGroupSettingsCustomizeWelcomeEmail","EmberReportWebviewIFramePage","EmberReportsCatalog","EmberReportEdit","EmberAccessControlIndex","EmberAccessControlAccessPlans","EmberAccessControlAccessPlanNew","EmberAccessControlAccessPoints","EmberAccessControlAccessPointEdit","EmberAccessControlBadgeManagement","EmberAccessControlHolidaysEdit","EmberAccessControlTimetables","EmberAccessControlTimetableEdit","EmberAccessControlUsers","EmberAccessControlUserEdit","EmberAccessControlUserEditUserInformation","EmberAccessControlUserEditLanguage","EmberAccessControlUserEditAddContact","EmberAccessControlUserEditContactInformation","EmberAccessControlUserEditExpiringCredentials","EmberAccessControlUserEditUserGroup","EmberAccessControlUserEditAccessPlans","EmberAccessControlEditUserAttributes","EmberAccessControlEditUserAttributesEdit","EmberAccessControlUserEditNotSupported","EmberAccessControlUserBulkCreate","EmberAccessControlUserGroups","EmberAccessControlUserGroupsNew","EmberAccessControlUserGroupsEdit","EmberAccessControlUsersLinkLogin","EmberNewEnterpriseAccessControlLogin","EmberNewMultiGroupAccessControlLogin","EmberAssociateEnterpriseAccessControlLogin","EmberAssociateMultiGroupAccessControlLogin","EmberEditEnterpriseAccessControlLogin","EmberEnterpriseAccessControlUserEditNotSupported","EmberSettingsAccessControlRestrictedAccess","EmberSettingsAccessControlLockdown","EmberAccessControlLockdownConfiguration","EmberEnterpriseAccessControlLockdownConfiguration","EmberAccessControlElevators","EmberEnterpriseAccessControlUsersUsername","EmberAccessControlUsersUsername","EmberSettings","EmberSettingsFaceRecognition","EmberLanguage","EmberPassword","EmberSecurityQuestion","EmberTwoFactorAuthentication","EmberTwoFactorChallengeFlow","EmberEmailVerification","EmberLoginName","EmberEmailAddress","Ember2FASetup","EmberAccountManagement","EmberAccountInformation","EmberSystemInformation","EmberPropertyInformation","EmberManageDevicesAssociatedDevices","EmberMobileSettings","EmberSettingsControlPanel","EmberAlarmDelaySettings","EmberPresenceStateSettings","EmberNewDeviceAlerts","EmberPushDevices","EmberPushDevicesEdit","EmberSiteAppearance","EmberCommunicationPreferences","EmberDeviceLinkRequest","EmberMovePortalSurvey","EmberMovePortalSurveyEdit","EmberMovePortalSurveyCompleted","EmberAddDeviceComplete","EmberAddDeviceName","EmberAddDeviceTroubleshoot","EmberAddDeviceMount","EmberAddDeviceChooseDevice","EmberAddDeviceTroubleshootMissing","EmberAddDeviceAlreadyLinked","EmberAddDeviceLinkUnsuccessful","EmberAddDeviceStartInfo","EmberAddDeviceLinkStart","EmberAddDeviceLinkInProgress","EmberAddDeviceLinkComplete","EmberAddDeviceTryEquipment","EmberAddDeviceInstallEquipment","EmberAddDeviceDifferentAccounts","EmberAddDeviceDefaultNotifications","EmberSsoHome","EmberSsoMyAccount","EmberSsoContactUs","EmberSsoShop","EmberSsoSupport","EmberSsoEquipmentSetup","EmberSsoMovePortal","EmberSsoCustom","EmberRecognizedDevices","EmberMonitoringStation","EmberMonitoringStationLocationSettings","EmberMonitoringStationLocationSettingsEdit","EmberMonitoringStationEmergencyContacts","EmberMonitoringStationEmergencyContactsEdit","EmberMonitoringStationVideoSettings","EmberMonitoringStationPropertyActionsSettings","EmberMonitoringCertificate","EmberMonitoringStationEmergencyContactsCreate","EmberMonitoringStationPropertyNotes","EmberMonitoringStationPropertyNotesEdit","EmberMonitoringStationPropertyNotesCreate","EmberConnectedFleetDashboard","EmberFleetTripHistory","CarSettings","EmberPanelWifi","EmberPanelWifiConfig","EmberPanelWifiNetworks","EmberServiceAppointmentsSupport","EmberDiscover","EmberDiscoverContent","EmberSupportWebsite","EmberExternalPage","EmberUpcomingAppointments","EmberSupportFeedback","EmberSmartCoverageGetStarted","EmberWifiSettings","EmberWifiDevices","EmberWifiDeviceEdit","EmberWifiProfileEdit","EmberMobile","EmberMobileHelp","EmberMobileHelpContact","EmberPersonEdit","EmberMergeUsersPreview","EmberAccessControlMergeUsersPreview","EmberEnterpriseMergeUsersPreview","EmberEnterpriseAccessControlMergeUsersPreview","EmberPushMigrationTool","EmberBluetooth","EmberBluetoothStartPairing","EmberEverbridgeIntegration","EmberEverbridgeIntegrationAdd","EmberBluetoothDisarmingSettings","EmberBluetoothDisarmingSettingsEditTimeout","EmberBluetoothDisarmingSettingsDeviceList","EmberBluetoothDeviceSettings","EmberBluetoothDeviceSettingsPartitionList","ReadOnly","FullControl","PointCentralManager","MasterControl","PointCentralVendor","PointCentralReservations","PointCentralFrontDesk","RestrictedDeviceAccess","PointCentralOwner","SingleSystemOwnerLoginTemplate","SingleSystemVendorLoginTemplate","SingleSystemFrontDeskLoginTemplate","SingleSystemReservationsLoginTemplate","SingleSystemManagerLoginTemplate","Activity","MyAccount","Support","AddEquipment","Shop","MovePortal","DeviceConnectionStatusEnum","HeatSetPoint100thsF","CoolSetPoint100thsF","LightColorChange","Uncategorized","FlexIOPullApartSensor","DrivewaySensor","ClimaxPIRCamera","DSCPIRCamera","OilGauge","ElevatorFloor","ControlPoint","PowerGPIRCamera","DigitalPtzErrorEnum","DirectoryViewTypeEnum","LearnMoreKBCID","LearnMoreKBSegments","ExternalURL","ConfigurationMobile","ConfigurationEmber","FeatureLink","HighContrastMode","DarkMode","Mechanical","Digital","WedgeA","WedgeB","WedgeC","WedgeD","WedgeE","WedgeF","WedgeG","SyncLocked","SyncUnlocked","Certified","Entry","LockUnlock","OpenClose","Garage","Safe","ArmStay","ArmAway","AuxiliaryPanic","TemperatureAlert","PolicePanic","FirePanic","EndOfBypass","DisarmingSupervisionFault","ArmingSupervisionFault","AuxPanicPendingAlarm","PendingAlarm","PolicePanicSuspectedAlarm","AuxPanicSuspectedAlarm","SilentPolicePanic","ThermostatSetPointChanged","ThermostatModeChanged","OpenedClosed","ThermostatOffset","SumpPumpAlertIdle","SumpPumpAlertNormalOperation","SumpPumpAlertPossibleIssue","SumpPumpAlertCriticalIssueOff","SumpPumpAlertCriticalIssueMalfunction","ThermostatFanModeChanged","CommercialEarlyOpen","CommercialLateOpen","CommercialOpenOnTime","CommercialEarlyClose","CommercialLateClose","CommercialClosedOnTime","SilentPolicePanicSuspectedAlarm","CommercialClosedUnexpectedly","DoorBuzzedFromWebsite","UnlockCommandSent","LockCommandSent","InAppFirePanic","InAppAuxiliaryPanic","InAppPolicePanic","InAppSilentPolicePanic","HeatingCoolingIssue","AlarmCancelled","LightTurnedOn","LightTurnedOff","SwitchLevelChanged","PackageDeliveryAlert","PackageRetrievalAlert","NetworkMapUpdated","WarningSoundStarted","WarningSoundStopped","WarningSoundFailed","NetworkDhcpSettingsUpdated","NetworkDhcpReservationsUpdated","NetworkPortForwardingUpdated","RouterHostsUpdated","RouterProfilesUpdated","SpeedTestResultsUpdated","ViewedByCentralStationDuringVisualVerification","ViewedByCentralStationDuringEscalatedEvent","AelSchedulerUpdated","UnifiedUserManagementUpdated","MpersFallDetected","MpersPanicDetected","MpersNoCommunication","MpersCharging","MpersStoppedCharging","MpersActive","MpersLowBattery","CarTrackingUpdate","MpersCriticalBattery","UnlockFloorCommandSent","LockFloorCommandSent","SafetyButtonLocationUpdate","LiveVideoViewedByCentralStationDuringVisualVerification","LiveVideoViewedByCentralStationDuringRemoteVideoMonitoring","OnboardVideoViewedByCentralStationDuringVisualVerification","OnboardVideoViewedByCentralStationDuringRemoteVideoMonitoring","SvrVideoViewedByCentralStationDuringVisualVerification","SvrVideoViewedByCentralStationDuringRemoteVideoMonitoring","MonitoringPanic","Processing","PartialFailed","Face","FamiliarSubjectSettingsLinkTypeEnum","Review","Move","Adjusting","FirstEnhancements","RemindersAndAlerts","SmartRulesAndSchedules","MoreEnhancements","TasksList","EnterpriseManagementPermissions","DeviceControl","ImageSensorPermissions","VideoPermissions","Wide","Narrow","BusinessWarnings","ActiveIssues","OutsideThreshold","SensorIssues","Groups","TwoSeconds","QuarterMinute","HalfMinute","Minute","FiveMinute","QuarterHour","Far","Middle","Near","VeryNear","FrequencyBandEnum","SumpPump","RemoteTempSensor","AuxSensor","MasterBoilerController","BoilerHeatingZone","HotWaterHeater","EquipmentModule","Furnace","Text","MultiProperty","OptionSelect","EmberActivityPageTour","VideoRulesPageTour","UserTypeRelocationTour","SelfGuidedToursSettingsImprovementsTour","STRAccessPointsTabTour","Panel","System","SystemDisarmed","SystemArmedStay","SystemArmedAway","SystemArmedNight","BackgroundCapture","DailyView","MotionActivated","ButtonPress","LockUnlocked","LockLocked","LightOn","LightOff","ThermostatModeCool","ThermostatModeHeat","FanOn","Temperature","Quickbox","Geo","Sunset","Sunrise","Time","Warning","Issue","WeatherCloudSun","WeatherCloud","WeatherDrizzle","WeatherLightning","WeatherSnow","SceneGame","Badge","DoorOpen","EnterpriseOpen","EnterpriseClosed","Desktop","GarageClosed","Circle","Hammer","Man","Floor1","Floor2","CarBattery","CarFuel","UserControlOpen","UserControlClosed","FeatureHome","FeatureGate","LockUnlockedLowDef","LockLockedLowDef","SystemDisarmedLowDef","SystemArmedAwayLowDef","GarageOpen","AccessCard","SwitchOn","SwitchOff","Help","OkFill","Sound","FacialRecognition","FirmwareUpgrade","Login","Monitoring","VideoStream","Medical","Police","SmartGateway","Smoke","VideoRecord","VideoIssue","Circulate","FeatureSpeaker","VideoSvr","SceneSound","Shade","SceneButton","GunshotDetected","GunshotDetector","SecurityFogGenerator","TV","VoiceDevice","SensorOpened","SensorClosed","WaterValveOpen","WaterValveClosed","Note","Microphone","Google","MotionActive","Ethernet","StatusBatteryCharging","Media","Tree","Refresh","PackageDelivery","PackageRetrieval","SumpPumpRunning","WarningTriangle","AccessControlElevator","GenericPlay","GenericPause","ZWave","FeatureTour","ActionSheet","BluetoothDevice","MpersDevice","VaGeneric","VaAnimal","VaVehicle","WaterMeterExtended","SumpPumpCriticalLowDef","WaterMeterExtendedLowDef","VeryLow","VeryHigh","ActivityAlert","MissingAgreements","SecurityQuestionSetup","UpdatePassword","EmailVerification","BillingInformation","CustomerMessages","ADTMigration","AmbientDownloadApp","InstallMode","CommunicationPreferences","LoginScheduleInactive","LightAlertOption","RGBW","RGB","WarmToCool","HSV","Favorite","Offline","NoState","LevelChange","Energy","PersonalSafety","DeviceAccess","Base","GroupManagement","Notifications","RemoteArming","LockControl","LightAndThermostatControl","LiveAndSavedVideo","SavedVideo","VideoCameras","ManageGroupsPage","ActivityPage","SettingsPage","LocationsPage","CentralStation","UnattendedShowingManagement","GarageDoorControl","ScenesControl","ViewImages","RequestImages","ManageImageSensorSettings","AddDevicePortal","ReportsPage","Vehicles","PointCentralUniversity","UsersFull","UsersViewEdit","UsersReadOnly","UsersCustom","NotificationsReadOnly","IsLoginAsLoginRep","IsOvReadyLogin","Administrator","Reservations","FrontDesk","MobileAppAsKeyLogin","SingleSystem","Enterprise","Rep","Bright","Twilight","Dark","Cars","GaragesAndGates","MobileDevices","VideoDevices","VoiceAssistance","Doors","WiFi","Remotes","ReadyToAssociate","AssociatedDevices","VideoAndImages","LoginManagement","AudioDevice","CarMonitor","MobileDevice","MPERS","NoiseSensor","SmartChimeDevice","TemperatureSensor","VideoDevice","VoiceAssistanceDevice","WaterMeter","WiFiRouter","GunShotSensor","Remote","Indefinite","HalfHour","Trigger","Action","InvitationSent","InvitationExpired","NotInvited","IPhone","Android","Web","AmazonAlexa","ThirdParty","GoogleAssistant","GC3","RGP","WSA","Failure","Running","NotInstalled","NoMotionDetection","StandardMotionDetection","DeepMotionDetection","Version1","Version2","ExtremelyHigh","Unregistered","Charging","FallDetected","NoCommunication","LowBattery","CriticalBattery","Initialize","GoBack","RefreshWebView","ReloadAssociatedSystems","LaunchShareActionDialog","TransitionToNativeView","CloseWebView","LaunchBrowser","CloseWebViewV2","LaunchNewContext","EnablePushNotifications","EnableBluetooth","CheckBluetoothPermissions","StartBleAdvertising","StopBleAdvertising","HasMicrophone","HasSpeaker","HasSpeakerAndMic","ExplicitCredentials","ManufacturerDefaults","StoredOrManufacturerDefaults","InsufficientPermission","ResponseFailed","GroundZone","Tripwire","LineMonitor","LineCount","Heatmap","PersonDetection","BusinessOccupancy","CrowdGathering","DoorbellChime","ThirdPartyAnalytics","Concord","Simon","NX","IQPanel","Neo","HxGW","Vario","Command","W115C","IQRouter","IQRouter2","EBSLX","W114C","ShortBeep","LongBeep","Whistle","SingleSiren","SingleSiren2","AC","DC","Away","Sleep","ProgrammingCodeState","NotProjected","ProjectedVideoQuotaAlertMild","ProjectedVideoQuotaAlertSevere","SingleFamilyHouse","Townhouse","Condo","Business","Hub","Speaker","Refrigerator","SmartPhone","Tablet","Computer","Av","Reserved","Green","Orange","Red","MobileApp","SmartTV","GeoFence","External","PresenceStateHome","PresenceStateSleep","PresenceStateAway","Continuous","Gap","Restricted","Idle","Pdf","Csv","LastDay","LastWeek","LastMonth","Today","NoValidationIssue","NoRecipientsSelected","NoUnitsWithBusinessHours","SomeUnitsWithBusinessHours","HD","VGA","QVGA","QQVGA","FHD","FourMP","DynamicMappedResolutions","QualityOnly","ResolutionOnlyChangeStreamSetting","ResolutionOnlyChangeStreamSettingV2","ResolutionOnlyChangeStreamId","ScheduleRestriction","EventTriggered","LightSchedule","VideoSchedule","VideoLocalSchedule","AccessControlLockUnlockSchedule","ShadeSchedule","EmberRulesBuilderRules","WifiSchedule","Doorbells","DoorWindowSensors","GeoFences","Keypads","Picos","TemperatureSensors","Chimes","Sirens","Deployed","Scheduled","Deploying","SpecificFamiliarVehicle","AnyFamiliarFace","SpecificFamiliarFace","SinglePress","KeyReleased","KeyHeldDown","DoublePress","TriplePress","QuadruplePress","QuintuplePress","Supervision","NoSchedule","OutsideActiveTimes","NotRecording","Recording","Higher","FourMPHigherFrameRate","SingleDevice","Scene","Tokens","Power","Direction","Weight","Voltage","Current","AirFlow","Distance","WaterTemperature","Loudness","Frequency","HeartRate","ParticulateMatter1","Fuel","Speed","Acceleration","RPM","Dry","Wet","Full","Heating","Changed","NoSignal","Poor","AwayToHome","HomeToAway","Past","Present","Future","Minimum","IsUser","IsNotUser","SourceOfCustomer","SourceOfCustomerMap","unknown","smartcoveragewebsite","SmartCoverageWebsite","inappmessage","InAppMessage","socialmedia","SocialMedia","NormalOperation","PossibleIssue","PumpInMalfunction","PumpNotRunning","Storage","Fahrenheit","Celsius","InProgress","SendInitCommands","RemoveThirdPartyDevices","PendingRemoveThirdPartyDevices","RequestRecycleFlags","PendingRecycleFlags","SendUserCodes","AddToSystemGroup","ClearInfoAtThePanel","InitiateSystemCheck","SendVacantGroupCode","TerminateOldCustomers","AutoLow","OnLow","AutoHigh","OnHigh","AutoMedium","OnMedium","Humidity","MANUAL_MODE","SCHEDULED","SMART_SCHEDULES","Fixed","ThirdPartyEventType","ThirdPartyEventIcons","AnalyticTamperingStarted","AnalyticFogDetectionStarted","AnalyticPassingStarted","AnalyticIntrusionStarted","AnalyticGunshotStarted","AnalyticGlassBreakStarted","ManageCameraGroups","CameraDropdown","HDToggleOn","HDToggleOff","TheaterMode","ExitTheaterMode","FullScreen","ExitFullScreen","PageChange","LayoutHybridView","LayoutAutoView","LayoutOnePlusFive","LayoutOnePlusSeven","LayoutTwoPlusEight","LayoutFourPlusTwoPlusFour","Play","Pause","SeekBack","SeekForward","TimelineExpand","TimelineCollapse","TimelineArrowBack","TimelineArrowForward","TimelineClick","HourButton","DayButton","ActivityEvent","TimelineEvent","Retry","SidebarOpen","SidebarClose","DateTimePicker","CloseDateTimePicker","DownloadClip","DownloadThumbnail","SpeedDropdown","SpeedDropdown1x","SpeedDropdown2x","SpeedDropdown4x","SpeedDropdown8x","AutoSkipGap","AutoRetryConnection","CameraSelectorApply","CameraSelectorClose","CameraSelectorToggleCamera","CameraSelectorGroupSelected","CameraSelectorResetSelection","CameraSelectorSaveSelection","CameraSelectorSingleCamera","OverwriteExistingGroup","CreateNewGroup","LocalSchedulesTab","AddNewSchedule","UpdateExistingSchedule","AccessPlanSortByNameSelected","AccessPlanSortByUsersSelected","AnalyticsRulesPushNotificationsTooltipHover","AnalyticsRulesPushNotificationsTooltipClick","AnalyticsRulesSetMinimumDelayBetweenClipsTooltipViewed","AnalyticsRulesTypeNotSureHelperViewed","UsageReportsBarClicked","UsageReportsLineClicked","UsageReportsWeekClicked","UsageReportsMonthClicked","UsageReportsDayClicked","UsageReportsByDateClicked","UsageReportsByCameraClicked","UsageReportsByRuleClicked","FamiliarVehicleNotificationsEnable","FamiliarVehicleNotificationsDisable","FamiliarVehicleNotificationsSkip","PromoteSingleUser","OperatorAudioNotAvailableButtonRefreshedStream","ThumbnailSearchToTimeline","FamiliarFaceNotificationsEnable","FamiliarFaceNotificationsDisable","ContactSensor","TroubleConditionDetailsReportCategories","TroubleConditionDetailsReportDataColumns","TroubleConditionDetailsReportFrequency","ACFailure","PanelLowBattery","PanelNotResponding","SevereHVACAlert","CustomerId","GroupName","NoSubType","SensorMalfunction_GeoServices","SensorMalfunction_LiftMaster","SensorMalfunction_ZWave","SensorMalfunction_Lutron","SensorMalfunction_Sensor","SensorMalfunction_Sonos","SensorMalfunction_CarConnector","IncompatibleDevice_ADCSmartThermostat","IncompatibleDevice_ImageSensor","IncompatibleDevice_Kwikset","IncompatibleDevice_Quickbox","IncompatibleDevice_RemoteTemperatureSensor","IncompatibleDevice_Schlage","IncompatibleDevice_Stelpro","IncompatibleDevice_TwoWayTalkingTouchScreen","IncompatibleDevice_Westinghouse","IncompatibleDevice_Yale","IncompatibleDevice_ZWaveGarage","SensorLowBattery_CarConnector","SensorTamper_CarConnector","SensorTamper_ContactSensor","SensorTamper_MotionSensor","SensorTamper_ImageSensor","SensorTamper_GunshotSensor","ControllerPowerFault_Aero","ControllerPowerFault_Mercury","PanelTamper_AlarmHub","SecureEnrollmentFailed_Critical","SensorMalfunction_AccessPoint","IncompatibleDevice_IQLinearGarage","IncompatiblePanelVersion_IQWifi6","SensorLowBattery_RechargeableVideoDevice","SensorLowBattery_CriticalRechargeableVideoDevice","BroadbandCommFailure_GunshotSensor","CellCommFailure_GunshotSensor","CameraUnexpectedlyNotRecording_SVR","CameraUnexpectedlyNotRecording_Onboard","CameraUnexpectedlyNotRecording_SVRAndOnboard","SensorNotResponding_GunshotSensor","AllSubTypes","WaterAlert","BatteryCharging","VideoDeviceHighTemperatureCutoff","VideoDeviceLowTemperatureCutoff","VideoDeviceLowVoltageShutdown","SensorNotResponding","VideoDeviceLowBatteryAndLowTemperatureAlert","TroubleConditionTypeEnum","NotEnabled","Authenticator","SMS","SmartThermostat","TouchscreenLock","DoorSensor","VideoAnalytics","FlexIO","RetainUsers","RemoveUsers","RetainAndElevateUsers","TransitionEvent","ActionOnPageEvent","ShowUserCredentials","DoNotShowUserCredentials","ViewPinsEditContact","TextOnlyNoVideo","iPhone_default","Mac_email_default","Windows_email_default","Blackberry","PhoneAttTmobileBlackberry","OtherPhoneVerizonSprint","AttIPhone","WP7","WP","Standard_download_default","Thumbnail","Flv","NotStarted","SuccessfulDownload","WrongTokenFormat","FullReport","DisplaySummarySectionOnly","HideSnapshotsSetting","AttachVideoClip","AttachThumbnail","NOT_VISIBLE_STATE","NA","Schedule","DoesNotSupport","ReadWrite","OnDemand","AlwaysOn","Gallon","Liter","StandardDoorbellChimeDingDong","StandardDoorbellChimeLowDingDong","ThreeToneXylophone","FourToneXylophone","LowToHigh","BurglarAlarm","PositiveTune","DanceTune","OrchestralTune","GuitarHappyTune","GuitarSmoothTune","SingleToneChime","LongerSingleToneChime","LongestSingleToneChime","AlertCanaryTune","AlertWindChimes","BigDog","WeWishYouAMerryChristmas","ChristmasSpecial","Leak","B36WaterMeter","Boiler","SecuritySensor","Router","Flash","WebrtcPreloadingSupport","Tkip","Aes","Shared","AmbiguousOpenShared","Ccmp","Wpa2","Wps","Eap","Wpa3","ComputersAndNetwork","Entertainment","InstallTutorialVideo523","InstallTutorialVideo723","InstallTutorialVideo724","InstallTutorialVideo729","InstallTutorialVideoVdb750","InstallTutorialVideoW114C","InstallTutorialVideoV516","ThermostatBoilerWizard","ThermostatGroupingWizard","ClimaxWizard","YaleRLB1LPushButton","YaleRLT1LTouchscreen","OHDAnywhere","DeleteZWaveDeviceGeneric","Ecobee","SchlageEncode","ADC3035L","Flex","ADC3040","ADCCC100","BluetoothDisarming","ConvertToBusinessHours","ConvertToCustomHours","ExternalPageController","ExternalPageRoute","hhmmss","second","dateTimeNoYear","shortDateTimeFormat","shortTimeFormat","longTimeFormat","shortDateFormat","longDateTimeFormat","weekday","fullDateTimeFormat","EUR","currency","USD","GenericWizardDeepLinkLandingController","_searchParams$get","searchParams","separator","rootUrl","indexOfRoot","replaceWith","getStaticResourcePath","IsEnterprise","IsMobileApp","LANGUAGE_PARAM","CONTENT_ID_PARAM","OPEN_EXTERNALLY_PARAM","article","namedArgs","_contextManager$ident","_contextManager$ident2","language","URL","append","cid","openExternally","KnowledgeBaseLink","NavigateToRouteId","NavigateToRouteName","CustomerPageUrl","BaseDeviceDetailsController","BaseHomeToAutomationRoute","getDestinationRouteId","getDeviceType","getReportType","BaseEditDeviceRoute","id_device","resolvedDevice","_identityModel$wizard","wizard","ALLOWED_PARAMS","titleKey","applicationInstance","_applicationInstance$","setEnvironment","handleModalStateChange","isModalOpen","showModalOverlay","LegacyPageController","overlayDestination","modalOverlayTrigger","itemChanged","modalsDialogModalsNavNavDialog_","createLegacyNavItem","_relationship$subRout","NavItem","legacySelectItem","SubItem","getRouteItemUsingId","LegacyPage","setNavigationItems","topLevelRoutes","showInModalRootRouteItem","navigationItems","closeLegacy","setIframeLoadingState","modalsToRender","lastModal","lastPreModalRouteData","LegacyPageModal","_lastPreModalRouteDat","_lastPreModalRouteDat2","rootRouteItem","popVisitedModalRoutes","replaceHistoryState","replaceState","getRouteData","getController","setupPageInModal","legacyPageModel","legacyPageModal","onRouteItemChange","updatePageInModal","LegacyPageRoute","fullQueryParams","decodeURIComponent","urlSegments","urlUrl","urlSearch","queryParamsForRoute","paramObj","qs","buildQueryString","locationHash","locationSearch","pathname","locationPathname","endsWith","getRouteItemByUrl","historyUrl","_routerMicrolib","newRouteItem","scheduleReplaceHistoryState","SupportContactRoute","contacts","include","SupportIndexRoute","BaseMobileHelpRoute","shouldShow","AccessControlAccessGroup","attr","BaseModel","includeParentScopeAccessPoints","getMissingCredentialsInfo","AccessControlAccessPlanModel","inverse","hasUnmodifiableAccessPoints","hasPartitionsPreventingChange","disableModification","addHolidays","holidayIds","removeHolidays","ACCESS_POINT_ICON_MAP","AccessControlAccessPoint","statusDisplayName","isOnline","buzzDoor","lockDoor","unlockDoor","AccessControlCommonPlanUserType","BaseAccessControlGenericUserType","getAllFederalHolidays","AccessControlHoliday","AccessControlPermissionsCollection","BasePermissionsCollection","AccessControlTimetable","AccessControlUserTypeModel","BaseUser","hasPanel","accessPlanIds","sendWelcomeEmail","AccessPlanLimitIssue","AccessPlanPendingChangeCollection","AccessPlanPendingChange","getUserIcon","BaseCredential","editOptions","AccessControlCredentialConflict","polymorphic","AccessControlLockUser","ActiveDirectoryGroup","ActiveDirectoryUser","getEventKey","ActivityDay","AdcBaseModel","highlightsResourcePath","activityBar","insertIntoPrevious","previousCollection","results","ActivityFilterCatalog","ActivityFilterCategory","ActivityFilterOption","ActivityFilterSubsection","ActivityPermission","AlarmRecap","BaseActivitySearch","Event","Playlist","EnergyGoal","Model","Request","HeatMapMetricIndex","HeatMapMetric","HistoryDeviceIdFilter","HistoryDeviceTypeFilter","HistoryEventFilter","compareLocalAsc","dateLeft","dateRight","getMinutes","getSeconds","getMilliseconds","HistoryEvent","relativeEventDate","unit","delta","dirtyDateLeft","dirtyDateRight","toDate","sign","difference","abs","differenceInCalendarDays","differenceInDays","differenceInMinutes","formatRelative","numeric","HistoryLocationFilter","HistorySubLocationFilter","HistoryUserFilter","HistoryUserTypeFilter","MeterUsageGeneration","QuickFilter","isCustom","Record","AppStore","BaseAutomationItem","_dec32","_dec33","_dec34","_dec35","_dec36","_dec37","_dec38","_dec39","_dec40","_dec41","_dec42","_dec43","_dec44","_dec45","_dec46","_dec47","_descriptor37","_descriptor38","_descriptor39","_descriptor40","_descriptor41","_descriptor42","_descriptor43","isTurnedOff","isVacationOver","vacationWatchEndDateUtc","followUpAction","triggerConditions","triggerCondition","followUpTriggerCondition","BoilerControlSystem","AutomationPpTariff","AutomationPpUtility","AutomationPeakProtect","Permission","CurrentPresenceState","PresenceStateDisplay","PresenceStateDropdownItem","PresenceStateExplainerDisplay","PresenceStateSensorTriggerOption","PresenceStateTriggerOption","PresenceStateSettingsDisplay","PresenceStateTriggerDeviceSuboption","ActionType","BaseRuleFeatureType","BaseRuleCreator","Device","ExtraActionChime","ExtraAction","tones","ACTION_TONE","ACTION_VOLUME","tone","volume","ExtraActionLight","ACTION_LIGHT_PERCENT","lightLevel","subIcon","ACTION_LIGHT_COLOR_FORMAT","ACTION_LIGHT_COLOR","ACTION_LIGHT_PERCENT_WARMTH","iconColor","warmth","getWarmthFromString","percentWarmthToHexString","input","warmthInt","ExtraActionScene","_await$rule$actionExt","_await$rule$actionExt2","selectedScenes","_extraData","_rule","AutomationRulesExtraDataExtraDataAccessControl","_Number$parseInt","securityLevelId","TRIGGER_SECURITY_LEVEL","securityLevels","AutomationRulesBuilderExtraDataExtraDataGeoLocation","_this$geoFences$Numbe","_this$geoFences","geoFences","TRIGGER_GEO_FENCE","ScheduleExtraData","ExtraDeviceOptionDetail","ExtraDeviceOption","ExtraRuleOptionItem","ExtraRuleOption","MessageGroup","Message","NotificationContactAddress","AutomationRulesBuilderNotificationEmail","NotificationGroupOption","NotificationGroup","AutomationRulesBuilderNotificationMobile","AutomationRulesBuilderNotificationNewContact","BaseRestriction","ScheduleRestrictionType","EVERY_DAY_BITS","isAlways","dayBits","isAllDay","isEveryDay","isWeekdaysOnly","WEEKDAY_BITS","isWeekendsOnly","WEEKEND_BITS","isDark","beginTime","isNever","getDayScheduleDuration","scheduleDays","dateFormat","weekStartDay","weekStartsOnSunday","SUNDAY_INT","MONDAY_INT","daySeparator","dayBitsToArray","setDay","weekStartsOn","timeFormat","setMinutes","isTriggerConfigured","isActionConfigured","globalWarningMessage","requestWarningMessage","Global","triggerWarningMessage","actionWarningMessage","isNotMixedLights","getIsNotMixedLights","warningType","triggerDeviceIds","actionDeviceIds","baseRestriction","restrictions","restriction","restrictionType","scheduleRestriction","RuleTemplate","TriggerType","RuleSuggestion","SceneRuleDisplay","triggerDescription","getTriggerDescription","SceneModel","execute","_this$store$peekRecor","AdditionalOptionItem","FollowupOption","OccurrenceType","ScheduleBuilder","shouldRollbackRelationships","ScheduleEvent","ScheduleTemplate","TimeType","DetailedSchedule","WifiDetailedSchedule","ArmingSchedule","DaysOfWeekSelection","SingleSystemFilterCount","FilterCount","SingleSystemFilter","Filter","ConnectedCarAlarm","SafetyButtonAlarm","ComfortDiagnostic","ThermostatDiagnostic","CycleDiagnostic","EfficiencyDiagnostic","RuntimeDiagnostic","MODE_ICON_MAP","IconMap","getAvgTargetLabel","component","ComfortView","CycleView","RuntimeView","EfficiencyView","severityStatusIcon","severityStatusCss","getSeverityStatusCss","severityStatusTranslation","displayModeIcon","displayModeCss","mode","avgTargetLabel","contactServiceProviderMessage","BaseManagedDevice","hiddenState","getStateCssFn","getRefreshStateFn","getStateTextFn","statePollOnly","EmberPromise","AccessControlElevatorDevice","floors","getGlobalDeviceIdNumber","splitId","getStateDescription","BaseDevice","SENDING","WAITING","initiateAnimationTask","COMPLETE","asyncRequest","modelChanges","failureMessage","fnPostTask","completeAnimationTask","_data$data","changedAttributes","attributesToRevert","_changedAttributes$ke","storeService","reloadStateInfo","isAdapterErrorProcessingError","isInTransition","isHiddenState","batteryLevel","batteryLevelNull","batteryLevelClassification","fnGetBatteryText","isCritical","hasBatteryLevel","displayIcon","targetState","_this$stateInfo","stateInfo","cssHelper","getState","inTransition","isArmedOnly","simpleStateText","getSubtextFn","stateSubtext","stateTooltip","asyncStateTooltip","fnState","refreshValue","_this2","isRefreshingState","cancelDeviceStateChange","animateStateChangeTask","sendCommands","methodName","failureMessageKey","BaseLight","isDimmer","computedColor","lightColorFormat","hexColor","percentWarmth","getLightStateText","lightOptions","hasAssociatedDevices","_this$associatedCamer","associatedCameraDeviceIds","associatedDevicesNames","commandClassBasicGet","areActionsDisabled","canBeRenamed","canBeAssociatedToVideoDevice","canAccessWebSettings","canAccessTroubleshootingWizard","commandClassBasicSet","methodNAme","desiredStateObject","BluetoothArmingDevice","CameraLight","getCameraLightStateCSS","getCameraLightStateText","CommercialTemperatureSensor","TemperatureDevice","hasMalfunction","highThreshold","isThermostat","sortId","temperatureStateIcon","hasIssues","DeviceResourceInfo","getElevatorFloorStateCSS","_Unknown$Open$Closed$","_Unknown$Open$Closed$2","ElevatorFloorDevice","isElevatorBayUnlocked","_Unknown$Open$Closed$3","_Unknown$Open$Closed$4","hasScheduledAccess","getDeviceStateKey","getElevatorFloorStateText","EnergyMeter","getGarageStateText","GateModel","getGateStateText","GenericZwaveDevice","getZWaveGenericCSS","getZWaveGenericText","IqRouter","renameDeviceMessage","giveAllLightsStatus","lights","showErrorMessage","LightGroup","turnOnLights","turnOffLights","DevicesTemporaryAccessCodeModal","modalsDevicesTemporaryAccessCode_","RequestACode","temporaryAccessCodePromise","isFailedCommandState","setTimeUntilExpiration","hoursUntilExpiration","minutesUntilExpiration","handleFailedResolvedTemporaryAccessCodePromise","textExpirationTime","resolvedTemporaryAccessCodePromise","_resolvedTemporaryAcc","_resolvedTemporaryAcc2","getLockStateText","openFailedCommandState","MotionCamera","getMpersDeviceStateText","getSignalStrengthTitle","signalStrength","getSignalStrengthIcon","charAt","getSettingsText","displayStateText","sensorActivationText","arm","showClearFaults","localePath","armingStates","disarm","SmartChimePermission","RemoteTemperatureSensorModel","_await$this$thermosta","_await$this$thermosta2","MAX_SAFE_INTEGER","RemotesModel","getSFGStateText","getFilteredTroubleConditions","_troubleConditions$fi","troublesPromise","deployDevice","_troubleConditions$fi2","SensorThreshold","uniqueSensorIconType","deviceRole","deviceRoleIcon","uniqueIconTypeFromDeviceRole","uniqueIconTypeFromDeviceType","getStateFromType","_eventType","Close","ShadeModel","shadeLevel","getShadeStateText","shadeOptions","encryptionTypeName","baseResource","wifiSetting","NoEncryption","encryptionType","getNetworksAttachedToVideoCameras","getAccessPointsScannedWifiNetworks","accessPointDeviceId","getAccessPointWifiSignalStrength","connectSmartChimeDeviceToWirelessNetwork","ssid","pwd","encryptionAlgorithm","deviceIdsAttachedToNetwork","reason","testChimeTone","chimeVolume","chimeTone","chimeSoundDescription","W115CChimeSoundsEnumObj","StateInfo","getSumpPumpStateText","SwitchModel","getSwitchStateText","getTemperatureStateText","humidityText","getHumidityStateText","humidityLevel","tempForwardingActive","hasRtsIssue","deviceIcon","rtsIssueText","activeState","getValueStateText","supportsHumidity","ThermostatRuleSuggestionsInfoModel","TYPE_HEAT","TYPE_COOL","SETPOINT_CHANGE_TIMEOUT_MS","MODE_CHANGE_TIMEOUT_MS","getThermostatSimpleStateText","getThermostatStateKey","getThermostatStateText","inferredState","modeText","autoModeKey","inferredModeKey","hasSetpoint","getSetPoint","hasPendingSetpointChange","hasDirtySetpoint","processStateChanges","pendingStateChanges","addStateChanges","stateChanges","debounceDelay","_this$pendingStateCha","getFanStateInfo","activeStateInfo","idleStateInfo","unknownStateInfo","fanMode","_dec48","_dec49","_dec50","_dec51","_dec52","_dec53","_dec54","_dec55","_dec56","_dec57","_dec58","_dec59","_dec60","_dec61","_dec62","_dec63","_dec64","_dec65","_dec66","_dec67","_dec68","_dec69","_dec70","_dec71","_dec72","_dec73","_dec74","_dec75","_dec76","_dec77","_dec78","_dec79","_dec80","_dec81","_dec82","_dec83","_dec84","_dec85","_dec86","_dec87","_dec88","_dec89","_dec90","_dec91","_dec92","_descriptor44","_descriptor45","_descriptor46","_descriptor47","_descriptor48","_descriptor49","_descriptor50","_descriptor51","_descriptor52","_descriptor53","_descriptor54","_descriptor55","_descriptor56","_descriptor57","_descriptor58","_descriptor59","_descriptor60","_descriptor61","_descriptor62","_descriptor63","_descriptor64","_descriptor65","_descriptor66","_descriptor67","_descriptor68","forwardingTemperatureText","forwardingAmbientTemp","displayHeatSetpoint","displayCoolSetpoint","displaySetpoint","getInferredState","hasHeatSetpoint","hasDirtyHeatSetpoint","hasDirtyCoolSetpoint","availableSensors","sensorId","pairedThermostat","valveSwitchesDescriptions","valveSwitches","valveSwitch","isPoolController","baseValue","mapPoolControllerState","supportsTempMode","getSetpointBoundary","boundaryType","colored","getThermostatStateIcon","scheduleClass","scheduleMode","fanIconName","fanClass","showRts","supportsPairing","rtsIconName","rtsClass","localDisplayLockingIconName","localDisplayLockingMode","localDisplayLockingClass","homeCoolSetpointText","getSetPointStateText","homeCoolSetpoint","homeHeatSetpointText","homeHeatSetpoint","awayCoolSetpointText","awayCoolSetpoint","awayHeatSetpointText","awayHeatSetpoint","sleepCoolSetpointText","sleepCoolSetpoint","sleepHeatSetpointText","sleepHeatSetpoint","setHeatSetpoint","desiredHeatSetpoint","setSetpoints","setCoolSetpoint","desiredCoolSetpoint","setSetpointsOnSetpointType","statusSetpoints","setScheduleMode","desiredScheduleMode","setFanMode","desiredFanMode","desiredFanDuration","setRts","desiredRts","RTS_CHANGE_TIMEOUT_MS","setLocalDisplayLockingMode","desiredLocalDisplayLockingMode","startWizard","ret","getScheduleTitle","getThermostatScheduleModeKey","getFanTitle","getThermostatFanModeKey","getLocalDisplayLockingModeKey","ValveSwitch","hasWaterIssues","waterIssues","issueDescription","_this$waterIssues$fir","toUpperCase","issueIcon","volumeUnits","volumeUnit","volumeUnitsShortForm","meterStatusListViewText","waterUsageToday","meterStatusIconViewText","pairedWaterValve","getWaterValveStateText","X10light","DiscoverArticleGroupItem","DiscoverArticleItem","hasLegacyUpsellOffer","contentType","articleId","DiscoverContentAction","DiscoverContentBlock","isUpsellProductStockImage","isImage","blockSubType","ImageProductStock","altText","_this$extraData","extraDataParts","recordAction","GetDiscoverDashboardResult","EnterpriseTroubleIssuesInfo","BaseFilterCount","BaseFilterModel","reloadableRelationships","LocationUserInfoModel","reloadRelationships","LocationModel","runVideoHealthReport","runFleetTripReport","OccupancyState","SubFilter","BaseSubFilter","SummaryPageDeviceInfo","Tenant","isTenantValid","displayEmailErrorString","requirePhoneNumber","displayPhoneErrorString","UnattendedShowingSetting","AutoRelock","AutomaticPanelArming","AutomaticallyEnableBackgroundCapture","BaseCustomerLogo","BaseSupportPhone","BusinessHourTemplate","toJSON","CompanyLogo","CustomerRelationshipManagementIntegration","CustomizeWelcomeEmail","DeleteExpiredUser","DeleteInactiveUsers","EnergySaverRule","GuestLoginAccess","HouseReadyEarly","LoginTemplate","hideLoginTemplate","copyLoginTemplate","systemGroupIds","LoginTemplatesForGroupWithRole","showAllTemplatesOfType","LoginTemplatesForGroup","MobileBadge","NoiseMonitorSettingsTemplate","OccupancyBasedPoolControllerRule","OccupancyBasedThermostatRule","PoolControlFilterPumpScheduleTemplate","PreloadedCodeForUserCreation","PropertyManagementIntegration","PropertyManagementResident","ScheduleEmail","ScheduleWelcomeMessage","SelfGuidedToursAppointmentLength","SelfGuidedToursCCVerification","SelfGuidedToursCheckpointId","SelfGuidedToursCommunitySiteMap","EnterpriseSettingsSelfGuidedToursConfigureFunnelCrm","EnterpriseSettingsSelfGuidedToursConfigureKnockCrm","SelfGuidedToursCustomUrl","SelfGuidedToursCustomerLogo","SelfGuidedToursGateCode","SelfGuidedToursGeofence","SelfGuidedToursHoursOfOperation","SelfGuidedToursSupportPhone","SelfGuidedToursTermsAndConditions","SelfGuidedToursWebPrimaryColor","SendEmailByDefault","SendFollowUpText","SupportPhone","TemporaryAccessCodeAvailabilitySchedule","TemporaryAccessCodeDuration","TemporaryAccessCode","ThermostatScheduleTemplate","ThermostatSettingsTemplate","changeDefaultsToCelsiusIfNeeded","configurationName","temperatureUnit","configValue","UserCodeTimes","WaterMeterConfigurationTemplate","WaterMeterConfiguration","WelcomeEmail","WelcomeMessage","BaseTemplateItem","EscalatedEventsEvent","RecordModel","deviceDescription","eventDescription","BaseFeature","ICONS","COLOR_CLASSES","FeatureCategory","categoryEnum","colorCss","FeatureSuggestion","FeatureTask","BaseAlertItem","CarIssueItem","FleetFilterCount","FleetFilter","FleetTripDay","FleetTrip","FleetVehicle","numberOfIssues","hasAlerts","numberOfAlerts","TripAlertItem","Fence","GeoDevice","TemperatureSensorGroup","IdentityModel","NoPreloading","_descriptor69","_descriptor70","_descriptor71","_descriptor72","_descriptor73","_descriptor74","_descriptor75","_descriptor76","_descriptor77","_descriptor78","_descriptor79","_descriptor80","_descriptor81","_descriptor82","_descriptor83","_descriptor84","_descriptor85","_descriptor86","_descriptor87","_descriptor88","_descriptor89","_descriptor90","_descriptor91","_descriptor92","helpTourId","enableDisableLockdown","reloadContext","reloadContextAndModel","ImageSensorImage","peekInMotion","peekInNow","UploadClipPermissions","BaseLogin","elevateLogin","CustomerLogin","LoginPermissionsCollection","NonGroupLogin","SystemGroupLogin","RouteItemRelationship","unwrapRouteItems","routeItems","unwrapRouteItemsHelper","_routeItems$map$flat","_routeItem$relationsh","_routeItem$relationsh2","RouteItem","shouldBeShown","showOnlyIfChildRoutesExist","isNavigationItem","highlightColor","colorItem","highContrast","darkHighContrast","isSubRoute","_this$parent","showInModalDefault","_get3","rootItem","iterationsCount","BaseNotification","NotificationType","BaseReport","getMostRecentReportViewURL","generateNewReportView","ReportCatalogItem","ReportView","cached","AlarmType","AlarmPropertiesMap","labelTranslationKey","ConnectedCar","PersonalSafetyAlarmLink","alarmType","PersonalSafetyAlarm","PersonalSafetyEmergencyContact","fullName","LocationType","PersonalSafetyLocation","PersonalSafetySession","PersonalSafetyUserProfile","PointCentralIdentity","DisplayField","GroupStructure","LongTermRentalCommunity","ResidentInfo","ResidentMoveInfo","LockProgrammingCode","getWithCode","submitRandomizeRequest","SafetyButtonCustomerProfile","SafetyButtonNote","SafetyButtonSession","RtsPresetModel","hasDirtyIds","changedAttrs","SchedulePresetTimeFrame","SmartSchedulesAudit","SchedulesTransitionEvent","Reason","ScheduledAppointment","customerLocalizedServiceDate","formattedStartTime","formatTimeTz","formattedEndTime","customerLocalizedServiceDateEndRange","formattedDuration","estimatedDurationMinutes","notificationText","formattedReminder","appointmentInfo","notificationButtonText","StartAndEndTime","defaultDate","setHours","timePieces","Timeframe","formattedLocalStartTime","formattedDurations","getFormattedAppointmentTime","confirmedDuration","timeItem","AccessPointPanelSignalStrength","AccessPointWifiSetting","CustomerMovingFormResult","validateInput","DealerCustomerAppPromotion","ActiveDirectoryClientIdentifier","GroupToAccessPlanMapping","GroupToEnterpriseLoginMapping","SensorRowInfo","EverbridgeConfiguration","fetchEverbridgeTemplates","username","password","organizationId","EverbridgeTemplate","DeviceCatalog","basicCommandClassSupportedDevices","managedDeviceCategories","managedDevices","supportsCommandClassBasic","ManagedDeviceCategoryModel","deviceMap","ZwaveDeviceCatalog","ManagedAccessRequest","excludedRolesHtmlSafe","excludedRolesHtml","MonitoringCertificate","SettingsMonitoringStationPropertyActionCategory","SettingsMonitoringStationPropertyActionDevice","SettingsMonitoringStationPropertyAction","PropertyNote","SettingsMonitoringStationVideo","SettingsMonitoringStationVisualVerificationDevice","BluetoothDisarmingSettings","WifiNetwork","getAccessPointWifiSetting","WifiSetting","RestrictedAccessSetting","Threshold","VoiceAccessLevelSettingItem","VoiceControlDeviceSetting","VoiceSettingsPin","Property","SupportFeedback","AvailableSystemItem","isGroup","Configuration","MsaAssociatedSystem","SystemGroupCacheDatum","SystemGroup","allNestedSystemIds","getAllLocationIds","moveSystemsToGroup","userAccessEnum","addSystemsToGroup","addSubgroup","childGroupId","removeSubgroup","groupToRemoveId","getAdminLoginNames","elevateChildGroupAdminLogins","loginNames","removeSystemsFromGroup","moveSystemsToChildGroup","childGroupName","addLocationsToGroupViaLogin","DefaultSystemMode","numberOfPartitions","hasPartitions","getLastSignificantEvent","stopAlarms","updatePrimaryPartition","lastFive","enablePanelWifi","connectPanelToWifi","networkId","waitConnect","getControllerNamesWithOperatingModeNotSynced","systemMode","TroubleConditionExtraDataCollection","severity","descriptionWithSystemNameAndDate","sinceUtc","mute","muteOption","internalUseOnly","Footer","HomeCard","GetUpsellShoppingCartResult","UpsellCampaign","oneTimeFeeText","isAPlanBasedOffer","oneTimeFee","price","monthlyFeeText","AccessPointCollectionModel","hasNoAccess","accessPointItems","itemsWithAccess","hasBeenModified","canBeRolledBack","AccessPointCollectionsSummaryModel","locksAndPartitionsAccessPointCollections","partitionsAccessPointCollections","locksAccessPointCollections","hasAllDeviceAccess","offlineAccessPointsHaveAccess","offlineAccessPoints","hasDirtyOfflineAccessPoints","devicesWithoutScheduleSupport","supportsTemporarySchedule","supportsWeeklySchedule","systemsWithAccess","systemsAccessPointItems","accessItems","ai","hasAccess","failedSystems","systemIdsWithAccess","hasFailedAccessPoints","pendingSystems","hasPendingAccessPoints","failedLocationCount","pendingLocationCount","unchangeablePartitionAccessPoints","accessPointCollections","existingPlusFutureAccessHasBeenModified","_this$originalSystemG","_systemGroupIdsWithEx","systemGroupIdsWithExistingPlusFutureAccess","originalSystemGroupIdsWithExistingPlusFutureAccess","hasMultiGroupAccess","locksAndPartitions","accessPlansAccessPointCollections","locationItem","locationItemsArray","collections","lockAccessPoints","partitionsAccessPoints","_this$partitionsAcces","nonPartitionAccessPoints","hasLockAccess","updateAccessPlansAccessPointCollections","AccessPointItem","ACCESS_TYPE","ALL_EXISTING_FUTURE_ID","ALL_EXISTING_ID","BY_LOCATION_ID","NO_ACCESS_ID","BY_GROUP_ID","DeviceAccessModel","UnknownUser","isAllTimesSelected","isWeeklyScheduleSelected","isTemporaryScheduleSelected","systemsWithAccessCount","hasAllLocationAccess","totalUnitsAvailableCount","accessTypeId","hasMLEGUserAccess","hasWeeklySchedule","hasValidSchedule","showScheduledUserCodesWarning","locationCount","scheduleSummaryBadge","_this$weeklySchedule","_this$temporarySchedu","_this$weeklySchedule$","_this$weeklySchedule2","_this$temporarySchedu2","_this$temporarySchedu3","availablePointCentralUserTypesForUser","generateNewCodeAndSave","validateUserCode","saveModel","accessPointCollectionsSummaryModel","UnassignedUserCode","displayUserCode","lastAccessUtc","hasBeenAccessed","minuteDelta","hourDelta","compareAsc","differenceInCalendarMonths","setMonth","isLastMonthNotFull","endOfMonth","isLastDayOfMonth","differenceInMonths","relativeTime","union","addressId","prop","initials","promoteUser","duplicateContactIds","ContactAddress","addressToDisplay","addressTypeDesc","addressType","IPhonePush","sendTestClip","videoFormat","CountryMobileCarrier","EmailAddress","MobileAddress","MonitoringStationAddress","PermissionsCollection","PushDeviceAddress","UsersQuickFilter","NOT_CALIBRATED","PARTIALLY_CALIBRATED","FULLY_CALIBRATED","SmrfStatus","calibrationState","_this$acceptedImages$","imageCount","acceptedImages","enrollSmrf","UserAttributeCollection","cacheAttributeValues","attributeValuesCache","UserAttributeField","sendGuestWelcomeEmailByDefault","sendNonGuestWelcomeEmailByDefault","sendGuestWelcomeTextByDefault","sendNonGuestWelcomeTextByDefault","isPointCentralUnknown","sendResidentVisitorWelcomeSms","assignBackupCodeUser","VoiceAddress","AggregatedVideoEventsSummaryModel","AiDeterrenceUsageModel","AlertFormat","AnalyticsSnapshotEvent","isSnapshotEvent","BaseAnalyticsRule","hasSelectedRecipients","isEmptyObject","emailRecipients","mobileRecipients","pushDeviceRecipients","monitoringStationRecipients","VehicleClassificationEnums","BaseMediaEvent","icons","ovClassifications","fnGCD","gcd","orientation","hasVehicle","CachedDaysOfRecordedVideo","BoundingBox","Status","OPERATOR_CAMERA_GROUP_ID","OPERATOR_SVR_GROUP_ID","OPERATOR_SD_GROUP_ID","ESCALATED_EVENTS_CAMERA_GROUP_ID","cameraOrder","createOrUpdateCameraGroupWithCameras","CameraGroup","sortByOrder","isLiveViewMobileExclusive","CameraLightSetting","CameraLinkInfo","CameraPassword","CameraPirSetting","CameraSiren","ClipDonationAgreement","BaseAnalyticsCamera","BaseCamera","defaultNotificationFilterTypes","supportedNotificationFilterTypes","filterType","BaseCameraCollection","hdSelected","inCriticalDataMode","CriticalDataMode","getSVRStreamingParameters","multipleStreams","getSvrClipDownloadUrl","durationSeconds","isDownscaledVideo","includeAudio","appendAdditionalTimestamp","getSVRIntervals","channel","getSVRMotionIntervals","startDateTime","uploadSvrVideoClip","getSDCardStreamingParameters","proxyUrl","associatedDevices","associatedDevicesCache","getDevicesAssociatedWithCamera","resetAssociatedDevicesCache","_this$cameraLight","shouldLightTurnOffWithLiveViewEnd","cameraLight","DigitalFovCamera","DEFAULT_MAX_NUMBER_OF_RULES","BUSINESS_ACTIVITY_ANALYTICS_RULE_TYPES","getDefaultSupportedFilterTypes","OvReadyCamera","numberOfSavedRules","ovRules","hasMaxRules","maxNumberOfOvRules","isGroundZoneRecommended","cannotSetupRule","isBusinessActivityAnalytics","isCalibrationRequired","failedToCommunicateWithOvProxy","supportsBusinessActivityAnalytics","ruleType","defaultLightRuleFilterTypes","supportedLightRuleFilterTypes","SdCardCamera","getClipDownloadUrl","getThumbnailsDownloadUrl","getSVRConnectivity","svrGlobalDeviceId","ThirdPartyAnalyticsCamera","ThirdPartyAnalyticsFilterOption","availableEventTypes","_isBusinessActivityAnalytics","VarifocalFovCamera","updateFovFocus","newValue","autoFocusCamera","resetVarifocalLens","newProps","getFisheyeSettings","saveWithDebounce","DewarpConfig","DigitalPtzPosition","DoorbellButtonPressEvent","FamiliarSubjectCameraContext","FamiliarTargetClusterProfile","FamiliarTargetEnrollmentClusterReview","FamiliarTargetEnrollmentCluster","removeImage","reviewedImages","newImages","completeReview","review","clusterId","reviewType","imagesToReview","clusterDeletedByReview","fullReload","_review","moveImagesToCluster","images","_review2","reloadImages","saveProfile","resolvedProfile","isPending","hasNoImages","setReview","isConfirmedForCluster","requiresReview","unsetReview","moveImageToClusterAndSave","newCluster","fullImageUrl","FamiliarTargetEnrollment","MaxAllowedVehicles","MaxAllowedFaces","removeCluster","cluster","clusters","isMaxFamiliarSubjectReached","isMaxAllowedVehiclesReached","isMaxAllowedFacesReached","FamiliarTargetFeedbackEvent","IntercomApartment","IntercomCallRule","IntercomContact","IntercomDirectoryList","IntercomDirectory","Name","IntercomPairedUnit","IntercomQrCode","Interval","IntervalsGroup","OnvifCameraDiscoveryResult","getPostObject","OnvifCameraRenameResult","OnvifCameraStream","OnvifPtzPreset","OvEvent","OvRuleGroup","DEFAULT_PERSON_COUNT_THRESHOLDS","OvRuleSnapshot","DEFAULT_WAIT_TIME_THRESHOLDS","isParcelDetectionActive","activeParcelDetectionEvents","isCroppedParcel","ParcelDetectionRule","VideoPerimeterGuardConfig","Deterrence","SteveAngry","English_US_Azure","AssociatedDevicesPermission","ClipsUsageReportPermission","OnboardPermission","OvRulePermission","SavedClipPermissions","VideoSettingsPermission","VideoStreamingPermissionsCollection","QualitativePowerCheck","PrivacyZone","PrivacyZonesSetting","someZonesEnabled","privacyZones","privacyZone","RuleUsage","isAtHighUsage","percentUsed","BaseVideoSchedule","SdCardRecordingSchedule","SdCardCameraUsageInfo","SdCardThumbnailEndpoint","apiPrefix","reformat","reformattedSdCard","AlertsSetting","BaseVideoSetting","AudioSetting","ChimeToneSetting","DeviceStatusHistoryItem","DeviceStatusHistoryList","DeviceStatusInfo","NotConnected","DoorbellNotificationSetting","DoorbellVideoConfig","MotionThresholdUnknown","GeneralSetting","ImageSetting","InfraredSetting","AssociatedDeviceSelect","DeviceSelect","IntercomConcierge","IntercomCustomerApartmentInfo","IntercomLogin","IntercomLogo","IntercomUnitLoginPairing","VideoDeviceSelect","LedLightSetting","LiveVideoConfig","MicrophoneSpeakerSetting","MotionConfigurationSetting","DEFAULT_SENSITIVITY_SLIDER_VALUE","PirVideoConfig","SavedVideoSetting","VideoConfig","VideoSettingsOverview","SignalStrengthHistoryItem","SignalStrengthInfo","SmrfImage","SmrfLegalText","SmrfPermission","thumbnail","delay","delayedReload","OeStreamLog","OeStreamUpdateLog","WebrtcStreamLog","WebrtcStreamUpdateLog","WebrtcWavefrontReportMessage","StreamOptionsCollection","StreamSetting","StreamVideoToPanelInfo","SvrStateInfo","SvrThumbnailEndpoint","ThirdPartyAnalyticsEventType","ThirdPartyAnalyticsRule","TouchlessRingRule","AnalyticsVideoSource","BaseLiveVideoSource","ApexConnectionInfo","VideoSource","EndToEndWebrtcConnectionInfo","LiveVideoSource","ProxyWebrtcConnectionInfo","SdCardVideoSource","SvrVideoSource","WebrtcStreamQualityMessage","streamID","HEALTH_GOOD","HEALTH_DANGER","VideoUsageModel","health","uploadUsagePercent","projectedOverQuota","projectedMonthlyUploads","uploadQuota","PanicEventTypes","VisualVerificationAlarm","_this$thirdPartyEvent","thirdPartyEventType","VisualVerificationEvent","markAsViewed","PageFeature","OperatorPropertyNote","SessionDeviceLink","Session","UnexpectedEventsIndicator","VisualVerificationEventIdList","VisualVerificationEventId","queryForecasts","Forecast","Client","deviceTypeDescription","hasDeviceSettings","emberSettingsRoute","getWifiGroupTranslationKey","DeviceCategory","DeviceProfile","pausedCount","nameIcon","isManagedProfile","nameStrs","startingChars","subStr","_subStr$","toggleProfilePause","WifiDevice","isNotGuestOrOffline","isGuestNetwork","network","connectionFrequencyString","getConnectionFrequencyString","connectionFrequency","networkGroupString","Network","UnknownGroup","isIQR2Network","devicePanelType","isSecurityNetwork","networkGroup","networkGroupWord","networkBand","secondaryNetworkType","frequency","networkEncryptionWord","encryption","ProtocolTranslationMap","PortForwardingRule","protocolWord","protocol","StaticLease","NewsAndUpdatesRoute","NotFoundRoute","routePath","formatURL","EditManageDevicesController","saveDevice","deleteDevice","EditManageDevicesRoute","ManageDevicesIndexController","currentLocaleDisplayName","editLanguageRoute","NotificationsManageDevicesIndexRoute","_devices$objectAt","WAITERS","symbolName","symbol","Symbol","for","global","globalThis","self","getGlobal","waiters","Ember","registerWaiter","pending","waiter","waitUntil","debugInfo","getPendingWaiterState","NoopTestWaiter","beginAsync","endAsync","buildWaiter","embroiderBundles","EmbroiderRouter","EmberRouter","lazyRoute","bundles","bundle","lazyEngine","engine","_engineInfoByRoute","engineName","isEngine","_getQPMeta","handlerInfo","seenByRoute","rest","setupRouter","isSetup","microLib","getRoute","isEmbroiderRouterHandler","_handlerResolver","original","handler","_this$lazyRoute","Router$1","onPageTransition","isPolling","startPolling","requestIdleCallback","requestAnimationFrame","currentURL","metrics","trackPage","ApplicationRouter","config","locationType","announcer","announce","removeTrapFocusListener","scheduleTask","announceRouteChange","mount","EmbeddedRecordsMixin","isEmbeddedRecordsMixinCompatible","attrs","defaultEmbeddedRecordSerializerAttribute","AccessPlanPendingChangeCollectionSerializer","pendingChanges","ExtendedActivityHistoryRequestSerializer","ApplicationSerializer","eahStress","stressTestingParameters","BaseSerializer","PresenceStateSensorTriggerOptionSerializer","sensorSuboptions","defaultAttribute","PresenceStateSettingsDisplaySerializer","triggerOptions","sensorTriggerOption","PresenceStateSensorTriggerDeviceSuboptionSerializer","durationDropdownOptions","PresenceStateTriggerOptionSerializer","NewContactSerializer","mobiles","emails","PolymorphicSerializer","notificationContactAddresses","scheduleEvents","ScheduleEventSerializer","embedded","CarMonitorSerializer","normalizeSingleResponse","primaryModelClass","requestType","normalizedDocument","setupAlertItemsAssociation","normalizeArrayResponse","carIssueItemsLinks","related","tripAlertItemsLinks","relationships","carIssueItems","tripAlertItems","CommercialTemperatureSensorSerializer","_normalizedDocument$m","shouldPollRefreshState","DiscoverArticleGroupItemSerializer","articleList","blocks","GetDiscoverDashboardResultSerializer","articleGroupList","tenants","unattendedShowingSetting","thresholdList","filterPumpDayOfWeekInfo","configurations","IdentitySerializer","normalizeSaveResponse","_normalizedDocument$d","EverbridgeConfigurationSerializer","everbridgeTemplates","DeviceCatalogSerializer","ManagedDeviceCategorySerializer","propertyActionDevices","visualVerificationDevices","VoiceControlDeviceSettingSerializer","voicePins","voiceAccessLevelSettingItems","SystemGroupSerializer","voiceAccessPointCollections","sourceCamera","familiarTarget","IntercomCallRuleSerializer","OvRuleSerializer","touchlessRingRule","perimeterGuardConfig","parcelDetectionRule","microphoneSpeakerSetting","chimeToneSetting","doorbellNotificationSetting","ledLightSetting","infraredSetting","liveVideoConfig","savedVideoSetting","doorbellVideoConfig","pirVideoConfig","WifiDeviceProfileSerializer","tagIndex","AdcGtm","Service","_window$dataLayer","_firstScript$parentNo","dataLayer","firstScript","getElementsByTagName","gtmScript","insertBefore","_document$getElements","gtm","head","script","AjaxService","BaseAjaxService","optionsOrType","httpVerb","useJsonApiFormat","apiRequestForDataRecord","_response$data","noInternetConnection","Announcer","announceMessage","announceTone","BleNetworkSetup","scanNetworksFromCamera","setSelectedNetworkInformation","_network","disconnectCamera","dashboardCardsDevicesPartitionCard_","goToStep","_this$getCardElement","cssView","cssEdit","cssMasked","translationTokens","cssTransition","buttonName","getCardElement","innerText","addTryAgainClickHandler","updateElementMask","CardPreviewPartitionsCard","maskId","clearMask","_document$getElementB","refreshCardPreview","onDeviceChange","_document$getElementB2","currentDealer","tearDown","promptStateChanged","appTourOnboardingCardPreviewPartitionsCard_","CardPreview","_this$args$showButto","showCard","tearDownCardPreview","deviceData","eachAttribute","demoDevice","_this$demoDevice","getResourcePrefix","accountType","stepName","getTextsForStep","ensureNavigationOpen","menuButton","RSVPPromise","ensureNavigationClosed","backdrop","stepIntroModal","intro","shouldUseLightText","getIntroContent","resourcePrefix","stepHomeLinkIntro","mediaService","isLink","stepCardPreview","contentComponent","card","cardType","stepCardMoreDetails","elementToAttachTo","stepHeroCardActivity","stepHeroCardStatus","HERO_CARD_STATUS_KEY","scenesExtraText","heroCardActions","getHeroCardActionsText","heroCardElement","scenes","formatListOfStrings","sectionClassName","listOfStrings","andString","firstString","lastString","middleStrings","stepHomeCardRearrangement","homeLink","stepOutro","outro","getOutroNextStepsText","navElement","pagesToVisitList","translationName","pagesToVisitText","numberOfPages","addObjects","getRouteProperty","object","processVisitedRoutesStack","handleRoutesStackForWizards","lastPreErrorUrl","isFirstRoute","resetVisitedRoutesStack","previousRouteName","newRouteName","fnGetQueryParamsString","routeDataObject","areRoutesTheSame","stackSize","previousRouteItem","potentialParentRouteItem","newRouteItemId","popObject","shouldRouteReplacePreviousOnStack","rootItemForRouteItem","ensureRootVisitedRoute","routeIndex","saveRouteStackToLocalStorageIfNeeded","routeStackInfo","indexOfEntryPoint","siteEntryPoint","persistedRouteStackName","resolveTargetRoute","queryParamsIn","searchQueryParams","isNative","queryCharIndex","decodeURI","transitionFlowFromRouteToRouteId","routeItemId","overwriteVirtualRouteNavFunctions","getVisitedRoutesStackLength","uiComponents","navApi","navigationApi","componentsToInit","routeViewNavigationApi","transitionToPreviousRouteExplicit","knownPreviousRoute","previousNonSkippedRoute","popRoutesStackToPreviousNonSkippedRoute","doesSupportGoBack","goBack","currentRouteItem","navigateBackToNativeApp","containsQueryParams","onsubmit","ContextManager","BaseContextManager","hasTouchEvents","isMobileTech","hasExternalQueryParam","getIsInternalReleaseDealer","isSmrfAllowed","shouldReloadData","shouldRedirectToIndex","run","dispatchEvent","createNewEvent","switchToNewGroup","groupIdToSwitchTo","destinationRoute","triggerInactivityWarning","activateApplication","deactivateApplication","urlAfterError","urlToTransitionTo","routeItemUrl","getPersistedRouteStack","getItem","routeStack","removeItem","routeItemForRedirect","addRouteToVisitedRoutesStack","shouldResetRouteStack","_routeData$route","isNavigationTab","setPageTitle","_this$visitedRoutesSt","transitionBackToMobileApp","closeWebView","doesSupportCloseWebViewV2","closeWebViewV2","transitionBackToMobileAppOrPreviousRoute","pageToTransitionTo","transitionToRouteWithIdentityReloadIfNeeded","isNativeRoute","getRouteItemWithIdentityReloadIfNeeded","fnLookupRoute","defaultQueryParams","hasOwnProperty","routeToReplace","isSystemInstall","replaceUrl","addSearchParam","returnToRouteId","returnToUrl","queryParamsForWizard","routeItemBeforeReload","routeItemAfterReload","routeUrl","stayLoggedIn","doesSupportRefreshWebView","refreshWebView","closeMobileTechWebView","_this$identityModel","_this$identityModel2","hasCompletedOnboarding","getService","serviceName","relativePath","idsToCheck","setupApplicationContextManager","EngineConfigurationService","BaseEngineConfigService","URL_ENUMS","getRouteIdFromRouteName","addDeviceResource","ADD_DEVICE_RESOURCE","routeIdEmberAddDeviceCategories","routeIdEmberAddDeviceDevices","routeIdEmberAddDeviceStart","routeIdEmberAddDeviceStartInfo","routeIdEmberAddDeviceLinkStart","routeIdEmberAddDeviceLinkInProgress","routeIdEmberAddDeviceLinkComplete","routeIdEmberAddDeviceTryEquipment","routeIdEmberAddDeviceInstallEquipment","routeIdEmberAddDeviceName","routeIdEmberAddDeviceAlreadyLinked","routeIdEmberAddDeviceComplete","routeIdEmberWizardLaunch","routeIdEmberAddDeviceTroubleshoot","routeIdEmberAddDeviceMount","routeIdEmberAddDeviceChooseDevice","routeIdEmberAddDeviceTroubleshootMissing","routeIdEmberAddDeviceDefaultNotifications","routeIdAddGarageGatewayV1","routeIdEmberManageDevices","routeIdEmberAddDeviceDifferentAccounts","routeIdEmberAddDeviceLinkUnsuccessful","ErrorReportingService","BaseErrorReporting","errorsToIgnore","getETI","xhrRequestsToIgnoreInBreadcrumbs","initializeForSession","localeModel","errorReportingConfiguration","releaseId","errorReporting","envErrorReporting","mergedErrorConfig","logErrorsToConsole","showDebugInfo","machineName","serverName","showNotificationOnError","redirectToErrorRouteOnUnhandledError","servicePlan","configure","dsn","release","fnGetRelationshipId","relationshipName","rel","setContext","tags","isoCode","dealerId","isSentryLoaded","preSentryErrors","beforeSend","hint","env","sentryBeforeSendHandler","supEvent","getExceptionStringValue","shouldRedirectToAppError","errorMessageHeader","makeObject","getErrorHeaderAndIcon","ACTION_PREVIOUS","ACTION_NEXT","ACTION_FINISH","ACTION_STOP","getButtonFunction","actionName","goToPreviousStep","goToNextStep","finish","setClassesOnBody","processSteps","stepsIn","stepsCount","step","isLastStep","isFirstStep","processedButtons","buttonData","stopTour","isCompleted","removeResizeListener","currentStep","showNotifications","unMute","doOnAfterClose","helpTourComponent","moveToNextStep","currentStepIndex","setupResizeListener","resizeListenerId","HelpTourService","HomePageManager","activeCardId","currentElement","_currentElement$close","_currentElement$close2","trapFocusInHomepageCard","_this$trapFocusListen","newListenerId","addWeakTrapFocusListener","scopeSelector","escapeCallback","_this$element","treatArrowsAsTabEvents","oldListenerId","trapFocusListenerId","_this$trapFocusListen2","focusFirstElement","getIntervalDuration","timeToLogout","InactivityWarning","intervalSeconds","delayTime","newInterval","updateRemainingTime","interval","getInactivityWarningDuration","timeToShow","continue","clearInactiveStatus","BaseInitialSetupStepComponent","submitStep","fnRequest","btnAnimation","msgSuccess","clearValidationErrors","updateModalProp","continueToNextStep","updateModalProps","getInitialSetupImagePath","imageName","appLanguageSelect_","AgreementsStep","BaseStepComponent","initStep","getNextMissingAgreement","updateModal","agreement","currentTitle","disagreeButtonText","isDeclinable","warningModalMessage","declineAgreement","agreeButtonText","agreeToAgreement","additionalCheckboxValue","languageChanged","newLanguage","locales","refreshCulture","hasLogoutButton","downloadAppRedirect","shouldShowMobileView","_this$args$isMobileBr","isMobileBrowserManuallySet","getItems","BillingInformationStep","states","_this$billingInformat","_this$billingInformat2","billingInformation","availableStates","creditCardTypes","_this$billingInformat3","_this$billingInformat4","availableCreditCardTypes","_this$billingInformat5","clearNotifications","EmailVerificationStep","initialPrimaryEmailAddress","primaryEmailAddress","inputEmail","sendVerificationEmail","InitialSetupMessagesStep","accountInformation","getNextMessage","canBeCleared","NewsUpdatesStep","SecurityQuestionStep","_response$value","getSecurityQuestions","securityQuestions","setSecurityQuestion","selectedQuestionId","answer","PromiseObject","allAwareDIDs","UpdatePasswordStep","updatePassword","newPassword","confirmationPassword","shouldLogOutAllDevices","shouldLogOutSmartDevices","logoutDeviceIds","hostname","savedLoginDevices","_this$model$devices$d","smartSavedLoginDevices","_this$savedLoginDevic","_this$savedLoginDevic2","getPasswordStrength","passwordStrengthData","InitialSetupModal","updateCurrentStep","visibleComponent","_SecurityQuestionSetu","SecurityQuestionModal","UpdatePasswordModal","EmailVerificationModal","MissingAgreementsModal","BillingInformationModal","CustomerMessagesModal","NewsUpdatesModal","AmbientDownloadAppModal","initModal","initialSetupSteps","initialSetupCompleted","IdentityManager","_this$contextManager","markContextSwitchInitialized","recordArrayManager","_liveRecordArrays","_this$pointCentralIde","unloadUnusedRouteItems","stayOnCurrentPageAfterContextSwitch","markContextSwitchResolved","exception","_arpFeatures","addFullstoryTrackingScript","fullStoryConfig","loadSession","websocket","WebsocketHandlers","pendoConfiguration","loginFlags","pendo","clearSession","initializePendoMetrics","favIcon","favIconUrl","primaryColor","secondaryColor","navColor","updateDealerColors","updateDeviceStateColors","isInternalDealer","displayModeFeatures","siteAppearance","supportedDisplayModeFeatures","activateDisplayMode","applicationSessionProperties","changeLocale","hasTroubleConditionsService","createUpcomingAppointmentNotification","eachRelationship","kind","availableSystemItems","groupItemToSelect","relationshipsToReload","_this$dealerPath","rootStyle","theme","_dealer$key","_dealer$key$light","_dealer$key2","_dealerBrands$adc$key","processContextSwitchTask","switchToNewGroupTask","refreshApplicationTask","setupApplicationTask","checkLegacyErrorManagerMessagesTask","closeAllModals","initialSetupCompletedTask","_identityModel$availa","currentRouteItems","availableRouteItems","setIsInactiveForApplication","isInactiveParam","upcomingAppointmentInfo","logoName","isLoadingOnce","logoutPage","_this$identityModel3","_this$identityModel4","getSelectedSystemTask","isSectorDealer","_this$identityModel5","_dealer$id","_this$identityModel6","InstallManager","CustomerSiteIntlService","ADCIntlService","NavigationService","userHasAccess","_routes$findBy","addSearchQueryParam","getTransitionArgs","targetRoute","models","possibleOptions","_options","_options$queryParams","_options2","PersonalSafetyService","session","TrackedArray","emergencyContacts","refreshSession","alarmId","loadSessionTask","BrowsersSupportingAudioRecording","Chrome","Edge","ScreenRecordingService","mediaRecorder","chunks","playbackType","recordAudio","stopAllMediaRecorders","_currentMediaRecorder","videoSourceApiPrefix","getVideoSourceApiPrefix","performClippyHealthCheck","setClippyUploadUrl","clippyUploadUrl","checkScreenRecordingPermissionsWithTimeout","setTimeout","recordedSegmentInfos","race","requestPermissionToCapture","recordedSegmentInfoIterator","currentMediaRecorder","nextMediaRecorder","stopRecording","clippyHealthCheckUrl","clippyHealthCheckPromise","clippyApiTimeoutPromise","getUniqueClippyUrlForUploadingCurrentRecording","isEnd","uploadCount","uploadBlobToClippy","blob","newOptions","accept","defaultHeaders","PUT","sendEndOfRecordingMessageToClippy","displayMediaOptions","displaySurface","echoCancellation","noiseSuppression","suppressLocalAudioPlayback","sampleRate","preferCurrentTab","selfBrowserSurface","surfaceSwitching","systemAudio","monitorTypeSurfaces","getDisplayMedia","permissionsValidated","_videoTrack$label","browserMap","Firefox","Safari","userAgent","detectBrowser","permissionsValidatedSuccessfully","browserDoesNotSupportScreenRecording","browserDoesNotSupportAudio","unableToValidateDisplaySurface","getAudioTracks","videoTrack","getVideoTracks","settings","getSettings","validateScreenRecordingPermissions","recordedSegmentInfo","MediaRecorder","ondataavailable","ev","onstop","Blob","recordBrowserSession","IGNORED_VALUE","apiRoot","bulkApiUrl","playbackErrorApiUrl","analyticsDisabled","MAX_ERRORS_BEFORE_RESET","Stats","postIntervalMilliseconds","postAndFlushQueue","numLoggedErrorsSinceReset","didAttemptLogAfterThreshold","poll","stopPolling","eventsToLog","queuedEvents","postBulkEvents","canLogError","eventEnum","postEvent","logPlayerError","ErrorEnum","logThresholdErrorToSentry","_unused2","Events","_unused3","errorExtras","SystemGroupsManagerService","setUpSystemGroupsManagerService","setUpParams","wasSystemGroupsManagerServiceInitialized","simpleContextSwitchHandler","groupActionResponse","shouldRefreshStandaloneSystems","assertServiceWasInitialized","refreshStandaloneSystemsHandler","refreshSystemGroupsAfterAction","groupToDelete","originalGroupIdSelectedInContext","getGroupIdToSwitchTo","TroubleConditionsService","forceRefresh","troubles","allTroubles","isInitialFetch","newTroubles","clearedTroubles","showStopAlarms","hasDisplayedTaskToast","displayFeatureTasksNotification","displayIssuesAlarmsNotifications","hasAccessToEnterpriseAlertsAndIssues","displayEnterpriseIssuesAlarmNotifications","tasks","numIncompleteTasks","showNotification","counter","exit","debug","fnShowNotification","newNotification","troubleNotifications","newAlarms","nt","newIssues","shouldShowNewAlarmTroubleCondition","issuesCount","_newIssues$0$descript","_newIssues$","shouldShowNewIssueTroubleCondition","a1","a2","locationSet","locationDescription","showNotificationForEnterprise","locationName","loadTroubleConditions","isRunning","_this$allTroubles","btn","isSetupWizardRunning","acknowledge","didAcknowledge","showStopAlarmsModal","stopAlarmsText","noDisarmWhenClearingAlarms","partitionCount","removeNotification","UserActivityService","SessionActivity","keepSessionActive","keepAliveUrl","hasFinishedSetupSteps","PointCentralShareUser","ShareUser","canShareUserCode","addressesLength","errorString","isNormalUser","pin","MasterUser","loginIsEnterprise","PointCentralMasterCodeUser","userPromise","getSelectedDeviceNames","isSingleSystemLoginWithResidentVisitor","deviceNames","getShareUserCodeSubject","getShareUserCodeMessage","_user$deviceAccess2","getShareResidentVisitorUserCodeBody","scheduleDescription","getScheduleDescription","accessCode","mobileMessage","dateText","timeText","formattedTimeText","UserExperienceEventsService","eventSubType","jsonEventData","customerPageUrlEnum","VideoAnalyticsFirmwareManagerService","launchOvFirmwareUpgradeModalIfNecessary","onSuccessModal","onCancelModal","onValidationFailure","isCalledFromBaaRoute","isCalledFromBaaRuleGroupRoute","hasOvReadyPackageInstalled","cameraHasPackage","requiresFirmwareUpdate","latestFirmwareVersion","firmwareName","requiresOvReadyPackageUpdateForBaa","requiresPackageUpdate","requiresOvReadyPackageUpdateForBaaGroups","requiresPackageUpdateForGroups","installConfirmation","supportsVmdSchedules","shouldUpgradeFirmware","confirmationString","buttonString","footerText","footerImagePath","footerImageAlt","ClipDownloader","ClipExporter","getDownloadUrlFn","handleDownload","downloadUrl","notifyClipExportFailed","isAnyDownloadTaskRunning","svrDownloadTaskInfo","sdCardDownloadTaskInfo","svrRunning","sdRunning","cancelClipExport","clipExportType","_this$sdCardDownloadT","_this$svrDownloadTask","cancel","downloadClip","requestDownloadUrl","downloadClipTask","NotLoggedIn","ServerProcessingError","ServiceUnavailable","_error$errors","keyFromErrorCode","errorFromApiResponse","ClipUploader","uploadClipFn","_uploadClipResult$met","uploadClipResult","isAnyUploadTaskRunning","svrUploadTaskInfo","_this$svrUploadTaskIn","uploadClip","uploadClipTask","DrawWindowEventBus","OnvifPtzPresetManagerService","TrackedMap","setPresets","presets","presetsByCameraId","preset","insertPreset","getKeyForDictionary","PlaybackInfoCacheManager","addVideoSourceToCache","cameraIdToPlaybackInfoMapping","intervalRetrievalTimestamp","performance","addIntervalsToCache","playbackInfo","getPlaybackInfoFromCache","addPlaybackTimesToCache","timelineStartTime","timelineEndTime","playbackTimes","getPlaybackTimesFromCache","current","camerasToPlaybackTimeMapping","getVideoSourceFromCache","_playbackInfo$videoSo","getIntervalsFromCache","maxTimeToUseOldCoverage","coverageRetrievalTimestamp","getIntervalRetrievalTimestampFromCache","_playbackInfo$interva","PrivacyZonesManager","launchDisablePrivacyZonesModalIfNecessary","_camera$calibrationSt","calibrationStatus","privacyZonesSetting","enablePrivacyZonesAndDisplayNotification","onSuccess","shouldReloadOnSuccess","someZonesPaused","POLL_WAIT_TIME_MS","SnapshotPoller","startPoll","pollTimer","idsToPoll","idsForUrl","idsForNextPoll","createQueryString","recordIds","VideoPreloaderService","loadCameras","_this$navigation$getR","liveViewInContext","camerasCookie","getCookieForPage","cameraIds","getLiveViewDisplayableCameraGroups","cameraGroupCookie","cameraGroupByCookie","webrtcPreloadingSupport","webrtcPreloadingSupportEnum","onDisconnectedCallback","videoPreloaderDetails","supportsStreamPreloading","preloader","VideoPreloaderDetail","startStream","getVideoPreloaderDetail","resetPreloadedStreams","_preloaderDetail$rtcP","preloaderDetail","rtcPlayer","disconnectStream","WarningSound","siren","requestSirenStateChange","isForTwoWayAudio","isTwoWayAudio","updatedSiren","isAlreadyRequested","VisualVerificationService","lastAlarmDate","cdqlEnabled","sessionDate","_session$lastAlarmDat","_session$previousSess","_session$nextSessionD","forDate","totalSessions","previousSessionDate","nextSessionDate","sessionDeviceLinks","pageFeatures","cancelTasks","checkForNewAlarms","WizardManager","onStepChanged","onTitleChanged","BaseControlPanelSettingsController","BaseControlPanelSettingsRoute","resetSensitiveProperties","getSensitiveProperties","BaseLoginInformationController","submitApiRequest","successMessage","fnAfterButtonAnimation","getValidationErrorsFromResponse","processValidationErrors","responseErrors","responseData","isLockedOut","logoutUrl","getPropertiesToResetOnExit","resetData","BaseLoginInformationRoute","BasePanelWifiRoute","imagePaths","residential","business","generic","about","SmartCoverageGetStartedController","displayPolicySelection","showErrorPage","Residential","aboutImagePath","subTitle","currentSelectedPropertyIfEligible","aboutDescription","logoPath","darkModeEnabled","logoPathDark","genericLogoPath","isEligible","stepOne","stepThree","isDefaultProperty","discountsForCards","defaultProperty","allDiscounts","toggleLearnMore","learnMoreClick","updatePolicyType","termsAndPrivacyDescription","termsAndPrivacyDesc","privacyAnchor","licensesAnchor","GetStartedRoute","SmartCoverageRoute","adcGtm","APP","GTM_ID","propertiesArray","hasCommercial","hasResidential","SmartCoverageSelectPropertiesController","multiLocationMessage","filteredLocations","lowerSearchString","applySearchFn","buttonSelected","selectedLocations","isAllLocationsSelected","isAllSelected","toggleSelectAll","toggleEvent","selectAll","selectAllInit","doEnable","newSelectedLocations","SelectPropertiesRoute","BaseSsoRoute","destinationPage","showInIframe","AccessControlSchedule","Transform","durationMinutes","deserialize","scheduleDay","dayString","ArmingScheduleDayTime","timeDay","serverModel","StartTime","EndTime","IsRearming","isRearming","timeDictionary","dayMap","objKey","newTimes","_time$StartTime","_time$EndTime","ComplexIconDataTransform","serialized","ComplexIconData","FisheyeModeTransform","Original","SplitPanorama","Panorama","deserialized","HeatMapParameterTransform","_serialized$StartDate","_serialized$EndDate","CameraId","StartDate","EndDate","IconDataTransform","LoginTemporaryScheduleTransform","TemporaryScheduleTransform","createNewTemporarySchedule","LoginTemporarySchedule","PanTiltPresetListTransform","Id","iconClass","IconClass","RuleExtraDataTransform","RuleGroupInfoListTransform","ruleGroupId","RuleGroupId","thresholdIndex","ThresholdIndex","RuleIdInfoListTransform","RuleId","personCountThresholdIndex","PersonCountThresholdIndex","waitTimeThresholdIndex","WaitTimeThresholdIndex","loginFeatureAccessLevelsHaveBeenModified","userTypePermissionsHaveBeenModified","loginFeatureAccessLevels","originalLoginFeatureAccessLevels","userTypePermissions","originalUserTypePermissions","userTypeKeys","originalUserTypeKeys","roleToAdd","SystemGroupLoginRolesListTransform","systemGroupToRolesDictionary","serializedItem","IdentifierId","Role","modifiedLoginRoles","customerRolesOnGroup","HasBeenModified","LoginFeatureAccessLevels","UserTypePermissions","serializeUserTypePermissions","serializedUserTypePermissions","userTypePermissionsKey","isDate","TemporarySchedule","WeeklyScheduleTransform","WeeklySchedule","ANTI_PASSBACK_UNIT_VALUES","closed","buzz","POINTS_TOO_CLOSE","LINES_INTERSECT","LINES_CLOSE","SMALL_ANGLE","MAXIMUM_NUMBER_OF_PRIVACY_ZONE_POINTS","MIN_DISTANCE","zone","prevPoint","nextPoint","prevWarningPoint","j","nextWarningPoint","doLinesIntersect","warningPoint","newPoint","distanceBetweenPoints","closingShape","shapeIsClosed","pointWasDragged","fnPointRelativeToIndex","shift","previousPoint","currentPoint","fnLineToPointMinDistance","pt1","pt2","pt3","distanceBetweenFiniteLineAndPoint","firstPoint","secondPoint","firstIsCurrent","firstIsNext","secondIsPrevious","secondIsCurrent","fnDoesCurrentLineIntersect","fnDistanceFromCurrentLine","distanceBetweenTwoFiniteLines","angleBetweenLines","x0","y0","isCoordinateNormalized","coordinate","isPointNormalized","arePointsNormalized","getRectangleCorners","prev","errorId","baseGridHalf","boundingBoxStyles","strokeStyleBlack","arrowHeight","clearRect","restore","applyContextStyle","drawingContext","styleValues","valuesToApply","drawImage","img","beginPath","moveTo","lineTo","closePath","fill","stroke","side","halfSide","strokeRect","fillRect","drawSideHandles","radius","findMidPoint","arc","transformPoints","willDivide","halfCanvasHeight","halfCanvasWidth","sampleBottom","sampleTop","sampleLeft","sampleRight","drawSingleArrow","rotatedAngle","currentStyleValues","isEnter","rotate","textMetrics","measureText","actualBoundingBoxAscent","correctedAngle","PI","directionSign","cos","sin","strokeText","drawEnterExitText","rad90Degree","angle","getSegmentAngle","midpointX","midpointY","translate","deltaX","movedPoints","isShapeInCanvas","mouseDeltaX","mouseDeltaY","maxDeltaX","maxDeltaY","updateMaxDelta","correctShapeTranslation","maxDelta","isPointInCanvas","isBetween","DISTINCT_COLORS","ADC_SVG_FILL_COLORS","selectedCountryId","_selectedCountry$carr","NUM_SECONDS_IN_MINUTE","NUM_SECONDS_IN_DAY","NUM_MILLISECONDS_IN_SECOND","NUM_MILLISECONDS_IN_HOUR","TUESDAY_INT","WEDNESDAY_INT","THURSDAY_INT","FRIDAY_INT","SATURDAY_INT","SUNDAY_BIT","MONDAY_BIT","TUESDAY_BIT","WEDNESDAY_BIT","THURSDAY_BIT","FRIDAY_BIT","SATURDAY_BIT","EVERY_DAY","WEEK_DAYS","daysArray","currentDayInt","currentDayBit","pow","dayArrayToBits","selectedDays","dayBitsConversion","minutesToDate","newDate","MINUTES_IN_HOUR","dateToMinutes","getUTCDate","UTC","formatAMPM","ampm","convertDateToString","withTimeZone","dateConfigWithoutTimezone","dateConfigWithTimezone","millisecondsToDurationString","padStart","getDeviceStateCSS","flipState","getConnectionTypeString","connectionTypeEnum","Remembered","getWifiSignalStrengthString","signalStrengthEnum","normalizedSignalStrength","getUnitId","splitGlobalDeviceId","getDeviceId","STATE_UNKNOWN","UNKNOWN","STATE_OFF","OFF","STATE_ON","ON","createEvent","initEvent","fullscreenElement","webkitFullscreenElement","webkitCurrentFullScreenElement","mozFullScreenElement","msFullscreenElement","toFullScreenMode","elem","enumerateDevices","isElementViewable","boundingRect","fnEmpty","_firstError$detail","firstError","ZERO_OR_NULL_PLACEHOLDER_STRING","METERS_TO_MILES_CONVERSION_FACTOR","rawFuelUsed","roundDistanceDriven","rawDistanceDriven","roundFuelEfficiency","rawFuelEfficiency","getDMSStringFromCoordinates","latitude","longitude","latDirection","lngDirection","ariaLatDirection","ariaLngDirection","latDMS","getDMSStringFromDouble","lngDMS","displayString","degrees","ariaString","coord","convertMetersToMiles","valueInMeters","convertMilesToMeters","valueInMiles","convertCultureUnitsToMeters","distanceValue","convertMetersToCultureUnits","getDropdownSelectItemObject","createBinaryInputItem","createBinaryInputItemObject","GLOBAL_ID_SEPARATOR","asyncFind","asyncFunc","obj","getGlobalIdFromUnitAndDevice","getDeviceIdFromGlobalId","getCaughtError","LineChart","isLegendEnabled","backgroundColor","legend","_series$length","VerticalBarChart","maxDataLength","topIndex","dataIndex","addClassToTopPoint","column","stacking","XrangeChart","getObjectIfJsonString","string","parsedObject","_On$Off$NoState$Offli","TAU","x3","y3","x4","y4","eps","numeratorInput1","numeratorInput2","denominator","px","py","lineLengthSquared","_ref12","_ref13","_ref14","_ref15","_ref16","length12","length13","length23","degreeConversion","acos","doesLineSegmentAndHorizontalRayIntersect","p1","p2","_ref17","_ref18","atan2","intersectionCount","rotatePoint","_ref19","_ref20","getAngleWithinRange","getAngleDistance","angle1","angle2","GENERIC_ARMED_RESOURCE","ArmedState","_Unknown$Disarmed$Arm","_Unknown$Disarmed$Arm2","getPartitionStateName","fullstoryScript","fullstoryIdScript","observedPropertiesAreChanged","cachedProperties","observedProperties","observedPropertyNames","nameOfCachedPropertiesObject","currentProperties","retrieveObservedProperties","currentValues","observedVariable","SceneButtonKeyAttributeEnumType","sortSceneRuleListItems","sceneRuleA","sceneRuleB","buttonNumber","SeverityWarning","SeverityIssue","reverseSliderValue","currentValue","maxValue","appendStrings","originalCssClass","newCssClass","appendStringsIf","conditional","getDoubleNewLineSeparatedString","strings","newLineSeparator","doubleNewLineSeparatedString","textToEscape","div","textNode","createTextNode","innerHTML","getScaleValueForElement","matrixValues","getMatrixFromElement","getTranslateValuesForElement","computedStyle","getComputedStyle","_cssMap$state","_stateMap$state","getThermostatSimpleStateKey","_Unknown$Off$Heat$Coo","getThermostatStateAltIcon","_SMART_SCHEDULES$SCHE","_Disabled$Enabled$Par","hasCoolSetpoint","offsetSetpoint","numberOffsetSteps","autoSetpointBuffer","setpointOffset","thermostatState","supportsAutoMode","targetStateString","opposingStateString","targetProperty","opposingProperty","setpointData","targetValue","opposingValue","setpointsTooClose","BaseTransform","parameters","cachedData","hasSecondaryIcon","hasUnknownSubIcon","secondaryIconCss","secondaryIconStyle","isWarmToCoolWhite","ColorIsNotANumber","htmlColor","cssStyle","hasIcon","hasUnknownIcon","isAfter","BASE_DATE","WEEK_DAY_SEED","beginTimeAsDate","endTimeAsDate","firstDay","lastDay","fnGetDayOfWeek","queryParamKey","queryParamValue","currentUrl","USER_TYPE_ICON_MAP","openDownloadUsersWarningModal","COOKIE_INTERVAL","COOKIE_USE_COLLAPSED_TIMELINE","COOKIE_HIDE_SIDEBAR","COOKIE_DEVICE_TYPES","COOKIE_HISTORY_EVENTS","COOKIE_PREFER_LOCAL_RULES","CLIP_LIMIT_SUGGESTION_LAST_COLLAPSED","VIDEO_STREAMING_FEATURES_UNIFIED_ROUTE_NAME","cookieNameForPage","useVsfAsRouteName","cookieNameFull","translateDoorbellWedge","doorbellWedge","onlySupportsWedgeYesNo","translatedYesString","NewVideoScheduleModalType","NewVideoRuleModalType","PAN_TILT_URL","classificationIconLookup","ovClassification","getIconForEvent","isHd","updatedProperties","janusGatewayUrl","iceServers","coturnAddressesTuplets","audioUpStreamUrl","updateCurrentStreamIsEndToEnd","getFreshVideoSource","videoSourcePromise","freshVideoSource","_apexConnectionInfo","_apexConnectionInfo2","_apexConnectionInfo3","isFromVideoPlayerComponent","logNoStreamingInfoWebrtcLog","usingProxy","usingEndToEnd","panTiltApiRequest","command","additionalQueryParams","panTilt","relativeDirection","zoom","canZoom","goToPreset","panTiltId","videoScheduleTransitionFunction","routeIds","svrDevices","videoRuleSuggestions","createPermissionToRoute","additionalCheck","permission","haveSvrs","sdWithoutMaxNumberOfSchedules","sd","canAddSdCardSchedules","firstSchedule","NewVideoScheduleModal","videoSchedules","settingsRouteTransition","convertErrorEnumToString","playerIdParts","routeTransitionArgs","createDictionaryOfDrawingsFromRule","editItem","queryParameters","editPage","editPageQueryParameters","isSchedule","hasOvRules","MaxDescriptionTextLength","MinimumRecommendedPhotos","getFamiliarSubjectRouteEnum","hasTarget","targetEvent","hasEnrollmentImage","getEnrollments","enrollmentsInStore","hasOptedInCamera","supportsFamiliarFace","supportsFamiliarSubjectRecognition","familiarSubjectCameraProperties","isFaceOptedIn","isVehicleOptedIn","findEnrollmentOfType","enrollmentOfType","enrollments","isEligibleForNotifications","transitionToFamiliarSubjectReview","navigateToCameraAccessPageIfNoCamerasOptedIn","cameraAccessRoute","clearAndSetPreviousRouteId","saveMovedPhotoAsFeedback","feedbackEventId","isNotificationEvent","originalClusterModelId","validateClusterDescription","clusterDescription","enrollment","checkIfDescriptionIsValid","checkIfClusterDescriptionIsUnique","createCluster","showCreationOrMoveSuccessMessage","isCreatingANewCluster","creationMessage","reviewedImagesLength","subjectName","moveImagesToSubject","nameAndCreateSubject","selectedPhotos","newTarget","attemptCreateAndMove","navigateToNotificationsPageForNewVehicle","tryDeleteFamiliarTargetImage","profileImageId","showDeleteImagesModal","deletedText","onboarding","getReviewButtonResource","getCorrectButtonIcon","getIncorrectButtonIcon","getActionSheetPhotoDateString","dateString","timeString","ActionSheetTypes","lightOptionResourceLoc","lightOptionToResource","FullFloodlightOnly","FlashingFloodlightOnly","AlarmLightOnly","FlashingFloodlightAndAlarmLight","FullFloodlightAndAlarmLight","PulsingFloodlightAndAlarmLight","FullSpotlight","BlinkingSpotlight","PulsingSpotlight","SpoitlightOff","lightAlertDropdownItems","_options$map","audioOptionResourceLoc","audioOptionToResource","useNumberedWarningSounds","perimeterGuardAudioDropdownItems","ForceProxyQueryParamValue","ForceEndToEndQueryParamValue","getForcedStreamingMethod","relayQueryParam","forceOespQueryParam","preloadingSupportEnum","setupRtcPlayer","onTrackCallback","trackEvent","PreloadToSdp","attachEventToVideoElement","videoPreloaderRtcProps","disconnectCallback","timerFinished","webRtcProperties","streamingType","updateState","logMessageToWavefront","EndToEndRtcPlayer","isConnected","_this$rtcPlayer","isWebRtcConnected","runTask","_this$rtcPlayer2","attachStreamToVideoTag","_this$rtcPlayer3","attachUpdateState","PLAYER_SIZE","PLAYBACK_SEEK","PLAYBACK_INTERVAL","PLAYBACK_DATE_PICKER","PLAYBACK_SIDEBAR_OPEN_CLOSE","PLAYBACK_EXPAND_COLLAPSE_TIMELINE","TIMELINE_TIME_UPDATE","TIMELINE_EVENT_POPOVER","DOWNLOAD_CLIP","eventConditionCollection","speedDropdownEventCollection","condition","getEnumForEventCondition","eventList","getLayoutChangeEventEnum","getSpeedDropdownEventEnum","_speedDropdownEventCo","getWaterMeterStateText","none","RegExp","ip","getNetmaskParts","parts","repeat","ipToNum","ipRangesFromNetmask","netmask","part","ipaddress","netmaskParts","netmaskBlocks","invertedNetmaskblocks","baseAddress","block","broadcastaddress","startRange","endRange","ipRangeValidation","_getNetmaskParts","netmaskBits","ipNetwork","baseNetwork","lastOctet","lastIndexOf","portValidation","localModelData","validationMethod","validation","retVal","hasErrors","hasChanges","modelData","propertyChanged","BasePlaybackController","BasePlaybackRoute","VideoStreamingFeaturesRoute","relay","ignoreCache","cookieInterval","cookieUseCollapsedTimeline","cookieHideSidebar","urlSearchParams","cameraFilterProperty","allCameraGroups","promises","filteredCameras","getCameraGroups","getFilteredCameraGroups","dewarpConfigs","hasVideoDeviceThatSupportsPlaybackType","allowedDeviceTypesForFilter","customerDevicesById","getSimpleModels","filteredCameraGroups","BaseVideoAutomationRoute","validateRouteRequirements","reloadVideoDevicesIfNotPending","videoDevices","ruleOrScheduleModelName","BaseCameraGroupEditRoute","id_camera_group","filterByLiveViewDisplayable","onlyFromCurrentSystemGroup","BaseCameraGroupsController","isManageRoute","manageGroupsRouteId","editCameraGroupTransitionFn","editGroupRouteId","missingAbstractMember","BaseCameraGroupsRoute","BaseAnalyticsCameraRoute","clipIndexDisplay","_this$clipIndex","clipIndex","getQueryParams","transitionToCalibrationRoute","cameraModelID","transitionToCaptureRoute","transitionToEditRoute","transitionToReviewRoute","transitionToIndexRoute","privacyZonesManager","verifyCameraFirmware","onFirmwareUpToDate","analyticsFirmwareManager","cancelCalibration","verifyCameraPrivacyZonesDisabled","external","BaseCalibrateRoute","snapshotsRequired","snapshotsLength","expectedSnapshotsLength","BasePostInstallController","backButton","getButtonTypeBack","BasePostInstallRoute","eachHourOfInterval","dirtyInterval","_options$step","RangeError","currentDate","isSameHour","dateLeftStartOfHour","startOfHour","dateRightStartOfHour","localToZonedTime","systemTimezone","Intl","DateTimeFormat","resolvedOptions","TimePeriod","SeriesFormatter","pointInterval","allEventsSummaries","eachDateInInterval","eventCountsByDate","summariesByDate","totals","summariesOnDate","totalEventsFromSummaries","HOUR","eachDayOfInterval","isSameTime","isSameDay","seriesCompareFn","summary","summaries","eventCount","ClipUsageByDateSeriesFormatter","allCamerasByDateSeries","filteredSeries","seriesToSummarize","numCamerasInOtherGroup","otherSeriesData","_currentValue$data","datum","custom","camerasInGroup","eventCountsByTrigger","_summariesOnDate$filt","summariesForCameraOnDate","ClassifiedUploadsSeriesFormatter","rawData","showNonVAStatistics","supportedTypes","supportedClassifications","classificationColors","classificationLabels","classificationLegendIndex","ovType","_classificationLabels","colorIndex","_summariesOnDate$filt2","ovClassificationType","legendIndex","AccentOrange","AccentLime","AccentGreenCyan","Gray80","AccentBlue","BaseInstallOverviewController","isAccountLanguageFrench","transitionToVDB750Wizard","returnUrlEnum","BaseInstallOverviewRoute","shouldKeepWebviewOpen","BaseLiveViewController","BaseLiveViewRoute","maxZoomOutLevel","operatorPortalClippyHealthCheckTimeout","healthCheckTimeout","clippyCheckUrl","isClippyUploadingBlocked","reportClippyMessageToWavefront","WaveFrontClippyMessage","successOnStart","failureOnStart","timeoutPromise","checkIfClippyUploadsAreBlocked","resolvedCameraGroups","onvifPtzPresets","cookieMaxVideosPerPageAutoView","MaxCameraNameLength","restartOnvifInstallation","BaseOnvifInstallationController","transitionToNextInstallationRoute","forward","nextRouteId","BaseOnvifInstallationRoute","BaseOnvifInstallationNamingRoute","parentController","snapshotDataObjects","shouldLoadSnapshots","BaseAnalyticsRoute","BaseEditableAnalyticsRoute","ModalType","modalTypeTitleKeyMap","AnimalAndOther","modalTypeBodyKeyMap","filterIconMap","RvmRuleFiltersModal","modalType","canSaveWithSelectedFilters","_modalTypeTitleKeyMap","_modalTypeBodyKeyMap$","recommendationText","primaryButtonText","getIcon","_filterIconMap$filter","keepAndSave","onSave","handleSaveState","removeAndSave","NO_FILTERING_OR_DELAY","FILTERING_OR_DELAY","AOI_ELIGIBLE_RULES","AOI_DURATION_ELIGIBLE_RULES","AOI_FULL_FOV_ELIGIBLE_RULES","getLocalizedResource","updateNotifications","isDealerLocked","previewType","previewTypes","contact","makeAllVehiclesSelectionAdjustments","vehicleFilter","getFamiliarVehicleClassificationValues","selectedFilters","subjects","subjectFilters","canEditRule","onItemChange","_filters$filterBy","deselectOtherFilters","getAdvancedFilterArray","includeAnimalFilter","includeDeliveryVehicle","canHaveFamiliarVehicles","familiarVehicleFilters","canUseStories","ruleClassificationFilters","getFilterArray","isFamiliarVehicleFilter","notIncluded","canModifyRuleUiElements","getAdvancedDoorbellFilterArray","supportedParcelEvents","getDoorbellFilterArray","tooltipResource","isPersonWithoutParcelEvents","checkMobileBrowserSize","doesRuleTypeSupportClipNotifications","getMinimumDelays","DrawBaseController","PushAndTextNotificationsDifferences","doesRuleTypeAllowAOI","canToggleRuleIsLocked","canEditLockedRules","isEscalatedEvent","hasAnalyticsEditPermission","canEditEscalatedEventRules","dictionaryWithRuleDrawing","cannotEditRuleMessage","ruleHasBeenLockedMessage","canCreateEscalatedEventRule","canViewNoonlightVerifyDropdown","showNoonlightVerify","notificationFilters","analyticTriggers","AnalyticPersonDetected","canViewDialerDelayDropdown","showDialerDelay","noonlightVerifyType","disableRuleIsActiveToggle","showExceptionsChangedWarning","_rule$exceptions","_rule$geoDevicesForEx","previousExitDelay","previousGeofence","previousExceptions","previousGeoDevices","exceptions","geoDevices","geoDevicesForException","exitDelay","geoFenceForException","areArraysSame","ovRuleMinimumDelays","perimeterGuardConfigMinimumDelays","thirdPartySupportedEvents","thirdPartyEventTypes","_this$originalAnalyti","triggerIsAvailable","originalAnalyticTriggers","thirdPartyLightRuleSupportedEvents","_this$analyticTrigger","_this$thirdPartySelec","thirdPartySelectedLightRuleTriggers","notificationHeader","supportsAdditionalRuleFeatures","getPreviewTypeTranslated","_TextOnly$AttachThumb","notificationGroups","disableMMSVideoNotifications","showMMSDisabledContacts","isClipUploadActive","hasMonitoringStationContactReadPermissions","selectedRecipients","isMonitoringStation","hasPermissionToAddMonitoringStationRecipient","fnGetPreviewTypes","selectedFormat","contactId","getRecipientDescription","isReadOnlyPreviewType","getRecipientDescriptionForPanelNotification","panelNotificationFormat","getDropdownSelectItemsForPreviewTypes","_TextOnly$AttachThumb2","getDropdownSelectItemsForNoonlightVerifyTypes","getDropdownSelectItemsForDialerDelayTypes","dialerDelayType","notificationFilterSelection","isDeliveryVehicleIncluded","areAnimalEventsExcluded","supportedFilters","vehicleNotificationFilters","doorbellNotificationFilterSelection","selectedParcelEvents","supportedParcelFilters","lightRuleFilters","isThirdPartyCamera","vehicleLightRuleFilters","canViewAnalyticsLightRuleSetup","hasAnalyticsLightRule","eligibleLightsCount","eligibleLightsForAnalyticsLightRule","_get$toArray","associatedLightId","eligbileLightsWithSelectedValues","selectedLights","exceptionValues","geoFence","exceptionStates","fenceId","showExceptions","hasFences","hasDevices","showPanelExceptions","displaySavedClipNotificationFilterTypes","ruleTypeResource","groundZoneText","notificationsFilterText","displayDoorbellNotificationFilters","groundZoneDurationOptions","canSetExtendedLoiterOptions","dictionaryWithTouchlessRingRuleDrawing","touchlessRingDurationOptions","mobileNotificationGroup","_this$notificationGro","mobileGroup","selectedMobileNotificationGroupItems","_this$mobileNotificat","selectedMobilePreviewTypes","_this$selectedMobileN","previewTypeList","shouldDisplayMobileTextOnlyWarning","_this$selectedMobileP","_this$selectedMobileN2","shouldDisplayMobileWarningMessage","_this$selectedMobileN3","canShowSMSWarning","mobileWarningMessageText","shouldDisplayDisabledWarningSoundMessage","showExitDelay","canUseExitDelay","supportedExceptions","notSupportedExceptions","hasSupportedException","hasNotSupportedException","addWindowResizeListener","updateThirdPartyEventSelection","_this$thirdPartySelec2","isFullySelected","_this$analyticTrigger2","_this$dictionaryWithR","_this$dictionaryWithR2","ignoreRvmWarnings","recentlySaved","touchlessRingRuleIsEnabled","newestClipDonationAgreementVersion","ruleWasLocked","ruleIsNew","supportsStories","autoDonate","hasLoginSeenAutoDonatePrompt","hasAcceptedClipDonationAgreement","acceptedClipDonationAgreementVersion","ovRule","completeShapeText","normalizePointsText","_rule$name","_this$analyticTrigger3","ruleHasRVMWarningFilters","modalButtonAnimation","filtersToRemove","_duration","hasPresenceState","_duration2","canCustomizeTouchlessRingRule","scheduleIsCustom","perimeterGuardSubScheduleIsCustom","ruleStartTime","ruleEndTime","ruleDayBits","pGStartTime","pGEndTime","pGDayBits","dayBitsOutOfBounds","supportsPerimeterGuardSubSchedule","_this$currentSliderVa","_acceptedClipDonation","showAutoDonatePrompt","canDonateClips","showAutoDonateReprompt","canUseVacationWatch","vacationWatchConfigured","ruleSavingPromise","showLoadingModal","ruleItem","sensitivity","currentSliderValue","maxSensitivitySliderValue","cameraSavingPromise","supportsDetectionSensitivity","canChangeOvCameraSettings","deleteItem","itemName","deleteText","deleteBody","showWarning","svr_device_id","updateItemStatus","isDetached","onRuleNameChange","ruleName","onMinimumDelayChange","minimumDelay","scheduleChanged","_isAfterSunset","_oldScheduleProperties","isVacation","vacationStartDate","vacationEndDate","vacationWatchStartDate","vacationWatchEndDate","vacationDatesInvalidNotification","invalidSchedule","validateVacationSchedule","vacationHours","minHours","maxDays","noonlightVerifyTypeChanged","dialerDelayTypeChanged","previewTypeChanged","previewTypeChangedForPanelNotification","notificationsChanged","atHomeExceptionsChanged","doorbellNotificationFilterSelectionChanged","filterSelection","personFilter","panelNotificationSelectionChanged","sensitivitySliderChanged","sliderValue","toggleTouchlessRing","showWarningModal","onPerimeterGuardScheduleCorrected","perimeterGuardEnabled","scheduleDuration","customSchedule","PGscheduleDuration","customPGSchedule","removeAllDomListeners","clickCameraInternalPage","cameraLinkUrl","showDuplicateNotificationWarning","canClientCancelVerifyEscalatedEvent","cameraLink","hasStoriesAccess","availableLightAlertOptions","pgConfig","_model$rule$exception","_model$rule$geoDevice","detectionSensitivity","hasMonitoringStationRecipientsSelected","shouldUseDrawV2","resourceKeys","changeTabs","ruleSuggestions","stepText","getModalStep","localRecordingPageAvailable","startVideoRulesPageTour","clearAndSetVisitedRoutesStack","BaseVideoSettingsRoute","transitionBackToNativeOrNextRoute","showUnsavedChangesModalIfNeeded","canUserEditVideoSettings","didSettingsUpdate","visitedRouteIds","hasDiscardedChanges","hasConfirmedExit","BaseVideoConfigController","saveSettings","videoConfig","ThirdPartyStreamSettingsRouteName","ThirdPartyStreamSettingsEditRouteName","ThirdPartyStreamSettingsIndexRouteName","HighStreamId","MediumStreamId","LowStreamId","DummyRecordId","isDirtyExistingRecord","isArrayNullOrEmpty","BaseThirdPartyStreamController","disableSaveButton","canEditOnvifSettings","failedToRetrieveSettings","saveStreamSettings","selectedStreamSetting","records","streamSettings","bitRate","frameRate","gopLength","supportsOnvifStreamMappings","onvifCameraStreams","isStreamMappingEnabled","dummyStreamId","dummyStream","getDummyStream","dummySettingId","dummySetting","getDummySetting","getStreamSettingsSectionData","streamSetting","isDummyRecord","streamOption","streamOptions","hasValidOptions","bitRateOptions","frameRateOptions","gopLengthOptions","resolutionOptions","currentStreamId","existingRecord","streamId","updateFrameRate","setting","updateGopLength","updateBitRate","FamiliarSubjectCameraAccessRoute","subjectEnrollment","familiarSubjectObjectType","cameraProperties","sessionStorage","FamiliarSubjectFAQRoute","FamiliarSubjectFeatureManagementRoute","FamiliarSubjectIncorrectPhotosRoute","familiarObjectTypes","incorrectImages","FamiliarSubjectsRecentImagesRoute","shouldDisplayWaitText","startDateUtc","recentImages","intercomLogins","IntercomAddLoginsRequestBody","BaseRequestBody","validate","IntercomBulkInsertContactsRequestBody","IntercomCreateCallForwardingRulesRequestBody","apartmentNumbers","IntercomRemoveLoginsRequestBody","intercomLoginIds","intercomDeviceIds","BaseIntercomRoute","BaseRoute","BaseIntercomSettingsController","oldLoginIds","newLoginIds","MotionConfigurationController","canEditMotionConfiguration","drawWindowResources","modeOptions","motionConfigurationSetting","selectedMotionDetectionType","motionDetectionType","descText","dmdConfidence","deepMotionDetectionSelected","onMotionDetectionTypeChange","motionDetectionTypes","motionZones","indexes","motionZone","dictionaryOfDrawingsToSave","_this$motionConfigura","SvrTimelineRoute","errMsg","cookieLayoutType","routeNameToUseForCamSelection","cookieSelectedCameras","cookieSelectedCameraGroup","getDeviceIdsWithEERulesAndMostRecentEventTimeForDevices","recentEscalatedEventsPromise","deviceIdsWithEERulesPromise","recentEscalatedEvents","deviceIdsWithEERules","mostRecentEventTimeForDevice","mostRecentEventTime","eventDateLocal","sortCamerasByTimestampThenDescription","deviceIdToTimestampDictionary","aDateTime","bDateTime","filterProperty","_isCdql$firstObject","excludedFromVisualVerification","isCdql","liveViewDevices","availableCameras","updatedCameraList","_camera$id","resolvedCameras","orderedDevices","hasEnabledEERule","hasTriggeredEE","excludedFromEscalatedEvents","filterEventsForPersonDetected","vvItems","peopleDetected","_item$clipItem","hasHuman","VVBaseController","getSelectedDevices","availableImageSensors","selectedDevices","areDevicesExcluded","excludedCameras","excludedImageSensors","VVBaseRoute","vvImageSensors","imageSensors","AccessPointMessageHandler","FleetVehicleMessageHandler","FleetFilterCountsMessageHandler","GarageDoorMessageHandler","GateMessageHandler","IqRoutersMessageHandler","LightMessageHandler","LockMessageHandler","MpersDeviceMessageHandler","NetworkMessageHandler","PartitionMessageHandler","SensorMessageHandler","ShadesMessageHandler","SumpPumpMessageHandler","ThermostatMessageHandler","WarningSoundMessageHandler","WaterSensorMessageHandler","WaterValveMessageHandler","WifiHostsMessageHandler","WifiProfilesMessageHandler","CameraLightMessageHandler","SafetyButtonLocationMessageHandler","BaseWebsocketMessageHandler","handlesEventTypes","activityEventInfo","getPayload","activityEvent","getActivityData","getIdType","BaseSensorMessageHandler","qStringJson","subvalue","OpenedClosedState","parseQueryString","getSensorState","getSensorPayload","openClosedStatusWord","getSensorStateKey","exists","statusWord","BaseCustomerEmberMessageHandler","process","isFilterApplied","dateKey","newEvent","hasAdditionalPayload","eventTypeName","_this$activityEventIn","activityData","deviceTypeFilter","handleMessage","pageUrlEnum","CloseDoor","OpenDoor","EventTypeMap","lightIcon","LightIconEnum","emergencyEvent","emergencyTimestampUtc","NetworksMessageHandler","AlarmState","PolicePanicState","AlarmStateMap","ArmedAwayState","ArmedStayState","DisarmedState","ArmedNightState","_message$subvalue","messageSubtype","hasOnlyArming","automatedText","willHandle","_locations$length","SafetyButtonAlarmId","Latitude","Longitude","currentLocation","firstLocation","LOCATION_START","LOCATION_CURRENT","eventTime","evtType","ShadeClosed","ShadeOpen","getEventUpdate","subtypeInt","adjustedValue","getPropertyChange","reportsCelsius","messageInfo","propertyChange","localizeTempUnitsToCelsius","messageHandlerIdentifier","_idType","additionalData","endTimeUtc","idType","word","ValveOpen","ValveClose","WizardLaunchController","WizardLaunchRoute","paramsForUrl","paramsForBody","instanceId","isFromAddDevice","separateParams","isInSystemInstall","isEngineInCustomerEmber","getDealer","goToChooseDevice","BaseIndexRoute","viewAll","category","hasDevicesInstalled","hasGoogleNestAccountLinked","hasNestVideoIntegration","hasNestIntegration","hasNestAwareResale","transitionToAddDeviceExit","transitionToExternal","AlreadyLinkedController","BaseDevicesController","enableNamiMobileNativeDiyProcess","isFeatureToggleActiveForCustomerOrDealer","ENABLE_NAMI_MOBILE_NATIVE_DIY_PROCESS_FEATURE_TOGGLE_ID","unlink","_Object$entries","manufacturerName","referenceValue","energyAccounts","energyAccount","energyAccountId","engineConfig","supportsDeepLinkDeviceAddition","_Object$entries2","isNest","isNami","NAMI_MANUFACTURER","showConfigureDevices","isLoginAs","showUpdateWifi","openThirdPartyAppText","_this$resolvedModel4","integrationName","shouldUnlinkButtonBeDisabled","_this$resolvedModel5","canBeUnlinkedByUser","showAlreadyLinkedText","_previousRoute$route","visited","resourcePickerUrl","unlinkAccount","_this$resolvedModel$d","_this$resolvedModel6","openThirdPartyApp","_this$resolvedModel$d2","_this$resolvedModel7","_Object$entries3","deeplink","goToLinkDevicesPage","linkDevicesUrl","AlreadyInstalledRoute","BaseDevicesRoute","dealerFromIdentity","hasNVI","handleCustomerEmberMobileAppTransition","doesSupportTransitionToNativeView","BaseExitProcessController","goToSelectCategory","completeInstall","BaseExitProcessRoute","exitAddDevice","CompletePageController","CategoriesDevicesCompleteRoute","DefaultNotificationsController","defaultNotifications","goToEdit","notifId","DefaultNotificationsRoute","_res$data","dn","transitionToNotificationEdit","notificationId","DifferentAccountsController","goToGoogleHomeApp","DifferentAccountsRoute","SelectDeviceController","showExitAddDeviceLink","showManufacturerName","shouldTransitionToMatterCommissioning","isMatterDevice","MatterInstall","goToStartInstall","CategoriesDevicesIndexRoute","skipDeviceSelection","availableDeviceCount","CategoriesDevicesLinkCompleteRoute","totalNestDevices","CongratulationsRoute","LinkInProgressRoute","LinkStartRoute","LinkUnsuccessfulController","LinkUnsuccessfulRoute","goToCompleteInstall","NameController","transitionToNextRoute","isRFDevice","updateName","delayedHandler","deviceNameError","DevicesNameRoute","param","StartInfoRoute","featureToggleId","getEnergyAccountId","energyAccountString","getEnergyAccount","transitionToOAuthUrl","energyAccountUrl","oAuthUrl","doesSupportLaunchBrowser","launchBrowser","StartController","isPrePairedDevice","dlCode","showBackLink","goToInstallationWizard","_this$router","_this$router2","willTransitionToLegacyInstallFlow","willTransitionToMobileNativeFlow","_router","cancelUrl","returnUrl","troubleShootFinishUrl","categoryUrl","chooseDeviceUrl","getNavigationUrls","isNamingNeeded","timeoutSecondsDefault","isUsingInstallerLedFlow","eaid","referenceType","doesSupportLaunchNewContext","installWizardEnum","launchNewContext","urlForExternal","goBackToDeviceSelection","shouldTransition","_device$manufacturerN","NamiInstall","StartPageRoute","isOAuthDevice","FrontPointSecuritySensorWizardId","CategoriesDevicesTroubleshootController","CategoriesDevicesTroubleshootRoute","shouldTransitionToVideoInstalls","_this$category","_this$category2","isVideoCategory","VideoCameraInstall","isDoorbellCameraCategory","DoorbellCameraInstall","shouldTransitionToGoogleNestFlow","isGoogleNestCategory","CategoriesController","isMatterCategory","goToSelectDevice","skipCategoriesRoute","availableCategoryCount","transitionToAddVideo","DeleteDeviceController","lt","prepairedDevices","_this$resolvedModel$p","prepairedDeviceList","setUpCompleted","transitionToSetup","deleteDevices","DeleteDeviceRoute","getFake","ChooseDeviceController","allSetUpsComplete","_this$prepairedDevice","goToTroubleshoot","goToDevicePage","addDeviceCategoryTypes","goToDeviceStart","resourceEnum","goToNext","ChooseDeviceRoute","TroubleshootMissingController","goToDeletePage","TroubleshootMissingRoute","ButtonSignInGoogle","_isSuccess","asyncState","noDelay","isFinished","modifier","handleViewPage","visibilityState","buildRoutes","getParentApplication","_envSettings$getEnvir","addDeviceEngine","parentApplication","returnRoute","rootPageIndex","rootPageUrl","V1Controller","messagingInterface","isForSso","doesSupportEnableBluetooth","enableBluetooth","doesSupportCheckBluetoothPermissions","checkBluetoothPermissions","doesSupportStartBleAdvertising","startBleAdvertising","doesSupportStopBleAdvertising","stopBleAdvertising","wizardManager","redirectTo","approvedHosts","WIZARD_QUERY_PARAMS_KEY","V1Route","localStorageId","replaceId","mergedQueryParams","getAllQueryParameters","updateQueryParametersInLocalStorage","baseWizardPath","wizardName","parseWizardPath","configPromise","approvedHostsPromise","configJson","userData","translations","getTranslations","localeCode","extends","mergeWizardTemplate","initialState","queryParamsInitialState","translationDictionary","errorRecoveryUrl","parseQueryParams","newParams","getObjectFromJson","jsonString","requestedWizardPath","wizardAssetPath","urlQueryParams","queryParamsFromUrl","queryParamsFromLocalStorage","urlId","templateWizardPath","templateJson","templateTranslations","childSteps","parentSteps","extendStepIndex","initialActions","shared","AccountInformationController","BaseLoginSetupEngineController","addressResources","countryList","valueToSet","cannotEditAnything","canEditAddress","canEditEmailAddress","updateCountry","newCountry","subState","city","subCity","postalCode","address1","address2","toggleEditMode","editMode","rollbackData","canEditEmailPreferences","marketingCommunications","communication","clearField","updateAccountInformation","updateEmailPreferences","installManager","canEditAccountInformation","AccountInformationRoute","BaseLoginSetupEngineRoute","canShowAccountSetupHeaderText","areDIYStepsPresent","twoFactorImageSource","persistNotification","transitionToNextPage","LocationBusinessHoursController","saveBusinessHours","locationBusinessHours","openOldBusinessHoursLink","businessHoursEditorDescText","LocationBusinessHoursRoute","getConfirmationDialog","communicationPreference","categoryPreferences","confirmationMessage","hasEnabledMethods","communicationMethods","communicationMethodName","CommunicationPreferencesController","saveCommunicationPreferences","CommunicationPreferencesRoute","RecognizedDeviceListItemComponent","trust","TrustDeviceModal","forget","ForgetDeviceModal","edit","EditDeviceModal","getActionItem","isTrustedDevice","is2FAEnabled","isEnrollingIn2FA","EmailVerificationController","fnSendVerificationEmailIfDifferentEmail","fnSaveProfileModel","EmailVerificationRoute","DesktopWeb","MobileWeb","LoginNameConfirmationController","saveLoginName","newLoginName","originalLoginName","fnSetLoginName","_this$profile","isQuickThermostatCreationPendingCustomerUpdate","updateLoginName","_this$originalLoginNa","LoginNameConfirmationRoute","OutsideWorkingHoursController","nextActiveWindowText","startDateString","endDateString","displayDashboardButton","staticImageUrl","logOutUser","BaseOutsideWorkingHoursRoute","DEFAULT_PASSWORD_STRENGTH_DATA","strength","NaN","suggestions","warningKey","PasswordController","_this$devices$filter","_this$devices","isSavedLogin","recognizedDeviceTypes","showLogOutOfAllDevices","showLinkedDevices","transitionToHostedEngineRoute","onChangePasswordConfirmation","passwordConfirmation","confirmationPasswordError","savePassword","fnSetPassword","currentPassword","persistAppSessionIfNecessary","doesSupportPersistAppSession","persistAppSession","PasswordRoute","showChat","hideChat","mostCommonPasswordTips","PropertyAreaTranslatedStrings","area","PropertyInformationController","isBusiness","propertyInformation","propertyType","businessTypeName","businessType","hideSubtypes","propertyTypesValues","dropDownArray","propertyTypes","businessTypeValues","businessTypeList","businessTypes","businessSubtypeValues","businessSubtypesForType","businessSubtypes","businessSubtypeList","primaryResidenceValues","primaryRes","adultsValues","numAdults","petsValues","numPets","childrenValues","numChildren","propertyAreaValues","propertyArea","electricityProviders","providerList","provider","numberOfEmployeeValues","companySizeList","companySize1","companySize2","companySize3","companySize4","companySize5","companySize6","companySize7","companySize8","updatePropertyType","newPropertyType","oldSelection","newSelection","isPrimaryResidence","occupancyChildren","occupancyPets","occupancyAdults","updateBusinessType","newBusinessType","updateBusinessSubtype","newBusinessSubtype","updatePrimaryResidence","newIsPrimaryResidence","savePropertyInformation","companyName","PropertyInformationRoute","PushMigrationController","pushMigrationImageSource","learnMoreSectionGroups","bulletPoints","migrate","prompt","pushDeviceName","remindLater","doNotRemindAgain","DeviceLinkRequestController","verifyCode","verificationCode","EmberDeviceLinkRequestRoute","RecognizedDevicesController","filteredRecognizedDevices","_this$recognizedDevic","_this$recognizedDevic2","recognizedDevices","untrustedDevices","_this$filteredRecogni","_this$filteredRecogni2","_this$twoFactorAuthen","_this$twoFactorAuthen2","twoFactorAuthentication","transitionToDeviceLink","exitRecognizedDevices","RecognizedDevicesRoute","exitTwoFactorSetup","_this$transitionFrom","_this$transitionFrom2","transitionFrom","_transition$from","_this$transitionFrom3","SecurityQuestionController","securityQuestionDropDownItems","selectedSecurityQuestion","currentSecurityQuestionText","saveSecurityQuestion","fnSetSecurityQuestion","_this$selectedSecurit","securityQuestionAnswer","updateSecurityQuestionDataOnInsert","securityQuestionId","SecurityQuestionRoute","SystemInformationController","temperatureTypesValues","temperatureTypes","systemInformation","volumeTypesValues","volumeTypes","clickAction","fnSetSystemInformation","SystemInformationRoute","BaseTwoFactorRoute","countryMobileCarriers","IndexController","dealerContactString","supportEmail","goToOverviewRoute","skipTwoFactorSetup","IndexRoute","showSuggestedSetup","OverviewController","authenticationMethods","_this$twoFactorAuthen3","AUTHENTICATOR","hasAuthenticatorPermission","EMAIL","hasEmailPermission","hasSmsPermission","_this$twoFactorAuthen4","_this$twoFactorAuthen5","_this$twoFactorAuthen6","_this$twoFactorAuthen7","tfaType","isTwoFactorTypeEnabled","drillIcon","mobileNumber","formattedMobileNumber","obfuscatedEmailAddress","descriptionRight","showManageTrustedDevicesLink","showDoneButton","_this$twoFactorAuthen8","_this$twoFactorAuthen9","initiateSetup","typeOf2FA","_this$twoFactorAuthen10","selected2FAType","selectDrillThroughAction","_this$twoFactorAuthen11","disable2FA","typeOf2FAString","_this$twoFactorAuthen12","tfaModel","disableTwoFactorAuthentication","transitionToLinkedDevices","exit2FASetupFlow","OverviewRoute","qrCode_","AuthenticatorComponent","getAuthenticatorSecretData","qrCodeData","secretString","EmailComponent","MobileNumberComponent","countryLabelText","_this$args$countryMob","cellProviderLabelText","_this$carriersForSele","selectedProviderName","carriersForSelectedCountry","cellProvider","carrier","carrierKey","countryId","TrustDeviceComponent","VerifyDevice","isTypeAuthenticator","sendTwoFactorAuthenticationCode","STEP_AUTHENTICATOR","STEP_MOBILE_NUMBER","STEP_EMAIL","STEP_VERIFY_DEVICE","STEP_TRUST_DEVICE","AUTHENTICATOR_STEPS","SMS_STEPS","EMAIL_STEPS","TwoFactorSetupController","getTranslationStringForStep","mobileNumberUsed","componentName","TwoFactorSetupAuthenticator","TwoFactorSetupMobileNumber","TwoFactorSetupEmail","TwoFactorSetupTrustDevice","TwoFactorSetupVerifyDevice","cancelButtonText","confirmButtonText","showCancelButtonForStep","showStepOneNumeral","updateVerificationCode","updateCurrentDeviceName","currentDeviceName","updateShouldTrustDevice","shouldTrustDevice","handleTwoFactorSetupCancelAction","handleTwoFactorSetupStepAction","verifyTwoFactor","validateNumber","sendEmail","trustTwoFactorDevice","_this$typeOf2FA","clearErrors","validateSmsMobileNumber","sendTwoFactorAuthenticationCodeViaSms","smsMobileNumber","sendTwoFactorAuthenticationCodeViaEmail","_this$verificationCod","_this$typeOf2FA2","verifyCodeAndEnable2FA","fnGoToNextStep","_this$twoFactorAuthen13","_this$twoFactorAuthen14","shouldSkipStep","_this$twoFactorAuthen15","_this$twoFactorAuthen16","_this$twoFactorAuthen17","_this$twoFactorAuthen18","_this$twoFactorAuthen19","isCurrentDeviceTrusted","areMultiple2FAMethodsEnabled","TwoFactorSetupRoute","STATE_CHOOSE_METHOD","STATE_VERIFY","STATE_TRUST","dataForTrustState","mainText","inputLabel","inputClass","dataForChooseMethodState","linkedSystemsFlow","verificationMethodOptions","twoFactorAuthenticationTypes","selectedTwoFactorType","formattedEmailAddress","last4","lastFourPhoneDigits","dataForVerifyAuthenticatorState","dataForVerifyEmailState","dataForVerifySMSState","getDataForState","getDataForVerifyState","sendTwoFactorCode","isResend","inputValue","fnSendTwoFactorCode","pendingLinkedSystemId","fnMoveToVerificationStep","sendVerificationCodeClick","verifyTwoFactorCode","fnUpdateStateData","fnVerifyCode","ChallengeFlowController","canRequestNewCode","confirmButtonDisabled","cancelButtonVisible","stepUsesPinInput","expandItems","isChooseMethodState","showHelpText","canReset2FA","dealerContactInfoString","changeVerificationMethod","cancelButtonAction","confirmButtonAction","initializeDataForTemplate","shouldShowSupportPhone","shouldShowSupportEmail","handleRefresh","reset2FA","fnReset2FA","requestNewCodeClick","ChallengeFlowRoute","_await$this$ajax$apiR","pendingLinkedSystem","exitTwoFactorSetupToLinkedSystems","listenerId","mountPoint","WifiSetupResourcePath","WifiSetupIndexResourcePath","WifiSetup","WifiManualSetup","WifiPasswordEntry","MobileTechEquipmentVideoAddVideoDevice","WiFiEncryptionAlgorithmEnum","WiFiEncryptionTypeEnum","CUSTOMER_SITE","isCustomerSite","networkConfigEngine","BaseWifiSetupController","engineApiPrefix","disallowedCharactersString","_this$wifiConfig","wifiConfig","disallowedSsidOrPasswordCharactersList","currentCharacter","loadRouteModels","_this$bleWifiConfigPe","bleNetworkSetup","bleWifiConfigPermission","isUsingBleEnrollmentInstallation","scannedNetworksFromBleCamera","filterWifiInfoItems","myWifiNetworks","otherWifiNetworks","openWirelessConnectionInstructionsActionSheet","actionSheetType","wifiConnectionInstructionsActionSheet","overviewText","listOfSteps","WirelessConnectionInstructionsTypeEnum","PowerOffDoorbellCamera","PowerOff","PowerOffEthernet","NoPowerOff","WirelessConnectionFailed","closeWifiConnectionInstructionsActionSheet","hasStartedCheckingWirelessNetworkConnection","checkWirelessNetworkConnection","newNetwork","isDeviceConnected","isDeviceConnectionInProgress","isSavingWirelessNetworkInProgress","scannedUniqueNetworks","mySavedNetworks","_mySavedNetworks$map","ssidsInMySavedNetworks","networkSSID","seenSSIDs","WifiConfigController","openInfoActionSheet","shouldDisplayInfoActionSheet","infoActionSheetTitle","infoActionSheetDescription","closeInfoActionSheet","transitionToManualSetupPage","saveWirelessSettings","currentDeviceMac","selectedNetworkSSID","selectedPassword","selectedSecurityType","algorithm","selectedEncryptionType","isCopyingNetwork","wirelessConnectionInstructionsToDisplay","selectedNetwork","savedNetwork","networkPassword","networkEncryption","networkSecurity","SsidMinLength","SsidMaxLength","PasswordMinLength","PasswordMaxLength","UnselectedDropdownValue","Wep64PasswordLength","Wep64HexPasswordLength","Wep128PasswordLength","Wep128HexPasswordLength","NonWhitespaceCharacterRegex","ManualWifiSetupController","securityTypeWarningMessage","recommendedSecurityType","shouldDisableConnectButton","isNetworkNameValid","isPasswordValid","isSelectedSecurityOptionOpen","ssidLength","passwordLength","selectedNetworkName","doesInputContainInvalidCharacters","networkName","wepValidPasswordLengthList","isSelectedEncryptionTypeWep","doesPasswordIncludeInvalidChars","char","networkNameErrorMessage","invalidCharacters","inputErrorMessage","passwordErrorMessage","securityDropdownItems","securityTypeOptions","encryptionTypeDropdownItems","encryptionTypeOptions","wpaType","updateSelectedSecurityType","updateSelectedEncryptionType","CustomersEngineIndexRoute","MobileTechEngineIndexRoute","ManualWifiSetupRoute","appHeader","WifiConfigRoute","selected_camera_mac","hasWifiConfigPermission","newline","parseResponseHeaders","headersString","headerPairs","foundSep","field","determineBodyPromise","requestData","ok","payloadIsEmpty","statusIndicatesEmptyResponse","SyntaxError","_determineContent","RBRACKET","queryParamsObject","buildParams","isPlainObject","_fetch","getFetchFunction","fetchFn","mixinProps","urlForFindRecord","urlForFindAll","urlForFindMany","urlForFindHasMany","urlForFindBelongsTo","urlForCreateRecord","urlForUpdateRecord","urlForDeleteRecord","_buildURL","urlPrefix","pathForType","urlString","snapshots","parentURL","namespace","camelized","pluralize","Mixin","modelClass","serializer","AdapterError","EmberError","lineNumber","extendFn","ErrorClass","defaultMessage","ParentErrorClass","InvalidError","TimeoutError","AbortError","UnauthorizedError","ForbiddenError","NotFoundError","ConflictError","ServerError","Adapter","defineProperty","neverSet","coalesceFindRequests","_coalesceFindRequests","groupRecordsForFindMany","JSONAPIAdapter","RESTAdapter","_defaultContentType","findMany","dasherized","schema","BuildURLMixin","useFetch","maxURLLength","fastboot","_fastboot","sortQueryParams","sortedKeys","buildQuery","sinceToken","since","findHasMany","findBelongsTo","_stripIDFromURL","expandedURL","lastSegment","suffix","adapter","baseUrl","groupsArray","splitGroups","idsSize","additionalLength","lastGroupIndex","splitGroupToFitInUrl","splitGroup","handleResponse","isInvalid","detailedMessage","generatedDetailedMessage","_payload","_fetchRequest","errorThrown","fetchResponseData","parseErrorResponse","ajaxError","fetchErrorHandler","ajaxSuccess","fetchSuccessHandler","textStatus","jqXHR","ajaxResponseData","ajaxSuccessHandler","responseText","ajaxErrorHandler","_ajax","_ajaxRequest","jQuery","fetchFunction","reqOptions","queryParamDelimiter","fetchOptions","dataType","xhr","headerValue","setRequestHeader","_ajaxURL","_this$fastboot","isFastBoot","httpRegex","protocolRelativeRegex","fbError","shortenedPayload","payloadContentType","l","handleAbort","statusText","headersToObject","getAllResponseHeaders","headersObject","DataAdapter","getFilters","_nameToClass","watchModelTypes","typesAdded","typesUpdated","__createRecordData","_instanceCache","_createRecordData","_releaseMethods","discoveredTypes","typesMapFor","watchTypeIfUnseen","identifier","releaseMethods","klass","wrapped","wrapModelType","observeModelType","columnNameToDesc","underscore","columnsForType","typeClass","attributeLimit","containerKey","_debugContainerKey","getRecordColumnValues","columnValues","getRecordKeywords","keywords","getRecordFilterValues","isModified","isClean","getRecordColor","observeRecord","recordUpdated","keysToObserve","wrapRecord","addObserver","removeObserver","StoreTypesMap","WeakMap","typesMap","Store","computedMacroWithOptionalParams","maybeDesc","maybeTarget","maybeKey","isElementDescriptor","isAttribute","recordData","recordDataFor","hasAttr","getAttr","getDefaultValue","storeFor","getRecordData","recordIdentifierFor","setDirtyAttribute","cleanErrorRequests","ArrayProxyWithCustomOverrides","Errors","errorsByAttributeName","errorsFor","attribute","unknownProperty","messages","_findOrCreateMessages","__record","notify","notifyPropertyChange","messagesArray","_messages","normalizeResponseHelper","normalizeResponse","syncRelationshipDataFromLink","parentIdentifier","relationshipData","parentRelationship","parentInternalModel","lhs_relationshipName","parentType","inverseKey","_storeWrapper","inverseForRelationship","relationshipsDefinitionFor","recordDataFindInverseRelationshipInfo","getInverse","relationshipKind","parentRelationshipData","fixRelationshipData","ensureRelationshipIsSetToParent","relatedDataHash","parentPayload","_bind","_guard","guarded","_subscribers","_objectIsAlive","guardDestroyedStore","_v","diffArray","oldArray","newArray","oldLength","newLength","shortestLength","firstChangeIndex","addedCount","removedCount","unchangedEndBlockLength","MutableArrayWithObject","MutableArray","ManyArray","isLoaded","isAsync","_length","_meta","_links","isPolymorphic","_isUpdating","_isDirty","_hasNotified","retrieveLatest","_hasArrayObservers","hasArrayObservers","__hasArrayObservers","getRecord","amt","objects","_backburner","identifiers","removeFromHasMany","addToHasMany","jsonApi","getHasMany","im","_internalModelForResource","_isDematerializing","arrayContentWillChange","arrayContentDidChange","legacySupport","reloadHasMany","manyArray","promiseLabel","Extended","_belongsToState","reloadBelongsTo","PromiseManyArray","_update","hasMixin","mixin","NativeArray","ArrayMixin","cb","proxy","isSettled","isFulfilled","isRejected","tapPromise","dependentKeyCompat","_identifier","_token","_relatedToken","descriptor","caches","getter","createCache","getValue","_classPrivateFieldLooseBase","TypeError","_classPrivateFieldLooseKey","isResourceIdentiferWithRelatedLinks","BelongsToReference","belongsToRelationship","definition","_notificationManager","subscribe","bucket","notifiedKey","unsubscribe","_relatedIdentifier","_resource","identifierCache","getOrCreateRecordIdentifier","_this$_relatedIdentif","getBelongsTo","remoteType","jsonApiDoc","graph","op","LEGACY_SUPPORT","getWithError","_relatedTokenMap","HasManyReference","hasManyRelationship","_relatedIdentifiers","resourceIdentifier","objectOrPromise","_isLoaded","hasReceivedData","support","getManyArray","LegacySupport","_manyArrayCache","_relationshipPromisesCache","_relationshipProxyCache","references","_findBelongsTo","relationshipMeta","_findBelongsToByJsonApiResource","handleCompletedRelationshipRequest","_relationship","loadingPromise","hasFailedLoadAttempt","shouldForceReload","getSchemaDefinitionService","_updatePromiseProxyFor","relatedIdentifier","setDirtyBelongsTo","extractRecordDataFromRecord","graphFor","_inverseIsAsync","inverseIsAsync","fetchAsyncHasMany","_findHasManyByJsonApiResource","setDirtyHasMany","extractRecordDatasFromRecords","promiseProxy","PromiseBelongsTo","referenceFor","reference","adapterFor","isStale","hasDematerializedInverse","allInverseRecordsAreLoaded","areAllInverseRecordsLoaded","inverseType","createSnapshot","relatedLink","adapterPayload","getInternalModel","_push","_findHasMany","preferLocalCache","hasLocalPartialData","finds","_fetchDataIfNeededForIdentifier","fetches","manager","_fetchManager","scheduleFetch","internalModel","shouldFindViaLink","pendingRequest","getPendingFetch","localDataIsEmpty","resourceIsLocal","refs","recordExt","isHasMany","recordOrPromiseRecord","hasEmptyModel","internalModelForRelatedResource","notifyRelationship","hasPromise","notifyAttribute","cacheFor","isInvalidError","Tag","rev","isDirty","_tracking","consume","Tags","getTag","tagged","_target","setter","tag","RecordState","pendingCount","fulfilledCount","rejectedCount","_errorRequests","_lastError","getRequestStateService","notifications","handleRequest","req","notifyErrorsStateChanged","subscribeForRecord","lastRequest","getLastRequestForRecord","updateInvalidErrors","jsonApiErrors","getErrors","newErrors","errorsArrayToHash","errorKeys","isSaved","rd","isDeletionCommitted","hasChangedAttributes","isError","adapterError","isPreloaded","stateName","dirtyType","_Model","RelationshipDefinition","_type","__inverseKey","__inverseIsAsync","__hasCalculatedInverse","parentModelName","normalizeModelName","singularize","typeForRelationshipMeta","_inverseKey","_calculateInverse","shouldFindInverse","inverseFor","inverseAsync","isRelationshipAsync","changeProperties","WeakCache","findPossibleInverses","relationshipsSoFar","possibleRelationships","relationshipMap","relationshipsForType","optionsForRelationship","metaForProperty","superclass","computeOnce","hasComputed","_generator","createProps","_createProps","_secretInit","___recordState","relationshipsByName","notifyChanges","_LEGACY_SUPPORT$get","_internalModel","normalizedId","coerceId","setId","errorsHash","peekTag","_notifyProperties","_createSnapshot","toStringExtension","saveRecord","deprecatedPromiseObject","isReloading","binding","relationshipFor","typeForRelationship","inverseMap","_findInverseFor","inverseName","inverseKind","inverseOptions","propertyMeta","filteredRelationships","possibleRelationship","relationshipNames","eachComputedProperty","isRelationship","relatedTypes","types","rels","relationshipsObject","relationshipFromMeta","eachRelatedType","relationshipTypes","determineRelationshipType","knownSide","otherKind","knownKey","knownKind","transformedAttributes","eachTransformedAttribute","isModel","_debugInfo","expensiveProperties","expand","propertyInfo","includeOtherProperties","opts","userEnteredModelName","modelForMixin","normalizedModelName","MaybeMixin","factoryFor","ModelForMixin","reopenClass","__isMixin","__mixin","register","expandingGet","key1","key2","expandingSet","peekRecordData","isRelationshipRecordData","isBelongsTo","isImplicit","BelongsToRelationship","_state","transactionRef","localState","remoteState","recordDataDidDematerialize","inverseIsImplicit","inverseIdentifier","inverseDidDematerialize","inverseRecordData","notifyBelongsToChange","getData","removeCompletelyFromOwn","lid","ManyRelationship","members","canonicalMembers","canonicalState","_willUpdateManyArray","_pendingManyArrayUpdates","forAllMembers","seen","inverseInternalModel","notifyHasManyChange","canonicalIndex","ImplicitRelationship","addCanonicalRecordData","addRecordData","removeRecordData","BOOL_LATER","STR_LATER","IMPLICIT_KEY_RAND","syncMeta","inverseDefinition","inverseIsCollection","isCollection","inverseIsPolymorphic","upgradeMeta","niceMeta","addToInverse","isRemote","registerPolymorphicType","_addToTransaction","removeFromInverse","flushCanonical","syncRemoteToLocal","toSet","newRecordDatas","existingState","_scheduleLocalSync","addRelatedRecord","removeRelatedRecord","_normalizeLink","Graphs","getWrapper","peekGraph","wrapper","Graph","_definitionCache","_potentialPolymorphicTypes","_willSyncRemote","_willSyncLocal","_pushedUpdates","deletions","_updatedRelationships","_transaction","storeWrapper","polymorphicLookup","altTypes","implicitKeyFor","lhs_key","lhs_modelNames","lhs_baseModelName","lhs_definition","lhs_isPolymorphic","rhs_key","rhs_modelNames","rhs_baseModelName","rhs_relationshipName","rhs_definition","rhs_isPolymorphic","hasInverse","isSelfReferential","isReflexive","baseType","upgradeDefinition","isLHS","Klass","type1","type2","typeCache","t1","t2","isReleasable","unload","removeCompletelyFromInverse","destroyRelationship","_store","_flushRemoteQueue","hasRelationshipDataProperty","hasUpdatedLink","originalLinks","currentLink","currentLinkHref","relationshipIsEmpty","updateRelationshipOperation","notifyInverseOfPotentialMaterialization","replaceRelatedRecord","addToRelatedRecords","removeFromRelatedRecords","identifiersLength","newMembership","changed","canonicalLength","iterationLength","equalLength","adv","replaceRelatedRecordsRemote","currentLength","replaceRelatedRecordsLocal","replaceRelatedRecords","_flushLocalQueue","_finalize","updated","nextBfsId","EMPTY_ITERATOR","iterator","RecordDataDefault","_directlyRelatedRecordDatasIterable","initializedRelationships","initializedRelationshipsArr","findNext","getRemoteState","member","clientId","_isNew","_isDeleted","_bfsId","getResourceIdentifier","pushData","calculateChange","changedKeys","notifyStateChange","_changedKeys","_data","__attributes","_updateChangedAttributes","_setupRelationships","_notifyAttributes","willCommit","_inFlightAttributes","_attributes","_clearErrors","_errors","notifyErrorsChange","__inFlightAttributes","__data","setIsDeleted","_deletionConfirmed","_isDeletionCommited","changedAttributeNames","currentData","newData","diffData","newDataKeys","dirtyKeys","removeFromInverseRelationships","didCommit","newCanonicalAttributes","setRecordId","recordDatas","commitWasRejected","originalValue","__setId","_scheduledDestroy","emberBackburner","_cleanupOrphanedRecordDatas","relatedRecordDatas","_allRelatedRecordDatas","isRecordInUse","areAllModelsUnloaded","removeRecordDataFor","disconnectRecord","queue","bfsId","node","isAttrDirty","_initRecordCreateOptions","createOptions","attributeDefs","attributesDefinitionFor","relationshipDefs","propertyNames","propertyValue","fieldType","clientDidCreate","updates","hasAttrs","isEqual","normalizedHash","_extractEmbeddedRecords","keyForRelationship","hasSerializeRecordsOption","hasDeserializeRecordsOption","keyForAttribute","serializeBelongsTo","noSerializeOptionSpecified","includeIds","hasSerializeIdsOption","includeRecords","embeddedSnapshot","serializedKey","_getMappedKey","serializePolymorphicType","_serializeEmbeddedBelongsTo","removeEmbeddedForeignKey","serializeHasMany","_serializeEmbeddedHasMany","hasSerializeIdsAndTypesOption","_serializeHasManyAsIdsAndTypes","recordSnapshot","_generateSerializedHasMany","embeddedJson","parentRecord","parentKey","hasEmbeddedAlwaysOption","attrsOption","alwaysEmbed","partial","_extractEmbeddedHasMany","_extractEmbeddedBelongsTo","relationshipHash","_normalizeEmbeddedRelationship","isEmbeddedRecordsMixin","modelHasAttributeOrRelationshipNamedType","BooleanTransform","allowNull","DateTransform","Infinity","NumberTransform","transformed","StringTransform","JSONSerializer","_normalizeDocumentHelper","documentHash","typeOf","_normalizeResourceHelper","normalized","_normalizeRelationshipDataHelper","relationshipDataHash","modelNameFromPayloadKey","resourceHash","usedLookup","doesTypeExist","normalizedPayload","_normalizeResponse","isSingle","normalizeQueryRecordResponse","extractAttributes","attributeKey","extractRelationship","extractRelationships","relationshipKey","_extractType","payloadKeyFromModelName","normalizeUsingDeclaredMapping","extractId","applyTransforms","serializeAttribute","_canSerialize","transformFor","payloadKey","belongsToIsNotNew","shouldSerializeHasMany","nonNewHasMany","payloadType","Serializer","primaryKey","mergedProperties","transformMeta","normalizeFindRecordResponse","normalizeFindAllResponse","normalizeFindBelongsToResponse","normalizeFindHasManyResponse","normalizeFindManyResponse","normalizeQueryResponse","normalizeCreateRecordResponse","normalizeDeleteRecordResponse","normalizeUpdateRecordResponse","extractMeta","relationshipModelName","extractPolymorphicRelationship","relationshipOptions","linkKey","keyForLink","normalizeRelationships","normalizedKey","mappedKey","_mustSerialize","relationshipType","belongsToId","extractErrors","attributeType","skipAssertion","keyForPolymorphicType","_normalizeArray","arrayHash","makeArray","_normalizePolymorphicRecord","primarySerializer","forcedSecondary","typeName","isPrimaryType","isUpdatedRecord","typeSerializer","typeProperty","ensureStringId","SOURCE_POINTER_REGEXP","SOURCE_POINTER_PRIMARY_REGEXP","PRIMARY_ATTRIBUTE_KEY","errorsHashToArray","Touching","RequestPromise","RequestCache","_pending","_done","_subscriptions","queryRequest","recordIdentifier","_triggerSubscriptions","_dequeue","finalizedRequest","_addDone","requestDataOp","getPendingRequestsForRecord","_belongsToRelationships","_belongsToIds","_hasManyRelationships","_hasManyIds","hasRecord","_changedAttributes","keyName","changedAttributeKeys","returnModeIsId","returnModeIsIds","cachedIds","cachedSnapshots","attrDefs","_fieldName","SaveOp","FetchManager","_pendingFetch","_pendingSave","requestCache","scheduleSave","resolver","RSVP","pendingSaveItem","_flushPendingSaves","_flushPendingSave","operation","parsedErrors","pendingItem","pendingFetch","pendingFetchItem","resolverPromise","potentiallyNewIm","flushAllPendingFetches","_fetchRecord","fetchItem","handleFoundRecords","seeking","coalescedPayload","expectedSnapshots","found","payloads","coalescedIncluded","pair","missingSnapshots","assertIsString","rejectFetchedItems","_findMany","optionsMap","_processCoalescedGroup","totalInGroup","groupedSnapshots","_flushPendingFetchForType","pendingFetchItems","shouldCoalesce","totalItems","pendingFetches","matchingPendingFetch","isSameRequest","_findAll","recordArray","snapshotArray","_didUpdateAll","isNonEmptyString","IDENTIFIERS","WeakSet","isStableIdentifier","_crypto","FastBoot","crypto","configuredForgetMethod","configuredGenerationMethod","configuredResetMethod","configuredUpdateMethod","setIdentifierGenerationMethod","setIdentifierUpdateMethod","setIdentifierForgetMethod","setIdentifierResetMethod","defaultGenerationMethod","randomUUID","defaultEmptyCallback","IdentifierCache","_cache","lids","_generate","_forget","_reset","_merge","__configureMerge","_getRecordIdentifier","shouldGenerate","keyOptions","getTypeIndex","newLid","makeStableRecordIdentifier","_allIdentifiers","peekRecordIdentifier","createIdentifierForNewRecord","updateRecordIdentifier","identifierObject","newId","existingIdentifier","typesCache","newType","detectMerge","incomingDataResource","_mergeRecordIdentifiers","updateFn","performRecordIdentifierUpdate","kept","abandoned","forgetRecordIdentifier","typeMap","typeIndex","isDSModel","InternalModel","_id","_isUpdatingId","hasRecordData","_isDestroyed","_doNotDestroy","_pendingRecordArrayManagerFlush","_modelClass","__recordArrays","newIdentifier","_recordData","isHiddenFromRecordArrays","isRecordFullyDeleted","_isRecordFullyDeleted","hasScheduledDestroy","_this$_recordData$isE","_this$_recordData","dematerializeRecord","removeRecord","recordDidChange","_deletedRecordWasNew","cancelDestroy","destroySync","_checkForOrphanedInternalModels","destroyFromRecordData","peek","internalModelFactoryFor","setupData","notifyAttributes","adapterWillCommit","preloadData","preload","jsonPayload","preloadValue","_preloadRelationship","_convertPreloadRelationshipToJSON","fromCache","didChange","didError","adapterDidCommit","adapterDidInvalidate","adapterDidError","InternalModelMap","_idToModel","_models","recordIdentifiers","loc","internalModels","IdentityMap","_map","retrieve","trueId","FactoryCache","InternalModelFactory","RecordCache","setRecordIdentifier","matchedIdentifier","resourceData","intendedIdentifier","altIdentifier","modelMapFor","otherIm","_identityMap","_build","getByResource","normalizedResource","constructResource","oldId","peekById","build","newResourceInfo","isCreate","recordMap","Cache","NotificationManager","stableIdentifier","unsubToken","callbackMap","RecordReference","RecordDataForIdentifierCache","setRecordDataFor","instance","metaIsRelationshipDefinition","_peekGraph","RecordDataStoreWrapper","_willNotify","_pendingNotifies","_scheduleNotification","_flushNotifications","factory","inverseIsAsyncForRelationship","RECORD_REFERENCES","StoreMap","_instances","InstanceCache","__recordDataFor","_classPrivateFieldLoo","_instantiateRecord","getReference","relationshipValue","def","instantiateRecord","_teardownRecord","teardownRecord","createRecordDataFor","_load","maybeIdentifier","isUpdate","updatedIdentifier","AvailableShims","mapFromHash","ShimModelClass","__store","PromiseArrayProxy","PromiseProxyMixin","PromiseObjectProxy","ObjectProxy","promiseObject","promiseArray","ALLOWABLE_METHODS","promiseObjectProxy","Proxy","receiver","Reflect","SnapshotRecordArray","_snapshots","_recordArray","_takeSnapshot","RecordArray","_updatingPromise","objectAtContent","recordForIdentifier","isUpdating","updatingPromise","_unregisterFromManager","unregisterRecordArray","_dissociateFromOwnRecords","recordArrays","getRecordArraysForIdentifier","_pushIdentifiers","_removeIdentifiers","removeObjects","AdapterPopulatedRecordArray","_setObjects","_associateWithRecordArray","_setIdentifiers","RecordArraysCache","recordArraysForIdentifier","pendingForIdentifier","shouldIncludeInRecordArrays","removeFromAll","_pendingIdentifiers","_adapterPopulatedRecordArrays","_flushPendingIdentifiersForModelName","identifiersToRemove","identifiersToAdd","shouldInclude","updateLiveRecordArray","removeFromAdapterPopulatedRecordArrays","_flush","_syncLiveRecordArray","hasNoPotentialDeletions","hasNoInsertionsOrRemovals","_visibleIdentifiersByType","liveRecordArrayFor","createRecordArray","createAdapterPopulatedRecordArray","removedFromAdapterPopulated","removeFromArray","liveRecordArrayForType","_modelForMixin","_RecordData","_found","DSModelSchemaDefinitionService","_relationshipsDefCache","_attributesDefCache","attributeMap","getModelFactory","_modelFactoryCache","RecordArrayManager","_adapterCache","_serializerCache","edBackburner","createRecordArgs","container","_schemaDefinitionService","registerSchemaDefinitionService","maybeFactory","shims","shim","getShimClass","inputProperties","generateIdForRecord","isMaybeIdentifier","promiseRecord","hasRecordForId","adapterOptionsWrapper","queryPromise","_query","_queryRecord","recordWasInvalid","pushed","inputPayload","serializeRecord","saveOptions","RecordData","application","adapterName","serializerName","intern","GUID_KEY","HAS_BLOCK","enumerableSymbol","isSimpleClick","secondaryClick","Checkbox","EmberComponent","attributeBindings","indeterminate","change","UNDEFINED","freeze","EMPTY_QUERY_PARAMS","LinkComponent","disabledWhen","tabindex","activeClass","loadingClass","disabledClass","linkTitle","assertLinkToOrigin","_invoke","_routing","injectService","_currentRoute","_currentRouterState","_targetRouterState","_isEngine","getEngineParent","_engineMountPoint","_route","_namespaceRoute","_isDisabled","_active","_isActive","willBeActive","routerState","currentWhen","routing","isActiveForRoute","transitioningIn","transitioningOut","bubbles","isSelf","shouldReplace","_generateTransition","qualifiedRouteName","loadingHref","generateURL","_modelsAreLoaded","lastModel","isQueryParams","hasBlock","runInDebug","equivalentNamedArgs","hasQueryParams","positionalParams","Window","inputTypes","hasDOM","TextField","TextSupportMixin","inputTypeTestElement","canSetTypeOfInput","pattern","TextArea","TextSupport","layout","cols","actionContext","actionContextObject","triggerAction","getTarget","KEY_EVENTS","Enter","Escape","TargetActionSupport","maxlength","_elementValueDidChange","interpretKeyEvents","insertNewline","sendAction","focusIn","focusOut","keyPress","keyUp","keyDown","view","MUTABLE_CELL","SEND_ACTION","setModifierManager","capabilities","disableAutoTracking","createModifier","installModifier","updateModifier","destroyModifier","untrack","limit","func","hits","misses","purge","STRING_DASHERIZE_REGEXP","STRING_DASHERIZE_CACHE","decamelize","DECAMELIZE_CACHE","STRING_CAMELIZE_REGEXP_1","STRING_CAMELIZE_REGEXP_2","CAMELIZE_CACHE","_match","_separator","chr","STRING_CLASSIFY_REGEXP_1","STRING_CLASSIFY_REGEXP_2","STRING_CLASSIFY_REGEXP_3","CLASSIFY_CACHE","replace1","replace2","initialChar","STRING_UNDERSCORE_REGEXP_1","STRING_UNDERSCORE_REGEXP_2","UNDERSCORE_CACHE","STRING_CAPITALIZE_REGEXP","CAPITALIZE_CACHE","STRING_DECAMELIZE_REGEXP","classify","toPrimitive","_toPrimitive","_toPropertyKey","EnsureRegisteredService","nonce","classNonces","nonceCounter","runtime","isCurriedComponentDefinition","CurriedComponentDefinition","curry","CurriedValue","ensureSafeComponent","thingWithOwner","_runtimeResolver","__container__","runtimeResolver","lookupComponentHandle","handle","lookupComponent","lookupCurriedComponentDefinition","handleString","EnsureSafeComponentHelper","BaseComponent","setDestroyed","setDestroying","destroyables","CAPABILITIES","asyncLifecycleCallbacks","updateHook","EmberGlimmerComponentManager","createComponent","ComponentClass","BaseComponentManager","destroyComponent","GlimmerComponent","GlimmerComponentBase","setComponentManager","GlimmerComponentManager","metal","keyForItem","Token","_parent","_cancelled","cancelled","scheduler","sync","measure","affect","jobs","_nextFlush","ticks","queueName","job","flush","q","begin","VC_IDENTITY","VirtualComponent","upperBound","lowerBound","rendered","realUpperBound","realLowerBound","bottom","nextSibling","Element","recycle","newContent","newIndex","OC_IDENTITY","OccludedContent","isOccludedContent","listener","insertRangeBefore","firstNode","lastNode","nextNode","roundTo","decimal","exp","supportsPassive","UNDEFINED_VALUE","ScrollHandler","elements","handlers","isUsingPassive","SUPPORTS_PASSIVE","addScrollHandler","scrollLeft","passiveHandler","triggerElementHandlers","capture","passive","removeScrollHandler","elementCache","cachedTop","cachedLeft","topChanged","leftChanged","ViewportContainer","scrollX","pageXOffset","VENDOR_MATCH_FNS","ELEMENT_MATCH_FN","estimateElementHeight","fallbackHeight","parentHeight","getPercentageHeight","fontSizeElement","getPropertyValue","getEmHeight","getScaledClientRect","scaled","Radar","parentToken","bufferSize","containerSelector","estimateHeight","initialRenderCount","renderAll","renderFromLast","shouldRecycle","startingIndex","occlusionTagName","_itemContainer","_scrollContainer","_prependOffset","_calculatedEstimateHeight","_collectionOffset","_calculatedScrollContainerHeight","_transformScale","_scrollHandler","_didEarthquake","_scrollTop","scheduleUpdate","_resizeHandler","_nextUpdate","_nextLayout","_started","_didReset","_didUpdateItems","_prevFirstItemIndex","_prevLastItemIndex","_prevFirstVisibleIndex","_prevLastVisibleIndex","_firstReached","_lastReached","_prevTotalItems","_prevFirstKey","_prevLastKey","_componentPool","_prependComponentPool","_appendComponentPool","_occludedContentBefore","_occludedContentAfter","_pageUpHandler","pageUp","_pageDownHandler","pageDown","_domPool","createDocumentFragment","virtualComponents","orderedComponents","_updateVirtualComponents","__ember_meta__","setElementMatchFn","parentElement","closestElement","_updateConstants","startingScrollTop","didUpdateItems","promiseResolve","_determineUpdateType","_updateIndexes","afterUpdate","scrollDiff","_calculateScrollDiff","_sendActions","firstItemIndex","lastItemIndex","firstVisibleIndex","lastVisibleIndex","lenDiff","oldFirstKey","oldLastKey","newItemsLength","newFirstKey","newLastKey","isPrepend","prepend","isAppend","scrollContainerOffsetHeight","scrollContainerRenderedHeight","transformScale","scrollContentTop","scrollContainerTop","scrollContainerMaxHeight","maxHeightStyle","calculatedEstimateHeight","renderedFirstItemIndex","renderedLastItemIndex","renderedTotalBefore","renderedTotalAfter","totalBefore","totalAfter","firstIndexInList","lastIndexInList","itemIndex","_appendComponent","_prependComponent","totalItemsBefore","totalItemsAfter","beforeItemsText","afterItemsText","relativeNode","numPrepended","totalComponents","newFirstItemIndex","getOffsetForIndex","visibleTop","visibleMiddle","visibleBottom","SkipList","Float32Array","ArrayBuffer","_initializeLayers","layers","layer","prevLayer","numLayers","leftIndex","rightIndex","getOffset","targetIndex","oldValues","numAppended","subarray","DynamicRadar","_firstItemIndex","_lastItemIndex","_totalBefore","_totalAfter","_minHeight","_nextIncrementalRender","skipList","_shouldScheduleRerender","_measure","maxIndex","beforeVisibleDiff","measureLimit","numToMeasure","currentItem","previousItem","currentItemTop","currentItemHeight","margin","newHeight","itemDelta","StaticRadar","middleItemIndex","shouldRenderCount","staticHeight","idForFirstItem","shouldYieldToInverse","_radar","_clearScheduledActions","clearTimeout","_nextSendActions","_scheduledActions","_scheduleSendAction","_action","scrollToItem","registerAPI","RadarClass","calculateStartingIndex","_prevItemsLength","_hasAction","firstReached","lastVisibleChanged","firstVisibleChanged","getSentryConfig","_global$__sentryEmber","_global","GLOBAL_OBJ","__sentryEmberConfig","environmentConfig","sentry","browserTracingOptions","appInstance","BrowserTracing","browserTracing","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","routerMain","routerService","externalRouter","_hasMountedSentryPerformanceRouting","recognize","startTransaction","disableRunloopPerformance","activeTransaction","transitionSpan","getURL","implementation","getLocationURL","routeInfo","toRoute","finishActiveTransaction","nextInstance","_activeTransaction","getBackburner","off","_activeTransaction2","fromRoute","getTransitionInformation","startInactiveSpan","_instrumentEmberRouter","idleTimeout","transitionTimeout","client","Sentry","getClient","addIntegration","minimumRunloopQueueDuration","currentQueueStart","currentQueueSpan","instrumentedEmberQueues","previousInstance","getActiveSpan","timestampInSeconds","processQueue","_startInactiveSpan","startTimestamp","_instrumentEmberRunloop","disableInstrumentComponents","minimumComponentRenderDuration","enableComponentDefinitions","minComponentDuration","beforeEntries","beforeComponentDefinitionEntries","before","_name","_timestamp","processComponentRenderBefore","after","_beganIndex","processComponentRenderAfter","_instrumentComponents","_startInactiveSpan3","startName","endName","HAS_PERFORMANCE","HAS_PERFORMANCE_TIMING","_performance","clearMarks","clearMeasures","getEntriesByName","browserPerformanceTimeOrigin","_hasPerformanceSupport","disableInitialLoadInstrumentation","measureName","startMarkExists","endMarkExists","endTimestamp","_instrumentInitialLoad","instrumentForPerformance","backburner","_startInactiveSpan2","DSN_REGEX","dsnToString","withPassword","pass","port","projectId","publicKey","dsnFromComponents","components","createEnvelope","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","encodeUTF8","textEncoder","TextEncoder","encode","serializeEnvelope","envHeaders","itemHeaders","stringifiedPayload","buffers","totalLength","buf","merged","concatBuffers","createAttachmentEnvelopeItem","attachment","dropUndefinedKeys","filename","content_type","attachment_type","attachmentType","ITEM_TYPE_TO_DATA_CATEGORY_MAP","sessions","transaction","client_report","user_report","replay_event","replay_recording","check_in","statsd","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","sdk","version","SentryError","logLevel","setPrototypeOf","SENTRY_API_VERSION","getEnvelopeEndpointWithUrlEncodedAuth","tunnelOrOptions","tunnel","sdkInfo","_metadata","getBaseApiEndpoint","_getIngestEndpoint","urlEncode","sentry_key","sentry_version","sentry_client","_encodedAuth","ALREADY_SEEN_ERROR","BaseClient","_integrations","_integrationsInitialized","_numProcessing","_outcomes","_hooks","_eventProcessors","_dsn","consoleSandbox","lastPath","projectMatch","dsnFromString","DEBUG_BUILD","logger","isValidProtocol","validateDsn","makeDsn","_transport","transport","recordDroppedEvent","transportOptions","captureException","checkOrSetAlreadyCaught","event_id","_process","eventFromException","_captureEvent","captureMessage","eventMessage","isParameterizedString","promisedEvent","isPrimitive","eventFromMessage","captureEvent","originalException","captureSession","sendSession","updateSession","getDsn","getOptions","getSdkMetadata","getTransport","metricsAggregator","_isClientDoneProcessing","clientFinished","transportFlushed","resolvedSyncPromise","getEventProcessors","addEventProcessor","eventProcessor","setupIntegrations","forceInitialize","_isEnabled","integrations","getIntegrationById","integrationId","getIntegration","integration","_oO","setupIntegration","sendEvent","emit","metadata","packages","enhanceEventWithSdkInfo","envelopeHeaders","dynamicSamplingContext","sdkProcessingMetadata","sent_at","trace","createEventEnvelopeHeaders","createEventEnvelope","attachments","_sendEnvelope","sendResponse","createSessionEnvelope","_event","sendClientReports","captureAggregateMetrics","metricBucketItems","metricsEnvelope","tagEntries","maybeTags","metric","metricType","serializeMetricBuckets","createMetricEnvelopeItem","createMetricEnvelope","hook","_updateSessionFromEvent","crashed","errored","mechanism","handled","sessionNonTerminal","SyncPromise","ticked","setInterval","clearInterval","_prepareEvent","isolationScope","getIsolationScope","prepareEvent","propagationContext","contexts","traceId","trace_id","spanId","parentSpanId","dsc","span_id","parent_span_id","getDynamicSamplingContextFromClient","_processEvent","finalEvent","sentryError","isTransaction","isTransactionEvent","isErrorEvent","beforeSendLabel","rejectedSyncPromise","dataCategory","prepared","__sentry__","beforeSendTransaction","processBeforeSend","beforeSendResult","invalidValueError","isThenable","_validateBeforeSendResult","processedEvent","getSession","transactionInfo","transaction_info","_clearOutcomes","outcomes","quantity","BrowserClient","sdkSource","WINDOW","SENTRY_SDK_SOURCE","SDK_VERSION","_flushOutcomes","stackParser","attachStacktrace","captureUserFeedback","createUserFeedbackEnvelopeItem","createUserFeedbackEnvelope","platform","discarded_events","dateTimestampInSeconds","UNKNOWN_FUNCTION","createFrame","lineno","colno","function","in_app","chromeRegex","chromeEvalRegex","geckoREgex","geckoEvalRegex","winjsRegex","defaultStackLineParsers","subMatch","extractSafariExtensionDetails","defaultStackParser","createStackParser","isSafariExtension","isSafariWebExtension","DEFAULT_RETRY_AFTER","DEFAULT_TRANSPORT_BUFFER_SIZE","createTransport","makeRequest","$","taskProducer","drain","capturedSetTimeout","makePromiseBuffer","rateLimits","filteredEnvelopeItems","envelopeItemDataCategory","limits","disabledUntil","isRateLimited","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","statusCode","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","headerDelay","headerDate","parseRetryAfterHeader","updateRateLimits","__sentry__baseTransport__","cachedFetchImpl","makeFetchTransport","nativeFetch","isNativeFetch","fetchImpl","sandbox","getNativeFetchImplementation","pendingBodySize","requestSize","requestOptions","referrerPolicy","keepalive","XHR_READYSTATE_DONE","makeXHRTransport","XMLHttpRequest","onerror","onreadystatechange","readyState","getResponseHeader","defaultIntegrations","Integrations","TryCatch","Breadcrumbs","GlobalHandlers","LinkedErrors","Dedupe","HttpContext","_runtimeConfig","initConfig","sentryInitConfig","_getSentryInitConfig","__SENTRY_RELEASE__","SENTRY_RELEASE","autoSessionTracking","clientOptions","stackParserFromStackParserOptions","getIntegrationsToSetup","supportsFetch","clientClass","enable","hub","getCurrentHub","getScope","initialScope","bindClient","initAndBind","startSession","ignoreDuration","addHistoryInstrumentationHandler","captureErrorForStack","LoadError","assetLoader","loader","__undef__","retryLoad","_invokeAndCache","_retry","AssetLoadError","asset","uri","originalError","RETRY_LOAD_SECRET","BundleLoadError","bundleName","isBrowser","createLoadElement","nodeLoader","checkSheetLoad","resolvedHref","stylesheets","styleSheets","reduceManifestBundles","manifest","__manifests","_setupCache","_initAssetLoaders","pushManifest","__manifest","loadBundle","cachedPromise","_getFromCache","_getBundle","dependencyPromises","dependency","assetPromises","assets","loadAsset","bundleWithFail","_setInCache","cacheKey","assetWithFail","_getAssetLoader","defineLoader","__assetLoaders","getManifest","__cache","evict","JsLoader","CssLoader","libraries","registered","initializerFactory","titleize","consumeArgs","noop","willRemove","pos","ClassBasedModifierManager","factoryOrClass","implementsModify","_implementsModify","createdState","installedState","installElement","installElementOnInstance","didReceiveArguments","didInstall","Args","updateArgsOnInstance","didUpdateArguments","ClassBasedModifier","_this$Element","FunctionBasedModifierManager","_options$eager","eager","teardown","proto","vendor","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeType","nodes","ios","MSStream","ClickOutsideModifier","_destroy","cursor","exceptSelector","didSetup","_init","eventHandler","_createHandler","cancelOutsideListenerSetup","_addClickOutsideListener","_removeClickOutsideListener","composedPath","isRemoved","documentOrBodyContains","isInside","setupContainer","Namespace","VERSION","registerCoreLibrary","DebugAdapter","RESTSerializer","JSONAPISerializer","Relationship","_setupContainer","registerOptionsForType","singleton","hasRegistration","initializeStore","externalAlias","externalRoute","_getExternalRoute","replaceWithExternal","LinkToExternal","LegacyLinkComponent","targetRouteName","Engine","buildRegistry","registry","ExternalLinkComponent","EngineInstance","rootElement","_dependenciesForChildEngines","_externalRoutes","buildChildEngineInstance","engineConfigurations","engines","engineConfigurationKey","engineConfiguration","engineDependencies","dependencyType","_dependencyTypeFromCategory","dependencyName","dependencyNameInParent","engineDependency","dependencyKey","cloneParentDependencies","requiredDependencies","instantiate","didCreateRootView","appendTo","transitionToExternalRoute","isRouteMap","helper","configModulePath","hrefAttr","maybeHandle","shouldHandle","isUnmodifiedLeftClick","isNotIgnored","hasNoTargetBlank","hasNoActionHelper","hasNoDownload","isNotLinkComponent","recognizeUrl","_getRouter","getUrlWithoutRoot","download","isLinkComponent","componentInstance","didRecognize","_getRootUrl","isInternal","urlWithoutRoot","routerMicrolib","recognizer","hrefToClickHandler","closestLink","HrefTo","reopen","plurals","singular","irregularPairs","uncountable","BLANK_REGEX","LAST_WORD_DASHED_REGEX","LAST_WORD_CAMELIZED_REGEX","CAMELIZED_REGEX","CAPITALIZE_REGEX","loadUncountable","loadIrregular","irregular","irregularInverse","Inflector","ruleSet","makeDictionary","enableCache","purgeCache","_cacheUsed","_sCache","_singularize","numberOrWord","withoutCount","_pCache","_pluralize","disableCache","plural","wordOrCount","inflect","typeRules","inflection","substitution","lowercase","wordSplit","lastWord","isCamelized","isUncountable","defaultRules","inflector","THelper","onLocaleChanged","recompute","namedOptions","positionalOptions","_options$allowEmpty","allowEmpty","missingMessage","localeNames","ErrorKind","TYPE","SKELETON_TYPE","isLiteralElement","literal","isArgumentElement","argument","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","isPoundElement","pound","isTagElement","isNumberSkeleton","isDateTimeSkeleton","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","era","hour12","hourCycle","WHITE_SPACE_REGEX","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","roundingPriority","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","minimumIntegerDigits","parseNotationOptions","opt","parseNumberSkeleton","_i","tokens_1","useGrouping","compactDisplay","__assign","currencyDisplay","unitDisplay","roundingMode","g3","g4","g5","trailingZeroDisplay","signOpts","conciseScientificAndEngineeringOpts","_a","timeData","getDefaultHourSymbolFromLocale","hourCycles","regionTag","languageTag","maximize","region","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","trimStart","hasTrimEnd","trimEnd","isSafeInteger","isFinite","REGEX_SUPPORTS_U_AND_Y","RE","matchIdentifierAtIndex","codePoints","fromCharCode","entries_1","flag","IDENTIFIER_PREFIX_RE_1","_isWhiteSpace","_isPatternSyntax","Parser","ignoreTag","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","parseArgument","UNMATCHED_CLOSING_TAG","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","INVALID_TAG","closingTagNameStartPosition","UNCLOSED_TAG","startOffset","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","ch","openingBracePosition","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","parseIdentifierIfPossible","MALFORMED_ARGUMENT","parseArgumentOptions","startingPosition","endOffset","bumpTo","typeStartPosition","argType","typeEndPosition","EXPECT_ARGUMENT_TYPE","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","EXPECT_ARGUMENT_STYLE","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","EXPECT_DATE_TIME_SKELETON","dateTimePattern","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","hourChar","getBestPattern","parsedOptions","typeEndPosition_1","EXPECT_SELECT_ARGUMENT_OPTIONS","identifierAndLocation","pluralOffset","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","tryParseDecimalInteger","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","optionsResult","tryParsePluralOrSelectOptions","location_2","pluralType","INVALID_ARGUMENT_TYPE","nestedBraces","apostrophePosition","bumpUntil","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","stringTokens_1","stemAndOptions","options_1","INVALID_NUMBER_SKELETON","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selectorLocation","EXPECT_PLURAL_ARGUMENT_SELECTOR","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","fragmentResult","EXPECT_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","expectNumberError","invalidNumberError","hasDigits","currentOffset","targetOffset","nextCode","pruneLocation","els","originalMessage","captureLocation","memoize","cacheDefault","serializerDefault","strategy","strategyDefault","monadic","arg","variadic","assemble","ObjectWithoutPrototypeCache","ErrorCode","strategies","PART_TYPE","FormatError","msg","__extends","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","isFormatXMLElementFn","formatToParts","formatters","currentPluralValue","els_1","getNumberFormat","varName","getDateTimeFormat","medium","value_1","formatFn","PluralRules","MISSING_INTL_API","getPluralRules","lastPart","createFastMemoizeCache","IntlMessageFormat","overrideFormats","defaultConfig","configs","defaultLocale","formatterCache","pluralRules","ast","resolvedLocale","NumberFormat","supportedLocalesOf","getAst","resolveLocale","__parse","parseOpts","__rest","c1","c2","__spreadArray","memoizedDefaultLocale","Locale","supportedLocales","integer","percent","short","long","full","filterProps","allowlist","defaults","filtered","DEFAULT_INTL_CONFIG","defaultFormats","fallbackOnEmptyString","onWarn","warning","getNamedFormat","formatType","UnsupportedFormatterError","NUMBER_FORMAT_OPTIONS","getFormatter","IntlFormatError","formatNumberToParts","RELATIVE_TIME_FORMAT_OPTIONS","formatRelativeTime","getRelativeTimeFormat","RelativeTimeFormat","DATE_TIME_FORMAT_OPTIONS","filteredOptions","timeStyle","dateStyle","_b","formatTime","formatDateTimeRange","formatRange","formatDateToParts","formatTimeToParts","PLURAL_FORMAT_OPTIONS","formatPlural","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","f1","mfFormats","formatMessage","messageDescriptor","defaultRichTextElements","msgId","Err","invariant","MissingTranslationError","getMessageFormat","MessageFormatError","LIST_FORMAT_OPTIONS","formatList","getListFormat","formatListToParts","ListFormat","richValues_1","serializedValues","generateToken","DISPLAY_NAMES_OPTONS","formatDisplayName","getDisplayNames","DisplayNames","of","createIntl","list","displayNames","createFormatters","resolvedConfig","MissingDataError","InvalidConfigError","verifyConfigMessages","$t","FormatterBase","FormatDate","Formatter","FormatList","Handlebars","Utils","escapeExpression","FormatMessage","stringOrDesc","isHTMLSafe","escapedOptions","escapedOpts","toHTML","escapeOptions","FormatNumber","FormatRelative","formatOptions","relative","FormatTime","EmptyObject","flatten","hasSuffix","normalizeLocale","localeName","IntlService","_intls","proposed","_locale","_timer","_ee","_updateDocumentLanguage","primaryLocale","createFormatterProxy","initialLocale","EventEmitter","setLocale","_owner","_formatters","_createFormatters","_formats","resolveRegistration","onIntlError","getIntl","getOrCreateIntl","addTranslations","IntlErrorCode","MISSING_TRANSLATION","_localeWithDefault","translationsFor","resilient","existingIntl","validateKeys","_this$getIntl","_this$getIntl2","renderer","_dom","documentService","getDOM","resolveInitializer","moduleName","_endsWith","app","initializerPrefix","instanceInitializerPrefix","initializers","instanceInitializers","moduleNames","requirejs","_eak_seen","registerInitializers","instanceInitializer","registerInstanceInitializers","includeKeys","newOpts","Pendo","apiKey","_injectScript","o","z","_q","identify","compactedOptions","excludedKeys","getOwnPropertyNames","mergedOptions","_el$parentElement","Metrics","doNotTrack","metricsAdapters","appEnvironment","activateAdapters","adaptersForEnv","_adaptersForEnv","activeAdapters","adapterClass","_lookupAdapter","supportsFastBoot","_adapters","_activateAdapter","environments","availableAdapter","selectedAdapterNames","maybeArray","emberObject","extension","makeToString","RouterEvent","PageTitleListService","_updateTitle","_validateExistingTitleElement","_defaultConfig","scheduleTitleUpdate","applyTokenDefaults","defaultSeparator","defaultPrepend","defaultReplace","inheritFromPrevious","tokenForId","_findTokenById","visibleTokens","sortedTokens","appending","frontGroups","front","lastToken","E","toBeTitle","updateFastbootTitle","titleDidUpdate","headElement","headChildNodes","childNodes","nodeName","titleEl","titleContents","PageTitleService","AwaitHelper","maybePromise","ensureLatestPromise","setValue","_err","valueBeforeSettled","_error","_wasSettled","_promise","_value","_unsettle","_settle","allowUpdates","getPod","ContainerDebugAdapter","_moduleRegistry","ModuleRegistry","canCatalogEntriesByType","catalogEntriesByType","_entries","resolveOther","parsedName","normalizedModuleName","findModuleName","defaultExport","_extractDefaultExport","shouldWrapInClassFactory","injections","parseName","fullNameParts","prefixParts","nameParts","fullNameWithoutType","resolveMethodName","pluralizedTypes","moduleRegistry","moduleBasedResolver","_normalizeCache","_deprecatedPodModulePrefix","moduleNameLookupPatterns","podBasedModuleName","podBasedComponentsInSubdir","mainModuleName","defaultModuleName","nestedColocationComponentModuleName","_normalize","resolved","podBasedLookupWithPrefix","podPrefix","resolveEngine","engineModule","resolveRouteMap","engineRoutesModule","resolveTemplate","tmpPrefix","loggingDisabled","tmpModuleName","chooseModuleName","_logLookup","underscoredModuleName","partializedModuleName","lookupDescription","LOG_MODULE_RESOLVER","LOG_RESOLVER","knownForType","moduleKeys","fullname","translateToContainerFullname","podSuffix","nonPodPrefix","MediaHelper","Evented","_matches","_mocked","_mockedBreakpoint","matchMedia","nullMatchMedia","cpName","_triggerMediaChanged","_triggerEvent","matcher","mql","esCompat","__esModule","IntlError","captureStackTrace","UNSUPPORTED_FORMATTER","INVALID_CONFIG","MISSING_DATA","FORMAT_ERROR","exports","Forwards","Backwards","CodecType","Mjpeg","Mpeg4","H264","H265","G711","G726","AAC","PCM_S16LE","OnvifMetadata","TrackletMetadata","BoundingBoxMetadata","StreamQuality","VideoFillMode","RenderState","MediaState","StreamError","PlaybackState","AudioRecordingState","AudioStreamingState","OscarEvents","PlaybackStateChange","PlaybackTimeChange","StateChange","StatChange","TransportStateChange","VideoPresenterTransformed","StreamTransportType","StreamTransportState","DEVICE_NOT_FOUND_ERROR_MESSAGES","MediaPermissionsErrorType","MicCheckMediaPermissionsErrorType","SystemPermissionDenied","UserPermissionDenied","CouldNotStartVideoSource","instanceNum","callOrDefault","NavigatorService","Logger","_deviceToString","getCapabilities","constraints","getConstraints","mediaStream","audioTracks","getMediaStreamChannelCount","channelCount","requestMediaPermissions","micCheckRequestMediaPermissions","finalError","TrackInfo","mediaType","codecType","clockRate","rtpClockRate","timeMapping","avgBitRate","profileLevel","setupBlocks","AudioInfo","rate","chan","bits","numChannels","bitsPerSample","fourcc","BoxWriter","isomBuffer","startPos","writeUint32","FullBoxWriter","flags","writeUint8","writeUint16","Osp","ControlMessageTag","SectionHeaderTag","SampleAckTag","NoopTag","TrackHeaderTag","VideoHeaderTag","AudioHeaderTag","MediaSampleTag","MetadataHeaderTag","IframesFlag","ReverseFlag","TranscodedFlag","CleanPointFlag","EndOfFrameFlag","CatchUpFlag","Cmd","StartStream","GetExportInfo","SwitchStream","Ping","StartBackchannel","Notify","LiveStatus","NoMoreData","KeepAlive","Timeout","Stop","UnknownError","UnknownCommand","NotFound","BadRequest","NotAuthorized","InvalidState","MaxStreams","MsgType","Response","Notification","OspHeaderSize","BaseSampleHeaderSize","MaxObjectSize","OspControlMessage","commandId","sequence","getStringArgument","defVal","getNumArgument","writeObjectHeader","writer","formatControlMessage","numArgs","stringVal","BinWriter","writeString","formatTrackHeader","trackHeader","trackId","trackInfo","writeUint64","absTime","rtpTime","writeZero","formatAudioHeader","audioHeader","audioInfo","formatSample","sample","littleEndian","isInt16","Int16Array","sampleHeaderSize","dataLength","byteLength","sampleInfo","isCleanPoint","isEndOfFrame","isCatchUp","rtpTimestamp","sourceTimestamp","formatSampleAck","sampleNum","parseControlMessage","readUint16","hasFailed","nameLength","readString","valueLength","parseSectionHeader","isIframes","isReverse","isTranscoded","nameLen","parseTrackHeader","readUint8","readUint32","Instant","readUint64","numSetupBlocks","readUint8Array","parseVideoInfoHeader","videoInfo","resWidth","resHeight","parseAudioInfoHeader","parseSampleHeader","sampleHeader","dataOffset","FisheyeProjection","FisheyeMountType","Ceiling","Wall","isSameCamera","camera1","camera2","cameraStr","BROWSER","detect","IS_SAFARI","MAX_BROWSER_RESOLUTION","DisplayPane","EventTarget","oscarFactory","multiplayer","_index","_oscarFactory","_multiPlayer","_camera","_showBoundingBoxes","_quality","_errorType","_changeInProgress","_streamController","_renderController","_metadataController","_videoElement","_eventOnly","_handleVideoElement","_updateState","_presenter","createVideoPresenter","_handleResolutionChange","_volume","_muted","_newState","newCamera","nvrInfo","currentCamera","newQuality","quality","currentQuality","fillMode","zoomState","objectFit","showBoundingBoxes","eventOnly","newEventOnly","beginChange","endChange","fisheyePanTilt","fisheyePanTiltSpeed","fisheyeFieldOfView","fisheyePanoParams","videoSize","videoWidth","videoHeight","errorType","renderTime","streamStats","streamController","transportState","transportType","transportInfo","onBoundingBox","boundingBox","dispatchEventAsync","DataEvent","onVideoPresenterTransform","videoPresenterTransform","onPlaybackChange","newPlaybackState","handlePlaybackChange","detach","_removeStreamController","onVideoElementChanged","commit","cameraChanged","videoStreamPropertiesChanged","_updatePresenter","_clearMetadata","_startPlayback","_setState","isChangeInProgress","endChangeWithState","streamState","_handleStreamStatChange","removeStreamController","onTransportStateChange","_handleTransportStateChange","renderController","videoElement","metadataController","displayPane","fisheye","fieldOfView","fisheyeGeometry","detachStreamState","handleResize","hasDebugBlob","getDebugBlob","_fisheyeSupported","fisheyeInfo","geometry","fisheyeMountType","fisheyeMountAngle","maxResolution","_calculateMaxResolution","createStreamController","_getStreamName","softMax","boundingBoxesSupported","createVideoRenderController","onHandleResolutionChange","attachRenderController","audioRenderController","createAudioRenderController","createMetadataController","attachMetadataController","addStreamController","videoStatus","streamError","_scaleVideoElement","BasicEvent","detachRenderController","detachMetadataController","DisplayManager","multiPlayer","_audioRecorder","createAudioRecorder","_panes","_masterPane","_previousPanes","_changeWithNewPaneCount","_handlePlaybackChange","reactor","audioRecorder","recordingState","paneCount","origCount","_getNewDisplayPane","getPane","setLive","isLive","startLive","setPlaybackState","setPlaybackStateAsync","_handleLiveToRecordedChange","playbackTime","paused","pane","masterPane","_handleMasterPaneChange","hasStreams","initialChange","indexStreamController","stopAudioRecording","suspend","resume","beginChangeWithNewPaneCount","newPaneCount","_commitChangePanes","panes","previousPanes","oldCameraMap","_makePaneKey","streamStates","oldPane","_commitChangeIndexController","_commitChangeRefreshPlaybackState","_requestedState","refreshPlaybackState","commitChange","cancelChange","requestAudioRecording","requestPermission","startAudioRecording","recordingTimesliceMillis","masterDisplayCamera","wontBeLiveAfterChange","wasLiveBeforeChange","wasRecording","StreamStats","_avgBitRate","_avgFrameRate","_bitCount","_clockRate","_frameCount","_prevTimestamp","_samplePeriod","_samplingStarted","setClockRate","UINT32_MAX","IsomBuffer","initialSize","_buffer","_endPos","_dataView","DataView","capacity","prepareWrite","setUint8","setUint16","setUint32","upper","lower","writeBytes","uint8Array","writeBuffer","getUint8Array","newSize","newBuf","removeEmulationBytes","ebsp","BinReader","zeroCount","canRead","getH265NaluType","headerByte0","DefaultDpiValue","writeUnityMatrix","getSdtpFlagValue","optBool","Isom","TfhdFlags","BaseDataOffsetPresent","SampleDescIndexPresent","DefaultSampleDurationPresent","DefaultSampleSizePresent","DefaultSampleFlagsPresent","DurationIsEmpty","DefaultBaseIsMoof","TrunFlags","DataOffsetPresent","FirstSampleFlagsPresent","SampleDurationPresent","SampleSizePresent","SampleFlagsPresent","SampleCompTimeOffsetPresent","FileType","majorBrand","minorVersion","compatibleBrands","MovieHeader","creationTime","modificationTime","timescale","nextTrackId","TrackHeader","inMovie","inPreview","MediaHeader","SampleDescription","FragmentSampleFlags","sampleDependsOn","sampleIsDependedOn","sampleHasRedundancy","samplePaddingValue","sampleIsNonSyncSample","sampleDegradationPriority","TrackExtendsData","defaultSampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","TrackRunSample","compTimeOffset","TrackRun","firstSampleFlags","samples","TrackFragmentHeader","baseDataOffset","sampleDescIndex","TrackFragmentDecodeTimeBox","baseMediaDecodeTime","writeFtyp","ftype","writeMvhd","mvhd","writeTkhd","tkhd","writeMdhd","mdhd","writeHdlr","hdlr","writeDinf","dinf","dref","writeVmhd","graphicsMode","red","green","blue","vmhd","writeSmhd","balance","smhd","writeStsd","descs","stsd","writeAvcSampleEntry","writeHevcSampleEntry","writeMp4aSampleEntry","writeStts","stts","writeStsc","stsc","writeStsz","stsz","writeStco","stco","writeSampleFlags","firstWord","writeMehd","mehd","writeTrex","trackExtends","trex","writeTfhd","tfhd","writeUint","writeTfdt","tfdt","writeTrun","trun","avc1","avcC","sps","pps","hvc1","hvcC","spsRbsp","mp4a","esds","esWriter","dcWriter","AudioStreamType","decSpecInfoBuffer","writeDescriptor","slConfigDescBuffer","remaining","Mp4TrackData","trunFlags","runs","timestamps","offsetPositions","firstSampleTime","partialSamples","Mp4Writer","speedScale","audioOnly","_dir","_speedScale","_audioOnly","_trackState","_nextTrackId","_mdatPos","_fragSequence","_currentRunTrack","_baseTimestamp","_mediaData","_outputQueue","_streamEnded","_metadataChanged","baseTimestamp","sampleTimeToMediaTime","_timeDiff","TimeDefs","TimeUnitsPerSecond","mediaTimeToSampleTime","mediaTime","scaledTime","plus","Duration","minus","addTrackInfo","_isSupportedMediaType","mp4trackId","trackData","addVideoInfo","addAudioInfo","addSample","trackState","_startNewFragment","_initTracks","_writeMoovBox","cleanPoint","headerSize","_removeAdtsHeader","_isPrimaryTrack","runSample","partialSample","headerBuf","hasOutput","getNextBuffer","_writeCurrentFragment","nextTimestamp","_calculateSampleDurations","_writeMoofBox","_resetTracks","endStream","tsIndex","baseTime","runIndex","sampleIndex","newTime","_toTimeScaleUnits","videoFourcc","_getVideoFourcc","moov","movieHeader","zero","_writeTrakBox","mvex","extendsData","trak","sampleDescs","sampleDescription","mdia","mediaHeader","_getHandlerType","_getHandlerName","minf","stbl","moofStart","moof","mfhd","traf","tfdtHeader","baseTimeOffset","baseTs","endPos","dur","time1","time2","HtmlElementFactory","_document","createVideoElement","defaultMuted","disableRemotePlayback","playsInline","createAudioElement","audioElement","createCanvas","Html5MediaSourceFactory","createMediaSource","ManagedMediaSource","MediaSource","isTimeAfter","dir","isTimeBefore","RETENTION_TIME","NORMAL_GAP_THRESHOLD","IFRAME_GAP_THRESHOLD","FRAME_GAP_MARGIN","SEEK_EVENT_TIMEOUT","VIDEO_ELEMENT_EVENTS","maxDebugBlobSize","Html5MediaState","elementFactory","mediaSourceFactory","objectUrlManager","iframes","elementTag","_reactor","_mediaType","_direction","_iframes","_mp4Writer","_objectUrlManager","_mediaElement","_mimeType","_mediaSource","_url","_sourceBuffer","_frameInfo","_streamEnd","_cleanupTime","_liveStartTime","_playPending","_pauseAfterPlay","_closeAfterPlay","_stalled","_seekPromiseSource","PromiseSource","_seekTimer","Timer","_appendFailed","onReady","onCanPlay","_onSourceOpened","_onUpdateEnd","_onError","_mediaElementListeners","_addAndStoreMediaElementEventListeners","_debugBuffers","_debugSize","mediaElement","_handleEvent","_removeAndClearMediaElementEventListeners","resumed","_finishSeek","_failSeek","cancelSeek","revokeObjectUrl","activeSourceBuffers","removeSourceBuffer","isIframeOnly","seekToTime","_onSeekEventTimeout","makePromise","CancellationError","complete","kill","fail","notice","scaledValue","spam","_chooseMimeType","createObjectUrl","clean","_processOutputBuffers","reportStreamEnd","findFrame","searchDir","ge","le","getEarlySampleCount","targetTime","getGapInfo","nextIndex","prevTime","nextVideoTime","nextTime","gapThreshold","sampleTime","isReadyToPlay","ranges","buffered","isPlayable","ended","isStalled","recover","removeOldMedia","logStats","_formatTimeRanges","seekable","timestampOffset","appendWindowStart","appendWindowEnd","addSourceBuffer","_cleanUpOldMedia","_getSeekableEnd","updating","appendBuffer","isOld","cleanTime","cleanIndex","retentionTime","cutoffTime","firstGop","normalSpeedScale","setDebugBlobSize","DEF_SYNC_INTERVAL","MIN_BUFFER_TIME","MAX_BUFFER_TIME","playerStartTimeout","PLAYBACK_TIME_TOLERANCE","MAX_CLOCK_PULLBACK","SEEK_OFFSET","CLEAN_INTERVAL","Html5RenderController","_elementFactory","_mediaSourceFactory","_latchedState","_live","_videoActive","_seekState","_seekSamplesAfter","_currentVideoState","_prevVideoState","_tracks","_playerStarted","_timeoutStartTime","_lastCleanTime","_renderClock","_timingReporter","_syncTimer","_syncInterval","_blockedSender","_suspended","_stalledCount","_currentResolution","_handledTrackInfo","_inGap","onRenderStateChanged","onUnblock","resetCallbacks","_prepareNewVideoState","makeNonLive","prepareSeek","_setRenderState","streamDir","strict","seekTime","samplesAfter","seekNow","seekFail","clearDisplay","renderClock","timingReporter","syncInterval","_onSourceReady","_onCanPlay","_handleSourceError","_switchToNewVideoState","handleTrackInfo","reportTrack","_getTrackMetadata","handleVideoInfo","handleAudioInfo","handleSample","_applyStoredTrackMetadata","_isSeekActive","_continueSeek","earlyCount","getRenderTime","timeProvider","maxEarly","reportSampleReceived","handleNoMoreData","_handleEndOfStream","onClockChanged","_syncVideo","seekableTime","reportSeekable","promiseState","_finalizeSeek","reportCanPlay","shouldLog","LogLevel","SPAM","_logVideoStats","expectedTime","wasInGap","actualTime","absSpeed","adjustedSpeed","_shouldAdjustSmoothly","playable","ratio","_reportGap","trackMeta","DEFAULT_MAX_PULLBACK","RENDER_DELAY_LATCH_TIME","LiveRenderTimingStrategy","_timeProvider","_initializedClock","maxPullback","minBufTime","_isAVMediaType","_getTrackInfo","avgIframeBufferTime","MovingAverageWithVariance","renderDelay","lastCanPlayTime","lastSampleTime","bufferTime","updateClock","removeStream","POSITIVE_INFINITY","maxBufTime","NEGATIVE_INFINITY","avgBufTime","started","lowerBufTime","standardDeviation","bufTime","newMin","adjust","MultiVideoPlayer","timingManager","_timingManager","_sharedRenderClock","sharedRenderClock","_streams","_resumeState","_unpauseAfterSeek","_indexController","_seekNum","onPlaybackStateChanged","_onControllerStateChanged","getNewStreamId","getRenderClock","syncId","getTimingReporter","_startSeekNewStream","_stopAll","_initTiming","streamInfo","_setLiveState","_updateRequestedState","haveSpeed","_start","_applyRequestedState","clockChanged","_getIndexStream","_skipGapIfNecessary","_notifyRenderClockChanged","_seekAllMarked","sourceController","stepping","_notifyStateChanged","seekState","actualSeekTime","bestTime","seekNum","firstStream","_seekFirst","_seekOthers","_seekStream","resultTime","skipTime","live","endLive","_removeAll","RenderClock","_refStreamTime","_refClockTime","_speed","_paused","_limit","calcCurrentTime","ignoreLimit","elapsed","_rebaseClock","offsetDuration","positiveInfinity","DEF_UPDATE_INTERVAL","removeTracks","tracks","RenderTimingManager","timingStrategyFactory","_timingStrategyFactory","_syncMap","_sharedTimingStrategy","_nextStreamId","_timerHandler","_updateTiming","updateInterval","_getSyncMapEntry","liveMode","timingStrategy","isStarted","isSet","LATE_FRAME_TOLERANCE","BUFFER_TIME","NonLiveRenderTimingStrategy","_streamInfo","receivedTime","pulledBack","_pullBackClock","_updateClockLimit","typeDesc","readyTime","RenderTimingStrategyFactory","StreamController","retriever","_retriever","_syncId","_renderControllers","_trackTypes","_mediaTypes","_masterController","_mediaState","_mediaError","_streamStats","_audioCodec","_videoCodec","_resolution","_currentDir","_iframeInterval","_newSection","_isTranscoded","_seekData","onTracklet","onNewSection","_handleNewSection","onTrackInfo","_handleTrackInfo","onVideoInfo","_handleVideoInfo","onAudioInfo","_handleAudioInfo","onHeadersDone","_handleHeadersDone","onSample","_handleSample","onNoMoreData","_handleNoMoreData","_handleError","_handleRetrieverStateChange","_applyToAudioController","_setMetadataControllerData","_handleAnalyticTracksLiveUpdate","_handleRenderStateChanged","_handleRenderUnblocked","onResolutionChanged","audioCodec","videoCodec","videoResolution","_setMediaState","analyticTracksLiveEnabled","_getAnalyticTracksEnabled","_shouldUseIframes","_startRetrieving","trackRecords","videoRecords","audioRecords","_calcIframeInterval","startIframes","_onSeekComplete","renderState","removeEventListeners","newDir","newIframeInterval","equals","trackType","_handleAnalyticsSample","_getControllerForTrack","isRendering","_handleSeekErrorBeforeRendererStarted","unblock","MediaSample","OspConnection","streamTransport","_streamTransport","_connectCallback","_initReadState","onControl","onSectionHeader","onTrackHeader","onVideoInfoHeader","onAudioInfoHeader","onDisconnect","onclose","onSocketClosed","wrapHandler","onSocketError","onmessage","onSocketMessage","onopen","onSocketOpen","_readState","_waitingSize","_tempStorage","_tempBuffer","_tempSize","_objectType","_objectSize","_curSample","_curSampleSize","sendControl","sendTrackHeader","sendAudioHeader","sendSample","sendSampleAck","_streamTransportLabel","messageLen","chunkSize","_handleOspChunk","_handleOspHeader","_handleObjectHeader","_handleObjectHeaderExtra","_handleSampleData","_handleObject","_handleSampleHeader","objectSize","parseFn","handleFn","remainingHeader","_disconnect","OspConnectClient","nvrManager","streamTransportFactory","urlPath","_nvrManager","_nvrInfo","_streamTransportFactory","_urlPath","_ospConnection","_transportType","_transportState","_promiseSource","_onConnectDone","connect","forcews","cancelConnect","getConnection","nvrConnection","allowWebRTC","connection","typeChanged","stateChanged","KeepAliveInterval","InitialReconnectDelay","MaxReconnectDelay","AnalyticTracksNone","OspStreamRetriever","connectClient","softMaxRes","analyticsSupported","_connectClient","_cameraId","_streamName","_maxResolution","_softMaxRes","_connectState","_connection","_requestCookie","_incomingCookie","_cmdSequence","_samplesHandled","_streamQueue","_tokenRequester","_authToken","_keepAliveTimer","_reconnectTimer","_reconnectInterval","_analyticTracksLiveEnabled","_analyticTracksSearchEnabled","onLiveStatus","tokenRequester","connReadyFn","_continueStartLive","_tryStartConnect","_tryStartGetToken","_continueStartSearch","iframeInterval","resetStreamState","_processStreamQueue","_handleConnectComplete","_handleControl","_handleSectionHeader","_handleTrackHeader","_handleVideoInfoHeader","_handleAudioInfoHeader","_handleDisconnect","_sendKeepAlive","requestStreamToken","_handleGetTokenDone","_handleGetTokenFailed","tokenInfo","_scheduleReconnect","analyticTracks","maxinflight","noSquashCatchup","_setMaxResolution","authToken","_handleStartStreamResponse","_handleLiveStatus","_enqueueCall","_receivingHeaders","_enqueueSample","liveTime","_attemptReconnect","_enqueue","sendAck","_processItem","maxWidth","AudioOspBackchannelConnector","connectState","streamStarted","_streamStarted","_samplesTransmitted","_samplesAcknowledged","_resetCallbacks","_continueStart","_resetStreamState","_handleStartBackchannelResponse","_handleTimeout","responses","rsp","httpStreamTokenCache","_tokens","_getKey","getToken","setToken","TokenExpiryTimeBuffer","GetAllTokenResolution","httpStreamTokenManager","tokenCache","_nvrs","SimpleReactor","_tokenCache","_createNvrState","promiseResolution","_getNvrState","nvrState","_clearNvrState","_tokenIsExpired","expirationTime","_getPromiseResolutionFromError","_cacheTokens","tokenEntries","expires","_onGetAll","promiseSource","_onGetAllFailed","prefetchTokens","apiGet","shouldAttemptGetAllTokens","HttpStreamTokenRequester","tokenManager","_tokenManager","_requestIndividualStreamToken","HttpBearerTokenRequester","requestToken","AudioRenderController","rendererFactory","_rendererFactory","_renderer","_renderState","_trackId","_audioSampleRate","_syncPlayback","_updateEnabledState","_unblockSender","_disable","supportsCodec","_shouldPlayAudio","syncPlayback","_enable","disable","AudioContextFactory","createAudioContext","AudioContext","AudioPlaybackProcessorWorkletFactory","createAudioWorkletUrl","createObjectURL","createAudioWorkletNode","audioContext","AudioWorkletNode","parameterData","PtzController","adcParams","_tokenInfo","_pendingCommands","_hostname","_config","auth","adcRelayToken","startConnect","_onConnected","_onConnectFailed","panTiltZoom","_doPtz","_updatePending","_doStop","autoFocus","allParams","setPreset","apiPost","gotoPreset","apiPut","deletePreset","apiDelete","gotoHome","showMenu","panTiltPosition","_onConnectionLost","cameraEntry","bearerToken","FisheyePtzController","_displayPane","_adjustZoom","CACHE_DURATION_LIMIT","CachingStreamRetriever","baseRetriever","_baseRetriever","_iframeCount","_replayIndex","_replayRestart","_primaryTrackId","_noMoreDataAfterCache","_streamError","_resetCache","cacheStartTime","cacheEndTime","_scheduleProcessCache","_processCache","DynamicStreamTransport","webSocketStreamTransportFactory","webRtcStreamTransportFactory","_nvrConnection","_nvrLabel","getHostname","_forcews","_webSocketStreamTransportFactory","_webRtcStreamTransportFactory","_webRtcStats","getWebRtcStats","newVal","_startNewStreamTransport","statsError","_handleStreamTransportStateChange","DynamicStreamTransportFactory","MediaStreamElementMetadata","MediaStreamElement","prevClean","AudioStreamer","connector","_connector","_streamingState","_metadataSent","_readyCallback","_errorCallback","_requestQueue","streamingState","readyCallback","errorCallback","_handleBackchannelReady","_handleStreamError","_changeStreamingState","_closeStream","streamAudio","pcm16","_createMediaSample","_createMediaStreamElement","_createMediaStreamElementMetadata","_formatMetadataLog","_enqueueMediaStreamElement","instant","mediaSample","_processRequestQueue","AudioResampler","convertToMonoAndResampleWithOmit","audioData","originalSampleRate","requestedSampleRate","monoAudioData","_convertMultiChannelToMono","_resampleOmit","multiChannelAudioData","monoLength","monoIndex","resampledRatio","resampledLength","resampledAudioData","resampledIndex","RECORDER_SAMPLE_RATE","AudioRecorder","audioResampler","navigatorService","mediaRecorderFactory","_audioResampler","_navigatorService","_mediaRecorderFactory","_recordingTimesliceMillis","_mediaStream","_mediaRecorder","_audioStreamer","_recordingState","_getUserMediaConstraints","_changeRecordingStateAndNotify","_getMediaStream","_getMediaRecorder","createAudioStreamer","_beginRecording","_onBackchannelError","_endRecording","createMediaRecorder","mimeType","arrayBuffer","deviceSampleRateBytes","deviceSampleRate","MILLIS_IN_ONE_SECOND","recorderSampleRateBytes","PORT_MAP","ONGOING_REQUESTS","createBroker","brokerImplementation","fullBrokerImplementation","port1","port2","MessageChannel","portId","disconnect","isSupported","sender","ongoingRequests","createOrGetOngoingRequests","isMessagePort","transferables","generateUniqueNumber","encoderIds","wrap","deregister","encoderId","timeslice","arrayBuffers","addUniqueNumber","mediaEncoderHost","worker","Worker","loadWorker","revokeObjectURL","createInvalidModificationError","DOMException","createNotSupportedError","observable","rethrow","emitNotSupportedError","wrapSubscribeFunction","createWrapSubscribeFunction","patch","toObserver","emptyFunction","innerSubscribe","isNextFunction","_observer$complete","_observer$error","_observer$next","createMutations","createMapSubscribableThing","createPrependSubscribableThing","createOn","addRecorderAudioWorkletModule","blobConstructor","urlConstructor","addAudioWorkletModule","createRecorderAudioWorkletNode","createRecorderAudioWorkletNodeFactory","createListener","createPostMessage","validateState","audioWorkletNodeConstructor","audioWorkletNode","channelCountMode","numberOfInputs","numberOfOutputs","ongoingRequest","defineProperties","encoderPort","expectedStates","expectedState","ACTIVE_AUDIO_NODE_STORE","AUDIO_NODE_CONNECTIONS_STORE","AUDIO_NODE_STORE","AUDIO_PARAM_CONNECTIONS_STORE","AUDIO_PARAM_STORE","CONTEXT_STORE","EVENT_LISTENERS","CYCLE_COUNTERS","NODE_NAME_TO_PROCESSOR_CONSTRUCTOR_MAPS","NODE_TO_PROCESSOR_MAPS","construct","IMPORT_STATEMENT_REGEX","splitImportStatements","importStatements","sourceWithoutImportStatements","unresolvedUrl","importStatementWithResolvedUrl","verifyParameterDescriptors","parameterDescriptors","verifyProcessorCtor","processorCtor","constructible","isConstructible","getValueForKey","pickElementFromSet","predicate","matchingElements","matchingElement","deletePassiveInputConnectionToAudioNode","passiveInputs","passiveInputConnections","matchingConnection","passiveInputConnection","getEventListenersOfAudioNode","audioNode","setInternalStateToActive","eventListener","isAudioWorkletNode","setInternalStateToPassive","setInternalStateToPassiveWhenNecessary","activeInputs","connections","DEFAULT_OPTIONS","channelInterpretation","fftSize","maxDecibels","minDecibels","smoothingTimeConstant","isOwnedByContext","nativeAudioNode","nativeContext","testAudioBufferCopyChannelMethodsOutOfBoundsSupport","nativeAudioBuffer","copyToChannel","createIndexSizeError","wrapAudioBufferGetChannelDataMethod","audioBuffer","getChannelData","numberOfChannels","MOST_NEGATIVE_SINGLE_FLOAT","MOST_POSITIVE_SINGLE_FLOAT","isActiveAudioNode","loop","loopEnd","loopStart","getAudioNodeConnections","getAudioParamConnections","audioParam","deactivateActiveAudioNodeInputConnections","audioParams","isAudioBufferSourceNode","isBiquadFilterNode","Q","detune","gain","isConstantSourceNode","isGainNode","isOscillatorNode","isStereoPannerNode","pan","audioParamConnections","isAudioNode","audioNodeOrAudioParam","isAudioNodeOutputConnection","outputConnection","insertElementInSet","ignoreDuplicates","lmnt","addActiveInputConnectionToAudioParam","activeInputConnection","addPassiveInputConnectionToAudioParam","isNativeAudioNodeFaker","nativeAudioNodeOrNativeAudioNodeFaker","connectNativeAudioNodeToNativeAudioNode","nativeSourceAudioNode","nativeDestinationAudioNode","fakeNativeDestinationAudioNode","inputs","deleteActiveInputConnection","activeInputConnections","deleteEventListenerOfAudioNode","deletePassiveInputConnectionToAudioParam","disconnectNativeAudioNodeFromNativeAudioNode","getNativeAudioNode","getNativeAudioParam","isPartOfACycle","isPassiveAudioNode","testAudioNodeDisconnectMethodSupport","nativeAudioContext","nativeAudioWorkletNodeConstructor","analyzer","createScriptProcessor","dummy","createGain","ones","createBuffer","channelData","createBufferSource","onaudioprocess","chnnlDt","inputBuffer","visitEachAudioNodeOnce","cycles","visitor","counts","cycle","isNativeAudioNode","nativeAudioNodeOrAudioParam","wrapAudioNodeDisconnectMethod","connectionsToDestination","destinationOrOutput","filteredConnections","deleteInputsOfAudioNode","isOffline","deleteInputConnectionOfAudioNode","deleteInputsOfAudioParam","deleteInputConnectionOfAudioParam","ReadOnlyMap","thisArg","processorOptions","copyFromChannel","channelNumber","bufferOffset","slicedInput","BYTES_PER_ELEMENT","createNestedArrays","arrays","processBuffer","renderedBuffer","nativeOfflineAudioContext","outputChannelCount","processorConstructor","exposeCurrentFrameAndCurrentTime","numberOfInputChannels","numberOfOutputChannels","processedBuffer","audioNodeConnections","audioWorkletProcessor","getAudioWorkletProcessor","nodeToProcessorMap","nativeAudioWorkletNode","outputs","prmtrs","potentiallyEmptyInputs","activeSourceFlag","outputChannelSplitterNodeOutput","ErrorEvent","disableNormalization","detachArrayBuffer","closeAndResolve","maxDelayTime","getOutputAudioNodeAtIndex","outputAudioNodes","outputAudioNode","attack","knee","threshold","createInvalidStateError","createInvalidAccessError","filterBuffer","feedbackLength","feedforward","feedforwardLength","minLength","xBuffer","yBuffer","bufferIndex","bufferLength","inputLength","testPromiseSupport","uint32Array","Uint32Array","decodeAudioData","assignNativeAudioNodeOption","assignNativeAudioNodeOptions","testAnalyserNodeGetFloatTimeDomainDataMethodSupport","nativeAnalyserNode","getFloatTimeDomainData","assignNativeAudioNodeAudioParamValue","wrapAudioScheduledSourceNodeStartMethodNegativeParameters","nativeAudioScheduledSourceNode","when","wrapAudioScheduledSourceNodeStopMethodNegativeParameters","computeBufferSize","baseLatency","log2","createNativeBiquadFilterNode","nativeBiquadFilterNode","createBiquadFilter","createNativeChannelSplitterNode","nativeChannelSplitterNode","createChannelSplitter","channelSplitterNode","wrapChannelSplitterNode","interceptConnections","interceptor","createNativeDelayNode","nativeDelayNode","createDelay","createNativeGainNode","nativeGainNode","divide","evaluatePolynomial","coefficient","createNativeScriptProcessorNode","periodicWave","coneInnerAngle","coneOuterAngle","coneOuterGain","distanceModel","maxDistance","orientationX","orientationY","orientationZ","panningModel","positionX","positionY","positionZ","refDistance","rolloffFactor","createUnknownError","curve","oversample","getFirstSample","isDCCurve","overwriteAccessors","createGetter","createSetter","getPrototypeOf","setValueAtTimeUntilPossible","setValueAtTime","testAudioScheduledSourceNodeStartMethodNegativeParametersSupport","nativeAudioBufferSourceNode","createOscillator","testAudioScheduledSourceNodeStopMethodConsecutiveCallsSupport","testAudioScheduledSourceNodeStopMethodNegativeParametersSupport","wrapAudioScheduledSourceNodeStopMethodConsecutiveCalls","disconnectGainNode","isStopped","wrapEventListener","currentTarget","handleEvent","addActiveInputConnectionToAudioNode","createAddActiveInputConnectionToAudioNode","addPassiveInputConnectionToAudioNode","createAddPassiveInputConnectionToAudioNode","deleteActiveInputConnectionToAudioNode","createDeleteActiveInputConnectionToAudioNode","audioNodeTailTimeStore","getAudioNodeTailTime","createGetAudioNodeTailTime","cacheTestResult","ongoingTests","testResults","tester","cachedTestResult","ongoingTest","synchronousTestResult","finalTestResult","createCacheTestResult","createNativeAnalyserNode","createNativeAnalyserNodeFactory","createAnalyser","byteTimeDomainData","getByteTimeDomainData","wrapAnalyserNodeGetFloatTimeDomainDataMethod","getAudioNodeRenderer","createGetAudioNodeRenderer","renderInputsOfAudioNode","createRenderInputsOfAudioNode","audioNodeRenderer","renderedNativeAudioNode","allRenderingPromises","renderingPromises","createAnalyserNodeRenderer","createAnalyserNodeRendererFactory","renderedNativeAnalyserNodes","renderedNativeAnalyserNode","createAnalyserNode","getNativeContext","contextStore","nativeOfflineAudioContextConstructor","OfflineAudioContext","webkitOfflineAudioContext","createNativeOfflineAudioContextConstructor","isNativeOfflineAudioContext","anything","createIsNativeOfflineAudioContext","audioParamAudioNodeStore","eventTargetConstructor","_nativeEventTarget","_listeners","wrappedEventListener","createEventTargetConstructor","nativeAudioContextConstructor","webkitAudioContext","createNativeAudioContextConstructor","isNativeAudioContext","createIsNativeAudioContext","AudioNode","createIsNativeAudioNode","isNativeAudioParam","AudioParam","createIsNativeAudioParam","createNativeAudioWorkletNodeConstructor","audioNodeConstructor","createAudioNodeConstructor","addAudioNodeConnections","addConnectionToAudioNode","createIncrementCycleCounter","decrementCycleCounter","detectCycles","_context","_nativeAudioNode","isPassive","nativeAudioParam","addConnectionToAudioParamOfAudioContext","eventListeners","partialConnection","deleteActiveInputConnectionToAudioParam","destinations","deleteAnyConnection","audioNodeConnectionsOfSource","deleteConnectionAtOutput","deleteConnectionToDestination","audioNodeConnectionsStore","createAddConnectionToAudioNode","tailTimeTimeoutIds","tailTime","tailTimeTimeoutId","createIncrementCycleCounterFactory","cycleCounters","cycleCounter","nativeDestinationAudioParam","createDecrementCycleCounter","createDetectCycles","chain","nextLink","isDelayNode","mergedCycles","nestedCycles","analyserNodeConstructor","createAnalyserNodeConstructor","audionNodeConstructor","_nativeAnalyserNode","frequencyBinCount","getByteFrequencyData","getFloatFrequencyData","audioBufferStore","nativeAudioBufferConstructor","AudioBuffer","createNativeAudioBufferConstructor","convertNumberToUnsignedLong","unit32Array","wrapAudioBufferCopyChannelMethods","createWrapAudioBufferCopyChannelMethods","channelNumberAsNumber","audioBufferLength","destinationLength","sourceLength","wrapAudioBufferCopyChannelMethodsOutOfBounds","createWrapAudioBufferCopyChannelMethodsOutOfBounds","audioBufferConstructor","createAudioBufferConstructor","testNativeAudioBufferConstructorSupport","hasInstance","createTestAudioBufferConstructorSupport","addSilentConnection","createAddSilentConnection","renderInputsOfAudioParam","createRenderInputsOfAudioParam","connectAudioParam","createConnectAudioParam","createNativeAudioBufferSourceNode","createNativeAudioBufferSourceNodeFactory","testAudioBufferSourceNodeStartMethodConsecutiveCallsSupport","testAudioBufferSourceNodeStartMethodOffsetClampingSupport","testAudioBufferSourceNodeStopMethodNullifiedBufferSupport","wrapAudioBufferSourceNodeStartMethodOffsetClampling","wrapAudioBufferSourceNodeStopMethodNullifiedBuffer","isScheduled","wrapAudioBufferSourceNodeStartMethodConsecutiveCalls","clampedOffset","nullifiedBuffer","createWrapAudioBufferSourceNodeStopMethodNullifiedBuffer","renderAutomation","createRenderAutomation","getAudioParamRenderer","replay","createGetAudioParamRenderer","createAudioBufferSourceNodeRenderer","createAudioBufferSourceNodeRendererFactory","renderedNativeAudioBufferSourceNodes","renderedNativeAudioBufferSourceNode","nativeAudioBufferSourceNodeIsOwnedByContext","createAudioBufferSourceNode","createAudioParam","createAudioParamFactory","addAudioParamConnections","audioParamStore","createAudioParamRenderer","createCancelAndHoldAutomationEvent","createCancelScheduledValuesAutomationEvent","createExponentialRampToValueAutomationEvent","createLinearRampToValueAutomationEvent","createSetTargetAutomationEvent","createSetValueAutomationEvent","createSetValueCurveAutomationEvent","isAudioParamOfOfflineAudioContext","minValue","automationEventList","AutomationEventList","audioParamRenderer","automationEvent","exponentialRampToValueAtTime","linearRampToValueAtTime","timeConstant","setTargetAtTime","setValueCurveAtTime","cancelAndHoldAtTime","cancelTime","previousLastEvent","currentLastEvent","cancelScheduledValues","convertedValues","firstSample","lastSample","numberOfInterpolatedValues","interpolatedValues","theoreticIndex","lowerIndex","upperIndex","timeOfLastSample","audioParamConnectionsStore","audioBufferSourceNodeConstructor","createAudioBufferSourceNodeConstructor","audioBufferSourceNodeRenderer","_audioBufferSourceNodeRenderer","_isBufferNullified","_isBufferSet","_nativeAudioBufferSourceNode","_onended","_playbackRate","onended","wrappedListener","nativeOnEnded","resetInternalStateToPassive","audioDestinationNodeConstructor","createAudioDestinationNodeConstructor","createAudioDestinationNodeRenderer","createNativeAudioDestinationNode","nativeAudioDestinationNode","renderedNativeAudioDestinationNodes","renderedNativeAudioDestinationNode","createAudioDestinationNode","_isNodeOfNativeOfflineAudioContext","_nativeAudioDestinationNode","maxChannelCount","createNativeAudioDestinationNodeFactory","isNodeOfNativeOfflineAudioContext","gainNode","createBiquadFilterNodeRenderer","createBiquadFilterNodeRendererFactory","renderedNativeBiquadFilterNodes","renderedNativeBiquadFilterNode","nativeBiquadFilterNodeIsOwnedByContext","createBiquadFilterNode","setAudioNodeTailTime","createSetAudioNodeTailTime","biquadFilterNodeConstructor","createBiquadFilterNodeConstructor","_Q","_detune","_frequency","_gain","log10","_nativeBiquadFilterNode","getFrequencyResponse","frequencyHz","magResponse","phaseResponse","monitorConnections","createMonitorConnections","whenConnected","whenDisconnected","wasDisconnected","wasConnected","wrapChannelMergerNode","createWrapChannelMergerNode","channelMergerNode","audioBufferSourceNode","createNativeChannelMergerNode","createNativeChannelMergerNodeFactory","nativeChannelMergerNode","createChannelMerger","createChannelMergerNodeRenderer","createChannelMergerNodeRendererFactory","renderedNativeAudioNodes","createAudioNode","channelMergerNodeConstructor","createChannelMergerNodeConstructor","createChannelSplitterNodeRenderer","createChannelSplitterNodeRendererFactory","channelSplitterNodeConstructor","createChannelSplitterNodeConstructor","sanitizeChannelSplitterOptions","createNativeConstantSourceNodeFaker","createNativeConstantSourceNodeFakerFactory","audioNodeOptions","nativeConstantSourceNodeFaker","createNativeConstantSourceNode","createNativeConstantSourceNodeFactory","createConstantSource","nativeConstantSourceNode","createConstantSourceNodeRenderer","createConstantSourceNodeRendererFactory","renderedNativeConstantSourceNodes","renderedNativeConstantSourceNode","nativeConstantSourceNodeIsOwnedByContext","createConstantSourceNode","constantSourceNodeConstructor","createConstantSourceNodeConstructor","constantSourceNodeRenderer","_constantSourceNodeRenderer","_nativeConstantSourceNode","_offset","createNativeConvolverNode","createNativeConvolverNodeFactory","nativeConvolverNode","createConvolver","createConvolverNodeRenderer","createConvolverNodeRendererFactory","renderedNativeConvolverNodes","renderedNativeConvolverNode","createConvolverNode","convolverNodeConstructor","createConvolverNodeConstructor","_nativeConvolverNode","createDelayNodeRenderer","createDelayNodeRendererFactory","renderedNativeDelayNodes","renderedNativeDelayNode","nativeDelayNodeIsOwnedByContext","createDelayNode","delayNodeConstructor","createDelayNodeConstructor","_delayTime","createNativeDynamicsCompressorNode","nativeDynamicsCompressorNode","createDynamicsCompressor","createNativeDynamicsCompressorNodeFactory","createDynamicsCompressorNodeRenderer","createDynamicsCompressorNodeRendererFactory","renderedNativeDynamicsCompressorNodes","renderedNativeDynamicsCompressorNode","nativeDynamicsCompressorNodeIsOwnedByContext","createDynamicsCompressorNode","dynamicsCompressorNodeConstructor","createDynamicsCompressorNodeConstructor","_attack","_knee","_nativeDynamicsCompressorNode","_ratio","_release","_threshold","previousChannelCount","reduction","createGainNodeRenderer","createGainNodeRendererFactory","renderedNativeGainNodes","renderedNativeGainNode","nativeGainNodeIsOwnedByContext","createGainNode","gainNodeConstructor","createGainNodeConstructor","createNativeIIRFilterNodeFaker","createNativeIIRFilterNodeFakerFactory","convertedFeedback","Float64Array","convertedFeedforward","scriptProcessorNode","bufferIndexes","xBuffers","yBuffers","outputBuffer","nyquist","omega","renderNativeOfflineAudioContext","createRenderNativeOfflineAudioContext","testOfflineAudioContextCurrentTimeSupport","isOfflineAudioContextCurrentTimeSupported","oncomplete","startRendering","createTestOfflineAudioContextCurrentTimeSupport","createIIRFilterNodeRenderer","createIIRFilterNodeRendererFactory","filteredBufferPromise","nativeIIRFilterNode","nativeIIRFilterNodeIsOwnedByContext","createIIRFilter","partialOfflineAudioContext","filterFullBuffer","filteredBuffer","createNativeIIRFilterNode","createNativeIIRFilterNodeFactory","iIRFilterNodeConstructor","createIIRFilterNodeConstructor","wrapIIRFilterNodeGetFrequencyResponseMethod","_nativeIIRFilterNode","createAudioListener","createAudioListenerFactory","nativeListener","forwardX","forwardY","forwardZ","upX","upY","upZ","createFakeAudioParams","isScriptProcessorNodeCreated","lastOrientation","lastPosition","createScriptProcessorNode","setOrientation","positon","setPosition","createSetOrientation","createSetPosition","createFakeAudioParam","initialValue","constantSourceNode","unrenderedAudioWorkletNodeStore","minimalBaseAudioContextConstructor","createMinimalBaseAudioContextConstructor","_nativeContext","_destination","_listener","_onstatechange","onstatechange","nativeOnStateChange","createNativeOscillatorNode","createNativeOscillatorNodeFactory","nativeOscillatorNode","setPeriodicWave","createOscillatorNodeRenderer","createOscillatorNodeRendererFactory","renderedNativeOscillatorNodes","renderedNativeOscillatorNode","nativeOscillatorNodeIsOwnedByContext","createOscillatorNode","oscillatorNodeConstructor","createOscillatorNodeConstructor","oscillatorNodeRenderer","_nativeOscillatorNode","_oscillatorNodeRenderer","createConnectedNativeAudioBufferSourceNode","createConnectedNativeAudioBufferSourceNodeFactory","createNativeWaveShaperNodeFaker","createNativeWaveShaperNodeFakerFactory","negativeWaveShaperNode","createWaveShaper","positiveWaveShaperNode","inputGainNode","invertGainNode","outputGainNode","revertGainNode","disconnectNativeAudioBufferSourceNode","unmodifiedCurve","nativeWaveShaperNodeFaker","curveLength","negativeCurve","positiveCurve","centerIndex","createNativeWaveShaperNode","createNativeWaveShaperNodeFactory","nativeWaveShaperNode","automationRate","createNativePannerNodeFaker","createNativePannerNodeFakerFactory","pannerNode","createPanner","SINGLE_CHANNEL_OPTIONS","orientationXGainNode","orientationYGainNode","orientationZGainNode","positionXGainNode","positionYGainNode","positionZGainNode","waveShaperNode","nativePannerNodeFaker","createNativePannerNode","nativePannerNode","createNativePannerNodeFactory","createPannerNodeRenderer","createPannerNodeRendererFactory","renderedBufferPromise","renderedNativeGainNodeOrNativePannerNode","commonAudioNodeOptions","commonNativePannerNodeOptions","nativePannerNodeIsOwnedByContext","nativeConstantSourceNodes","channelDatas","gateGainNode","partialPannerNode","pannerNodeConstructor","createPannerNodeConstructor","_nativePannerNode","_orientationX","_orientationY","_orientationZ","_positionX","_positionY","_positionZ","createNativePeriodicWave","imag","real","convertedImag","convertedReal","nativePeriodicWave","createPeriodicWave","createNativePeriodicWaveFactory","periodicWaveConstructor","createPeriodicWaveConstructor","periodicWaveStore","PeriodicWave","sanitizePeriodicWaveOptions","nativeStereoPannerNodeFakerFactory","createNativeStereoPannerNodeFakerFactory","CURVE_SIZE","DC_CURVE","HALF_PI","SINGLE_CHANNEL_WAVE_SHAPER_OPTIONS","buildInternalGraph","panGainNode","buildInternalGraphForMono","leftWaveShaperCurve","rightWaveShaperCurve","leftGainNode","leftWaveShaperNode","panWaveShaperNode","rightGainNode","rightWaveShaperNode","connectGraph","disconnectGraph","buildInternalGraphForStereo","leftInputForLeftOutputWaveShaperCurve","leftInputForRightOutputWaveShaperCurve","rightInputForLeftOutputWaveShaperCurve","rightInputForRightOutputWaveShaperCurve","leftInputForLeftOutputGainNode","leftInputForLeftOutputWaveShaperNode","leftInputForRightOutputGainNode","leftInputForRightOutputWaveShaperNode","rightInputForLeftOutputGainNode","rightInputForLeftOutputWaveShaperNode","rightInputForRightOutputGainNode","rightInputForRightOutputWaveShaperNode","createNativeStereoPannerNode","createNativeStereoPannerNodeFactory","createNativeStereoPannerNodeFaker","createStereoPanner","nativeStereoPannerNode","createStereoPannerNodeRenderer","createStereoPannerNodeRendererFactory","renderedNativeStereoPannerNodes","renderedNativeStereoPannerNode","nativeStereoPannerNodeIsOwnedByContext","createStereoPannerNode","stereoPannerNodeConstructor","createStereoPannerNodeConstructor","_pan","createWaveShaperNodeRenderer","createWaveShaperNodeRendererFactory","renderedNativeWaveShaperNodes","renderedNativeWaveShaperNode","createWaveShaperNode","waveShaperNodeConstructor","createWaveShaperNodeConstructor","_isCurveNullified","_nativeWaveShaperNode","isSecureContext","createIsSecureContext","currentFrame","createExposeCurrentFrameAndCurrentTime","backupOfflineAudioContextStore","getOrCreateBackupOfflineAudioContext","createGetOrCreateBackupOfflineAudioContext","backupOfflineAudioContext","createAddAudioWorkletModule","evaluateSource","fetchSource","resolvedRequests","testAudioWorkletProcessorPostMessageSupport","moduleURL","resolvedRequestsOfContext","ongoingRequestsOfContext","promiseOfOngoingRequest","audioWorklet","absoluteUrl","wrappedSource","evaluateAudioWorkletGlobalScope","_AWGS","nodeNameToProcessorConstructorMap","isSupportingPostMessage","patchedAudioWorkletProcessor","memberDefinition","bufferRegistration","addModule","nativeContextOrBackupOfflineAudioContext","updatedResolvedRequestsOfContext","updatedOngoingRequestsOfContext","originalOnErrorHandler","removeErrorEventListenerAndRevokeUrl","createEvaluateSource","createTestAudioWorkletProcessorPostMessageSupport","offlineAudioContext","isEmittingMessageEvents","isEmittingProcessorErrorEvents","oscillator","onprocessorerror","isNativeContext","createIsNativeContext","createDecodeAudioData","createDataCloneError","createEncodingError","detachedArrayBuffers","anyContext","mediaStreamAudioSourceNodeConstructor","createBaseAudioContextConstructor","createMediaElementAudioSourceNodeConstructor","createNativeMediaElementAudioSourceNode","createMediaStreamAudioDestinationNodeConstructor","createNativeMediaStreamAudioDestinationNode","createMediaStreamAudioSourceNodeConstructor","createNativeMediaStreamAudioSourceNode","nativeMediaStreamAudioSourceNode","audioStreamTracks","filteredAudioStreamTracks","createMediaStreamSource","MediaStream","_nativeMediaStreamAudioSourceNode","createNativeMediaStreamTrackAudioSourceNode","createNativeMediaStreamTrackAudioSourceNodeFactory","mediaStreamTrack","createMediaStreamTrackSource","getUnrenderedAudioWorkletNodes","createMediaStreamTrackAudioSourceNodeConstructor","unrenderedAudioWorkletNodes","createGetUnrenderedAudioWorkletNodes","addUnrenderedAudioWorkletNode","createAddUnrenderedAudioWorkletNode","connectMultipleOutputs","createConnectMultipleOutputs","deleteUnrenderedAudioWorkletNode","createDeleteUnrenderedAudioWorkletNode","disconnectMultipleOutputs","createDisconnectMultipleOutputs","activeAudioWorkletNodeInputsStore","getActiveAudioWorkletNodeInputs","createGetActiveAudioWorkletNodeInputs","createNativeAudioWorkletNodeFaker","createNativeAudioWorkletNodeFakerFactory","numberOfParameters","messageChannel","gainNodes","inputChannelSplitterNodes","constantSourceNodes","inputChannelMergerNode","outputChannelSplitterNode","outputChannelMergerNodes","parameterMap","nativeAudioWorkletNodeFaker","patchedEventListeners","unpatchedEventListener","patchedEventListener","audioWorkletProcessorPromise","createAudioWorkletProcessor","audioWorkletNodeOptions","clonedAudioWorkletNodeOptions","onmessageerror","cloneAudioWorkletNodeOptions","createAudioWorkletProcessorPromise","dWrkltPrcssr","disconnectOutputsGraph","outputChannelMergerNode","activeInputIndexes","disconnectFakeGraph","connectFakeGraph","createNativeAudioWorkletNode","createNativeAudioWorkletNodeFactory","testClonabilityOfAudioWorkletNodeOptions","createAudioWorkletNodeRenderer","createAudioWorkletNodeRendererFactory","processedBufferPromise","renderedNativeAudioWorkletNodeOrGainNode","nativeOutputNodes","nativeAudioWorkletNodeIsOwnedByContext","renderBuffer","nm","getBackupOfflineAudioContext","createGetBackupOfflineAudioContext","setActiveAudioWorkletNodeInputs","createSetActiveAudioWorkletNodeInputs","createAudioWorkletNodeConstructor","sanitizeAudioWorkletNodeOptions","testAudioWorkletNodeOptionsClonability","_nativeAudioWorkletNode","_onprocessorerror","_parameters","nativeOnProcessorError","minimalAudioContextConstructor","createMinimalAudioContextConstructor","latencyHint","isValidLatencyHint","_baseLatency","_nativeAudioContext","_nativeGainNode","revokeState","resolvePromise","ERROR_MESSAGE","createCreateNativeOfflineAudioContext","createStartRendering","readVariableSizeIntegerLength","dataView","byte","getUint8","encoderRegexes","createBlobEvent","nativeBlobEventConstructor","BlobEvent","createNativeBlobEventConstructor","blobEventInit","createWebAudioMediaRecorder","createWebAudioMediaRecorderFactory","eventTarget","MinimalAudioContext","bufferedArrayBuffers","promisedAudioWorkletModule","abortRecording","intervalId","promisedAudioNodesAndEncoderId","promisedPartialRecording","isAudioContextRunning","dispatchDataAvailableEvent","requestNextPartialRecording","mediaStreamAudioSourceNode","recorderAudioWorkletNode","AudioBufferSourceNode","MediaStreamAudioSourceNode","createPromisedAudioNodesEncoderIdAndPort","ConstantSourceNode","currentTracks","readVariableSizeInteger","firstDataByteOffset","createReadVariableSizeInteger","readElementContent","lengthAndValue","numberOfSamples","elementOffset","getFloat32","createReadElementContent","readElementType","createReadElementType","decodeWebMChunk","createDecodeWebMChunk","elementType","contents","currentElementType","lengthAndType","contentAndLength","createWebmPcmMediaRecorder","createWebmPcmMediaRecorderFactory","nativeMediaRecorderConstructor","nativeMediaRecorder","isRecording","pendingInvocations","promisedDataViewElementTypeEncoderIdAndPort","currentDataView","MultiBufferDataView","byteOffset","remainingDataView","createEventTarget","createEventTargetFactory","createNativeMediaRecorderConstructor","createNativeMediaRecorder","createNativeMediaRecorderFactory","mediaRecorderOptions","bufferedBlobs","dataAvailableListeners","errorListeners","stopListeners","wasActive","dataAvailableListener","errorListener","stopListener","mediaRecorderConstructor","createMediaRecorderConstructor","isTypeSupported","internalMediaRecorder","_internalMediaRecorder","_ondataavailable","_onerror","_onpause","_onresume","_onstart","_onstop","boundListener","onpause","onresume","onstart","nativeEventTarget","characterize","recordingId","typedArrays","extendableMediaRecorderWavEncoder","rgstr","MediaRecorderFactory","RemoteHttpStreamTokenRequester","_host","_auth","_adcRelayToken","axios","Queue","_head","_tail","_size","dequeue","AnalyticsData","BBOX_MS_TRESHOLD","QUEUE_PROCESS_FREQUENCY","MOCK_BBOXES","STALE_TRACKLET_THRESHOLD_DURATION","MetadataController","_tracklets","_recentBoundingBoxes","_playbackTime","negativeInfinity","_textDecoder","_handleQueueTimer","tracklets","shouldResume","pausedChanged","speedDirectionChanged","playbackTimeChanged","_createEvent","_processQueue","dataString","analyticsData","_handleTracklet","_handleBoundingBox","tracklet","lastUsed","_onTimer","_getDirectedTimeDifference","playingBackwards","_evaluateEvent","halfThreshold","dividedBy","negate","_pruneTracklets","_isPlayingBackwards","evaluation","toDelete","radiusFromPhi","phi","focalLength","projection","invPhi","tan","EPSILON","ARRAY_TYPE","glMatrix","fromValues","transformMat4","hypot","fromRotation","rad","axis","ortho","near","far","lr","bt","nf","NUM_SLICES","TWO_PI","EYEPOINT","vec3","degToRad","FisheyePtzRenderer","gl","shaderInfo","_gl","_shaderInfo","_positionBuffer","_indexBuffer","_textureCoordBuffer","_panTilt","_fovY","_refSize","_center","_focalLength","_projection","_mountType","_mountAngle","_paramsChanged","_projectionTransform","_viewTransform","_upVector","_initMeshBuffers","mountType","setGeometry","center","lookAt","tilt","viewTheta","viewPhi","cosZ","mountRadians","panRadians","tiltRadians","mountRotation","mat4","panTiltRotation","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","b00","b01","b02","b10","b11","b12","b20","b21","b22","eye","z0","z1","z2","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","_initProjectionTransform","panoParams","_updateMountSettings","mountAngle","resetPanTilt","mountAngleRads","texture","_mapTexture","clearColor","clearDepth","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","vertexPosition","FLOAT","enableVertexAttribArray","textureCoord","ELEMENT_ARRAY_BUFFER","useProgram","program","uniformMatrix4fv","uniforms","projectionMatrix","viewMatrix","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","uniform1i","uSampler","NUM_STACKS","drawElements","TRIANGLE_STRIP","UNSIGNED_SHORT","TRIANGLE_FAN","cleanUp","deleteBuffer","fovRadians","fovy","aspect","positions","vertex","mesh","vertices","bufferData","STATIC_DRAW","Uint16Array","indices","textureCoords","rX","rY","theta","numSlices","numStacks","sinPhi","cosPhi","sinTheta","cosTheta","outerVertexNum","innerVertexNum","buildMesh","RADIANS_PER_PANEL","NO_ROTATION","quat","FisheyePanoramaRenderer","_split","_zoom","_startAngle","_angularHeight","_radiansFromTop","_needRebuildMesh","_needCalcProjection","_panelRows","_panelCols","_angularWidth","startAngle","angularWidth","topMargin","bottomMargin","_fillMode","isSplit","_buildMesh","_calcProjection","row","naturalWidth","naturalHeight","xProduct","yProduct","zoomMatrix","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","ox","oy","oz","out0","out1","out2","out4","out5","out6","out8","out9","out10","a30","a31","a32","a33","b0","b1","b2","b3","_buildMeshWallMount","_buildMeshSplitCeilingMount","_buildMeshCeilingMount","panelCols","panelRows","col","baseVertexNum","rowsPerHalf","colsTotal","texRow","texCol","alphaTop","alpha","cosAlpha","sinAlpha","beta","hx","hy","hz","xyMag","loadShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","DEFAULT_ZOOM","DEFAULT_TRANSFORM","elementId","VideoPresenter","_canvasIndex","_parentElement","_currentChild","_canvas","_glContext","_texture","_transform","_objectFit","_fisheyeParams","_panTiltSpeed","_panTiltBase","_lastRenderTime","_lastPanTiltTime","_render","_fillSupported","_updateElements","actualValue","geometryEquals","_disableWebglTransform","_enableWebglTransform","_updateMovingPanTilt","transformStyles","viewport","texImage2D","RGBA","UNSIGNED_BYTE","newParent","childElement","newPanTilt","_initWebgl","_initRenderer","deleteProgram","deleteTexture","createTexture","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","vertexShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","shaderProgram","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getAttribLocation","getUniformLocation","getProgramInfoLog","initFisheyeShaderProgram","SYNC_ADJUST_THRESHOLD","Html5AudioRenderer","_readyToPlay","_haveSample","_playing","_trackInfo","_audioInfo","_playTimer","_maybeInitialize","_maybePlay","idealTime","_setCurrentTime","_initialize","MAX_QUEUE_DURATION","RENDER_TIME_MAX_DELTA","PROCESS_INTERVAL","WebAudioRenderer","audioContextFactory","audioWorkletFactory","_audioContextFactory","_audioWorkletFactory","_sampleRate","_initializing","_resetting","_audioContext","_gainNode","_workletNode","_renderQueue","_sampleCount","_lastSampleValue","_processTimer","_updateAudioState","_trimQueue","_resetAudioContext","estimatedContextTime","fillTime","latency","_targetLatency","nextRenderTime","sampleRenderTime","paddingFramesToQueue","_durationToSampleCount","_scheduleBytes","framesToSkip","newTimestamp","trimCount","trimThreshold","_initAudioContext","_setVolumeOnGainNode","AudioRendererFactory","WebSocketStreamTransport","_impl","_onopen","_onclose","_onmessage","createWebSocket","binaryType","_handleOpen","_handleClose","_handleMessage","WebSocketStreamTransportFactory","WebRtcConnection","webRtcStreamDataChannelIdQueue","adcStunServer","_webRtcStreamDataChannelIdQueue","_rtcPeerConnection","_localDescPromiseSource","_iceCandidatesGatheredPromiseSource","_adcStunServer","rtcPeerConnection","rtcPeerConnectionState","connectionState","_candidates","_createRtcPeerConnection","_firstChannel","createDataChannel","createOffer","offer","sdp","setLocalDescription","_onLocalDescDone","_onLocalCandidateReady","_onRemoteCandidateReady","connectionPromise","_raceAgainstTimeout","dcId","getNextId","negotiated","origClose","returnClosedId","rtcConfiguration","_getRtcConfiguration","RTCPeerConnection","onicecandidate","_handleIceCandidate","onconnectionstatechange","_handleConnectionStateChange","oniceconnectionstatechange","_handleIceConnectionStateChange","getWebRTCConfiguration","urls","_createConnectionTimeoutPromise","WEBRTC_CONNECTION_TIMEOUT","totalMilliseconds","_logRtcPeerConnection","_onIceCandidatesGathered","candidate","legacyCandidateGatheringCompleteFlag","receivedStunCandidate","_logRtcPeerConnectionStats","candidateDescs","sdpMid","sessionType","sessionDesc","pendingLocalDescription","candidates","remoteDescription","RTCSessionDescription","setRemoteDescription","addIceCandidate","RTCIceCandidate","DEBUG","getStats","_writeConnectionStatsLog","iceConnectionState","iceGatheringState","signalingState","sctp","sctpState","statsArray","candidatePairs","candidatePair","localCandidateId","remoteCandidateId","localCandidate","remoteCandidate","nominated","candidateType","networkType","WebRtcConnectionManager","_connectionMap","supported","disconnectWebRtcConnection","_onDisconnect","getWebRtcConnection","_createWebRtcConnection","webRtcStreamTransportIdQueueId","WebRtcStreamTransportIdQueue","maxStreamCount","_maxStreamCount","_queue","_activeIds","nextId","tryReturnClosedId","sctpCauseCodes","WebRtcStreamTransport","webRtcConnectionManager","_webRtcConnectionManager","_webRtcConnection","_channel","_addChannel","_handleDataChannelError","errorDetail","sdpLineNumber","httpRequestStatusCode","sctpCauseCode","receivedAlert","sentAlert","columnNumber","WebRtcStreamTransportFactory","OscarFactory","streamingUrlPath","ptzUrlPath","audioRendererFactory","createPtzController","createFisheyePtzController","ObjectUrlManager","PriorityQueue","comparator","_heap","_comparator","_greater","_swap","_siftUp","_siftDown","maxChild","poppedValue","NvrManager","nvrConnector","_getNewQueue","_drainQueue","priority","hasExpired","onConnected","onConnectFailed","AdcNvrConnection","webSocketFactory","_webSocketFactory","_username","_password","_allowWebrtc","getAxiosParams","requestPath","finalConfig","post","put","getAdcNvrConnector","typeListeners","defaultPrevented","queueMicrotask","TimeUnitsPerMillisecond","TimeUnitsPerMinute","TimeUnitsPerHour","TimeUnitsPerDay","usecVal","totalHours","hourPart","minutePart","secondPart","millisecondPart","microsecondPart","precision","pad","fromParts","MillisecondsPerDay","CalendarDate","dayNumberOrYear","_dayNumber","ymdToDayNumber","yearMonthDay","dayNumberToYmd","dayNumber","midnight","firstOfMonth","lastOfMonth","plusMonths","plusDays","minusDays","modMonth","newMonth","newYear","minusMonths","getUTCFullYear","getUTCMonth","yearOrValue","microseconds","calendarDate","timeOfDay","timeOrDuration","fromDateAndTime","SimpleTimeProvider","fun","_delay","_handler","_repeat","_timerChanged","_localHandler","_sequence","_handleExpiry","tempHandler","tempRepeat","_resolve","_reject","tempResolve","tempReject","FATAL","ERROR","WARNING","NOTICE","INFO","LEVEL_NAMES","DEFAULT_LEVEL","LoggerNode","writers","nodeLevel","write","levelName","timeStr","makeLogLine","writeRaw","addWriter","clearWriters","resetLevel","LogRegistry","rootLogger","loggerMap","getLogger","setGlobalLevel","setLevel","clearLevels","ConsoleLogWriter","WebSocketLogWriter","_webSocket","WebSocket","_bufferedLines","CONNECTING","OPEN","LogConfig","configUrl","writerType","refreshMsecs","scheduled","startAutoRefresh","scheduleAutoRefresh","stopAutoRefresh","doAutoRefresh","processConfig","getLocalStorageConfig","newWriterType","scheme","levelFromString","LOG_KEY_PREFIX","fatal","WebSocketFactory","_arrayBuffer","_bufferOffset","_end","_fail","_checkRead","getUint16","getUint32","high","low","bufOrLength","canWrite","_checkWrite","MovingAverage","_alpha","_average","_variance","variance","diffFromAverage","rangeEquals","range1","range2","__SENTRY_DEBUG__","exceptionFromError","frames","parseStackFrames","extractMessage","stacktrace","eventFromError","popSize","framesToPop","reactMinifiedRegexp","getPopSize","eventFromUnknownInput","syntheticException","addExceptionMechanism","eventFromString","isUnhandledRejection","isDOMError","isDOMException","domException","addExceptionTypeValue","isEvent","normalizeDepth","getNonErrorObjectExceptionValue","extra","__serialized__","normalizeToSize","eventFromPlainObject","synthetic","__sentry_template_string__","__sentry_template_values__","logentry","extractExceptionKeysForMessage","captureType","getObjectClassName","ignoreOnError","shouldIgnoreOnError","__sentry_wrapped__","getOriginalFunction","sentryWrapped","wrappedArguments","withScope","markFunctionWrapped","addNonEnumerableProperty","INTEGRATION_NAME","convertIntegrationFnToClass","preprocessEvent","applyAggregateErrorsToEvent","maxValueLength","hasTracingEnabled","maybeOptions","__SENTRY_TRACING__","enableTracing","ctx","spanTimeInputToSeconds","normalizeContext","parentSpan","getSpan","startChild","getCurrentScope","SpanRecorder","maxlen","_maxlen","spans","span","spanRecorder","Span","spanContext","_traceId","uuid4","_spanId","instrumenter","_sampled","sampled","traceFlags","TRACE_FLAG_SAMPLED","TRACE_FLAG_NONE","childSpan","opStr","nameStr","spanToJSON","idStr","logMessage","_logMessage","setTag","setData","setAttributes","setStatus","setHttpStatus","httpStatus","spanStatus","spanStatusfromHttpCode","setName","toTraceparent","spanToTraceHeader","toContext","_getData","updateWithContext","getTraceContext","spanToTraceContext","getSpanJSON","start_timestamp","hasData","hasAttributes","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","Transaction","transactionContext","_measurements","_contexts","_hub","_trimEnd","incomingDynamicSamplingContext","_frozenDynamicSamplingContext","spanMetadata","initSpanRecorder","setMeasurement","setMetadata","newMetadata","timestampInS","_finishTransaction","getDynamicSamplingContext","getDynamicSamplingContextFromSpan","setHub","finishedSpans","measurements","TRACING_DEFAULTS","finalTimeout","heartbeatInterval","IDLE_TRANSACTION_FINISH_REASONS","IdleTransactionSpanRecorder","_pushActivity","_popActivity","transactionSpanId","originalEnd","IdleTransaction","_idleHub","_idleTimeout","_finalTimeout","_heartbeatInterval","_onScope","activities","_heartbeatCounter","_finished","_idleTimeoutCanceledPermanently","_beforeFinishCallbacks","_finishReason","setSpan","_restartIdleTimeout","endTimestampInS","spanStartedBeforeTransactionFinish","timeoutWithMarginOfError","spanEndedBeforeFinalTimeout","stringifiedSpan","getTransaction","registerBeforeFinishCallback","pushActivity","popActivity","_pingHeartbeat","cancelIdleTimeout","restartOnChildSpanChange","_idleTimeoutID","setFinishReason","_beat","heartbeatString","_prevHeartbeatString","getActiveTransaction","maybeHub","errorsInstrumented","sampleTransaction","samplingContext","tracesSampler","parentSampled","tracesSampleRate","traceHeaders","_startTransaction","customSamplingContext","configInstrumenter","transactionInstrumenter","_experiments","maxSpans","startIdleTransaction","onScope","bindReporter","reportAllChanges","prevValue","forceReport","getNavigationEntry","__WEB_VITALS_POLYFILL__","getEntriesByType","getNavigationEntryFromPerformanceTiming","timing","navigationEntry","entryType","navigationStart","getActivationStart","navEntry","activationStart","initMetric","navigationType","prerendering","rating","observe","PerformanceObserver","supportedEntryTypes","po","getEntries","onHidden","onHiddenOrPageHide","onCLS","onReport","sessionValue","sessionEntries","handleEntries","hadRecentInput","firstSessionEntry","lastSessionEntry","stopListening","takeRecords","firstHiddenTime","getVisibilityWatcher","onFID","visibilityWatcher","handleEntry","processingStart","reportedMetricIDs","onLCP","lastEntry","instrumented","_previousCls","_previousFid","_previousLcp","addPerformanceInstrumentationHandler","addHandler","durationThreshold","triggerHandlers","instrumentPerformanceObserver","getCleanupCallback","typeHandlers","getFunctionName","instrumentCls","instrumentFid","instrumentLcp","addMetricObserver","instrumentFn","previousValue","isMeasurementValue","_startChild","MAX_INT_AS_BYTES","msToSec","getBrowserPerformanceAPI","_lcpEntry","_clsEntry","_performanceCursor","startTrackingWebVitals","mark","fidCallback","timeOrigin","clsCallback","lcpCallback","_addPerformanceNavigationTiming","eventEnd","setResourceEntrySizeData","dataKey","entryVal","DEFAULT_TRACE_PROPAGATION_TARGETS","defaultRequestInstrumentationOptions","traceFetch","traceXHR","enableHTTPTimings","tracingOrigins","tracePropagationTargets","instrumentOutgoingRequests","shouldCreateSpanForRequest","shouldCreateSpan","shouldAttachHeadersWithTargets","stringMatchesSomePattern","shouldAttachHeaders","addFetchInstrumentationHandler","handlerData","createdSpan","spanOrigin","fetchData","shouldCreateSpanResult","__span","contentLength","contentLengthNum","requestSpan","getPropagationContext","sentryTraceHeader","generateSentryTraceHeader","sentryBaggageHeader","dynamicSamplingContextToSentryBaggageHeader","isInstanceOf","newHeaders","BAGGAGE_HEADER_NAME","existingBaggageHeader","baggage","newBaggageHeaders","addTracingHeadersToFetchRequest","instrumentFetchRequest","addHTTPTimings","addXhrInstrumentationHandler","sentryXhrData","SENTRY_XHR_DATA_KEY","__sentry_own_request__","__sentry_xhr_span_id__","status_code","setHeaderOnXhr","xhrCallback","nextHopProtocol","initiatorType","isPerformanceResourceTiming","resourceTiming","extractNetworkProtocol","timingSpanData","getAbsoluteTime","redirectStart","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","responseEnd","resourceTimingEntryToSpanData","DEFAULT_BROWSER_TRACING_OPTIONS","markBackgroundTransactions","startTransactionOnLocationChange","startingUrl","enableLongTask","_hasSetTracePropagationTargets","getMainCarrier","__SENTRY__","extensions","addGlobalErrorInstrumentationHandler","addGlobalUnhandledRejectionInstrumentationHandler","addTracingExtensions","_collectWebVitals","enableInteractions","htmlTreeAsString","getComponentName","setupOnce","_getCurrentHub","instrumentRouting","clientOptionsTracePropagationTargets","_createRouteTransaction","onStartRouteTransaction","_registerInteractionListener","beforeNavigate","isPageloadTransaction","sentryTrace","getMetaContent","traceparentData","tracingContextFromHeaders","expandedContext","modifiedContext","finalContext","_latestRouteName","sourceFromData","sourceFromMetadata","_latestRouteSource","idleTransaction","setPropagationContext","spanIsSampled","performanceEntries","responseStartTimestamp","requestStartTimestamp","_addRequest","_addNavigationSpans","measureStartTimestamp","measureEndTimestamp","_addMeasureSpans","firstHidden","shouldRecord","resourceName","renderBlockingStatus","_addResourceSpans","effectiveType","rtt","deviceMemory","hardwareConcurrency","_trackNavigator","oldValue","measurementTimestamp","fidMark","cls","measurementName","sources","_tagMetricInfo","addPerformanceEntries","inflightInteractionTransaction","registerInteractionTransaction","currentTransaction","metaName","metaTag","getDomElement","windowIntegrations","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","__sentry_instrumentation_handlers__","handlerForType","refCount","originalRemoveEventListener","globalListener","getEventTarget","isContentEditable","shouldSkipDOMEvent","_sentryId","isSimilarToLastCapturedEvent","fragment","MAX_ALLOWED_STRING_LENGTH","setup","addConsoleInstrumentationHandler","breadcrumb","severityLevelFromString","safeJoin","addBreadcrumb","_getConsoleBreadcrumbHandler","keyAttrs","maxStringLength","_isEvent","_getDomBreadcrumbHandler","maybeInstrument","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","parsedLoc","parsedFrom","parsedTo","_getHistoryBreadcrumbHandler","getEventDescription","_getSentryBreadcrumbHandler","dedupeIntegration","previousEvent","processEvent","currentEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","_isSameMessageEvent","previousException","_getExceptionFromEvent","currentException","_isSameExceptionEvent","_shouldDropEvent","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","fingerprint","previousFingerprint","onunhandledrejection","stackTraceLimit","isString","_enhanceEventWithInitialFrame","_eventFromIncompleteOnError","_installGlobalOnErrorHandler","globalHandlerLog","e2","_getUnhandledRejectionError","_installGlobalOnUnhandledRejectionHandler","ev0","ev0s","ev0sf","getLocationHref","httpContextIntegration","referrer","Referer","DEFAULT_EVENT_TARGET","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","originalSend","wrapOptions","originalFunction","globalObject","wrappedEventHandler","originalEventHandler","DEFAULT_ENVIRONMENT","getGlobalEventProcessors","getGlobalSingleton","addGlobalEventProcessor","notifyEventProcessors","processors","processor","final","parseEventHintOrCaptureContext","captureContext","configureScope","getStackTop","currentScope","makeSession","getUser","currentSession","endSession","setSession","closeSession","_sendSessionUpdate","API_VERSION","DEFAULT_BREADCRUMBS","assignedScope","assignedIsolationScope","_version","Scope","setClient","_stack","_isolationScope","isOlderThan","pushScope","clone","getStack","popScope","maybePromiseResult","_lastEventId","lastEventId","beforeBreadcrumb","maxBreadcrumbs","mergedBreadcrumb","finalBreadcrumb","setUser","setTags","setExtras","extras","setExtra","oldHub","makeMain","_callExtensionMethod","shouldSendDefaultPii","sendDefaultPii","_withClient","getHubFromCarrier","setHubOnCarrier","acs","getGlobalHub","installedIntegrations","userIntegrations","isDefaultInstance","arrayify","finalIntegrations","integrationsByName","currentInstance","existingInstance","filterDuplicates","debugIndex","debugInstance","integrationIndex","originalFunctionToString","FunctionToString","functionToStringIntegration","Function","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","InboundFilters","_hint","internalOptions","allowUrls","denyUrls","ignoreErrors","disableErrorDefaults","ignoreTransactions","disableTransactionDefaults","ignoreInternal","_mergeOptions","_isSentryError","possibleMessages","lastException","_getPossibleEventMessages","_isIgnoredError","_isIgnoredTransaction","_getEventFilterUrl","_isDeniedUrl","_isAllowedUrl","_getLastValidUrl","oO","globalScope","_notifyingListeners","_scopeListeners","_breadcrumbs","_attachments","_user","_tags","_extra","_sdkProcessingMetadata","_propagationContext","generatePropagationContext","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","_client","addScopeListener","_notifyScopeListeners","getRequestSession","setRequestSession","requestSession","setFingerprint","setTransactionName","updatedScope","maxCrumbs","breadcrumbs","getLastBreadcrumb","clearBreadcrumbs","addAttachment","getAttachments","getScopeData","clearAttachments","eventProcessors","transactionName","applyToEvent","additionalEventProcessors","applyScopeDataToEvent","setSDKProcessingMetadata","getGlobalScope","startingTime","sid","did","abnormal_mechanism","ip_address","ipAddress","user_agent","sessionToJSON","public_key","segment","user_segment","txn","v7FrozenDsc","maybeSampleRate","sample_rate","jsonSpan","applyDataToEvent","applySpanToEvent","applyFingerprintToEvent","mergedBreadcrumbs","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeScopeData","mergeData","mergePropOverwrite","mergeVal","normalizeMaxBreadth","dist","truncate","applyClientOptions","integrationNames","applyIntegrationsMetadata","debugIdMap","_sentryDebugIds","debugIdStackFramesCache","cachedDebugIdStackFrameCache","debugIdStackParserCache","filenameDebugIdMap","debugIdStackTrace","parsedStack","cachedParsedStack","stackFrame","debug_id","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","isolationData","finalScopeData","abs_path","debug_meta","code_file","applyDebugMeta","depth","maxBreadth","normalizeEvent","hintIsScopeOrFunction","captureContextKeys","hintIsScopeContext","ensureTimestampInSeconds","spanIsSpanClass","CaptureConsole","levels","CONSOLE_LEVELS","consoleHandler","exceptionFromErrorImplementation","parser","maxValueLimit","aggregateExceptionsFromError","prevExceptions","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","is_exception_group","exception_id","parentId","parent_id","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","MAX_BAGGAGE_STRING_LENGTH","baggageHeaderToDynamicSamplingContext","baggageHeader","baggageObject","currBaggageObject","baggageHeaderToObject","objectKey","objectValue","baggageEntry","newBaggageHeader","objectToBaggageHeader","dscKey","dscValue","keyOrValue","getGlobalObject","DEFAULT_MAX_STRING_LENGTH","currentElem","MAX_TRAVERSE_HEIGHT","sepLength","nextStr","_htmlElementAsString","classes","HTMLElement","dataset","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","instrumentConsole","originalConsoleMethod","originalConsoleMethods","instrumentFetch","supportsNativeFetch","originalFetch","fetchArgs","getUrlFromResource","hasProp","parseFetchArgs","finishedHandlerData","erroredHandlerData","_oldOnErrorHandler","instrumentError","__SENTRY_LOADER__","__SENTRY_INSTRUMENTED__","_oldOnUnhandledRejectionHandler","instrumentUnhandledRejection","lastHref","instrumentHistory","chrome","isChromePackagedApp","hasHistoryApi","pushState","supportsHistory","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","instrumentXHR","xhrproto","originalOpen","request_headers","onreadystatechangeHandler","xhrInfo","readyStateArgs","setRequestHeaderArgs","objectToString","wat","isBuiltin","isElement","isRegExp","isSyntheticEvent","_e","isVueViewModel","__isVue","_isVue","wrappedFuncs","wrappedLevels","makeLogger","gbl","msCrypto","getRandomByte","getRandomValues","typedArray","getFirstException","firstException","newMechanism","currentMechanism","mergedData","__sentry_captured__","maxProperties","visit","maxSize","encodeURI","utf8Length","memo","hasWeakSet","inner","memoBuilder","unmemoize","stringified","_events","objName","getConstructorName","stringifyValue","remainingDepth","valueWithToJSON","numAdded","visitable","convertToPlainObject","visitKey","visitValue","replacementFactory","o_O","__sentry_original__","getOwnProperties","newObj","serializeEventTarget","CustomEvent","extractedProps","includedKeys","_dropUndefinedKeys","memoizationMap","memoVal","validSeverityLevels","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","parsers","sortedParsers","skipFirst","lines","cleanedLine","localStack","stripSentryFramesAndReverse","defaultFunctionName","delimiter","testString","requireExactStringMatch","isMatchingPattern","EdgeRuntime","doc","States","executor","__init","__init2","__init3","__init4","PENDING","_handlers","onfulfilled","onrejected","_executeHandlers","onfinally","_setResult","RESOLVED","REJECTED","cachedHandlers","ONE_SECOND_IN_MS","approxStartingTimeOrigin","createUnixTimestampInSecondsFunc","_browserPerformanceTimeOriginMode","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStartDelta","TRACEPARENT_REGEXP","traceparent","extractTraceparentData","sampledString","isGlobalObj","creator","_slicedToArray","_classCallCheck","_createClass","createExtendedExponentialRampToValueAutomationEvent","insertTime","createExtendedLinearRampToValueAutomationEvent","getTargetValueAtTime","valueAtStartTime","isExponentialRampToValueAutomationEvent","isLinearRampToValueAutomationEvent","isAnyRampToValueAutomationEvent","isSetValueAutomationEvent","isSetValueCurveAutomationEvent","_getValueOfAutomationEventAtIndexAtTime","automationEvents","getEndTimeAndValueOfPreviousAutomationEvent","currentAutomationEvent","nextAutomationEvent","isCancelAndHoldAutomationEvent","isCancelScheduledValuesAutomationEvent","getEventTime","getExponentialRampValueAtTime","getLinearRampValueAtTime","getValueCurveValueAtTime","interpolateValue","isSetTargetAutomationEvent","_automationEvents","_currenTime","_defaultValue","removedAutomationEvent","lastAutomationEvent","startValue","truncatedAutomationEvent","fraction","factor","previousAutomationEvent","persistentAutomationEvent","remainingAutomationEvents","firstRemainingAutomationEvent","indexOfNextEvent","indexOfCurrentEvent","_getEndTimeAndValueOf","_getEndTimeAndValueOf2","_getEndTimeAndValueOf3","_getEndTimeAndValueOf4","_startTime","toStringTag","getFirstMatch","getSecondMatch","matchAndReturnConst","getWindowsVersionName","getMacOSVersionName","getAndroidVersionName","getVersionPrecision","compareVersions","getBrowserAlias","BROWSER_ALIASES_MAP","getBrowserTypeByAlias","BROWSER_MAP","ENGINE_MAP","OS_MAP","PLATFORMS_MAP","Bada","BlackBerry","Chromium","Electron","Epiphany","Focus","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","amazon_silk","android","bada","blackberry","chromium","electron","epiphany","firefox","googlebot","google_search","ie","k_meleon","maxthon","edge","mz","naver","opera","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","safari","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","tv","WindowsPhone","Windows","MacOS","iOS","WebOS","Linux","ChromeOS","PlayStation4","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","getParser","getResult","_ua","parsedResult","getUA","parseBrowser","describe","getBrowser","getBrowserName","getBrowserVersion","getOS","os","parseOS","getOSName","getOSVersion","getPlatform","parsePlatform","getPlatformType","getEngine","parseEngine","getEngineName","satisfies","isOS","isPlatform","h","compareVersion","is","versionName","targetLength","_default","getDefaultOptions","defaultOptions","setDefaultOptions","_interopRequireDefault","_index2","_index3","_index4","_index5","_index6","_index7","formatTimezoneShort","dirtyDelimiter","absOffset","formatTimezoneWithOptionalMinutes","formatTimezone","G","localize","signedYear","ordinalNumber","Y","signedWeekYear","weekYear","twoDigitYear","R","isoWeekYear","quarter","M","L","week","I","isoWeek","D","dayOfYear","dayOfWeek","getUTCDay","localDayOfWeek","isoDayOfWeek","dayPeriodEnumValue","getUTCHours","dayPeriod","B","H","K","getUTCMinutes","getUTCSeconds","S","X","_localize","timezoneOffset","_originalDate","O","originalDate","T","numberOfDigits","getUTCMilliseconds","fractionalSeconds","dateLongFormatter","formatLong","timeLongFormatter","P","dateTimeFormat","matchResult","datePattern","timePattern","utcDate","setUTCFullYear","setUTCMonth","setUTCHours","MILLISECONDS_IN_DAY","MILLISECONDS_IN_WEEK","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","_options$firstWeekCon","_options$locale","_options$locale$optio","_defaultOptions$local","_defaultOptions$local2","firstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","isProtectedDayOfYearToken","protectedDayOfYearTokens","isProtectedWeekYearToken","protectedWeekYearTokens","throwProtectedError","required","setUTCDate","fourthOfJanuary","_options$weekStartsOn","firstWeek","dirtyNumber","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","formatDistance","tokenValue","addSuffix","comparison","_date","_baseDate","rem100","narrow","abbreviated","wide","am","pm","noon","morning","afternoon","evening","night","parsePattern","parseResult","getTimezoneOffsetInMilliseconds","getUTCISOWeek","startOfUTCISOWeek","getUTCISOWeekYear","startOfUTCISOWeekYear","getUTCWeek","startOfUTCWeek","getUTCWeekYear","startOfUTCWeekYear","roundingMap","defaultRoundingMethod","getRoundingMethod","MILLISECONDS_IN_HOUR","addMilliseconds","MILLISECONDS_IN_MINUTE","dayOfMonth","endOfDesiredMonth","setFullYear","daysInWeek","millisecondsInMinute","millisecondsInHour","millisecondsInSecond","secondsInHour","secondsInMinute","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","differenceInMilliseconds","roundingMethod","addLeadingZeros","lightFormatters","getUTCDayOfYear","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","_options$locale2","_options$locale2$opti","_options$locale3","_options$locale3$opti","_defaultOptions$local3","_defaultOptions$local4","formatStr","subMilliseconds","formatterOptions","firstCharacter","longFormatter","longFormatters","matched","formatter","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","getYear","dirtyDateToCompare","dateToCompare","isBefore","_typeof","dirtyLeftDate","dirtyRightDate","dateLeftStartOfDay","dateRightStartOfDay","dirtyDatesArray","datesArray","_inherits","subClass","superClass","_setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","sham","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","Constructor","_defineProperties","protoProps","staticProps","Setter","_utcDate","ValueSetter","_Setter","validateValue","subPriority","DateToSystemTimezoneSetter","_Setter2","_super2","timestampIsSet","convertedDate","EraParser","_Parser","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","isLeapYearIndex","YearParser","isTwoDigitYear","normalizedTwoDigitYear","LocalWeekYearParser","ISOWeekYearParser","_flags","firstWeekOfYear","ExtendedYearParser","QuarterParser","StandAloneQuarterParser","MonthParser","StandAloneMonthParser","LocalWeekParser","dirtyWeek","setUTCWeek","ISOWeekParser","dirtyISOWeek","setUTCISOWeek","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","DateParser","isLeapYear","DayOfYearParser","setUTCDay","dirtyDay","DayParser","LocalDayParser","wholeWeekDays","StandAloneLocalDayParser","ISODayParser","setUTCISODay","AMPMParser","AMPMMidnightParser","DayPeriodParser","Hour1to12Parser","isPM","Hour0to23Parser","Hour0To11Parser","Hour1To24Parser","MinuteParser","setUTCMinutes","SecondParser","setUTCSeconds","FractionOfSecondParser","setUTCMilliseconds","ISOTimezoneWithZParser","ISOTimezoneParser","TimestampSecondsParser","TimestampMillisecondsParser","_createForOfIteratorHelper","allowArrayLike","it","minLen","_arrayLikeToArray","_unsupportedIterableToArray","F","normalCompletion","didErr","_e2","arr2","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","formatString","subFnOptions","setters","usedTokens","_loop","incompatibleTokens","incompatibleToken","usedToken","fullToken","_ret","uniquePrioritySetters","setterArray","_step2","_iterator2","dirtyDayOfMonth","currentDay","getDay","dirtyHours","dirtyMilliseconds","dirtyMinutes","dirtyMonth","dateWithDesiredMonth","daysInMonth","monthIndex","lastDayOfMonth","getDaysInMonth","setSeconds","dirtySeconds","setYear","dirtyYear","startOfYear","cleanDate","subMinutes","argStr","_index9","_index10","_index11","_index8","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getKeys","getOwnPropertySymbols","propertyIsEnumerable","getEnumerableOwnPropertySymbols","propertyIsOnObject","arrayMerge","sourceIsArray","propertyIsUnsafe","customMerge","getMergeFunction","mergeObject","deepmerge_1","pack","ar","BrowserInfo","NodeInfo","SearchBotDeviceInfo","bot","BotInfo","ReactNativeInfo","SEARCHBOT_OS_REGEX","REQUIRED_VERSION_PARTS","userAgentRules","operatingSystemRules","parseUserAgent","product","ua","matchedRule","uaMatch","matchUserAgent","versionParts","ii","createVersionParts","detectOS","searchBotMatch","EmberEnvironment","Environment","reportUncaughtRejection","defer","globalDebuggingEnabled","DEBUG_TASKS","EMBER_ENVIRONMENT","deferable","BoundedPolicy","maxConcurrency","CANCELLED","makeCancelState","DropReducer","remainingSlots","STARTED","DropPolicy","makeReducer","EnqueuedReducer","QUEUED","EnqueuedPolicy","TYPE_CANCELLED","TYPE_STARTED","TYPE_QUEUED","KeepLatestReducer","numToCancel","KeepLatestPolicy","numRunning","numQueued","totalRunning","RestartableReducer","RestartablePolicy","LAST_APPLIED_TAGS","schedulerPolicy","stateTracker","taskInstances","initialTaskInstances","startingInstances","filterFinishedTaskInstances","reducer","finalTaskInstances","taskInstance","setTaskInstanceExecutionState","computeFinalStates","applyState","taskState","stateFor","executorState","onCompletion","hasStarted","counted","onPerformed","onStart","onRunning","onQueued","taskable","onState","numPerformedInc","RefreshState","completionState","lastRunning","lastComplete","COMPLETION_SUCCESS","lastSuccessful","COMPLETION_ERROR","lastErrored","COMPLETION_CANCEL","lastCanceled","lastIncomplete","lastPerformed","recurseTaskGroups","applyStateFrom","CURRENT_REFRESH_TAGS","StateTracker","currentTag","computeRecursiveState","forEachState","lastState","taskGroup","NULL_STATE","NullStateTracker","Scheduler","stateTrackingEnabled","cancelRequest","cancelations","guids","cancelation","onFinalize","scheduleRefresh","SINGLETON_REDUCER","UnboundedPolicy","MODIFIER_REGISTRY","setBufferPolicy","evented","setEvented","setDebug","setGroup","keepLatest","setMaxConcurrency","onStateCallback","setOnState","registerModifier","taskDefinition","setState","_processModifierOptions","createTask","getTaskOptions","Task$1","generatorFactory","createTaskGroup","TaskGroup$1","getModifier","hasModifier","getScheduler","_onStateCallback","_taskGroupPath","_schedulerPolicyClass","_maxConcurrency","_debug","hasEnabledEvents","_hasEnabledEvents","enabledModifiers","_enabledModifiers","modifierOptions","policy","_hasSetBufferPolicy","assertUnsetBufferPolicy","_hasSetConcurrencyConstraint","assertModifiersNotMixedWithGroup","setTaskDefinition","TASK_CANCELATION_NAME","CANCEL_KIND_EXPLICIT","CANCEL_KIND_YIELDABLE_CANCEL","CANCEL_KIND_LIFESPAN_END","CANCEL_KIND_PARENT_CANCEL","CancelRequest","finalize","COMPLETION_PENDING","GeneratorStepResult","GeneratorState","resolvedValue","iteratorMethod","getIterator","PERFORM_TYPE_DEFAULT","PERFORM_TYPE_UNLINKED","PERFORM_TYPE_LINKED","CANCEL_RETURN_VALUE_SENTINEL","TASK_INSTANCE_STACK","getRunningInstance","TaskInstanceExecutor","generatorState","INITIAL_STATE","disposers","finalizeCallbacks","proceedSync","YIELDABLE_CONTINUE","onStarted","requestCancel","proceedWithCancelAsync","finalizeWithCancel","proceedChecked","yieldResumeType","advanceIndex","YIELDABLE_CANCEL","proceedAsync","YIELDABLE_RETURN","dispose","handleResolvedReturnedValue","handleResolvedContinueValue","resumeValue","beforeIndex","stepResult","generatorStep","handleYieldedValue","YIELDABLE_THROW","handleYieldedUnknownThenable","thenable","resumeIndex","yieldedValue","addDisposer","cancelableSymbol","yieldableSymbol","invokeYieldable","proceedWithSimpleValue","maybeDisposer","disposer","nextValue","_expectsLinkedYield","performType","maybeResolveDefer","runFinalizeCallbacks","maybeThrowUnhandledTaskErrorLater","asyncErrorsHandled","isSuccessful","finalizeShared","cancelReason","formatCancelReason","debugEnabled","dispatchFinalizeEvents","onCancel","onYielded","proceed","getPerformType","detectSelfCancelLoop","parentCancelRequest","selfCancelLoopWarning","DEFAULT_STATE","performCount","Taskable","TaskLinkProxy","linkedObject","_performShared","Task","_perform","linked","unlinked","_clone","_curry","_curryArgs","fullArgs","_taskInstanceFactory","_isAlive","_taskInstanceOptions","_linkedObject","guidId","cancelRequestKind","_resetState","isQueued","isIdle","YieldableState","_taskInstance","_resumeIndex","getTaskInstance","throw","Yieldable","onYield","_deferable","_toPromise","thinInstance","resumeType","taskHelperClosure","helperName","taskMethod","outerArgs","innerArgs","EmberScheduler","handlerCounter","registerOnPrototype","addListenerOrObserver","taskName","handlerName","makeTaskCallback","ensureArray","possibleArr","eventNames","addCancelEvents","propertyPaths","addObserverKeys","addPerformEvents","TaskFactory","TaskFactory$1","EncapsulatedTask","taskObj","TaskGroup","_cancelEventNames","_observes","_eventNames","TaskProperty","_setupEmberKVO","taskFn","TRACKED_INITIAL_TASK_STATE","TASKABLE_MIXIN","BaseTaskInstance","parentTaskInstance","isDropped","TaskInstance","_recomputeState","getName","childName","eventNamespace","allArgs","TRACKED_INITIAL_INSTANCE_STATE","taskFactorySymbol","propertyModifiers","taskGroupPath","callSuperSetup","cancelOn","observes","setDecorator","taskComputed","cp","currentTaskInstanceSymbol","_encapsulatedTaskStates","_encapsulatedTaskInstanceProxies","_getEncapsulatedTaskClass","encapsulatedTaskImplClass","_encapsulatedTaskImplClass","taskInstanceProxy","encapsulatedTaskImpl","_wrappedEncapsulatedTaskInstance","ownKeys","_performCount","derivedState","applyTracked","initial","propDesc","trackMixin","maybeReportError","buildTask","contextFn","bufferPolicyName","optionsWithBufferPolicy","EmberYieldable","TimeoutYieldable","ms","timerId","taskFromPropertyDescriptor","factoryClass","taskGroupPropertyDescriptor","taskGroups","decoratorWithParams","descriptorFn","possibleDesc","isFieldDescriptor","createDecorator","baseOptions","userOptions","createTaskDecorator","createTaskGroupDecorator","lastInstance","restartableTask","taskFnOrProtoOrDecoratorOptions","task$1","taskProperty","buildClassicTaskProperty","getValues","castForPromiseHelper","castable","taskAwareVariantOf","awaitable","awaitables","arrOrHash","castAwaitables","hasCancelled","Promise$1","WaitForQueueYieldable","waitForQueue","candidateSelectors","candidateSelector","NoElement","getRootNode","ownerDocument","getCandidates","includeContainer","getCandidatesIteratively","elementsToCheck","assigned","assignedElements","nestedCandidates","shadowRoot","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","getTabindex","isScope","tabIndex","sortOrderedTabbables","documentOrder","isInput","isZeroArea","_node$getBoundingClie","isNodeMatchingSelectorFocusable","isHiddenInput","displayCheck","nodeUnderDetails","nodeRootHost","nodeIsAttached","originalNode","rootNode","assignedSlot","getClientRects","isHidden","child","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isRadio","radioSet","radioScope","form","queryRadios","CSS","escape","getCheckedRadio","isTabbableRadio","isNonTabbableRadio","isValidShadowRootTabbable","shadowHostNode","regularTabbables","orderedTabbables","candidateTabindex","sortable","tabbable","isTabbable","focusableCandidateSelector","isFocusable","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","trapIndex","deactivateTrap","unpause","valueOrHandler","getActualTarget","createFocusTrap","_objectSpread2","delayInitialFocus","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","delayInitialFocusTimer","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","getNodeForOption","optionValue","getInitialFocusNode","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbableOptions","focusableNodes","lastTabbableNode","nextTabbableNode","nodeIdx","tryFocus","preventScroll","isSelectableInput","getReturnFocusNode","previousActiveElement","checkPointerDown","clickOutsideDeactivates","returnFocus","allowOutsideClick","checkFocusIn","targetContained","Document","stopImmediatePropagation","checkKey","isEscapeEvent","isTabEvent","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","lastOfGroupIndex","_destinationGroupIndex","checkTab","checkClick","addListeners","removeListeners","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","cap","focusTrap","focusTrapOptions","shouldSelfFocus","additionalElements","_createFocusTrap","initialFocus","createFocusTrap$1","getTask","taskOrName","NULL_TIMER_ID","registeredTimers","getTimers","destroyable","timers","cancelId","cancelTask","getTimersDisposable","taskArgs","throttleTask","throttleArgs","registeredDebounces","debounceArgs","pendingDebounces","debounces","debouncedTask","cancelDebounce","modifierClass","installElement$1","MANAGER","getDebugName","getDebugInstance","naiveFallback","__global__","EE","emitter","_eventsCount","clearEvent","ee","listenerCount","a3","a4","a5","prefixed","lastNumberWeakMap","TWO_TO_THE_POWER_OF_TWENTY_NINE","TWO_TO_THE_POWER_OF_THIRTY","LAST_NUMBER_WEAK_MAP","lastNumber","nextNumber","createGenerateUniqueNumber","createAddUniqueNumber","requestMediaPermissions_1","__importDefault","mod","requestVideoPermissions","requestAudioPermissions","bowser_1","browserName","errName","moment","defineLocale","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","meridiem","isLower","longDateFormat","LT","LTS","LL","LLL","LLLL","calendar","sameDay","nextDay","sameElse","future","past","ss","mm","hh","dd","MM","dayOfMonthOrdinalParse","ordinal","dow","doy","pluralForm","withoutSuffix","isFuture","weekdaysParseExact","postformat","symbolMap","preparse","numberMap","suffixes","relativeTimeWithPlural","forms","standalone","isFormat","period","ww","lastDigit","last2Digits","meridiemHour","monthsShortRegex","monthsParseExact","relativeTimeWithMutation","mutationTable","softMutation","mutation","monthsParse","monthsRegex","minWeekdaysParse","weekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","ll","lll","llll","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","mom","_calendarEl","monthsShortDot","invalidDate","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eras","abbr","until","eraYearOrdinalRegex","eraYearOrdinalParse","$0","$1","$2","isUpper","ezafeNumSuffix","eifelerRegelAppliesToNumber","units","translateSingular","special","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","numbersNouns","numberNoun","hundred","ten","numberAsNoun","hm","processHoursFunction","nominative","accusative","genitive","hookCallback","hooks","isObject","hasOwnProp","isObjectEmpty","isUndefined","arrLen","createUTC","createLocalOrUTC","utc","getParsingFlags","_pf","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","rfc2822","weekdayMismatch","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_f","_l","_tzm","_isUTC","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","isFunction","mergeConfigs","parentConfig","childConfig","zeroFill","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","localeData","formatMoment","expandFormat","makeFormatFunction","replaceLongDateFormatTokens","aliases","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","millisecond","quarters","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","W","isoweeks","isoweek","years","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","strictRegex","isStrict","getParseRegexForToken","regexEscape","p3","p4","absFloor","toInt","argumentForCoercion","coercedNumber","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","getSetYear","makeGetSet","keepTime","set$1","isUTC","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","getSetMonth","computeMonthsParse","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","createUTCDate","firstWeekOffset","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","matchMeridiem","_meridiemParse","kInput","_isPm","_meridiem","pos1","pos2","getSetHour","globalLocale","baseConfig","localeFamilies","commonPrefix","arr1","minl","loadLocale","oldLocale","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","calculateOffset","configFromArray","expectedWeekday","yearToUse","nowValue","_useUTC","currentDateArray","temp","weekdayOverflow","curWeek","createLocal","_week","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","isPm","meridiemFixWrap","erasConvertYear","prepareConfig","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","configFromObject","configFromInput","prototypeMin","prototypeMax","pickBy","moments","ordering","unitHasDecimal","orderLen","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","setTime","local","getDateOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","positiveMomentsDifference","inp","createAdder","tmp","addSubtract","isAdding","invalid","subtract","isMomentInput","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","propertyLen","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","preParsePostFormat","isCalendarSpec","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","inputString","humanize","fromNow","toNow","invalidAt","localInput","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","prioritizedLen","toObject","keepOffset","inspect","isLocal","unix","creationData","eraName","eraNarrow","eraAbbr","eraYear","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","_relativeTime","pastFuture","_eras","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","availableBytes","dataViews","effectiveByteLength","truncatedBuffers","consumedByteLength","truncatedByteOffset","byteLengthOfDataView","_byteLengthOfDataView","_buffers","_byteLength","_byteOffset","_dataViews","_internalBuffer","getFloat64","getInt16","getInt32","_this$_findDataViewWi","_findDataViewWithOffset","_this$_findDataViewWi2","byteOffsetOfDataView","getInt8","_this$_findDataViewWi3","_this$_findDataViewWi4","setFloat32","setFloat64","setInt16","setInt32","_this$_findDataViewWi5","_this$_findDataViewWi6","setInt8","_this$_findDataViewWi7","_this$_findDataViewWi8","byteOffsetOfNextDataView","hasMoment","hasEventListeners","sto","addEvent","attachEvent","removeEvent","detachEvent","hasClass","cn","addClass","removeClass","isWeekend","setToStartOfDay","compareDates","overwrite","fireEvent","createEventObject","adjustCalendar","bound","ariaLabel","reposition","setDefaultDate","firstWeekOfYearMinDays","formatStrict","minDate","maxDate","yearRange","showWeekNumber","pickWholeWeek","minYear","maxYear","minMonth","maxMonth","isRTL","yearSuffix","showMonthAfterYear","showDaysInNextAndPreviousMonths","enableSelectionDaysInNextAndPreviousMonths","numberOfMonths","mainCalendar","blurFieldOnSelect","i18n","previousMonth","nextMonth","onSelect","onOpen","onClose","onDraw","keyboardInput","renderDayName","renderDay","ariaSelected","hasEvent","isStartRange","isEndRange","renderWeek","yearDay","weekDay","dayInFirstWeek","dayShift","prevWeekDay","jan4th","daysBetween","renderRow","isRowSelected","renderTitle","refYear","randId","monthHtml","yearHtml","_o","isMinYear","isMaxYear","renderTable","renderHead","Pikaday","_onMouseDown","srcElement","prevMonth","blur","_c","_onChange","gotoMonth","gotoYear","_onKeyChange","adjustDate","_parseFieldValue","_onInputChange","firedBy","_onInputFocus","_onInputClick","_onInputBlur","pEl","_onClick","onchange","defDate","gotoDate","disableWeekends","disableDayFn","nom","setMinDate","setMaxDate","fallback","toDateString","getMoment","setMoment","preventOnSelect","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","adjustCalendars","newDay","gotoToday","setStartRange","setEndRange","force","_y","_m","adjustPosition","viewportHeight","clientRect","leftAligned","bottomAligned","pageYOffset","offsetLeft","offsetTop","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","cells","isWeekSelected","monthNumber","yearNumber","dayConfig","timeoutDuration","longerTimeoutBrowsers","called","functionToCheck","getStyleComputedProperty","defaultView","getParentNode","getScrollParent","_getStyleComputedProp","overflowX","overflowY","getReferenceNode","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","styles","sideA","sideB","getSize","getWindowSizes","getClientRect","offsets","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","isFixed","getFixedPositionOffsetParent","getBoundaries","popper","boundariesElement","boundaries","excludeScroll","relativeOffset","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","filteredAreas","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","modifiers","ends","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","attachToScrollParents","scrollParents","isBody","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","isNumeric","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","Defaults","basePlacement","shiftvariation","_data$offsets","isVertical","shiftOffsets","_extends","useHeight","fragments","frag","divider","splitRegex","ops","mergeWithPrevious","toValue","index2","parseOffset","transformProp","popperStyles","escapeWithReference","opSide","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","arrow","_data$offsets$arrow","flipped","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","subtractLength","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","arrowStyles","Popper","jquery","onLoad","PopperUtils","TrackedStorageImpl","_lastValue","_isEqual","tripleEq","createStorage","storage","lastValue","decorators","decorate","__decorate","readStorageFor","storages","dirtyStorageFor","existing","vals","TrackedWeakMap","TrackedSet","storageFor","TrackedWeakSet","_classPrivateFieldGet","privateMap","_classExtractFieldDescriptor","_classApplyDescriptorGet","ARRAY_GETTER_METHODS","ARRAY_WRITE_THEN_READ_METHODS","convertToInt","_collection","_storages","_readStorageFor","_dirtyStorageFor","iterable","mapfn","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","boundFns","nativelyAccessingLengthFromPushOrUnshift","_classPrivateMethodGet","_readStorageFor2","_dirtyStorageFor2","_globalThis","NativeWebSocket","MozWebSocket","websocket_version","W3CWebSocket","protocols","toPropertyKey","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arrayLikeToArray","_OverloadYield","decorator","OverloadYield","excluded","sourceKeys","objectWithoutPropertiesLoose","sourceSymbolKeys","AsyncGenerator","settle","asyncIterator","kindOf","thing","kindOfTest","typeOfTest","isArrayBuffer","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","isContextDefined","isTypedArray","TypedArray","isHTMLForm","reduceDescriptors","descriptors","getOwnPropertyDescriptors","reducedDescriptors","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","callbacks","asap","nextTick","isBuffer","isFormData","FormData","isArrayBufferView","isView","isBoolean","isStream","pipe","caseless","assignValue","targetKey","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","forEachEntry","matchAll","regExp","freezeMethods","toObjectSet","arrayOrString","toCamelCase","toFiniteNumber","generateString","alphabet","isSpecCompliantForm","toJSONObject","reducedValue","AxiosError","utils","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","predicates","formData","metaTokens","defaultVisitor","useBlob","convertValue","Buffer","isFlatArray","exposedHelpers","charMap","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","serializeFn","hashmarkIndex","use","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","buildPath","isNumericKey","arrayToObject","parsePropPath","transitional","transitionalDefaults","transformRequest","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","rawHeaders","parseHeaders","tokensRE","parseTokens","deleted","deleteHeader","formatHeader","targets","asStrings","accessor","accessors","defineAccessor","accessorName","arg1","arg2","arg3","buildAccessors","mapped","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","ERR_BAD_REQUEST","progressEventReducer","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","firstSampleTS","tail","chunkLength","startedAt","bytesCount","passed","speedometer","lastArgs","timer","lengthComputable","progressBytes","progress","estimated","progressEventDecorator","throttled","asyncDecorator","msie","urlParsingNode","originURL","resolveURL","requestURL","domain","secure","toGMTString","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","newConfig","btoa","unescape","isURLSameOrigin","xsrfValue","cookies","resolveConfig","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","signal","onloadend","responseHeaders","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","upload","aborted","parseProtocol","composeSignals","signals","AbortController","_asyncGeneratorDelegate","pump","streamChunk","readBytes","_x2","_x3","trackStream","onFinish","_onFinish","ReadableStream","pull","loadedBytes","highWaterMark","isFetchSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","knownAdapters","http","xhrAdapter","finished","composedSignal","stopTimeout","requestContentLength","getContentLength","getBodyLength","resolveBodyLength","contentTypeHeader","_request","isCredentialsSupported","isStreamResponse","responseContentLength","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators","deprecatedWarnings","validator","ERR_DEPRECATED","assertOptions","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","boolean","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","responseInterceptorChain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","HttpStatusCode","Continue","SwitchingProtocols","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","Unauthorized","PaymentRequired","Forbidden","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","createInstance","Cancel","spread","isAxiosError","formToJSON","getAdapter","newDateUTC","fullYear","typeToPos","dtfCache","patterns","timezoneZ","timezoneHH","timezoneHHMM","timezoneString","isUtcDate","absoluteOffset","validateTimezone","timeZoneString","validIANATimezoneCache","isValidTimezoneIANAString","toUtcDate","calcOffset","fixedOffset","utcGuess","o2","o3","fixOffset","dtf","testDateFormatted","hourCycleSupported","formatted","filled","partsOffset","hackyOffset","tzTokenizeDate","asUTC","asTS","over","tzIntlTimeZoneName","getDTF","partsTimeZone","tzNameMatch","hackyTimeZone","getTimeZoneOffset","timeZoneOffset","dirtyDelimeter","delimeter","tzFormattingTokensRegExp","dirtyOptions","precededByQuotedSection","replaced","dateFnsFormat","DEFAULT_ADDITIONAL_DIGITS","plainTime","YY","YYY","YYYY","YYYYY","MMDD","Www","WwwD","HH","HHMM","HHMMSS","tzPattern","additionalDigits","dateStrings","splitDateString","parseYearResult","patternYYY","patternYYYYY","yearString","restDateString","centuryString","parseYear","validateDate","validateDayOfYearDate","validateWeekDate","dayOfISOWeekYear","parseDate","validateTime","parseTime","offsetMilliseconds","resultDate","extendedOptions","cloneObject","__export","decorateClass","decorateFieldV1","decorateFieldV2","initializeDeferredDecorator","decorateMethodV1","decorateMethodV2","decoratePOJO","deferred","deferDecorator","_deferred$get","findDeferredDecorator","accum","pojo","decorated","decoratePojoField","_Object$getOwnPropert","extendStatics","__","SuppressedError"],"sourceRoot":""}